zOs/war/rexo130

}¢--- A540769.WK.REXX.O13(@) cre=2013-08-07 mod=2013-08-07-08.17.42 A540769 ----
say '@' symbol('@') @
@ = 'v=@'
say '@' symbol('@') @
say 'abc@efg' symbol('abc@efg') abc@efg
abc@efg = 'v=abc@efg'
say 'abc@efg' symbol('abc@efg') abc@efg
say '@123' symbol('@123') @123
@123 = 'v=@123'
say '@123' symbol('@123') @123
say '@abc@123@' symbol('@abc@123@') @abc@123@
@abc@123@ = 'v=@abc@123@'
say '@abc@123@' symbol('@abc@123@') @abc@123@
say 1@ 1a 'but are no variables |'
if 0 then
    1@=1a
drop @ abc@efg @123 @abc@123@
say 'm.@' symbol('m.@') m.@
m.@ = 'v=m.@'
say 'm.@' symbol('m.@') m.@
say 'm.abc@efg' symbol('m.abc@efg') m.abc@efg
m.abc@efg = 'v=m.abc@efg'
say 'm.abc@efg' symbol('m.abc@efg') m.abc@efg
say 'm.@123' symbol('m.@123') m.@123
m.@123 = 'v=m.@123'
say 'm.@123' symbol('m.@123') m.@123
say 'm.@abc.@123@' symbol('m.@abc@123@') m.@abc@123@
m.@abc@123@ = 'v=m.@abc@123@'
say 'm.@abc@123@' symbol('m.@abc@123@') m.@abc@123@
a = vPut()
}¢--- A540769.WK.REXX.O13(@1) cre=2013-08-08 mod=2013-08-08-10.28.14 A540769 ---
say '_' symbol('_') _
_ = 'v=_'
say '_' symbol('_') _
say 'abc_efg' symbol('abc_efg') abc_efg
abc_efg = 'v=abc_efg'
say 'abc_efg' symbol('abc_efg') abc_efg
say '_123' symbol('_123') _123
_123 = 'v=_123'
say '_123' symbol('_123') _123
say '_abc_123_' symbol('_abc_123_') _abc_123_
_abc_123_ = 'v=_abc_123_'
say '_abc_123_' symbol('_abc_123_') _abc_123_
say 1_ 1a 'but are no variables |'
if 0 then
    1_=1a
drop _ abc_efg _123 _abc_123_
say 'm._' symbol('m._') m._
m._ = 'v=m._'
say 'm._' symbol('m._') m._
say 'm.abc_efg' symbol('m.abc_efg') m.abc_efg
m.abc_efg = 'v=m.abc_efg'
say 'm.abc_efg' symbol('m.abc_efg') m.abc_efg
say 'm._123' symbol('m._123') m._123
m._123 = 'v=m._123'
say 'm._123' symbol('m._123') m._123
say 'm._abc._123_' symbol('m._abc_123_') m._abc_123_
m._abc_123_ = 'v=m._abc_123_'
say 'm._abc_123_' symbol('m._abc_123_') m._abc_123_
a = vPut()
}¢--- A540769.WK.REXX.O13(AC) cre=2013-01-24 mod=2013-01-24-13.46.41 A540769 ---
/* rexx --------------------------------------------------------24. 1.13
    edit macro fuer bessere Darstellung Analysis
                 Labels
                 .a      erstes Connect
                 .s      Snapshot
                 .c      Change analysis Report
----------------------------------------------------------------------*/

call errReset 'hi'
    if  adrEdit('macro (args)',    ) <> 0 then
        call errHelp 'bitte als EditMacro aufrufen (ohne TSO praefix|)'
    if pos('?', args) > 0 then
        call help
    if adrEdit("find first .connect 1", 4) = 4 then
        call err 'kein .connect, ist das wirklich eine CA Analyse?'
    call adrEdit "(con) = cursor"
    call adrEdit "label" con "= .a 0", 8
    call adrEdit "exclude p'=' .zf .a all", 0 4
    call adrEdit "xstatus .a = nx", 0 4
    if adrEdit("find first '.call snapshot' 1", 4) = 0 then do
        call adrEdit "(sna) = cursor"
        call adrEdit "label" sna "= .s 0", 8
        if adrEdit("find '.FREE FI(RCVRFILE)'", 4) = 0 then do
            call adrEdit "(ex) = cursor"
            call adrEdit "label" (ex) "= .ex", 8
            call adrEdit "exclude p'=' .s .ex all", 0 4
            call adrEdit "xstatus .s = nx", 0 4
            end
        end
    if adrEdit("find first 'CHANGE ANALYSIS REPORT'", 4) = 0 then do
        call adrEdit "(rep) = cursor"
        call adrEdit "label" rep "= .c 0", 8
        end
    call adrEdit "cursor = .a"
    call adrEdit "locate .a"
exit

/* copy adrIsp begin *************************************************/
/**********************************************************************
    lmd: catalog read
    call sequence: lmdBegin, lmdNext*, lmdEnd
        mit lmd service (mit save in file und read,
                         weil list zu langsam und listcat abstürzt)
        1. arg (grp)     als group dataset für lmd save
                         und dd name für file read
***********************************************************************/
lmdBegin: procedure expose m.
    parse arg grp, lev
    call adrIsp 'lmdinit listid(lmdId) level('lev')'
    res = adrIsp('lmdlist listid(&lmdId) option(save) group('grp')', 4)
    call adrIsp 'lmdfree listid(&lmdId)'
    if res = 0 then do
        call trc timing() 'lmdlist save' grp lev
        call adrTso 'alloc dd('grp') shr dsn('grp'.datasets)'
        end
    else do
        call trc 'no datasets found' timing() 'lmdlist save' grp lev
        call adrTso 'alloc dd('grp') dummy'
        end
    call readDDBegin grp
return /* end lmdBegin */

lmdNext:
    parse arg ggGrp, ggSt, withVolume
    if \ readDD(ggGrp, ggSt) then
         return 0
    if withVolume \== 1 then
        do ggIx=1 to value(ggSt'0')
            x = value(ggSt || ggIx, word(value(ggSt || ggIx), 1))
            end
    return 1
endSubroutin lmdNext

lmdEnd: procedure expose m.
    parse arg grp
    call readDDEnd grp
    call adrTso 'free dd('grp')'
return /* end lmdEnd */

lmd: procedure expose m.
    parse arg lev, withVol
    call lmdBegin gg1, lev
    do while lmdNext(gg1, q., withVol)
        do x=1 to q.0
           call out q.x
           end
        end
    call lmdEnd gg1
    return
endProcedure lmd
/**********************************************************************
    member list of a pds:
        call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmm: procedure expose m.
parse arg dsn
    id = lmmBegin(dsn)
    do ix=1 by 1
        m = lmmNext(id)
        if m = '' then
            leave
        call out m
        end
    call lmmEnd id
    return
endProcedure lmm

lmmBegin: procedure expose m.
parse arg dsn
    mbr = dsnGetMbr(dsn)
    pds = dsnSetMbr(dsn, )
    call adrIsp "LMINIT DATAID(lmmId) DATASET('"pds"') ENQ(SHRW)"
    call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
    res = lmmId
    if mbr <> '' then
        res = res 'pattern('mbr')'
    return res
endProcedure lmmBegin

lmmEnd: procedure expose m.
parse arg lmmId opt
    call adrIsp "LMMLIST DATAID("lmmId") option(free)", 8
    call adrIsp "LMCLOSE DATAID("lmmId")"
    call adrIsp "LMFREE DATAID("lmmId")"
    return
endProcedure lmmEnd

lmmNext: procedure expose m.
parse arg lmmId opt
    if adrIsp("LMMLIST DATAID("lmmid")" ,
               "OPTION(LIST) MEMBER(Mbr)" opt, 4 8) = 0 then
        return strip(mbr)
    else
        return ''
endProcedure lmmNext

lmmRm: procedure expose m.
parse arg dsn, mbrs
    mbrs = dsnGetMbr(dsn) mbrs
    pds = dsnSetMbr(dsn, )
    call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
    call adrIsp "LMOPEN DATAID("lmmId") OPTION(OUTPUT) "
    err = ''
    do wx=1 to words(mbrs)
        m1 = word(mbrs, wx)
        rr = adrIsp("lmmDel dataid("lmmId") member("m1")", 0 8 12)
        if rc = 0 then
            say 'removed' m1 'from' pds
        else if rc = 8 then
            say 'not found' m1 'in' pds
        else do
            err = 'error deleting' m1 'in' pds 'rc' rr strip(zerrlm)
            say err
            leave
            end
        end
    call adrIsp "LMCLOSE DATAID("lmmId")"
    call adrIsp "LMFREE DATAID("lmmId")"
    if err <> '' then
        call err err
    return
endProcedure lmmRm
/*--- address ispf with error checking -------------------------------*/
adrIsp:
    parse arg ggIspCmd, ggRet
    address ispexec ggIspCmd
    if rc = 0 then return 0
    else if ggRet == '*' then return rc
    else if wordPOS(rc, ggRet) > 0 then return rc
    else
        call err 'adr ispExec rc' rc 'in' ggIspCmd':' strip(zerrlm)
endSubroutine adrIsp

/*--- address editor with error checking -----------------------------*/
adrEdit:
    parse arg ggEditCmd, ggRet
    address isrEdit ggEditCmd
    if rc = 0 then return 0
    else if ggRet == '*' then return rc
    else if wordPOS(rc, ggRet) > 0 then return rc
    else
        call err 'adr isrEdit rc' rc 'for' ggEditCmd
endSubroutine adrEdit
/* copy adrIsp end   *************************************************/
/* copy err begin *** errorhandling, messages, help    ****************/
errIni: procedure expose m.
    if m.err.ini == 1 then
        return
    m.err.ini     = 1
    m.err.handler = ''
    m.err.cleanup = ';'
    m.err.opt     = ''
    return
endProcedure errIni

/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
    call errIni
    parse arg m.err.opt, m.err.handler
    if pos('I', translate(m.err.opt)) > 0 then
        if errOS() \== 'LINUX' then
            if sysVar('sysISPF') = 'ACTIVE' then
                    call adrIsp 'control errors return'
    return
endSubroutine errReset

/*--- error routine: abend with message ------------------------------*/
err:
    parse arg ggTxt, ggOpt
    call errIni
    drop err handler cleanup opt call return
    if ggOpt == '' & m.err.handler \== '' then
        interpret m.err.handler
    call errSay ggTxt, 'e'
    call errCleanup
    if ggOpt == '' then
        ggOpt = m.err.opt
    ggOpt = translate(ggOpt)
    if pos('T', ggOpt) > 0  then do
        trace ?r
        say 'trace ?r in err'
        end
    if pos('H', ggOpt) > 0  then do
        call errSay 'divide by zero to show stackHistory', 'e'
        x = 1 / 0
        end
    call errSay 'exit(12)', 'e'
    exit errSetRc(12)
endSubroutine err

/*--- return the Operating System we are running on: TSO or LINUX ---*/
errOS: procedure expose m.
    parse source os .
    return os
endProcedure errOS

/*--- set rc for ispf: -------------------------------------------------
    if a cmd is run by ispStart, its RC is ignored,
         but ISPF passes the value of the shared variable zIspfRc
         back as return code
----------------------------------------------------------------------*/
errSetRc: procedure expose m.
parse arg zIspfRc
    if errOS() \== 'LINUX' then
        if sysVar('sysISPF') = 'ACTIVE' then
            address ispExec vput 'zIspfRc' shared
    return zIspfRc
endProcedure errSetRc

/*--- error routine: user message cleanup exit -----------------------*/
errAddCleanup: procedure expose m.
parse arg code
    call errIni
        /* concatenate backwards, then it is executed also backwards */
    m.err.cleanup = ';'code || m.err.cleanup
    return
endProcedure errAddCleanup

errRmCleanup: procedure expose m.
parse arg code
    call errIni
    cx = pos(';'code';', m.err.cleanup)
    if cx > 0 then
        m.err.cleanup = left(m.err.cleanup, cx) ,
                     || substr(m.err.cleanup, cx + length(code)+2)
    return
endProcedure errRmCleanup

errCleanup: procedure expose m.
    call errIni
    errCleanup = m.err.cleanup
    if errCleanup = ';' then
        return
    m.err.cleanup = ';'
    say 'err cleanup begin' errCleanup
    interpret errCleanup
    say 'err cleanup end' errCleanup
    return
endProcedure errCleanup

/*--- say an errorMessage msg with pref and linesplits --------------*/
errSay: procedure expose m.
parse arg msg, pref
    return saySt(errMsg(msg, pref))

/*--- prefix an errormessage with pref,
          split it into lines at \n to stem m.err -------------------*/
errMsg: procedure expose m.
parse arg msg, pref
    parse source . . ggS3 .                           /* current rexx */
    if pref == 'e' then
        msg = 'fatal error in' ggS3':' msg
    else if pref == 'w' then
        msg = 'warning in' ggS3':' msg
    else if pref \== '' then
        msg = pref':' msg
    return splitNl(err, msg)           /* split lines at \n */
endProcedure errMsg

splitNL: procedure expose m.
parse arg st, msg
    bx = 1
    do lx=1 to 20
        ex = pos('\n', msg, bx)
        if ex < bx then
            leave
        m.st.lx = substr(msg, bx, ex-bx)
        bx = ex+2
        end
    m.st.lx = substr(msg, bx)
    m.st.0 = lx
    return st
endProcedure splitNL

/*--- say (part of) the lines of a stem ----------------------------*/
saySt: procedure expose m.
parse arg st, fx, tx
    do lx=word(fx 1, 1) to word(tx m.st.0, 1)
        say m.st.lx
        end
    return st
endProcedure saySt

/*--- out (part of) the lines of a stem ----------------------------*/
outSt: procedure expose m.
parse arg st, fx, tx
    do lx=word(fx 1, 1) to word(tx m.st.0, 1)
        call out m.st.lx
        end
    return st
endProcedure outSt

/*--- say a trace message if m.trace is set --------------------------*/
debug: procedure expose m.
parse arg msg
    if m.debug == 1 then
        say 'debug:' msg
    return
endProcedure debug

/*--- output a trace if m.trace is set -------------------------------*/
trc: procedure expose m.
parse arg msg
    if m.trace == 1 then
        call out 'trc:' msg
    return
endProcedure trc

/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
    interpret 'assertRes =' arg(1)
    if assertRes \==1 then
        call err 'assert failed' arg(1) '==>' assertRes':' arg(2)
    return
endProcedure assert

/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg, op
    call errSay msg, 'e'
    call help
    call err msg, op
endProcedure errHelp

/*--- display the first comment block of the source as help ----------*/
help: procedure expose m.
    parse source . . s3 .
    say right(' help for rexx' s3, 79, '*')
    do ax=1 to arg()
        say ' ' arg(ax)
        end
    do lx=1 by 1
        if pos('/*', sourceLine(lx)) > 0 then
            leave
        else if lx > 10 then do
            say 'initial commentblock not found for help'
            return
            end
        end
    do lx=lx+1 by 1
        li = strip(sourceLine(lx), 't', ' ')
        if pos('*/', li) > 0 then
            leave
        say li
        end
    say right(' end help for rexx' s3, 79, '*')
    return 4
endProcedure help

/* copy err end   *****************************************************/
}¢--- A540769.WK.REXX.O13(ADRISP) cre=2009-09-03 mod=2013-05-27-11.06.31 A540769 ---
/* copy adrIsp begin *************************************************/
/**********************************************************************
    lmd: catalog read
    call sequence: lmdBegin, lmdNext*, lmdEnd
        mit lmd service (mit save in file und read,
                         weil list zu langsam und listcat abstürzt)
        1. arg (grp)     als group dataset für lmd save
                         und dd name für file read
***********************************************************************/
lmdBegin: procedure expose m.
    parse arg grp, lev
    call adrIsp 'lmdinit listid(lmdId) level('lev')'
    res = adrIsp('lmdlist listid(&lmdId) option(save) group('grp')', 4)
    call adrIsp 'lmdfree listid(&lmdId)'
    if res = 0 then do
        call trc timing() 'lmdlist save' grp lev
        call adrTso 'alloc dd('grp') shr dsn('grp'.datasets)'
        end
    else do
        call trc 'no datasets found' timing() 'lmdlist save' grp lev
        call adrTso 'alloc dd('grp') dummy'
        end
    call tsoOpen grp, 'R'
return /* end lmdBegin */

lmdNext:
    parse arg ggGrp, ggSt, withVolume
    if \ readDD(ggGrp, ggSt) then
         return 0
    if withVolume \== 1 then
        do ggIx=1 to value(ggSt'0')
            x = value(ggSt || ggIx, word(value(ggSt || ggIx), 1))
            end
    return 1
endSubroutin lmdNext

lmdEnd: procedure expose m.
    parse arg grp
    call tsoClose grp
    call adrTso 'free dd('grp')'
return /* end lmdEnd */

lmd: procedure expose m.
    parse arg lev, withVol
    call lmdBegin gg1, lev
    do while lmdNext(gg1, q., withVol)
        do x=1 to q.0
           call out q.x
           end
        end
    call lmdEnd gg1
    return
endProcedure lmd
/**********************************************************************
    member list of a pds:
        call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmm: procedure expose m.
parse arg dsn
    id = lmmBegin(dsn)
    do ix=1 by 1
        m = lmmNext(id)
        if m = '' then
            leave
        call out m
        end
    call lmmEnd id
    return
endProcedure lmm

lmmBegin: procedure expose m.
parse arg dsn
    mbr = dsnGetMbr(dsn)
    pds = dsnSetMbr(dsn, )
    call adrIsp "LMINIT DATAID(lmmId) DATASET('"pds"') ENQ(SHRW)"
    call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
    res = lmmId
    if mbr <> '' then
        res = res 'pattern('mbr')'
    return res
endProcedure lmmBegin

lmmEnd: procedure expose m.
parse arg lmmId opt
    call adrIsp "LMMLIST DATAID("lmmId") option(free)", 8
    call adrIsp "LMCLOSE DATAID("lmmId")"
    call adrIsp "LMFREE DATAID("lmmId")"
    return
endProcedure lmmEnd

lmmNext: procedure expose m.
parse arg lmmId opt
    if adrIsp("LMMLIST DATAID("lmmid")" ,
               "OPTION(LIST) MEMBER(Mbr)" opt, 4 8) = 0 then
        return strip(mbr)
    else
        return ''
endProcedure lmmNext

lmmRm: procedure expose m.
parse arg dsn, mbrs
    mbrs = dsnGetMbr(dsn) mbrs
    pds = dsnSetMbr(dsn, )
    call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
    call adrIsp "LMOPEN DATAID("lmmId") OPTION(OUTPUT) "
    err = ''
    do wx=1 to words(mbrs)
        m1 = word(mbrs, wx)
        rr = adrIsp("lmmDel dataid("lmmId") member("m1")", 0 8 12)
        if rc = 0 then
            say 'removed' m1 'from' pds
        else if rc = 8 then
            say 'not found' m1 'in' pds
        else do
            err = 'error deleting' m1 'in' pds 'rc' rr strip(zerrlm)
            say err
            leave
            end
        end
    call adrIsp "LMCLOSE DATAID("lmmId")"
    call adrIsp "LMFREE DATAID("lmmId")"
    if err <> '' then
        call err err
    return
endProcedure lmmRm
/*--- address ispf with error checking -------------------------------*/
adrIsp:
    parse arg ggIspCmd, ggRet
    address ispexec ggIspCmd
    if rc = 0 then return 0
    else if ggRet == '*' then return rc
    else if wordPOS(rc, ggRet) > 0 then return rc
    else
        call err 'adr ispExec rc' rc 'in' ggIspCmd':' strip(zerrlm)
endSubroutine adrIsp

/*--- address editor with error checking -----------------------------*/
adrEdit:
    parse arg ggEditCmd, ggRet
    address isrEdit ggEditCmd
    if rc = 0 then return 0
    else if ggRet == '*' then return rc
    else if wordPOS(rc, ggRet) > 0 then return rc
    else
        call err 'adr isrEdit rc' rc 'for' ggEditCmd
endSubroutine adrEdit
/* copy adrIsp end   *************************************************/
}¢--- A540769.WK.REXX.O13(ADRISPV) cre=2006-05-10 mod=2006-05-10-16.25.04 F540769 ---
/* copy adrIsp begin *************************************************/
/**********************************************************************
    lmd: catalog read
    call sequence: lmdBegin, lmdNext*, lmdEnd
        mit lmd service (mit save in file und read,
                         weil list zu langsam und listcat abstürzt)
        1. arg (grp)     als group dataset für lmd save
                         und dd name für file read
***********************************************************************/
lmdBegin: procedure
    parse arg grp, lev
    call adrIsp 'lmdinit listid(lmdId) level('lev')'
    res = adrIsp('lmdlist listid(&lmdId) option(save) group('grp')', 4)
    call adrIsp 'lmdfree listid(&lmdId)'
    if res = 0 then do
        call trc showTime() 'lmdlist save' grp lev
        call adrTso 'alloc dd('grp') shr dsn('grp'.datasets)'
        end
    else do
        call trc 'no datasets found' showTime() 'lmdlist save' grp lev
        call adrTso 'alloc dd('grp') dummy'
        end
    call readDDBegin grp
return /* end lmdBegin */

lmdNext:
    parse arg ggGrp, ggSt, withVolume
    if ^ readDD(ggGrp, ggSt) then
         return 0
    if withVolume ^== 1 then
        do ggIx=1 to value(ggSt'0')
            x = value(ggSt || ggIx, word(value(ggSt || ggIx), 1))
            end
    return 1
endSubroutin lmdNext

lmdEnd: procedure
    parse arg grp
    call readDDEnd grp
    call adrTso 'free dd('grp')'
return /* end lmdEnd */

/*--- make a readDescriptor for catlogsearch mask --------------------*/
LMDreader: procedure expose m.
parse arg mask
    rx = wrNew()
    gr = 'LMD'rx
    call lmdBegin gr, mask
    gr = quote(gr)
    call reDefine rx, "res = lmdNext("gr", m.stem.)",
                    , "call lmdEnd("gr"); call wrFree" rx
    return rx
endProcedure LMDreader

/*--- catalogSearch on mask and write it to std out ------------------*/
LMDout: procedure expose m.
parse arg mask
    call outReader LMDreader(mask)
    return
endProcedure LMDout
/**********************************************************************
    member list of a pds:
        call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmmTest: procedure
parse arg dsn
    if dsn = '' then
        dsn = 'wk.pli(*)'
    say 'lmmTest for dsn' dsn
    id = lmmBegin(dsn)
    do ix=1 by 1
        m = lmmNext(id)
        if m = '' then
            leave
        say ix m
        end
    call lmmEnd id
    say  'lmmTest end' (ix-1) 'members in' dsn
    return
endProcedure lmmTest

lmmBegin: procedure
parse arg dsn
    mbr = dsnGetMbr(dsn)
    pds = dsnSetMbr(dsn, )
    call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
    call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
    res = lmmId
    if mbr <> '' then
        res = res 'pattern('mbr')'
    return res
endProcedure lmmBegin

lmmEnd: procedure
parse arg lmmId opt
    call adrIsp "LMMLIST DATAID("lmmId") option(free)", 8
    call adrIsp "LMCLOSE DATAID("lmmId")"
    call adrIsp "LMFREE DATAID("lmmId")"
    return
endProcedure lmmEnd

lmmNext: procedure
parse arg lmmId opt
    if adrIsp("LMMLIST DATAID("lmmid")" ,
               "OPTION(LIST) MEMBER(Mbr)" opt, 4 8) = 0 then
        return mbr
    else
        return ''
endProcedure lmmNext

/*--- define new reader for memberListSearch on dsn
      member may be a membermask -------------------------------------*/
LMMreader: procedure expose m.
parse arg dsn
    wx = wrNew()
    res = quote(lmmBegin(dsn))
    call reDefine wx, "m.stem.1 = lmmNext("res");" ,
                      "res = m.stem.1 ^== '';"  ,
                      "m.stem.0 = res",
                    , "call lmmEnd("res"); call wrFree" wx
    return wx
endProcedure LMMreader

/*--- write member list of dsn to std out ----------------------------*/
LMMout: procedure expose m.
parse arg dsn
    call outReader LMMreader(dsn)
    return
endProcedure LMMOut

/*--- write to std out all existing datasets and members
      of a list. list looks like          wk.*(e*) a.b.c
      if member = '-' does not list members
      if member contains a second word '-' seq DS are not listed
---------------------------------------------------------------------*/
lmx: procedure expose m.
parse arg list
    px = piNew(2)
    call piBegin px
    call piDefine ,, "call lmdOut m.line"
    call piBar
    qx = m.wr.prc
    call piDefine ,, "call lmxPds m.line, m."px".mbrOpt"
    call piEnd px, 0
    do wx=1 to words(list)
        w = dsn2jcl(word(list, wx))
        m.px.mbrOpt = dsnGetMbr(w)
        pds = dsnSetMbr(w)
        if verify(pds, '*%', 'm') < 1 then do
            call writeLn qx, pds
            end
        else do
            call writeLn px, pds
            call write   px
            end
        end
    call wrClose px
    call wrFree px, qx
    call out
    return
endProcedure lmx

lmxPds: procedure expose m.
parse arg pds, mbr noPds .
    rc = listdsi("'"pds"' recall")
    if rc ^= 0 then do
        if rc = 16 & sysReason = 5 then
            say "listDsi not catalogued '"pds"'"
        else
            call err 'listDsi nc' rc 'reason' sysReason SYSMSGLVL2,
                 "pds '"pds"'"
        end
    else if left(sysDsOrg, 2) ^== 'PO' then do
        if noPds ^== '-' then
            call outLn pds
        end
    else if mbr ^== '-' then do
        rx = lmmReader("'"strip(pds)"("mbr")'")
        cnt = 0
        do while read(rx, 'ADRISP.LMX.'px)
            do xx=1 to m.adrIsp.lmx.px.0
                m.adrIsp.lmx.px.xx = dsnSetMbr(pds, m.adrIsp.lmx.px.xx)
                end
            call out 'ADRISP.LMX.'px
            cnt = cnt + m.adrIsp.lmx.px.0
            end
        say cnt 'members in' strip(pds)'('mbr')'
        end
    return
endProcedure lmxPds

/**********************************************************************
    adrSql: execute sql thru the dsnRexx interface
***********************************************************************/

adrSqlRc: /* no procedure, to keep variables sql... */
    parse arg ggSqlStmt, ggNo
    if ggNo <> '1' then
        ggSqlStmt = 'execSql' ggSqlStmt
    address dsnRexx ggSqlStmt
    if rc = 0 then
        return 0  /* say "sql ok:" ggSqlStmt */
    else if rc < 0 then
        call err "sql rc" rc sqlmsg()
    if sqlCode = 0 then
        say 'warning' sqlMsg()
    return sqlCode
endSubroutine adrSqlRc

adrSql: /* no procedure, to keep variables sql... */
    parse arg ggSqlStmt, ggNo
    if adrSqlRc(ggSqlStmt, ggNo) = 0 then
        return
    call err "sql rc" rc sqlmsg()
endSubroutine adrSql

adrSqlConnect: procedure
parse arg sys
    if adrTSORc("SUBCOM DSNREXX") <> 0 then do
       sRc = RXSUBCOM('ADD','DSNREXX','DSNREXX') /* ADD HOST CMD ENV  */
       if sRc <> 0 then
           call err 'rc' sRc 'from RXSUBCOM(ADD, DSNREXX, DSNREXX)'
       end
    call adrSql "connect" sys, 1
    return
endProcedure adrSqlConnect

adrSqlDisconnect: procedure
    call adrSql "disconnect ", 1
    return
endProcedure adrSqlDisconnect

sqlMsg: /* no procedure, to keep variables sql... */
    ggW = ''
    do ggX=0 to 10
        if sqlWarn.ggx <> '' then
            ggw = ggw ggx'='sqlWarn.ggx
        end
    return  'sqlCode' sqlCode 'state' sqlState 'warn' ggW ,
            'errMc' strip(translate(sqlerrmc, ',', 'FF'x))':' ggSqlStmt
endSubroutine sqlMsg

/**********************************************************************
    adrDsn: send a command to db2 with the TSO dsn command
***********************************************************************/

adrDsn: procedure
parse arg sys, cmd, rcOk
    call adrTso 'alloc dd(sysprint) new reuse'
    push 'END'
    push cmd
    rr = adrTsoRc('DSN SYSTEM('sys')')
    say 'rc' rr 'adrTso DSN SYSTEM('sys') cmd' cmd
    if wordPos(rr, rcOk) < 1 then do
        say 'error rc' rr 'in adrTso DSN SYSTEM('sys') cmd' cmd

        call adrTso 'execio * diskr sysprint (finis stem pr.)'
        say 'sysprint' pr.0 'lines'
        do x=1 to pr.0
            say strip(pr.x, 't')
            end
        call adrTso 'free dd(sysprint) '
        call err 'rc' rr 'in adrTso DSN SYSTEM('sys') cmd' cmd
        end
    call adrTso 'free dd(sysprint)'
    return rr
endProcedure adr Dsn

/**********************************************************************
    adr*: address an environment
***********************************************************************/

adrIsp:
    parse arg ggIspCmd, ggRet
    address ispexec ggIspCmd
    if rc = 0 then return 0
    else if ggRet == '*' then return rc
    else if wordPOS(rc, ggRet) > 0 then return rc
    else
        call err 'adr ispExec rc' rc 'for' ggIspCmd
endSubroutine adrIsp

adrEdit:
    parse arg ggEditCmd, ggRet
    address isrEdit ggEditCmd
    if rc = 0 then return 0
    else if ggRet == '*' then return rc
    else if wordPOS(rc, ggRet) > 0 then return rc
    else
        call err 'adr isrEdit rc' rc 'for' ggEditCmd
endSubroutine adrEdit

/* copy adrIsp end   *************************************************/
}¢--- A540769.WK.REXX.O13(ADRSQL) cre=2006-05-10 mod=2006-05-10-16.38.48 F540769 ---
/* copy adrSql begin *************************************************/

/**********************************************************************
    adrSql: execute sql thru the dsnRexx interface
***********************************************************************/

adrSql: /* no procedure, to keep variables sql... */
    parse arg ggSqlStmt, ggRet, ggNo
    if ggNo <> '1' then
        ggSqlStmt = 'execSql' ggSqlStmt
    address dsnRexx ggSqlStmt
    /* say 'sqlCode' sqlCode 'rc' rc 'for' ggSqlStmt ggNo */
    if rc = 0 then do
        return 0
        end
    else if rc < 0 then do
        if ggRet == '*' then nop
        else if wordPos(sqlCode, ggRet) > 0 then nop
        else
            call err "sql rc" rc sqlmsg(ggSqlStmt) ggNo
        end
    else if sqlWarn.0 ^== ' ' then do
        say 'warning' sqlMsg(ggSqlStmt) ggNo
        end
    return sqlCode
endSubroutine adrSql

adrSqlConnect: procedure
parse arg ggSys, ggRetCon
    if adrTSO("SUBCOM DSNREXX", '*') <> 0 then do
       sRc = RXSUBCOM('ADD','DSNREXX','DSNREXX') /* ADD HOST CMD ENV  */
       if sRc <> 0 then
           call err 'rc' sRc 'from RXSUBCOM(ADD, DSNREXX, DSNREXX)'
       end
    call adrSql "connect" ggSys, ggRetCon ,1
    return
endProcedure adrSqlConnect

adrSqlDisconnect: procedure
parse arg ggRet
    call adrSql "disconnect ", ggRet, 1
    return
endProcedure adrSqlDisconnect

sqlMsg: /* no procedure, to keep variables sql... */
    ggW = ''
    do ggX=0 to 10
        if sqlWarn.ggx <> '' then
            ggw = ggw ggx'='sqlWarn.ggx
        end
    return  'sqlCode' sqlCode 'state' sqlState 'warn' ggW ,
            'errMc' strip(translate(sqlerrmc, ',', 'FF'x))':' ggSqlStmt
endSubroutine sqlMsg

/**********************************************************************
    adrDsn: send a command to db2 with the TSO dsn command
***********************************************************************/

adrDsn: procedure
parse arg sys, cmd, rcOk
    call adrTso 'alloc dd(sysprint) new reuse'
    push 'END'
    push cmd
    rr = adrTso('DSN SYSTEM('sys')', '*')
    say 'rc' rr 'adrTso DSN SYSTEM('sys') cmd' cmd
    if wordPos(rr, rcOk) < 1 then do
        say 'error rc' rr 'in adrTso DSN SYSTEM('sys') cmd' cmd

        call adrTso 'execio * diskr sysprint (finis stem pr.)'
        say 'sysprint' pr.0 'lines'
        do x=1 to pr.0
            say strip(pr.x, 't')
            end
        call adrTso 'free dd(sysprint) '
        call err 'rc' rr 'in adrTso DSN SYSTEM('sys') cmd' cmd
        end
    call adrTso 'free dd(sysprint)'
    return rr
endProcedure adr Dsn

/* copy adrSql end   *************************************************/
}¢--- A540769.WK.REXX.O13(ADRTSO) cre=2013-08-07 mod=2013-09-27-10.44.33 A540769 ---
/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
    parse arg ggTsoCmd, ggRet
    address tso ggTsoCmd
    if rc == 0                     then return 0
    else if ggRet == '*'           then return rc
    else if wordPos(rc, ggRet) > 0 then return rc
    else
        call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */

/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure expose m.
parse upper arg dsn ., addPrefix
    if left(dsn,1) = "'" then
        return strip(dsn, 'b', "'")
    sp = sysvar('SYSPREF')
    if sp == '' then
        sp = userid()
    cx = pos('~', dsn)
    if cx < 1 & addPrefix == 1 then
        return sp'.'dsn
    do while cx \== 0
        le = left(dsn, cx-1)
        ri = substr(dsn, cx+1)
        if right(le, 1) == '.' | left(ri, 1) == '.' then
            dsn = le || sp || ri
        else
            dsn = le || left('.', le \== '') || sp ,
                     || left('.', ri \== '') || ri
        cx = pos('~', spec, cx)
        end
    return dsn
endProcedure dsn2Jcl

/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure expose m.
parse arg dsn .
    return "'"dsn"'"
endProcedure jcl2dsn

dsnSetMbr: procedure expose m.
parse arg dsn, mbr
     bx = pos('(', dsn)
     if bx > 0 then
         dsn = strip(left(dsn, bx-1))
     if mbr <> '' then
         dsn = dsn'('strip(mbr)')'
     return dsn
endProcedure dsnSetMbr

dsnGetMbr: procedure expose m.
parse arg dsn
     lx = pos('(', dsn)
     rx = pos(')', dsn, lx+1)
     if lx < 1 then
         return ''
     else if lx < rx then
         return substr(dsn, lx+1, rx-lx-1)
     else
         return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
    io: read or write a dataset with the following callsequences:
        read:  tsoOpen...'R', readDD*,  tsoClose
        write: tsoOpen...'W', writeDD*, tsoClose

        readDD returns true if data read, false at eof
        do not forget that open is mandatory to write empty file|
***********************************************************************/

/*--- open dd for read (rw='R') or write (rw='W') --------------------*/
tsoOpen: procedure expose m.
parse upper arg dd, rw
    return adrTso('execio' 0 'disk'RW tsoDD(dd, 'o') '(open)')
return /* end tsoOpen */

/*--- close dd -----------------------------------------------------*/
tsoClose: procedure expose m.
    parse upper arg dd
    return adrTso('execio 0 diskW' dd '(finis)')
endProcedure tsoClose

/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt = '' then
        ggCnt = 100
    call adrTso 'execio' ggCnt 'diskR' ggDD '(stem' ggSt')', 2
    return (value(ggSt'0') > 0)
return /* end readDD */

/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    call adrTso 'execio' ggCnt 'diskW' ggDD '(stem' ggSt')'
    return
endSubroutine writeDD

/*--- readNx: read next line, using buffer ---------------------------*/
/*--- begin: allocate dsnSpec and ini ------------------------ -------*/
readNxBegin: procedure expose m.
    parse arg m, m.m.dsn, m.m.dd, m.m.Cnt
    if m.m.dd = '' then
        m.m.dd = 'DDNX*'
    if m.m.cnt = '' then
        m.m.cnt = 1000
    m.m.cx = m.m.cnt + 999
    m.m.buf0x = 0
    m.m.0 = 0
    parse value dsnAlloc('dd('m.m.dd')' m.m.dsn) with m.m.dd m.m.free
    call tsoOpen m.m.dd, 'R'
    return m
endProcedure readDDNxBegin

/*--- return the stem of the next line, or '' at end -----------------*/
readNx: procedure expose m.
parse arg m
    m.m.cx = m.m.cx + 1
    if m.m.cx <= m.m.0 then
        return m'.'m.m.cx
    m.m.buf0x = m.m.buf0x + m.m.0
    if \ readDD(m.m.dd, 'M.'m'.', m.m.cnt)then
        return ''
    m.m.cx = 1
    return m'.1'
endProcedure readDDNx
/*--- return the stem of the curr line, '' at end --------------------*/
readNxCur: procedure expose m.
parse arg m
    if m.m.cx <= m.m.0 then
        return m'.'m.m.cx
    else
        return ''
endProcedure readNxCur

/*--- return the position (line number) of reader
           plus le characters of the current line (default 50) ------*/
readnxPos: procedure expose m.
parse arg m, le
    li = m'.'m.m.cx
    li = strip(m.li, 't')
    if arg() < 2 then
        le = 50
    if le < 1 then
        li = ''
    else if length(li) <= le then
        li = ':' li
    else
        li = ':' left(li, le-3)'...'
    return 'line' (m.m.buf0x + m.m.cx)li
endProcedure readnxPos

/*--- close and deallocate ------------------------------------------*/
readNxEnd: procedure expose m.
parse arg m
    call tsoClose m.m.dd
    call tsoFree m.m.free
    return
endProcedure readDDNxEnd

/*--- standardise a dsn spec
       word1             dsName or -
       word2             dd     or -
       word3             disp   or -
       word4 to first :  attributes in tso format
       after first :     attributes for new allocation
----------------------------------------------------------------------*/
dsnSpec: procedure expose m.
parse upper arg spec
    rr = ''      /* put leading - in separate words */
    do sx=1 while words(rr) < 3 & wx \= ''
        wx = word(spec, sx)
        do while abbrev(wx, '-') & words(rr) < 3
            wx = substr(wx, 2)
            rr = rr '-'
            end
        rr = rr wx
        end
    spec = rr subWord(spec, sx)
    na = ''
    dd = ''
    di = ''
    if left(spec, 1) = '&' then /* external spec is handled ok */
        spec = strip(substr(spec, 2))
    do wx=1 by 1
        w = word(spec, wx)
        if w = '' | abbrev(w, '.') | abbrev(w, ':') then
            leave
        else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
            di = w
        else if w = 'CATALOG' then
            di = di w
        else if abbrev(w, 'DD(') then
            dd = substr(w, 4, length(w)-4)
        else if abbrev(w, 'DSN(') then
            na = strip(substr(w, 5, length(w)-5))
        else if na == '' then
            na = dsn2jcl(w)
        else if pos('(', w) > 0 then
            leave
        else if dd == '' then
            dd = w
        else if di == '' then
            di = w
        else
            leave
        end
    if na == '' then
        na = '-'
    else if abbrev(na, "'") then
        na = substr(na, 2, length(na)-2)
    if dd == '' then dd = '-'
    if di == '' then di = '-'
    re = subword(spec, wx)
    if abbrev(re, '.') then
        re = substr(re, 2)
    return na dd di re
endProcedure dsnSpec

/*--- alloc a dsn with dsnAlloc
          if the dsn is inuse wait and retry
          until either the allocation is successfull
          or the timeout occurs --------------------------------------*/
dsnAllocWait: procedure expose m.
parse upper arg spec, pDi, pDD, timeOut
    x = max(1, arg() - 1)
    do rt=0
        m.adrTsoAl.1 = ''
        m.adrTsoAl.2 = ''
        m.adrTsoAl.3 = ''
        call outtrap m.adrTsoAl.
        res = dsnAlloc(spec, pDi, pDD, '*')
        call outtrap off
        if \ datatype(res, 'n') then
            return res
        msg = m.adrTsoAl.1'\n'm.adrTsoAl.2'\n'm.adrTsoAl.3
        if rt > timeOut & timeOut \== '' then
            return err('timeout allocating' spec time() '\n'msg)
        if pos('DATA SET IS ALLOCATED TO ANOTHER', msg) < 1 then
            return err('allocating' spec'\n'msg)
        say time() 'sleep and retry alloc' spec
        call sleep 1, 0
        end
endProcedure dsnAllocWait

/*--- alloc a dsn or a dd
          spec '-'<ddName>
               datasetName? disposition? '.'? attributes? (':' newAtts)?
          disp default disposition
          dd   default dd name
          retRc   erlaubte ReturnCodes (leer = 0)
          returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, pDi, pDD, retRc
    parse value dsnSpec(spec) with na dd di rest
    if na = '-' then
        m.dsnAlloc.dsn = ''
    else
        m.dsnAlloc.dsn = na
    if dd == '-' & pDD \== '' then
        dd = pDD
    if dd == '-' then
        dd = 'DD*'
    dd = tsoDD(dd, 'a')
    if na == '-' & di == '-' & rest = '' then
        return dd
    if di = '-' then
        if pDi == '' then
            di = 'SHR'
        else
            di = pDi
    if pos('(', na) < 1 then
        nop
    else if di = 'MOD' then
        call err 'disp mod for' na
    else
        di = 'SHR'
    if pos('/', na) > 0 then
        rx = csmAlloc(na dd di rest, retRc)
    else
        rx = tsoAlloc(na dd di rest, retRc)
    if rx = 0 then
        return dd dd
    else
        return rx
endProcedure dsnAlloc

/*--- find a free dd with prefix dd ----------------------------------*/
tsoDD: procedure expose m.
parse arg dd, f
    if symbol('m.tso.ddAlloc') \== 'VAR' then do
        call errIni
        m.tso.ddAlloc = ''
        m.tso.ddOpen  = ''
        end
    if m.err.ispf then
        address ispExec 'vget wshTsoDD shared'
    else
        wshTsoDD = m.tso.ddAlloc
    if f == '-' then do
        ax = wordPos(dd, m.tso.ddAlloc)
        if ax > 0 then
            m.tso.ddAlloc = delWord(m.tso.ddAlloc, ax, 1)
        ox = wordPos(dd, m.tso.ddOpen)
        if ox > 0 then
            m.tso.ddOpen  = delWord(m.tso.ddOpen , ox, 1)
        if ax < 1 & ox < 1 then
            call err 'tsoDD dd' dd 'not used' m.tso.ddAlloc m.tso.ddOpen
        sx = wordPos(dd, wshTsoDD)
        if sx > 0 then
            wshTsoDD  = delWord(wshTsoDD , sx, 1)
        end
    else if f == 'o' then do
        if wordPos(dd, m.tso.ddOpen m.tso.ddAlloc) < 1 then
            m.tso.ddOpen = strip(m.tso.ddOpen dd)
        end
    else if f <> 'a' then do
        call err 'tsoDD bad fun' f
        end
    else do
        if right(dd, 1) = '*' then do
            dd = left(dd, length(dd)-1) || m.err.screen
            cx = lastPos(' 'dd, ' 'm.tso.ddAlloc)
            if cx > 0 then do
                old = word(substr(m.tso.ddAlloc, cx), 1)
                if old = dd then
                    dd = dd'1'
                else if datatype(substr(old, length(dd)+1), 'n') then
                    dd = dd || (substr(old, length(dd)+1) + 1)
                else
                    call err 'tsoDD old' old 'suffix not numeric dd' dd
                end
            end
        if wordPos(dd, m.tso.ddAlloc) < 1 then
            m.tso.ddAlloc = strip(m.tso.ddAlloc dd)
        if wordPos(dd, wshTsoDD) < 1 then
            wshTsoDD = strip(wshTsoDD dd)
        end
    if m.err.ispf then
        address ispExec 'vPut wshTsoDD shared'
    return dd
endProcedure tsoDD

tsoAlloc: procedure expose m.
parse arg na dd disp rest ':' nn, retRc
    c = 'alloc dd('dd')' disp
    if na \== '-' then
        c = c "DSN('"na"')"
    else if disp = 'NEW' and nn \== '' then
        c = c dsnCreateAtts(,nn)
    call outtrap m.adrTsoAl.
    alRc = adrTso(c rest, '*')
    call outtrap off
    if alRc =  0 then
        return 0
    if nn \= '' & wordPos(disp, 'OLD SHR') > 0 ,
          & sysDsn("'"m.dsnAlloc.dsn"'") == 'DATASET NOT FOUND' then do
        say 'tsoAlloc creating' c rest ':'nn
        call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(na, nn)
        call adrTso 'free  dd('dd')'
        return tsoAlloc(na dd disp rest, retRc)
        end
    say 'rc='alRc 'for' c rest
    call saySt adrTsoal
    if retRc = '*' | wordPos(alRc, retRc) > 0 then
        return alRc
    call err 'tsoAlloc rc' alRc 'for' c rest
endProcedure tsoAlloc

tsoAtts: procedure expose m.
parse arg dsn
    rc = listDsi("'"dsn"' SMSINFO")
    if rc = 0 then
        mv = ''
    else if rc = 4 & sysReason = 19 then do
        mv = 'UCOUNT(30)' /* 7.8.13 corrected attribute */
        say 'creating' dsn 'with multi volume' mv
        end
    else if rc ^= 0 then
        call err 'listDsi rc' rc 'reason' sysReason,
                             sysMsgLvl1 sysMsgLvl2
    al = 'CAT'
    al = ''
    if right(sysDsSms, 7) == 'LIBRARY' ,
        | abbrev(sysDsSms, 'PDS') then
         al = al 'DSNTYPE(LIBRARY)'
    if sysUnits = 'TRACK' then
        sysUnits = 'TRACKS'
    return al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
        "DATACLAS("sysDataClass")" ,
        "RECFM("translate('1 2 3', ' 'sysREcFM, ' 123')")",
        "LRECL("SYSLRECL")",
        "SPACE("sysPrimary"," sysSeconds")" sysUnits mv
    /*  "blksize("sysBLkSIZE")" removed 3.4.13: let sms do the magic */
endProcedure tsoAtts

tsoFree: procedure expose m.
parse arg ddList, ggRet
    do dx=1 to words(ddList)
        dd = word(ddList, dx)
        call adrTso 'free dd('dd')', ggRet
        call tsoDD dd, '-'
        end
    return
endProcedure tsoFree

tsoFreeAll: procedure expose m.
    all = m.tso.ddAlloc m.tso.ddOpen
    do ax = 1 to words(all)
        call adrTso 'execio 0 diskW' word(all, ax) '(finis)', '*'
        end
    m.tso.ddOpen = ''
    call tsoFree m.tso.ddAlloc, '*'
    return
endProcedure tsoFreeAll

dsnCreateAtts: procedure expose m.
parse arg dsn, atts, forCsm
    forCsm = forCsm == 1
    aU = ' 'translate(atts)
    res = ''
    if dsn \== '' then
        res = "dataset('"dsnSetMbr(dsn)"')"
    if abbrev(atts, '~') then
        return res tsoAtts(substr(atts, 2))
    if abbrev(atts, ':') then do
        parse var atts a1 atts
        rl = substr(a1, 3)
        if abbrev(a1, ':F') then do
            if rl = '' then
                rl = 80
            recfm='f b'
            end
        else do
            if rl = '' then
                rl = 32756
            recfm = substr(a1, 2, 1) 'b'
            end
        res =  res "recfm("space(recfm, 1-forCsm)") lrecl("rl")"
        end
    if pos('(', dsn) > 0 & pos(' DSNTYPE(', aU) < 1 ,
                         & pos(' DSORG(',   aU) < 1 then
        res = res 'dsntype(library) dsorg(po)'
    if pos(' MGMTCLAS(', aU) < 1 then
        res = res 'mgmtclas(COM#A091)'
    if pos(' SPACE(', aU) < 1 then
        res = res 'space(100, 500) cyl' || copies('inder', forCsm)
    return res atts
endProcedure dsnCreateAtts
/*--- check if a dataset is archive ------------------------------------
          returns 'ok'                    if dataset on disk
                  'not'                   if dataset is not catalogued
                  'arc'                   if dataset archived
                  listDsi errorMsg        otherwise ------------------*/
dsnArc: procedure expose m.
parse upper arg dsn
    lc = listDsi("'"strip(dsn)"' noRecall")
    if lc = 0 then
        return 'ok'
    else if lc=4 & sysReason = 19 then  /* multiple volumes */
        return 'ok'
    else if lc=16 & sysReason = 5 then
        return 'notCat'
    else if lc=16 & sysReason = 9 then
        return 'arc'
    else
        return 'listDsi cc='lc', sysReason='sysReason ,
                          'm2='sysMsgLvl2', m1='sysMsgLvl1
endProcedure dsnArc
/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
    ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
    call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
    call tsoFree word(ggAlloc, 2)
    return
endSubroutine readDsn

/*--- write the dataset specified in ggDsnSpec from stem ggSt
          write ggCnt records if not empty otherwise ggst0
          if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
    call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
            '(stem' ggSt 'open finis)'
    call tsoFree word(ggAlloc, 2)
    if ggSay == 1 | m.debug == 1 then
       say ggCnt 'records written to' ggDsnSpec
    return
endSubroutine writeDsn

copyDSN: procedure expose m.
parse arg frSpec, toSpec, ggSay
    parse value dsnAlloc(frSpec, 'SHR', 'FRDD') with frDD frFr
    parse value dsnAlloc(toSpec, 'OLD', 'TODD') with toDD toFr
    call tsoOpen frDD, 'R'
    call tsoOpen toDD, 'W'
    cnt = 0
    do while readDD(frDD, r.)
        call writeDD toDD, r.
        cnt = cnt + r.0
        end
    call tsoClose frDD
    call tsoClose toDD
    call tsoFree frFr toFr
    if ggSay == 1 | m.debug == 1 then
       say cnt 'records copied from' frSpec 'to' to toSpec
    return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
}¢--- A540769.WK.REXX.O13(ADRV1) cre= mod= -------------------------------------
/* copy adr begin ****************************************************/
/**********************************************************************
    dsn*: manipulate dataSetNames
        dsn2Jcl:     convert from tso to JCL format
        dsnFromJcl:  convert from jcl to TSO format
        dsnPosLev:   get the index of first char of level
                     (negativ levels are counted from the right)
        dsnGetMbr:   get the Member name from a dsn
        dsnApp:      cleanup and append dsn parts (preserve apos ...)
        dsnSetMbr:   set a Member name or remove it if mbr = ''
        dsnTemp      return the name of a temporary dataset
        dsnGetLLQ    ==> dsnGetLev(..., -1) depreciated
***********************************************************************/
dsn2jcl: procedure
parse arg dsn .
    if left(dsn,1) = "'" then
        return strip(dsn, 'b', "'")
    else if sysvar('SYSPREF') = '' then
        return dsn
    else
        return sysvar('SYSPREF')'.'dsn
endProcedure dsn2Jcl

dsnFromJcl: procedure
parse arg dsn .
    return "'"dsn"'"
endProcedure dsnFromJcl

dsnApp: procedure
parse arg parts
    dsn = ''
    do wx=1 by 1
        w = word(parts, wx)
        if w = '' then
            leave
        do while w <> ''
            if pos(right(w, 1), "') ") <= 0 then
                leave
            w = left(w, length(w)-1)
            end
        dsn = dsn || w
        end
    if pos('(', dsn) > 0 then
        dsn = dsn')'
    if left(dsn,1) = "'" then
        return "'"strip(dsn, 'b', "'")"'"
    else
        return dsn
endProcedure dsnApp

dsnSetMbr: procedure
parse arg dsn, mbr
     mbr = strip(mbr)
     bx = pos('(', dsn)
     if mbr = '' then do
         if bx < 1 then
             return dsn
         else if left(dsn, 1) = "'" then
             return left(dsn,bx-1)"'"
         else
             return left(dsn,bx-1)
         end
     else do
         if bx < 1 then
             return dsnApp(dsn '('mbr)
         else
             return dsnApp(left(dsn, bx)  mbr)
         end
endProcedure dsnSetMbr

dsnGetMbr: procedure
parse arg dsn
     lx = pos('(', dsn)
     rx = pos(')', dsn, lx+1)
     if lx < 1 then
         return ''
     else if lx < rx then
         return substr(dsn, lx+1, rx-lx-1)
     else
         return strip(substr(dsn,lx+1), 't', "'")
endProcedure dsnGetMbr

dsnPosLev: procedure
parse arg dsn, lx
    sx = posLev('.', dsn, lx)
    if sx ^= 1 then
        return sx
    else
        return 1 + (left(dsn, 1) == "'")
endProcedure dsnPosLev

dsnGetLev: procedure
parse arg dsn, lx
    sx = dsnPosLev(dsn, lx)
    if sx < 1 then
        return ''
    ex = pos('.', dsn, sx)
    if ex < 1 then do
         ex = pos('(', dsn, sx)
         if ex < 1 then
             return substr(dsn, sx)
        end
    return substr(dsn, sx, ex-sx)
endProcedure dsnGetLev

dsnTemp: procedure
parse upper arg suf
    l = time(l);
    d = 'tempFile.t'left(l,2)substr(l,4,2)substr(l,7,2)'.m'right(l,6)
    call trc 'jobName' mvsVar('SYMDEF', 'JOBNAME')
    d = 'tmpFile.'mvsVar('SYMDEF', 'JOBNAME')'.'suf
    call trc 'tempFile' sub '=>' d
    return d
endProcedure dsnTemp

/**********************************************************************
StringHandling
    posRep: return the index of rep'th occurrence of needle
            negativ rep are counted from the right
***********************************************************************/
quote: procedure
parse arg txt, qu
    if qu = '' then
        qu = "'"
    res = qu
    ix = 1
    do forever
        qx = pos(qu, txt, ix)
        if qx = 0 then
            return res || substr(txt, ix) || qu
        res = res || substr(txt, ix, qx-ix) || qu || qu
        ix = qx + length(qu)
        end
endProcedure quote

posRep: procedure
parse arg needle, hayStack, rep, start
    if rep > 0 then do
        if start = '' then
            start = 1
        do cc = 1 to rep
             sx = pos(needle, hayStack, start)
             if sx < 1 then
                 return 0
             start = sx + length(needle)
             end
        return sx
        end
    else if rep < 0 then do
        if start = '' then
            start = length(hayStack)
        do cc = 1 to -rep
             sx = lastPos(needle, hayStack, start)
             if sx < 1 then
                 return 0
             start = sx - length(needle)
             end
        return sx
        end
    else
        return 0
endProcedure posRep

posLev: procedure
parse arg needle, hayStack, rep, start
    if rep > 1 then do
        sx = posRep(needle, hayStack, rep-1, start)
        if sx < 1 then
            return 0
        return 1+sx
        end
    else if rep < -1 then do
        sx = posRep(needle, hayStack, rep+1, start)
        if sx < 1 then
            return 0
        return 1+lastPos(needle, hayStack, sx-1)
        end
    else if rep ^= -1 then
        return rep     /* for 0 and 1 */
    else if start == '' then   /* pos fails with empty start| */
        return 1 + lastPos(needle, hayStack)
    else
        return 1 + lastPos(needle, hayStack, start)
endProcedure posLev


posCount: procedure
parse arg needle, hayStack, start, fin
    if start = '' then
        start = 1
    if fin = '' then
        fin = length(hayStack) + 1 - length(needle)
    cnt = 0
    do forever
        start = pos(needle, haystack, start)
        if start < 1 | start > fin then
             return cnt
        cnt = cnt + 1
        start = start + length(needle)
        end
endProcedure posCount

/**********************************************************************
    lmd: catalog read
    call sequence: lmdBegin, lmdNext*, lmdEnd
        mit lmd service (mit save in file und read,
                         weil list zu langsam und listcat abstürzt)
        1. arg (grp)     als group dataset für lmd save
                         und dd name für file read
***********************************************************************/
lmdBegin: procedure
    parse arg grp, lev
    call adrIsp 'lmdinit listid(lmdId) level('lev')'
    res = adrIspRC('lmdlist listid(&lmdId) option(save) group('grp')')
    call adrIsp 'lmdfree listid(&lmdId)'
    if res = 0 then do
        call trc showTime() 'lmdlist save' grp lev
        call adrTso 'alloc dd('grp') shr dsn('grp'.datasets)'
        end
    else if res = 4 then do
        call trc 'no datasets found' showTime() 'lmdlist save' grp lev
        call adrTso 'alloc dd('grp') dummy'
        end
    else
        call err 'rc' res 'in lmdlist save' grp lev
    call readDDBegin grp
return /* end lmdBegin */

lmdNext:
    parse arg ggGrp, ggSt
return readDD(ggGrp, ggSt)

lmdEnd: procedure
    parse arg grp
    call readDDEnd grp
    call adrTso 'free dd('grp')'
return /* end lmdEnd */

/**********************************************************************
    member list of a pds:
        call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmmTest: procedure
parse arg dsn
    if dsn = '' then
        dsn = 'wk.pli(*)'
    say 'lmmTest for dsn' dsn
    id = lmmBegin(dsn)
    do ix=1 by 1
        m = lmmNext(id)
        if m = '' then
            leave
        say ix m
        end
    call lmmEnd id
    say  'lmmTest end' (ix-1) 'members in' dsn
    return
endProcedure lmmTest

lmmBegin: procedure
parse arg dsn
    mbr = dsnGetMbr(dsn)
    pds = dsnSetMbr(dsn, )
    call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
    call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
    res = lmmId
    if mbr <> '' then
        res = res 'pattern('mbr')'
    say 'lmmBegin returning' res
    return res
endProcedure lmmBegin

lmmEnd: procedure
parse arg lmmId opt
    if adrIspRc("LMMLIST DATAID("lmmId") option(free)") <> 0 then
        if rc <> 8 then
            call err "lmmEnd" id lmmId "rc" rc "for lmmList free"
    call adrIsp "LMCLOSE DATAID("lmmId")"
    call adrIsp "LMFREE DATAID("lmmId")"
    return
endProcedure lmmEnd

lmmNext: procedure
parse arg lmmId opt
    gmRc = adrIspRc("LMMLIST DATAID("lmmid")" ,
               "OPTION(LIST) MEMBER(Mbr)" opt)
    if gmRc = 0 then
        return mbr
    else if gmRc = 8 | gmRC = 4 then
        return ''
    else
        call err 'lmmList rc' gmRc
endProcedure lmmNext

/**********************************************************************
    read: read a file
    valid call sequences:
        readDsn                                read a whole dsn
        readDDBegin, readDD*, readDDEnd        read dd in chunks
        writeBegin, writeDD*, writeEnd         write dsn in chunks

        readDD liest 100 records in übergebenen stem,
            returns false at eof
***********************************************************************/
readTest: procedure
parse arg dsn
    say showTime() 'readTest' dsn
    call readBegin 'ddEins', dsn
    z = 0
    do while readDD('ddEins', st.)
        do y=1 to st.0
            z=z+1
            say z strip(st.y, 't')
            end
        end
    call readEnd 'ddEins'
    say showTime() 'readTest' z 'records in' dsn
return /* readTest */

readDDBegin: procedure
return /* end readDDBegin */

readDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt = '' then
        ggCnt = 100
    if adrTsoRc('execio' ggCnt 'diskr' ggDD '(stem' ggSt')') = 0 then
        return (value(ggSt'0') > 0)
    else if rc = 2 then
        return (value(ggSt'0') > 0)
    else
        call err 'execio' ggCnt 'diskr' ggDD 'rc' rc
return /* end readDD */

readDDEnd: procedure
    parse arg dd
    call adrTso 'execio 0 diskr' dd '(finis)'
return /* end readDDEnd */

writeDDBegin: procedure
    parse arg ggDD
    call adrTso 'execio' 0 'diskw' ggDD '(open)'
return /* end writeDDBegin */

writeDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    call adrTso 'execio' ggCnt 'diskw' ggDD '(stem' ggSt')'
    return
endSubroutine writeDD

writeDDEnd: procedure
    parse arg dd
    call adrTso 'execio 0 diskw' dd '(finis)'
return /* end writeDDEnd */

writeDsn:
    parse arg ggDsn, ggSt
    call adrTso 'alloc dd(ggWrite) dsn('ggDsn')'
    call writeDDBegin 'ggWrite'
    call writeDD 'ggWrite', ggSt
    call writeDDEnd 'ggWrite'
    call adrTso 'free  dd(ggWrite)'
    return
endProcedure writeDsn

/**********************************************************************
    writeApp: append lines to a file
        ggDsn:  dsn to append lines
        ggStem  stem containing line (with dot|)
        ggNr    number of lines, if empty <stem>.0
***********************************************************************/
writeApp:
parse arg ggDsn, ggStem, ggNr
    if ggNr = '' then
        ggNr = value(ggStem'0')
    if pos('(', ggDsn) < 1 then do  /* sequential ds, use disp=mod */
        call adrTso 'alloc mod reuse dd(ddApp) dsn('ggDsn')'
        end
    else do                       /* pds: read and rewrite */
        call adrTso 'alloc shr reuse dd(ddApp) dsn('ggDsn')'
        if sysdsn(ggDsn) = 'OK' then do
            call adrTso 'execio * diskr ddApp (stem ggL. finis)'
            call adrTso 'execio' ggL.0 'diskw ddApp (stem ggL.)'
            end
        end
    call adrTso 'execio' ggNr 'diskw ddApp (stem' ggStem 'finis)'
    call adrTso 'free dd(ddApp)'
return
endProcedure writeApp

log: procedure
parse arg logLine
    l.1 = date('s') time() logLine
    call writeApp 'wk.out(ll)', l., 1
    return
endProcedure log
/**********************************************************************
    adrSql: execute sql thru the dsnRexx interface
***********************************************************************/

adrSqlRc: /* no procedure, to keep variables sql... */
    parse arg ggSqlStmt, ggNo
    if ggNo <> '1' then
        ggSqlStmt = 'execSql' ggSqlStmt
    address dsnRexx ggSqlStmt
    if rc = 0 then
        return 0  /* say "sql ok:" ggSqlStmt */
    else if rc < 0 then
        call err "sql rc" rc sqlmsg()
    if sqlCode = 0 then
        say 'warning' sqlMsg()
    return sqlCode
endSubroutine adrSqlRc

adrSql: /* no procedure, to keep variables sql... */
    parse arg ggSqlStmt, ggNo
    if adrSqlRc(ggSqlStmt, ggNo) = 0 then
        return
    call err "sql rc" rc sqlmsg()
endSubroutine adrSql

adrSqlConnect: procedure
parse arg sys
    if adrTSORc("SUBCOM DSNREXX") <> 0 then do
       sRc = RXSUBCOM('ADD','DSNREXX','DSNREXX') /* ADD HOST CMD ENV  */
       if sRc <> 0 then
           call err 'rc' sRc 'from RXSUBCOM(ADD, DSNREXX, DSNREXX)'
       end
    call adrSql "connect" sys, 1
    return
endProcedure adrSqlConnect

adrSqlDisconnect: procedure
    call adrSql "disconnect ", 1
    return
endProcedure adrSqlDisconnect

sqlMsg: /* no procedure, to keep variables sql... */
    ggW = ''
    do ggX=0 to 10
        if sqlWarn.ggx <> '' then
            ggw = ggw ggx'='sqlWarn.ggx
        end
    return  'sqlCode' sqlCode 'state' sqlState 'warn' ggW ,
            'errMc' strip(translate(sqlerrmc, ',', 'FF'x))':' ggSqlStmt
endSubroutine sqlMsg

/**********************************************************************
    adrDsn: send a command to db2 with the TSO dsn command
***********************************************************************/

adrDsn: procedure
parse arg sys, cmd, rcOk
    call adrTso 'alloc dd(sysprint) new reuse'
    push 'END'
    push cmd
    rr = adrTsoRc('DSN SYSTEM('sys')')
    say 'rc' rr 'adrTso DSN SYSTEM('sys') cmd' cmd
    if wordPos(rr, rcOk) < 1 then do
        say 'error rc' rr 'in adrTso DSN SYSTEM('sys') cmd' cmd

        call adrTso 'execio * diskr sysprint (finis stem pr.)'
        say 'sysprint' pr.0 'lines'
        do x=1 to pr.0
            say strip(pr.x, 't')
            end
        call adrTso 'free dd(sysprint) '
        call err 'rc' rr 'in adrTso DSN SYSTEM('sys') cmd' cmd
        end
    call adrTso 'free dd(sysprint)'
    return rr
endProcedure adr Dsn

/**********************************************************************
    adr*: address an environment
        adrTso: fails if rc <> 0
        adrTsoRc: returns rc without failing
***********************************************************************/
adrTsoRc:
    parse arg ggTsoCmd
    address tso ggTsoCmd
return rc  /* end adrTsoRc */

adrTso:
    parse arg ggTsoCmd
    address tso ggTsoCmd
    if rc <> 0 then
        call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */

adrIspRc:
    parse arg ggIspCmd
    address ispexec ggIspCmd
return rc /* end adrIspRc */

adrIsp:
    parse arg ggIspCmd
    address ispexec ggIspCmd
    if rc <> 0 then
        call err 'adrIsp rc' rc 'for' ggIspCmd
return /* end adrIsp */

adrEdit:
    parse arg ggEditCmd, ret
    address isrEdit ggEditCmd
    if rc <> 0 then
        call err 'adr isrEdit rc' rc 'for' ggEditCmd
return /* end adrEdit */

adrEditRc:
    parse arg ggEditCmd
    address isrEdit ggEditCmd
return rc /* end adrEditRc */

/**********************************************************************
    messages, errorhandling help
***********************************************************************/
/* caller should define err as follows ---------------------------------
err:
parse arg ggMsg
    call errA ggMsg
    exit 12
endSubroutine err
   end call should define err ----------------------------------------*/

errA:
    parse arg ggTxt
    parse source . . ggS3 .
    say 'fatal error in' ggS3':' ggTxt
    exit setRc(12)
endSubroutine errA

trc: procedure expose m.
parse arg msg
    if m.trace == 1 then
        say 'trc:' msg
    return
endProcedure trc

setRc: procedure
parse arg zIspfRc
/**********************************************************************
    if a cmd is run by ispStart, its RC is ignored,
         but ISPF passes the value of the shared varible zIspfRc
         back as return code
***********************************************************************/
    if sysVar('sysISPF') = 'ACTIVE' then do
        say 'exitRc setting zIspfRc='zIspfRc
        address ispExec vput 'zIspfRc' shared
        end
    return zIspfRc
endProcedure setRc

errHelp: procedure
parse arg ggMsg
    say 'fatal error:' ggMsg
    call help
    call err ggMsg
endProcedure errHelp

help: procedure
/**********************************************************************
    display the first comment block of the source as help text
***********************************************************************/
    parse source . . s3 .
    say 'help for rexx' s3
    do lx=1 by 1
        if pos('/*', sourceLine(lx)) > 0 then
            leave
        else if lx > 10 then do
            say 'initial commentblock not found for help'
            return
            end
        end
    do lx=lx+1 by 1
        li = strip(sourceLine(lx), 't', ' ')
        if pos('*/', li) > 0 then
            leave
        say li
        end
    return 4
endProcedure help

showtime: procedure
parse arg showmsg
return time() sysvar('syscpu') sysvar('syssrv') showmsg
/* copy adr end   ****************************************************/
}¢--- A540769.WK.REXX.O13(ALIB) cre=2009-04-21 mod=2011-09-08-10.38.32 A540769 ---
/* rexx  **************************************************************

aLib: activate and deactivate tso and ispf libraries.

synopsis:     alib     ¢-OPTIONS!... ¢DSN!...  ...

Options designating the Libaries to activate/deactivate
   opt LLQ def Library
   -e  EXEC    TSO EXEC Library: altlib application(exec)
   -r  REXX    TSO EXEC Library: altlib application(exec)
   -f  LOAD    TSO TSOLIB (warning: must be pushed on tso stack
                    and will only be processed when rexx finishes)
   -p  PANELS  ISPPLIB: ispf panels
   -m  MSGS    ISPMLIB: ispf messages
   -t  TABLES  ISPTLIB: ispf tables input
   -u  TABLES  ISPTABL: ispf tables update
   -s  SKELS   ISPSLIB: ispf skeletons
   -l  LOAD    ISPLLIB: ispf load

other standalone options:
   -a  activate (default)
   -d  deactivate
   -?  or ? for this help

options taking values:
   -q<llqs> LowLevelQualifiers, with <llqs> one of the following
       *       the default LLQ from above (default)
       empty   no llq
       list    a comma separated list of llqs
   -c<application> if nonEmpty dsn is interpreted
       as a ChangeMan PackageNumber of this application
       otherwise as a (tso) datasetName (the default)
***********************************************************************/

defLib  = wk
self    = defLib'.REXX(ALIB)'
info = ' PPLIBPANELS MMLIBMSGS TTLIBTABLES UTABLTABLES SSLIBSKELS' ,
       ' LLLIBLOAD   ETSOAEXEC RTSOAREXX FTSOLLOAD'
do ix=1 to words(info)
    op = left(word(info, ix), 1)
    libs.op = ''
    end
libs = 'R'
newLibs = ''
fun = 'activate'
llq = '*'
cMan = ''
rexxLib = 'A540769.WK.REXX'
skels   = rexxLib'.SKELS'

parse arg mainArgs
call errReset 'hi'
if mainArgs = '' then
    call adrEdit 'macro (mainArgs)', '*'

if mainArgs == 'returnRexxlib' then
    return rexxLib
else if mainArgs == 'returnRexxlibSkels' then
    return rexxLib skels


say self 'start args' mainArgs

mainArgs = translate(mainArgs)
dsnCnt = 0

    do wx=1 by 1
        w = word(mainArgs, wx)
        if w = '' then do
            if dsnCnt = 0 then
                w = defLib
            else
                leave
            end
        if pos('?', w) > 0 then do
            return help()
            return
            end
        else if left(w,1) = '-' then do           /* options */
            if w = '-' then do
                fun = 'deactivate'
                iterate
                end
            do cx=2 to length(w)                  /* each option */
                ch = substr(w, cx, 1)
                if ch = '?' then
                    call help
                else if ch = 'A' then
                    fun = 'activate'
                else if ch = 'D' then
                    fun = 'deactivate'
                else if ch = 'C' then do
                    cMan = substr(w, cx+1)
                    leave
                    end
                else if ch = 'Q' then do
                    llq = translate(substr(w, cx+1), ' ', ',')
                    leave
                    end
                else if pos(' ' || ch, info) > 0 then
                    newLibs = newLibs || ch
                else
                    call errHelp 'bad option' ch 'in' w
                end  /* do each option character */
            end
        else do                                   /* operands */
            dsnCnt = dsnCnt + 1
            if newLibs <> '' then do
                libs = newLibs
                newLibs = ''
                end
            if cMan = '' then
                pref = dsn2jcl(w, 1)
            else
                pref = "CMN.DIV.P0."cMan".#"right(w, 6, '0')
            do cx = 1 to length(libs)         /* each lib */
                op = substr(libs, cx, 1)
                if llq = '' then
                    libs.op = libs.op "'"pref"'"
                else if llq = '*' then do
                    ii = word(substr(info, pos(' '||op, info)), 1)
                    libs.op = libs.op "'"pref'.'substr(ii, 6)"'"
                    end
                else do
                    do lx=1 to words(llq)
                        lw = word(llq, lx)
                        libs.op = libs.op "'"pref '.'lw"'"
                        end
                    end
                end /* do each lib */
            end
        end /* do each word */

nok = ''
do ix=1 to words(info)
    ii = word(info, ix)
    op = left(ii, 1)
    if libs.op = '' then
        iterate
/*  say fun op ii libs.op  */
    if substr(ii, 2, 4) = 'TSOA' then do
        c = 'altlib' fun 'application(exec)'
        if fun = 'activate' then
            c =  c "dataset("libs.op") UNCOND"
        call adrTso c
        end
    else if substr(ii, 2, 4) = 'TSOL' then do
        c = 'tsolib' fun
        if fun = 'activate' then
            c =  c "dataset("libs.op") UNCOND"
        push c
        end
    else do
        c = 'libdef ISP'substr(ii, 2, 4)
        if fun = 'activate' then
            c =  c "dataset id("strip(libs.op)") UNCOND"
        if 0 <> adrIsp(c, '*') then
            nok = nok op'='substr(ii, 2, 4)'='rc
        end
    say /* fun op */ 'rc' rc c
    end
if nok <> '' then
    say 'alib' fun 'errors for' nok
exit

/* copy adrIsp begin *************************************************/
/**********************************************************************
    lmd: catalog read
    call sequence: lmdBegin, lmdNext*, lmdEnd
        mit lmd service (mit save in file und read,
                         weil list zu langsam und listcat abstürzt)
        1. arg (grp)     als group dataset für lmd save
                         und dd name für file read
***********************************************************************/
lmdBegin: procedure
    parse arg grp, lev
    call adrIsp 'lmdinit listid(lmdId) level('lev')'
    res = adrIsp('lmdlist listid(&lmdId) option(save) group('grp')', 4)
    call adrIsp 'lmdfree listid(&lmdId)'
    if res = 0 then do
        call trc timing() 'lmdlist save' grp lev
        call adrTso 'alloc dd('grp') shr dsn('grp'.datasets)'
        end
    else do
        call trc 'no datasets found' timing() 'lmdlist save' grp lev
        call adrTso 'alloc dd('grp') dummy'
        end
    call readDDBegin grp
return /* end lmdBegin */

lmdNext:
    parse arg ggGrp, ggSt, withVolume
    if ^ readDD(ggGrp, ggSt) then
         return 0
    if withVolume ^== 1 then
        do ggIx=1 to value(ggSt'0')
            x = value(ggSt || ggIx, word(value(ggSt || ggIx), 1))
            end
    return 1
endSubroutin lmdNext

lmdEnd: procedure
    parse arg grp
    call readDDEnd grp
    call adrTso 'free dd('grp')'
return /* end lmdEnd */

lmd: procedure expose m.
    parse arg lev, withVol
    call lmdBegin gg1, lev
    do while lmdNext(gg1, q., withVol)
        do x=1 to q.0
           call jOut q.x
           end
        end
    call lmdEnd gg1
    return
endProcedure lmd
/**********************************************************************
    member list of a pds:
        call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmm: procedure expose m.
parse arg dsn
    id = lmmBegin(dsn)
    do ix=1 by 1
        m = lmmNext(id)
        if m = '' then
            leave
        call jOut m
        end
    call lmmEnd id
    return
endProcedure lmm

lmmBegin: procedure
parse arg dsn
    mbr = dsnGetMbr(dsn)
    pds = dsnSetMbr(dsn, )
    call adrIsp "LMINIT DATAID(lmmId) DATASET('"pds"') ENQ(SHRW)"
    call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
    res = lmmId
    if mbr <> '' then
        res = res 'pattern('mbr')'
    return res
endProcedure lmmBegin

lmmEnd: procedure
parse arg lmmId opt
    call adrIsp "LMMLIST DATAID("lmmId") option(free)", 8
    call adrIsp "LMCLOSE DATAID("lmmId")"
    call adrIsp "LMFREE DATAID("lmmId")"
    return
endProcedure lmmEnd

lmmNext: procedure
parse arg lmmId opt
    if adrIsp("LMMLIST DATAID("lmmid")" ,
               "OPTION(LIST) MEMBER(Mbr)" opt, 4 8) = 0 then
        return strip(mbr)
    else
        return ''
endProcedure lmmNext

lmmRm: procedure
parse arg dsn, mbrs
    mbrs = dsnGetMbr(dsn) mbrs
    pds = dsnSetMbr(dsn, )
    call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
    call adrIsp "LMOPEN DATAID("lmmId") OPTION(OUTPUT) "
    err = ''
    do wx=1 to words(mbrs)
        m1 = word(mbrs, wx)
        rr = adrIsp("lmmDel dataid("lmmId") member("m1")", 0 8 12)
        if rc = 0 then
            say 'removed' m1 'from' pds
        else if rc = 8 then
            say 'not found' m1 'in' pds
        else do
            err = 'error deleting' m1 'in' pds 'rc' rr strip(zerrlm)
            say err
            leave
            end
        end
    call adrIsp "LMCLOSE DATAID("lmmId")"
    call adrIsp "LMFREE DATAID("lmmId")"
    if err <> '' then
        call err err
    return
endProcedure lmmRm
/*--- address ispf with error checking -------------------------------*/
adrIsp:
    parse arg ggIspCmd, ggRet
    address ispexec ggIspCmd
    if rc = 0 then return 0
    else if ggRet == '*' then return rc
    else if wordPOS(rc, ggRet) > 0 then return rc
    else
        call err 'adr ispExec rc' rc 'in' ggIspCmd':' strip(zerrlm)
endSubroutine adrIsp

/*--- address editor with error checking -----------------------------*/
adrEdit:
    parse arg ggEditCmd, ggRet
    address isrEdit ggEditCmd
    if rc = 0 then return 0
    else if ggRet == '*' then return rc
    else if wordPOS(rc, ggRet) > 0 then return rc
    else
        call err 'adr isrEdit rc' rc 'for' ggEditCmd
endSubroutine adrEdit
/* copy adrIsp end   *************************************************/
/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
    parse arg ggTsoCmd, ggRet
    address tso ggTsoCmd
    if rc == 0                     then return 0
    else if ggRet == '*'           then return rc
    else if wordPos(rc, ggRet) > 0 then return rc
    else
        call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */

/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure
parse arg dsn ., addPrefix
    if left(dsn,1) = "'" then
        return strip(dsn, 'b', "'")
    sp = sysvar('SYSPREF')
    if sp == '' then
        sp = userid()
    cx = pos('~', dsn)
    if cx < 1 & addPrefix == 1 then
        return sp'.'dsn
    do while cx ^== 0
        le = left(dsn, cx-1)
        ri = substr(dsn, cx+1)
        if right(le, 1) == '.' | left(ri, 1) == '.' then
            dsn = le || sp || ri
        else
            dsn = le || left('.', le ^== '') || sp ,
                     || left('.', ri ^== '') || ri
        cx = pos('~', spec, cx)
        end
    return dsn
endProcedure dsn2Jcl

/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure
parse arg dsn .
    return "'"dsn"'"
endProcedure jcl2dsn

dsnSetMbr: procedure
parse arg dsn, mbr
     bx = pos('(', dsn)
     if bx > 0 then
         dsn = strip(left(dsn, bx-1))
     if mbr <> '' then
         dsn = dsn'('strip(mbr)')'
     return dsn
endProcedure dsnSetMbr

dsnGetMbr: procedure
parse arg dsn
     lx = pos('(', dsn)
     rx = pos(')', dsn, lx+1)
     if lx < 1 then
         return ''
     else if lx < rx then
         return substr(dsn, lx+1, rx-lx-1)
     else
         return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
    io: read or write a dataset with the following callsequences:
        read:  readDDBegin, readDD*,  readDDEnd
        write: writeBegin,  writeDD*, writeEnd

        readDD returns true if data read, false at eof
***********************************************************************/

/*--- prepare reading from a DD --------------------------------------*/
readDDBegin: procedure
return /* end readDDBegin */

/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt = '' then
        ggCnt = 100
    call adrTso 'execio' ggCnt 'diskr' ggDD '(stem' ggSt')', 2
    return (value(ggSt'0') > 0)
return /* end readDD */

/*--- finish reading DD  ggDD ----------------------------------------*/
readDDEnd: procedure
    parse arg ggDD
    call adrTso 'execio 0 diskr' ggDD '(finis)'
return /* end readDDEnd */

/*--- prepare writing to DD ggDD -------------------------------------*/
writeDDBegin: procedure
    parse arg ggDD
                  /* ensure file is erased, if no records are written */
    call adrTso 'execio' 0 'diskw' ggDD '(open)'
return /* end writeDDBegin */

/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    call adrTso 'execio' ggCnt 'diskw' ggDD '(stem' ggSt')'
    return
endSubroutine writeDD

/*--- end writing to dd ggDD (close) --------------------------------*/
writeDDEnd: procedure
    parse arg ggDD
    call adrTso 'execio 0 diskw' ggDD '(finis)'
return /* end writeDDEnd */

/*--- alloc a dsn or a dd
          spec '-'<ddName>
               datasetName? disposition? '.'? attributes? (':' newAtts)?
          disp default disposition
          dd   default dd name
          retRc   erlaubte ReturnCodes (leer = 0)
          returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, disp, dd, retRc
    ds = ''
    m.dsnAlloc.dsn = ds
    if left(spec, 1) = '-' then
        return strip(substr(spec, 2))
    if left(spec, 1) = '&' then /* external spec is handled ok */
        spec = strip(substr(spec, 2))
    do wx=1 by 1
        w = word(spec, wx)
        if w = '' | abbrev(w, '.') | abbrev(w, ':') then
            leave
        else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
            disp = w
        else if w = 'CATALOG' then
            disp = disp w
        else if abbrev(w, 'DD(') then
            dd = substr(w, 4, length(w)-4)
        else if abbrev(w, 'DSN(') then
            ds = strip(substr(w, 5, length(w)-5))
        else if ds = '' then
            ds = dsn2jcl(w)
        else
            leave
        end
    rest = subword(spec, wx)
    if abbrev(rest, '.') then
        rest = substr(rest, 2)
    parse var rest rest ':' nn
    if dd <> '' & ds = '' & rest = '' & ^ abbrev(disp, 'SYSO') then
        call err "'return" dd"' no longer supported please use ="dd
    if dd = '' then do
        if symbol('m.adrTso.ddNum') = 'VAR' then
            dd = m.adrTso.ddNum + 1
        else
            dd = 1
        m.adrTso.ddNum = dd
        dd = 'DD' || dd
        end
    if disp = '' then
        disp = 'SHR'
    else if pos('(', ds) < 1 then
        nop
    else if disp = 'MOD' then
        call err 'disp mod for' ds
    else
        disp = 'SHR'
    m.dsnAlloc.dsn = ds
    if pos('/', ds) > 0 then
        return csmAlloc(dd, disp, ds, rest, nn, retRc)
    else
        return tsoAlloc(dd, disp, ds, rest, nn, retRc)
endProcedure dsnAlloc

tsoAlloc: procedure expose m.
parse arg dd, disp, dsn, rest, nn, retRc
    c = 'alloc dd('dd')' disp
    if dsn <> '' then
        c = c "DSN('"dsn"')"
    if retRc <> '' | nn = '' then do
        alRc = adrTso(c rest, retRc)
        if alRc <> 0 then
            return alRc
        return dd 'call adrTso "free dd('dd')";'
        end
    do retry=0 to 1
        alRc = adrTso(c rest, '*')
        if alRc = 0 then
            return dd 'call adrTso "free dd('dd')";'
        if nn = '' | wordPos(disp, 'OLD SHR') < 1 ,
            | sysDsn("'"m.dsnAlloc.dsn"'") ^== 'DATASET NOT FOUND' then
            leave
        say 'tsoAlloc rc' alRc 'for' c rest '...trying to create'
        call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(dsn, nn)
        call adrTso 'free  dd('dd')'
        end
    call err 'tsoAlloc rc' alRc 'for' c rest
endProcedure tsoAlloc

dsnCreateAtts: procedure expose m.
parse arg dsn, atts
    if abbrev(atts, ':') then do
        rl = substr(atts, 3)
        if abbrev(atts, ':F') then do
            if rl = '' then
                rl = 80
             atts = 'recfm(f b) lrecl('rl')' ,
                       'block(' (32760 - 32760 // rl)')'
            end
        else do
            if rl = '' then
                rl = 32756
            atts = 'recfm('substr(atts, 2, 1) 'b) lrecl('rl')' ,
                   'block(32760)'
            end
        end
    if pos('(', dsn) > 0 then
        atts = atts 'dsntype(library) dsorg(po)' ,
               "dsn('"dsnSetMbr(dsn)"')"
    else
        atts = atts "dsn('"dsn"')"
    return atts 'mgmtclas(s005y000) space(10, 1000) cyl'
endProcedure dsnCreateAtts

/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
    ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
    call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
    interpret subword(ggAlloc, 2)
    return
endSubroutine readDsn

/*--- write the dataset specified in ggDsnSpec from stem ggSt
          write ggCnt records if not empty otherwise ggst0
          if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
    call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
            '(stem' ggSt 'open finis)'
    interpret subword(ggAlloc, 2)
    if ggSay == 1 | m.debug == 1 then
       say ggCnt 'records written to' ggDsnSpec
    return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
/* copy err begin ******************************************************
    messages, errorhandling,help
***********************************************************************/
/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
parse arg oo, ha
    if pos('I', translate(oo)) > 0 then
        call adrIsp 'control errors return'
    m.err.opt = translate(oo, 'h', 'H')
    if ha == '' then
        drop m.err.handler
    else
        m.err.handler = ha
    return
endSubroutine errReset

/*--- error routine: abend with message ------------------------------*/
err:
    parse arg ggTxt, ggOpt
    drop err handler opt
    if ggOpt == '' & symbol('m.err.handler') == 'VAR' then
        interpret m.err.handler
    call errSay ggTxt
    parse source . . ggS3 .                           /* current rexx */
    if ggOpt == '' | ggOpt == '*' then
        ggOpt = translate(value('m.err.opt'), 'ht', 'HT')
    if pos('h', ggOpt) > 0  then do
        say 'fatal error in' ggS3': divide by zero to show stackHistory'
        x = 1 / 0
        end
    say 'fatal error in' ggS3': exit(12)'
    exit errSetRc(12)
endSubroutine err

/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
    interpret 'assertRes =' arg(1)
    if ^ assertRes then
        call err 'assert failed' arg(1)':' arg(2)
    return
endProcedure assert

/*--- say an errorMessage msg with pref pref
           split message in lines at '/n'
           say addition message in stem st ---------------------------*/
errSay: procedure expose m.
parse arg msg, st, pref
    parse source . . ggS3 .                           /* current rexx */
    if pref == 'e' | (pref == '' & st == '') then
        msg = 'fatal error:' msg
    else if pref == 'w' then
        msgf = 'warning:' msg
    else if pref == 0 then
        nop
    else if right(pref, 1) ^== ' ' then
        msg = pref':' msg
    else
        msg = pref || msg
    sx = 0
    bx = -1
    do lx=1 until bx >= length(msg)
        ex = pos('\n', msg, bx+2)
        if ex < 1 then
            ex = length(msg)+1
        if st == '' then do
            say substr(msg, bx+2, ex-bx-2)
            end
        else do
            sx = sx+1
            m.st.sx = substr(msg, bx+2, ex-bx-2)
            m.st.0 = sx
            end
        bx = ex
        end
    return
endProcedure errSay

/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg, op
    say 'fatal error:' msg
    call help
    call err msg, op
endProcedure errHelp

/*--- set rc for ispf: -------------------------------------------------
    if a cmd is run by ispStart, its RC is ignored,
         but ISPF passes the value of the shared varible 3IspfRc
         back as return code
----------------------------------------------------------------------*/
errSetRc: procedure
parse arg zIspfRc
    if sysVar('sysISPF') = 'ACTIVE' then do
        address ispExec vput 'zIspfRc' shared
        end
    return zIspfRc
endProcedure errSetRc

/*--- output a trace message if m.trace is set -----------------------*/
trc: procedure expose m.
parse arg msg
    if m.trace == 1 then
        say 'trc:' msg
    return
endProcedure trc

/*--- quote string txt using quoteChar qu ("""" ==> ") ---------------*/
quote: procedure
parse arg txt, qu
    if qu = '' then
        qu = '"'
    res = qu
    ix = 1
    do forever
        qx = pos(qu, txt, ix)
        if qx = 0 then
            return res || substr(txt, ix) || qu
        res = res || substr(txt, ix, qx-ix) || qu || qu
        ix = qx + length(qu)
        end
endProcedure quote

debug: procedure expose m.
parse arg msg
    if m.debug == 1 then
        say 'debug' msg
    return
endProcedure debug

/*--- return current time and cpu usage ------------------------------*/
timing: procedure
return time() time('E') sysvar('syscpu') /* sysvar('syssrv') */

/--- display the first comment block of the source as help -----------*/
help: procedure
    parse source . . s3 .
    say right(' help for rexx' s3, 79, '*')
    do lx=1 by 1
        if pos('/*', sourceLine(lx)) > 0 then
            leave
        else if lx > 10 then do
            say 'initial commentblock not found for help'
            return
            end
        end
    do lx=lx+1 by 1
        li = strip(sourceLine(lx), 't', ' ')
        if pos('*/', li) > 0 then
            leave
        say li
        end
    say right(' end help for rexx' s3, 79, '*')
    return 4
endProcedure help
/* copy err end   *****************************************************/
}¢--- A540769.WK.REXX.O13(ALIB222) cre=2013-09-09 mod=2013-09-09-08.19.50 A540769 ---
/* rexx  ---------------------------------------------------------------
          caDb2:    start the ca tools with cs Libraries
          options d: debug, say which libraries
                  w: with test and personal work libs (wk.rexx ...)
                  t: with test libs (dsn.cadb2.cs.execTst ...)
                   : with prod libs (dsn.cadb2.cs.exec)
---------------------------------------------------------------------*/
parse arg args
parse source . . self . selfLib .
trace ?r
say self 'in' selfLib
m.pre = 'dsn.db2'
if self = 'ALIB' then do
    if args = '-' then
        return deactLibs()
    else
        return actLibs()
    end
call actLibs
interpret 'call' self 'args'
res = result
cal deactLibs
return res

actLibs: procedure expose m.
    call adrTso "ALTLIB ACTIVATE APPLICATION(EXEC)",
                    "DATASET('"m.pre".exec') stack"
    call adrIsp "libDef ispPLib dataset",
                    "id('"m.pre".panel') stack"
return
endProcedure actLibs


deactLibs: procedure expose m.
    call adrTso "ALTLIB DEACTIVATE APPLICATION(EXEC)"
    call adrIsp "libDef ispPLib"
return
endProcedure deactLibs
/* copy adrIsp begin *************************************************/
/**********************************************************************
    lmd: catalog read
    call sequence: lmdBegin, lmdNext*, lmdEnd
        mit lmd service (mit save in file und read,
                         weil list zu langsam und listcat abstürzt)
        1. arg (grp)     als group dataset für lmd save
                         und dd name für file read
***********************************************************************/
lmdBegin: procedure expose m.
    parse arg grp, lev
    call adrIsp 'lmdinit listid(lmdId) level('lev')'
    res = adrIsp('lmdlist listid(&lmdId) option(save) group('grp')', 4)
    call adrIsp 'lmdfree listid(&lmdId)'
    if res = 0 then do
        call trc timing() 'lmdlist save' grp lev
        call adrTso 'alloc dd('grp') shr dsn('grp'.datasets)'
        end
    else do
        call trc 'no datasets found' timing() 'lmdlist save' grp lev
        call adrTso 'alloc dd('grp') dummy'
        end
    call tsoOpen grp, 'R'
return /* end lmdBegin */

lmdNext:
    parse arg ggGrp, ggSt, withVolume
    if \ readDD(ggGrp, ggSt) then
         return 0
    if withVolume \== 1 then
        do ggIx=1 to value(ggSt'0')
            x = value(ggSt || ggIx, word(value(ggSt || ggIx), 1))
            end
    return 1
endSubroutin lmdNext

lmdEnd: procedure expose m.
    parse arg grp
    call tsoClose grp
    call adrTso 'free dd('grp')'
return /* end lmdEnd */

lmd: procedure expose m.
    parse arg lev, withVol
    call lmdBegin gg1, lev
    do while lmdNext(gg1, q., withVol)
        do x=1 to q.0
           call out q.x
           end
        end
    call lmdEnd gg1
    return
endProcedure lmd
/**********************************************************************
    member list of a pds:
        call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmm: procedure expose m.
parse arg dsn
    id = lmmBegin(dsn)
    do ix=1 by 1
        m = lmmNext(id)
        if m = '' then
            leave
        call out m
        end
    call lmmEnd id
    return
endProcedure lmm

lmmBegin: procedure expose m.
parse arg dsn
    mbr = dsnGetMbr(dsn)
    pds = dsnSetMbr(dsn, )
    call adrIsp "LMINIT DATAID(lmmId) DATASET('"pds"') ENQ(SHRW)"
    call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
    res = lmmId
    if mbr <> '' then
        res = res 'pattern('mbr')'
    return res
endProcedure lmmBegin

lmmEnd: procedure expose m.
parse arg lmmId opt
    call adrIsp "LMMLIST DATAID("lmmId") option(free)", 8
    call adrIsp "LMCLOSE DATAID("lmmId")"
    call adrIsp "LMFREE DATAID("lmmId")"
    return
endProcedure lmmEnd

lmmNext: procedure expose m.
parse arg lmmId opt
    if adrIsp("LMMLIST DATAID("lmmid")" ,
               "OPTION(LIST) MEMBER(Mbr)" opt, 4 8) = 0 then
        return strip(mbr)
    else
        return ''
endProcedure lmmNext

lmmRm: procedure expose m.
parse arg dsn, mbrs
    mbrs = dsnGetMbr(dsn) mbrs
    pds = dsnSetMbr(dsn, )
    call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
    call adrIsp "LMOPEN DATAID("lmmId") OPTION(OUTPUT) "
    err = ''
    do wx=1 to words(mbrs)
        m1 = word(mbrs, wx)
        rr = adrIsp("lmmDel dataid("lmmId") member("m1")", 0 8 12)
        if rc = 0 then
            say 'removed' m1 'from' pds
        else if rc = 8 then
            say 'not found' m1 'in' pds
        else do
            err = 'error deleting' m1 'in' pds 'rc' rr strip(zerrlm)
            say err
            leave
            end
        end
    call adrIsp "LMCLOSE DATAID("lmmId")"
    call adrIsp "LMFREE DATAID("lmmId")"
    if err <> '' then
        call err err
    return
endProcedure lmmRm
/*--- address ispf with error checking -------------------------------*/
adrIsp:
    parse arg ggIspCmd, ggRet
    address ispexec ggIspCmd
    if rc = 0 then return 0
    else if ggRet == '*' then return rc
    else if wordPOS(rc, ggRet) > 0 then return rc
    else
        call err 'adr ispExec rc' rc 'in' ggIspCmd':' strip(zerrlm)
endSubroutine adrIsp

/*--- address editor with error checking -----------------------------*/
adrEdit:
    parse arg ggEditCmd, ggRet
    address isrEdit ggEditCmd
    if rc = 0 then return 0
    else if ggRet == '*' then return rc
    else if wordPOS(rc, ggRet) > 0 then return rc
    else
        call err 'adr isrEdit rc' rc 'for' ggEditCmd
endSubroutine adrEdit
/* copy adrIsp end   *************************************************/
/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
    parse arg ggTsoCmd, ggRet
    address tso ggTsoCmd
    if rc == 0                     then return 0
    else if ggRet == '*'           then return rc
    else if wordPos(rc, ggRet) > 0 then return rc
    else
        call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */

/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure expose m.
parse upper arg dsn ., addPrefix
    if left(dsn,1) = "'" then
        return strip(dsn, 'b', "'")
    sp = sysvar('SYSPREF')
    if sp == '' then
        sp = userid()
    cx = pos('~', dsn)
    if cx < 1 & addPrefix == 1 then
        return sp'.'dsn
    do while cx \== 0
        le = left(dsn, cx-1)
        ri = substr(dsn, cx+1)
        if right(le, 1) == '.' | left(ri, 1) == '.' then
            dsn = le || sp || ri
        else
            dsn = le || left('.', le \== '') || sp ,
                     || left('.', ri \== '') || ri
        cx = pos('~', spec, cx)
        end
    return dsn
endProcedure dsn2Jcl

/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure expose m.
parse arg dsn .
    return "'"dsn"'"
endProcedure jcl2dsn

dsnSetMbr: procedure expose m.
parse arg dsn, mbr
     bx = pos('(', dsn)
     if bx > 0 then
         dsn = strip(left(dsn, bx-1))
     if mbr <> '' then
         dsn = dsn'('strip(mbr)')'
     return dsn
endProcedure dsnSetMbr

dsnGetMbr: procedure expose m.
parse arg dsn
     lx = pos('(', dsn)
     rx = pos(')', dsn, lx+1)
     if lx < 1 then
         return ''
     else if lx < rx then
         return substr(dsn, lx+1, rx-lx-1)
     else
         return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
    io: read or write a dataset with the following callsequences:
        read:  tsoOpen...'R', readDD*,  tsoClose
        write: tsoOpen...'W', writeDD*, tsoClose

        readDD returns true if data read, false at eof
        do not forget that open is mandatory to write empty file|
***********************************************************************/

/*--- open dd for read (rw='R') or write (rw='W') --------------------*/
tsoOpen: procedure expose m.
parse upper arg dd, rw
    return adrTso('execio' 0 'disk'RW tsoDD(dd, 'o') '(open)')
return /* end tsoOpen */

/*--- close dd -----------------------------------------------------*/
tsoClose: procedure expose m.
    parse upper arg dd
    return adrTso('execio 0 diskW' dd '(finis)')
endProcedure tsoClose

/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt = '' then
        ggCnt = 100
    call adrTso 'execio' ggCnt 'diskR' ggDD '(stem' ggSt')', 2
    return (value(ggSt'0') > 0)
return /* end readDD */

/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    call adrTso 'execio' ggCnt 'diskW' ggDD '(stem' ggSt')'
    return
endSubroutine writeDD

/*--- readNx: read next line, using buffer ---------------------------*/
/*--- begin: allocate dsnSpec and ini ------------------------ -------*/
readNxBegin: procedure expose m.
    parse arg m, m.m.dsn, m.m.dd, m.m.Cnt
    if m.m.dd = '' then
        m.m.dd = 'DDNX*'
    if m.m.cnt = '' then
        m.m.cnt = 1000
    m.m.cx = m.m.cnt + 999
    m.m.buf0x = 0
    m.m.0 = 0
    parse value dsnAlloc('dd('m.m.dd')' m.m.dsn) with m.m.dd m.m.free
    call tsoOpen m.m.dd, 'R'
    return m
endProcedure readDDNxBegin

/*--- return the stem of the next line, or '' at end -----------------*/
readNx: procedure expose m.
parse arg m
    m.m.cx = m.m.cx + 1
    if m.m.cx <= m.m.0 then
        return m'.'m.m.cx
    m.m.buf0x = m.m.buf0x + m.m.0
    if \ readDD(m.m.dd, 'M.'m'.', m.m.cnt)then
        return ''
    m.m.cx = 1
    return m'.1'
endProcedure readDDNx
/*--- return the stem of the curr line, '' at end --------------------*/
readNxCur: procedure expose m.
parse arg m
    if m.m.cx <= m.m.0 then
        return m'.'m.m.cx
    else
        return ''
endProcedure readNxCur

/*--- return the position (line number) of reader
           plus le characters of the current line (default 50) ------*/
readnxPos: procedure expose m.
parse arg m, le
    li = m'.'m.m.cx
    li = strip(m.li, 't')
    if arg() < 2 then
        le = 50
    if le < 1 then
        li = ''
    else if length(li) <= le then
        li = ':' li
    else
        li = ':' left(li, le-3)'...'
    return 'line' (m.m.buf0x + m.m.cx)li
endProcedure readnxPos

/*--- close and deallocate ------------------------------------------*/
readNxEnd: procedure expose m.
parse arg m
    call tsoClose m.m.dd
    call tsoFree m.m.free
    return
endProcedure readDDNxEnd

/*--- standardise a dsn spec
       word1             dsName or -
       word2             dd     or -
       word3             disp   or -
       word4 to first :  attributes in tso format
       after first :     attributes for new allocation
----------------------------------------------------------------------*/
dsnSpec: procedure expose m.
parse upper arg spec
    rr = ''      /* put leading - in separate words */
    do sx=1 while words(rr) < 3 & wx \= ''
        wx = word(spec, sx)
        do while abbrev(wx, '-') & words(rr) < 3
            wx = substr(wx, 2)
            rr = rr '-'
            end
        rr = rr wx
        end
    spec = rr subWord(spec, sx)
    na = ''
    dd = ''
    di = ''
    if left(spec, 1) = '&' then /* external spec is handled ok */
        spec = strip(substr(spec, 2))
    do wx=1 by 1
        w = word(spec, wx)
        if w = '' | abbrev(w, '.') | abbrev(w, ':') then
            leave
        else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
            di = w
        else if w = 'CATALOG' then
            di = di w
        else if abbrev(w, 'DD(') then
            dd = substr(w, 4, length(w)-4)
        else if abbrev(w, 'DSN(') then
            na = strip(substr(w, 5, length(w)-5))
        else if na == '' then
            na = dsn2jcl(w)
        else if pos('(', w) > 0 then
            leave
        else if dd == '' then
            dd = w
        else if di == '' then
            di = w
        else
            leave
        end
    if na == '' then
        na = '-'
    else if abbrev(na, "'") then
        na = substr(na, 2, length(na)-2)
    if dd == '' then dd = '-'
    if di == '' then di = '-'
    re = subword(spec, wx)
    if abbrev(re, '.') then
        re = substr(re, 2)
    return na dd di re
endProcedure dsnSpec

/*--- alloc a dsn with dsnAlloc
          if the dsn is inuse wait and retry
          until either the allocation is successfull
          or the timeout occurs --------------------------------------*/
dsnAllocWait: procedure expose m.
parse upper arg spec, pDi, pDD, timeOut
    x = max(1, arg() - 1)
    do rt=0
        m.adrTsoAl.1 = ''
        m.adrTsoAl.2 = ''
        m.adrTsoAl.3 = ''
        call outtrap m.adrTsoAl.
        res = dsnAlloc(spec, pDi, pDD, '*')
        call outtrap off
        if \ datatype(res, 'n') then
            return res
        msg = m.adrTsoAl.1'\n'm.adrTsoAl.2'\n'm.adrTsoAl.3
        if rt > timeOut & timeOut \== '' then
            return err('timeout allocating' spec time() '\n'msg)
        if pos('DATA SET IS ALLOCATED TO ANOTHER', msg) < 1 then
            return err('allocating' spec'\n'msg)
        say time() 'sleep and retry alloc' spec
        call sleep 1, 0
        end
endProcedure dsnAllocWait

/*--- alloc a dsn or a dd
          spec '-'<ddName>
               datasetName? disposition? '.'? attributes? (':' newAtts)?
          disp default disposition
          dd   default dd name
          retRc   erlaubte ReturnCodes (leer = 0)
          returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, pDi, pDD, retRc
    parse value dsnSpec(spec) with na dd di rest
    if na = '-' then
        m.dsnAlloc.dsn = ''
    else
        m.dsnAlloc.dsn = na
    if dd == '-' & pDD \== '' then
        dd = pDD
    if dd == '-' then
        dd = 'DD*'
    dd = tsoDD(dd, 'a')
    if na == '-' & di == '-' & rest = '' then
        return dd
    if di = '-' then
        if pDi == '' then
            di = 'SHR'
        else
            di = pDi
    if pos('(', na) < 1 then
        nop
    else if di = 'MOD' then
        call err 'disp mod for' na
    else
        di = 'SHR'
    if pos('/', na) > 0 then
        rx = csmAlloc(na dd di rest, retRc)
    else
        rx = tsoAlloc(na dd di rest, retRc)
    if rx = 0 then
        return dd dd
    else
        return rx
endProcedure dsnAlloc

/*--- find a free dd with prefix dd ----------------------------------*/
tsoDD: procedure expose m.
parse arg dd, f
    if symbol('m.tso.ddAlloc') \== 'VAR' then do
        call errIni
        m.tso.ddAlloc = ''
        m.tso.ddOpen  = ''
        end
    if m.err.ispf then
        address ispExec 'vget wshTsoDD shared'
    else
        wshTsoDD = m.tso.ddAlloc
    if f == '-' then do
        ax = wordPos(dd, m.tso.ddAlloc)
        if ax > 0 then
            m.tso.ddAlloc = delWord(m.tso.ddAlloc, ax, 1)
        ox = wordPos(dd, m.tso.ddOpen)
        if ox > 0 then
            m.tso.ddOpen  = delWord(m.tso.ddOpen , ox, 1)
        if ax < 1 & ox < 1 then
            call err 'tsoDD dd' dd 'not used' m.tso.ddAlloc m.tso.ddOpen
        sx = wordPos(dd, wshTsoDD)
        if sx > 0 then
            wshTsoDD  = delWord(wshTsoDD , sx, 1)
        end
    else if f == 'o' then do
        if wordPos(dd, m.tso.ddOpen m.tso.ddAlloc) < 1 then
            m.tso.ddOpen = strip(m.tso.ddOpen dd)
        end
    else if f <> 'a' then do
        call err 'tsoDD bad fun' f
        end
    else do
        if right(dd, 1) = '*' then do
            dd = left(dd, length(dd)-1) || m.err.screen
            cx = lastPos(' 'dd, ' 'm.tso.ddAlloc)
            if cx > 0 then do
                old = word(substr(m.tso.ddAlloc, cx), 1)
                if old = dd then
                    dd = dd'1'
                else if datatype(substr(old, length(dd)+1), 'n') then
                    dd = dd || (substr(old, length(dd)+1) + 1)
                else
                    call err 'tsoDD old' old 'suffix not numeric dd' dd
                end
            end
        if wordPos(dd, m.tso.ddAlloc) < 1 then
            m.tso.ddAlloc = strip(m.tso.ddAlloc dd)
        if wordPos(dd, wshTsoDD) < 1 then
            wshTsoDD = strip(wshTsoDD dd)
        end
    if m.err.ispf then
        address ispExec 'vPut wshTsoDD shared'
    return dd
endProcedure tsoDD

tsoAlloc: procedure expose m.
parse arg na dd disp rest ':' nn, retRc
    c = 'alloc dd('dd')' disp
    if na \== '-' then
        c = c "DSN('"na"')"
    else if disp = 'NEW' and nn \== '' then
        c = c dsnCreateAtts(,nn)
    call outtrap m.adrTsoAl.
    alRc = adrTso(c rest, '*')
    call outtrap off
    if alRc =  0 then
        return 0
    if nn \= '' & wordPos(disp, 'OLD SHR') > 0 ,
          & sysDsn("'"m.dsnAlloc.dsn"'") == 'DATASET NOT FOUND' then do
        say 'tsoAlloc creating' c rest ':'nn
        call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(na, nn)
        call adrTso 'free  dd('dd')'
        return tsoAlloc(na dd disp rest, retRc)
        end
    say 'rc='alRc 'for' c rest
    call saySt adrTsoal
    if retRc = '*' | wordPos(alRc, retRc) > 0 then
        return alRc
    call err 'tsoAlloc rc' alRc 'for' c rest
endProcedure tsoAlloc

tsoAtts: procedure expose m.
parse arg dsn
    rc = listDsi("'"dsn"' SMSINFO")
    if rc = 0 then
        mv = ''
    else if rc = 4 & sysReason = 19 then do
        mv = 'UCOUNT(30)' /* 7.8.13 corrected attribute */
        say 'creating' dsn 'with multi volume' mv
        end
    else if rc ^= 0 then
        call err 'listDsi rc' rc 'reason' sysReason,
                             sysMsgLvl1 sysMsgLvl2
    al = 'CAT'
    al = ''
    if right(sysDsSms, 7) == 'LIBRARY' ,
        | abbrev(sysDsSms, 'PDS') then
         al = al 'DSNTYPE(LIBRARY)'
    if sysUnits = 'TRACK' then
        sysUnits = 'TRACKS'
    return al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
        "DATACLAS("sysDataClass")" ,
        "RECFM("translate('1 2 3', ' 'sysREcFM, ' 123')")",
        "LRECL("SYSLRECL")",
        "SPACE("sysPrimary"," sysSeconds")" sysUnits mv
    /*  "blksize("sysBLkSIZE")" removed 3.4.13: let sms do the magic */
endProcedure tsoAtts

tsoFree: procedure expose m.
parse arg ddList, ggRet
    do dx=1 to words(ddList)
        dd = word(ddList, dx)
        call adrTso 'free dd('dd')', ggRet
        call tsoDD dd, '-'
        end
    return
endProcedure tsoFree

tsoFreeAll: procedure expose m.
    all = m.tso.ddAlloc m.tso.ddOpen
    do ax = 1 to words(all)
        call adrTso 'execio 0 diskW' word(all, ax) '(finis)', '*'
        end
    m.tso.ddOpen = ''
    call tsoFree m.tso.ddAlloc, '*'
    return
endProcedure tsoFreeAll

dsnCreateAtts: procedure expose m.
parse arg dsn, atts, forCsm
    forCsm = forCsm == 1
    aU = ' 'translate(atts)
    res = ''
    if dsn \== '' then
        res = "dataset('"dsnSetMbr(dsn)"')"
    if abbrev(atts, '~') then
        return res tsoAtts(substr(atts, 2))
    if abbrev(atts, ':') then do
        parse var atts a1 atts
        rl = substr(a1, 3)
        if abbrev(a1, ':F') then do
            if rl = '' then
                rl = 80
            recfm='f b'
            end
        else do
            if rl = '' then
                rl = 32756
            recfm = substr(a1, 2, 1) 'b'
            end
        res =  res "recfm("space(recfm, 1-forCsm)") lrecl("rl")"
        end
    if pos('(', dsn) > 0 & pos(' DSNTYPE(', aU) < 1 ,
                         & pos(' DSORG(',   aU) < 1 then
        res = res 'dsntype(library) dsorg(po)'
    if pos(' MGMTCLAS(', aU) < 1 then
        res = res 'mgmtclas(COM#A091)'
    if pos(' SPACE(', aU) < 1 then
        res = res 'space(100, 500) cyl' || copies('inder', forCsm)
    return res atts
endProcedure dsnCreateAtts
/*--- check if a dataset is archive ------------------------------------
          returns 'ok'                    if dataset on disk
                  'not'                   if dataset is not catalogued
                  'arc'                   if dataset archived
                  listDsi errorMsg        otherwise ------------------*/
dsnArc: procedure expose m.
parse upper arg dsn
    lc = listDsi("'"strip(dsn)"' noRecall")
    if lc = 0 then
        return 'ok'
    else if lc=4 & sysReason = 19 then  /* multiple volumes */
        return 'ok'
    else if lc=16 & sysReason = 5 then
        return 'notCat'
    else if lc=16 & sysReason = 9 then
        return 'arc'
    else
        return 'listDsi cc='lc', sysReason='sysReason ,
                          'm2='sysMsgLvl2', m1='sysMsgLvl1
endProcedure dsnArc
/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
    ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
    call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
    call tsoFree word(ggAlloc, 2)
    return
endSubroutine readDsn

/*--- write the dataset specified in ggDsnSpec from stem ggSt
          write ggCnt records if not empty otherwise ggst0
          if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
    call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
            '(stem' ggSt 'open finis)'
    call tsoFree word(ggAlloc, 2)
    if ggSay == 1 | m.debug == 1 then
       say ggCnt 'records written to' ggDsnSpec
    return
endSubroutine writeDsn

copyDSN: procedure expose m.
parse arg frSpec, toSpec, ggSay
    parse value dsnAlloc(frSpec, 'SHR', 'FRDD') with frDD frFr
    parse value dsnAlloc(toSpec, 'OLD', 'TODD') with toDD toFr
    call tsoOpen frDD, 'R'
    call tsoOpen toDD, 'W'
    cnt = 0
    do while readDD(frDD, r.)
        call writeDD toDD, r.
        cnt = cnt + r.0
        end
    call tsoClose frDD
    call tsoClose toDD
    call tsoFree frFr toFr
    if ggSay == 1 | m.debug == 1 then
       say cnt 'records copied from' frSpec 'to' to toSpec
    return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
/* copy err begin *** errorhandling, messages, help    ****************/
errIni: procedure expose m.
    if m.err.ini == 1 then
        return
    m.err.ini     = 1
    m.err.handler = ''
    m.err.cleanup = ';'
    m.err.opt     = ''
    parse source m.err.os .
    m.err.ispf    = 0
    m.err.screen  = 0
    if m.err.os \== 'LINUX' then
        if sysVar('sysISPF') = 'ACTIVE' then do
            m.err.ispf = 1
            address ispExec 'vget zScreen shared'
            m.err.screen = zScreen
            end
    return
endProcedure errIni

/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
    call errIni
    parse arg m.err.opt, m.err.handler
    if pos('I', translate(m.err.opt)) > 0 & m.err.ispf then
        address ispExec 'control errors return'
    return
endSubroutine errReset

/*--- error routine: abend with message ------------------------------*/
err:
    parse arg ggTxt, ggOpt
    call errIni
    drop err handler cleanup opt call return
    if ggOpt == '' & m.err.handler \== '' then
        interpret m.err.handler
    call errSay 'f}'ggTxt
    call errCleanup
    if ggOpt == '' then
        ggOpt = m.err.opt
    upper ggOpt
    if pos('T', ggOpt) > 0  then do
        trace ?r
        say 'trace ?r in err'
        end
    if pos('H', ggOpt) > 0 & m.err.eCat == 'f' then do
        call errSay ' }errorhandler exiting with divide by zero' ,
                                   'to show stackHistory'
        x = 1 / 0
        end
    call errSay ' }errorhandler exiting with exit(12)'
    exit errSetRc(12)
endSubroutine err

/*--- set rc for ispf: -------------------------------------------------
    if a cmd is run by ispStart, its RC is ignored,
         but ISPF passes the value of the shared variable zIspfRc
         back as return code
----------------------------------------------------------------------*/
errSetRc: procedure expose m.
parse arg zIspfRc
    if m.err.ispf then
        address ispExec vput 'zIspfRc' shared
    return zIspfRc
endProcedure errSetRc

/*--- error routine: user message cleanup exit -----------------------*/
errAddCleanup: procedure expose m.
parse arg code
    call errIni
        /* concatenate backwards, then it is executed also backwards */
    m.err.cleanup = ';'code || m.err.cleanup
    return
endProcedure errAddCleanup

errRmCleanup: procedure expose m.
parse arg code
    call errIni
    cx = pos(';'code';', m.err.cleanup)
    if cx > 0 then
        m.err.cleanup = left(m.err.cleanup, cx) ,
                     || substr(m.err.cleanup, cx + length(code)+2)
    return
endProcedure errRmCleanup

errCleanup: procedure expose m.
    call errIni
    errCleanup = m.err.cleanup
    if errCleanup <> ';' then do
        m.err.cleanup = ';'
        say 'err cleanup begin' errCleanup
        interpret errCleanup
        say 'err cleanup end' errCleanup
        end
    if symbol('m.tso.ddAlloc') == 'VAR' then
        call tsoFreeAll
    return
endProcedure errCleanup

/*--- say an errorMessage msg with pref and linesplits --------------*/
errSay: procedure expose m.
parse arg msg
    return saySt(errMsg(msg))

/*--- prefix an errormessage with pref,
          split it into lines at \n to stem m.err -------------------*/
errMsg: procedure expose m.
parse arg msg
    m.err.eCat = 'f'
    do while substr(msg, 2, 1) == '}'
        parse var msg m.err.eCat '}' msg
        end
    if m.err.eCat <> '' then do
       parse source . . ggS3 .                       /* current rexx */
       pTxt = ',error,fatal error,input error,syntax error,warning,'
       px = pos(','m.err.eCat, pTxt)
       if px < 1 then do
           m.err.eCat = 'f'
           px = pos(','m.err.eCat, pTxt)
           end
       msg = substr(pTxt, px+1, pos(',', pTxt, px+2)-px-1) ,
             'in' ggS3':' msg
       end
    return splitNl(err, msg)           /* split lines at \n */
endProcedure errMsg

splitNL: procedure expose m.
parse arg st, msg
    bx = 1
    do lx=1 to 20
        ex = pos('\n', msg, bx)
        if ex < bx then
            leave
        m.st.lx = substr(msg, bx, ex-bx)
        bx = ex+2
        end
    m.st.lx = substr(msg, bx)
    m.st.0 = lx
    return st
endProcedure splitNL

/*--- say (part of) the lines of a stem ----------------------------*/
saySt: procedure expose m.
parse arg st, fx, tx
    do lx=word(fx 1, 1) to word(tx m.st.0, 1)
        say m.st.lx
        end
    return st
endProcedure saySt

/*--- out (part of) the lines of a stem ----------------------------*/
outSt: procedure expose m.
parse arg st, fx, tx
    do lx=word(fx 1, 1) to word(tx m.st.0, 1)
        call out m.st.lx
        end
    return st
endProcedure outSt

/*--- say a trace message if m.trace is set --------------------------*/
debug: procedure expose m.
parse arg msg
    if m.debug == 1 then
        say 'debug:' msg
    return
endProcedure debug

/*--- output a trace if m.trace is set -------------------------------*/
trc: procedure expose m.
parse arg msg
    if m.trace == 1 then
        call out 'trc:' msg
    return
endProcedure trc

/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
    interpret 'assertRes =' arg(1)
    if assertRes \==1 then
        call err 'assert failed' arg(1) '==>' assertRes':' arg(2)
    return
endProcedure assert

/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg
    call errSay 'i}'msg
    call help 0
    call err 'i}'msg
endProcedure errHelp

/*--- display the first comment block of the source as help ----------*/
help: procedure expose m.
parse arg doClear
    if doClear \== 0 then
        address tso 'clear'
    parse source . . s3 .
    say right(' help for rexx' s3, 72, '*')
    do lx=1 while pos('/*', sourceLine(lx)) < 1
        if lx > 10 then
            return err('initial commentblock not found for help')
        end
    doInc = 1
    ho = m.err.helpOpt
    do lx=lx+1 to sourceline() while pos('*/', sourceline(lx)) = 0
        li = strip(sourceLine(lx), 't')
        cx = lastPos('{', li)
        if cx > 0 then do
            if length(ho) = 1 then
                doInc = cx = length(li) | pos(ho, li, cx+1) > 0
            li = left(li, cx-1)
            end
        if doInc then
            say li
        end
    say right(' end help for rexx' s3, 72, '*')
    return 4
endProcedure help

/* copy err end   *****************************************************/
/* copy out begin ******************************************************
    out interface simple with say or stem m.out only
***********************************************************************/
outIni: procedure expose m.
    return outDst()

/*--- output a message to the current destination -------------------*/
out: procedure expose m.
parse arg msg
    if m.out.ini \== 1 then
        call outDst
    if m.out.say then
        say msg
    if m.out.out then do
        ox = m.out.0 + 1
        m.out.0 = ox
        m.out.ox = msg
        end
    return 0
endProcedure out

/*--- set a new out destination and return old one ------------------*/
outDst: procedure expose m.
parse arg d
    if m.out.ini == 1 then
        old = '-' || left('s', m.out.say) || left('o', m.out.out)
    else do
        m.out.ini = 1
        old = '-s'
        end
    m.out.say = d == '' |  pos('s', d) > 0
    m.out.out = verify(d, 'o0', 'm') > 0
    if pos('0', d) > 0 | \ datatype(m.out.0, 'n') then
        m.out.0 = 0
    return old
endProcedure outDst
      /* return the contents of a string or std input */
inp2str: procedure expose m.
    parse arg rdr, opt
    return rdr
endProcedure inp2str
/* copy out end   *****************************************************/
}¢--- A540769.WK.REXX.O13(ANAPOST) cre=2012-12-04 mod=2013-01-21-08.34.14 A540769 ---
/* rexx                  anaPost    */
say 'andPost' arg() 'arg1='arg(1)
say 'andPost ddl='listFile('ddl')
call readDDBegin ddl
call readDD      ddl, i., '*'
call readDDEnd   ddl
say 'ddl' i.0 'lines 4=' strip(i.4)
say 'ddl' i.0 'lines 7=' strip(i.7)
exit
listFile: procedure expose m.
parse upper arg fi
    sysDSName = '???'
    lc = listDsi(fi "file")
    if lc = 0 then
        return sysDSName
 /* else if lc=4 & sysReason = 19 then  /* multiple volumes */
        return 'ok'
    else if lc=16 & sysReason = 5 then
        return 'notCat'
    else if lc=16 & sysReason = 9 then
        return 'arc'
 */ else
        call err 'listDsi cc='lc', sysReason='sysReason ,
                          'm2='sysMsgLvl2', m1='sysMsgLvl1
endProcedur listFile

/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
    parse arg ggTsoCmd, ggRet
    address tso ggTsoCmd
    if rc == 0                     then return 0
    else if ggRet == '*'           then return rc
    else if wordPos(rc, ggRet) > 0 then return rc
    else
        call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */

/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure expose m.
parse upper arg dsn ., addPrefix
    if left(dsn,1) = "'" then
        return strip(dsn, 'b', "'")
    sp = sysvar('SYSPREF')
    if sp == '' then
        sp = userid()
    cx = pos('~', dsn)
    if cx < 1 & addPrefix == 1 then
        return sp'.'dsn
    do while cx \== 0
        le = left(dsn, cx-1)
        ri = substr(dsn, cx+1)
        if right(le, 1) == '.' | left(ri, 1) == '.' then
            dsn = le || sp || ri
        else
            dsn = le || left('.', le \== '') || sp ,
                     || left('.', ri \== '') || ri
        cx = pos('~', spec, cx)
        end
    return dsn
endProcedure dsn2Jcl

/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure expose m.
parse arg dsn .
    return "'"dsn"'"
endProcedure jcl2dsn

dsnSetMbr: procedure expose m.
parse arg dsn, mbr
     bx = pos('(', dsn)
     if bx > 0 then
         dsn = strip(left(dsn, bx-1))
     if mbr <> '' then
         dsn = dsn'('strip(mbr)')'
     return dsn
endProcedure dsnSetMbr

dsnGetMbr: procedure expose m.
parse arg dsn
     lx = pos('(', dsn)
     rx = pos(')', dsn, lx+1)
     if lx < 1 then
         return ''
     else if lx < rx then
         return substr(dsn, lx+1, rx-lx-1)
     else
         return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
    io: read or write a dataset with the following callsequences:
        read:  readDDBegin, readDD*,  readDDEnd
        write: writeBegin,  writeDD*, writeEnd

        readDD returns true if data read, false at eof
***********************************************************************/

/*--- prepare reading from a DD --------------------------------------*/
readDDBegin: procedure expose m.
    parse upper arg ggDD
    call errAddCleanup 'call readDDEnd' ggDD', "*"'
return /* end readDDBegin */

/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt = '' then
        ggCnt = 100
    call adrTso 'execio' ggCnt 'diskr' ggDD '(stem' ggSt')', 2
    return (value(ggSt'0') > 0)
return /* end readDD */

/*--- finish reading DD  ggDD ----------------------------------------*/
readDDEnd: procedure expose m.
    parse upper arg ggDD, ggRet
    call errRmCleanup 'call readDDEnd' ggDD', "*"'
    return adrTso('execio 0 diskr' ggDD '(finis)', ggRet)
endProcedure readDDEnd

/*--- prepare writing to DD ggDD -------------------------------------*/
writeDDBegin: procedure expose m.
    parse upper arg ggDD
                  /* ensure file is erased, if no records are written */
    call adrTso 'execio' 0 'diskw' ggDD '(open)'
    call errAddCleanup 'call writeDDEnd' ggDD', "*"'
return /* end writeDDBegin */

/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    call adrTso 'execio' ggCnt 'diskw' ggDD '(stem' ggSt')'
    return
endSubroutine writeDD

/*--- end writing to dd ggDD (close) --------------------------------*/
writeDDEnd: procedure expose m.
parse upper arg ggDD, ggRet
    call errRmCleanup 'call writeDDEnd' ggDD', "*"'
    return adrTso('execio 0 diskw' ggDD '(finis)', ggRet)
endProcedure writeDDEnd

/*--- readNx: read next line, using buffer ---------------------------*/
/*--- begin: allocate dsnSpec and ini ------------------------ -------*/
readNxBegin: procedure expose m.
    parse arg m, m.m.dsn, m.m.dd, m.m.Cnt
    if m.m.dd = '' then
        m.m.dd = 'DDNX'
    if m.m.cnt = '' then
        m.m.cnt = 1000
    m.m.cx = m.m.cnt + 999
    m.m.buf0x = 0
    m.m.0 = 0
    m.m.free = subword(dsnAlloc('dd('m.m.dd')' m.m.dsn), 2)
    call readDDBegin m.m.dd
    return m
endProcedure readDDNxBegin

/*--- return the stem of the next line, or '' at end -----------------*/
readNx: procedure expose m.
parse arg m
    m.m.cx = m.m.cx + 1
    if m.m.cx <= m.m.0 then
        return m'.'m.m.cx
    m.m.buf0x = m.m.buf0x + m.m.0
    if \ readDD(m.m.dd, 'M.'m'.', m.m.cnt)then
        return ''
    m.m.cx = 1
    return m'.1'
endProcedure readDDNx
/*--- return the stem of the curr line, '' at end --------------------*/
readNxCur: procedure expose m.
parse arg m
    if m.m.cx <= m.m.0 then
        return m'.'m.m.cx
    else
        return ''
endProcedure readNxCur

/*--- return the position (line number) of reader
           plus le characters of the current line (default 50) ------*/
readnxPos: procedure expose m.
parse arg m, le
    li = m'.'m.m.cx
    li = strip(m.li, 't')
    if arg() < 2 then
        le = 50
    if le < 1 then
        li = ''
    else if length(li) <= le then
        li = ':' li
    else
        li = ':' left(li, le-3)'...'
    return 'line' (m.m.buf0x + m.m.cx)li
endProcedure readnxPos

/*--- close and deallocate ------------------------------------------*/
readNxEnd: procedure expose m.
parse arg m
    call readDDEnd m.m.dd
    interpret m.m.free
    return
endProcedure readDDNxEnd

/*--- standardise a dsn spec
       word1             dsName or -
       word2             dd     or -
       word3             disp   or -
       word4 to first :  attributes in tso format
       after first :     attributes for new allocation
----------------------------------------------------------------------*/
dsnSpec: procedure expose m.
parse upper arg spec
    rr = ''      /* put leading - in separate words */
    do sx=1 while words(rr) < 3 & wx \= ''
        wx = word(spec, sx)
        do while abbrev(wx, '-') & words(rr) < 3
            wx = substr(wx, 2)
            rr = rr '-'
            end
        rr = rr wx
        end
    spec = rr subWord(spec, sx)
    na = ''
    dd = ''
    di = ''
    if left(spec, 1) = '&' then /* external spec is handled ok */
        spec = strip(substr(spec, 2))
    do wx=1 by 1
        w = word(spec, wx)
        if w = '' | abbrev(w, '.') | abbrev(w, ':') then
            leave
        else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
            di = w
        else if w = 'CATALOG' then
            di = di w
        else if abbrev(w, 'DD(') then
            dd = substr(w, 4, length(w)-4)
        else if abbrev(w, 'DSN(') then
            na = strip(substr(w, 5, length(w)-5))
        else if na == '' then
            na = dsn2jcl(w)
        else if dd == '' then
            dd = w
        else if di == '' then
            di = w
        else
            leave
        end
    if na == '' then
        na = '-'
    else if abbrev(na, "'") then
        na = substr(na, 2, length(na)-2)
    if dd == '' then dd = '-'
    if di == '' then di = '-'
    re = subword(spec, wx)
    if abbrev(re, '.') then
        re = substr(re, 2)
    return na dd di re
endProcedure dsnSpec

/*--- alloc a dsn with dsnAlloc
          if the dsn is inuse wait and retry
          until either the allocation is successfull
          or the timeout occurs --------------------------------------*/
dsnAllocWait: procedure expose m.
parse upper arg spec, pDi, pDD, timeOut
    x = max(1, arg() - 1)
    do rt=0
        m.adrTsoAl.1 = ''
        m.adrTsoAl.2 = ''
        m.adrTsoAl.3 = ''
        call outtrap m.adrTsoAl.
        res = dsnAlloc(spec, pDi, pDD, '*')
        call outtrap off
        if \ abbrev(res, ' ') then
            return res
        msg = m.adrTsoAl.1'\n'm.adrTsoAl.2'\n'm.adrTsoAl.3
        if rt > timeOut & timeOut \== '' then
            return err('timeout allocating' spec time() '\n'msg)
        if pos('DATA SET IS ALLOCATED TO ANOTHER', msg) < 1 then
            return err('allocating' spec'\n'msg)
        say time() 'sleep and retry alloc' spec
        call sleep 1, 0
        end
endProcedure dsnAllocWait

/*--- alloc a dsn or a dd
          spec '-'<ddName>
               datasetName? disposition? '.'? attributes? (':' newAtts)?
          disp default disposition
          dd   default dd name
          retRc   erlaubte ReturnCodes (leer = 0)
          returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, pDi, pDD, retRc
    parse value dsnSpec(spec) with na dd di rest
    if na = '-' then
        m.dsnAlloc.dsn = ''
    else
        m.dsnAlloc.dsn = na
    if na == '-' & dd \== '-' & di == '-' & rest = '' then
        return dd
    if dd == '-' & pDD \== '' then
        dd = pDD
    if dd == '-' then do
        if symbol('m.adrTso.ddNum') = 'VAR' then
            dd = m.adrTso.ddNum + 1
        else
            dd = 1
        m.adrTso.ddNum = dd
        dd = 'DD' || dd
        end
    if di = '-' & pDi \== '' then
        di = pDi
    if di = '-' then
        di = 'SHR'
    else if pos('(', na) < 1 then
        nop
    else if di = 'MOD' then
        call err 'disp mod for' na
    else
        di = 'SHR'
    if pos('/', na) > 0 then
        return csmAlloc(na dd di rest, retRc)
    else
        return tsoAlloc(na dd di rest, retRc)
endProcedure dsnAlloc

tsoAlloc: procedure expose m.
parse arg na dd disp rest ':' nn, retRc
    c = 'alloc dd('dd')' disp
    if na \== '-' then
        c = c "DSN('"na"')"
    else if disp = 'NEW' and nn \== '' then
        c = c dsnCreateAtts(,nn)
    call outtrap m.adrTsoAl.
    alRc = adrTso(c rest, '*')
    call outtrap off
    if alRc =  0 then do
        call errAddCleanup 'call tsoFree' dd', "*"'
        return dd 'call tsoFree' dd';'
        end
    if nn \= '' & wordPos(disp, 'OLD SHR') > 0 ,
          & sysDsn("'"m.dsnAlloc.dsn"'") == 'DATASET NOT FOUND' then do
        say 'tsoAlloc creating' c rest ':'nn
        call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(na, nn)
        call adrTso 'free  dd('dd')'
        return tsoAlloc(na dd disp rest, retRc)
        end
    do ax=1 to m.adrTsoAl.0
        say m.adrTsoal.ax
        end
    if retRc = '*' | wordPos(alRc, retRc) > 0 then
        return ' ' alRc
    call err 'tsoAlloc rc' alRc 'for' c rest
endProcedure tsoAlloc

tsoAtts: procedure expose m.
parse arg dsn
    rc = listDsi("'"dsn"' SMSINFO")
    if rc = 0 then
        mv = ''
    else if rc = 4 & sysReason = 19 then do
        mv = 'UNITCNT(30)'
        say 'multi volume' mv
        end
    else if rc ^= 0 then
        call err 'listDsi rc' rc 'reason' sysReason,
                             sysMsgLvl1 sysMsgLvl2
    al = 'CAT'
    al = ''
    if right(sysDsSms, 7) == 'LIBRARY' ,
        | abbrev(sysDsSms, 'PDS') then
         al = al 'DSNTYPE(LIBRARY)'
    if sysUnits = 'TRACK' then
        sysUnits = 'TRACKS'
    al = al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
        "DATACLAS("sysDataClass")" ,
        "RECFM("translate('1 2 3', ' 'sysREcFM, ' 123')")",
        "LRECL("SYSLRECL")",
        "blksize("sysBLkSIZE")",
        "SPACE("sysPrimary"," sysSeconds")" sysUnits mv
    return al
endProcedure tsoAtts

tsoFree: procedure expose m.
parse arg dd, ggRet
    call adrTso 'free dd('dd')', ggRet
    call errRmCleanup 'call tsoFree' dd', "*"'
    return
endProcedure tsoFree

dsnCreateAtts: procedure expose m.
parse arg dsn, atts, forCsm
    forCsm = forCsm == 1
    aU = ' 'translate(atts)
    if abbrev(atts, ':') then do
        parse var atts a1 atts
        bl = 32760
        rl = substr(a1, 3)
        if abbrev(a1, ':F') then do
            if rl = '' then
                rl = 80
            recfm='f b'
            bl = bl - (bl // rl)
            end
        else do
            if rl = '' then
                rl = bl-4
            recfm = substr(a1, 2, 1) 'b'
            end
        if forCsm then
            atts =  atts "recfm("space(recfm, 0)") lrecl("rl")",
                    "blkSize("bl")"
        else
            atts = atts "recfm("recfm") lrecl("rl") block("bl")"
        end
    if pos('(', dsn) > 0 & pos(' DSNTYPE(', aU) < 1 ,
                         & pos(' DSORG(',   aU) < 1 then
        atts = atts 'dsntype(library) dsorg(po)'
    if pos(' MGMTCLAS(', aU) < 1 then
        atts = atts 'mgmtclas(COM#A091)'
    if pos(' SPACE(', aU) < 1 then
        if forCsm then
            atts = atts 'space(10, 1000) cylinder'
        else
            atts = atts 'space(10, 1000) cyl'
    if dsn == '' then
       return atts
    return "dataset('"dsnSetMbr(dsn)"')" atts
endProcedure dsnCreateAtts

/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
    ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
    call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
    interpret subword(ggAlloc, 2)
    return
endSubroutine readDsn

/*--- write the dataset specified in ggDsnSpec from stem ggSt
          write ggCnt records if not empty otherwise ggst0
          if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
    call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
            '(stem' ggSt 'open finis)'
    interpret subword(ggAlloc, 2)
    if ggSay == 1 | m.debug == 1 then
       say ggCnt 'records written to' ggDsnSpec
    return
endSubroutine writeDsn

copyDSN: procedure expose m.
parse arg frSpec, toSpec, ggSay
    frDD = dsnAlloc(frSpec, 'SHR', 'FRDD')
    toDD = dsnAlloc(toSpec, 'OLD', 'TODD')
    call readDDBegin word(frDD, 1)
    call writeDDBegin word(toDD, 1)
    cnt = 0
    do while readDD(word(frDD, 1), r.)
        call writeDD word(toDD, 1), r.
        cnt = cnt + r.0
        end
    call readDDEnd word(frDD, 1)
    call writeDDEnd word(toDD, 1)
    interpret ';' subword(frDD, 2) '; ; ;' subword(toDD, 2)
    if ggSay == 1 | m.debug == 1 then
       say cnt 'records copied from' frSpec 'to' to toSpec
    return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
/* copy err begin ******************************************************
    messages, errorhandling,help
***********************************************************************/
errIni: procedure expose m.
    if m.err.ini == 1 then
        return
    call outIni
    m.err.ini     = 1
    m.err.handler = ''
    m.err.cleanup = ';'
    m.err.opt     = ''
    return
endProcedure errIni
/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
    call errIni
    parse arg m.err.opt, m.err.handler
    if pos('I', translate(m.err.opt)) > 0 then
        if errOS() \== 'LINUX' then
            if sysVar('sysISPF') = 'ACTIVE' then
                    call adrIsp 'control errors return'
    return
endSubroutine errReset

/*--- error routine: abend with message ------------------------------*/
err:
    parse arg ggTxt, ggOpt
    call errIni
    drop err handler cleanup opt call return
    if ggOpt == '' & m.err.handler \== '' then do
        if 1 then do /* no detection of recursive err call loop
                        --> will anyway fail by stack overflow */
            interpret m.err.handler
            end
        else do
                     /* avoid recursive err call loop */
            drop call return
            if symbol('m.err.call') \== 'VAR' then
                m.err.call = 1
            else
                m.err.call = m.err.call + 1
            if m.err.call > 10 then do
                say 'errHandler loop:' m.err.handler
                end
            else do
                m.err.return = 1
                call errInterpret m.err.handler
                m.err.call = m.err.call - 1
                if m.err.return then
                    return result
                end
            end
        end
    call outDst
    call errSay ggTxt, 'e'
    call errCleanup
    if ggOpt == '' then
        ggOpt = m.err.opt
    ggOpt = translate(ggOpt)
    if pos('T', ggOpt) > 0  then do
        trace ?r
        say 'trace ?r in err'
        end
    if pos('H', ggOpt) > 0  then do
        call errSay 'divide by zero to show stackHistory', 'e'
        x = 1 / 0
        end
    call errSay 'exit(12)', 'e'
    exit errSetRc(12)
endSubroutine err

/*--- error routine: user message cleanup exit -----------------------*/
errEx:
    parse arg ggTxt
    call errIni
    call outDst
    call errSay ggTxt
    call errCleanup
    exit 8
endProcedure errEx

errAddCleanup: procedure expose m.
parse arg code
    if m.err.ini \== 1 then
        call errIni
        /* concatenate backwards, then it is executed also backwards */
    m.err.cleanup = ';'code || m.err.cleanup
    return
endProcedure errAddCleanup

errRmCleanup: procedure expose m.
parse arg code
    if m.err.ini \== 1 then
        call errIni
    cx = pos(';'code';', m.err.cleanup)
    if cx > 0 then
        m.err.cleanup = left(m.err.cleanup, cx) ,
                     || substr(m.err.cleanup, cx + length(code)+2)
    return
endProcedure errRmCleanup

errCleanup: procedure expose m.
    call errIni
    cl = m.err.cleanup
    if cl = ';' then
        return
    m.err.cleanup = ';'
    say 'err cleanup begin' cl
    call errInterpret cl
    say 'err cleanup end' cl
    return
endProcedure errCleanup

errInterpret: procedure expose m.
parse arg code
    interpret code
    m.err.return = 0
    return
endProcedure errInterpret
/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
    interpret 'assertRes =' arg(1)
    if \ assertRes then
        call err 'assert failed' arg(1)':' arg(2)
    return
endProcedure assert

/*--- output an errorMessage msg with pref pref
           split message in lines at '/n' ---------------------------*/
errSay: procedure expose m.
parse arg msg, pref
    parse source . . ggS3 .                           /* current rexx */
    if pref == 'e' then
        msg = 'fatal error in' ggS3':' msg
    else if pref == 'w' then
        msg = 'warning in' ggS3':' msg
    else if pref \== '' then
        msg = pref':' msg
    return outNl(msg)
endProcedure errSay

/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg, op
    call errSay msg, 'e'
    call help
    call err msg, op
endProcedure errHelp

/*--- return the Operating System we are running on: TSO or LINUX ---*/
errOS: procedure expose m.
    parse source os .
    return os
endProcedure errOS

/*--- set rc for ispf: -------------------------------------------------
    if a cmd is run by ispStart, its RC is ignored,
         but ISPF passes the value of the shared varible 3IspfRc
         back as return code
----------------------------------------------------------------------*/
errSetRc: procedure expose m.
parse arg zIspfRc
    if errOS() \== 'LINUX' then
           if sysVar('sysISPF') = 'ACTIVE' then
            address ispExec vput 'zIspfRc' shared
    return zIspfRc
endProcedure errSetRc

/*--- output a trace message if m.tr is set -----------------------*/
trc: procedure expose m.
parse arg msg
    if m.trace == 1 then
        call out 'trc:' msg
    return
endProcedure trc

debug: procedure expose m.
parse arg msg
    if m.debug == 1 then
        call out 'debug' msg
    return
endProcedure debug

/*--- display the first comment block of the source as help ----------*/
help: procedure expose m.
    parse source . . s3 .
    call out right(' help for rexx' s3, 79, '*')
    do ax=1 to arg()
        say ' ' arg(ax)
        end
    do lx=1 by 1
        if pos('/*', sourceLine(lx)) > 0 then
            leave
        else if lx > 10 then do
            call out 'initial commentblock not found for help'
            return
            end
        end
    do lx=lx+1 by 1
        li = strip(sourceLine(lx), 't', ' ')
        if pos('*/', li) > 0 then
            leave
        call out li
        end
    call out right(' end help for rexx' s3, 79, '*')
    return 4
endProcedure help

/*--- output all lines (separated by '\n') of all args --------------*/
outNl: procedure expose m.
    do ax=1 to max(1, arg())
        msg = arg(ax)
        sx = 0
        bx = -1
        do lx=1 until bx >= length(msg)
                ex = pos('\n', msg, bx+2)
            if ex < 1 then
                ex = length(msg)+1
            call out substr(msg, bx+2, ex-bx-2)
            bx = ex
         end
        end
    return 0
endProcedure outNl
/* copy err end   *****************************************************/
/* copy out begin ******************************************************
    out interface simple with say only
***********************************************************************/
outIni: procedure expose m.
parse arg msg
    return
endProcedure outIni

/*--- output a message to the current destination -------------------*/
out: procedure expose m.
parse arg msg
    say msg
    return 0
endProcedure out

/*--- set a new out destination and return old one ------------------*/
outDst: procedure expose m.
parse arg d
    return ''
endProcedure outDst
      /* return the contents of a string or std input */
inp2str: procedure expose m.
    parse arg rdr, opt
    return rdr
endProcedure inp2str
/* copy out end   *****************************************************/
}¢--- A540769.WK.REXX.O13(ANATST1) cre=2009-05-28 mod=2009-05-28-17.11.47 F540769 ---
     * test fuer maRec mbrVars Routine

                                      vEins    =     eins   ef * komm
vZwei=   ab cd zwei

*
/jobs/
  j1 ja jobEins
  j2 jb jobZwei * und so weiter
/jobs/

   vDrei    =drei
   vVier=vier  bis hier |*und nicht weiter
                   ****
}¢--- A540769.WK.REXX.O13(ATTS) cre=2010-04-17 mod=2010-04-17-18.14.22 A540769 ---
$<.fileList(file('dsn.mfunl'), 'r')
$@for fi $@¢
    $$ dataset('$fi') $-{tsoAtts($fi)}
    $!
$#out                                              20100417 18:13:50
dataset('DSN.MFUNL.MF01A1P.A101A.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF01A1P.A101A.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
dataset('DSN.MFUNL.MF01A1P.A102A.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF01A1P.A102A.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
dataset('DSN.MFUNL.MF01A1P.A105A.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF01A1P.A105A.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
dataset('DSN.MFUNL.MF01A1P.A130A.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF01A1P.A130A.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
dataset('DSN.MFUNL.MF01A1P.A131A.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF01A1P.A131A.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
dataset('DSN.MFUNL.MF01A1P.A137A.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF01A1P.A137A.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
dataset('DSN.MFUNL.MF01A1P.A138A.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF01A1P.A138A.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
dataset('DSN.MFUNL.MF01A1P.A141A.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF01A1P.A141A.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
dataset('DSN.MFUNL.MF01A1P.A200A.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF01A1P.A200A.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
dataset('DSN.MFUNL.MF01A1P.A202A.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF01A1P.A202A.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
dataset('DSN.MFUNL.MF01A1P.A230A.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF01A1P.A230A.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
dataset('DSN.MFUNL.MF01A1P.A401A.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF01A1P.A401A.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
dataset('DSN.MFUNL.MF01A1P.A903A.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF01A1P.A903A.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
dataset('DSN.MFUNL.MF02A1P.A701A.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF02A1P.A701A.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
dataset('DSN.MFUNL.MF02A1P.A702A.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF02A1P.A702A.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
dataset('DSN.MFUNL.MF02A1P.A707A.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF02A1P.A707A.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
dataset('DSN.MFUNL.MF02A1P.A708A.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF02A1P.A708A.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
dataset('DSN.MFUNL.MF02A1P.A709A.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF02A1P.A709A.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
dataset('DSN.MFUNL.MF02A1P.A714A.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF02A1P.A714A.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
dataset('DSN.MFUNL.MF02A1P.A716A.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF02A1P.A716A.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
dataset('DSN.MFUNL.MF03A1P.A009A.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.MF03A1P.A009A.P00001.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00002.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00003.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00004.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00005.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00006.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00007.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00008.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00009.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00010.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00011.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00012.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00013.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00014.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00015.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00016.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00017.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00018.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00019.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00020.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00021.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00022.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00023.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00024.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00025.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00026.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00027.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00028.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00029.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00030.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00031.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00032.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00033.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00034.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00035.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00036.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00037.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00038.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00039.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00040.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00041.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00042.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00043.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00044.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00045.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00046.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00047.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00048.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00049.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00050.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00051.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00052.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00053.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00054.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00055.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00056.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00057.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00058.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00059.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00060.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00061.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00062.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00063.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00064.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF03A1P.A009A.P00065.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATA
dataset('DSN.MFUNL.MF150P01.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P01.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.MF150P02.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P02.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.MF150P03.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P03.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.MF150P04.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P04.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.MF150P05.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P05.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.MF150P06.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P06.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.MF150P07.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P07.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.MF150P08.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P08.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.MF150P09.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P09.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.MF150P10.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P10.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.MF150P11.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P11.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.MF150P12.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P12.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.MF150P13.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P13.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.MF150P14.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P14.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.MF150P15.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P15.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.MF150P16.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P16.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.MF150P17.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P17.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.MF150P18.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P18.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.MF150P19.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P19.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.MF150P20.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P20.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.MF150P21.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DEFAULT
dataset('DSN.MFUNL.MF150P21.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EYY0X)
dataset('DSN.MFUNL.OE02A1P.A401A.PUN')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(DE
dataset('DSN.MFUNL.OE02A1P.A401A.UNL')  DSORG(PS) MGMTCLAS(COM#A064) DATACLAS(EY
$#out                                              20100417 18:01:12
dataset(DSN.MFUNL.MF01A1P.A101A.PUN)  DSORG(PS) MGMTCLAS(COM#E000) DATACLAS(DEFA
dataset(DSN.MFUNL.MF01A1P.A130A.PUN)  DSORG(PS) MGMTCLAS(COM#E000) DATACLAS(DEFA
$#out                                              20100417 17:59:34
}¢--- A540769.WK.REXX.O13(BESEL) cre=2011-05-27 mod=2011-05-27-16.52.09 A540769 ---
//A540769V JOB (CP00,KE50),'DB2 REO',
//         MSGCLASS=T,TIME=1440,
//         NOTIFY=&SYSUID,REGION=0M
//*MAIN CLASS=LOG
//*
//S1       EXEC PGM=IKJEFT01,DYNAMNBR=200,TIME=99,
//            PARM='WSH'
//SYSPROC    DD DSN=A540769.WK.REXX,DISP=SHR
//SYSTSPRT   DD SYSOUT=*
//SYSTSIN    DD DUMMY
//WSH        DD *
$#@
$@do ix=1  $@¢
$@=¢
   select * from
       oa1a03.tbe010a1
   fetch first 10 rows only
$! $| call sqlStmtsOpt
      call sleep 10
$!
//*OUT       DD SYSOUT=*
}¢--- A540769.WK.REXX.O13(BESENWAG) cre=2012-09-04 mod=2012-09-21-11.11.16 A540769 ---
/* rexx
              Besenwagen
                  aufruf durch db2Cpg01
                  start job dsn.besenwag.<dbSy>(qcsBesXp)
                  warten (max 1h) bis job fertig ist
 5. 9.12      Walter: vergessene Copies von db2v10nfm nachholen
***********************************************************************/
parse arg dbSy
say 'start besenwagen for dbSystem' dbSy
lib = 'DSN.BESENWAG.'dbSy
fini =  "'"lib"(finish)'"
if sysDsn(fini) == 'OK' then
    call adrTso "delete" fini
call adrTso "sub '"lib"(qcsBesXp)'"
tEnd = time('e') + 3600
do while time('e') < tEnd
    call sleep 60
    if sysDsn(fini) == 'OK' then do
        say 'end Besenwagen, member' fini 'is now OK'
        exit 0
        end
    end
    say 'Ende Besenwagen member' fini 'fehlt zulange'
exit
/* copy ut begin  *****************************************************/
/*--- if function  warning all3 arguments get evaluated|
                   e.g if(x=0, 'infinity', 1/0) will fail| -----------*/
if: procedure expose m.
parse arg co, ifTrue, ifFalse
    if co then
        return ifTrue
    else
        return ifFalse
endProcedure if
/*--- embedded ASSignement:
      assign the second argument to the variable with name in first arg
      and return the value assigned ----------------------------------*/
ass:
    call value arg(1), arg(2)
    return arg(2)
/*--- embedded ASSignement only if NotNull:
      assign the second argument to the variable with name in first arg
      if the second arg is not null, return new value ---------------*/
assIf:
    if arg(2) == '' then
        return value(arg(1))
    call value arg(1), arg(2)
    return arg(2)

/*--- return first nonNull argument ---------------------------------*/
nn:
    if arg(1) \== '' then
        return arg(1)
    if arg(2) \== '' then
        return arg(2)
    call err 'nn() both args empty'

/*--- embedded ASSignement return NotNull:
      assign the second argument to the variable with name in first arg
      and return 1 if value not null, 0 if null ----------------------*/
assNN:
    call value arg(1), arg(2)
    return arg(2) \== ''

/*--- return current time and cpu usage ------------------------------*/
timing: procedure expose m.
return return time() 'ela='time('E') 'cpu='sysvar('syscpu'),
            'su='sysvar('syssrv')

timingTest: procedure expose m.
    say 'begin' timing()  sysvar('sysnode')
    do 30000000
       end
    say 'end  ' timing()
return

/*--- sleep several seconds ------------------------------------------*/
sleep: procedure expose m.
parse arg secs, sayIt
    if sayit <> 0 then
        say 'sleeping' secs 'secs' time()
    CALL SYSCALLS 'ON'
    ADDRESS SYSCALL "sleep" secs
    CALL SYSCALLS 'OFF'
    if sayit <> 0 then
        say 'slept' secs 'secs' time()
    return
endProcedure sleep

/*--- elongate inp with spaces up to given len -----------------------*/
elong: procedure expose m.
parse arg inp, len
    if length(inp) >= len then
        return inp
    return left(inp, len)
endProcedure elong

/*--- quote string txt using quoteChar qu ("""" ==> ") ---------------*/
quote: procedure expose m.
parse arg txt, qu
    if qu = '' then
        qu = '"'
    res = qu
    ix = 1
    do forever
        qx = pos(qu, txt, ix)
        if qx = 0 then
            return res || substr(txt, ix) || qu
        res = res || substr(txt, ix, qx-ix) || qu || qu
        ix = qx + length(qu)
        end
endProcedure quote

/*--- return the count of occurrences of needle in heyStack ----------*/
posCount: procedure expose m.
parse arg needle, hayStack, start, fin
    if start = '' then
        start = 1
    if fin = '' then
        fin = length(hayStack) + 1 - length(needle)
    do cnt = 0 by 1
        start = pos(needle, haystack, start)
        if start < 1 | start > fin then
             return cnt
        start = start + length(needle)
        end
endProcedure posCount

repAll: procedure expose m.
parse arg src, w, new
    res = ''
    cx = 1
    do forever
        nx = pos(w, src, cx)
        if nx < 1 then
            return res || substr(src, cx)
        res = res || substr(src, cx, nx-cx) || new
        cx = nx + length(w)
        end
endProcedure repAll

repAllWords: procedure expose m.
parse arg src, w, new
    res = ''
    wx = 0
    cx = 1
    do forever
        wx = wordPos(w, src, wx+1)
        if wx < 1 then
            return res || substr(src, cx)
        nx = wordindex(src, wx)
        res = res || substr(src, cx, nx-cx) || new
        cx = nx + length(w)
        end
endProcedure repAllWords
/* copy ut end ********************************************************/
/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
    parse arg ggTsoCmd, ggRet
    address tso ggTsoCmd
    if rc == 0                     then return 0
    else if ggRet == '*'           then return rc
    else if wordPos(rc, ggRet) > 0 then return rc
    else
        call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */

/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure expose m.
parse upper arg dsn ., addPrefix
    if left(dsn,1) = "'" then
        return strip(dsn, 'b', "'")
    sp = sysvar('SYSPREF')
    if sp == '' then
        sp = userid()
    cx = pos('~', dsn)
    if cx < 1 & addPrefix == 1 then
        return sp'.'dsn
    do while cx \== 0
        le = left(dsn, cx-1)
        ri = substr(dsn, cx+1)
        if right(le, 1) == '.' | left(ri, 1) == '.' then
            dsn = le || sp || ri
        else
            dsn = le || left('.', le \== '') || sp ,
                     || left('.', ri \== '') || ri
        cx = pos('~', spec, cx)
        end
    return dsn
endProcedure dsn2Jcl

/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure expose m.
parse arg dsn .
    return "'"dsn"'"
endProcedure jcl2dsn

dsnSetMbr: procedure expose m.
parse arg dsn, mbr
     bx = pos('(', dsn)
     if bx > 0 then
         dsn = strip(left(dsn, bx-1))
     if mbr <> '' then
         dsn = dsn'('strip(mbr)')'
     return dsn
endProcedure dsnSetMbr

dsnGetMbr: procedure expose m.
parse arg dsn
     lx = pos('(', dsn)
     rx = pos(')', dsn, lx+1)
     if lx < 1 then
         return ''
     else if lx < rx then
         return substr(dsn, lx+1, rx-lx-1)
     else
         return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
    io: read or write a dataset with the following callsequences:
        read:  readDDBegin, readDD*,  readDDEnd
        write: writeBegin,  writeDD*, writeEnd

        readDD returns true if data read, false at eof
***********************************************************************/

/*--- prepare reading from a DD --------------------------------------*/
readDDBegin: procedure expose m.
    parse upper arg ggDD
    call errAddCleanup 'call readDDEnd' ggDD', "*"'
return /* end readDDBegin */

/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt = '' then
        ggCnt = 100
    call adrTso 'execio' ggCnt 'diskr' ggDD '(stem' ggSt')', 2
    return (value(ggSt'0') > 0)
return /* end readDD */

/*--- finish reading DD  ggDD ----------------------------------------*/
readDDEnd: procedure expose m.
    parse upper arg ggDD, ggRet
    call errRmCleanup 'call readDDEnd' ggDD', "*"'
    return adrTso('execio 0 diskr' ggDD '(finis)', ggRet)
endProcedure readDDEnd

/*--- prepare writing to DD ggDD -------------------------------------*/
writeDDBegin: procedure expose m.
    parse upper arg ggDD
                  /* ensure file is erased, if no records are written */
    call adrTso 'execio' 0 'diskw' ggDD '(open)'
    call errAddCleanup 'call writeDDEnd' ggDD', "*"'
return /* end writeDDBegin */

/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    call adrTso 'execio' ggCnt 'diskw' ggDD '(stem' ggSt')'
    return
endSubroutine writeDD

/*--- end writing to dd ggDD (close) --------------------------------*/
writeDDEnd: procedure expose m.
parse upper arg ggDD, ggRet
    call errRmCleanup 'call writeDDEnd' ggDD', "*"'
    return adrTso('execio 0 diskw' ggDD '(finis)', ggRet)
endProcedure writeDDEnd

/*--- readNx: read next line, using buffer ---------------------------*/
/*--- begin: allocate dsnSpec and ini ------------------------ -------*/
readNxBegin: procedure expose m.
    parse arg m, m.m.dsn, m.m.dd, m.m.Cnt
    if m.m.dd = '' then
        m.m.dd = 'DDNX'
    if m.m.cnt = '' then
        m.m.cnt = 1000
    m.m.cx = m.m.cnt + 999
    m.m.buf0x = 0
    m.m.0 = 0
    call dsnAlloc 'dd('m.m.dd')' m.m.dsn
    call readDDBegin m.m.dd
    return m
endProcedure readDDNxBegin

/*--- return the stem of the next line, or '' at end -----------------*/
readNx: procedure expose m.
parse arg m
    ix = m.m.cx + 1
    m.m.cx = ix
    if m.m.cx <= m.m.0 then
        return m'.'ix
    m.m.buf0x = m.m.buf0x + m.m.0
    if \ readDD(m.m.dd, 'M.'m'.', m.m.cnt)then
        return ''
    m.m.cx = 1
    return m'.1'
endProcedure readDDNx

/*--- return the position (line number) of reader
           plus le characters of the current line (default 50) ------*/
readnxPos: procedure expose m.
parse arg m, le
    li = m'.'m.m.cx
    li = strip(m.li, 't')
    if arg() < 2 then
        le = 50
    if le < 1 then
        li = ''
    else if length(li) <= le then
        li = ':' li
    else
        li = ':' left(li, le-3)'...'
    return 'line' (m.m.buf0x + m.m.cx)li
endProcedure readnxPos

/*--- close and deallocate ------------------------------------------*/
readNxEnd: procedure expose m.
parse arg m
    call readDDEnd m.m.dd
    call tsoFree m.m.dd
    return
endProcedure readDDNxEnd

/*--- standardise a dsn spec
       word1             dsName or -
       word2             dd     or -
       word3             disp   or -
       word4 to first :  attributes in tso format
       after first :     attributes for new allocation
----------------------------------------------------------------------*/
dsnSpec: procedure expose m.
parse upper arg spec
    rr = ''      /* put leading - in separate words */
    do sx=1 while words(rr) < 3 & wx \= ''
        wx = word(spec, sx)
        do while abbrev(wx, '-') & words(rr) < 3
            wx = substr(wx, 2)
            rr = rr '-'
            end
        rr = rr wx
        end
    spec = rr subWord(spec, sx)
    na = ''
    dd = ''
    di = ''
    if left(spec, 1) = '&' then /* external spec is handled ok */
        spec = strip(substr(spec, 2))
    do wx=1 by 1
        w = word(spec, wx)
        if w = '' | abbrev(w, '.') | abbrev(w, ':') then
            leave
        else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
            di = w
        else if w = 'CATALOG' then
            di = di w
        else if abbrev(w, 'DD(') then
            dd = substr(w, 4, length(w)-4)
        else if abbrev(w, 'DSN(') then
            na = strip(substr(w, 5, length(w)-5))
        else if na == '' then
            na = dsn2jcl(w)
        else if dd == '' then
            dd = w
        else if di == '' then
            di = w
        else
            leave
        end
    if na == '' then
        na = '-'
    else if abbrev(na, "'") then
        na = substr(na, 2, length(na)-2)
    if dd == '' then dd = '-'
    if di == '' then di = '-'
    re = subword(spec, wx)
    if abbrev(re, '.') then
        re = substr(re, 2)
    return na dd di re
endProcedure dsnSpec

/*--- alloc a dsn with dsnAlloc
          if the dsn is inuse wait and retry
          until either the allocation is successfull
          or the timeout occurs --------------------------------------*/
dsnAllocWait: procedure expose m.
parse upper arg spec, pDi, pDD, timeOut
    x = max(1, arg() - 1)
    do rt=0
        m.adrTsoAl.1 = ''
        m.adrTsoAl.2 = ''
        m.adrTsoAl.3 = ''
        call outtrap m.adrTsoAl.
        res = dsnAlloc(spec, pDi, pDD, '*')
        call outtrap off
        if \ abbrev(res, ' ') then
            return res
        msg = m.adrTsoAl.1'\n'm.adrTsoAl.2'\n'm.adrTsoAl.3
        if rt > timeOut & timeOut \== '' then
            return err('timeout allocating' spec time() '\n'msg)
        if pos('DATA SET IS ALLOCATED TO ANOTHER', msg) < 1 then
            return err('allocating' spec'\n'msg)
        say time() 'sleep and retry alloc' spec
        call sleep 1, 0
        end
endProcedure dsnAllocWait

/*--- alloc a dsn or a dd
          spec '-'<ddName>
               datasetName? disposition? '.'? attributes? (':' newAtts)?
          disp default disposition
          dd   default dd name
          retRc   erlaubte ReturnCodes (leer = 0)
          returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, pDi, pDD, retRc
    parse value dsnSpec(spec) with na dd di rest
    if na = '-' then
        m.dsnAlloc.dsn = ''
    else
        m.dsnAlloc.dsn = na
    if na == '-' & dd \== '-' & di == '-' & rest = '' then
        return dd
    if dd == '-' & pDD \== '' then
        dd = pDD
    if dd == '-' then do
        if symbol('m.adrTso.ddNum') = 'VAR' then
            dd = m.adrTso.ddNum + 1
        else
            dd = 1
        m.adrTso.ddNum = dd
        dd = 'DD' || dd
        end
    if di = '-' & pDi \== '' then
        di = pDi
    if di = '-' then
        di = 'SHR'
    else if pos('(', na) < 1 then
        nop
    else if di = 'MOD' then
        call err 'disp mod for' na
    else
        di = 'SHR'
    if pos('/', na) > 0 then
        return csmAlloc(na dd di rest, retRc)
    else
        return tsoAlloc(na dd di rest, retRc)
endProcedure dsnAlloc

tsoAlloc: procedure expose m.
parse arg na dd disp rest ':' nn, retRc
    c = 'alloc dd('dd')' disp
    if na \== '-' then
        c = c "DSN('"na"')"
    else if disp = 'NEW' and nn \== '' then
        c = c dsnCreateAtts(,nn)
    call outtrap m.adrTsoAl.
    alRc = adrTso(c rest, '*')
    call outtrap off
    if alRc =  0 then do
        call errAddCleanup 'call tsoFree' dd', "*"'
        return dd 'call tsoFree' dd';'
        end
    if nn \= '' & wordPos(disp, 'OLD SHR') > 0 ,
          & sysDsn("'"m.dsnAlloc.dsn"'") == 'DATASET NOT FOUND' then do
        say 'tsoAlloc creating' c rest ':'nn
        call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(na, nn)
        call adrTso 'free  dd('dd')'
        return tsoAlloc(na dd disp rest, retRc)
        end
    do ax=1 to m.adrTsoAl.0
        say m.adrTsoal.ax
        end
    if retRc = '*' | wordPos(alRc, retRc) > 0 then
        return ' ' alRc
    call err 'tsoAlloc rc' alRc 'for' c rest
endProcedure tsoAlloc

tsoAtts: procedure expose m.
parse arg dsn
    rc = listDsi("'"dsn"' SMSINFO")
    if rc = 0 then
        mv = ''
    else if rc = 4 & sysReason = 19 then do
        mv = 'UNITCNT(30)'
        say 'multi volume' mv
        end
    else if rc ^= 0 then
        call err 'listDsi rc' rc 'reason' sysReason,
                             sysMsgLvl1 sysMsgLvl2
    al = 'CAT'
    al = ''
    if right(sysDsSms, 7) == 'LIBRARY' ,
        | abbrev(sysDsSms, 'PDS') then
         al = al 'DSNTYPE(LIBRARY)'
    if sysUnits = 'TRACK' then
        sysUnits = 'TRACKS'
    al = al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
        "DATACLAS("sysDataClass")" ,
        "RECFM("translate('1 2 3', ' 'sysREcFM, ' 123')")",
        "LRECL("SYSLRECL")",
        "blksize("sysBLkSIZE")",
        "SPACE("sysPrimary"," sysSeconds")" sysUnits mv
    return al
endProcedure tsoAtts

tsoFree: procedure expose m.
parse arg dd, ggRet
    call adrTso 'free dd('dd')', ggRet
    call errRmCleanup 'call tsoFree' dd', "*"'
    return
endProcedure tsoFree

dsnCreateAtts: procedure expose m.
parse arg dsn, atts, forCsm
    forCsm = forCsm == 1
    aU = ' 'translate(atts)
    if abbrev(atts, ':') then do
        parse var atts a1 atts
        bl = 32760
        rl = substr(a1, 3)
        if abbrev(a1, ':F') then do
            if rl = '' then
                rl = 80
            recfm='f b'
            bl = bl - (bl // rl)
            end
        else do
            if rl = '' then
                rl = bl-4
            recfm = substr(a1, 2, 1) 'b'
            end
        if forCsm then
            atts =  atts "recfm("space(recfm, 0)") lrecl("rl")",
                    "blkSize("bl")"
        else
            atts = atts "recfm("recfm") lrecl("rl") block("bl")"
        end
    if pos('(', dsn) > 0 & pos(' DSNTYPE(', aU) < 1 ,
                         & pos(' DSORG(',   aU) < 1 then
        atts = atts 'dsntype(library) dsorg(po)'
    if pos(' MGMTCLAS(', aU) < 1 then
        atts = atts 'mgmtclas(COM#A091)'
    if pos(' SPACE(', aU) < 1 then
        if forCsm then
            atts = atts 'space(10, 1000) cylinder'
        else
            atts = atts 'space(10, 1000) cyl'
    if dsn == '' then
       return atts
    return "dataset('"dsnSetMbr(dsn)"')" atts
endProcedure dsnCreateAtts

/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
    ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
    call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
    interpret subword(ggAlloc, 2)
    return
endSubroutine readDsn

/*--- write the dataset specified in ggDsnSpec from stem ggSt
          write ggCnt records if not empty otherwise ggst0
          if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
    call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
            '(stem' ggSt 'open finis)'
    interpret subword(ggAlloc, 2)
    if ggSay == 1 | m.debug == 1 then
       say ggCnt 'records written to' ggDsnSpec
    return
endSubroutine writeDsn

copyDSN: procedure expose m.
parse arg frSpec, toSpec, ggSay
    frDD = dsnAlloc(frSpec, 'SHR', 'FRDD')
    toDD = dsnAlloc(toSpec, 'OLD', 'TODD')
    call readDDBegin word(frDD, 1)
    call writeDDBegin word(toDD, 1)
    cnt = 0
    do while readDD(word(frDD, 1), r.)
        call writeDD word(toDD, 1), r.
        cnt = cnt + r.0
        end
    call readDDEnd word(frDD, 1)
    call writeDDEnd word(toDD, 1)
    interpret ';' subword(frDD, 2) '; ; ;' subword(toDD, 2)
    if ggSay == 1 | m.debug == 1 then
       say cnt 'records copied from' frSpec 'to' to toSpec
    return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
/* copy err begin ******************************************************
    messages, errorhandling,help
***********************************************************************/
errIni: procedure expose m.
    if m.err.ini == 1 then
        return
    call outIni
    m.err.ini     = 1
    m.err.handler = ''
    m.err.cleanup = ';'
    m.err.opt     = ''
    return
endProcedure errIni
/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
    call errIni
    parse arg m.err.opt, m.err.handler
    if pos('I', translate(m.err.opt)) > 0 then
        if errOS() \== 'LINUX' then
            if sysVar('sysISPF') = 'ACTIVE' then
                    call adrIsp 'control errors return'
    return
endSubroutine errReset

/*--- error routine: abend with message ------------------------------*/
err:
    parse arg ggTxt, ggOpt
    call errIni
    drop err handler cleanup opt call return
    if ggOpt == '' & m.err.handler \== '' then do
        if 1 then do /* no detection of recursive err call loop
                        --> will anyway fail by stack overflow */
            interpret m.err.handler
            end
        else do
                     /* avoid recursive err call loop */
            drop call return
            if symbol('m.err.call') \== 'VAR' then
                m.err.call = 1
            else
                m.err.call = m.err.call + 1
            if m.err.call > 10 then do
                say 'errHandler loop:' m.err.handler
                end
            else do
                m.err.return = 1
                call errInterpret m.err.handler
                m.err.call = m.err.call - 1
                if m.err.return then
                    return result
                end
            end
        end
    call outDst
    call errSay ggTxt, 'e'
    call errCleanup
    if ggOpt == '' then
        ggOpt = m.err.opt
    ggOpt = translate(ggOpt)
    if pos('T', ggOpt) > 0  then do
        trace ?r
        say 'trace ?r in err'
        end
    if pos('H', ggOpt) > 0  then do
        call errSay 'divide by zero to show stackHistory', 'e'
        x = 1 / 0
        end
    call errSay 'exit(12)', 'e'
    exit errSetRc(12)
endSubroutine err

/*--- error routine: user message cleanup exit -----------------------*/
errEx:
    parse arg ggTxt
    call errIni
    call outDst
    call errSay ggTxt
    call errCleanup
    exit 8
endProcedure errEx

errAddCleanup: procedure expose m.
parse arg code
    if m.err.ini \== 1 then
        call errIni
        /* concatenate backwards, then it is executed also backwards */
    m.err.cleanup = ';'code || m.err.cleanup
    return
endProcedure errAddCleanup

errRmCleanup: procedure expose m.
parse arg code
    if m.err.ini \== 1 then
        call errIni
    cx = pos(';'code';', m.err.cleanup)
    if cx > 0 then
        m.err.cleanup = left(m.err.cleanup, cx) ,
                     || substr(m.err.cleanup, cx + length(code)+2)
    return
endProcedure errRmCleanup

errCleanup: procedure expose m.
    call errIni
    cl = m.err.cleanup
    if cl = ';' then
        return
    m.err.cleanup = ';'
    say 'err cleanup begin' cl
    call errInterpret cl
    say 'err cleanup end' cl
    return
endProcedure errCleanup

errInterpret: procedure expose m.
parse arg code
    interpret code
    m.err.return = 0
    return
endProcedure errInterpret
/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
    interpret 'assertRes =' arg(1)
    if \ assertRes then
        call err 'assert failed' arg(1)':' arg(2)
    return
endProcedure assert

/*--- output an errorMessage msg with pref pref
           split message in lines at '/n' ---------------------------*/
errSay: procedure expose m.
parse arg msg, pref
    parse source . . ggS3 .                           /* current rexx */
    if pref == 'e' then
        msg = 'fatal error in' ggS3':' msg
    else if pref == 'w' then
        msg = 'warning in' ggS3':' msg
    else if pref \== '' then
        msg = pref':' msg
    return outNl(msg)
endProcedure errSay

/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg, op
    call errSay msg, 'e'
    call help
    call err msg, op
endProcedure errHelp

/*--- return the Operating System we are running on: TSO or LINUX ---*/
errOS: procedure expose m.
    parse source os .
    return os
endProcedure errOS

/*--- set rc for ispf: -------------------------------------------------
    if a cmd is run by ispStart, its RC is ignored,
         but ISPF passes the value of the shared varible 3IspfRc
         back as return code
----------------------------------------------------------------------*/
errSetRc: procedure expose m.
parse arg zIspfRc
    if errOS() \== 'LINUX' then
           if sysVar('sysISPF') = 'ACTIVE' then
            address ispExec vput 'zIspfRc' shared
    return zIspfRc
endProcedure errSetRc

/*--- output a trace message if m.tr is set -----------------------*/
trc: procedure expose m.
parse arg msg
    if m.trace == 1 then
        call out 'trc:' msg
    return
endProcedure trc

debug: procedure expose m.
parse arg msg
    if m.debug == 1 then
        call out 'debug' msg
    return
endProcedure debug

/*--- display the first comment block of the source as help ----------*/
help: procedure expose m.
    parse source . . s3 .
    call out right(' help for rexx' s3, 79, '*')
    do ax=1 to arg()
        say ' ' arg(ax)
        end
    do lx=1 by 1
        if pos('/*', sourceLine(lx)) > 0 then
            leave
        else if lx > 10 then do
            call out 'initial commentblock not found for help'
            return
            end
        end
    do lx=lx+1 by 1
        li = strip(sourceLine(lx), 't', ' ')
        if pos('*/', li) > 0 then
            leave
        call out li
        end
    call out right(' end help for rexx' s3, 79, '*')
    return 4
endProcedure help

/*--- output all lines (separated by '\n') of all args --------------*/
outNl: procedure expose m.
    do ax=1 to max(1, arg())
        msg = arg(ax)
        sx = 0
        bx = -1
        do lx=1 until bx >= length(msg)
                ex = pos('\n', msg, bx+2)
            if ex < 1 then
                ex = length(msg)+1
            call out substr(msg, bx+2, ex-bx-2)
            bx = ex
         end
        end
    return 0
endProcedure outNl
/* copy err end   *****************************************************/
/* copy out begin ******************************************************
    out interface simple with say only
***********************************************************************/
outIni: procedure expose m.
parse arg msg
    return
endProcedure outIni

/*--- output a message to the current destination -------------------*/
out: procedure expose m.
parse arg msg
    say msg
    return 0
endProcedure out

/*--- set a new out destination and return old one ------------------*/
outDst: procedure expose m.
parse arg d
    return ''
endProcedure outDst
      /* return the contents of a string or std input */
inp2str: procedure expose m.
    parse arg rdr, opt
    return rdr
endProcedure inp2str
/* copy out end   *****************************************************/
}¢--- A540769.WK.REXX.O13(BESENWAR) cre=2012-09-05 mod=2012-09-21-13.20.40 A540769 ---
$#@
$=dbSy=DBTF
$=hh=3
$=partLim=999999999
$=previewOnly=0
call sqlConnect $dbSy
$;
$<@/sql/
$=ptaInc =- $dbSy = 'DBOF' & sysvar('SYSNODE') == 'RR2'
if $ptaInc then $@=¢
 with frTo as
(
 select case when strip(min(dbName)) like '_*' and min(dbName) > 'A*'
            then left(min(dbName), 1) else ''
       end fr,
       case when strip(max(dbName)) like '_*'
            then left(max(dbName), 1) else ''
       end || x'FFFF' to
     FROM DLC.OBJECTS_V13
     WHERE EXCLUDE='I' AND    NAME='QDDBOF INCL EXCLUDES'
)
, p as
$! else $@=¢
with p as
$!
$@=¢
(
 SELECT PT.DBNAME, pt.tsName, pt.partition,
     (  SELECT char(timestamp) || icType
          FROM  SYSIBM.SYSCOPY CP
          WHERE PT.DBNAME = CP.DBNAME
            AND PT.TSNAME = CP.TSNAME
            AND cp.dsNum in (PT.PARTITION, 0)
            AND  CP.ICTYPE IN ('F','R','X')
          order by timestamp desc
          fetch first 1 row only
     ) laFull,
     r.nActive,
     COPYLASTTIME,
     COPYUPDATEDPAGES,
     COPYCHANGES,
     COPYUPDATETIME
----  end   @proc selIncrCopy: select fullcopy etc. --------------------
 FROM   SYSIBM.SYSDATABASE DB
$!
if $ptaInc then $@=¢
   join frTo
     on db.name >= frTo.fr and db.name <= frTo.to
$!
$@=¢
   join SYSIBM.SYSTABLESPACE TS
     on DB.NAME = PT.DBNAME
   join SYSIBM.SYSTABLEPART PT
     on DB.NAME = TS.DBNAME
       AND TS.NAME = PT.TSNAME
   left join SYSIBM.SYSTABLESpaceStats r
      on r.dbid = db.dbid
        and r.psid = ts.psid
        and r.partition = pt.partition
 WHERE  0 = 0
----  end   @proc missFUllcopies1: fehlende Fullcopies -----------------

----  begin @proc exclude ----------------------------------------------
----- begin @proc exclGen: gemeinsame excludes -------------------------
   AND NOT (PT.DBNAME like 'DSNDB%')            -- DB2 CATALOG
   AND NOT (PT.DBNAME LIKE 'DSN8%')             -- IBM TEST DB
   AND NOT (PT.DBNAME LIKE 'WKDBD%')            -- DB2 WORK DATABASE
   AND NOT (PT.DBNAME = 'DSNTESQ')              -- DB2 CATALOG CLONE
   AND NOT (PT.DBNAME LIKE 'DB2MAPP%')          -- REORG MAPPING TABLES
   AND NOT (PT.DBNAME LIKE 'DB2PLAN%')          -- explain tables
   and not translate(PT.dbName, '999999999AAAAAA', '012345678FISWXY')
           = 'DA999999'                         -- user datenbanken
   AND NOT (PT.DBNAME LIKE 'DB2ALA%')           -- marec  generated
   AND NOT (PT.DBNAME LIKE '%MAREC%')           -- marec generated
   AND NOT (PT.DBNAME LIKE 'DACME%')            -- Mail Heinz Bühler
   AND NOT (PT.DBNAME LIKE 'DGDB%')             -- PROTOTYPEN
   AND NOT (PT.DBNAME LIKE 'DGO%')              -- PROTOTYPEN
   AND NOT (PT.DBNAME LIKE '%A1X%')             -- Neue Prototypen
   AND NOT (PT.DBNAME LIKE 'DAU%')              -- Schulung Gerrit
   AND NOT (PT.DBNAME LIKE 'IDT%')              -- ibm tools
----  end   @proc exclGen: gemeinsame excludes ------------------------
   AND NOT (PT.DBNAME LIKE 'OE02%')    -- Mail Ivo Eichmann
   AND NOT (PT.DBNAME LIKE 'CSQ%')     -- M-QUEUE DATENBANK
----  end   @proc exclude ---------------------------------------------
----  end   @proc exclGen: gemeinsame excludes -------------------------

   AND NOT (PT.DBNAME = 'XC01A1P'  AND PT.TSNAME LIKE 'A2%'  )
                                       -- EOS: Armin Breyer
   AND NOT (PT.DBNAME = 'XR01A1P'  AND PT.TSNAME LIKE 'A2%'  )
                                       -- ERET: Armin Breyer
   AND NOT (PT.DBNAME = 'CSQDBOF' AND PT.TSNAME like 'TSBLOB%' )
----  end   @proc exclude ----------------------------------------------

   AND DB.TYPE NOT IN ('T','W')
----  begin @proc missFUllcopies2: fehlende Fullcopies -----------------
   AND TS.NTABLES <> 0
   AND PT.SPACEF <> -1 -- attention space is sometimes wrong|
    and db.Name like 'WI02%'   --- ????
 )
, q as
(
select case when laFull < char(current timestamp - $-¢168+$hh$! hours)
                then 'full old'
            when copyUpdateTime > current timestamp - $hh hours
                then 'no newUpd'
            when nActive * 0.1 <= COPYUPDATEDPAGES then 'full upda'
            when COPYUPDATEDPAGES <> 0 or copyChanges <> 0 then 'inc'
            else 'no changes'
            end copy,
      p.*
    from p
)
select *
    from q
    where left(copy, 2) <> 'no'
 ORDER BY DBNAME, TSNAME, PARTITION
 WITH UR
$!
$/sql/
call sqlSel
m.inc.0 = 0
m.ful.0 = 0
cAll = 0
pAll = 0
$| $@forWith c $@¢
   cAll = cAll + 1
   if datatype($NACTIVE, 'n') then
        pAll = pAll + $NACTIVE
    say left($COPY, 10) left($DBNAME, 8) left($TSNAME, 8) ,
           right($PARTITION, 5) left($LAFULL, 30)
    say right($COPYCHANGES     , 12),
     || right('>'$COPYUPDATEDPAGES, 10),
     || right('%'$NACTIVE, 10) ,
        left($COPYLASTTIME, 19),
        left($COPYUPDATETIME, 19)
    if cAll <= $partLim then
        call mAdd if(abbrev($COPY, 'inc'), inc, ful),
          , '      INCLUDE TABLESPACE' strip($DBNAME)'.'strip($TSNAME),
            'PARTLEVEL' if($PARTITION <> 0, $PARTITION)
    $!
$;
  say 'total' cAll 'parts and' pAll 'pages'
  say '     ' m.inc.0 'incremental and' m.ful.0 'full part copies'
  $;
  $>DSN.BESENWAG.$dbSy(GENINC)
  $@makeList-{INC, FULL NO, 'incremental', cAll, pAll}
  $;
  $>DSN.BESENWAG.$dbSy(GENFUL)
  $@makeList-{FUL, FULL YES, 'full'      , cAll, pAll}
  $;  66
$@proc makeList $@/makeList/
  parse arg ,lst, full, tit, cAll, pAll
  $** say 'lst' lst 'full' full 'tit' tit 'cAll' cAll 'pAll' pAll
  $$- '--' sysvar('sysnode') $dbSy date('s') time()
  $$- '-- total           : ' cAll 'parts' pAll 'pages'
  $$- '--' left(tit, 11) 'copy: ' m.lst.0 'parts'
  if $previewOnly then
      $$ OPTIONS(PREVIEW)
  else
      $$  OPTIONS EVENT(ITEMERROR,SKIP)
  if m.lst.0 > 0 then $@=¢
  $$- '  LISTDEF LST'lst '   -- ' m.lst.0 'parts'
  $@do ix=1 to m.lst.0 $$- m.lst.ix
COPY LIST LST$-{lst} COPYDDN(TCOPYD)
    PARALLEL $-{full}
    SHRLEVEL CHANGE
  $!
$/makeList/
$#out                                              20120921 11:55:08
$#out                                              20120921 11:54:19
*** run error ***
tsoAlloc rc 12 for alloc dd(CAT1) SHR DSN('DSN.BESENWAG.DBTF.(GENINC)')
$#out                                              20120921 11:50:55
-- RZ1 DBTF 20120921 11:51:23
-- total           :  586 parts 7768857 pages
-- incremental copy:  308 parts
OPTIONS EVENT(ITEMERROR,SKIP)
  LISTDEF LSTINC    --  308 parts
      INCLUDE TABLESPACE WI02A1T.A100A PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A100A PARTLEVEL 2
      INCLUDE TABLESPACE WI02A1T.A100A PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A100A PARTLEVEL 5
      INCLUDE TABLESPACE WI02A1T.A100H PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A100H PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A100H PARTLEVEL 5
      INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 7
      INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 8
      INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 9
      INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 10
      INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 11
      INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 14
      INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 15
      INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 21
      INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 22
      INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 29
      INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 30
      INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 33
      INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 34
      INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 35
      INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 38
      INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 43
      INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 6
      INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 7
      INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 10
      INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 11
      INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 18
      INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 6
      INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 7
      INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 10
      INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 11
      INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 18
      INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 24
      INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 10
      INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 16
      INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 18
      INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 19
      INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 7
      INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 15
      INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 17
      INCLUDE TABLESPACE WI02A1T.A104A004 PARTLEVEL 2
      INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 6
      INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 10
      INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 12
      INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 13
      INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 14
      INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 16
      INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 17
      INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 19
      INCLUDE TABLESPACE WI02A1T.A105A003 PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A105A003 PARTLEVEL 6
      INCLUDE TABLESPACE WI02A1T.A105A003 PARTLEVEL 15
      INCLUDE TABLESPACE WI02A1T.A105A003 PARTLEVEL 17
      INCLUDE TABLESPACE WI02A1T.A105A003 PARTLEVEL 18
      INCLUDE TABLESPACE WI02A1T.A105A004 PARTLEVEL 17
      INCLUDE TABLESPACE WI02A1T.A105A009 PARTLEVEL 12
      INCLUDE TABLESPACE WI02A1T.A105A009 PARTLEVEL 15
      INCLUDE TABLESPACE WI02A1T.A106A01 PARTLEVEL
      INCLUDE TABLESPACE WI02A1T.A106H01 PARTLEVEL
      INCLUDE TABLESPACE WI02A1T.A107A PARTLEVEL
      INCLUDE TABLESPACE WI02A1T.A108A PARTLEVEL
      INCLUDE TABLESPACE WI02A1T.A108H PARTLEVEL
      INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 6
      INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 10
      INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 12
      INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 13
      INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 14
      INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 15
      INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 19
      INCLUDE TABLESPACE WI02A1T.A109A009 PARTLEVEL 6
      INCLUDE TABLESPACE WI02A1T.A109A009 PARTLEVEL 12
      INCLUDE TABLESPACE WI02A1T.A109A009 PARTLEVEL 15
      INCLUDE TABLESPACE WI02A1T.A109A009 PARTLEVEL 17
      INCLUDE TABLESPACE WI02A1T.A109A009 PARTLEVEL 19
      INCLUDE TABLESPACE WI02A1T.A112A003 PARTLEVEL 5
      INCLUDE TABLESPACE WI02A1T.A112A004 PARTLEVEL 2
      INCLUDE TABLESPACE WI02A1T.A112A006 PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A112A009 PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A112A009 PARTLEVEL 2
      INCLUDE TABLESPACE WI02A1T.A116A PARTLEVEL
      INCLUDE TABLESPACE WI02A1T.A117A PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A117A PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A117A PARTLEVEL 6
      INCLUDE TABLESPACE WI02A1T.A117A PARTLEVEL 10
      INCLUDE TABLESPACE WI02A1T.A117A PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A117H PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A117H PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A117H PARTLEVEL 10
      INCLUDE TABLESPACE WI02A1T.A117H PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A120A PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A120A PARTLEVEL 6
      INCLUDE TABLESPACE WI02A1T.A120A PARTLEVEL 10
      INCLUDE TABLESPACE WI02A1T.A120A PARTLEVEL 13
      INCLUDE TABLESPACE WI02A1T.A120A PARTLEVEL 14
      INCLUDE TABLESPACE WI02A1T.A120A PARTLEVEL 15
      INCLUDE TABLESPACE WI02A1T.A120A PARTLEVEL 17
      INCLUDE TABLESPACE WI02A1T.A120A PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 6
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 9
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 10
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 11
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 12
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 13
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 14
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 16
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 17
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 19
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 22
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 23
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 25
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 26
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 27
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 28
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 29
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 30
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 31
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 32
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 33
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 34
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 35
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 37
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 38
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 39
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 41
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 43
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 44
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 45
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 46
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 47
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 48
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 49
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 50
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 51
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 52
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 53
      INCLUDE TABLESPACE WI02A1T.A301A PARTLEVEL
      INCLUDE TABLESPACE WI02A1T.A611A PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A702A PARTLEVEL
      INCLUDE TABLESPACE WI02A1T.A703A PARTLEVEL
      INCLUDE TABLESPACE WI02A1T.A707A PARTLEVEL
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 2
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 3
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 4
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 5
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 6
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 7
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 8
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 9
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 10
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 11
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 13
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 15
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 16
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 18
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 20
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 21
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 22
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 23
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 25
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 26
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 27
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 28
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 29
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 30
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 31
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 32
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 33
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 34
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 35
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 36
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 37
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 38
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 41
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 42
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 43
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 44
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 45
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 46
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 51
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 52
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 53
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 54
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 55
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 56
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 57
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 58
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 59
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 60
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 61
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 62
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 63
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 64
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 68
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 69
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 70
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 73
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 74
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 75
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 76
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 77
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 79
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 80
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 81
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 87
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 88
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 90
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 91
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 93
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 94
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 95
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 96
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 98
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 99
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 100
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 101
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 102
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 103
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 104
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 106
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 107
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 108
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 109
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 111
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 112
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 113
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 114
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 116
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 117
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 118
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 119
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 121
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 122
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 123
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 124
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 126
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 127
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 128
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 129
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 130
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 131
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 133
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 134
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 135
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 136
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 137
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 138
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 139
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 140
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 141
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 142
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 143
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 144
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 145
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 146
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 147
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 148
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 149
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 150
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 152
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 153
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 157
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 158
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 159
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 161
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 163
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 164
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 165
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 167
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 168
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 169
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 170
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 171
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 172
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 173
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 174
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 176
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 177
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 179
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 180
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 184
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 185
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 186
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 187
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 188
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 189
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 190
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 191
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 192
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 193
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 194
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 195
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 196
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 197
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 199
COPY LIST LSTINC COPYDDN(TCOPYD)
    PARALLEL FULL NO
    SHRLEVEL CHANGE
-- RZ1 DBTF 20120921 11:51:23
-- total           :  586 parts 7768857 pages
-- full        copy:  278 parts
OPTIONS EVENT(ITEMERROR,SKIP)
  LISTDEF LSTFUL    --  278 parts
      INCLUDE TABLESPACE WI01A1T.A040A PARTLEVEL
      INCLUDE TABLESPACE WI01A1T.A043A PARTLEVEL
      INCLUDE TABLESPACE WI01A1T.A044A PARTLEVEL
      INCLUDE TABLESPACE WI02A1T.A100H PARTLEVEL 2
      INCLUDE TABLESPACE WI02A1T.A101H PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 14
      INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 19
      INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 12
      INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 14
      INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 6
      INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 7
      INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 8
      INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 9
      INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 11
      INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 12
      INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 13
      INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 14
      INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 15
      INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 17
      INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A103A002 PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A103A002 PARTLEVEL 6
      INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 2
      INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 5
      INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 6
      INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 7
      INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 8
      INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 9
      INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 10
      INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 11
      INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 12
      INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 13
      INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 14
      INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 15
      INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 16
      INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 17
      INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 18
      INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 19
      INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 6
      INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 8
      INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 10
      INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 12
      INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 13
      INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 14
      INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 16
      INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 2
      INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 5
      INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 6
      INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 8
      INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 9
      INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 10
      INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 11
      INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 12
      INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 14
      INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 16
      INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 17
      INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 18
      INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 19
      INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 2
      INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 6
      INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 7
      INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 8
      INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 9
      INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 10
      INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 11
      INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 12
      INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 13
      INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 14
      INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 16
      INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 17
      INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 18
      INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 19
      INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 5
      INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 9
      INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 10
      INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 11
      INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 13
      INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 14
      INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 15
      INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 16
      INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 17
      INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 18
      INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 19
      INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 2
      INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 5
      INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 6
      INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 7
      INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 8
      INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 9
      INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 10
      INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 11
      INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 12
      INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 13
      INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 14
      INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 15
      INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 16
      INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 17
      INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 18
      INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 19
      INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 2
      INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 5
      INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 6
      INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 7
      INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 8
      INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 11
      INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 12
      INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 13
      INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 14
      INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 15
      INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 16
      INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 17
      INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 18
      INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 19
      INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A103A010 PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A103H001 PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A103H001 PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A103H001 PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A103H001 PARTLEVEL 7
      INCLUDE TABLESPACE WI02A1T.A103H001 PARTLEVEL 9
      INCLUDE TABLESPACE WI02A1T.A103H001 PARTLEVEL 12
      INCLUDE TABLESPACE WI02A1T.A103H001 PARTLEVEL 16
      INCLUDE TABLESPACE WI02A1T.A103H001 PARTLEVEL 18
      INCLUDE TABLESPACE WI02A1T.A103H001 PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A103H003 PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A103H003 PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A103H003 PARTLEVEL 5
      INCLUDE TABLESPACE WI02A1T.A103H004 PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A103H004 PARTLEVEL 2
      INCLUDE TABLESPACE WI02A1T.A103H005 PARTLEVEL 11
      INCLUDE TABLESPACE WI02A1T.A103H006 PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 7
      INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 9
      INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 15
      INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A105A002 PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A105A006 PARTLEVEL 8
      INCLUDE TABLESPACE WI02A1T.A105A006 PARTLEVEL 9
      INCLUDE TABLESPACE WI02A1T.A105A006 PARTLEVEL 10
      INCLUDE TABLESPACE WI02A1T.A105A006 PARTLEVEL 11
      INCLUDE TABLESPACE WI02A1T.A105A006 PARTLEVEL 12
      INCLUDE TABLESPACE WI02A1T.A105A006 PARTLEVEL 15
      INCLUDE TABLESPACE WI02A1T.A105A006 PARTLEVEL 18
      INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 2
      INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 5
      INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 6
      INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 7
      INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 8
      INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 11
      INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 12
      INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 13
      INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 14
      INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 15
      INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 16
      INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 17
      INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 18
      INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 19
      INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A105A009 PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A105A009 PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A105A009 PARTLEVEL 11
      INCLUDE TABLESPACE WI02A1T.A105A009 PARTLEVEL 17
      INCLUDE TABLESPACE WI02A1T.A105A009 PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A105H001 PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A105H001 PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A105H001 PARTLEVEL 5
      INCLUDE TABLESPACE WI02A1T.A105H001 PARTLEVEL 8
      INCLUDE TABLESPACE WI02A1T.A105H001 PARTLEVEL 16
      INCLUDE TABLESPACE WI02A1T.A105H001 PARTLEVEL 19
      INCLUDE TABLESPACE WI02A1T.A105H001 PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 7
      INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 8
      INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 9
      INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 17
      INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 18
      INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A109H001 PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A109H001 PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A109H001 PARTLEVEL 12
      INCLUDE TABLESPACE WI02A1T.A109H001 PARTLEVEL 14
      INCLUDE TABLESPACE WI02A1T.A109H001 PARTLEVEL 18
      INCLUDE TABLESPACE WI02A1T.A109H001 PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A112A001 PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A112A001 PARTLEVEL 2
      INCLUDE TABLESPACE WI02A1T.A112A001 PARTLEVEL 5
      INCLUDE TABLESPACE WI02A1T.A112A002 PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A112A002 PARTLEVEL 5
      INCLUDE TABLESPACE WI02A1T.A112A003 PARTLEVEL 2
      INCLUDE TABLESPACE WI02A1T.A112A003 PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A112A003 PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A112A007 PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A112A007 PARTLEVEL 2
      INCLUDE TABLESPACE WI02A1T.A112A007 PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A112A007 PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A112A007 PARTLEVEL 5
      INCLUDE TABLESPACE WI02A1T.A112A009 PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A112A009 PARTLEVEL 5
      INCLUDE TABLESPACE WI02A1T.A112A010 PARTLEVEL 2
      INCLUDE TABLESPACE WI02A1T.A112H006 PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A117A PARTLEVEL 2
      INCLUDE TABLESPACE WI02A1T.A117A PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A117A PARTLEVEL 12
      INCLUDE TABLESPACE WI02A1T.A117A PARTLEVEL 17
      INCLUDE TABLESPACE WI02A1T.A117A PARTLEVEL 19
      INCLUDE TABLESPACE WI02A1T.A117H PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A117H PARTLEVEL 6
      INCLUDE TABLESPACE WI02A1T.A117H PARTLEVEL 12
      INCLUDE TABLESPACE WI02A1T.A117H PARTLEVEL 14
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 2
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 5
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 7
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 8
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 15
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 18
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 21
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 24
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 36
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 40
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 42
      INCLUDE TABLESPACE WI02A1T.A610A PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A610A PARTLEVEL 2
      INCLUDE TABLESPACE WI02A1T.A610A PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A610A PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A610A PARTLEVEL 5
      INCLUDE TABLESPACE WI02A1T.A610A PARTLEVEL 6
      INCLUDE TABLESPACE WI02A1T.A610A PARTLEVEL 7
      INCLUDE TABLESPACE WI02A1T.A610A PARTLEVEL 8
      INCLUDE TABLESPACE WI02A1T.A610A PARTLEVEL 9
      INCLUDE TABLESPACE WI02A1T.A610A PARTLEVEL 10
      INCLUDE TABLESPACE WI02A1T.A912A PARTLEVEL
      INCLUDE TABLESPACE WI03A1T.A402A PARTLEVEL
      INCLUDE TABLESPACE WI03A1T.A403A PARTLEVEL
      INCLUDE TABLESPACE WI03A1T.A404A PARTLEVEL
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 19
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 47
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 48
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 49
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 50
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 65
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 71
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 72
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 97
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 105
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 156
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 162
COPY LIST LSTFUL COPYDDN(TCOPYD)
    PARALLEL FULL YES
    SHRLEVEL CHANGE
$#out                                              20120921 11:48:22
OPTIONS EVENT(ITEMERROR,SKIP)
-- RZ1 DBTF 20120921 11:48:50
-- total           :  586 parts 7768857 pages
-- incremental copy:  308 parts
  LISTDEF LSTINC    --  308 parts
      INCLUDE TABLESPACE WI02A1T.A100A PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A100A PARTLEVEL 2
      INCLUDE TABLESPACE WI02A1T.A100A PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A100A PARTLEVEL 5
      INCLUDE TABLESPACE WI02A1T.A100H PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A100H PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A100H PARTLEVEL 5
      INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 7
      INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 8
      INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 9
      INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 10
      INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 11
      INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 14
      INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 15
      INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 21
      INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 22
      INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 29
      INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 30
      INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 33
      INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 34
      INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 35
      INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 38
      INCLUDE TABLESPACE WI02A1T.A101A PARTLEVEL 43
      INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 6
      INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 7
      INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 10
      INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 11
      INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 18
      INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 6
      INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 7
      INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 10
      INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 11
      INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 18
      INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 24
      INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 10
      INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 16
      INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 18
      INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 19
      INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 7
      INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 15
      INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 17
      INCLUDE TABLESPACE WI02A1T.A104A004 PARTLEVEL 2
      INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 6
      INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 10
      INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 12
      INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 13
      INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 14
      INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 16
      INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 17
      INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 19
      INCLUDE TABLESPACE WI02A1T.A105A003 PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A105A003 PARTLEVEL 6
      INCLUDE TABLESPACE WI02A1T.A105A003 PARTLEVEL 15
      INCLUDE TABLESPACE WI02A1T.A105A003 PARTLEVEL 17
      INCLUDE TABLESPACE WI02A1T.A105A003 PARTLEVEL 18
      INCLUDE TABLESPACE WI02A1T.A105A004 PARTLEVEL 17
      INCLUDE TABLESPACE WI02A1T.A105A009 PARTLEVEL 12
      INCLUDE TABLESPACE WI02A1T.A105A009 PARTLEVEL 15
      INCLUDE TABLESPACE WI02A1T.A106A01 PARTLEVEL
      INCLUDE TABLESPACE WI02A1T.A106H01 PARTLEVEL
      INCLUDE TABLESPACE WI02A1T.A107A PARTLEVEL
      INCLUDE TABLESPACE WI02A1T.A108A PARTLEVEL
      INCLUDE TABLESPACE WI02A1T.A108H PARTLEVEL
      INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 6
      INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 10
      INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 12
      INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 13
      INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 14
      INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 15
      INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 19
      INCLUDE TABLESPACE WI02A1T.A109A009 PARTLEVEL 6
      INCLUDE TABLESPACE WI02A1T.A109A009 PARTLEVEL 12
      INCLUDE TABLESPACE WI02A1T.A109A009 PARTLEVEL 15
      INCLUDE TABLESPACE WI02A1T.A109A009 PARTLEVEL 17
      INCLUDE TABLESPACE WI02A1T.A109A009 PARTLEVEL 19
      INCLUDE TABLESPACE WI02A1T.A112A003 PARTLEVEL 5
      INCLUDE TABLESPACE WI02A1T.A112A004 PARTLEVEL 2
      INCLUDE TABLESPACE WI02A1T.A112A006 PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A112A009 PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A112A009 PARTLEVEL 2
      INCLUDE TABLESPACE WI02A1T.A116A PARTLEVEL
      INCLUDE TABLESPACE WI02A1T.A117A PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A117A PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A117A PARTLEVEL 6
      INCLUDE TABLESPACE WI02A1T.A117A PARTLEVEL 10
      INCLUDE TABLESPACE WI02A1T.A117A PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A117H PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A117H PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A117H PARTLEVEL 10
      INCLUDE TABLESPACE WI02A1T.A117H PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A120A PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A120A PARTLEVEL 6
      INCLUDE TABLESPACE WI02A1T.A120A PARTLEVEL 10
      INCLUDE TABLESPACE WI02A1T.A120A PARTLEVEL 13
      INCLUDE TABLESPACE WI02A1T.A120A PARTLEVEL 14
      INCLUDE TABLESPACE WI02A1T.A120A PARTLEVEL 15
      INCLUDE TABLESPACE WI02A1T.A120A PARTLEVEL 17
      INCLUDE TABLESPACE WI02A1T.A120A PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 6
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 9
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 10
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 11
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 12
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 13
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 14
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 16
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 17
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 19
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 22
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 23
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 25
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 26
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 27
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 28
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 29
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 30
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 31
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 32
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 33
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 34
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 35
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 37
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 38
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 39
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 41
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 43
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 44
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 45
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 46
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 47
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 48
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 49
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 50
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 51
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 52
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 53
      INCLUDE TABLESPACE WI02A1T.A301A PARTLEVEL
      INCLUDE TABLESPACE WI02A1T.A611A PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A702A PARTLEVEL
      INCLUDE TABLESPACE WI02A1T.A703A PARTLEVEL
      INCLUDE TABLESPACE WI02A1T.A707A PARTLEVEL
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 2
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 3
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 4
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 5
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 6
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 7
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 8
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 9
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 10
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 11
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 13
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 15
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 16
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 18
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 20
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 21
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 22
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 23
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 25
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 26
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 27
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 28
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 29
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 30
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 31
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 32
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 33
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 34
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 35
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 36
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 37
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 38
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 41
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 42
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 43
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 44
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 45
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 46
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 51
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 52
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 53
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 54
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 55
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 56
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 57
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 58
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 59
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 60
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 61
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 62
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 63
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 64
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 68
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 69
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 70
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 73
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 74
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 75
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 76
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 77
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 79
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 80
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 81
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 87
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 88
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 90
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 91
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 93
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 94
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 95
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 96
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 98
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 99
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 100
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 101
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 102
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 103
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 104
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 106
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 107
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 108
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 109
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 111
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 112
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 113
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 114
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 116
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 117
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 118
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 119
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 121
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 122
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 123
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 124
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 126
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 127
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 128
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 129
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 130
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 131
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 133
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 134
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 135
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 136
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 137
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 138
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 139
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 140
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 141
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 142
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 143
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 144
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 145
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 146
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 147
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 148
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 149
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 150
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 152
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 153
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 157
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 158
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 159
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 161
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 163
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 164
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 165
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 167
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 168
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 169
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 170
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 171
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 172
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 173
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 174
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 176
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 177
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 179
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 180
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 184
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 185
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 186
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 187
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 188
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 189
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 190
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 191
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 192
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 193
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 194
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 195
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 196
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 197
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 199
COPY LIST LSTINC COPYDDN(TCOPYD)
    PARALLEL FULL NO
    SHRLEVEL CHANGE
-- RZ1 DBTF 20120921 11:48:50
-- total           :  586 parts 7768857 pages
-- full        copy:  278 parts
  LISTDEF LSTFUL    --  278 parts
      INCLUDE TABLESPACE WI01A1T.A040A PARTLEVEL
      INCLUDE TABLESPACE WI01A1T.A043A PARTLEVEL
      INCLUDE TABLESPACE WI01A1T.A044A PARTLEVEL
      INCLUDE TABLESPACE WI02A1T.A100H PARTLEVEL 2
      INCLUDE TABLESPACE WI02A1T.A101H PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 14
      INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 19
      INCLUDE TABLESPACE WI02A1T.A102A PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 12
      INCLUDE TABLESPACE WI02A1T.A102H PARTLEVEL 14
      INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 6
      INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 7
      INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 8
      INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 9
      INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 11
      INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 12
      INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 13
      INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 14
      INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 15
      INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 17
      INCLUDE TABLESPACE WI02A1T.A103A001 PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A103A002 PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A103A002 PARTLEVEL 6
      INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 2
      INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 5
      INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 6
      INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 7
      INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 8
      INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 9
      INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 10
      INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 11
      INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 12
      INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 13
      INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 14
      INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 15
      INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 16
      INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 17
      INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 18
      INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 19
      INCLUDE TABLESPACE WI02A1T.A103A003 PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 6
      INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 8
      INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 10
      INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 12
      INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 13
      INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 14
      INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 16
      INCLUDE TABLESPACE WI02A1T.A103A004 PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 2
      INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 5
      INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 6
      INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 8
      INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 9
      INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 10
      INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 11
      INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 12
      INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 14
      INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 16
      INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 17
      INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 18
      INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 19
      INCLUDE TABLESPACE WI02A1T.A103A005 PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 2
      INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 6
      INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 7
      INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 8
      INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 9
      INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 10
      INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 11
      INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 12
      INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 13
      INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 14
      INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 16
      INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 17
      INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 18
      INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 19
      INCLUDE TABLESPACE WI02A1T.A103A006 PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 5
      INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 9
      INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 10
      INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 11
      INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 13
      INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 14
      INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 15
      INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 16
      INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 17
      INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 18
      INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 19
      INCLUDE TABLESPACE WI02A1T.A103A007 PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 2
      INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 5
      INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 6
      INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 7
      INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 8
      INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 9
      INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 10
      INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 11
      INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 12
      INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 13
      INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 14
      INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 15
      INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 16
      INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 17
      INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 18
      INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 19
      INCLUDE TABLESPACE WI02A1T.A103A008 PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 2
      INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 5
      INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 6
      INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 7
      INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 8
      INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 11
      INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 12
      INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 13
      INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 14
      INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 15
      INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 16
      INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 17
      INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 18
      INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 19
      INCLUDE TABLESPACE WI02A1T.A103A009 PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A103A010 PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A103H001 PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A103H001 PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A103H001 PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A103H001 PARTLEVEL 7
      INCLUDE TABLESPACE WI02A1T.A103H001 PARTLEVEL 9
      INCLUDE TABLESPACE WI02A1T.A103H001 PARTLEVEL 12
      INCLUDE TABLESPACE WI02A1T.A103H001 PARTLEVEL 16
      INCLUDE TABLESPACE WI02A1T.A103H001 PARTLEVEL 18
      INCLUDE TABLESPACE WI02A1T.A103H001 PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A103H003 PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A103H003 PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A103H003 PARTLEVEL 5
      INCLUDE TABLESPACE WI02A1T.A103H004 PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A103H004 PARTLEVEL 2
      INCLUDE TABLESPACE WI02A1T.A103H005 PARTLEVEL 11
      INCLUDE TABLESPACE WI02A1T.A103H006 PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 7
      INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 9
      INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 15
      INCLUDE TABLESPACE WI02A1T.A105A001 PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A105A002 PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A105A006 PARTLEVEL 8
      INCLUDE TABLESPACE WI02A1T.A105A006 PARTLEVEL 9
      INCLUDE TABLESPACE WI02A1T.A105A006 PARTLEVEL 10
      INCLUDE TABLESPACE WI02A1T.A105A006 PARTLEVEL 11
      INCLUDE TABLESPACE WI02A1T.A105A006 PARTLEVEL 12
      INCLUDE TABLESPACE WI02A1T.A105A006 PARTLEVEL 15
      INCLUDE TABLESPACE WI02A1T.A105A006 PARTLEVEL 18
      INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 2
      INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 5
      INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 6
      INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 7
      INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 8
      INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 11
      INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 12
      INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 13
      INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 14
      INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 15
      INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 16
      INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 17
      INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 18
      INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 19
      INCLUDE TABLESPACE WI02A1T.A105A007 PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A105A009 PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A105A009 PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A105A009 PARTLEVEL 11
      INCLUDE TABLESPACE WI02A1T.A105A009 PARTLEVEL 17
      INCLUDE TABLESPACE WI02A1T.A105A009 PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A105H001 PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A105H001 PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A105H001 PARTLEVEL 5
      INCLUDE TABLESPACE WI02A1T.A105H001 PARTLEVEL 8
      INCLUDE TABLESPACE WI02A1T.A105H001 PARTLEVEL 16
      INCLUDE TABLESPACE WI02A1T.A105H001 PARTLEVEL 19
      INCLUDE TABLESPACE WI02A1T.A105H001 PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 7
      INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 8
      INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 9
      INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 17
      INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 18
      INCLUDE TABLESPACE WI02A1T.A109A001 PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A109H001 PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A109H001 PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A109H001 PARTLEVEL 12
      INCLUDE TABLESPACE WI02A1T.A109H001 PARTLEVEL 14
      INCLUDE TABLESPACE WI02A1T.A109H001 PARTLEVEL 18
      INCLUDE TABLESPACE WI02A1T.A109H001 PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A112A001 PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A112A001 PARTLEVEL 2
      INCLUDE TABLESPACE WI02A1T.A112A001 PARTLEVEL 5
      INCLUDE TABLESPACE WI02A1T.A112A002 PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A112A002 PARTLEVEL 5
      INCLUDE TABLESPACE WI02A1T.A112A003 PARTLEVEL 2
      INCLUDE TABLESPACE WI02A1T.A112A003 PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A112A003 PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A112A007 PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A112A007 PARTLEVEL 2
      INCLUDE TABLESPACE WI02A1T.A112A007 PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A112A007 PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A112A007 PARTLEVEL 5
      INCLUDE TABLESPACE WI02A1T.A112A009 PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A112A009 PARTLEVEL 5
      INCLUDE TABLESPACE WI02A1T.A112A010 PARTLEVEL 2
      INCLUDE TABLESPACE WI02A1T.A112H006 PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A117A PARTLEVEL 2
      INCLUDE TABLESPACE WI02A1T.A117A PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A117A PARTLEVEL 12
      INCLUDE TABLESPACE WI02A1T.A117A PARTLEVEL 17
      INCLUDE TABLESPACE WI02A1T.A117A PARTLEVEL 19
      INCLUDE TABLESPACE WI02A1T.A117H PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A117H PARTLEVEL 6
      INCLUDE TABLESPACE WI02A1T.A117H PARTLEVEL 12
      INCLUDE TABLESPACE WI02A1T.A117H PARTLEVEL 14
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 2
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 5
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 7
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 8
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 15
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 18
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 20
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 21
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 24
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 36
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 40
      INCLUDE TABLESPACE WI02A1T.A191H PARTLEVEL 42
      INCLUDE TABLESPACE WI02A1T.A610A PARTLEVEL 1
      INCLUDE TABLESPACE WI02A1T.A610A PARTLEVEL 2
      INCLUDE TABLESPACE WI02A1T.A610A PARTLEVEL 3
      INCLUDE TABLESPACE WI02A1T.A610A PARTLEVEL 4
      INCLUDE TABLESPACE WI02A1T.A610A PARTLEVEL 5
      INCLUDE TABLESPACE WI02A1T.A610A PARTLEVEL 6
      INCLUDE TABLESPACE WI02A1T.A610A PARTLEVEL 7
      INCLUDE TABLESPACE WI02A1T.A610A PARTLEVEL 8
      INCLUDE TABLESPACE WI02A1T.A610A PARTLEVEL 9
      INCLUDE TABLESPACE WI02A1T.A610A PARTLEVEL 10
      INCLUDE TABLESPACE WI02A1T.A912A PARTLEVEL
      INCLUDE TABLESPACE WI03A1T.A402A PARTLEVEL
      INCLUDE TABLESPACE WI03A1T.A403A PARTLEVEL
      INCLUDE TABLESPACE WI03A1T.A404A PARTLEVEL
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 19
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 47
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 48
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 49
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 50
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 65
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 71
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 72
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 97
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 105
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 156
      INCLUDE TABLESPACE WI03A1T.A601A PARTLEVEL 162
COPY LIST LSTFUL COPYDDN(TCOPYD)
    PARALLEL FULL YES
    SHRLEVEL CHANGE
$#out                                              20120921 11:47:40
OPTIONS EVENT(ITEMERROR,SKIP)
-- RZ1 DBTF 20120921 11:47:41
-- total           :  3 parts 39 pages
-- incremental copy:  0 parts
-- RZ1 DBTF 20120921 11:47:41
-- total           :  3 parts 39 pages
-- full        copy:  3 parts
  LISTDEF LSTFUL    --  3 parts
      INCLUDE TABLESPACE WI01A1T.A040A PARTLEVEL
      INCLUDE TABLESPACE WI01A1T.A043A PARTLEVEL
      INCLUDE TABLESPACE WI01A1T.A044A PARTLEVEL
COPY LIST LSTFUL COPYDDN(TCOPYD)
    PARALLEL FULL YES
    SHRLEVEL CHANGE
$#out                                              20120921 11:45:10
OPTIONS EVENT(ITEMERROR,SKIP)
-- RZ1 DBTF 20120921 11:45:11
-- total           :  3 parts 39 pages
-- incremental :  0 parts
-- RZ1 DBTF 20120921 11:45:11
-- total           :  3 parts 39 pages
-- full        :  3 parts
  LISTDEF LSTFUL    --  3 parts
      INCLUDE TABLESPACE WI01A1T.A040A PARTLEVEL
      INCLUDE TABLESPACE WI01A1T.A043A PARTLEVEL
      INCLUDE TABLESPACE WI01A1T.A044A PARTLEVEL
COPY LIST LSTFUL COPYDDN(TCOPYD)
    PARALLEL FULL YES
    SHRLEVEL CHANGE
$#out                                              20120921 11:44:02
OPTIONS EVENT(ITEMERROR,SKIP)
-- RZ1 DBTF 20120921 11:44:03
-- total           :   parts  pages
--             :  M.INC, FULL NO, incremental, cAll, pAll.0 parts
-- RZ1 DBTF 20120921 11:44:03
-- total           :   parts  pages
--             :  M.FUL, FULL YES, full      , cAll, pAll.0 parts
$#out                                              20120921 11:40:57
OPTIONS EVENT(ITEMERROR,SKIP)
-- RZ1 DBTF 20120921 11:40:58
-- total           :  CALL parts PALL pages
-- INCREMENTAL :  0 parts
-- RZ1 DBTF 20120921 11:40:58
-- total           :  CALL parts PALL pages
-- FULL        :  3 parts
  LISTDEF LSTFUL    --  3 parts
      INCLUDE TABLESPACE WI01A1T.A040A PARTLEVEL
      INCLUDE TABLESPACE WI01A1T.A043A PARTLEVEL
      INCLUDE TABLESPACE WI01A1T.A044A PARTLEVEL
COPY LIST LSTFUL COPYDDN(TCOPYD)
    PARALLEL FULL YES
    SHRLEVEL CHANGE
$#out                                              20120921 11:39:44
OPTIONS EVENT(ITEMERROR,SKIP)
-- RZ1 DBTF 20120921 11:39:45
-- total           :  CALL parts PALL pages
-- FULL NO     :  M.O.170.1.0 parts
-- RZ1 DBTF 20120921 11:39:45
-- total           :  CALL parts PALL pages
-- FULL YES    :  M.O.170.1.0 parts
$#out                                              20120921 11:38:39
OPTIONS EVENT(ITEMERROR,SKIP)
-- RZ1 DBTF 20120921 11:38:39
-- total           :  CALL parts PALL pages
-- FULL NO     :  M.O.170.1.0 parts
-- RZ1 DBTF 20120921 11:38:39
-- total           :  CALL parts PALL pages
-- FULL NO     :  M.O.170.1.0 parts
$#out                                              20120921 11:30:26
}¢--- A540769.WK.REXX.O13(BESENWA2) cre=2012-09-21 mod=2012-09-21-10.53.49 A540769 ---
$#@
$=dbSy=DBTF
$=hh=3
$=partLim=999999999
$=previewOnly=0
call sqlConnect $dbSy
$;
$>.fEdit('::v')
$<@/sql/
$=ptaInc =- $dbSy = 'DBOF' & sysvar('SYSNODE') == 'RR2'
if $ptaInc then $@=¢
 with frTo as
(
 select case when strip(min(dbName)) like '_*' and min(dbName) > 'A*'
            then left(min(dbName), 1) else ''
       end fr,
       case when strip(max(dbName)) like '_*'
            then left(max(dbName), 1) else ''
       end || x'FFFF' to
     FROM DLC.OBJECTS_V13
     WHERE EXCLUDE='I' AND    NAME='QDDBOF INCL EXCLUDES'
)
, p as
$! else $@=¢
with p as
$!
$@=¢
(
 SELECT PT.DBNAME, pt.tsName, pt.partition,
     (  SELECT char(timestamp) || icType
          FROM  SYSIBM.SYSCOPY CP
          WHERE PT.DBNAME = CP.DBNAME
            AND PT.TSNAME = CP.TSNAME
            AND cp.dsNum in (PT.PARTITION, 0)
            AND  CP.ICTYPE IN ('F','R','X')
            and timestamp < '2012-09-21-03.20.00'
          order by timestamp desc
          fetch first 1 row only
     ) laFull,
     r.nActive,
     COPYLASTTIME,
     COPYUPDATEDPAGES,
     COPYCHANGES,
     COPYUPDATETIME
----  end   @proc selIncrCopy: select fullcopy etc. --------------------
 FROM   SYSIBM.SYSDATABASE DB
$!
if $ptaInc then $@=¢
   join frTo
     on db.name >= frTo.fr and db.name <= frTo.to
$!
$@=¢
   join SYSIBM.SYSTABLESPACE TS
     on DB.NAME = PT.DBNAME
   join SYSIBM.SYSTABLEPART PT
     on DB.NAME = TS.DBNAME
       AND TS.NAME = PT.TSNAME
   left join SYSIBM.SYSTABLESpaceStats r
      on r.dbid = db.dbid
        and r.psid = ts.psid
        and r.partition = pt.partition
 WHERE  0 = 0
----  end   @proc missFUllcopies1: fehlende Fullcopies -----------------

----  begin @proc exclude ----------------------------------------------
----- begin @proc exclGen: gemeinsame excludes -------------------------
   AND NOT (PT.DBNAME like 'DSNDB%')            -- DB2 CATALOG
   AND NOT (PT.DBNAME LIKE 'DSN8%')             -- IBM TEST DB
   AND NOT (PT.DBNAME LIKE 'WKDBD%')            -- DB2 WORK DATABASE
   AND NOT (PT.DBNAME = 'DSNTESQ')              -- DB2 CATALOG CLONE
   AND NOT (PT.DBNAME LIKE 'DB2MAPP%')          -- REORG MAPPING TABLES
   AND NOT (PT.DBNAME LIKE 'DB2PLAN%')          -- explain tables
   and not translate(PT.dbName, '999999999AAAAAA', '012345678FISWXY')
           = 'DA999999'                         -- user datenbanken
   AND NOT (PT.DBNAME LIKE 'DB2ALA%')           -- marec  generated
   AND NOT (PT.DBNAME LIKE '%MAREC%')           -- marec generated
   AND NOT (PT.DBNAME LIKE 'DACME%')            -- Mail Heinz Bühler
   AND NOT (PT.DBNAME LIKE 'DGDB%')             -- PROTOTYPEN
   AND NOT (PT.DBNAME LIKE 'DGO%')              -- PROTOTYPEN
   AND NOT (PT.DBNAME LIKE '%A1X%')             -- Neue Prototypen
   AND NOT (PT.DBNAME LIKE 'DAU%')              -- Schulung Gerrit
   AND NOT (PT.DBNAME LIKE 'IDT%')              -- ibm tools
----  end   @proc exclGen: gemeinsame excludes ------------------------
   AND NOT (PT.DBNAME LIKE 'OE02%')    -- Mail Ivo Eichmann
   AND NOT (PT.DBNAME LIKE 'CSQ%')     -- M-QUEUE DATENBANK
----  end   @proc exclude ---------------------------------------------
----  end   @proc exclGen: gemeinsame excludes -------------------------

   AND NOT (PT.DBNAME = 'XC01A1P'  AND PT.TSNAME LIKE 'A2%'  )
                                       -- EOS: Armin Breyer
   AND NOT (PT.DBNAME = 'XR01A1P'  AND PT.TSNAME LIKE 'A2%'  )
                                       -- ERET: Armin Breyer
   AND NOT (PT.DBNAME = 'CSQDBOF' AND PT.TSNAME like 'TSBLOB%' )
----  end   @proc exclude ----------------------------------------------

   AND DB.TYPE NOT IN ('T','W')
----  begin @proc missFUllcopies2: fehlende Fullcopies -----------------
   AND TS.NTABLES <> 0
   AND PT.SPACEF <> -1 -- attention space is sometimes wrong|
 )
, q as
(
select case when laFull < char(timestamp('2012-09-20-05.00.00')
- $-¢168+$hh$! hours)
                then 'full old'
            when copyUpdateTime > current timestamp - $hh hours
                then 'no newUpd'
            when nActive * 0.1 <= COPYUPDATEDPAGES then 'full upda'
            when COPYUPDATEDPAGES <> 0 or copyChanges <> 0 then 'inc'
            else 'no changes'
            end copy,
      p.*
    from p
)
select *
    from q
    where -- left(copy, 2) <> 'no'
           dbName like 'AV15A%'
 ORDER BY DBNAME, TSNAME, PARTITION
 WITH UR
$!
$/sql/
call sqlSel  $| call fmtFTab
$#out                                              20120921 10:29:05
$#out                                              20120921 10:27:02
$#out                                              20120921 10:25:33
$#out                                              20120921 10:22:26
$#out                                              20120921 10:19:52
$#out                                              20120921 10:19:35
*** run error ***
tsoAlloc rc 12 for alloc dd(CAT1) OLD DSN('V')
$#out
}¢--- A540769.WK.REXX.O13(BETAANA) cre=2012-01-12 mod=2012-04-10-12.06.26 A540769 ---
/**********************************************************************
    analyze multiple jobs extracted from beta92 by jcl(beta92ex)
      * IAT6140 JOB ==> begin of job
      * IAT2000     ==> system
      * // ... JOB  ==> jobName
      * IEF373I     ==> step/start
      * IEF032I     ==> step/stop   ==> ela
        * cpu:      ==> cpu
    totalise P02 by system
**********************************************************************/
call errReset 'h'
m.oDsn = '~wk.texw(qrana408)'
if 0 then call betaAna '~wk.texw(qr59)', 'pta0108-59'
if 1 then call betaAna '~tmp.texw(beta0408)', 'prod0408'
if 0 then call betaAna '~wk.texw(qrTf0318)', 'dbt0318-2012019'
exit

betaAna: procedure expose m.
parse arg dsn, m.ii.txt
    m.o.0 = 0
    call readNxBegin qr, dsn,,10000
    st = ''
    m.sys.0 = 0
    m.ii.jx=0
    call s1 '***begin' m.ii.txt
    do forever
        li = readNx(qr)
        if li == '' then
            leave
        if abbrev(m.li, ' IAT6140 JOB ') then do
            call jobEnd st
            m.ii.job = ''
            m.ii.jx = m.ii.jx+1
            m.ii.step.0 = 0
            st = 'i'
            end
        else if state == '' then
            iterate
        if st == 'i' then do
            if strip(substr(m.li, 10, 10)) == 'IAT2000' then do
                pJ = wordpos('JOB', m.li)
                p1 = wordpos('SELECTED', m.li)
                m.ii.sys = word(m.li, p1+1)
                m.ii.job = word(m.li, pJ+1)
                if pJ < 1 | p1 < 1 | length(m.ii.sys) \== 3 then
                    call err 'bad iat2000 selected' readnxPos(qr)
                st = 'i2'
                end
            end
        if abbrev(m.li, '//') then do
            if st == 'j' then
                iterate
            if st \== 'i2' then
                call err '// line in state' st':' ,
                          (m.qr.buf0x+m.qr.cx) m.li
            if word(m.li, 2) \== 'JOB' then
                call err '// bad job' readnxPos(qr)
            if m.ii.job \== substr(word(m.li, 1), 3) then
                call 'job mismatch' m.ii.job substr(word(m.li, 1), 3)
            st = 'j'
            end
        else if state == 'i' then
            iterate
        if abbrev(m.li, 'IEF373I STEP/') then do
            sx = m.ii.step.0 + 1
            m.ii.step.0 = sx
            m.ii.step.sx.step =  strip(substr(m.li, 14, 8))
            m.ii.step.sx.start = substr(m.li, 29, 12)
            st = 's0'
            end
        else if abbrev(m.li, 'IEF032I STEP/') then do
            if st \== 's0' then
                call err 'stepStop but state='st':' ,
                             (m.qr.buf0x + m.qr.cx) m.li
            s1 = ii'.STEP.'m.ii.step.0
            if m.s1.step \== strip(substr(m.li, 14, 8)) then
                call err 'stepStop but step='m.s1.step':' readnxPos(qr)
            m.s1.stop = substr(m.li, 29, 12)
            v = m.s1.start
            b = m.s1.stop
            if substr(v, 8, 1) \== '.' | substr(b, 8, 1) \== '.' ,
                   | left(v, 4) \== left(b, 4) then
                call err 'yearchange start/stop' v'/' || b readnxPos(qr)
            m.s1.ela=(((substr(b, 5, 3) - substr(v, 5, 3)) * 24,
                     +  substr(b, 9, 2) - substr(v, 9, 2)) * 60,
                     +  substr(b,11, 2) - substr(v,11, 2)) * 60
            st = 's1'
            end
        else if st == 's1' then do
            parse var m.li w1 h 'HR' m 'MIN' s 'SEC' .
            h = strip(h)
            m = strip(m)
            s = strip(s)
            if w1 \== 'CPU:' | \ (datatype(h,'n') & datatype(m, 'n') ,
                                & datatype(s,'n')) then
                call err 'bad cpu line:' readnxPos(qr)
            s1 = ii'.STEP.'m.ii.step.0
            m.s1.cpu = ((h*60)+m)*60+s
            st = 's2'
            end
     /* say (m.qr.buf0x + m.qr.cx) m.li */
        end
    call jobEnd st
    call readNxEnd qr
    call s1 left('w&w', 20) 'sys    cnt         ela         cpu'
    do rx=1 to m.sys.0
       call s1 left(m.ii.txt, 20) m.sys.rx.sys,
              format(m.sys.rx.cnt, 6, 0) ,
              format(m.sys.rx.ela, 8, 2) format(m.sys.rx.cpu, 8, 2)
       end
    call s1 '***end  ' m.ii.txt ,
              'with' m.ii.jx 'jobs and' (m.qr.buf0x + m.qr.cx) 'lines'
    call writeDsn m.oDsn, 'M.O.', ,1
    return
endProcedure betaAna

s1: procedure expose m.
parse arg msg
    say msg
    ox = m.o.0 + 1
    m.o.0 = ox
    m.o.ox = msg
    return
endProcedure s1

jobEnd: procedure expose m.
parse arg st
    if st == '' then
        return
    do sx = 1 to m.ii.step.0 until m.ii.step.sx.step == 'P02'
        end
    if sx > m.ii.step.0 then do
        say 'no p02 found in job' m.ii.job
        return
        end
    s1 = ii'.STEP.'sx
    if m.ii.jx // 100 = 0 then
    say 'jobEnd' m.ii.jx m.ii.job m.ii.sys m.s1.step 'ela='m.s1.ela ,
                           'cpu='m.s1.cpu readnxPos(qr, 0)
    do rx = 1 to m.sys.0 until m.sys.rx.sys == m.ii.sys
        end
    if rx > m.sys.0 then do
        m.sys.0 = m.sys.0 + 1
        m.sys.rx.sys = m.ii.sys
        m.sys.rx.cnt = 0
        m.sys.rx.ela = 0
        m.sys.rx.cpu = 0
        end
    m.sys.rx.cnt = m.sys.rx.cnt + 1
    m.sys.rx.ela = m.sys.rx.ela + m.s1.ela
    m.sys.rx.cpu = m.sys.rx.cpu + m.s1.cpu
    if m.s1.ela > 3600 then
        call s1 m.ii.job'.p02 ela' m.s1.ela 'cpu' m.s1.cpu ,
                             'sys' m.ii.sys
    return
endProcedure jobEnd

/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
    parse arg ggTsoCmd, ggRet
    address tso ggTsoCmd
    if rc == 0                     then return 0
    else if ggRet == '*'           then return rc
    else if wordPos(rc, ggRet) > 0 then return rc
    else
        call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */

/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure expose m.
parse upper arg dsn ., addPrefix
    if left(dsn,1) = "'" then
        return strip(dsn, 'b', "'")
    sp = sysvar('SYSPREF')
    if sp == '' then
        sp = userid()
    cx = pos('~', dsn)
    if cx < 1 & addPrefix == 1 then
        return sp'.'dsn
    do while cx \== 0
        le = left(dsn, cx-1)
        ri = substr(dsn, cx+1)
        if right(le, 1) == '.' | left(ri, 1) == '.' then
            dsn = le || sp || ri
        else
            dsn = le || left('.', le \== '') || sp ,
                     || left('.', ri \== '') || ri
        cx = pos('~', spec, cx)
        end
    return dsn
endProcedure dsn2Jcl

/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure expose m.
parse arg dsn .
    return "'"dsn"'"
endProcedure jcl2dsn

dsnSetMbr: procedure expose m.
parse arg dsn, mbr
     bx = pos('(', dsn)
     if bx > 0 then
         dsn = strip(left(dsn, bx-1))
     if mbr <> '' then
         dsn = dsn'('strip(mbr)')'
     return dsn
endProcedure dsnSetMbr

dsnGetMbr: procedure expose m.
parse arg dsn
     lx = pos('(', dsn)
     rx = pos(')', dsn, lx+1)
     if lx < 1 then
         return ''
     else if lx < rx then
         return substr(dsn, lx+1, rx-lx-1)
     else
         return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
    io: read or write a dataset with the following callsequences:
        read:  readDDBegin, readDD*,  readDDEnd
        write: writeBegin,  writeDD*, writeEnd

        readDD returns true if data read, false at eof
***********************************************************************/

/*--- prepare reading from a DD --------------------------------------*/
readDDBegin: procedure expose m.
    parse upper arg ggDD
    call errAddCleanup 'call readDDEnd' ggDD', "*"'
return /* end readDDBegin */

/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt = '' then
        ggCnt = 100
    call adrTso 'execio' ggCnt 'diskr' ggDD '(stem' ggSt')', 2
    return (value(ggSt'0') > 0)
return /* end readDD */

/*--- finish reading DD  ggDD ----------------------------------------*/
readDDEnd: procedure expose m.
    parse upper arg ggDD, ggRet
    call errRmCleanup 'call readDDEnd' ggDD', "*"'
    return adrTso('execio 0 diskr' ggDD '(finis)', ggRet)
endProcedure readDDEnd

/*--- prepare writing to DD ggDD -------------------------------------*/
writeDDBegin: procedure expose m.
    parse upper arg ggDD
                  /* ensure file is erased, if no records are written */
    call adrTso 'execio' 0 'diskw' ggDD '(open)'
    call errAddCleanup 'call writeDDEnd' ggDD', "*"'
return /* end writeDDBegin */

/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    call adrTso 'execio' ggCnt 'diskw' ggDD '(stem' ggSt')'
    return
endSubroutine writeDD

/*--- end writing to dd ggDD (close) --------------------------------*/
writeDDEnd: procedure expose m.
parse upper arg ggDD, ggRet
    call errRmCleanup 'call writeDDEnd' ggDD', "*"'
    return adrTso('execio 0 diskw' ggDD '(finis)', ggRet)
endProcedure writeDDEnd

/*--- readNx: read next line, using buffer ---------------------------*/
/*--- begin: allocate dsnSpec and ini ------------------------ -------*/
readNxBegin: procedure expose m.
    parse arg m, m.m.dsn, m.m.dd, m.m.Cnt
    if m.m.dd = '' then
        m.m.dd = 'DDNX'
    if m.m.cnt = '' then
        m.m.cnt = 1000
    m.m.cx = m.m.cnt + 999
    m.m.buf0x = 0
    m.m.0 = 0
    call dsnAlloc 'dd('m.m.dd')' m.m.dsn
    call readDDBegin m.m.dd
    return m
endProcedure readDDNxBegin

/*--- return the stem of the next line, or '' at end -----------------*/
readNx: procedure expose m.
parse arg m
    ix = m.m.cx + 1
    m.m.cx = ix
    if m.m.cx <= m.m.0 then
        return m'.'ix
    m.m.buf0x = m.m.buf0x + m.m.0
    if \ readDD(m.m.dd, 'M.'m'.', m.m.cnt)then
        return ''
    m.m.cx = 1
    return m'.1'
endProcedure readDDNx

/*--- return the position (line number) of reader
           plus le characters of the current line (default 50) ------*/
readnxPos: procedure expose m.
parse arg m, le
    li = m'.'m.m.cx
    li = strip(m.li, 't')
    if arg() < 2 then
        le = 50
    if le < 1 then
        li = ''
    else if length(li) <= le then
        li = ':' li
    else
        li = ':' left(li, le-3)'...'
    return 'line' (m.m.buf0x + m.m.cx)li
endProcedure readnxPos

/*--- close and deallocate ------------------------------------------*/
readNxEnd: procedure expose m.
parse arg m
    call readDDEnd m.m.dd
    call tsoFree m.m.dd
    return
endProcedure readDDNxEnd

/*--- standardise a dsn spec
       word1             dsName or -
       word2             dd     or -
       word3             disp   or -
       word4 to first :  attributes in tso format
       after first :     attributes for new allocation
----------------------------------------------------------------------*/
dsnSpec: procedure expose m.
parse upper arg spec
    rr = ''      /* put leading - in separate words */
    do sx=1 while words(rr) < 3 & wx \= ''
        wx = word(spec, sx)
        do while abbrev(wx, '-') & words(rr) < 3
            wx = substr(wx, 2)
            rr = rr '-'
            end
        rr = rr wx
        end
    spec = rr subWord(spec, sx)
    na = ''
    dd = ''
    di = ''
    if left(spec, 1) = '&' then /* external spec is handled ok */
        spec = strip(substr(spec, 2))
    do wx=1 by 1
        w = word(spec, wx)
        if w = '' | abbrev(w, '.') | abbrev(w, ':') then
            leave
        else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
            di = w
        else if w = 'CATALOG' then
            di = di w
        else if abbrev(w, 'DD(') then
            dd = substr(w, 4, length(w)-4)
        else if abbrev(w, 'DSN(') then
            na = strip(substr(w, 5, length(w)-5))
        else if na == '' then
            na = dsn2jcl(w)
        else if dd == '' then
            dd = w
        else if di == '' then
            di = w
        else
            leave
        end
    if na == '' then
        na = '-'
    else if abbrev(na, "'") then
        na = substr(na, 2, length(na)-2)
    if dd == '' then dd = '-'
    if di == '' then di = '-'
    re = subword(spec, wx)
    if abbrev(re, '.') then
        re = substr(re, 2)
    return na dd di re
endProcedure dsnSpec

/*--- alloc a dsn with dsnAlloc
          if the dsn is inuse wait and retry
          until either the allocation is successfull
          or the timeout occurs --------------------------------------*/
dsnAllocWait: procedure expose m.
parse upper arg spec, pDi, pDD, timeOut
    x = max(1, arg() - 1)
    do rt=0
        m.adrTsoAl.1 = ''
        m.adrTsoAl.2 = ''
        m.adrTsoAl.3 = ''
        call outtrap m.adrTsoAl.
        res = dsnAlloc(spec, pDi, pDD, '*')
        call outtrap off
        if \ abbrev(res, ' ') then
            return res
        msg = m.adrTsoAl.1'\n'm.adrTsoAl.2'\n'm.adrTsoAl.3
        if rt > timeOut & timeOut \== '' then
            return err('timeout allocating' spec time() '\n'msg)
        if pos('DATA SET IS ALLOCATED TO ANOTHER', msg) < 1 then
            return err('allocating' spec'\n'msg)
        say time() 'sleep and retry alloc' spec
        call sleep 1, 0
        end
endProcedure dsnAllocWait

/*--- alloc a dsn or a dd
          spec '-'<ddName>
               datasetName? disposition? '.'? attributes? (':' newAtts)?
          disp default disposition
          dd   default dd name
          retRc   erlaubte ReturnCodes (leer = 0)
          returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, pDi, pDD, retRc
    parse value dsnSpec(spec) with na dd di rest
    if na = '-' then
        m.dsnAlloc.dsn = ''
    else
        m.dsnAlloc.dsn = na
    if na == '-' & dd \== '-' & di == '-' & rest = '' then
        return dd
    if dd == '-' & pDD \== '' then
        dd = pDD
    if dd == '-' then do
        if symbol('m.adrTso.ddNum') = 'VAR' then
            dd = m.adrTso.ddNum + 1
        else
            dd = 1
        m.adrTso.ddNum = dd
        dd = 'DD' || dd
        end
    if di = '-' & pDi \== '' then
        di = pDi
    if di = '-' then
        di = 'SHR'
    else if pos('(', na) < 1 then
        nop
    else if di = 'MOD' then
        call err 'disp mod for' na
    else
        di = 'SHR'
    if pos('/', na) > 0 then
        return csmAlloc(na dd di rest, retRc)
    else
        return tsoAlloc(na dd di rest, retRc)
endProcedure dsnAlloc

tsoAlloc: procedure expose m.
parse arg na dd disp rest ':' nn, retRc
    c = 'alloc dd('dd')' disp
    if na \== '-' then
        c = c "DSN('"na"')"
    else if disp = 'NEW' and nn \== '' then
        c = c dsnCreateAtts(,nn)
    call outtrap m.adrTsoAl.
    alRc = adrTso(c rest, '*')
    call outtrap off
    if alRc =  0 then do
        call errAddCleanup 'call tsoFree' dd', "*"'
        return dd 'call tsoFree' dd';'
        end
    if nn \= '' & wordPos(disp, 'OLD SHR') > 0 ,
          & sysDsn("'"m.dsnAlloc.dsn"'") == 'DATASET NOT FOUND' then do
        say 'tsoAlloc creating' c rest ':'nn
        call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(na, nn)
        call adrTso 'free  dd('dd')'
        return tsoAlloc(na dd disp rest, retRc)
        end
    do ax=1 to m.adrTsoAl.0
        say m.adrTsoal.ax
        end
    if retRc = '*' | wordPos(alRc, retRc) > 0 then
        return ' ' alRc
    call err 'tsoAlloc rc' alRc 'for' c rest
endProcedure tsoAlloc

tsoAtts: procedure expose m.
parse arg dsn
    rc = listDsi("'"dsn"' SMSINFO")
    if rc = 0 then
        mv = ''
    else if rc = 4 & sysReason = 19 then do
        mv = 'UNITCNT(30)'
        say 'multi volume' mv
        end
    else if rc ^= 0 then
        call err 'listDsi rc' rc 'reason' sysReason,
                             sysMsgLvl1 sysMsgLvl2
    al = 'CAT'
    al = ''
    if right(sysDsSms, 7) == 'LIBRARY' ,
        | abbrev(sysDsSms, 'PDS') then
         al = al 'DSNTYPE(LIBRARY)'
    if sysUnits = 'TRACK' then
        sysUnits = 'TRACKS'
    al = al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
        "DATACLAS("sysDataClass")" ,
        "RECFM("translate('1 2 3', ' 'sysREcFM, ' 123')")",
        "LRECL("SYSLRECL")",
        "blksize("sysBLkSIZE")",
        "SPACE("sysPrimary"," sysSeconds")" sysUnits mv
    return al
endProcedure tsoAtts

tsoFree: procedure expose m.
parse arg dd, ggRet
    call adrTso 'free dd('dd')', ggRet
    call errRmCleanup 'call tsoFree' dd', "*"'
    return
endProcedure tsoFree

dsnCreateAtts: procedure expose m.
parse arg dsn, atts, forCsm
    forCsm = forCsm == 1
    aU = ' 'translate(atts)
    if abbrev(atts, ':') then do
        parse var atts a1 atts
        bl = 32760
        rl = substr(a1, 3)
        if abbrev(a1, ':F') then do
            if rl = '' then
                rl = 80
            recfm='f b'
            bl = bl - (bl // rl)
            end
        else do
            if rl = '' then
                rl = bl-4
            recfm = substr(a1, 2, 1) 'b'
            end
        if forCsm then
            atts =  atts "recfm("space(recfm, 0)") lrecl("rl")",
                    "blkSize("bl")"
        else
            atts = atts "recfm("recfm") lrecl("rl") block("bl")"
        end
    if pos('(', dsn) > 0 & pos(' DSNTYPE(', aU) < 1 ,
                         & pos(' DSORG(',   aU) < 1 then
        atts = atts 'dsntype(library) dsorg(po)'
    if pos(' MGMTCLAS(', aU) < 1 then
        atts = atts 'mgmtclas(COM#A091)'
    if pos(' SPACE(', aU) < 1 then
        if forCsm then
            atts = atts 'space(10, 1000) cylinder'
        else
            atts = atts 'space(10, 1000) cyl'
    if dsn == '' then
       return atts
    return "dataset('"dsnSetMbr(dsn)"')" atts
endProcedure dsnCreateAtts

/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
    ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
    call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
    interpret subword(ggAlloc, 2)
    return
endSubroutine readDsn

/*--- write the dataset specified in ggDsnSpec from stem ggSt
          write ggCnt records if not empty otherwise ggst0
          if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
    call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
            '(stem' ggSt 'open finis)'
    interpret subword(ggAlloc, 2)
    if ggSay == 1 | m.debug == 1 then
       say ggCnt 'records written to' ggDsnSpec
    return
endSubroutine writeDsn

copyDSN: procedure expose m.
parse arg frSpec, toSpec, ggSay
    frDD = dsnAlloc(frSpec, 'SHR', 'FRDD')
    toDD = dsnAlloc(toSpec, 'OLD', 'TODD')
    call readDDBegin word(frDD, 1)
    call writeDDBegin word(toDD, 1)
    cnt = 0
    do while readDD(word(frDD, 1), r.)
        call writeDD word(toDD, 1), r.
        cnt = cnt + r.0
        end
    call readDDEnd word(frDD, 1)
    call writeDDEnd word(toDD, 1)
    interpret ';' subword(frDD, 2) '; ; ;' subword(toDD, 2)
    if ggSay == 1 | m.debug == 1 then
       say cnt 'records copied from' frSpec 'to' to toSpec
    return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
/* copy err begin ******************************************************
    messages, errorhandling,help
***********************************************************************/
errIni: procedure expose m.
    if m.err.ini == 1 then
        return
    call outIni
    m.err.ini     = 1
    m.err.handler = ''
    m.err.cleanup = ';'
    m.err.opt     = ''
    return
endProcedure errIni
/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
    call errIni
    parse arg m.err.opt, m.err.handler
    if pos('I', translate(m.err.opt)) > 0 then
        if errOS() \== 'LINUX' then
            if sysVar('sysISPF') = 'ACTIVE' then
                    call adrIsp 'control errors return'
    return
endSubroutine errReset

/*--- error routine: abend with message ------------------------------*/
err:
    parse arg ggTxt, ggOpt
    call errIni
    drop err handler cleanup opt call return
    if ggOpt == '' & m.err.handler \== '' then do
        if 1 then do /* no detection of recursive err call loop
                        --> will anyway fail by stack overflow */
            interpret m.err.handler
            end
        else do
                     /* avoid recursive err call loop */
            drop call return
            if symbol('m.err.call') \== 'VAR' then
                m.err.call = 1
            else
                m.err.call = m.err.call + 1
            if m.err.call > 10 then do
                say 'errHandler loop:' m.err.handler
                end
            else do
                m.err.return = 1
                call errInterpret m.err.handler
                m.err.call = m.err.call - 1
                if m.err.return then
                    return result
                end
            end
        end
    call outPush
    call errSay ggTxt, 'e'
    call errCleanup
    if ggOpt == '' then
        ggOpt = m.err.opt
    ggOpt = translate(ggOpt)
    if pos('T', ggOpt) > 0  then do
        trace ?r
        say 'trace ?r in err'
        end
    if pos('H', ggOpt) > 0  then do
        call errSay 'divide by zero to show stackHistory', 'e'
        x = 1 / 0
        end
    call errSay 'exit(12)', 'e'
    exit errSetRc(12)
endSubroutine err

/*--- error routine: user message cleanup exit -----------------------*/
errEx:
    parse arg ggTxt
    call errIni
    call outPush
    call errSay ggTxt
    call errCleanup
    exit 8
endProcedure errEx

errAddCleanup: procedure expose m.
parse arg code
    if m.err.ini \== 1 then
        call errIni
        /* concatenate backwards, then it is executed also backwards */
    m.err.cleanup = ';'code || m.err.cleanup
    return
endProcedure errAddCleanup

errRmCleanup: procedure expose m.
parse arg code
    if m.err.ini \== 1 then
        call errIni
    cx = pos(';'code';', m.err.cleanup)
    if cx > 0 then
        m.err.cleanup = left(m.err.cleanup, cx) ,
                     || substr(m.err.cleanup, cx + length(code)+2)
    return
endProcedure errRmCleanup

errCleanup: procedure expose m.
    call errIni
    cl = m.err.cleanup
    if cl = ';' then
        return
    m.err.cleanup = ';'
    call out 'err cleanup begin' cl
    call errInterpret cl
    call out 'err cleanup end' cl
    return
endProcedure errCleanup

errInterpret: procedure expose m.
parse arg code
    interpret code
    m.err.return = 0
    return
endProcedure errInterpret
/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
    interpret 'assertRes =' arg(1)
    if \ assertRes then
        call err 'assert failed' arg(1)':' arg(2)
    return
endProcedure assert

/*--- output an errorMessage msg with pref pref
           split message in lines at '/n' ---------------------------*/
errSay: procedure expose m.
parse arg msg, pref
    parse source . . ggS3 .                           /* current rexx */
    if pref == 'e' then
        msg = 'fatal error in' ggS3':' msg
    else if pref == 'w' then
        msg = 'warning in' ggS3':' msg
    else if pref \== '' then
        msg = pref':' msg
    return outNl(msg)
endProcedure errSay

/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg, op
    call errSay msg, 'e'
    call help
    call err msg, op
endProcedure errHelp

/*--- return the Operating System we are running on: TSO or LINUX ---*/
errOS: procedure expose m.
    parse source os .
    return os
endProcedure errOS

/*--- set rc for ispf: -------------------------------------------------
    if a cmd is run by ispStart, its RC is ignored,
         but ISPF passes the value of the shared varible 3IspfRc
         back as return code
----------------------------------------------------------------------*/
errSetRc: procedure expose m.
parse arg zIspfRc
    if errOS() \== 'LINUX' then
           if sysVar('sysISPF') = 'ACTIVE' then
            address ispExec vput 'zIspfRc' shared
    return zIspfRc
endProcedure errSetRc

/*--- output a trace message if m.tr is set -----------------------*/
trc: procedure expose m.
parse arg msg
    if m.trace == 1 then
        call out 'trc:' msg
    return
endProcedure trc

debug: procedure expose m.
parse arg msg
    if m.debug == 1 then
        call out 'debug' msg
    return
endProcedure debug

/*--- display the first comment block of the source as help ----------*/
help: procedure expose m.
    parse source . . s3 .
    call out right(' help for rexx' s3, 79, '*')
    do ax=1 to arg()
        say ' ' arg(ax)
        end
    do lx=1 by 1
        if pos('/*', sourceLine(lx)) > 0 then
            leave
        else if lx > 10 then do
            call out 'initial commentblock not found for help'
            return
            end
        end
    do lx=lx+1 by 1
        li = strip(sourceLine(lx), 't', ' ')
        if pos('*/', li) > 0 then
            leave
        call out li
        end
    call out right(' end help for rexx' s3, 79, '*')
    return 4
endProcedure help

/*--- output all lines (separated by '\n') of all args --------------*/
outNl: procedure expose m.
    do ax=1 to max(1, arg())
        msg = arg(ax)
        sx = 0
        bx = -1
        do lx=1 until bx >= length(msg)
                ex = pos('\n', msg, bx+2)
            if ex < 1 then
                ex = length(msg)+1
            call out substr(msg, bx+2, ex-bx-2)
            bx = ex
         end
        end
    return 0
endProcedure outNl
/* copy err end   *****************************************************/
/* copy out begin ******************************************************
    out interface with simplistic implementation
***********************************************************************/
outIni: procedure expose m.
parse arg msg
    if m.out.ini == 1 then
        return
    m.out.ini = 1
    m.out.dst = ''
    return
endProcedure outIni

/*--- output a message to the current destination -------------------*/
out: procedure expose m.
parse arg msg
    if m.out.ini \== 1 then
        call outIni
    if m.out.dst == '' then do
        say msg
        end
    else do
        st = m.out.dst
        sx = m.st.0 + 1
        m.st.0 = sx
        m.st.sx = msg
        end
    return 0
endProcedure out

/*--- push an out destination ---------------------------------------*/
outPush: procedure expose m.
parse arg m.out.dst
    return
endProcedure outPush
/* copy out end   *****************************************************/
}¢--- A540769.WK.REXX.O13(BETAFRTO) cre=2012-10-02 mod=2012-10-02-12.46.05 A540769 ---
$#@
$<~tmp.texw(beta093t)
all = '9999'
$@for li $@¢
   if \abbrev($li, 'QR') then iterate
   fr = word($li, 3)
   to = word($li, 4)
   do wx = 1 to words(all)
       if word(all, wx) = fr then leave
       if word(all, wx) > fr then do
           all = subword(all, 1, wx-1) fr subword(all, wx)
           m.fr = 0
           leave
           end
       end
   m.fr = m.fr + 1
   do wx = 1 to words(all)
       if word(all, wx) = to then leave
       if word(all, wx) > to then do
           all = subword(all, 1, wx-1) to subword(all, wx)
           m.to = 0
           leave
           end
       end
   m.to = m.to - 1
   $!
tot = 0
last = ''
len = 16
do wx = 1 to words(all)-1
    w1 = word(all, wx)
    if last <> left(w1, len) then do
        if last <> '' then
            $$- last right(tot, 5) right(cMin, 5) right(cMax, 5)
        last = left(w1, len)
        cMin = tot
        cMax = tot
        end
    tot = tot + m.w1
    cMin = min(cMin, tot)
    cMax = max(cMax, tot)
    end
    $$- last right(tot, 5) right(cMin, 5) right(cMax, 5)
$#out                                              20121002 12:44:22
30.09.2012.01:00     1     0     1
30.09.2012.01:19    12     1    14
30.09.2012.01:20     6     6    12
30.09.2012.01:21     3     3     6
30.09.2012.01:26     2     2     3
30.09.2012.01:27     1     1     2
30.09.2012.01:33     0     0     1
30.09.2012.02:59     1     0     1
30.09.2012.05:00     5     1     5
30.09.2012.05:02     2     2     5
30.09.2012.05:04     0     0     2
30.09.2012.06:30    22     0    30
30.09.2012.06:31    20    20    22
30.09.2012.06:32    19    18    21
30.09.2012.06:33    19    17    20
30.09.2012.06:34    18    18    19
30.09.2012.06:35    18    18    19
30.09.2012.06:36    20    17    20
30.09.2012.06:37    20    19    20
30.09.2012.06:38    19    19    20
30.09.2012.06:39    19    18    19
30.09.2012.06:40    19    18    19
30.09.2012.06:43    18    18    19
30.09.2012.06:47    17    16    18
30.09.2012.06:48    17    16    17
30.09.2012.06:49    17    16    17
30.09.2012.06:51    16    15    17
30.09.2012.06:52    16    15    16
30.09.2012.06:56    16    15    16
30.09.2012.06:57    15    15    16
30.09.2012.06:58    16    14    16
30.09.2012.06:59    15    14    16
30.09.2012.07:00    13    13    16
30.09.2012.07:01    16    13    16
30.09.2012.07:03    16    15    16
30.09.2012.07:04    16    14    16
30.09.2012.07:05    16    15    16
30.09.2012.07:06    16    15    16
30.09.2012.07:07    16    14    16
30.09.2012.07:08    15    14    16
30.09.2012.07:09    15    14    15
30.09.2012.07:10    15    14    15
30.09.2012.07:11    15    14    15
30.09.2012.07:12    15    14    15
30.09.2012.07:14    15    14    15
30.09.2012.07:18    15    14    15
30.09.2012.07:19    15    14    15
30.09.2012.07:20    15    14    15
30.09.2012.07:21    15    14    15
30.09.2012.07:22    14    14    15
30.09.2012.07:23    14    13    15
30.09.2012.07:24    14    14    15
30.09.2012.07:25    15    14    15
30.09.2012.07:28    15    14    15
30.09.2012.07:29    14    14    15
30.09.2012.07:30    14    14    15
30.09.2012.07:31    20    14    21
30.09.2012.07:33    20    19    20
30.09.2012.07:36    19    19    20
30.09.2012.07:39    19    18    19
30.09.2012.07:41    18    18    19
30.09.2012.07:43    17    17    18
30.09.2012.07:45    17    16    17
30.09.2012.07:46    17    16    17
30.09.2012.07:51    17    16    17
30.09.2012.07:52    17    16    17
30.09.2012.07:53    17    16    17
30.09.2012.07:54    17    16    17
30.09.2012.07:56    17    16    17
30.09.2012.07:58    17    16    17
30.09.2012.07:59    17    16    17
30.09.2012.08:00    17    16    17
30.09.2012.08:01    17    16    17
30.09.2012.08:02    16    16    17
30.09.2012.08:03    17    16    17
30.09.2012.08:04    17    16    17
30.09.2012.08:07    17    16    17
30.09.2012.08:08    17    16    17
30.09.2012.08:09    17    16    17
30.09.2012.08:13    17    16    17
30.09.2012.08:14    17    16    17
30.09.2012.08:15    17    16    17
30.09.2012.08:16    14    14    17
30.09.2012.08:17    16    14    16
30.09.2012.08:18    15    13    16
30.09.2012.08:19    28    14    29
30.09.2012.08:20    26    25    28
30.09.2012.08:21    22    22    27
30.09.2012.08:22    22    22    23
30.09.2012.08:23    23    22    23
30.09.2012.08:24    23    22    23
30.09.2012.08:25    22    22    23
30.09.2012.08:26    23    22    23
30.09.2012.08:27    23    22    23
30.09.2012.08:28    22    22    23
30.09.2012.08:29    22    21    23
30.09.2012.08:30    22    21    23
30.09.2012.08:31    22    21    23
30.09.2012.08:32    23    22    23
30.09.2012.08:33    22    22    23
30.09.2012.08:34    22    22    23
30.09.2012.08:35    22    22    23
30.09.2012.08:36    22    21    22
30.09.2012.08:37    21    20    22
30.09.2012.08:38    20    20    22
30.09.2012.08:39    21    20    21
30.09.2012.08:40    21    20    21
30.09.2012.08:41    21    20    21
30.09.2012.08:42    21    20    21
30.09.2012.08:43    21    20    21
30.09.2012.08:44    20    20    21
30.09.2012.08:45    21    20    21
30.09.2012.08:46    20    20    21
30.09.2012.08:48    20    19    20
30.09.2012.08:50    20    19    20
30.09.2012.08:51    20    19    20
30.09.2012.08:54    20    18    20
30.09.2012.08:55    20    18    20
30.09.2012.08:56    20    19    20
30.09.2012.08:58    20    19    20
30.09.2012.09:00    20    18    20
30.09.2012.09:01    20    19    20
30.09.2012.09:03    19    19    20
30.09.2012.09:04    20    19    20
30.09.2012.09:09    21    19    21
30.09.2012.09:12    21    19    21
30.09.2012.09:13    20    20    21
30.09.2012.09:14    21    20    21
30.09.2012.09:15    20    20    21
30.09.2012.09:16    21    20    21
30.09.2012.09:20    21    20    21
30.09.2012.09:21    21    20    21
30.09.2012.09:25    21    20    21
30.09.2012.09:27    20    19    21
30.09.2012.09:28    20    19    20
30.09.2012.09:29    20    18    20
30.09.2012.09:30    20    18    20
30.09.2012.09:31    18    18    20
30.09.2012.09:32    19    18    19
30.09.2012.09:33    19    18    19
30.09.2012.09:34    18    18    19
30.09.2012.09:35    19    18    19
30.09.2012.09:36    18    16    19
30.09.2012.09:37    17    16    18
30.09.2012.09:38    13    13    18
30.09.2012.09:41    12    12    13
30.09.2012.09:43    12    12    15
30.09.2012.09:44    11    11    12
30.09.2012.09:47    10    10    11
30.09.2012.09:52     8     8    10
30.09.2012.10:00     8     8     9
30.09.2012.10:08     7     7     8
30.09.2012.10:14     6     6     7
30.09.2012.10:17     5     5     6
30.09.2012.10:32     4     4     5
30.09.2012.11:01     4     4     5
30.09.2012.11:04     3     3     4
30.09.2012.11:34     2     2     3
30.09.2012.12:00     2     2     5
30.09.2012.12:44     1     1     2
30.09.2012.12:49     2     1     2
30.09.2012.12:58     3     1     7
30.09.2012.13:01     4     3     4
30.09.2012.13:06     3     3     4
30.09.2012.13:33     2     2     3
30.09.2012.15:00    11     2    18
30.09.2012.15:01     7     7    11
30.09.2012.15:02     6     6     7
30.09.2012.15:03     4     4     6
30.09.2012.15:35     5     4     5
30.09.2012.16:00     8     5    20
30.09.2012.16:10     7     7     8
30.09.2012.16:12     6     6     7
30.09.2012.16:36     5     5     6
30.09.2012.17:00    21     5    31
30.09.2012.17:01    13    13    26
30.09.2012.17:02    10    10    13
30.09.2012.17:03     8     8    10
30.09.2012.17:05     7     7     8
30.09.2012.17:06     6     6     7
30.09.2012.17:08     4     4     6
30.09.2012.17:30     6     4    25
30.09.2012.17:31     5     5     6
30.09.2012.17:40     4     4     5
30.09.2012.17:45     3     3     4
30.09.2012.17:54     4     3     4
30.09.2012.17:55     3     3     4
30.09.2012.18:00    15     3    25
30.09.2012.18:01     8     8    20
30.09.2012.18:02     7     7     8
30.09.2012.18:03     6     6     7
30.09.2012.18:04     5     5     6
30.09.2012.18:06     4     4     5
30.09.2012.18:14     3     3     4
30.09.2012.18:22     2     2     3
30.09.2012.19:00    19     2    25
30.09.2012.19:01    10    10    19
30.09.2012.19:02     8     8    10
30.09.2012.19:03     6     6     8
30.09.2012.19:05     5     5     6
30.09.2012.19:06     4     4     5
30.09.2012.19:10     3     3     4
30.09.2012.19:26     2     2     3
30.09.2012.20:00    15     2    16
30.09.2012.20:01     4     4    15
30.09.2012.20:02     3     3     4
30.09.2012.20:06     2     2     3
30.09.2012.20:20     1     1     2
30.09.2012.21:00     5     1    12
30.09.2012.21:01     4     4     5
30.09.2012.21:02     3     3     4
30.09.2012.21:03     2     2     3
30.09.2012.21:04     1     1     2
30.09.2012.21:05     0     0     1
30.09.2012.22:00     2     0     3
30.09.2012.22:01     0     0     2
30.09.2012.22:15     1     0     1
30.09.2012.22:24     0     0     1
}¢--- A540769.WK.REXX.O13(BINDCMN) cre=2013-11-04 mod=2013-11-04-12.01.20 A540769 ---
/* REXX ----------------------------------------------------------------
bindCMN: bind Interface for changeman

synopsis: BINDCMN DBP appl pgm install

parameters:
    appl: the cmn application (first 4 letters of cmn package)
    pgm : the program name
    install: installDate in format dd.mm.yyyy
output:
    DD DBP: to this DD the DBP Member is written

 4.10.13: Walter neu
 ---------------------------------------------------------------------*/
call errReset 'h'
parse upper arg mFun mRest
if pos('?', mFun mRest) > 0 | mFun = '' then
     exit help()
if mFun == 'DBP' then
     call dbp mRest
else
    exit errHelp('i}bad args:' mFun mRest)
exit

DBP: procedure expose m.
parse arg appl pgm inst rest
    if length(appl) > 4 then
        call err 'i}bad appl:' appl
    if length(pgm) > 8 then
        call err 'i}bad pgm:' pgm
    if translate(inst, '000000000', '123456789') \== '00.00.0000' then
        call err 'i}bad installDate' inst
    call sqlConnect 'DP4G'
    call sqlExec "insert into oa1p.tAdm40BindPgm values ('" ,
             || appl || "', '"pgm"', '"inst"')"

    call sqlPreOpen 1, 'select stmt from oa1p.vAdm40BindDBP' ,
                   'order by appl, pgm, install, rdlSeq, cqSeq, ovSeq'
    do sx=1 while sqlFetchInto(1, ':m.st.sx')
        end
    call sqlClose 1
    call sqlDisConnect 'DP4G'
    call tsoOpen 'DBP', 'W'
    call writeDD 'DBP', 'M.ST.', sx-1
    call tsoClose 'DBP', 'W'
    return
endProcedure DBP
/* copy sqlC   begin ***************************************************
    sql interface Compatibility mode
***********************************************************************/
/*--- prepare and declare 'c'cx from sql src -------------------------*/
sqlPreDeclare: procedure expose m.
parse arg cx, src, ggRetOk, descOut
     m.sql.cx.type = ''
     res = sqlPrepare(cx, src, ggRetOk, descOut)
     if res >= 0 then
         return sqlExec('declare c'cx 'cursor for s'cx)
     return res
endProcedure sqlPreDeclare

/*--- prepare, declare and open 'c'cx from sql src -------------------*/
sqlPreOpen: procedure expose m.
parse arg cx, src, descOut, descInp
     res = sqlPreDeclare(cx, src, descOut, descInp)
     if res >= 0 then
         return sqlOpen(cx)
     return res
endProcedure sqlPreOpen

/*--- fetch cursor 'c'cx into variables ggVars -----------------------*/
sqlFetchInto:
parse arg ggCx, ggVars
    if ggVars == '' then
        ggVars = 'descriptor :M.SQL.'ggCX'.D'
                        /* accept sqlCodes > 0 except 100 */
    ggRes = sqlExec('fetch c'ggCx 'into' ggVars, 100)
    if ggRes == 0 then
        return 1
    if ggRes == 100 then
        return 0
    return ggRes
endProcedure sqlFetchInto

/*--- return sql variable list for stem st and fields the word in vars
          if withInd == 1 then with sqlIndicator variables
        sqlVars('S', 'A B') --> ':S.A, :S.B'
        sqlVars('S', 'A B', 1) --> ':S.A :S.A.SQLIND, :S.B :S.B.SQLIND'
----------------------------------------------------------------------*/
sqlVars: procedure expose m.
parse arg st, vars, withInd
    res = ''
    if st ^== '' then
        st = st'.'
    do ix=1 to words(vars)
        res = res', :'st || word(vars, ix)
        if withInd == 1 then
             res = res ':'st || word(vars, ix)'.sqlInd'
        end
    return substr(res, 3)
endProcedure sqlVars

/*--- open cursor 'c'cx fetch all into variables vars and close
      st = passed stem, sx = row number
      return number of rows fetched ----------------------------------*/
sqlOpAllCl:
parse arg ggCx, st, ggVars
    if arg() >= 4 then do
        call sqlDescribeInput ggCx
        do ggAx=4 to arg()
            call sqlDASet ggCx, 'I', ggAx-3, arg(ggAx)
            end
        ggRes = sqlOpen(ggCx use)
        end
    else do
        ggRes = sqlOpen(ggCx)
        end
    if ggRes < 0 then
        return ggRes
    do sx = 1 until ggRes \== 1
        ggRes = sqlFetchInto(ggCx, ggVars)
        end
    m.st.0 = sx - 1
    call sqlRxClose ggCx
    if ggRes == 0 then
        return m.st.0
    return ggRes
endProcedure sqlOpAllCl

/*--- prepare, declare open cursor 'c'cx, fetch all and close
      return number of rows fetched ----------------------------------*/
sqlPreAllCl:
parse arg ggCx, ggSrc, st, ggVars
    ggRes = sqlPreDeclare(ggCx, ggSrc)
    if ggRes >= 0 then
        return sqlOpAllCl(ggCx, st, ggVars)
    return ggRes
endProcedure sqlPreAllCl

/*--- execute statement 's'cx using arguments arg(2), arg(3)... ------*/
sqlExecStmt:
parse arg ggCx ggRetOk  /* no , for ggRetOk, arg(2) is used already| */
    if ggAx > 1 then
        call sqlDescribeInput ggCx
    do ggAx=2 to arg()
        call sqlDASet ggCx, 'I', ggAx-1, arg(ggAx)
        end
     return sqlExec('execute s'ggCx 'using descriptor :M.SQL.'ggCx'.I',
                   , ggRetOk)
endProcedure execStmt

/*--- execute immediate the sql src ----------------------------------*/

/* copy sqlC   end   **************************************************/
/* copy SQL  begin ***************************************************
       Achtung: inc generiert sql aus sqlRx, Aenderungen nur in sqlRx|
    sql interface
***********************************************************************/
/*--- initialize sql -----------------------------------------------*/
sqlIni: procedure expose m.
    if m.sql.ini == 1 then
        return
    m.sqlNull = '---'
    m.sqlInd = 'sqlInd'
    m.sql.defCurs= 49
    m.sqlCAMsg = 0
    m.sqlSuMsg = 2
    m.sql.ini = 1
    m.sql.conType = ''
    m.sql.conDbSys = ''
    m.sql.conhost = ''
    isInProd = wordPos(sysvar(sysNode), 'RZ2 RZ4') > 0
    m.sqlRetOK = 'dne' copies('rod', \ isInProd)
    return 0
endProcedure sqlIni

/*--- connect to the db2 subsystem sys -----------------------------*/
sqlConnect: procedure expose m.
parse upper arg sys, ggRetOk
    call sqlIni
    address tso "SUBCOM DSNREXX"
    if rc <> 0 then do
       sRc = RXSUBCOM('ADD','DSNREXX','DSNREXX') /* ADD HOST CMD ENV  */
       if sRc <> 0 then
           call err 'rc' sRc 'from RXSUBCOM(ADD, DSNREXX, DSNREXX)'
       end
    if sys = '-' then
        return 0
    if sys \== '' then
        nop
    else if sysvar(sysnode) == 'RZ1' then
        sys = 'DBAF'
/*  else if sysvar(sysnode) == 'RZ4' then
        sys = 'DP4G'
*/  else
        call err 'no default subsys for' sysvar(sysnode)
    m.sql.conDbSys = sys
    ggSqlStmt =  'connect' sys
    address dsnRexx ggSqlStmt
    if rc = 0 then
        return 0
    interpret sqlErrorHandler(rc, ggRetOk, ggSqlStmt)
endProcedure sqlConnect

/*--- diconnect from db2 ---------------------------------------------*/
sqlDisconnect: procedure expose m.
parse arg retOk
    ggSqlStmt =  'disconnect'
    m.sql.conDbSys = ''
    address dsnRexx ggSqlStmt
    if rc = 0 then
        return 0
    interpret sqlErrorHandler(rc, ggRetOk, ggSqlStmt)
endProcedure sqlDisconnect

/*--- execute a query from sql, with one resultset -------------------*/
sqlQuery: procedure expose m.
parse arg cx, src, retOk, resTy
     res = sqlPrepare(cx, src, retOk, 1)
     if res < 0 then
         return res
     m.sql.cx.type = resTy
     res = sqlExec('declare c'cx 'cursor for s'cx, retOk)
     if res < 0 then
         return res
     res = sqlExec('open c'cx, retOk)
     if res < 0 then
         return res
     call sqlFetchVars cx
     m.sql.cx.updateCount = sqlErrd.3
     m.sql.cx.resultSet = cx
     return res
endProcedure sqlQuery

/*--- fetch next row to m.dst.* at end return false ------------------*/
sqlFetch: procedure expose m.
parse arg cx, dst, retOk
    fetCode = sqlExec('fetch c'cx 'into' sqlFetchVars(cx), 100 retOk)
    if fetCode == 100 then
        return 0
    if fetCode < 0 then
        return fetCode
    call sqlSetNull cx, dst
    return 1
endProcedure sqlFetch

/*--- close cursor 'c'cx ---------------------------------------------*/
sqlClose: procedure expose m.
parse arg cx, retOk
     return sqlExec('close c'cx, retOk)
endProcedure sqlClose

/*-- execute an sql with no resultset, but possibly outParms ---------*/
sqlUpdate: procedure expose m.
parse arg cx, src, retOk
    m.sql.cx.updateCount = ''
    m.sql.cx.resultSet   = ''
    bx = verify(src, '( ')
    if bx > 0 then
        fun = translate(word(substr(src, bx), 1))
    if  fun = 'SET' then do
        w2 = translate(word(substr(src, bx), 2))
        if \ abbrev(w2, ':') then
            return sqlExImm(src, retOk)
        trace ?r
        ex = pos('=', w2)
        if ex = 0 then
            ex = length(w2)+1
        var = strip(substr(w2, 2, ex-2))
        if var = '' then
            call err 'bad hostVar in' src
        m.sql.outVar = var
        src2 = 'set :M.sql.out.'var substr(w, ex) subword(src, 3)
        return sqlExec(src2, retOk)
        end
    if fun == 'DECLARE'  then do
        if 'GLOBAL' == translate(word(substr(src, bx), 2)) then
            return sqlExImm(src, retOk)
        end
    res = sqlExec(src, retOk)
    if wordPos(fun, 'DELETE INSERT UPDATE') > 0 then
        m.sql.cx.updateCount = sqlErrd.3
    return res
endProcedure sqlUpdate

/*-- execute a query, update or call ---------------------------------*/
sqlExecute: procedure expose m.
parse arg cx, src, retOk
    src = inp2Str(src, '-sql')
    f = translate(word(substr(src, max(verify(src, '( '), 1)), 1))
    m.sql.cx.fun = f
    if f == 'SELECT' | f == 'WITH' then
        return sqlQuery(cx, src, retOk)
    else if f == 'CALL' then
        call err 'implement sql call for:' src
    else
        return sqlUpdate(cx, src, retOk)
endProcedure sqlExecute

/*-- execute a query, copy result to stem ----------------------------*/
sql2St: procedure expose m.
parse arg src, dst, retOk, type
    cx = m.sql.defCurs
    res = sqlQuery(cx, src, retOk, type)
    if res >= 0 then do
        do sx=1 while sqlFetch(cx, dst'.'sx)
           end
        res = sx-1
        end
    m.dst.0 = res
    call sqlClose cx
    return res
endProcedure sql2St

/*-- execute a query and return value of the first column
           if > 1 row fail, if 0 rows return arg(3) or fail ----------*/
sql2One: procedure expose m.
parse arg src, dst
    cx = m.sql.defCurs
    call sqlQuery cx, src
    f1 = sqlFetch(cx, dst)
    if f1 then
        f2 = sqlFetch(cx, dst)
    call sqlClose cx
    if \ f1 then
        if arg() > 2 then
            return arg(3)
        else
            call err 'no row returned for:' src
    if f2 then
        call err '2 or more rows for' src
    c1 = m.sql.cx.col.1
    return m.dst.c1
endProcedure sql2One

/*--- reset sql cursor 'c'cx fields ----------------------------------*/
sqlReset: procedure expose m.
parse arg cx
     m.sql.cx.updateCount = ''
     m.sql.cx.resultSet   = ''
     m.sql.cx.needDesc    = 1
     m.sql.cx.d.sqlD = 'noSqlDA'
     m.sql.cx.i.sqlD = 'noDescInp'
     m.sql.cx.fetchVars = ''
     m.sql.cx.type  = ''
     m.sql.cx.col.0 = ''
     m.sql.cx.into = ''
     return
endProcedue sqlReset

/*--- prepare statement 's'cx from sql src into descriptor desc ------*/
sqlPrepare: procedure expose m.
parse arg cx, src, retOk, descOut
     src = inp2str(src, '%qn%s ')
     s = ''
     if descOut == 1 then
         s = 'into :M.SQL.'cx'.D'
     call sqlReset cx
     return sqlExec('prepare s'cx s 'from :src', retOk)
endProcedure sqlPrepare

/*--- open cursor 'c'cx using arguments arg(2), arg(3)... ------------*/
sqlOpen: procedure expose m.
parse arg cx us
    if us == '' then do
        if arg() <=  1 then
            return sqlExec('open c'cx)
        call sqlDescribeInput cx
        do ix=1 to arg()-1
            call sqlDASet cx , 'I', ix, arg(ix+1)
            end
        end
    return sqlExec('open c'cx 'using descriptor :M.SQL.'cx'.I')
endProcedure sqlOpen

/*--- execute a prepared statement with arg(2), arg(3)... ------------*/
sqlExePreSt: procedure expose m.
parse arg cx retOk
    if arg() <=  1 then
        return sqlExec('execute s'cx, retOk)
    call sqlDescribeInput cx
    do ix=1 to arg()-1
        call sqlDASet cx , 'I', ix, arg(ix+1)
        end
    return sqlExec('execute s'cx 'using descriptor :M.SQL.'cx'.I',
                   , retOk)
endProcedure sqlExePreSt
/*--- describe output (if not already done)
         and return size of sqlDa ------------------------------------*/
sqlDescribeOutput: procedure expose m.
parse arg cx, force
    if force == 1 | \ datatype(m.sql.cx.d.sqlD, 'n') then
         call sqlExec 'describe s'cx 'into :M.SQL.'cx'.D', 0
    return m.sql.cx.d.sqlD
endProcedure sqlDescribeOutput

/*--- describe input (if not already done)
         and return size of input sqlDA ------------------------------*/
sqlDescribeInput: procedure expose m.
parse arg cx, force
    if force == 1 | \ datatype(m.sql.cx.i.sqlD, 'n') then
         call sqlExec 'describe input s'cx 'into :M.SQL.'cx'.I'
    return m.sql.cx.i.sqlD
endProcedure sqlDescribeInput

/*--- describe table and return sqlDA --------------------------------*/
sqlDescribeTable: procedure expose m.
parse upper arg tb, force
    if force == 1 | \ datatype(m.sql.table.tb.sqlD, 'n') then
         call sqlExec 'describe table :tb into :M.SQL.TABLE.'tb
    return 'SQL.TABLE.'tb
endProcedure sqlDescribeTable

/*--- return select column list for table tb
      omit Blobs (blobMax < 0) or substr(blob, 1, blobMax) ----------*/
sqlColList: procedure expose m.
parse arg tb al, blobMax
    sd = sqlDescribeTable(tb)
    bs = ''
    lst = ''
    if al \== '' & right(al, 1) \== '.' then
        al = al'.'
    do sx=1 to m.sd.sqld
        if wordPos(m.sd.sx.sqlType, '404 405 408 409 412 413') < 1 then
            lst = lst',' al || m.sd.sx.sqlName
        else do
            bs = bs m.sd.sx.sqlName
            if blobMax >= 0 then
                lst = lst', length('al || m.sd.sx.sqlName')' ,
                                          m.sd.sx.sqlName'Len' ,
                     || ', substr('al  || m.sd.sx.sqlName ,
                     || ', 1,' blobMax')' m.sd.sx.sqlName
            end
        end
    m.sd.colList = substr(lst, 3)
    m.sd.blobs = strip(bs)
    return substr(lst, 3)
endProcedure sqlColList

/*--- put sqlNull in all vars where indicator says so ---------------*/
sqlSetNull: procedure expose m.
    parse arg cx, dst
    do nx=1 to m.sql.cx.sqlNull.0
        col = m.sql.cx.sqlNull.nx
        if m.dst.col.sqlInd < 0 then
            m.dst.col = m.sqlNull
        end
    return
endProcedure sqlSetNull

/*--- use describe output to generate column names,
                fetchVariables and sqlNull names ---------------------*/
sqlFetchVars: procedure expose m.
parse arg cx
    if m.sql.cx.fetchVars \== '' then
        return m.sql.cx.fetchVars
    f = m.sql.cx.type
    m.sql.cx.sqlNull.0 = 0
    if abbrev(f, ':') then
        return mPut(sql.cx.fetchVars, f)
    call sqlDescribeOutput cx
    if f \== '' then do
        f = class4Name(f)
        m.sql.cx.type = f
        f = oClaMet(f, 'oFlds')
        if m.f.0 < m.sql.cx.d.sqlD then
            call err 'not enough column names'
        end
    m.sql.cx.col.0 = m.sql.cx.d.sqlD
    nx = 0
    vars = ''
    do kx=1 to m.sql.cx.d.sqlD
        cn = sqlVarName(f, kx, m.sql.cx.d.kx.sqlName)
        m.sql.cx.col.kx = cn
        m.sql.cx.col2kx.cn = kx
        vars = vars', :m.dst.'cn
        if m.sql.cx.d.kx.sqlType // 2 = 1 then do
            vars = vars' :m.dst.'cn'.sqlInd'
            nx = nx + 1
            m.sql.cx.sqlNull.nx = cn
            end
        end
    m.sql.cx.sqlNull.0 = nx
    m.sql.cx.fetchVars = substr(vars, 3)
    return m.sql.cx.fetchVars
endProcedure sqlFetchVars

sqlCol2kx: procedure expose m.
parse arg cx, nm
    call sqlFetchVars cx
    if symbol('M.SQL.CX.COL2KX.NM') \== 'VAR' then
        return ''
    kx = m.sql.cx.col2kx.nm
    if m.sql.cx.col.kx == nm then
        return kx
    drop m.sql.cx.col.kx
    return ''
endProcedure sqlCol2kx

sqlVarName: procedure expose m. sqlVarName.
parse arg f, kx, sNa
    if f == '' then do
        cx = verifId(sNa)
        if cx > 0 then /* avoid bad characters for classNew| */
           sNa = left(sNa, cx-1)
        upper sNa
        if sNa == '' | symbol('sqlVarName.sNa') == 'VAR' then
                sNa = 'COL'kx
        sqlVarName.sNa = 1
        return sNa
        end
    else do
        if m.f.kx == '' then
            call err 'implement empty varName'
        return substr(m.f.kx, 2)
        end
endProcedure sqlVarName

/*--- set one value in a DA, handle nulls ----------------------------*/
sqlDASet: procedure expose m.
parse arg cx, da, ix, val
    m.sql.cx.da.ix.sqlData = val
    m.sql.cx.da.ix.sqlInd = - (val == m.sqlNull)
    /* data types schienen einmal nicht zu funktionieren .......
    if wordPos(m.da.ix.sqlType, '384 385 388 389 392 393') > 0 then
        m.da.ix.sqlType = 448 + (m.da.ix.sqlType // 2) */
    return
endProcedure sqlDASet

sqlExImm:
parse arg ggSrc, ggRetOk
     return sqlExec('execute immediate :ggSrc', ggRetOk)
endProcedure sqlExImm

sqlCommit: procedure expose m.
parse arg src
     return sqlExec('commit')
endProcedure sqlCommit

/*--- execute sql thru the dsnRexx interface -------------------------*/
sqlExec: /* no procedure, to keep variables sql... */
    parse arg ggSqlStmt, ggRetOk
    m.sql.sqlHaHi = ''
    address dsnRexx 'execSql' ggSqlStmt
    /* say 'sqlCode' sqlCode 'rc' rc 'for' ggSqlStmt ggNo */
    if rc = 0 then
        return 0
    interpret sqlErrorHandler(rc, ggRetOk, ggSqlStmt)
endProcedure sqlExec

sqlErrorHandler: procedure expose m. ,
                   sqlCode sqlErrMc sqlErrP sqlErrD. sqlWarn. sqlState
parse arg drC, retOk, verb rest
    if drC == 0 then
        return 'return 0'
    if wordPos(drC, '1 -1') < 0 then
        return "call err 'dsnRexx rc" drC"' sqlmsg()"
    if pos('-', retOK) < 1 then
        retOK = retOk m.sqlRetOk
    if pos('*', retOK) > 0 | wordPos(sqlCode, retOK) > 0 then do
        if sqlCode < 0 & pos('say', retOK) > 0 then
            return "call outSt errMsg(' }'sqlMsg()); return" sqlCode
        else
            return "return" sqlCode
        end
    upper verb
    if verb == 'DROP' then do
        if (sqlCode == -204 | sqlCode == -458) ,
                       & wordPos('dne', retok) > 0 then
            return 'return' sqlCode
        if sqlCode = -672 & verb=='DROP' ,
               & wordPos('rod', retok) > 1 then do
            hahi = m.sql.sqlHaHi ,
                 || sqlMsgLine(sqlCode, 'tb='sqlErrMc ,verb rest)'\n'
            call sqlExec 'alter table' SqlErrMc ,
                    'drop restrict on drop'
            hahi = hahi || m.sql.sqlHaHi ,
                        || sqlMsgLine(sqlCode, , ggSqlStmt)'\n'
            call sqlExec verb rest
            m.sql.sqlHaHi = hahi
            return 'return' sqlCode
            end
        end
    if drC < 0 then
         return "call err sqlmsg(); return" sqlCode
    if (sqlCode <> 0 | sqlWarn.0 ^==' ') & pos('w',retOK) < 1 then
        return "call outSt errMsg(' }'sqlMsg()); return" sqlCode
    return 'return' sqlCode
endProcedure sqlErrorHandler

sqlMsgLine: procedure expose m. sqlErrD.
parse arg res, cnt, src, plus
    verb = translate(word(src, 1))
    if datatype(res, 'n') then
        res = 'sqlCode' res
    if cnt \== '' then do
        res = res',' cnt
        vx = wordPos(translate(word(src,1)), 'DELETE INSERT UPDATE')
        if datatype(cnt, 'n') then
            if vx > 0 then
               res = res 'rows' word('deleted inserted updated', vx)
            else if cnt <> 0 then
                res = res 'rows updated'
        end
    if plus \== '' then
        res = res',' plus
    if abbrev(res, ', ') then
        res = substr(res, 3)
    if src \== '' then do
        ll = 75 - length(res)
        aa = strip(src)
        if length(aa) > ll then
            aa = space(aa, 1)
        if length(aa) > ll then
           aa = left(aa,  ll-3)'...'
        res = res':' aa
        end
    return res
endProcedure sqlMsgLine

/*--- send a command to db2 through the TSO dsn processor ------------*/
sqlDsn: procedure expose m.
parse arg st, sys, cmd, rcOk
    x = outtrap('M.'st'.')
    push 'END'
    push cmd
    address tso 'DSN SYSTEM('sys')'
    rr = rc
    x = outtrap(off)
    if rr = 0 | rcOk = '*' | wordPos(rr, rcOk) > 0 then
        return rr
    fl = max(1, m.st.0 - 10)
    em = 'rc' rr 'for DSN SYSTEM('sys') cmd' cmd,
          '\nOuputlines' fl '-' m.st.0':'
    do lx=fl to m.st.0
        em = em '\n' strip(m.st.lx, 't')
        end
    call err em
endProcedure sqlDsn
/*--- issue an sql error message -------------------------------------*/
sqlMsg: /* no procedure, to keep variables sql... */
    if \ dataType(sqlCode, 'n') then do
        ggRes = 'sqlCode' sqlCode 'not numeric\n'sqlCaMsg()
        end
    else do
        ggRes = sqlDsntiar(sql2CA())
        ggWa = sqlMsgWarn()
        if ggWa \= '' then
            ggRes = ggRes'\nwarnings' ggWa
        if m.sqlCAMsg == 1 then
           ggRes = ggRes'\n'sqlCaMsg()'\n'sqlCaMsg(sqlCa2Rx(sqlCa))
        end
    ggSt = 'SQL.HOST'
    ggVa = 'SQL.HOST.VAR'
    ggBe = 'SQL.HOST.BEF'
    call sqlHostVars ggSqlStmt, 12, ggSt
    ggFrom = 'ggSqlStmt'
    ggW1 = translate(word(ggSqlStmt, 1))
    ggW2 = translate(word(ggSqlStmt, 2))
    if ggW1 == 'PREPARE' then
        ggFrom = sqlHostVarFind(ggSt, 'FROM')
    else if ggW1 ggW2 == 'EXECUTE IMMEDIATE' then
        ggFrom = sqlHostVarFind(ggSt, 1)
    ggPos = 0
    if datatype(sqlErrd.5, 'n') & sqlErrd.5 > 0 then do
        ggPos = sqlErrd.5
        ggRes = ggRes || sqlMsgSrcPos(value(ggFrom), sqlErrd.5)
        end
    if ggFrom == 'ggSqlStmt' then do
        ggRes = ggRes'\nsql =' sqlShorten(ggSqlStmt, 2000, ggPos)
        end
    else do
        ggRes = ggRes'\nsql =' sqlShorten(value(ggFrom), 2000, ggPos)
        ggRes = ggRes'\nstmt =' sqlShorten(ggSqlStmt, 2000)
        end
    ggPref = '\nwith'
    do ggXX=1 to m.ggSt.0
        if ggFrom = m.ggVa.ggXX then
            iterate
        ggRes = ggRes || ggPref m.ggBe.ggXX ':'m.ggVa.ggXX ,
                      '=' sqlShorten(value(m.ggVa.ggXX), 210)
        ggPref = '\n    '
        end
    if m.sqlSuMsg == 1 | (m.sqlSuMsg == 2 & m.sql.conHost \== '') then
        ggRes = ggRes'\nsubsys =' m.sql.conDbSys ,
             || ', host =' m.sql.conHost', interfaceType' m.sql.conType
    return  ggRes
endSubroutine sqlMsg

sqlShorten: procedure expose m.
parse arg txt, maxL, pos
    if length(txt) <= maxL then
        return txt
    if \ datatype(pos, 'n') | pos < 1 then
        pos = 1
    ex = pos + min(60, maxL%7)
    if ex <= maxL - 4 then
        return left(txt, maxL-4) '...'
    if ex >= length(txt) then
        return left(txt, 67) '...\n'substr(txt, length(txt)-maxL+72)
    else
        return left(txt, 67) '...\n'substr(txt, ex-maxL+76, maxL-75) ,
                       '...'
endProcedure sqlShorten
/*--- use dsnTiar to translate sql Info to error text ----------------*/
sqlDsnTiar: procedure expose m.
parse arg ca
    if -438  = sqlCa2Rx(ca) then
        return '\nSQLCODE = -438:',
           'APPLICATION RAISED ERROR WITH sqlState' sqlState ,
           'and DIAGNOSTIC TEXT:' sqlErrMc
    liLe = 78
    msLe = liLe * 10
    msg = d2c(msLe,2) || left('', msLe)
    len = d2c(liLe, 4)
    ADDRESS LINKPGM "DSNTIAR ca msg len"
    if rc = 0      then nop
    else if rc = 4 then say 'warn linkPgm dsnTiar rc' rc 'sqlCa' ca
    else                call err 'linkPgm dsnTiar rc' rc 'sqlCa' ca
    res = strip(substr(msg, 13, liLe-10))
    cx = pos(', ERROR: ', res)
    if cx > 0 then
        res = left(res, cx-1)':' strip(substr(res, cx+9))
    do c=3+liLe by liLe to msLe while substr(msg, c, 10) = ''
            res = res'\n    'strip(substr(msg, c+10, liLe-10))
        end
    return res
endProcedure sqlDsnTiar

/*--- format all rexx sqlCa fields into a message --------------------*/
sqlCaMsg:
    return 'sqlCode' sqlCode 'sqlState='sqlState                    ,
           '\n    errMC='translate(sqlErrMc, ',', 'ff'x)            ,
           '\n    warnings='sqlWarnCat('+') 'erP='sqlErrP           ,
           '\n    errD.1='sqlErrD.1 '2='sqlErrD.2 '3='sqlErrD.3     ,
           '\n    errD.4='sqlErrD.4 '5='sqlErrD.5 '6='sqlErrD.6
endProcedure sqlCaMsg

/*--- format the sqlCA into the dsnTiar SQLCA ------------------------*/
sql2Ca: procedure expose m. ,
                   sqlCode sqlErrMc sqlErrP sqlErrD. sqlWarn. sqlState
    if \ (datatype(sqlcode, 'n') & datatype(sqlErrD.1, 'n') ,
                                 & datatype(sqlErrD.3, 'n')) then
        return err('sqlCode etc. not numeric\nsqlCa =' sqlCaMsg())
    if digits() < 10 then
        numeric digits 10
    sqlCa = 'SQLCA   ' || d2c(136, 4) || d2c(sqlCode, 4) ,
            || d2c(min(70, length(sqlErrMc)), 2)left(sqlErrMc, 70) ,
            || left(sqlErrP, 8) ,
            || d2c(sqlErrD.1, 4)d2c(sqlErrD.2, 4)d2c(sqlErrD.3, 4) ,
            || d2c(sqlErrD.4, 4)d2c(sqlErrD.5, 4)d2c(sqlErrD.6, 4) ,
            || sqlWarnCat() || sqlState
    if length(sqlCa) <> 136 then
        call err 'sqlCa length' length(sqlCa) 'not 136' ,
                 '\n'sqlCaMsg() '==>'  ca', hex='c2x(ca)
    return sqlCa
endProcedure sql2Ca

/*--- extract the fields from the SqlCA and put it to rexx vars ------*/
sqlCA2Rx: procedure expose m. ,
       sqlCode sqlErrMc sqlErrP sqlErrD. sqlWarn. sqlState
parse arg ca
    numeric digits 10
    if length(ca) < 136 | c2d(substr(ca, 9, 4), 4) <> 136 then
        call err 'bad sqlCa len' length(ca) 'not 136:' ca', hex='c2x(ca)
    sqlCode  = c2d(substr(ca, 13 ,4), 4)
    sqlErrMC = substr(ca, 19, c2d(substr(ca, 17, 2), 2))
    sqlErrP  = substr(ca, 89, 8)
    do ix=1 to 6
        sqlErrD.ix = c2d(substr(ca, 93 + 4 * ix, 4), 4)
        end
    do ix=0 to 10
        sqlWarn.ix = substr(ca, 121 + ix, 1)
        end
    sqlState = substr(ca, 132, 5)
    return sqlCode
endProcedure sqlCA2Rx

/*--- concat the sql warnings with Separator sep --------------------*/
sqlWarnCat: procedure expose m. sqlWarn.
parse arg sep
    return sqlWarn.0 || sep,
        || sqlWarn.1||sqlWarn.2||sqlWarn.3||sqlWarn.4||sqlWarn.5||sep ,
        || sqlWarn.6||sqlWarn.7||sqlWarn.8||sqlWarn.9||sqlWarn.10||sep
endProcedure sqlWarnCat

/*--- make the text for sqlWarnings ----------------------------------*/
sqlMsgWarn: procedure expose m. sqlWarn.
     r = ''
     text =' 1=W var truncated, 1=S scrollable, 1=N nonScrollable,'  ,
            '2=W nulls in aggregate,'                                ,
            '3=W more cols than vars,'                               ,
                             '3=Z more result sets than locators,'   ,
            '4=W no where, 4=D sensitive dynamic, 4=I insensitive,'  ,
                          '4=S sensitive static,'                    ,
            '5=W not valid sql, 5=1 readOnly, 5=2 readDelete,'       ,
                          '5=3 readDeleteUpdate,'                    ,
            '6=W day changed to month range,'                        ,
            '7=W dec digits truncated,'                              ,
            '8=W char substituted,'                                  ,
            '9=W arith excep in count, 9=Z multipe result sets,'     ,
            '10=W char conversion err in ca,'
     do wx = 1 to 10
         w = sqlWarn.wx
         if w = ' ' then
             iterate
         t = wx'='w
         cx = pos(' 'wx'='w' ', text)
         ex = pos(','         , text, cx + 1)
         if cx > 0 & ex > cx then
             r = r substr(text, cx+1, ex-cx)
         else
             r = r wx'='w '?,'
         end
     r = strip(r, 't', ',')
     if r = '' & sqlwarn.0 <> '' then
        call err 'sqlWarn.0='sqlWarn.0 'but all warns empty'
     return r
endProcedure sqlMsgWarn

/*--- show in the source src the point pos  (where error occured)
          a few lines from src around pos and arrow to pos ----------*/
sqlMsgSrcPos: procedure expose m.
parse arg src, pos
    liLe = 68
    liCn = 3
    afLe = 25
    t1 = space(left(src, pos), 1)
    t2 = left(' ', substr(src, pos, 1) == ' ' ,
                 | substr(src, pos+1, 1) == ' ') ,
         || space(substr(src, pos+1), 1)
    afLe = min(afLe, length(t2))
    if length(t1) + afLe > liLe * liCn then
        t1 = '...'right(t1, liLe * liCn - afLe -3)
    else if length(t1)+length(t2) > liLe then
        t1 = left(' ', (liCn * liLe - length(t1) -afLe) // liLe)||t1
    pL = length(t1) // liLe
    if length(t2) <= liLe-pL then
        tx = t1 || t2
    else
        tx = t1 || left(t2, liLe-pL-3)'...'
    res = '\nsrc' strip(substr(tx, 1, liLe), 't')
    do cx=1+liLe by liLe to length(tx)
        res = res || '\n  +' strip(substr(tx, cx, liLe), 't')
        end
    loc = 'pos' pos 'of' length(src)
    if length(loc)+6 < pL then
        return res'\n  >' right('>>>'loc'>>>', pL)
    else
        return res'\n  >' left('', pL-1)'<<<'loc'<<<'
endProcdedure sqlMsgSrcPos

/*--- get the hostVars in the sql in src and the word before ---------*/
sqlHostVars: procedure expose m.
parse arg src, cnt, st
    cx = 1
    sx = 1
    do cnt
        cx = pos(':', src, cx) + 1
        if cx < 2 then
           leave
        if pos(substr(src, cx, 1), m.ut.alfRexN1) > 0 then
            iterate
        ex = verify(src, m.ut.alfRex, 'n', cx)
        if ex < 1 then
            m.st.var.sx = substr(src, cx)
        else
            m.st.var.sx = substr(src, cx, ex - cx)
        if m.st.var.sx == '' | length(m.st.var.sx) > 100 then
            iterate
                       /* search word before */
        do bE = cx-2 by -1 to 1 ,
                while substr(src, bE, 1) == ' '
            end
        do bB = bE by -1 to max(1, bE-20),
                while pos(substr(src, bB, 1), m.ut.alfa) > 0
            end
        if bB < bE & bB >= 0 then
            m.st.bef.sx = substr(src, bB+1, bE-bB)
        else
            m.st.bef.sx = ''
        sx = sx + 1
        end
    m.st.0 = sx-1
    return sx
endProcedure sqlHostVars

/*--- find the name of hostvar, by index or by before ----------------*/
sqlHostVarFind: procedure expose m.
parse arg st, fnd
    if datatype(fnd, 'n') & fnd <= m.st.0 then
        return m.st.var.fnd
    do ix=1 to m.st.0
        if translate(m.st.bef.ix) = fnd then
            return m.st.var.ix
        end
    return ''
endSubroutine sqlHostVarFind
/* copy SQL  end   **************************************************/
/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
    parse arg ggTsoCmd, ggRet
    address tso ggTsoCmd
    if rc == 0                     then return 0
    else if ggRet == '*'           then return rc
    else if wordPos(rc, ggRet) > 0 then return rc
    else
        call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */

/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure expose m.
parse upper arg dsn ., addPrefix
    if left(dsn,1) = "'" then
        return strip(dsn, 'b', "'")
    sp = sysvar('SYSPREF')
    if sp == '' then
        sp = userid()
    cx = pos('~', dsn)
    if cx < 1 & addPrefix == 1 then
        return sp'.'dsn
    do while cx \== 0
        le = left(dsn, cx-1)
        ri = substr(dsn, cx+1)
        if right(le, 1) == '.' | left(ri, 1) == '.' then
            dsn = le || sp || ri
        else
            dsn = le || left('.', le \== '') || sp ,
                     || left('.', ri \== '') || ri
        cx = pos('~', spec, cx)
        end
    return dsn
endProcedure dsn2Jcl

/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure expose m.
parse arg dsn .
    return "'"dsn"'"
endProcedure jcl2dsn

dsnSetMbr: procedure expose m.
parse arg dsn, mbr
     bx = pos('(', dsn)
     if bx > 0 then
         dsn = strip(left(dsn, bx-1))
     if mbr <> '' then
         dsn = dsn'('strip(mbr)')'
     return dsn
endProcedure dsnSetMbr

dsnGetMbr: procedure expose m.
parse arg dsn
     lx = pos('(', dsn)
     rx = pos(')', dsn, lx+1)
     if lx < 1 then
         return ''
     else if lx < rx then
         return substr(dsn, lx+1, rx-lx-1)
     else
         return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
    io: read or write a dataset with the following callsequences:
        read:  tsoOpen...'R', readDD*,  tsoClose
        write: tsoOpen...'W', writeDD*, tsoClose

        readDD returns true if data read, false at eof
        do not forget that open is mandatory to write empty file|
***********************************************************************/

/*--- open dd for read (rw='R') or write (rw='W') --------------------*/
tsoOpen: procedure expose m.
parse upper arg dd, rw
    return adrTso('execio' 0 'disk'RW tsoDD(dd, 'o') '(open)')
return /* end tsoOpen */

/*--- close dd -----------------------------------------------------*/
tsoClose: procedure expose m.
    parse upper arg dd
    return adrTso('execio 0 diskW' dd '(finis)')
endProcedure tsoClose

/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt = '' then
        ggCnt = 100
    call adrTso 'execio' ggCnt 'diskR' ggDD '(stem' ggSt')', 2
    return (value(ggSt'0') > 0)
return /* end readDD */

/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    call adrTso 'execio' ggCnt 'diskW' ggDD '(stem' ggSt')'
    return
endSubroutine writeDD

/*--- readNx: read next line, using buffer ---------------------------*/
/*--- begin: allocate dsnSpec and ini ------------------------ -------*/
readNxBegin: procedure expose m.
    parse arg m, m.m.dsn, m.m.dd, m.m.Cnt
    if m.m.dd = '' then
        m.m.dd = 'DDNX*'
    if m.m.cnt = '' then
        m.m.cnt = 1000
    m.m.cx = m.m.cnt + 999
    m.m.buf0x = 0
    m.m.0 = 0
    parse value dsnAlloc('dd('m.m.dd')' m.m.dsn) with m.m.dd m.m.free
    call tsoOpen m.m.dd, 'R'
    return m
endProcedure readDDNxBegin

/*--- return the stem of the next line, or '' at end -----------------*/
readNx: procedure expose m.
parse arg m
    m.m.cx = m.m.cx + 1
    if m.m.cx <= m.m.0 then
        return m'.'m.m.cx
    m.m.buf0x = m.m.buf0x + m.m.0
    if \ readDD(m.m.dd, 'M.'m'.', m.m.cnt)then
        return ''
    m.m.cx = 1
    return m'.1'
endProcedure readDDNx
/*--- return the stem of the curr line, '' at end --------------------*/
readNxCur: procedure expose m.
parse arg m
    if m.m.cx <= m.m.0 then
        return m'.'m.m.cx
    else
        return ''
endProcedure readNxCur

/*--- return the position (line number) of reader
           plus le characters of the current line (default 50) ------*/
readnxPos: procedure expose m.
parse arg m, le
    li = m'.'m.m.cx
    li = strip(m.li, 't')
    if arg() < 2 then
        le = 50
    if le < 1 then
        li = ''
    else if length(li) <= le then
        li = ':' li
    else
        li = ':' left(li, le-3)'...'
    return 'line' (m.m.buf0x + m.m.cx)li
endProcedure readnxPos

/*--- close and deallocate ------------------------------------------*/
readNxEnd: procedure expose m.
parse arg m
    call tsoClose m.m.dd
    call tsoFree m.m.free
    return
endProcedure readDDNxEnd

/*--- standardise a dsn spec
       word1             dsName or -
       word2             dd     or -
       word3             disp   or -
       word4 to first :  attributes in tso format
       after first :     attributes for new allocation
----------------------------------------------------------------------*/
dsnSpec: procedure expose m.
parse upper arg spec
    rr = ''      /* put leading - in separate words */
    do sx=1 while words(rr) < 3 & wx \= ''
        wx = word(spec, sx)
        do while abbrev(wx, '-') & words(rr) < 3
            wx = substr(wx, 2)
            rr = rr '-'
            end
        rr = rr wx
        end
    spec = rr subWord(spec, sx)
    na = ''
    dd = ''
    di = ''
    if left(spec, 1) = '&' then /* external spec is handled ok */
        spec = strip(substr(spec, 2))
    do wx=1 by 1
        w = word(spec, wx)
        if w = '' | abbrev(w, '.') | abbrev(w, ':') then
            leave
        else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
            di = w
        else if w = 'CATALOG' then
            di = di w
        else if abbrev(w, 'DD(') then
            dd = substr(w, 4, length(w)-4)
        else if abbrev(w, 'DSN(') then
            na = strip(substr(w, 5, length(w)-5))
        else if na == '' then
            na = dsn2jcl(w)
        else if pos('(', w) > 0 then
            leave
        else if dd == '' then
            dd = w
        else if di == '' then
            di = w
        else
            leave
        end
    if na == '' then
        na = '-'
    else if abbrev(na, "'") then
        na = substr(na, 2, length(na)-2)
    if dd == '' then dd = '-'
    if di == '' then di = '-'
    re = subword(spec, wx)
    if abbrev(re, '.') then
        re = substr(re, 2)
    return na dd di re
endProcedure dsnSpec

/*--- alloc a dsn with dsnAlloc
          if the dsn is inuse wait and retry
          until either the allocation is successfull
          or the timeout occurs --------------------------------------*/
dsnAllocWait: procedure expose m.
parse upper arg spec, pDi, pDD, timeOut
    x = max(1, arg() - 1)
    do rt=0
        m.adrTsoAl.1 = ''
        m.adrTsoAl.2 = ''
        m.adrTsoAl.3 = ''
        call outtrap m.adrTsoAl.
        res = dsnAlloc(spec, pDi, pDD, '*')
        call outtrap off
        if \ datatype(res, 'n') then
            return res
        msg = m.adrTsoAl.1'\n'm.adrTsoAl.2'\n'm.adrTsoAl.3
        if rt > timeOut & timeOut \== '' then
            return err('timeout allocating' spec time() '\n'msg)
        if pos('DATA SET IS ALLOCATED TO ANOTHER', msg) < 1 then
            return err('allocating' spec'\n'msg)
        say time() 'sleep and retry alloc' spec
        call sleep 1, 0
        end
endProcedure dsnAllocWait

/*--- alloc a dsn or a dd
          spec '-'<ddName>
               datasetName? disposition? '.'? attributes? (':' newAtts)?
          disp default disposition
          dd   default dd name
          retRc   erlaubte ReturnCodes (leer = 0)
          returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, pDi, pDD, retRc
    parse value dsnSpec(spec) with na dd di rest
    if na = '-' then
        m.dsnAlloc.dsn = ''
    else
        m.dsnAlloc.dsn = na
    if dd == '-' & pDD \== '' then
        dd = pDD
    if dd == '-' then
        dd = 'DD*'
    dd = tsoDD(dd, 'a')
    if na == '-' & di == '-' & rest = '' then
        return dd
    if di = '-' then
        if pDi == '' then
            di = 'SHR'
        else
            di = pDi
    if pos('(', na) < 1 then
        nop
    else if di = 'MOD' then
        call err 'disp mod for' na
    else
        di = 'SHR'
    if pos('/', na) > 0 then
        rx = csmAlloc(na dd di rest, retRc)
    else
        rx = tsoAlloc(na dd di rest, retRc)
    if rx = 0 then
        return dd dd
    else
        return rx
endProcedure dsnAlloc

/*--- find a free dd with prefix dd ----------------------------------*/
tsoDD: procedure expose m.
parse arg dd, f
    if symbol('m.tso.ddAlloc') \== 'VAR' then do
        call errIni
        m.tso.ddAlloc = ''
        m.tso.ddOpen  = ''
        end
    if m.err.ispf then
        address ispExec 'vget wshTsoDD shared'
    else
        wshTsoDD = m.tso.ddAlloc
    if f == '-' then do
        ax = wordPos(dd, m.tso.ddAlloc)
        if ax > 0 then
            m.tso.ddAlloc = delWord(m.tso.ddAlloc, ax, 1)
        ox = wordPos(dd, m.tso.ddOpen)
        if ox > 0 then
            m.tso.ddOpen  = delWord(m.tso.ddOpen , ox, 1)
        if ax < 1 & ox < 1 then
            call err 'tsoDD dd' dd 'not used' m.tso.ddAlloc m.tso.ddOpen
        sx = wordPos(dd, wshTsoDD)
        if sx > 0 then
            wshTsoDD  = delWord(wshTsoDD , sx, 1)
        end
    else if f == 'o' then do
        if wordPos(dd, m.tso.ddOpen m.tso.ddAlloc) < 1 then
            m.tso.ddOpen = strip(m.tso.ddOpen dd)
        end
    else if f <> 'a' then do
        call err 'tsoDD bad fun' f
        end
    else do
        if right(dd, 1) = '*' then do
            dd = left(dd, length(dd)-1) || m.err.screen
            cx = lastPos(' 'dd, ' 'm.tso.ddAlloc)
            if cx > 0 then do
                old = word(substr(m.tso.ddAlloc, cx), 1)
                if old = dd then
                    dd = dd'1'
                else if datatype(substr(old, length(dd)+1), 'n') then
                    dd = dd || (substr(old, length(dd)+1) + 1)
                else
                    call err 'tsoDD old' old 'suffix not numeric dd' dd
                end
            end
        if wordPos(dd, m.tso.ddAlloc) < 1 then
            m.tso.ddAlloc = strip(m.tso.ddAlloc dd)
        if wordPos(dd, wshTsoDD) < 1 then
            wshTsoDD = strip(wshTsoDD dd)
        end
    if m.err.ispf then
        address ispExec 'vPut wshTsoDD shared'
    return dd
endProcedure tsoDD

tsoAlloc: procedure expose m.
parse arg na dd disp rest ':' nn, retRc
    c = 'alloc dd('dd')' disp
    if na \== '-' then
        c = c "DSN('"na"')"
    else if disp = 'NEW' and nn \== '' then
        c = c dsnCreateAtts(,nn)
    call outtrap m.adrTsoAl.
    alRc = adrTso(c rest, '*')
    call outtrap off
    if alRc =  0 then
        return 0
    if nn \= '' & wordPos(disp, 'OLD SHR') > 0 ,
          & sysDsn("'"m.dsnAlloc.dsn"'") == 'DATASET NOT FOUND' then do
        say 'tsoAlloc creating' c rest ':'nn
        call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(na, nn)
        call adrTso 'free  dd('dd')'
        return tsoAlloc(na dd disp rest, retRc)
        end
    say 'rc='alRc 'for' c rest
    call saySt adrTsoal
    if retRc = '*' | wordPos(alRc, retRc) > 0 then
        return alRc
    call err 'tsoAlloc rc' alRc 'for' c rest
endProcedure tsoAlloc

tsoAtts: procedure expose m.
parse arg dsn
    rc = listDsi("'"dsn"' SMSINFO")
    if rc = 0 then
        mv = ''
    else if rc = 4 & sysReason = 19 then do
        mv = 'UCOUNT(30)' /* 7.8.13 corrected attribute */
        say 'creating' dsn 'with multi volume' mv
        end
    else if rc ^= 0 then
        call err 'listDsi rc' rc 'reason' sysReason,
                             sysMsgLvl1 sysMsgLvl2
    al = 'CAT'
    al = ''
    if right(sysDsSms, 7) == 'LIBRARY' ,
        | abbrev(sysDsSms, 'PDS') then
         al = al 'DSNTYPE(LIBRARY)'
    if sysUnits = 'TRACK' then
        sysUnits = 'TRACKS'
    return al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
        "DATACLAS("sysDataClass")" ,
        "RECFM("translate('1 2 3', ' 'sysREcFM, ' 123')")",
        "LRECL("SYSLRECL")",
        "SPACE("sysPrimary"," sysSeconds")" sysUnits mv
    /*  "blksize("sysBLkSIZE")" removed 3.4.13: let sms do the magic */
endProcedure tsoAtts

tsoFree: procedure expose m.
parse arg ddList, ggRet
    do dx=1 to words(ddList)
        dd = word(ddList, dx)
        call adrTso 'free dd('dd')', ggRet
        call tsoDD dd, '-'
        end
    return
endProcedure tsoFree

tsoFreeAll: procedure expose m.
    all = m.tso.ddAlloc m.tso.ddOpen
    do ax = 1 to words(all)
        call adrTso 'execio 0 diskW' word(all, ax) '(finis)', '*'
        end
    m.tso.ddOpen = ''
    call tsoFree m.tso.ddAlloc, '*'
    return
endProcedure tsoFreeAll

dsnCreateAtts: procedure expose m.
parse arg dsn, atts, forCsm
    forCsm = forCsm == 1
    aU = ' 'translate(atts)
    res = ''
    if dsn \== '' then
        res = "dataset('"dsnSetMbr(dsn)"')"
    if abbrev(atts, '~') then
        return res tsoAtts(substr(atts, 2))
    if abbrev(atts, ':') then do
        parse var atts a1 atts
        rl = substr(a1, 3)
        if abbrev(a1, ':F') then do
            if rl = '' then
                rl = 80
            recfm='f b'
            end
        else do
            if rl = '' then
                rl = 32756
            recfm = substr(a1, 2, 1) 'b'
            end
        res =  res "recfm("space(recfm, 1-forCsm)") lrecl("rl")"
        end
    if pos('(', dsn) > 0 & pos(' DSNTYPE(', aU) < 1 ,
                         & pos(' DSORG(',   aU) < 1 then
        res = res 'dsntype(library) dsorg(po)'
    if pos(' MGMTCLAS(', aU) < 1 then
        res = res 'mgmtclas(COM#A091)'
    if pos(' SPACE(', aU) < 1 then
        res = res 'space(100, 500) cyl' || copies('inder', forCsm)
    return res atts
endProcedure dsnCreateAtts
/*--- check if a dataset is archive ------------------------------------
          returns 'ok'                    if dataset on disk
                  'not'                   if dataset is not catalogued
                  'arc'                   if dataset archived
                  listDsi errorMsg        otherwise ------------------*/
dsnArc: procedure expose m.
parse upper arg dsn
    lc = listDsi("'"strip(dsn)"' noRecall")
    if lc = 0 then
        return 'ok'
    else if lc=4 & sysReason = 19 then  /* multiple volumes */
        return 'ok'
    else if lc=16 & sysReason = 5 then
        return 'notCat'
    else if lc=16 & sysReason = 9 then
        return 'arc'
    else
        return 'listDsi cc='lc', sysReason='sysReason ,
                          'm2='sysMsgLvl2', m1='sysMsgLvl1
endProcedure dsnArc
/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
    ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
    call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
    call tsoFree word(ggAlloc, 2)
    return
endSubroutine readDsn

/*--- write the dataset specified in ggDsnSpec from stem ggSt
          write ggCnt records if not empty otherwise ggst0
          if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
    call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
            '(stem' ggSt 'open finis)'
    call tsoFree word(ggAlloc, 2)
    if ggSay == 1 | m.debug == 1 then
       say ggCnt 'records written to' ggDsnSpec
    return
endSubroutine writeDsn

copyDSN: procedure expose m.
parse arg frSpec, toSpec, ggSay
    parse value dsnAlloc(frSpec, 'SHR', 'FRDD') with frDD frFr
    parse value dsnAlloc(toSpec, 'OLD', 'TODD') with toDD toFr
    call tsoOpen frDD, 'R'
    call tsoOpen toDD, 'W'
    cnt = 0
    do while readDD(frDD, r.)
        call writeDD toDD, r.
        cnt = cnt + r.0
        end
    call tsoClose frDD
    call tsoClose toDD
    call tsoFree frFr toFr
    if ggSay == 1 | m.debug == 1 then
       say cnt 'records copied from' frSpec 'to' to toSpec
    return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
/* copy err begin *** errorhandling, messages, help    ****************/
errIni: procedure expose m.
    if m.err.ini == 1 then
        return
    call utIni
    m.err.ini     = 1
    m.err.handler = ''
    m.err.cleanup = ';'
    m.err.opt     = ''
    parse source m.err.os .
    m.err.ispf    = 0
    m.err.screen  = 0
    if m.err.os \== 'LINUX' then
        if sysVar('sysISPF') = 'ACTIVE' then do
            m.err.ispf = 1
            address ispExec 'vget zScreen shared'
            m.err.screen = zScreen
            end
    return
endProcedure errIni

/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
    call errIni
    parse arg m.err.opt, m.err.handler
    if pos('I', translate(m.err.opt)) > 0 & m.err.ispf then
        address ispExec 'control errors return'
    return
endSubroutine errReset

/*--- error routine: abend with message ------------------------------*/
err:
    parse arg ggTxt, ggOpt
    call errIni
    drop err handler cleanup opt call return
    if ggOpt == '' & m.err.handler \== '' then
        interpret m.err.handler
    call errSay 'f}'ggTxt
    call errCleanup
    if ggOpt == '' then
        ggOpt = m.err.opt
    upper ggOpt
    if pos('T', ggOpt) > 0  then do
        trace ?r
        say 'trace ?r in err'
        end
    if pos('H', ggOpt) > 0 & m.err.eCat == 'f' then do
        call errSay ' }errorhandler exiting with divide by zero' ,
                                   'to show stackHistory'
        x = 1 / 0
        end
    call errSay ' }errorhandler exiting with exit(12)'
    exit errSetRc(12)
endSubroutine err

/*--- set rc for ispf: -------------------------------------------------
    if a cmd is run by ispStart, its RC is ignored,
         but ISPF passes the value of the shared variable zIspfRc
         back as return code
----------------------------------------------------------------------*/
errSetRc: procedure expose m.
parse arg zIspfRc
    if m.err.ispf then
        address ispExec vput 'zIspfRc' shared
    return zIspfRc
endProcedure errSetRc

/*--- error routine: user message cleanup exit -----------------------*/
errAddCleanup: procedure expose m.
parse arg code
    call errIni
        /* concatenate backwards, then it is executed also backwards */
    m.err.cleanup = ';'code || m.err.cleanup
    return
endProcedure errAddCleanup

errRmCleanup: procedure expose m.
parse arg code
    call errIni
    cx = pos(';'code';', m.err.cleanup)
    if cx > 0 then
        m.err.cleanup = left(m.err.cleanup, cx) ,
                     || substr(m.err.cleanup, cx + length(code)+2)
    return
endProcedure errRmCleanup

errCleanup: procedure expose m.
    call errIni
    errCleanup = m.err.cleanup
    if errCleanup <> ';' then do
        m.err.cleanup = ';'
        say 'err cleanup begin' errCleanup
        interpret errCleanup
        say 'err cleanup end' errCleanup
        end
    if symbol('m.tso.ddAlloc') == 'VAR' then
        call tsoFreeAll
    return
endProcedure errCleanup

/*--- say an errorMessage msg with pref and linesplits --------------*/
errSay: procedure expose m.
parse arg msg
    return saySt(errMsg(msg))

/*--- prefix an errormessage with pref,
          split it into lines at \n to stem m.err -------------------*/
errMsg: procedure expose m.
parse arg msg
    m.err.eCat = 'f'
    do while substr(msg, 2, 1) == '}'
        parse var msg m.err.eCat '}' msg
        end
    res = msg
    if m.err.eCat <> '' then do
       pTxt = ',error,fatal error,input error,s-}scanErr,warning,'
 /*    pTxt = ',error,fatal error,input error,syntax error,warning,' */
       px = pos(','m.err.eCat, pTxt)
       if px < 1 then do
           m.err.eCat = 'f'
           px = pos(','m.err.eCat, pTxt)
           end
       res = substr(pTxt, px+1, pos(',', pTxt, px+2)-px-1)
       if substr(res, 3, 1) == '}' then
           parse var res 2 opt 3 br 4 res
       if opt == '-' then
           res = res msg
       else do
           parse source . . s3 .              /* current rexx */
           res = res 'in' s3':' msg
           end
       end
    return splitNl(err, res)           /* split lines at \n */
endProcedure errMsg

splitNL: procedure expose m.
parse arg st, msg
    bx = 1
    do lx=1 to 20
        ex = pos('\n', msg, bx)
        if ex < bx then
            leave
        m.st.lx = substr(msg, bx, ex-bx)
        bx = ex+2
        end
    m.st.lx = substr(msg, bx)
    m.st.0 = lx
    return st
endProcedure splitNL

/*--- say (part of) the lines of a stem ----------------------------*/
saySt: procedure expose m.
parse arg st, fx, tx
    do lx=word(fx 1, 1) to word(tx m.st.0, 1)
        say m.st.lx
        end
    return st
endProcedure saySt

/*--- out (part of) the lines of a stem ----------------------------*/
outSt: procedure expose m.
parse arg st, fx, tx
    do lx=word(fx 1, 1) to word(tx m.st.0, 1)
        call out m.st.lx
        end
    return st
endProcedure outSt

/*--- say a trace message if m.trace is set --------------------------*/
debug: procedure expose m.
parse arg msg
    if m.debug == 1 then
        say 'debug:' msg
    return
endProcedure debug

/*--- output a trace if m.trace is set -------------------------------*/
trc: procedure expose m.
parse arg msg
    if m.trace == 1 then
        call out 'trc:' msg
    return
endProcedure trc

/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
    interpret 'assertRes =' arg(1)
    if assertRes \==1 then
        call err 'assert failed' arg(1) '==>' assertRes':' arg(2)
    return
endProcedure assert

/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg
    call errSay 'i}'msg
    call help 0
    call err 'i}'msg
endProcedure errHelp

/*--- display the first comment block of the source as help ----------*/
help: procedure expose m.
parse arg doClear
    if doClear \== 0 then
        address tso 'clear'
    parse source . . s3 .
    say right(' help for rexx' s3, 72, '*')
    do lx=1 while pos('/*', sourceLine(lx)) < 1
        if lx > 10 then
            return err('initial commentblock not found for help')
        end
    doInc = 1
    ho = m.err.helpOpt
    do lx=lx+1 to sourceline() while pos('*/', sourceline(lx)) = 0
        li = strip(sourceLine(lx), 't')
        cx = lastPos('{', li)
        if cx > 0 then do
            if length(ho) = 1 then
                doInc = cx = length(li) | pos(ho, li, cx+1) > 0
            li = left(li, cx-1)
            end
        if doInc then
            say li
        end
    say right(' end help for rexx' s3, 72, '*')
    return 4
endProcedure help

/* copy err end   *****************************************************/
/* copy out begin ******************************************************
    out interface simple with say or stem m.out only
***********************************************************************/
outIni: procedure expose m.
    return outDst()

/*--- output a message to the current destination -------------------*/
out: procedure expose m.
parse arg msg
    if m.out.ini \== 1 then
        call outDst
    if m.out.say then
        say msg
    if m.out.out then do
        ox = m.out.0 + 1
        m.out.0 = ox
        m.out.ox = msg
        end
    return 0
endProcedure out

/*--- set a new out destination and return old one ------------------*/
outDst: procedure expose m.
parse arg d
    if m.out.ini == 1 then
        old = '-' || left('s', m.out.say) || left('o', m.out.out)
    else do
        m.out.ini = 1
        old = '-s'
        end
    m.out.say = d == '' |  pos('s', d) > 0
    m.out.out = verify(d, 'o0', 'm') > 0
    if pos('0', d) > 0 | \ datatype(m.out.0, 'n') then
        m.out.0 = 0
    return old
endProcedure outDst
      /* return the contents of a string or std input */
inp2str: procedure expose m.
    parse arg rdr, opt
    return rdr
endProcedure inp2str
/* copy out end   *****************************************************/
/* copy ut begin  *****************************************************/
utIni: procedure expose m.
    if m.ut.ini == 1 then
        return
    m.ut.ini = 1
    m.ut.digits = '0123456789'
    m.ut.alfLC  = 'abcdefghijklmnopqrstuvwxyz'
    m.ut.alfUC  = translate(m.ut.alfLc)
    m.ut.Alfa   = m.ut.alfLc || m.ut.alfUC
    m.ut.alfNum = m.ut.alfa || m.ut.digits
    m.ut.alfDot = m.ut.alfNum || '.'
    m.ut.alfId  = m.ut.alfNum'_' /* avoid rexx allowed @ # $ ¬ . | ? */
    m.ut.alfIdN1 = m.ut.digits    /* not as first character */
    m.ut.alfRex  = m.ut.Alfa'.0123456789@#$?' /* charset puff mit ¬*/
    m.ut.alfRexN1= '.0123456789'
    m.ut.alfPrint = m.ut.alfNum'+-*/=()¢!{}<> .:,;?|''"%&#@$£\_'
    return
endProcedure utIni
/*--- if function  warning all3 arguments get evaluated|
                   e.g if(x=0, 'infinity', 1/0) will fail| -----------*/
if: procedure expose m.
parse arg co, ifTrue, ifFalse
    if co then
        return ifTrue
    else
        return ifFalse
endProcedure if
/*--- embedded ASSignement:
      assign the second argument to the variable with name in first arg
      and return the value assigned ----------------------------------*/
ass:
    call value arg(1), arg(2)
    return arg(2)
/*--- embedded ASSignement return NotNull:
      assign the second argument to the variable with name in first arg
      and return 1 if value not null, 0 if null ----------------------*/
assNN:
    call value arg(1), arg(2)
    return arg(2) \== ''

/*--- return current time and cpu usage ------------------------------*/
utTime: procedure expose m.
    return time() 'ela='time('E') 'cpu='sysvar('syscpu'),
            'su='sysvar('syssrv')

tstUtTime: procedure expose m.
    say 'begin' utTime()  sysvar('sysnode')
    do 3000000
       end
    say 'end  ' utTime()
return

/*--- sleep several seconds ------------------------------------------*/
sleep: procedure expose m.
parse arg secs, sayIt
    if sayit <> 0 then
        say 'sleeping' secs 'secs' time()
    CALL SYSCALLS 'ON'
    ADDRESS SYSCALL "sleep" secs
    CALL SYSCALLS 'OFF'
    if sayit <> 0 then
        say 'slept' secs 'secs' time()
    return
endProcedure sleep

/*--- left without truncation ----------------------------------------*/
lefPad: procedure expose m
parse arg s, len
    if length(s) >= len then
        return s
    return left(s, len)
endProcedure lefPad

/*--- right without truncation ---------------------------------------*/
rigPad: procedure expose m
parse arg s, len
    if length(s) >= len then
        return s
    return right(s, len)
endProcedure rigPad

/*--- quote string txt using quoteChar qu ("" ==> ") -----------------*/
quote: procedure expose m.
parse arg txt, qu
    if qu = '' then
        qu = '"'
    res = qu
    ix = 1
    do forever
        qx = pos(qu, txt, ix)
        if qx = 0 then
            return res || substr(txt, ix) || qu
        res = res || substr(txt, ix, qx-ix) || qu || qu
        ix = qx + length(qu)
        end
endProcedure quote

/*--- translate to lowercase -----------------------------------------*/
ut2lc: procedure expose m.
parse arg s
    return translate(s, m.ut.alfLc, m.ut.alfUc)

/*--- verify an id ---------------------------------------------------*/
verifId: procedure expose m.
    parse arg src, extra
    if pos(left(src, 1), m.ut.alfIdN1) > 0 then
        return 1
    else
        return verify(src, m.ut.alfId || extra, 'n')

/*--- return the count of occurrences of needle in heyStack ----------*/
posCount: procedure expose m.
parse arg needle, hayStack, start, fin
    if start = '' then
        start = 1
    if fin = '' then
        fin = length(hayStack) + 1 - length(needle)
    do cnt = 0 by 1
        start = pos(needle, haystack, start)
        if start < 1 | start > fin then
             return cnt
        start = start + length(needle)
        end
endProcedure posCount

repAll: procedure expose m.
parse arg src
    do ax = 2 by 2 to arg()
        src = repAl2(src, src, arg(ax), arg(ax+1))
        end
    return src
endProcedure repAll

repAl2: procedure expose m.
parse arg src, sPos, old, new
    res = ''
    cx = 1
    do forever
        nx = pos(old, sPos, cx)
        if nx < 1 then
            return res || substr(src, cx)
        res = res || substr(src, cx, nx-cx) || new
        cx = nx + length(old)
        end
endProcedure repAl2

repAllWords: procedure expose m.
parse arg src, w, new
    res = ''
    wx = 0
    cx = 1
    do forever
        wx = wordPos(w, src, wx+1)
        if wx < 1 then
            return res || substr(src, cx)
        nx = wordindex(src, wx)
        res = res || substr(src, cx, nx-cx) || new
        cx = nx + length(w)
        end
endProcedure repAllWords
tstUtc2d: procedure expose m.
numeric digits 33
say c2d('ffffff'x)
say utc2d('ffffff'x)
say utc2d('01000000'x)    256*256*256
say utc2d('01000001'x)
say utc2d('020000FF'x)    256*256*256*2+255
say utc2d('03020000EF'x)    256*256*256*770+239
return
endProcedure tstUtc2d
utc2d: procedure expose m.
parse arg ch
    cx = length(ch) // 3
    if cx = 0 then
        cx = 3
    res = c2d(left(ch, cx))
    do cx=cx+1 by 3 to length(ch)
        res = res * 16777216 + c2d(substr(ch, cx, 3))
        end
    return res
/* copy ut end ********************************************************/
}¢--- A540769.WK.REXX.O13(BINDDB) cre=2013-11-04 mod=2013-11-04-12.26.09 A540769 ---
/* REXX ----------------------------------------------------------------
bindDB: bind Interface for DB2

synopsis: BINDDB DBP appl? pgm install?
                 RB  appl? pgm install?  rz?/dbSy?

functions:
  DBP: the parameters are completed (if necessary) and you view the
       output of bindCMN parameters in a temporary DSN

  RB:  the specified rebinds are generated (and executed?)

 4.10.13: Walter neu
---------------------------------------------------------------------*/
call errReset 'hi'
parse upper arg mFun mRest
if pos('?', mFun mRest) > 0 | mFun = '' then
     exit help()
if mFun == 'DBP' then
     call dbp mRest
else
    exit errHelp('i}bad args:' mFun mRest)
exit

dbp: procedure expose m.
parse arg args
    today = translate('78.56.1234', date('s'), '12345678')
    if words(args) = 1 then
        n = 'appl' args today
    else if words(args) = 2 & translate(word(args, 2),
              , '000000000', '123456789') = '00.00.0000' then
        n = 'appl' args
    else if words(args) = 2 then
        n = args today
    else
        n = args
    if args <> n then
       say 'arguments changed:' args '==>' n
    call dsnAlloc 'dd(dbp) new ::f'
    call bindcmn 'DBP' n
    call adrIsp "LMINIT DATAID(lmmId) ddName(dbp) ENQ(SHRW)"
    eRc = adrIsp("edit dataid("lmmId")", '*')
    lRc = adrIsp("LMFree DATAID("lmmId")", '*')
    call tsoFree dbp
    if (eRc \== 0 & eRc \== 4) | lRc \== 0 then
        call err m.m.editType 'rc' eRc', lmFree rc' lRc
    return
endProcedure dbp
/* copy adrIsp begin *************************************************/
/**********************************************************************
    lmd: catalog read
    call sequence: lmdBegin, lmdNext*, lmdEnd
        mit lmd service (mit save in file und read,
                         weil list zu langsam und listcat abstürzt)
        1. arg (grp)     als group dataset für lmd save
                         und dd name für file read
***********************************************************************/
lmdBegin: procedure expose m.
    parse arg grp, lev
    call adrIsp 'lmdinit listid(lmdId) level('lev')'
    res = adrIsp('lmdlist listid(&lmdId) option(save) group('grp')', 4)
    call adrIsp 'lmdfree listid(&lmdId)'
    if res = 0 then do
        call trc timing() 'lmdlist save' grp lev
        call adrTso 'alloc dd('grp') shr dsn('grp'.datasets)'
        end
    else do
        call trc 'no datasets found' timing() 'lmdlist save' grp lev
        call adrTso 'alloc dd('grp') dummy'
        end
    call tsoOpen grp, 'R'
return /* end lmdBegin */

lmdNext:
    parse arg ggGrp, ggSt, withVolume
    if \ readDD(ggGrp, ggSt) then
         return 0
    if withVolume \== 1 then
        do ggIx=1 to value(ggSt'0')
            x = value(ggSt || ggIx, word(value(ggSt || ggIx), 1))
            end
    return 1
endSubroutin lmdNext

lmdEnd: procedure expose m.
    parse arg grp
    call tsoClose grp
    call adrTso 'free dd('grp')'
return /* end lmdEnd */

lmd: procedure expose m.
    parse arg lev, withVol
    call lmdBegin gg1, lev
    do while lmdNext(gg1, q., withVol)
        do x=1 to q.0
           call out q.x
           end
        end
    call lmdEnd gg1
    return
endProcedure lmd
/**********************************************************************
    member list of a pds:
        call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmm: procedure expose m.
parse arg dsn
    id = lmmBegin(dsn)
    do ix=1 by 1
        m = lmmNext(id)
        if m = '' then
            leave
        call out m
        end
    call lmmEnd id
    return
endProcedure lmm

lmmBegin: procedure expose m.
parse arg dsn
    mbr = dsnGetMbr(dsn)
    pds = dsnSetMbr(dsn, )
    call adrIsp "LMINIT DATAID(lmmId) DATASET('"pds"') ENQ(SHRW)"
    call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
    res = lmmId
    if mbr <> '' then
        res = res 'pattern('mbr')'
    return res
endProcedure lmmBegin

lmmEnd: procedure expose m.
parse arg lmmId opt
    call adrIsp "LMMLIST DATAID("lmmId") option(free)", 8
    call adrIsp "LMCLOSE DATAID("lmmId")"
    call adrIsp "LMFREE DATAID("lmmId")"
    return
endProcedure lmmEnd

lmmNext: procedure expose m.
parse arg lmmId opt
    if adrIsp("LMMLIST DATAID("lmmid")" ,
               "OPTION(LIST) MEMBER(Mbr)" opt, 4 8) = 0 then
        return strip(mbr)
    else
        return ''
endProcedure lmmNext

lmmRm: procedure expose m.
parse arg dsn, mbrs
    mbrs = dsnGetMbr(dsn) mbrs
    pds = dsnSetMbr(dsn, )
    call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
    call adrIsp "LMOPEN DATAID("lmmId") OPTION(OUTPUT) "
    err = ''
    do wx=1 to words(mbrs)
        m1 = word(mbrs, wx)
        rr = adrIsp("lmmDel dataid("lmmId") member("m1")", 0 8 12)
        if rc = 0 then
            say 'removed' m1 'from' pds
        else if rc = 8 then
            say 'not found' m1 'in' pds
        else do
            err = 'error deleting' m1 'in' pds 'rc' rr strip(zerrlm)
            say err
            leave
            end
        end
    call adrIsp "LMCLOSE DATAID("lmmId")"
    call adrIsp "LMFREE DATAID("lmmId")"
    if err <> '' then
        call err err
    return
endProcedure lmmRm
/*--- address ispf with error checking -------------------------------*/
adrIsp:
    parse arg ggIspCmd, ggRet
    address ispexec ggIspCmd
    if rc = 0 then return 0
    else if ggRet == '*' then return rc
    else if wordPOS(rc, ggRet) > 0 then return rc
    else
        call err 'adr ispExec rc' rc 'in' ggIspCmd':' strip(zerrlm)
endSubroutine adrIsp

/*--- address editor with error checking -----------------------------*/
adrEdit:
    parse arg ggEditCmd, ggRet
    address isrEdit ggEditCmd
    if rc = 0 then return 0
    else if ggRet == '*' then return rc
    else if wordPOS(rc, ggRet) > 0 then return rc
    else
        call err 'adr isrEdit rc' rc 'for' ggEditCmd
endSubroutine adrEdit
/* copy adrIsp end   *************************************************/
/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
    parse arg ggTsoCmd, ggRet
    address tso ggTsoCmd
    if rc == 0                     then return 0
    else if ggRet == '*'           then return rc
    else if wordPos(rc, ggRet) > 0 then return rc
    else
        call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */

/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure expose m.
parse upper arg dsn ., addPrefix
    if left(dsn,1) = "'" then
        return strip(dsn, 'b', "'")
    sp = sysvar('SYSPREF')
    if sp == '' then
        sp = userid()
    cx = pos('~', dsn)
    if cx < 1 & addPrefix == 1 then
        return sp'.'dsn
    do while cx \== 0
        le = left(dsn, cx-1)
        ri = substr(dsn, cx+1)
        if right(le, 1) == '.' | left(ri, 1) == '.' then
            dsn = le || sp || ri
        else
            dsn = le || left('.', le \== '') || sp ,
                     || left('.', ri \== '') || ri
        cx = pos('~', spec, cx)
        end
    return dsn
endProcedure dsn2Jcl

/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure expose m.
parse arg dsn .
    return "'"dsn"'"
endProcedure jcl2dsn

dsnSetMbr: procedure expose m.
parse arg dsn, mbr
     bx = pos('(', dsn)
     if bx > 0 then
         dsn = strip(left(dsn, bx-1))
     if mbr <> '' then
         dsn = dsn'('strip(mbr)')'
     return dsn
endProcedure dsnSetMbr

dsnGetMbr: procedure expose m.
parse arg dsn
     lx = pos('(', dsn)
     rx = pos(')', dsn, lx+1)
     if lx < 1 then
         return ''
     else if lx < rx then
         return substr(dsn, lx+1, rx-lx-1)
     else
         return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
    io: read or write a dataset with the following callsequences:
        read:  tsoOpen...'R', readDD*,  tsoClose
        write: tsoOpen...'W', writeDD*, tsoClose

        readDD returns true if data read, false at eof
        do not forget that open is mandatory to write empty file|
***********************************************************************/

/*--- open dd for read (rw='R') or write (rw='W') --------------------*/
tsoOpen: procedure expose m.
parse upper arg dd, rw
    return adrTso('execio' 0 'disk'RW tsoDD(dd, 'o') '(open)')
return /* end tsoOpen */

/*--- close dd -----------------------------------------------------*/
tsoClose: procedure expose m.
    parse upper arg dd
    return adrTso('execio 0 diskW' dd '(finis)')
endProcedure tsoClose

/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt = '' then
        ggCnt = 100
    call adrTso 'execio' ggCnt 'diskR' ggDD '(stem' ggSt')', 2
    return (value(ggSt'0') > 0)
return /* end readDD */

/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    call adrTso 'execio' ggCnt 'diskW' ggDD '(stem' ggSt')'
    return
endSubroutine writeDD

/*--- readNx: read next line, using buffer ---------------------------*/
/*--- begin: allocate dsnSpec and ini ------------------------ -------*/
readNxBegin: procedure expose m.
    parse arg m, m.m.dsn, m.m.dd, m.m.Cnt
    if m.m.dd = '' then
        m.m.dd = 'DDNX*'
    if m.m.cnt = '' then
        m.m.cnt = 1000
    m.m.cx = m.m.cnt + 999
    m.m.buf0x = 0
    m.m.0 = 0
    parse value dsnAlloc('dd('m.m.dd')' m.m.dsn) with m.m.dd m.m.free
    call tsoOpen m.m.dd, 'R'
    return m
endProcedure readDDNxBegin

/*--- return the stem of the next line, or '' at end -----------------*/
readNx: procedure expose m.
parse arg m
    m.m.cx = m.m.cx + 1
    if m.m.cx <= m.m.0 then
        return m'.'m.m.cx
    m.m.buf0x = m.m.buf0x + m.m.0
    if \ readDD(m.m.dd, 'M.'m'.', m.m.cnt)then
        return ''
    m.m.cx = 1
    return m'.1'
endProcedure readDDNx
/*--- return the stem of the curr line, '' at end --------------------*/
readNxCur: procedure expose m.
parse arg m
    if m.m.cx <= m.m.0 then
        return m'.'m.m.cx
    else
        return ''
endProcedure readNxCur

/*--- return the position (line number) of reader
           plus le characters of the current line (default 50) ------*/
readnxPos: procedure expose m.
parse arg m, le
    li = m'.'m.m.cx
    li = strip(m.li, 't')
    if arg() < 2 then
        le = 50
    if le < 1 then
        li = ''
    else if length(li) <= le then
        li = ':' li
    else
        li = ':' left(li, le-3)'...'
    return 'line' (m.m.buf0x + m.m.cx)li
endProcedure readnxPos

/*--- close and deallocate ------------------------------------------*/
readNxEnd: procedure expose m.
parse arg m
    call tsoClose m.m.dd
    call tsoFree m.m.free
    return
endProcedure readDDNxEnd

/*--- standardise a dsn spec
       word1             dsName or -
       word2             dd     or -
       word3             disp   or -
       word4 to first :  attributes in tso format
       after first :     attributes for new allocation
----------------------------------------------------------------------*/
dsnSpec: procedure expose m.
parse upper arg spec
    rr = ''      /* put leading - in separate words */
    do sx=1 while words(rr) < 3 & wx \= ''
        wx = word(spec, sx)
        do while abbrev(wx, '-') & words(rr) < 3
            wx = substr(wx, 2)
            rr = rr '-'
            end
        rr = rr wx
        end
    spec = rr subWord(spec, sx)
    na = ''
    dd = ''
    di = ''
    if left(spec, 1) = '&' then /* external spec is handled ok */
        spec = strip(substr(spec, 2))
    do wx=1 by 1
        w = word(spec, wx)
        if w = '' | abbrev(w, '.') | abbrev(w, ':') then
            leave
        else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
            di = w
        else if w = 'CATALOG' then
            di = di w
        else if abbrev(w, 'DD(') then
            dd = substr(w, 4, length(w)-4)
        else if abbrev(w, 'DSN(') then
            na = strip(substr(w, 5, length(w)-5))
        else if na == '' then
            na = dsn2jcl(w)
        else if pos('(', w) > 0 then
            leave
        else if dd == '' then
            dd = w
        else if di == '' then
            di = w
        else
            leave
        end
    if na == '' then
        na = '-'
    else if abbrev(na, "'") then
        na = substr(na, 2, length(na)-2)
    if dd == '' then dd = '-'
    if di == '' then di = '-'
    re = subword(spec, wx)
    if abbrev(re, '.') then
        re = substr(re, 2)
    return na dd di re
endProcedure dsnSpec

/*--- alloc a dsn with dsnAlloc
          if the dsn is inuse wait and retry
          until either the allocation is successfull
          or the timeout occurs --------------------------------------*/
dsnAllocWait: procedure expose m.
parse upper arg spec, pDi, pDD, timeOut
    x = max(1, arg() - 1)
    do rt=0
        m.adrTsoAl.1 = ''
        m.adrTsoAl.2 = ''
        m.adrTsoAl.3 = ''
        call outtrap m.adrTsoAl.
        res = dsnAlloc(spec, pDi, pDD, '*')
        call outtrap off
        if \ datatype(res, 'n') then
            return res
        msg = m.adrTsoAl.1'\n'm.adrTsoAl.2'\n'm.adrTsoAl.3
        if rt > timeOut & timeOut \== '' then
            return err('timeout allocating' spec time() '\n'msg)
        if pos('DATA SET IS ALLOCATED TO ANOTHER', msg) < 1 then
            return err('allocating' spec'\n'msg)
        say time() 'sleep and retry alloc' spec
        call sleep 1, 0
        end
endProcedure dsnAllocWait

/*--- alloc a dsn or a dd
          spec '-'<ddName>
               datasetName? disposition? '.'? attributes? (':' newAtts)?
          disp default disposition
          dd   default dd name
          retRc   erlaubte ReturnCodes (leer = 0)
          returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, pDi, pDD, retRc
    parse value dsnSpec(spec) with na dd di rest
    if na = '-' then
        m.dsnAlloc.dsn = ''
    else
        m.dsnAlloc.dsn = na
    if dd == '-' & pDD \== '' then
        dd = pDD
    if dd == '-' then
        dd = 'DD*'
    dd = tsoDD(dd, 'a')
    if na == '-' & di == '-' & rest = '' then
        return dd
    if di = '-' then
        if pDi == '' then
            di = 'SHR'
        else
            di = pDi
    if pos('(', na) < 1 then
        nop
    else if di = 'MOD' then
        call err 'disp mod for' na
    else
        di = 'SHR'
    if pos('/', na) > 0 then
        rx = csmAlloc(na dd di rest, retRc)
    else
        rx = tsoAlloc(na dd di rest, retRc)
    if rx = 0 then
        return dd dd
    else
        return rx
endProcedure dsnAlloc

/*--- find a free dd with prefix dd ----------------------------------*/
tsoDD: procedure expose m.
parse arg dd, f
    if symbol('m.tso.ddAlloc') \== 'VAR' then do
        call errIni
        m.tso.ddAlloc = ''
        m.tso.ddOpen  = ''
        end
    if m.err.ispf then
        address ispExec 'vget wshTsoDD shared'
    else
        wshTsoDD = m.tso.ddAlloc
    if f == '-' then do
        ax = wordPos(dd, m.tso.ddAlloc)
        if ax > 0 then
            m.tso.ddAlloc = delWord(m.tso.ddAlloc, ax, 1)
        ox = wordPos(dd, m.tso.ddOpen)
        if ox > 0 then
            m.tso.ddOpen  = delWord(m.tso.ddOpen , ox, 1)
        if ax < 1 & ox < 1 then
            call err 'tsoDD dd' dd 'not used' m.tso.ddAlloc m.tso.ddOpen
        sx = wordPos(dd, wshTsoDD)
        if sx > 0 then
            wshTsoDD  = delWord(wshTsoDD , sx, 1)
        end
    else if f == 'o' then do
        if wordPos(dd, m.tso.ddOpen m.tso.ddAlloc) < 1 then
            m.tso.ddOpen = strip(m.tso.ddOpen dd)
        end
    else if f <> 'a' then do
        call err 'tsoDD bad fun' f
        end
    else do
        if right(dd, 1) = '*' then do
            dd = left(dd, length(dd)-1) || m.err.screen
            cx = lastPos(' 'dd, ' 'm.tso.ddAlloc)
            if cx > 0 then do
                old = word(substr(m.tso.ddAlloc, cx), 1)
                if old = dd then
                    dd = dd'1'
                else if datatype(substr(old, length(dd)+1), 'n') then
                    dd = dd || (substr(old, length(dd)+1) + 1)
                else
                    call err 'tsoDD old' old 'suffix not numeric dd' dd
                end
            end
        if wordPos(dd, m.tso.ddAlloc) < 1 then
            m.tso.ddAlloc = strip(m.tso.ddAlloc dd)
        if wordPos(dd, wshTsoDD) < 1 then
            wshTsoDD = strip(wshTsoDD dd)
        end
    if m.err.ispf then
        address ispExec 'vPut wshTsoDD shared'
    return dd
endProcedure tsoDD

tsoAlloc: procedure expose m.
parse arg na dd disp rest ':' nn, retRc
    c = 'alloc dd('dd')' disp
    if na \== '-' then
        c = c "DSN('"na"')"
    else if disp = 'NEW' and nn \== '' then
        c = c dsnCreateAtts(,nn)
    call outtrap m.adrTsoAl.
    alRc = adrTso(c rest, '*')
    call outtrap off
    if alRc =  0 then
        return 0
    if nn \= '' & wordPos(disp, 'OLD SHR') > 0 ,
          & sysDsn("'"m.dsnAlloc.dsn"'") == 'DATASET NOT FOUND' then do
        say 'tsoAlloc creating' c rest ':'nn
        call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(na, nn)
        call adrTso 'free  dd('dd')'
        return tsoAlloc(na dd disp rest, retRc)
        end
    say 'rc='alRc 'for' c rest
    call saySt adrTsoal
    if retRc = '*' | wordPos(alRc, retRc) > 0 then
        return alRc
    call err 'tsoAlloc rc' alRc 'for' c rest
endProcedure tsoAlloc

tsoAtts: procedure expose m.
parse arg dsn
    rc = listDsi("'"dsn"' SMSINFO")
    if rc = 0 then
        mv = ''
    else if rc = 4 & sysReason = 19 then do
        mv = 'UCOUNT(30)' /* 7.8.13 corrected attribute */
        say 'creating' dsn 'with multi volume' mv
        end
    else if rc ^= 0 then
        call err 'listDsi rc' rc 'reason' sysReason,
                             sysMsgLvl1 sysMsgLvl2
    al = 'CAT'
    al = ''
    if right(sysDsSms, 7) == 'LIBRARY' ,
        | abbrev(sysDsSms, 'PDS') then
         al = al 'DSNTYPE(LIBRARY)'
    if sysUnits = 'TRACK' then
        sysUnits = 'TRACKS'
    return al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
        "DATACLAS("sysDataClass")" ,
        "RECFM("translate('1 2 3', ' 'sysREcFM, ' 123')")",
        "LRECL("SYSLRECL")",
        "SPACE("sysPrimary"," sysSeconds")" sysUnits mv
    /*  "blksize("sysBLkSIZE")" removed 3.4.13: let sms do the magic */
endProcedure tsoAtts

tsoFree: procedure expose m.
parse arg ddList, ggRet
    do dx=1 to words(ddList)
        dd = word(ddList, dx)
        call adrTso 'free dd('dd')', ggRet
        call tsoDD dd, '-'
        end
    return
endProcedure tsoFree

tsoFreeAll: procedure expose m.
    all = m.tso.ddAlloc m.tso.ddOpen
    do ax = 1 to words(all)
        call adrTso 'execio 0 diskW' word(all, ax) '(finis)', '*'
        end
    m.tso.ddOpen = ''
    call tsoFree m.tso.ddAlloc, '*'
    return
endProcedure tsoFreeAll

dsnCreateAtts: procedure expose m.
parse arg dsn, atts, forCsm
    forCsm = forCsm == 1
    aU = ' 'translate(atts)
    res = ''
    if dsn \== '' then
        res = "dataset('"dsnSetMbr(dsn)"')"
    if abbrev(atts, '~') then
        return res tsoAtts(substr(atts, 2))
    if abbrev(atts, ':') then do
        parse var atts a1 atts
        rl = substr(a1, 3)
        if abbrev(a1, ':F') then do
            if rl = '' then
                rl = 80
            recfm='f b'
            end
        else do
            if rl = '' then
                rl = 32756
            recfm = substr(a1, 2, 1) 'b'
            end
        res =  res "recfm("space(recfm, 1-forCsm)") lrecl("rl")"
        end
    if pos('(', dsn) > 0 & pos(' DSNTYPE(', aU) < 1 ,
                         & pos(' DSORG(',   aU) < 1 then
        res = res 'dsntype(library) dsorg(po)'
    if pos(' MGMTCLAS(', aU) < 1 then
        res = res 'mgmtclas(COM#A091)'
    if pos(' SPACE(', aU) < 1 then
        res = res 'space(100, 500) cyl' || copies('inder', forCsm)
    return res atts
endProcedure dsnCreateAtts
/*--- check if a dataset is archive ------------------------------------
          returns 'ok'                    if dataset on disk
                  'not'                   if dataset is not catalogued
                  'arc'                   if dataset archived
                  listDsi errorMsg        otherwise ------------------*/
dsnArc: procedure expose m.
parse upper arg dsn
    lc = listDsi("'"strip(dsn)"' noRecall")
    if lc = 0 then
        return 'ok'
    else if lc=4 & sysReason = 19 then  /* multiple volumes */
        return 'ok'
    else if lc=16 & sysReason = 5 then
        return 'notCat'
    else if lc=16 & sysReason = 9 then
        return 'arc'
    else
        return 'listDsi cc='lc', sysReason='sysReason ,
                          'm2='sysMsgLvl2', m1='sysMsgLvl1
endProcedure dsnArc
/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
    ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
    call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
    call tsoFree word(ggAlloc, 2)
    return
endSubroutine readDsn

/*--- write the dataset specified in ggDsnSpec from stem ggSt
          write ggCnt records if not empty otherwise ggst0
          if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
    call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
            '(stem' ggSt 'open finis)'
    call tsoFree word(ggAlloc, 2)
    if ggSay == 1 | m.debug == 1 then
       say ggCnt 'records written to' ggDsnSpec
    return
endSubroutine writeDsn

copyDSN: procedure expose m.
parse arg frSpec, toSpec, ggSay
    parse value dsnAlloc(frSpec, 'SHR', 'FRDD') with frDD frFr
    parse value dsnAlloc(toSpec, 'OLD', 'TODD') with toDD toFr
    call tsoOpen frDD, 'R'
    call tsoOpen toDD, 'W'
    cnt = 0
    do while readDD(frDD, r.)
        call writeDD toDD, r.
        cnt = cnt + r.0
        end
    call tsoClose frDD
    call tsoClose toDD
    call tsoFree frFr toFr
    if ggSay == 1 | m.debug == 1 then
       say cnt 'records copied from' frSpec 'to' to toSpec
    return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
/* copy err begin *** errorhandling, messages, help    ****************/
errIni: procedure expose m.
    if m.err.ini == 1 then
        return
    call utIni
    m.err.ini     = 1
    m.err.handler = ''
    m.err.cleanup = ';'
    m.err.opt     = ''
    parse source m.err.os .
    m.err.ispf    = 0
    m.err.screen  = 0
    if m.err.os \== 'LINUX' then
        if sysVar('sysISPF') = 'ACTIVE' then do
            m.err.ispf = 1
            address ispExec 'vget zScreen shared'
            m.err.screen = zScreen
            end
    return
endProcedure errIni

/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
    call errIni
    parse arg m.err.opt, m.err.handler
    if pos('I', translate(m.err.opt)) > 0 & m.err.ispf then
        address ispExec 'control errors return'
    return
endSubroutine errReset

/*--- error routine: abend with message ------------------------------*/
err:
    parse arg ggTxt, ggOpt
    call errIni
    drop err handler cleanup opt call return
    if ggOpt == '' & m.err.handler \== '' then
        interpret m.err.handler
    call errSay 'f}'ggTxt
    call errCleanup
    if ggOpt == '' then
        ggOpt = m.err.opt
    upper ggOpt
    if pos('T', ggOpt) > 0  then do
        trace ?r
        say 'trace ?r in err'
        end
    if pos('H', ggOpt) > 0 & m.err.eCat == 'f' then do
        call errSay ' }errorhandler exiting with divide by zero' ,
                                   'to show stackHistory'
        x = 1 / 0
        end
    call errSay ' }errorhandler exiting with exit(12)'
    exit errSetRc(12)
endSubroutine err

/*--- set rc for ispf: -------------------------------------------------
    if a cmd is run by ispStart, its RC is ignored,
         but ISPF passes the value of the shared variable zIspfRc
         back as return code
----------------------------------------------------------------------*/
errSetRc: procedure expose m.
parse arg zIspfRc
    if m.err.ispf then
        address ispExec vput 'zIspfRc' shared
    return zIspfRc
endProcedure errSetRc

/*--- error routine: user message cleanup exit -----------------------*/
errAddCleanup: procedure expose m.
parse arg code
    call errIni
        /* concatenate backwards, then it is executed also backwards */
    m.err.cleanup = ';'code || m.err.cleanup
    return
endProcedure errAddCleanup

errRmCleanup: procedure expose m.
parse arg code
    call errIni
    cx = pos(';'code';', m.err.cleanup)
    if cx > 0 then
        m.err.cleanup = left(m.err.cleanup, cx) ,
                     || substr(m.err.cleanup, cx + length(code)+2)
    return
endProcedure errRmCleanup

errCleanup: procedure expose m.
    call errIni
    errCleanup = m.err.cleanup
    if errCleanup <> ';' then do
        m.err.cleanup = ';'
        say 'err cleanup begin' errCleanup
        interpret errCleanup
        say 'err cleanup end' errCleanup
        end
    if symbol('m.tso.ddAlloc') == 'VAR' then
        call tsoFreeAll
    return
endProcedure errCleanup

/*--- say an errorMessage msg with pref and linesplits --------------*/
errSay: procedure expose m.
parse arg msg
    return saySt(errMsg(msg))

/*--- prefix an errormessage with pref,
          split it into lines at \n to stem m.err -------------------*/
errMsg: procedure expose m.
parse arg msg
    m.err.eCat = 'f'
    do while substr(msg, 2, 1) == '}'
        parse var msg m.err.eCat '}' msg
        end
    res = msg
    if m.err.eCat <> '' then do
       pTxt = ',error,fatal error,input error,s-}scanErr,warning,'
 /*    pTxt = ',error,fatal error,input error,syntax error,warning,' */
       px = pos(','m.err.eCat, pTxt)
       if px < 1 then do
           m.err.eCat = 'f'
           px = pos(','m.err.eCat, pTxt)
           end
       res = substr(pTxt, px+1, pos(',', pTxt, px+2)-px-1)
       if substr(res, 3, 1) == '}' then
           parse var res 2 opt 3 br 4 res
       if opt == '-' then
           res = res msg
       else do
           parse source . . s3 .              /* current rexx */
           res = res 'in' s3':' msg
           end
       end
    return splitNl(err, res)           /* split lines at \n */
endProcedure errMsg

splitNL: procedure expose m.
parse arg st, msg
    bx = 1
    do lx=1 to 20
        ex = pos('\n', msg, bx)
        if ex < bx then
            leave
        m.st.lx = substr(msg, bx, ex-bx)
        bx = ex+2
        end
    m.st.lx = substr(msg, bx)
    m.st.0 = lx
    return st
endProcedure splitNL

/*--- say (part of) the lines of a stem ----------------------------*/
saySt: procedure expose m.
parse arg st, fx, tx
    do lx=word(fx 1, 1) to word(tx m.st.0, 1)
        say m.st.lx
        end
    return st
endProcedure saySt

/*--- out (part of) the lines of a stem ----------------------------*/
outSt: procedure expose m.
parse arg st, fx, tx
    do lx=word(fx 1, 1) to word(tx m.st.0, 1)
        call out m.st.lx
        end
    return st
endProcedure outSt

/*--- say a trace message if m.trace is set --------------------------*/
debug: procedure expose m.
parse arg msg
    if m.debug == 1 then
        say 'debug:' msg
    return
endProcedure debug

/*--- output a trace if m.trace is set -------------------------------*/
trc: procedure expose m.
parse arg msg
    if m.trace == 1 then
        call out 'trc:' msg
    return
endProcedure trc

/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
    interpret 'assertRes =' arg(1)
    if assertRes \==1 then
        call err 'assert failed' arg(1) '==>' assertRes':' arg(2)
    return
endProcedure assert

/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg
    call errSay 'i}'msg
    call help 0
    call err 'i}'msg
endProcedure errHelp

/*--- display the first comment block of the source as help ----------*/
help: procedure expose m.
parse arg doClear
    if doClear \== 0 then
        address tso 'clear'
    parse source . . s3 .
    say right(' help for rexx' s3, 72, '*')
    do lx=1 while pos('/*', sourceLine(lx)) < 1
        if lx > 10 then
            return err('initial commentblock not found for help')
        end
    doInc = 1
    ho = m.err.helpOpt
    do lx=lx+1 to sourceline() while pos('*/', sourceline(lx)) = 0
        li = strip(sourceLine(lx), 't')
        cx = lastPos('{', li)
        if cx > 0 then do
            if length(ho) = 1 then
                doInc = cx = length(li) | pos(ho, li, cx+1) > 0
            li = left(li, cx-1)
            end
        if doInc then
            say li
        end
    say right(' end help for rexx' s3, 72, '*')
    return 4
endProcedure help

/* copy err end   *****************************************************/
/* copy ut begin  *****************************************************/
utIni: procedure expose m.
    if m.ut.ini == 1 then
        return
    m.ut.ini = 1
    m.ut.digits = '0123456789'
    m.ut.alfLC  = 'abcdefghijklmnopqrstuvwxyz'
    m.ut.alfUC  = translate(m.ut.alfLc)
    m.ut.Alfa   = m.ut.alfLc || m.ut.alfUC
    m.ut.alfNum = m.ut.alfa || m.ut.digits
    m.ut.alfDot = m.ut.alfNum || '.'
    m.ut.alfId  = m.ut.alfNum'_' /* avoid rexx allowed @ # $ ¬ . | ? */
    m.ut.alfIdN1 = m.ut.digits    /* not as first character */
    m.ut.alfRex  = m.ut.Alfa'.0123456789@#$?' /* charset puff mit ¬*/
    m.ut.alfRexN1= '.0123456789'
    m.ut.alfPrint = m.ut.alfNum'+-*/=()¢!{}<> .:,;?|''"%&#@$£\_'
    return
endProcedure utIni
/*--- if function  warning all3 arguments get evaluated|
                   e.g if(x=0, 'infinity', 1/0) will fail| -----------*/
if: procedure expose m.
parse arg co, ifTrue, ifFalse
    if co then
        return ifTrue
    else
        return ifFalse
endProcedure if
/*--- embedded ASSignement:
      assign the second argument to the variable with name in first arg
      and return the value assigned ----------------------------------*/
ass:
    call value arg(1), arg(2)
    return arg(2)
/*--- embedded ASSignement return NotNull:
      assign the second argument to the variable with name in first arg
      and return 1 if value not null, 0 if null ----------------------*/
assNN:
    call value arg(1), arg(2)
    return arg(2) \== ''

/*--- return current time and cpu usage ------------------------------*/
utTime: procedure expose m.
    return time() 'ela='time('E') 'cpu='sysvar('syscpu'),
            'su='sysvar('syssrv')

tstUtTime: procedure expose m.
    say 'begin' utTime()  sysvar('sysnode')
    do 3000000
       end
    say 'end  ' utTime()
return

/*--- sleep several seconds ------------------------------------------*/
sleep: procedure expose m.
parse arg secs, sayIt
    if sayit <> 0 then
        say 'sleeping' secs 'secs' time()
    CALL SYSCALLS 'ON'
    ADDRESS SYSCALL "sleep" secs
    CALL SYSCALLS 'OFF'
    if sayit <> 0 then
        say 'slept' secs 'secs' time()
    return
endProcedure sleep

/*--- left without truncation ----------------------------------------*/
lefPad: procedure expose m
parse arg s, len
    if length(s) >= len then
        return s
    return left(s, len)
endProcedure lefPad

/*--- right without truncation ---------------------------------------*/
rigPad: procedure expose m
parse arg s, len
    if length(s) >= len then
        return s
    return right(s, len)
endProcedure rigPad

/*--- quote string txt using quoteChar qu ("" ==> ") -----------------*/
quote: procedure expose m.
parse arg txt, qu
    if qu = '' then
        qu = '"'
    res = qu
    ix = 1
    do forever
        qx = pos(qu, txt, ix)
        if qx = 0 then
            return res || substr(txt, ix) || qu
        res = res || substr(txt, ix, qx-ix) || qu || qu
        ix = qx + length(qu)
        end
endProcedure quote

/*--- translate to lowercase -----------------------------------------*/
ut2lc: procedure expose m.
parse arg s
    return translate(s, m.ut.alfLc, m.ut.alfUc)

/*--- verify an id ---------------------------------------------------*/
verifId: procedure expose m.
    parse arg src, extra
    if pos(left(src, 1), m.ut.alfIdN1) > 0 then
        return 1
    else
        return verify(src, m.ut.alfId || extra, 'n')

/*--- return the count of occurrences of needle in heyStack ----------*/
posCount: procedure expose m.
parse arg needle, hayStack, start, fin
    if start = '' then
        start = 1
    if fin = '' then
        fin = length(hayStack) + 1 - length(needle)
    do cnt = 0 by 1
        start = pos(needle, haystack, start)
        if start < 1 | start > fin then
             return cnt
        start = start + length(needle)
        end
endProcedure posCount

repAll: procedure expose m.
parse arg src
    do ax = 2 by 2 to arg()
        src = repAl2(src, src, arg(ax), arg(ax+1))
        end
    return src
endProcedure repAll

repAl2: procedure expose m.
parse arg src, sPos, old, new
    res = ''
    cx = 1
    do forever
        nx = pos(old, sPos, cx)
        if nx < 1 then
            return res || substr(src, cx)
        res = res || substr(src, cx, nx-cx) || new
        cx = nx + length(old)
        end
endProcedure repAl2

repAllWords: procedure expose m.
parse arg src, w, new
    res = ''
    wx = 0
    cx = 1
    do forever
        wx = wordPos(w, src, wx+1)
        if wx < 1 then
            return res || substr(src, cx)
        nx = wordindex(src, wx)
        res = res || substr(src, cx, nx-cx) || new
        cx = nx + length(w)
        end
endProcedure repAllWords
tstUtc2d: procedure expose m.
numeric digits 33
say c2d('ffffff'x)
say utc2d('ffffff'x)
say utc2d('01000000'x)    256*256*256
say utc2d('01000001'x)
say utc2d('020000FF'x)    256*256*256*2+255
say utc2d('03020000EF'x)    256*256*256*770+239
return
endProcedure tstUtc2d
utc2d: procedure expose m.
parse arg ch
    cx = length(ch) // 3
    if cx = 0 then
        cx = 3
    res = c2d(left(ch, cx))
    do cx=cx+1 by 3 to length(ch)
        res = res * 16777216 + c2d(substr(ch, cx, 3))
        end
    return res
/* copy ut end ********************************************************/
}¢--- A540769.WK.REXX.O13(CADB3) cre=2012-11-14 mod=2012-11-14-13.26.12 A540769 ---
/* rexx  ---------------------------------------------------------------
          caDb2:    start the ca tools with cs Libraries
          options d: debug, say which libraries
                  w: with test and personal work libs (wk.rexx ...)
                  t: with test libs (dsn.cadb2.cs.execTst ...)
                   : with prod libs (dsn.cadb2.cs.exec)
---------------------------------------------------------------------*/
parse upper arg arg
libs = "'dsn.cadb2.cs.exec'"
if arg == '' & userid() == 'A540769' then
    arg = 'W'
if pos('W', arg) > 0  then
    libs = "'"userid()".WK.REXX' 'dsn.cadb2.cs.exectst'" libs
else if pos('T', arg) > 0 then
    libs = "'dsn.cadb2.cs.exectst'" libs
if pos('D', arg) > 0 then
     say 'caDb2 altLib' libs
ADDRESS tso "ALTLIB ACTIVATE APPLICATION(EXEC) DATASET("libs") uncond"
ADDRESS 'ISPEXEC' 'SELECT MODE(FSCR) NEWAPPL(CA) passlib',
     "CMD(EX 'DSN.CADB2.RZ1.P0.CDBACLS0(RSPMAIN)')"
ADDRESS tso "ALTLIB deACTIVATE APPLICATION(EXEC)"
}¢--- A540769.WK.REXX.O13(CASQL) cre=2012-08-27 mod=2012-08-27-17.41.08 A540769 ---
 PROC 0 SSID()          /* reserved - DB2 Subsystem ID         */ -
        SUFFIX()        /* reserved - Global Parmlib Suffix    */ -
        PARMLIB()       /* reserved - Parmlib dsname or ddname */ -
        RECURS(NO)      /* reserved */

/*********************************************************************/
/*                      ALL RIGHTS RESERVED                          */
/*         COPYRIGHT 2001 COMPUTER ASSOCIATES INTERNATIONAL          */
/*********************************************************************/
/*                                                                   */
/* System   : ISQL                                                   */
/*                                                                   */
/* Abstract : ISPF EDIT <==> ISQL INTERFACE                          */
/*                                                                   */
/* Function : Jump into ISQL from an ISPF edit session.              */
/*                                                                   */
/* Usage    : Mark the first and last lines of the SQL statement     */
/*            using the E or EE/EE line commands, enter SQL on the   */
/*            command line, and press enter.                         */
/*                                                                   */
/* How this clist works :                                            */
/*                                                                   */
/*            It is no longer necessary (or recommended) to          */
/*            manually allocate runtime libraries in any clist       */
/*            such as this one.  All allocations are now handled     */
/*            by the CA-DB2 Tools start-up clists (RSPDEF,           */
/*            RSPINIT, and RSPFREE), using information in the        */
/*            CA-DB2 Tools parmlib_dataset.                          */
/*                                                                   */
/*            This design gives customers the ability to define      */
/*            multiple runtime environments, which are selectable    */
/*            using a parmlib_suffix ("Global Parmlib Suffix").      */
/*                                                                   */
/*            The typical user (probably) does not need to be        */
/*            concerned with the parmlib_dataset/parmlib_suffix      */
/*            options.                                               */
/*            Simply enter the SQL command and press enter.          */
/*            By default, the RSPINIT/RSPDEF clists will:            */
/*            a) determine the previously-used parmlib_dataset       */
/*            b) determine the default parmlib_suffix (ENVDEF)       */
/*            c) perform allocations and establish runtime           */
/*               environment                                         */
/*            ISQL will then be started, using settings from your    */
/*            previous session (including DB2 subsystem), which are  */
/*            stored in your Profile.                                */
/*                                                                   */
/*            In other words, the only pre-requisite to using this   */
/*            clist is that you must have entered the product and    */
/*            connected to a DB2 subsystem at least one time         */
/*            previously.  By doing so, the parmlib_dataset name     */
/*            that you used would have been saved into your          */
/*            profile, making it available here.                     */
/*                                                                   */
/* Installation :                                                    */
/*                                                                   */
/*            If you install this clist into another library,        */
/*            then you also must install the RSPDEF, RSPINIT, and    */
/*            RSPFREE clists into the same library.                  */
/*                                                                   */
/* Limitations:                                                      */
/*                                                                   */
/*            Each time you enter the CA-DB2 Tools, your             */
/*            parmlib_dataset name is stored in your profile,        */
/*            making it available to subsequent sessions.            */
/*            This is good.                                          */
/*                                                                   */
/*            However, the parmlib_suffix is NOT saved.              */
/*                                                                   */
/*            Bottom line, the impact that this has on the usage of  */
/*            the SQL clist is this:                                 */
/*            => if your installation uses suffixes, and if you use  */
/*               any suffix other than the default suffix, then you  */
/*               need to specify the suffix each time you use the    */
/*               SQL clist...                                        */
/*            => Even if you use the SAME suffix every time, if it   */
/*               is not the default suffix, then you need to specify */
/*               the suffix.                                         */
/*            => If you specify a parmlib_dataset name, then you     */
/*               should also specify a parmlib_suffix (unless you    */
/*               intend to use the default, in which case you        */
/*               should NOT specify the parmlib_suffix)              */
/*            => If you intend to use the default parmlib_suffix,    */
/*               whatever that happens to be for your shop, then     */
/*               DO NOT specify a parmlib_suffix on the clist...     */
/*               (this is the reason why we do not save and          */
/*               re-use the prior parmlib_suffix).                   */
/*                                                                   */
/*                                                                   */
/* Reference: Consult with your System Administrator to determine    */
/*            which parmlib & suffixes are valid at your             */
/*            installation.                                          */
/*                                                                   */
/*            See the CA-DB2 Tools Installation Guide for a          */
/*            complete description of the Global Parmlib Suffix,     */
/*            and the Parmlib(DSNAME) member, for more information.  */
/*                                                                   */
/*                                                                   */
/* Syntax   : SQL subsystem parmlib_suffix parmlib_dsname            */
/*                .         .              parmlib_ddname            */
/*                                         DD:parmlib_ddname         */
/*                                         .                         */
/*                                                                   */
/* Parameters :                                                      */
/*                                                                   */
/*            All arguments are optional.  A period (.) may be       */
/*            used as a placeholder, to indicate a blank/default     */
/*            value.                                                 */
/*                                                                   */
/*                                                                   */
/*            subsystem                                              */
/*                                                                   */
/*               DB2 subsystem ID.                                   */
/*                                                                   */
/*               If not specified, ISQL automatically connects       */
/*               to the DB2 subsystem ID used during the last        */
/*               CA DB2 Products session.                            */
/*                                                                   */
/*            parmlib_suffix                                         */
/*                                                                   */
/*               "Global Parmlib Suffixes" allow you to have         */
/*               multiple versions of the same global parmlib        */
/*               member for different environments.                  */
/*                                                                   */
/*               See your System Administrator for information       */
/*               about SUFFIX parameters that are valid for          */
/*               your installation.                                  */
/*                                                                   */
/*            parmlib_dsname                                         */
/*            parmlib_ddname                                         */
/*            DD:parmlib_ddname                                      */
/*                                                                   */
/*               At the very minimum, a parmlib must be identified,  */
/*               in order to start the CA-DB2 Tools.                 */
/*                                                                   */
/*               This parameter provides the ability to              */
/*               specify the PARMLIB DATASET NAME (a single          */
/*               dataset), or the DDNAME of an existing parmlib      */
/*               allocation.                                         */
/*                                                                   */
/*               If no parmlib is specified, then the CA-DB2 Tools   */
/*               will use the PARMLIB that was used the last time    */
/*               that you used the CA-DB2 Tools.                     */
/*                                                                   */
/*               There are 2 formats for the DDNAME specification.   */
/*               You may use the "DD:" prefix to indicate a ddname,  */
/*               or you can specify just the ddname by itself,       */
/*               without the "DD:" prefix.                           */
/*               If the value does not have the "DD:" prefix,        */
/*               and is 8 characters or less, and contains           */
/*               no periods, then it is assumed to be a ddname.      */
/*               Otherwise it is assumed to be a dataset name.       */
/*                                                                   */
/*               Specifying the dataset name:                        */
/*                 The dsname must be fully qualified...             */
/*                 It does not matter if it is quoted or not...      */
/*                 It is treated as if it were a fully qualified,    */
/*                 quoted, dataset name in either case.              */
/*                                                                   */
/* Example1 : SQL                                                    */
/*                                                                   */
/*            Jump into ISQL, connecting to the DB2 subsystem        */
/*            that you used last time, using the same parmlib that   */
/*            you used last time, and the default suffix (blank).    */
/*                                                                   */
/* Example2 : SQL db2p                                               */
/*                                                                   */
/*            Jump into ISQL, connecting to the DB2P subsystem,      */
/*            again using the same parmlib that you used last time,  */
/*            and the default suffix (blank).                        */
/*                                                                   */
/* Example3 : SQL db2p 03                                            */
/*                                                                   */
/*            Jump into ISQL, connecting to the DB2P subsystem,      */
/*            again using the same parmlib that you used last time,  */
/*            but this time using the '03' suffix (which is          */
/*            defined by your site) and which establishes a          */
/*            particular set of parmlib/member options.              */
/*                                                                   */
/* Example4 : SQL db2p . company.parmlib.data.set.name               */
/*                                                                   */
/*            Jump into ISQL, connecting to the DB2P subsystem,      */
/*            specifying a parmlib dataset name.  The '.' in the     */
/*            3rd argument is a placeholder, indicating the the 3rd  */
/*            argument (the suffix) is blank.                        */
/*                                                                   */
/*            Note: you may only specify a single dataset name.      */
/*                                                                   */
/* Example5 : SQL db2p . MYPARMDD                                    */
/*       or : SQL db2p . DD:MYPARMDD                                 */
/*                                                                   */
/*            Same as example #4, but in this case you have already  */
/*            allocated the parmlib dataset(s) to the MYPARMDD       */
/*            ddname.                                                */
/*                                                                   */
/*            Use a pre-allocated DDNAME if you need to              */
/*            concatenate multiple parmlib datasets.                 */
/*                                                                   */
/* Error messages :                                                  */
/*                                                                   */
/*            This section provides a few hints & tips for           */
/*            determining the cause of some of the most common       */
/*            errors.  This section is not exhaustive...             */
/*                                                                   */
/*                                                                   */
/*            Unable to start ISQL                                   */
/*              If the message text says                             */
/*                "THE RSPDEF CLIST ENDED WITH A RC=12"              */
/*              then the most likely cause is that the               */
/*              RSPDEF, RSPINIT, RSPFREE clists were not installed   */
/*              along with this ISQL clist, or else the clist        */
/*              library is not allocated to SYSPROC.                 */
/*                                                                   */
/*********************************************************************/
/* For the developer:                                                */
/*                                                                   */
/* ISQL and SQL clists are identical, except for the following:      */
/* - ISQL is invoked as TSO command, SQL is an edit macro            */
/* - ISQL uses keywords, SQL uses positional arguments and uses      */
/*   a period (.) as a placeholder                                   */
/* - ISQL passes a 'comment' in lieu of a piece of sql text;         */
/*   SQL extracts a string of text from the member & passes it.      */
/*                                                                   */
/*********************************************************************/
/* Maintenance Log:                                                  */
/*                                                                   */
/* DATE     ISSUE#     PROBLEM#   PROGRAMMER             TAPE        */
/* -------- --------   --------   ----------            ------       */
/* 04/12/01 10646315              PDHULM                 P99F        */
/*   New.                                                            */
/*   Total re-write.                                                 */
/*   Removed all ALLOCs/LIBDEFs; replaced with                       */
/*   calls to RSPDEF/RSPINIT/RSPFREE; added parmlib/suffix           */
/*   parameters, and everything else.                                */
/*                                                                   */
/* 12/01/03 13104382-1 GEN 278    PDLIT         @01      P01F        */
/*                                                                   */
/*   Removed split screen limitation. This clist will now continue   */
/*   when a second instance of the CA-DB2 products is running.       */
/*   The split screen warning messages have also been                */
/*   removed since PTLDRIVM will display a split screen warning      */
/*   panel.                                                          */
/*                                                                   */
/*********************************************************************/

 IF &RECURS EQ NO THEN DO
   ISREDIT MACRO (SSID,SUFFIX,PARMLIB) NOPROCESS
 END

 CONTROL NOFLUSH NOMSG NOPROMPT NOLIST
 ISPEXEC CONTROL ERRORS RETURN
 SET &NULL = &STR()
 SET &RSPDEF_FATAL_ERROR = NO

/*********************************************************************/
/* Convert placeholders to blanks.                                   */
/*********************************************************************/

 IF &STR(&SSID)    EQ &STR(.) THEN SET &SSID=&STR()
 IF &STR(&SUFFIX)  EQ &STR(.) THEN SET &SUFFIX=&STR()
 IF &STR(&PARMLIB) EQ &STR(.) THEN SET &PARMLIB=&STR()

/*********************************************************************/
/* Check for rc application id.  If we are currently                 */
/* under a different id recursively invoke ourselves.                */
/*********************************************************************/

 ISPEXEC VGET (ZAPPLID)
 IF &ZAPPLID NE &STR(RC) THEN DO

   IF &STR(&SSID)     NE THEN SET &SSID=&STR(SSID(&SSID))
   IF &STR(&SUFFIX)   NE THEN SET &SUFFIX=&STR(SUFFIX(&SUFFIX))
   IF &STR(&PARMLIB)  NE THEN SET &PARMLIB=&STR(PARMLIB(&PARMLIB))

   ISPEXEC SELECT -
           CMD(%&SYSICMD -
           &SSID &SUFFIX &PARMLIB RECURS(YES)) -
           NEWAPPL(RC) -
           PASSLIB
   SET &SQLCC = &LASTCC
   EXIT CODE(&SQLCC)

 END

/*********************************************************************/
/* If PARMLIB was not passed as an argument, then we will use        */
/* the PARMLIB that was established the last time they used the      */
/* CA-DB2 Tools.  This means that the CA-DB2 Tools must have been    */
/* entered at least 1 time previously.                               */
/*********************************************************************/

 IF &STR(&PARMLIB) EQ THEN DO
   ISPEXEC VGET (PTIPARM)
   IF &STR(&PTIPARM) EQ THEN DO
     SET &ZEDSMSG = &STR(PARMLIB NOT SET)
     SET &ZEDLMSG = &STR(You did not specify a PARMLIB,)
     SET &ZEDLMSG = &STR(&ZEDLMSG and a default PARMLIB has not)
     SET &ZEDLMSG = &STR(&ZEDLMSG been set.)
     SET &ZEDLMSG = &STR(&ZEDLMSG You must specify a PARMLIB,)
     SET &ZEDLMSG = &STR(&ZEDLMSG or, you must have entered)
     SET &ZEDLMSG = &STR(&ZEDLMSG the CA Products for DB2)
     SET &ZEDLMSG = &STR(&ZEDLMSG at least 1 time previously,)
     SET &ZEDLMSG = &STR(&ZEDLMSG in order for this clist to work)
     ISPEXEC SETMSG MSG(ISRZ001)
     EXIT CODE(12)
   END
 END

/*********************************************************************/
/* If SSID was not passed as an argument, then we will use           */
/* the SSID that was established the last time they used the         */
/* CA-DB2 Tools.  This means that the CA-DB2 Tools must have been    */
/* entered at least 1 time previously.                               */
/*********************************************************************/

 IF &STR(&SSID) EQ THEN DO
   ISPEXEC VGET (SYS)
   IF &STR(&SYS) EQ OR &STR(&SYS) EQ &STR(SSID) THEN DO
     SET &ZEDSMSG = &STR(DB2 SUBSYSTEM NOT SET)
     SET &ZEDLMSG = &STR(You did not specify a DB2 SSID,)
     SET &ZEDLMSG = &STR(&ZEDLMSG and a default SSID has not)
     SET &ZEDLMSG = &STR(&ZEDLMSG been set.)
     SET &ZEDLMSG = &STR(&ZEDLMSG You must specify a DB2 SSID,)
     SET &ZEDLMSG = &STR(&ZEDLMSG or, you must have entered)
     SET &ZEDLMSG = &STR(&ZEDLMSG the CA Products for DB2)
     SET &ZEDLMSG = &STR(&ZEDLMSG at least 1 time previously and)
     SET &ZEDLMSG = &STR(&ZEDLMSG connected to a DB2 subsystem,)
     SET &ZEDLMSG = &STR(&ZEDLMSG in order for this clist to work)
     ISPEXEC SETMSG MSG(ISRZ001)
     EXIT CODE(12)
   END
 END

/*********************************************************************/
/* Identify line commands to be used by this system.                 */
/* If they did not enter E or EE/EE, exit with msg.                  */
/*********************************************************************/

 ISREDIT PROCESS RANGE E

 IF &LASTCC ^= 0 THEN DO
   SET &ZEDSMSG = &STR(BLOCK COMMAND INCOMPLETE)
   SET &ZEDLMSG = &STR(SQL QUERY MUST BE MARKED WITHIN)
   SET &ZEDLMSG = &STR(&ZEDLMSG PROGRAM BY EE/EE LINE COMMANDS)
   ISPEXEC SETMSG MSG(ISRZ001)
   EXIT CODE(12)
 END

/*********************************************************************/
/* Obtain the logical data width,                                    */
/* and substring DLEN to 3 chars.                                    */
/*********************************************************************/

 ISREDIT (DLEN) = DATA_WIDTH

 SET &VLEN = &LENGTH(&STR(&DLEN))
 IF &VLEN > 3 THEN -
    SET &DLEN = &SUBSTR(&VLEN-2:&VLEN,&DLEN)

/*********************************************************************/
/* Isolate the desired lines of sql.                                 */
/*********************************************************************/

ISREDIT (FLINE) = LINENUM .ZFRANGE
ISREDIT (LLINE) = LINENUM .ZLRANGE

/*********************************************************************/
/* Create 1 variable with all of the sql in it,                      */
/* using at most 72 bytes of data.                                   */
/* If cobol, then use only 66 bytes of data.                         */
/*********************************************************************/

 SET COUNT    = &FLINE
 SET SQLTEXT  = &STR()

 DO WHILE (&COUNT ^> &LLINE)
   ISREDIT (SQ) = LINE &COUNT
   IF &DLEN > &STR(072) THEN -
     IF &DLEN = &STR(074) THEN -
       SET SQLTEXT = &STR(&NRSTR(&SQLTEXT)&SUBSTR(1:66,&NRSTR(&SQ)))
     ELSE -
       SET SQLTEXT = &STR(&NRSTR(&SQLTEXT)&SUBSTR(1:72,&NRSTR(&SQ)))
   ELSE -
     SET SQLTEXT = &STR(&NRSTR(&SQLTEXT)&NRSTR(&SQ))
   SET COUNT = &COUNT+1
 END

/*********************************************************************/
/* If actual data width is greater than 72 use 72,                   */
/* except if the length is 74 in which case the edit                 */
/* profile is number on cobol and data width is 66.                  */
/*********************************************************************/

 IF &DLEN > &STR(072) THEN -
   IF &DLEN = &STR(074) THEN -
     SET &DLEN = &STR(066)
   ELSE -
     SET &DLEN = &STR(072)

/********************************************************************/
/* Parse dsname/ddname argument                                     */
/********************************************************************/

 SET &PARM = &STR()
 SET &CHECK_DATASET_NAME = NO

 IF &STR(&PARMLIB) NE THEN DO

   IF &SUBSTR(1:1,&STR(&PARMLIB)) EQ &STR(')  OR +
      &SUBSTR(1:1,&STR(&PARMLIB)) EQ &STR(")  THEN DO

     /* strip quotes */

     SET &PARMLIB = &SUBSTR(2:&LENGTH(&PARMLIB)-1,&STR(&PARMLIB))

   END

   IF &LENGTH(&STR(&PARMLIB)) GT 3 THEN DO

     /* DD:ddname ?

     SET &PREFIX = &SUBSTR(1:3,&STR(&PARMLIB))
     IF &STR(&PREFIX) = &STR(DD:) THEN +
       SET &PARM = &STR(PARMLIB(&PARMLIB))

   END

   IF &STR(&PARM) EQ THEN DO

     /* if the length of PARMLIB is <= 8
     /* and contains no period,
     /* then it is a DDNAME.
     /* otherwise it is a DSNAME

     SET &LEN = &LENGTH(&STR(&PARMLIB))
     SET &DOT = &SYSINDEX(&STR(.),&STR(&PARMLIB))

     IF &LEN LE 8 AND &DOT EQ 0 THEN DO
        SET &PARM = &STR(PARMLIB(DD:&PARMLIB))
     END
     ELSE DO
        SET &PARM = &STR(PARMLIB(&PARMLIB))
        SET &CHECK_DATASET_NAME = YES
     END

   END

   /* if dataset name given, then verify it...
   /* the RSPDEF clist always treats the dataset name as
   /* fully qualified, regardless whether it is quoted or not...
   /* so, we'll do the same here...

   IF &CHECK_DATASET_NAME = YES THEN DO
     SET &SYSDSN_RESULT = &SYSDSN('&PARMLIB')
     IF &STR(&SYSDSN_RESULT) NE OK THEN DO
         SET &ZEDSMSG = &STR(PARMLIB DATASET ERROR)
         SET &ZEDLMSG = &STR('&PARMLIB' &SYSDSN_RESULT)
         ISPEXEC SETMSG MSG(ISRZ001)
         EXIT CODE(12)
     END
   END

 END

/********************************************************************/
/* Call RSPDEF to drive online allocations.                         */
/********************************************************************/
/* RSPDEF will end with RC=4 if split screen detected...            */
/********************************************************************/

 %RSPDEF 'SUFFIX(&SUFFIX) &PARM'
 SET &RC = &LASTCC

 IF &RC GT 4 THEN DO
   SET &RSPDEF_FATAL_ERROR = YES
   GOTO DONE
 END

 %RSPINIT

/*********************************************************************/
/* Call ISQL, let it grab the sql from clist var                     */
/*********************************************************************/
/* Important note:                                                   */
/*                                                                   */
/* If PTLDRIVM encounters an error and does a setmsg, it will exit   */
/* and the message will be displayed in the current edit window...   */
/*                                                                   */
/* This is good, except that there may be a .HELP panel associated   */
/* with the error, and if the user hits PF1 they will get an ISPF    */
/* Dialog Error "panel not found" and they will be kicked out of the */
/* edit session -- because the HELP panel library is not allocated.  */
/*                                                                   */
/* Unfortunately, from a programming point-of-view, there is         */
/* nothing at all that we can do about this.  The only work-around   */
/* is for the user to permanently allocate the HELP panels in the    */
/* TSO logon proc...                                                 */
/* Which is actually not a bad thing to do (hint, hint).             */
/*********************************************************************/

 IF &STR(&SUFFIX) EQ THEN +
   DO
   ISPEXEC SELECT -
           PGM(PTLDRIVM) -
           PARM(CI=IQLSQL/&DLEN&SSID) -
           NEWAPPL(RC) -
           PASSLIB
   END
 ELSE +
   DO
   ISPEXEC SELECT -
           PGM(PTLDRIVM) -
           PARM(CI=IQLSQL,SUFFIX=&SUFFIX/&DLEN&SSID) -
           NEWAPPL(RC) -
           PASSLIB
   END

/*********************************************************************/
/* Cleanup:                                                          */
/* Call RSPFREE to release our allocations.                          */
/*********************************************************************/

 DONE: &NULL

 %RSPFREE

 IF &RSPDEF_FATAL_ERROR = YES THEN DO
   SET &ZEDSMSG = &STR(Unable to start ISQL)
   SET &ZEDLMSG = &STR(The RSPDEF clist ended with a RC=&RC..)
   SET &ZEDLMSG = &STR(&ZEDLMSG RSPDEF is responsible)
   SET &ZEDLMSG = &STR(&ZEDLMSG for processing the parmlib/suffix,)
   SET &ZEDLMSG = &STR(&ZEDLMSG and allocating runtime libraries.)
   SET &ZEDLMSG = &STR(&ZEDLMSG The clist encountered an error, and)
   SET &ZEDLMSG = &STR(&ZEDLMSG processing terminated.)
   SET &ZEDLMSG = &STR(&ZEDLMSG Correct your parmlib/suffix)
   SET &ZEDLMSG = &STR(&ZEDLMSG specification, and try again.)
   ISPEXEC SETMSG MSG(ISRZ001)
 END

 EXIT CODE(0)
}¢--- A540769.WK.REXX.O13(CAT) cre=2009-09-03 mod=2013-09-23-11.27.26 A540769 ---
/* copy cat  begin ****************************************************
***********************************************************************/
/*--- create a new cat -----------------------------------------------*/
cat: procedure expose m.
    m = oNew('Cat') /* calls catReset */
    do ax=1 to arg()
        call catWriteAll m, arg(ax)
        end
    return m
endProcedure cat

catReset: procedure expose m.
parse arg m
    m.m.RWs.0 = 0
    m.m.catWr = ''
    m.m.catRd = ''
    m.m.catIx = -9e9
    m.m.catKeepOpen = ''
    return m
endProcedure catReset

catClose: procedure expose m.
parse arg m
    if m.m.catWr \== '' then do
        call jClose m.m.catWr
        call mAdd m'.RWS', m.m.catWr
        m.m.catWr = ''
        end
    if m.m.catRd \== '' then do
        call jClose m.m.catRd
        m.m.catRd = ''
        end
    m.m.catIx = -9e9
    return m
endProcedure catClose

catOpen: procedure expose m.
parse arg m, oo
    if oo == m.j.cRead then do
        m.m.catIx = 0
        call catNextRdr m
        m.m.jReading = 1
        end
    else if oo == m.j.cWri | oo == m.j.cApp then do
        if oo == m.j.cWri then
            m.m.RWs.0 = 0
        m.m.catIx = -9e9
        m.m.jWriting = 1
        end
    else do
        call err 'catOpen('m',' oo') bad opt'
        end
    return m
endProcedure catOpen

/*--- return and open next reader ------------------------------------*/
catNextRdr: procedure expose m.
parse arg m
    if m.m.catRd \== '' then
        call jClose m.m.catRd
    cx = m.m.catIx + 1
    m.m.catIx = cx
    if cx > m.m.RWs.0 then do
        m.m.catRd = ''
        return 0
        end
    m.m.catRd = m.m.RWs.cx
    if cx = word(m.m.catKeepOpen, 1) then
        m.m.catKeepOpen = subWord(m.catKeepOpen, 2)
    else
        call jOpen m.m.catRd , m.j.cRead
    return 1
endProcedure catNextRdr

catReadO: procedure expose m.
parse arg m
    do while m.m.catRd \== ''
        res = jReadO(m.m.catRd)
        if res \== '' then
            return res
        call catNextRdr m
        end
    return ''
endProcedure catReadO

catWrite: procedure expose m.
parse arg m, line
    if m.m.catWr == '' then
        m.m.catWr = jOpen(jBuf(), m.j.cWri)
    call jWrite m.m.catWr, line
    return
endProcedure catWrite

catWriteO: procedure expose m.
parse arg m, var
    if m.m.catWr == '' then
        m.m.catWr = jOpen(jBuf(), m.j.cWri)
    call jWriteO m.m.catWr, var
    return
endProcedure catWriteO

/*--- write contents of a reader to cat
          or keep it for later reading -------------------------------*/
catWriteAll: procedure expose m.
parse arg m
    if m.m.catWr \== '' then do
        call mAdd m'.RWS', jClose(m.m.catWr)
        m.m.catWr = ''
        end
    do ax=2 by 1 to arg()
        r = o2File(arg(ax))
        call mAdd m'.RWS', r
        if m.r.jReading then do
            m.m.catKeepOpen = m.m.rws.0 m.m.catKeepOpen
            call jOpen r, m.j.cRead
            end
        end
    return
endProcedure catWriteAll

/*--- create a reader/WriteO for an external file --------------------*/
file: procedure expose m.
parse arg str
    return oNew('File', str)
endProcedure file

fileChild: procedure expose m.
parse arg m, name, opt
    interpret objMet(m, 'fileChild')
endProcedure fileChild

fileRm: procedure expose m.
parse arg m
    interpret objMet(m, 'fileRm')
    return
endProcedure fileRm

filePath: procedure expose m.
parse arg m
    interpret objMet(m, 'filePath')
endProcedure filePath

fileIsFile: procedure expose m.
parse arg m
    interpret objMet(m, 'fileIsFile')
endProcedure fileIsFile

fileIsDir: procedure expose m.
parse arg m
    interpret objMet(m, 'fileIsDir')
endProcedure fileIsDir

fileMkDir: procedure expose m.
parse arg m, opt
    interpret objMet(m, 'fileMkDir')
    return
endProcedure fileRm

fileRmDir: procedure expose m.
parse arg m, opt
    interpret objMet(m, 'fileRmDir')
    return
endProcedure fileRm

/*--- create a reader/WriteO for the filelist of a directory----------*/
fileList: procedure expose m.
parse arg m, opt
    str = oIfStr(m, '')
    if str == '' then
        return oNew('FileList', filePath(m),  opt)
    else
        return oNew('FileList', dsn2Jcl(str),  opt)
endProcedure fileList

fileSingle: procedure expose m.
parse arg m
    call jOpen m, '<'
    res = jReadO(m)
    two = jReadO(m)
    call jClose m
    if res == '' then
        if arg() < 2 then
             call err 'empty file in fileSingle('m')'
        else
            res = arg(2)
    if two \== '' then
        call err '2 or more recs in fileSingle('m')'
    return res
endProcedure fileSingle

catIni: procedure expose m.
    if m.cat.ini == 1 then
        return
    m.cat.ini = 1
    call jIni
    call errIni
    call classNew "n Cat u JRWO", "m",
        , "jOpen  call catOpen m, opt",
        , "jReset call catReset m, arg",
        , "jClose call catClose m",
        , "jReadO return catReadO(m)",
        , "jWrite call catWrite m, line; return",
        , "jWriteO call catWriteO m, var; return",
        , "jWriteAll call catWriteAll m, rdr; return"

    call classAddMet m.class.classV, 'o2File return file(m.m)'
    call classAddMet m.class.classW, 'o2File return file(substr(m,2))'
    if m.err.os == 'TSO' then
        call fileTsoIni
    else if m.err.os == 'LINUX' then
        call fileLinuxIni
    else
        call err 'file not implemented for os' m.err.os
    return
endProcedure catIni
/* copy cat  end   ****************************************************/
}¢--- A540769.WK.REXX.O13(CATCOPRE) cre=2012-09-26 mod=2012-09-26-11.13.47 A540769 ---
call sqlConnect dbof
say time() 'start'
$;
$>DSN.CATCOPRE.OUT ::v
$<=¢
with p as
(
   select dbName db, tsName ts, partition part,
         ( select max(f.timestamp) from sysibm.sysCopy f
             where p.dbName = f.dbName and p.tsName = f.tsName
                  and f.dsNum in (p.partition, 0)
                  and f.icType in ('F', 'R','X')
         ) laFu
     from sysibm.sysTablePart p
     where dbName like '%'
)
select db, ts, part, laFu,
          c.icType, c.dsNum, c.Timestamp, c.dsName
     from p left join sysibm.sysCopy c
           on p.db = c.dbName and p.ts = c.tsName
               and c.dsNum in (p.part, 0)
               and c.icType in ('F', 'I', 'R','X')
               and c.timestamp >= laFu
     order by p.db, p.ts, p.part, c.timestamp desc
$!
   call sqlSel
   cFet = 0
   cInc = 0
   cFul = 0
   cOk  = 0
   cArc = 0
   cErr = 0
   lEla = 0
$|
   say time() 'first'
   $@forWith cc $@¢
    cFet = cFet + 1
    if $ICTYPE = 'F' then
        cFul = cFul + 1
    else if $ICTYPE = 'I' then
        cInc = cInc + 1
    else
        iterate
    arc = dsnArc($DSNAME)
    if arc = 'ok' then do
       cOk = cOk + 1
       end
    else do
        if arc = 'arc' then
            cArc = cArc + 1
        else
            cErr = cErr + 1
        $$- left($DB, 8) left($TS,8) right($PART, 4) $*+
             $LAFU $ICTYPE right($DSNUM, 4) left($DSNAME,46) arc
        end
    if time('e') > lEla then do
        say time() cFet 'fet,' cInc 'inc,' cFul 'ful,' ,
                 cOk 'dsnOK,' cArc 'arc,' cErr 'err,' $DB $TS
        lEla = time('e') + 10
        end
    $!
say time() cFet 'fetch,' cInc 'incremental,' cFul 'full,' ,
                 cOk 'dsn ok,' cArc 'archived,' cErr 'errors'
call sqlDisconnect
$#out                                              20130101 10:50:54
$#out                                              20130101 10:50:21
$#out                                              20130101 10:45:54
$#out                                              20130101 10:43:27
*** run error ***
tsoAlloc rc 12 for alloc dd()  DSN('DSN.CATOPTRE.OUT')
$#out                                              20130101 10:33:10
$#out                                              20130101 10:32:02
$#out                                              20130101 10:28:01
}¢--- A540769.WK.REXX.O13(CAX) cre=2012-11-14 mod=2013-05-27-12.32.46 A540769 ---
/* rexx ----------------------------------------------------------------
  Credit Suisse line commands in RCQ                      walter 19.4.13
     c1 : db2 catalog rows for this line
     cx : db2 catalog rows for all lines of currently displayed list
     rts or r1: realTimeStats rows for this line
     rx : realTimeStats rows for all lines of currently displayed list
     The above commands show their result in an editSession
         you find the selection path and sql at the bottom
         within this editSession the same commands act as editMacros
     $br or $ed: browse or edit table on this line with fileAid

  editMacros
     cx in command line: show data as table (one row a line)
     c1 in command line and cursor on target line:
         show data for selected line, one column a line
     rx in command line: show related realTimeStats as table
     rts or r1 in command line and cursor on target line:
         show realTimeStats related to selected line, one column a line
     the above editMacros allow arguments to select related db2 objects
         e.g. cx pk: related packages, cx ik: related index keys
     the syntax for the argumnts is richer: ct* (':' ct)?
         ct: abbreviations for db2 catalog tables (lowercase|)
           c co=syscopy db i ik=indexKey ip pk pkd ri rt t tg tp ts v vd
         ct before the colon
           first: target catalog table
           following: intermediates on the new selection path
         ct after the colon: starting point in the old selection path
     $br or $ed: browse or edit table on cursor line with fileAid
                                                                    {u
     ux: erstellt utilities/rebinds fuer angezeigte Objekte
       macro arguments: Liste von Utilities, abkuerzung erlaubt:
         copy loaddummy=dummy reorg runstats
         rebind=rbind rebuild=build recover=rcover
                                                                    {
  help: http://chsa4212/host/db2wiki/pmwiki.php?n=Main.CaCatCx

history
19. 4.13 walter: $ed,$br,rts=r1 +rx, help fuer cx etc. ohne ux, errors
------------------------------*/ /*--- end of help ---------------------
17. 4.13 walter: fix relation c <-> t v
 4. 4.13 walter: fix copy parallel
 3. 4.13 walter: fix c1/r1 auf ts, relationship tg -> t v
 ?. 3.13 walter: neu geschrieben
----------------------------------------------------------------------*/
parse arg who, a1, a2, a3
m.cmd = who
call errReset 'hi'
m.err.helpOpt = if(translate(left(who, 1)) = 'U', 'u', 'e')
m.debug = 0
/* say 'A540769.WK.REXX(cax)' who '('a1',' a2',' a3')--------------'*/
isEdit = 0
if a1 == '' then
    if m.err.ispf then
        isEdit = adrEdit('macro (a1) PROCESS', '*') == 0
if pos('?', who a1 ) > 0 then
     exit help()
call utIni
call pipeIni
call tkrIniDb2Cat
if who == 'CX'| who == 'C1' then do
    if isEdit then
        return catEditMacro('=', who == 'CX', a1)
    else
        return catLineCmd('=', who == 'CX')
    end
else if who = 'RX' | who == 'R1' | who == 'RTS' then do
    if isEdit then
        return catEditMacro('r', who == 'RX', a1)
    else
        return catLineCmd('r', who == 'RX')
    end
else if who == 'UX' | who == 'U1' then do
    if isEdit  then
        return uxEditMacro('ux', a1, who == 'UX')
    else if a1 == '' then
        return uxLineCmd()
    end
else if who == '$ED' then
    return fileAid(isEdit, 'edit')
else if who == '$BR' then
    return fileAid(isEdit, 'browse')
else
    call errHelp 'command='who 'args='a1 'edit='isEdit 'not implemented'
exit

catLineCmd: procedure expose m.
parse arg ty, all
    m='cat'
    if all then
        sq = anaSqlAll(m)
    else
        sq = anaSqlThis(m)
    if ty == 'r' then do
        parse var sq sTys ':'
        sTy = word(sTys, 1)
        sq = if(pos('i', sTy) > 0, 'ri', 'rt') sq
        end
    else if ty \== '=' then
        call err 'bad ty' ty 'in catLineCmd'
    parse var sq sTys ':' wh
    sTy = word(sTys, 1)
    call sqlConnect m.m.dbSy
    call pipe '+F', fEdit('::v')
    call out '    *' m.m.func '? = help, PF3 = zurück zu' ,
              'rcQuery' m.m.hTb m.m.hOp
    call sqlCatTb sTy, tkrWhere(,sq), tkrTable(, sTy, 'o'), all
    call pipe '-'
    call sqlDisconnect
    return 0
endProcedure catLineCmd

catEditMacro: procedure expose m.
parse arg ty, all, nPa ':' sPa
    m='cat'
    call anaEdit m, all
    if nPa = '' then
        nPa = word(m.m.path, 1)
    else do px=1 to words(nPa)
        if tkrTable(tkr, word(nPa, px), , '') == '' then
            call err 'i}'word(nPa, px) 'not a table in path' arg(3)
        end
    if sPa = '' then
        sPa = word(m.m.path, 1)
    else if \ all then
        call err 'i}startPath :'sPa 'not allowed for' m.m.func
    px = wordPos(sPa, m.m.path)
    if px < 1 then
        call err 'i}start' sPa 'not in path' m.m.path 'args:' nPa':'sPa
    if ty == 'r' then
       nPa = if(pos('i', word(nPa, 1)) > 0, 'ri', 'rt') nPa
    else if ty \== '=' then
       call err 'bad ty' ty
    if all then do
        sx = m.m.sql.0 + 1 - px
        sq = m.m.sql.sx
        parse var sq sFr sTb sAl . 'where' wh
        if sAl \== sPa then
            call err 'i}start' sPa '<> al' sAl 'in' sq
        sTb = tkrTable(tkr, sPa, , '')
        if '' == sTb then
            call err 'i}start' sPa 'not a table'
        wh = strip(wh)
        if abbrev(wh, m.sTb.cond) then
            wh = strip(substr(wh, length(m.sTb.cond)+1))
        else
            call err sPa 'cond' m.sTb.cond 'does not start where:' wh
    /*  if sx > 1 then do
            pPa = word(m.m.path, px+1)
            if m.tkr.sPa.pPa == 'relation' then
                ky = tkr'.'sPa'.'pPa'.LEF'
            else if m.tkr.pPa.sPa == 'relation' then
                ky = tkr'.'pPa'.'sPa'.RIG'
            else
                call err 'relation' sPa'.'pPa 'not declared'
            if abbrev(wh, m.ky.cond) then
                wh = strip(substr(wh, length(m.ky.cond)+1))
            else if m.ky.cond <> '' then
                call err sPa 'cond' m.ky.cond 'does not start where:' wh
            end ?????? falsche Richtung? */
        if px > 1 then do
            pPa = word(m.m.path, px-1)
            if symbol('m.tkr.t2t.sPa.pPa') == 'VAR' then
                ky = m.tkr.t2t.sPa.pPa'.LEF'
            else if symbol('m.tkr.t2t.pPa.sPa') == 'VAR' then
                ky = m.tkr.t2t.pPa.sPa'.RIG'
            else
                call err 'relationShip' sPa'.'pPa 'not declared'
            if abbrev(wh, m.ky.cond) then
                wh = strip(substr(wh, length(m.ky.cond)+1))
            else
                call err sPa 'cond' m.ky.cond 'does not start where:' wh
            end
        do lx = sx-1 by -1 to 1
            wh = wh m.m.sql.lx
            end
        bc = m.m.sql.0 - 1
        do bx = length(wh) by -1 to 1 while bc > sx - 1
            b1 = substr(wh, bx, 1)
            if b1 = ')' then
                bc = bc - 1
            else if b1 \== ' ' then
                leave
            end
        wh = strip(left(wh, bx))
        end
    else do
        px = 1
        sKy = mGet(tkrTable(, sPa)'.PKEY')
        wh = list2where(m'.LST', sKy)
        end
    nTy = word(nPa, 1)
    call sqlConnect m.m.dbSy
    b = jBuf()
    call pipe '+F', b
    call out m.m.help
    call sqlCatTb nTy, tkrWhere(, nPa sPa':' wh),
                  , , all,
                  , if(all, subWord(m.m.path, px+1))
    call pipe '-'
    call adrEdit 'delete .zf .zl'
    call adrEdit 'reset'
    do bx=1 to m.b.buf.0
        li = m.b.buf.bx
        call adrEdit 'line_after .zl = (li)'
        end
    call sqlDisconnect
    call adrEdit 'locate .zf'
    return 1
endProcedure catEditMacro

fileAid: procedure expose m.
parse arg isEdit, faFun
    m='cat'
    if isEdit then do
        call anaEdit m, 1
        l = m'.LST'
        m.l.0 = 0
        call anaList m, tkrTable(, word(m.m.path, 1)), 0
        if m.l.0 = 1 & m.l.alias = 't' then
            return callFA(faFun, m.m.dbSy, m.l.1.2,  m.l.1.1)
        call err 'i}not a single table but' m.l.0 m.l.alias
        end
    else do
        sq = anaSqlThis(m)
        if m.m.lTb == 't' then
            return callFA(faFun, m.m.dbSy, m.m.lNm, m.m.lQu)
        call err 'i}not a single table but' m.m.lTb
        end
endProcedure fileAid

callFA: procedure expose m.
parse arg faFun, dbSy, tb, cr
 /* call adrIsp "SELECT CMD(rCallFad" faFun dbSy tb cr")" ,
                                  "NEWAPPL(FD49) PASSLIB"  */
    call rCallFad faFun dbSy tb cr
    return 0
endProcedure callFAD

uxLineCmd: procedure expose m.
    m='ux'
    call anaSql m
    call sqlConnect m.m.dbSy
    fe = jOpen(fEdit(), '>')
    call jWrite fe, 'who' sysvar(sysnode) m.m.dbSy userid() m.m.screen
    call jWrite fe, 'sel' cTy m.m.hCr'.'m.m.hNm
    call sql2St 'select creator cr, name tb, dbName db, tsName ts',
             genSql(m, 't'), sq
    if m.sq.0 <> m.m.lines then
        say 'warning: select' m.sq.0 'rows <->' m.m.lines 'on screen',
               'this might be a program ERROR|'
    do sx=1 to m.sq.0
        call jWrite fe, '  ts' left(m.sq.sx.db'.'m.sq.sx.ts,18) ,
                            't' m.sq.sx.cr'.'m.sq.sx.tb
        end
    call sqlDisconnect
    call jCLose(fe)
    return 0
endProcedure uxLineCmd

anaSqlAll: procedure expose m.
parse arg m
    call getInfo m
    m.m.predFlds = '? ? HNM HCR HQU HPKVERS HROVERS'
    return anaSql(m, m.m.hTb, m.m.hOp)
endProcedure anaSqlAll


anaSqlThis: procedure expose m.
parse arg m
    call getInfo m
    m.m.predFlds = '? ? LNM LQU PART LPANM COLLECTION CONTOKEN VERSION'
    ty = m.m.lTb
    if ty == 'c' & m.m.hTb == 'i' then
        return anaPred(m, 'ik', 'ikk.colName', 'creator', , 'name')
    else if ty == 'c' & wordPos(m.m.hTb, 't v') > 0 then
        return anaPred(m, 'c', 'name', 'tbCreator', , 'tbName')
    else if ty == 'ip' then
        return anaPred(m, 'ip', 'ixname', 'ixCreator', 'partition')
    else if ty == 'pk' then
        return anaPred(m, 'pk', 'name', 'owner',,, 'collid',
             , 'conToken', 'version')
    else if ty == 'tg' & m.m.hTb == 't' then
        return anaPred(m, 'tg', 'name', 'tbOwner', , 'tbName')
    else if ty == 'ts' then
        return anaPred(m, 'ts', 'name', 'dbName')
    else if ty == 'tp' then
        return anaPred(m, 'tp', 'tsname', 'dbName', 'partition')
    else
        return anaSql(m, ty, 'd')
endProcedure anaSqlThis

anaSql: procedure expose m.
parse arg m, ty, op
    tyOp = ty':'op
    if ty == 'c' then
        sq =  anapred(m, 'c', 'name', 'tbCreator')
    else if tyOp == 'db:i' then
        sq =  anapred(m, 'i', 'dbName')
    else if tyOp == 'db:t' | tyOp = 'db:v' then
        sq = anapred(m, 't', 'dbName')
    else if tyOp == 'db:ts' then
        sq = anapred(m, 'ts', 'dbName')
    else if ty = 'db' then
        sq = anapred(m, 'db', 'name')
    else if tyOp == 'i:c' then
        sq = anaPred(m, 'ik', 'name', 'creator')
    else if tyOp == 'i:pl' then
        sq = anaPred(m, 'ip', 'ixName', 'ixCreator')
    else if ty == 'i' then
        sq = anaPred(m, 'i', 'name', 'creator')
    else if ty == 'pk' then
        sq = anaPred(m, 'pk', 'name', 'owner', 'collid', 'version')
    else if tyOp == 't:i' then
        sq = anaPred(m, 'i', 'tbName', 'tbCreator')
    else if tyOp == 't:tg' then
        sq = anaPred(m, 'tg', 'tbName', 'tbOwner')
    else if ty == 't' then
        sq = anaPred(m, 't', 'name', 'creator')
    else if ty == 'tg' then
        sq = anaPred(m, 'tg', 'name', 'tbOwner')
    else if tyOp == 'ts:pl' then
        sq = anaPred(m, 'tp', 'tsName', , 'dbName')
    else if ty == 'ts' then
        sq = anaPred(m, 'ts', 'name', 'creator', 'dbName')
    else if ty == 'v' then
        sq = anaPred(m, 'v', 'name', 'creator')
    else
        call err 'type:opt' tyOp 'not implemented yet'
    if tyOp == 'i:d' then
        return 'ip' sq
    else if tyOp == 'ts:d' then
        return 'tp' sq
    if op == 'l' | op == 'd' | op == 'pl' | tyOp = 'i:c' then
        return sq
    else
        return op sq
endProcedure anaSql

anaPred: procedure expose m.
parse arg m, ty
    sq = ''
    do ax=3 to arg()
        f1 = word(m.m.predFlds, ax)
        if f1 \== '' then
            sq = strip(sq tkrPred( , ty, arg(ax), m.m.f1))
        end
    return ty':' substr(sq, 5)
endProcedure anaPred

/*--- copy tkr begin ---------------------------------------------------
         table key relationship
----------------------------------------------------------------------*/
tkrTable: procedure expose m.
parse arg m, key, wh
    if m == '' then
        m = tkr
    dx = pos('.', key)
    if dx < 1 then
        mt = m'.t.'key
    else
        mt = key
    if m.mt \== 'table' then
        if arg() >= 4 then
            return arg(4)
        else
            call err 'not a table' key', mt' mt'->'m.mt
    if wh == '' then
        return mt
    else if wh == 't' then
        return m.mt.table
    else if wh == 'o' then
        return m.mt.order
    else if wh == 'f' then
        return 'from' m.mt.table 'where' m.mt.cond
    else if wh == 'w' then
        return m.mt.cond
    else if wh == 'e' then
        return m.mt.editFun
    else
        call err 'bad what' wh 'in tkrTable('m',' tb',' wh')'
endProcedure tkrTable

tkrWhere: procedure expose m.
parse arg m, pa ':' wh
    if m == '' then
        m = tkr
    pEx = tkrPath(m, pa)
    m.m.path = pEx
    sq = wh
    do px=words(pEx)-1 by -1 to 1
        tt = word(pEx, px)
        tf = word(pEx, px+1)
        if symbol('m.m.t2t.tt.tf') == 'VAR' then
             parse value m.m.t2t.tt.tf 'LEF RIG' with rl fTo fFr
        else if symbol('m.m.t2t.tf.tt') == 'VAR' then
             parse value m.m.t2t.tf.tt 'RIG LEF' with rl fTo fFr
        else
            call err 'no relationShip to' tt 'from' tf 'path' pEx,
                     't.f' m.m.tt.tf 'f.t' m.m.tf.tt
        if m.rl.fFr.sql1 \== '' then
            sq = m.rl.fFr.sql1 sq')'
        else do
            kc = min(mGet(m.rl.lef'.'0), mGet(m.rl.rig'.'0))
            sq = '('mCatFT(m.rl.fTo, 1, kc, '%qn, %s')')' ,
                 'in (select' mCatFT(m.rl.fFr, 1, kc, '%qn, %s'),
                 tkrTable(m,mGet(m.rl.fFr'.'table),'f') sq')'
            end
  /*    kc = min(mGet(m.rl.lef'.'0), mGet(m.rl.rig'.'0))
        s2 = '('mCatFT(m.rl.fTo, 1, kc, '%qn, %s')') in'
        if m.rl.fFr.special \== '' then
            sq = s2 m.rl.fFr.special sq')'
        else
            sq = s2 '(select' mCatFT(m.rl.fFr, 1, kc, '%qn, %s'),
             tkrTable(m,mGet(m.rl.fFr'.'table),'f') sq')'
        sq = '('mCatFT(m.rl.fTo, 1, kc, '%qn, %s')')' ,
             'in (select' mCatFT(m.rl.fFr, 1, kc, '%qn, %s'),
             tkrTable(m,mGet(m.rl.fFr'.'table),'f') sq')'    */
        end
    return sq
endProcedure tkrWhere

tkrPath: procedure expose m.
parse arg m, sPa
    res = word(sPa, 1)
    do sx=2 to words(sPa)
        p1 = tkrPat1(m, word(sPa, sx-1), word(sPa, sx))
        if p1 == '' then
            call err 'no path to' word(sPa, sx-1) 'from' word(sPa, sx)
        res = res subWord(p1, 2)
        end
    if m.debug then
        say '???' sPa '==path==>' res
    return res
endProcedure tkrPath

tkrPatChk: procedure expose m.
parse arg m, pa
    p2 = space(pa, 1)
    do bx=1 to words(m.m.pathBad)
        b1 = word(m.m.pathBad, bx)
        if abbrev(b1, 1) then do
            wx = wordPos(substr(b1, 2), p2)
            if wx > 1 & wx < words(p2) then
                return ''
            end
        else if pos('|', b1) > 0 then do
            parse var b1 t1 '|' t2
            wx = wordPos(t1, p2)
            if wx > 1 & wx < words(p2) then
                if word(p2, wx-1) \== t2 & word(p2, wx+1) \== t2 then
                    return ''
            end
        else if pos('-', b1) > 0 then do
            b2 = translate(b1, ' ', '-')
            if pos(' 'b2' ', ' 'p2' ') > 0 then
                return ''
            b3 = ''
            do wx=1 to words(b2)
                b3 = word(b2, wx) b3
                end
            if pos(' 'b3' ', ' 'p2' ') > 0 then
                return ''
            end
        else
            call err 'bad pathBad word' b1 'in' m.m.pathBad
        end
    return strip(p2)
endProcedure tkrPatChk

/*--- return path to tt from tf, fail if not unique ------------------*/
tkrPat1: procedure expose m.
parse arg m, tt, tf
    m.m.pathRes.0 = 0
    call tkrPat3 m, tt, tf
    if m.m.pathRes.0 = 1 then
        return m.m.pathRes.1
    else if m.m.pathRes.0 < 1 then
        call err 'no path to' tt 'from' tf
    else if m.m.pathRes.0 > 1 then
        call err 'multiple ('m.m.pathRes.0') paths to' tt 'from' tf,
                mCat(m'.'pathRes, '\n%s%qn\n%s')
endProcedure tkrPat1

/*--- add minimal paths to tt from tf to pathRes ---------------------*/
tkrPat2: procedure expose m.
parse arg m, tt, tf
    call tkrPat3 m, tt, tf
    if m.debug then do
       say '???' tt '<' tf '--pat2-->' m.m.pathRes.0 'paths'
       do px=1 to m.m.pathRes.0
           say '???'px'???' m.m.pathRes.px
           end
       end
    return
endProcedure tkrPat2

/*--- add minimal paths to tt from tf to pathRes ---------------------*/
tkrPat3: procedure expose m.
parse arg m, tt, pa1 paR
     pa = tkrPatChk(m, pa1 paR)
     if pa == '' then
         return
     if tt = pa1 then do
         /* ok target reached, is there already a shorter path? */
         do px=1 to m.m.pathRes.0
             if wordsIsSub(pa, m.m.pathRes.px) then
                 return
             end
         /* remove all longer paths */
         qx = 0
         do px=1 to m.m.pathRes.0
             if wordsIsSub(m.m.pathRes.px, pa) then
                 iterate
             qx = qx+1
             m.m.pathRes.qx = m.m.pathRes.px
             end
         /* add new path */
         qx = qx+1
         m.m.pathRes.qx = pa
         m.m.pathRes.0  = qx
         return
         end
                  /* use direct connection if it exists */
     if     symbol('m.m.t2t.tt.pa1') == 'VAR' ,
          | symbol('m.m.t2t.pa1.tt') == 'VAR' then do
         call tkrPat2 m, tt, tt pa1 paR
         return
         end
     tb1 = tkrTable(m, pa1)
                  /* try all connections from pa1 */
     do rx=1 to words(m.tb1.rels)
          r1 = word(m.tb1.rels, rx)
          if mGet(mGet(m.r1.lef'.TABLE')'.ALIAS') == pa1 then
              a1 = mGet(mGet(m.r1.rig'.TABLE')'.ALIAS')
          else if mGet(mGet(m.r1.rig'.TABLE')'.ALIAS') == pa1 then
              a1 = mGet(mGet(m.r1.lef'.TABLE')'.ALIAS')
          else
              call err 'relationship' tb1 'not connecting' pa1
          if wordPos(a1, pa1 paR) > 0 then
              iterate
          call tkrPat2 m, tt, a1 pa1 paR
          end
     return
endProcedure tkrPat3

wordsIsSub: procedure expose m.
parse arg long, short
    sW = words(short)
    if sW = 0 then
        return 1
    lW = words(long)
    if sW > lW then
        return 0
    else if sW = lW then
        return space(long, 1) == space(short, 1)
    if word(long, lW) \== word(short, sW) then
        return 0
    lX = 1
    do sX=2 to sW-1
        lx = wordPos(word(short, sX), long, lX+1)
        if lX <= 1 | sW-sX > lW-lX then
            return 0
        end
    return 1
endProcedure wordsIsSub

tkrType: procedure expose m.
parse arg m, col
    if m == '' then
        m = tkr
    upper col
    if wordPos(col, m.m.numeric) > 0 then
        return 'n'
    cNQ = substr(col, 1+pos('.', col))
    if wordPos(cNQ, m.m.numeric) > 0 then
        return 'n'
    if wordPos(cNQ, m.m.hex) > 0 then
        return 'x'
    return 'c'
endProcedure tkrType


tkrValue: procedure expose m.
parse arg m, al, col, val
    if m == '' then
        m = tkr
    if pos('.', col) < 1 then
        if al == '' then
            call err 'no alias'
        else
            col = al'.'col
    tt = tkrType(m, col)
    if tt == 'c' then
        return quote(val, "'")
    if tt == 'n' then
        if datatype(val, 'n') then
            return val
        else
            call err 'not numeric' val 'for col' col
    if tt == 'x' then
        if verify(val, '0123456789abcdefABCDEF', 'n') < 1 then
            return "x'"val"'"
        else
            call err 'not a hex value' val 'for col' col
    call err 'unsupport tkrType' tt
endProcedure tkrValue

tkrPred: procedure expose m.
parse arg m, al, col, va
    if col == '-' | col == '' | va == '*' then
        return ''
    if m == '' then
        m = tkr
    if pos('.', col) < 1 then
        if al == '' then
            call err 'no alias'
        else
            col = al'.'col
    va = tkrValue(m, , col, va)
    if abbrev(va, "'") then
        if verify(va, '%_', 'm') > 0 then
            return 'and' col 'like' va
    return 'and' col '=' va
endProcedure tkrPred

tkrIniDb2Cat: procedure expose m.
parse arg m
    if m == '' then
        m = tkr
    if m.m.ini == 1 then
        return
    m.m.ini = 1
    y = 'sysIbm.sys'
    mC = tkrIniT(m, 'c'   y'Columns', 'tbCreator tbName name',
                                  , 'tbCreator tbName colNo')
    mCo =tkrIniT(m, 'co' y'Copy',
        , 'dbName tsName dsNum instance timestamp' ,
                   , 'co.dbName, co.tsName, co.timestamp desc')
    call tkrIniK m, mCo, '1plus', 'dbName tsName dsNum instance' ,
                 'timestamp icType start_Rba dsName'
    mDb =tkrIniT(m, 'db' y'Database', 'name')
    call tkrIniK m, mDb, 'id iu', 'DBID'
    mI = tkrIniT(m, 'i'   y'Indexes', 'creator name' ,
                          , 'tbCreator, tbName, creator, name')
    call tkrIniK m, mI, 't i', 'tbCreator tbName'
    call tkrIniK m, mI, 'db1 iu', 'dbName indexSpace'
    call tkrIniT m, 'ik'                                              ,
                     'sysibm.sysIndexes ik'                           ,
                       'left join sysibm.sysKeys ikK'                 ,
                          'on ikK.ixCreator = ik.creator'             ,
                            'and ikK.ixName=ik.name'                  ,
                        'left join sysibm.sysColumns ikC'             ,
                          'on ikC.tbCreator = ik.tbCreator'           ,
                            'and ikC.tbName = ik.tbName'              ,
                            'and ikC.colNo = ikK.colNo'               ,
                   , 'creator name ikK.colSeq'                      ,
                   , 'ik.tbCreator, ik.tbName, ik.creator'            ,
                     || ', ik.name, ikK.colSeq', , 'sqlCatIxKeys'
    call tkrIniT m, 'ip' y'indexPart', 'ixCreator ixName partition'
    mPk =tkrIniT(m, 'pk' y'Package', 'location collid name conToken' ,
               , 'location, collid, name, pcTimestamp desc')
    call tkrIniK m, mPk, '1plus',
                     , 'location collid name contoken version type'
    mPkd=tkrIniT(m, 'pkd' y'PackDep',
                    , 'dLocation dCollid dName dConToken')
    call tkrIniK m, mPkd, 'b', 'bQualifier bName'
    call tkrIniT m, 'ri' y'IndexSpaceStats' ,
                          , 'creator name partition' ,
                          , 'creator name instance partition' ,
                          , , 'sqlCatIxStats'
                        /*  'dbid isobid partition instance' , */
    mRT= tkrIniT(m, 'rt' y'TableSpaceStats' ,
                      , 'dbId psId partition instance',
                      , 'dbName name instance partition' ,
                      , , 'sqlCatTSStats')
    call tkrIniK m, mRT, '1plus', 'dbId psId partition instance' ,
                                  'dbName name'
    call tkrIniK m, mRT, 'nm u', 'dbName name partition instance'
    mT = tkrIniT(m, 't'   y'Tables', 'creator name',
                   , , "t.type not in ('A', 'V')", 'sqlCatTables')
    call tkrIniK m, mT, 'db i', 'dbName tsName'
    call tkrIniK m, mT, '1plus', 'creator name dbName tsName'
    mTg =tkrIniT(m, 'tg' y'Triggers', 'schema name seqno',
                                   , 'tbOwner, tbName, schema, name')
    call tkrIniK m, mTg, 'tb', 'tbOwner tbName'
    call tkrIniT m, 'tp' y'TablePart', 'dbName tsName partition'
    mTs =tkrIniT(m, 'ts' y'TableSpace', 'dbName name')
    call tkrIniK m, mTs, 'id', 'dbId psId'
    call tkrIniT m, 'v'   y'Tables', 'creator name', , "v.type = 'V'"
    mVD =tkrIniT(m, 'vd' y'ViewDep', 'dCreator dName')
    call tkrIniK m, mVd, 'b', 'bCreator bName'
    call trkIniR m, 'c', 'v t'
    call trkIniR m, 'co', 'ts tp rt.nm'
    p0sql = '(SelecT smallInt(0) p FroM sysibm.sysDummy1' ,
            'union all select smallInt(32767)p FroM sysibm.sysDummy1)p0'
    r1 = tkrRel(m, 'co-tp')
    m.r1.rig.sql1 = '(co.dbName, co.tsName, co.dsNum)' ,
          'in (select tp.dbName, tp.tsName' ,
              ', min(tp.partition, p0.p)' ,
            'from sysibm.sysTablePart tp,' p0Sql 'where'
    r2 = tkrRel(m, 'co-rt')
    m.r2.rig.sql1 = '(co.dbName, co.tsName, co.dsNum, co.instance)' ,
          'in (select rt.dbName, rt.name' ,
                  ', min(rt.partition, p0.p), rt.instance' ,
                'from sysibm.sysTablespaceStats rt,' p0Sql 'where'
    call trkIniR m, 'db', 'ts t.db tp rt co i.db1'
    call trkIniR m, 'i.t', 't'
    call trkIniR m, 'i', 'ik ip'
    call trkIniR m, 'pk', 'pkd'
    call trkIniR m, 'pkd.b', 'i', "pkd.bType in ('I')"
    call trkIniR m, 'pkd.b', 't v',
                    , "pkd.bType in ('A', 'G', 'M', 'S', 'T', 'V')"
    call trkIniR m, 'pkd.b', 'ts', "pkd.bType in ('P', 'R')"
    call trkIniR m, 'ri', 'i ip'
    call trkIniR m, 'rt', 'ts.id'
    call trkIniR m, 'rt.nm', 'tp'
    call trkIniR m, 'tg.tb', 'v t'
    call trkIniR m, 'ts', 't.db tp'
    call trkIniR m, 'vd.b', 't', "vd.bType in ('G', 'M', 'T', 'V')"
    call trkIniR m, 'vd', 'v', "vd.dType in ('V', 'M')"
    m.m.pathBad = '1c 1co 1db 1tg pkd|pk vd|v pkd-i-t vkd-i-t'
    m.m.numeric = 'PARTITION DBID INSTANCE PSID ISOBID DSNUM'
    m.m.hex     = 'CONTOKEN'
    return
endProcedure tkrIniDb2Cat

tkrIniT: procedure expose m.
parse arg m, ty tb, cols, ord, wh, eFun
    mt = m'.t.'ty
    if symbol('m.mt') == 'VAR' then
        call err 'duplicate table' ty tb ord 'old' mt'->'m.mt
    m.mt = 'table'
    m.mt.alias = ty
    m.mt.table = if(words(tb) == 1, tb ty, tb)
    m.mt.uKeys = ''
    m.mt.oKeys = ''
    m.mt.rels  = ''
    m.mt.pKey  = tkrIniK(m, mt, '1 iu', cols)
    if ord == '' then
        m.mt.order = mCat(m.mt.pKey, '%qn, %s')
    else if pos(',', ord) < 1 & pos('.', ord) < 1 then
        m.mt.order = ty'.'repAll(space(ord, 1), ' ', ',' ty'.')
    else
        m.mt.order = ord
    m.mt.cond = wh || copies(' and', wh \== '')
    m.mt.editFun = eFun
    return mt
endProcedure tkrIniT

tkrIniK: procedure expose m.
parse arg m, tb, nm oo, cols
    if pos(':', cols) > 0 | pos(',', cols) > 0 then
        call err 'deimplemented iiKey:' cols
    mk = m'.k.'m.tb.alias'.'nm
    if symbol('m.mk') == 'VAR' then
        call err 'duplicate key' tb nm 'old' mk'->'m.mk
    m.mk = 'key'
    al = m.tb.alias
    m.mk.table = tb
    m.mk.name = m.tb.alias'.'nm
    m.mk.opt   = oo
    m.mk.0 = words(cols)
    do cx=1 to m.mk.0
        c1 = word(cols, cx)
        dx = pos('.', c1)
        if dx < 1 then do
            m.mk.cx = al'.'c1
            m.mk.cx.col = translate(c1)
            end
        else do
            m.mk.cx = c1
            m.mk.cx.col = translate(substr(c1, dx+1))
            end
        end
    m.mk.colList = mCat(mk, '%qn, %s')
    if pos('i', oo) > 0 then
        m.tb.uKeys = strip(m.tb.uKeys mk)
    else
        m.tb.oKeys = strip(m.tb.oKeys mk)
return mk
endProcedure tkrIniK

trkIniR: procedure expose m.
parse arg m, le, aRi, leCo, riCo
    le = tkrKey(m, le)
    lTb = m.le.table
    do rx=1 to words(aRi)
        ri = tkrKey(m, word(aRi, rx))
        rTb = m.ri.table
        ky = m'.r.'m.lTb.alias'-'m.rTb.alias
        if symbol('m.ky') == 'VAR' then
            call err 'duplicate relationShip' ky 'old' m.ky
        m.ky = 'relationShip'
        m.ky.lef = le
        m.ky.lef.sql1 = ''
        m.ky.lef.cond = leCo || copies(' and', leCo \== '')
        m.lTb.rels = m.lTb.rels ky
        m.ky.rig = ri
        m.ky.rig.cond = riCo || copies(' and', riCo \== '')
        m.ky.rig.sql1 = ''
        m.rTb.rels = m.rTb.rels ky
        lr = m'.T2T.'m.lTb.alias'.'m.rTb.alias
        if symbol('m.lr') == 'VAR' then
            call err 'duplicate relationShip' ky 'old' m.lr
        rl = m'.T2T.'m.rTb.alias'.'m.lTb.alias
        if symbol('m.rl') == 'VAR' then
            call err 'duplicate inverse relationShip' ky 'old' m.rl
        m.lr = ky
        end
    return ky
endProcedure trkIniR


tkrKey: procedure expose m.
parse arg m, key
    if m == '' then
        m = tkr
    dx = pos('.', key)
    if dx < 1 then do
        mt = m'.t.'key
        if m.mt == 'table' then
            return m.mt.pKey
        ee = 'not a table' key':' mt'->'m.mt
        end
    dx = pos('.', key, dx+1)
    if dx < 1 then do
        mk = m'.k.'key
        if m.mk == 'key' then
            return mk
        ee = 'not a key' key', mk' mk'->'m.mk
        end
    if m.key == 'key' then
        return key
    ee = 'not a key' key'-->'m.key
    if arg() >= 3 then
        return arg(3)
    call err ee
endProcedure tkrKey


tkrRel: procedure expose m.
parse arg m, key
    if m == '' then
        m = tkr
    if m.key == 'relationShip' then
        return key
    mr = m'.r.'key
    if m.mr == 'relationShip' then
        return mr
    call err  'not a relationship' key'-->'m.key',' m.mr
endProcedure tkrRel
            return mr
getInfo: procedure expose m.
parse arg m
     if 0 then do /* debug variable in pool ???? */
         ll = 'subsys objtype qual objname funcname' ,
              'entity entvers' ,
              'table relation entqual user user2 rcqmcase',
              'hEntity hUser hTable'
         do lx=1 to words(ll)
             vv =           word(ll, lx)
             x = value(vv, 'valueBefore')
             call adrIsp 'vget ('vv') asis', '*'
             say '?? vget rc='rc',' vv'='value(vv)
             end
         end
     call adrIsp 'vget (subsys rcqmcase funcName' ,
                        ' htable relation hEntity' ,
                        'hUser entQual user2 entVers entVers2' ,
                        'objtype qual objname) shared'
     m.m.dbSy = subsys
     m.m.qmCase = rcQmCase
     m.m.func = funcName
     m.m.hTb = hTable
     m.m.hOp = relation
     m.m.hNm = hEntity
     m.m.hCr = hUser
     m.m.hQu = entQual
     m.m.hGr = user2
     m.m.hPkVers = entVers
     m.m.hRoVers = entVers2
     m.m.lTb = objType
     m.m.lqu = qual
     m.m.lNm = objName
     call anaScreen m
     m.m.lTb = translate(m.m.lTb, m.mAlfLc, m.malfUc)
     m.m.hTb = translate(m.m.hTb, m.mAlfLc, m.malfUc)
     m.m.hOp = translate(m.m.hOp, m.mAlfLc, m.malfUc)
     if 0 then do
        ww = screen curPos curLine curWord lineF lines ,
             dbSy lTb lQu lNm func hTb hOp wh hNm hCr hQu hGr
        do wx=1 to words(ww)
            w1 = word(ww, wx)
            if wx <= 11 then
                say left(w1, 10) m.m.w1'.'
            else
                say left(w1, 10) m.m.w1.lb'='m.m.w1'.'
            end
        end
     return
endProcedure getInfo

anaScreen: procedure expose m.
parse arg m
    call adrIsp 'VGET (' zScreen zScreenW zScreenC zScreenI ')'
    zScreenW = 80 /* breite Screens sind doch nicht so breit????*/
    m.m.screen = zScreen
    lx = zScreenC - ((zScreenC)//zScreenW) + 1
    m.m.curPos = zScreenC || 'L' || ((zScreenC)%zScreenW+1) ,
                          || 'C' || ((zScreenC)//zScreenW+1)
    m.m.curLine = substr(zScreenI, lx, zScreenW)
    sep = ' '
    do wx=zScreenC+1 to lx+zScreenW-2 ,
        while pos(substr(zScreenI, wx, 1), sep) > 0
        end
    do wx=wx by -1 to lx+1 ,
       while pos(substr(zScreenI, wx-1, 1), sep) = 0
       end
    do wy=wx to lx+zScreenW-2 ,
        while pos(substr(zScreenI, wy, 1), sep) = 0
        end
    m.m.curWord = substr(zScreenI, wx, wy-wx)
    call anaHLine m, substr(zScreenI, 1+3*zScreenW, zScreenW),
          , hTb, hOp, wh
    call anaHLine m, substr(zScreenI, 1+4*zScreenW, zScreenW), hNm, hCr
    call anaHLine m, substr(zScreenI, 1+5*zScreenW, zScreenW), hQu, hGr
    l = substr(zScreenI, 6*zScreenW+1, zScreenW)
    scx = 6
    if word(l, 1) == 'Version' then
        l = substr(zScreenI, ass('scx', 7)*zScreenW+1, zScreenW)
    lx = lastPos('LINE', l)
    isFrame = lx < 1
    if isFrame then
        lx = lastPos('FRAME', l)
    if lx < 1 then
        call err 'bad line of clause:' l
    l = substr(l, lx, zScreenW-lx-1)
    if word(l, 3) \== 'OF' then
        call err 'bad line of clause:' l
    m.m.lineF = word(l, 2)
    m.m.lines = word(l, 4)
    scx = scx + 1
    tbOp = translate(m.m.hTb':'m.m.hOp, m.mAlfLc, m.mAlfUc)
    if tbOp = 't:c' | tbOp = 't:tg' | tbOp = 'v:c' then do
        m.m.lPaNm = m.m.hNm
        return
        end
    else if tbOp = 'i:c' then do
        m.m.lPaNm = m.m.hNm
        m.m.lQu = m.m.hCr
        return
        end
    else if tbOp = 'ts:pl' then
        jj = 'tp PART'
    else if tbOp = 'ts:d' then
        jj = 'tp PART'
    else if tbOp = 'i:pl' then
        jj = 'ip PART'
    else if tbOp = 'i:d' then
        jj = 'ip PART'
    else if translate(m.m.lTb) == 'PK' then
        jj = 'pk COLLECTION CONTOKEN'
    else
        return
    m.m.lTb = word(jj, 1)
    if \ isFrame then do
        tiLi = translate(substr(zScreenI, 1+scX*zScreenW, zScreenW),
                         , ' ', '00'x)
        if word(tiLi, 1) <> 'CMD' then
            call err 'CMD not found on line' scx':'tiLi
        do sx = 1+(scX+1) * zScreenW by zScreenW to length(zScreenI)
            if substr(zScreenI, sx, 8) \= '' then
                leave
            end
        cuLi = translate(substr(zScreenI, sx, zScreenW), ' ', '00'x)
        cmd = translate(strip(substr(cuLi, 2, 8)))
        if cmd \= m.m.func then
            call err 'fun' m.m.func '<> cmd' cmd (sx%zScreenW)':' cuLi
        if m.m.lTb = 'pk' then do
            m.m.collection = lineFldOA('COLLEC', tiLi, cuLi)
            m.m.contoken = lineFldOA('CONTOK', tiLi, cuLi)
            m.m.version = lineFldOA('VERSI', tiLi, cuLi)
            if length(m.m.version) > 18 then
                 m.m.version = m.m.version'%'
            end
        else do
            do jx = 2 to words(jj)
                f1 = word(jj, jx)
                m.m.f1 = lineFld(f1, tiLi, cuLi)
                end
            end
        end
    else do
        do sx = 1+(scX) * zScreenW by zScreenW to length(zScreenI)
            if substr(zScreenI, sx, 6) == ' CMD: ' then
                leave
            end
        cuLi = translate(substr(zScreenI, sx, zScreenW), ' ', '00'x)
        if word(cuLi, 1) \== 'CMD:' then
            call err ' CMD: not found'
        cmd = translate(word(cuLi, 2))
        if cmd \= m.m.func then
            call err 'fun' m.m.func '<> cmd' cmd (sx%zScreenW)':' cuLi
        needed = left(' 2345678', words(jj))
        do sx = sx + zScreenW by zScreenW to length(zScreenI) ,
                     while needed <> ''
            do jx = 2 to words(jj)
                f1 = word(jj, jx)
                if abbrev(strip(substr(zScreenI, sx+1, 12)), f1) then do
                    cuLi = substr(zScreenI, sx, zScreenW)
                    cx = pos(':', cuLi)
                    if cx < 10 then
                        call err 'no or bad : in' cuLi
                    if substr(needed, jx, 1) == ' ' then
                        call err 'duplicate' f1
                    else
                        needed = overlay(' ', needed, jx)
                    m.m.f1 = word(substr(cuLi, cx+1, zScreenW), 1)
                    end
                end
            end
        if needed <> '' then
            call err 'still fields needed' needed 'jj:' jj
        end
    return
endProcedure anaScreen

lineFld: procedure expose m.
parse arg f1, tiLi, cuLi
    wx = wordPos(f1, tiLi)
    if wx < 1 then
        call err f1 'not in title' tiLi
    bx = wordIndex(tiLi, wx)
    ex = wordIndex(tiLi, wx+1)
    if ex < 1 then
        return strip(substr(cuLi, bx))
    else
        return strip(substr(cuLi, bx, ex-bx))
endProcedure lineFld

lineFldOA: procedure expose m.
parse arg abb, tiLi, cuLi
    cx = pos(' 'abb, tiLi)
    if cx < 1 then
        return '*'
    return lineFld(word(substr(tiLi, cx+1), 1), tiLi, cuLi)
endProcedure lineFldOA

anaHLine: procedure expose m.
parse arg m, li, f1, f2, f3
    if substr(li, 14, 4) \== '===>' then
        call err 'bad headerline1' li
    m.m.f1.lb = strip(substr(li, 2, 12))
    if m.m.f1 <> strip(substr(li, 19, 20)) then
        call err f1 m.m.f1.lb':' m.m.f1 '<>' strip(substr(li, 19, 20))
    if substr(li, 51, 4) \== '===>' then
        call err 'bad headerline2' li
    m.m.f2.lb = strip(substr(li, 43, 7))
    if f3 == '' then
        vv = strip(substr(li, 56, 20))
    else
        vv = strip(substr(li, 56, 2))
    if m.m.f2 <> vv then
        call err f2 m.m.f2.lb':' m.m.f2 '<>' vv
    if f3 \== '' then do
        if substr(li, 67, 2) \== '=>' then
           call err 'bad headerline3' li
        m.m.f3.lb = strip(substr(li, 61, 6))
        if f3 = 'WH' then
            m.m.f3 = strip(substr(li, 70, 10))
        else if m.m.f3 <> strip(substr(li, 70, 10)) then
          call err f3 m.m.f3.lb':' m.m.f3 '<>' strip(substr(li,70,10))
        end
/*  if f3 == '' then
        say f1 m.m.f1.lb'='m.m.f1',' f2 m.m.f2.lb'='m.m.f2'|'
    else
        say f1 m.m.f1.lb'='m.m.f1',' f2 m.m.f2.lb'='m.m.f2',' ,
                                     f3 m.m.f3.lb'='m.m.f3'|'
*/  return
endProcedure anaHLine

anaEdit: procedure expose m.
parse arg m, all
    m.m.rz   = sysvar(sysnode)
    m.m.user = userid()
    call adrIsp 'VGET (zScreen )'
    m.m.screen = zScreen
    call adrEdit "(cL cC) = cursor"
    m.m.cursor = cL
    call adrEdit "(lxLa) = lineNum .zl"
    sq = ''
    m.m.sql.0 = 0
    m.m.path = ''
    m.m.dbSy  = ''
    do lx=lxLa by -1 to 1
        call adrEdit "(li) = line" lx
        li = strip(li)
        if word(li, 1) = 'order' then
            m.m.sqlOrd = li
        else if word(li, 1) = 'path:' then
            m.m.path = subWord(li, 2)
        else if word(li, 1) = 'dbSys:' then do
            m.m.dbSy = subWord(li, 2)
            leave
            end
        else do
            sq = li sq
            if word(li, 1) = 'from' then do
                call mAdd m'.SQL', strip(sq)
                sq = ''
                end
            end
        end
    m.m.sqlSta = sq
    if lx < 1 | m.m.path == '' | m.m.dbSy == '' then
        call err 'path:' m.m.path 'or dbSys' m.m.dbSy 'not found'
    if m.m.sql.0 <> words(m.m.path) then
        call err m.m.sql.0 'from clauses, but path' m.m.path
    tb1 = tkrTable(, word(m.m.path, 1), ,'')
    if '' == tb1 then
        call err 'path1 not table' m.m.path
    if \ all then
        call anaList m, tb1, all
    pf3 = 'PF3 = zurück zu rcQuery'
    laMa = 'cx'
    do lx=1 to min(lxLa, 3)
        call adrEdit '(li) = line' lx
        if word(li, 1) \== '*' | pos('help', li) < 1 ,
             | wordPos('PF3', li) < 1 then
            iterate
        li = strip(substr(strip(li), 2))
        laMa = word(li, 1)
        if pos('?', laMa) > 0 then
            laMa = left(laMa, pos('?', laMa)-1)
        cx = pos('PF3', li)
        cy = pos(',', li, cx)
        if cy > cx then
            pf3 = substr(li, cy, cy-cx)
        else
            pf3 = strip(substr(li, cx))
        leave
        end
    if \ abbrev(translate(laMa), 'R') then
        laMa = laMa word(m.m.path, 1)
    m.m.help = '    *' m.cmd '? = help,' ,
                'UNDO = zurück zu' laMa',' pf3
    return
endProcedure anaEdit

uxEditMacro: procedure expose m.
parse arg m, parms, all
    call anaEdit m, 1
    l = m'.LST'
    m.l.0 = 0
    call anaList m, tkrTable(, word(m.m.path, 1)), all
    b = jBuf()
    call pipe '+F', b
    call genJob m, l, t1, parms
    call pipe '-'
    call adrEdit 'delete .zf .zl'
    call adrEdit 'reset'
    do bx=1 to m.b.buf.0
        li = m.b.buf.bx
        call adrEdit 'line_after .zl = (li)'
        end
    hh = m.m.help
    call adrEdit 'line_before .zf = infoLine (hh)'
    call adrEdit 'locate 1'
    call adrEdit 'up max'
    return 1
endProcedure uxEditMacro

anaList: procedure expose m.
parse arg m, kq, all
    l = m'.LST'
    tb = tkrTable(, kq, , '')
    if tb == '' then do
        ky = tkrKey(, kq)
        end
    else do
        al = m.tb.alias
        ky = tkrKey( , al'.1plus', '')
        if ky == '' then do
            ky = tkrKey( , al'.db', '')
            if ky == '' then
                ky = m.tb.pKey
            end
        end
    ky = tkrKey(,ky)   /* check its a valid ky */
    tb = m.ky.table
    m.l.key = ky
    m.l.alias = m.tb.alias
    if 0 <> adrEdit('find first - 1 40', 0 4) then
        call err 'could not find title: find first - 1 40'
    call adrEdit '(ex cx) = cursor'
    call adrEdit '(ti) = line' ex
    m.l.0 = 0
    if abbrev(ti, '--- row 1 ---') then do
        if all then do
            call adrEdit 'cursor = 1 0'
            do rx=1 while adrEdit("find '--- row ' 1", 0 4) = 0
                call adrEdit "(ex cx) = cursor"
                call adrEdit "(li) = line .zCsr"
                call anaListRow l, ky, ex
                end
            end
        else
            call anaListRow l, ky, ex
        end
    else do
      t1 = strip(ti, 't')
      call adrEdit "find last '"left(t1, 40)"' 1"
      call adrEdit "(ty cy) = cursor"
      ey = ty
      if ey <= ex then
          call err 'no trailer line found:' left(t1, 40)
      if \ all then do
          if m.m.cursor <= ex | m.m.cursor >= ey then
              call err 'i}cursor line' m.m.cursor ,
                  'not between header' ex 'and trailer' ey 'lines'
          ex = m.m.cursor - 1
          ey = m.m.cursor + 1
          end
      cx = 0
      do ly=ty+1
          call adrEdit '(li) = line' ly
          if left(li, 70) = '' | 'DBSYS:' == translate(word(li, 1)) then
              leave
          cx = cx + 1
          m.m.cyc.cx = translate(strip(li, 't'))
          end
      m.m.cyc.0 = cx
      if cx < 1 then
          call err 'no cycle trailer lines found'
      do tx = 1 to m.ky.0
          co = m.ky.tx.col
          f.tx.fld = tx
          do cy=1 to cx
              wx = wordPos(co, m.m.cyc.cy)
              if wx > 0 then
                  leave
              end
          if wx < 1 then
              call err 'column' co 'not found in cycle trailer lines'
          wx = wordIndex(m.m.cyc.cy, wx)
          cz = 1 + (cy // cx)
          lz = substr(m.m.cyc.cz, wx)
          wy = wordIndex(lz, 2 - abbrev(lz, ' ')) - 1
          if wy < 1 then
              wy = 1 + length(t1) - wx
          f.tx.pos = wx
          f.tx.len = wy
          end
      lx = 0
      do ex=ex+1 to ey-1
          call adrEdit '(li) = line' ex
          li = strip(li, 't')
          lx = lx + 1
          do tx = 1 to m.ky.0
              if f.tx.pos == '' then
                  m.l.lx.tx = ''
              else
                  m.l.lx.tx = strip(substr(li, f.tx.pos, f.tx.len))
              end
          m.l.lx.99 = ''
          end
      m.l.0 = lx
      end
    return
endProcedure anaList

anaListRow: procedure expose m.
parse arg l, ky, ex
    lx = m.l.0 + 1
    needed = left('1234565789', m.ky.0)
    do ex=ex+1 until needed = ''
        call adrEdit "(li) = line" ex
        li = strip(li, 't')
        if abbrev(li, '--- row ') | abbrev(li, '--- end of ') then
            leave
        liCo = translate(word(li, 1 + (words(left(li, 30)) > 1)))
        do tx=1 to m.ky.0
            if liCo = m.ky.tx.col then do
                needed = overlay(' ', needed, tx)
                if     datatype(substr(li, 31, 12), 'n') ,
                     & datatype(substr(li, 43), 'n') then
                    m.l.lx.tx = strip(substr(li, 43))
                else
                    m.l.lx.tx = substr(li, 31)
                end
            end
        end
    if needed <> '' then
        call err 'needed' needed "<> '', tb" tb 'line' ex
    m.l.lx.99 = ''
    m.l.0 = lx
    return
endProcedure anaListRow

listDef: procedure expose m.
parse arg l, list
    if m.l.lp.alias == '' then
        call err 'listDef with empty lp.alias, type='m.l.type
    tParts = 0 < wordPos('tp', list) + wordPos('ip', list)
    tObjs  = 0 < wordPos('ts', list) + wordPos('i', list)
    if m.l.lp.alias = 'tp' then do
        if tParts then do
            call listDef1 l'.LP', tp, 'TABLESPACE', 'PARTLEVEL'
            if wordPos('ip', list) > 0 then
                call out '  LISTDEF IPLIST INCLUDE INDEXSPACES' ,
                              'LIST TPLIST'
            end
        if tObjs then do
            call listDef1 l'.LO', ts, 'TABLESPACE'
            if wordPos('i', list) > 0 then
                call out '  LISTDEF ILIST INCLUDE INDEXSPACES' ,
                              'LIST TPLIST'
            end
        end
    else if m.l.lp.alias == 'ip' then do
        if tParts then do
            call listDef1 l'.LP', ip, 'INDEX', 'PARTLEVEL'
            if wordPos('tp', list) > 0 then
                call out '  LISTDEF TPLIST INCLUDE TABLESPACES' ,
                              'LIST IPLIST'
            end
        if tObjs then do
            call listDef1 l'.LO', i, 'INDEX'
            if wordPos('ts', list) > 0 then
                call out '  LISTDEF TSLIST INCLUDE TABLESPACES' ,
                              'LIST ILIST'
            end
        end
    else
        call err 'listDef no objs found'
return
endProcedure listDef

listdef1: procedure expose m.
parse arg l, ld, sp, pa
    call out '  LISTDEF' ld'LIST'
    t2 = ''
    do lx=1 to m.l.0
        if pa \== '' then
            t2 = 'PARTLEVEL' m.l.lx.3
        call out '    INCLUDE' sp m.l.lx.1'.'m.l.lx.2 t2
        end
    return
endProcedure listDef1

listExp: procedure expose m.
parse arg l
    m.l.lp.alias = ''
    m.l.lp.0 = 0
    m.l.lo.0 = 0
    tF = m.l.alias
    if wordPos(tF, 'co tp') > 0 then
        ii = 'tp 1 2 3'
    else if tF == 'rt' then
        ii = 'tp 5 6 3'
    else if tF == 'ts' then
        ii = 'tp 1 2 99'
    else if tF == 't' then
        ii = 'tp 3 4 99'
    else if wordPos(tF, 'is ip ri') > 0 then
        ii = 'ip 1 2 3'
    else if wordPos(tF, 'i ik') > 0 then
        ii = 'ip 1 2 99'
    else
        return l
    parse var ii m.l.lp.alias f1 f2 f3
    xp = 0
    xo = 0
    drop done.
    do lx=1 to m.l.0
        v1 = m.l.lx.f1
        v2 = m.l.lx.f2
        v3 = m.l.lx.f3
        if done.v1.v2.v3 == 1 then
            iterate
        done.v1.v2.v3 = 1
        xp = xp + 1
        m.l.lp.xp.1 = v1
        m.l.lp.xp.2 = v2
        m.l.lp.xp.3 = v3
        if done.v1.v2 == 1 then
            iterate
        done.v1.v2 = 1
        xo = xo + 1
        m.l.lo.xo.1 = v1
        m.l.lo.xo.2 = v2
        end
    m.l.lp.0 = xp
    m.l.lo.0 = xo
    return l
endProcedure listExp

listSelect: procedure expose m.
parse arg m, l, o, ky, pa
    tb = m.ky.table
    al = m.tb.alias
    if m.l.alias == al then do
        do kx=1 to m.ky.0
            c1 = m.ky.kx.col
            do ox=1 to m.l.0
                m.o.ox.c1 = m.l.ox.kx
                end
            end
        m.o.0 = m.l.0
        return o
        end
    sq = 'select' m.ky.colList tkrTable(, tb, 'f') ,
           tkrWhere(, al pa m.l.alias':' ,
               list2where(l, tkrKey(, m.l.alias'.1')))
    call sqlconnect m.m.dbSy
    call sql2St sq, o
    call sqlDisconnect
    return o
endProcedure listSelect

list2where: procedure expose m.
parse arg l, aKey
    tb = m.aKey.table
    al = m.tb.alias
    drop done.
    done = ''
    do lx=1 to m.l.0
        k2 = ''
        do tx=1 to m.aKey.0-1
            k2 = k2'.'m.l.lx.tx
            end
        k2 = substr(k2, 2)
        ty = m.aKey.0
        ky = k2'.'m.l.lx.ty
        vy = tkrValue( , , m.aKey.ty, m.l.lx.ty)
        if done.ky == 1 then
           iterate
        done.ky = 1
        dx = wordPos(k2, done)
        if dx > 0 then do
            done.dx = done.dx"," vy
            end
        else do
            done = done k2
            dx = wordPos(k2, done)
            s1 = ''
            do tx=1 to m.aKey.0-1
                s1 = s1 tkrPred( , , m.aKey.tx, m.l.lx.tx)
                end
            done.dx = substr(s1, 6) 'and' m.aKey.ty "in ("vy
            end
        end
    wh = ''
    do dx = 1 to words(done)
        wh = wh 'or ('done.dx'))'
        end
    return '('substr(wh, 5)')'
endProcedure list2where

genJob: procedure expose m.
parse arg m, l, ty, parms
    m.m.rand2 = right('0' || (1+right(time(), 1)), 2)
    m.m.jn = m.m.user || substr(m.mAlfUC, m.m.rand2+10, 1)
    call out "//"m.m.jn "JOB (CP00,KE50),'DB2" parms"',"
    call out "//             MSGCLASS=T,TIME=1440,SCHENV="m.m.dbSy","
    call out "//             NOTIFY=&SYSUID,REGION=0M"
    call out "//*MAIN CLASS=LOG"
    call out "//*"
    call out "//* ux utility generator" parms
    call out "//*           who" m.m.rz m.m.dbSy m.m.user m.m.screen
    call out "//*          " translate(date('E'), '.', '/') time() ,
                          m.m.jn m.m.rand2
    call out "//*"
    inStep = ''
    m.m.stepNo = 0
    pa2 = ''
    uts = 'co=COPY re=REORG rb=REBIND rb=RBIND rc=RECOVER rc=RCOVER' ,
          'ru=RUNSTATS bu=REBUILD bu=BUILD' ,
          'ld=LOADDUMMY ld=LOADUMMY ld=LDUMMY ld=DUMMY'
    do ux=1 to words(parms)
        cx = pos('='translate(word(parms, ux)), uts)
        if cx <= 2 then
            call err 'bad utility parm' word(parms, ux) 'in' parms, 'S'
        pa2 = pa2 substr(uts, cx-2, 2)
        end
    lst = ''
    if wordPos('co', pa2) > 0 | wordPos('rc', pa2) > 0 ,
     | wordPos('re', pa2) > 0 then
        lst = lst 'tp'
    if wordPos('ru', pa2) > 0 then
        lst = lst 'ts'
    if wordPos('bu', pa2) > 0 then
        lst = lst 'ip'
    call listExp l
    do ux=1 to words(pa2)
        u1 = word(pa2, ux)
        if wordPos(u1, 'bu co ld re rc ru') > 0 then do
            if inStep \== 'ut' then do
                inStep = 'ut'
                call genUtil m
                if lst \== '' then
                    call listdef l, lst
                end
            if u1 == 'bu' then
                call genBuild m
            else if u1 == 'co' then
                call genCopy m
            else if u1 == 'ld' then
                call genLoadDummy m, l'.LP',
                          , listSelect(m, l, tbPa, tkrKey(, 't.1plus'))
            else if u1 == 'rc' then
                call genRecover m, l
            else if u1 == 're' then
                call genReorg m
            else if u1 == 'ru' then
                call genRunstats m
            else
                call err 'implement util' u1
            end
        else if u1 == 'rb' then do
            pkl = m'.pkl'
            call listSelect m, l, pkl, tkrKey(, 'pk.1plus'), 'ts'
            call genDsn m
            inStep = 'dsn'
            do px=1 to m.pkl.0
                if m.pkl.px.type = '' then
                    call out 'rebind package ('strip(m.pkl.px.collid) ,
                             || '.'strip(m.pkl.px.name) ,
                             || '.('strip(m.pkl.px.version)'))'
                else if m.pkl.px.type = 'T' then
                    call out 'rebind trigger package(' ,
                        || strip(m.pkl.px.collid)'.' ,
                        || strip(m.pkl.px.name)')'
                else
                    call err 'implement rebind of pk type' m.pkl.px.type
                end
            end
        end
    return
endProcedure genJob

genBuild: procedure expose m.
parse arg m
     call out left('---- rebuild index ', 72, '-')
     call out "  REBUILD INDEX LIST IPLIST"
     call out "    SORTDEVT SYSDA"
     call out "    STATISTICS UPDATE ALL"
     return
endProcedure genBuild

genCopy: procedure expose m.
parse arg m
     call out left('---- copy ', 72, '-')
     call out "  COPY LIST TPLIST COPYDDN(TCOPYD)"
     call out "    FULL YES"
     call out "    PARALLEL"
     call out "    SHRLEVEL CHANGE"
     return
endProcedure genCopy

genLoadDummy: procedure expose m.
parse arg m, lp, l
    if m.lp.alias \== 'tp' then
        call err 'loadDummy for' m.lp.alias
    ts = ''
    drop ts. tb.
    do px=1 to m.lp.0
        ky = strip(m.lp.px.1)'.'strip(m.lp.px.2)
        if symbol('ts.ky') \== 'VAR' then do
            ts.ky = ''
            tb.ky = ''
            ts = ts ky
            end
        if m.lp.px.3 <> '' then
            ts.ky = overlay('p', ts.ky, m.lp.px.3)
        kt =
        end
    do lx=1 to m.l.0
        ky = strip(m.l.lx.dbName)'.'strip(m.l.lx.tsName)
        kt = strip(m.l.lx.creator)'.'strip(m.l.lx.name)
        if symbol('ts.ky') \== 'VAR' then
            call err 'ts' ky 'for t' kt 'not in part list'
        if wordPos(kt, tb.ky) < 1 then
            tb.ky = tb.ky kt
        end
    rSp = "    RESUME NO REPLACE COPYDDN(TCOPYS) INDDN INDUMMY"
    do tx=1 to words(ts)
        ky = word(ts, tx)
        call out left('---- load dummy' ky, 72, '-')
        if symbol('tb.ky') \== 'VAR' then
            call err 'no table in ts' ky
        call out "  LOAD DATA LOG NO"
        call out "    WORKDDN(TSYUTS, TSOUTS) MAPDDN TMAPD"
        call out "    STATISTICS INDEX(ALL) REPORT NO UPDATE ALL"
        ps = ts.ky
        if ps = '' then do
            call out rSp
            do qx=1 to words(tb.ky)
                call out "  INTO TABLE" word(tb.ky, qx)
                end
            end
        else do
            t1 = strip(tb.ky)
            if words(t1) <> 1 then
                call err 'multiple tables' t1 'in partitioned TS'
            do while ps <> ''
                px = pos('p', ps)
                ps = overlay(' ', ps, px)
                call out "  INTO TABLE" t1 'PART' px
                call out rSp
                end
            end
        end
    return
endProcedure genLoadDummy

genRecover: procedure expose m.
parse arg m, l
     minRba = ''
     maxRba = ''
     dsn = ''
     cDsn = 0
     rDsn = '?.? DSNUM ?'
     if m.l.alias == 'co' then do
         ky = tkrKey(, 'co.1plus')
         fty = wordPos('co.icType,', m.ky.colList',')
         fRba = wordPos('co.start_Rba,', m.ky.colList',')
         fDsn = wordPos('co.dsName,', m.ky.colList',')
         minRba = 'FFFFFFFFFF'
         maxRba = '00'
         do lx=1 to m.l.0
             if pos(left(m.l.lx.fTy, 1), 'FI') > 0 then do
                 cDsn = cDsn + 1
                 dsn = m.l.lx.fDsn
                 rDsn = m.l.lx.1'.'m.l.lx.2
                 if m.l.lx.3 <> '' then
                     rDsn = rDsn 'DSNUM' m.l.lx.3
                 end
             if x2c(minRba) >> x2c(m.l.lx.fRba) then
                 minRba = m.l.lx.fRba
             if x2c(maxRba) << x2c(m.l.lx.fRba) then
                 maxRba = m.l.lx.fRba
             end
         if minRba == maxRba then do
             maxRba = "X'"maxRba"'-- rba_start"
             minRba = maxRba
             end
         else if maxRba \== '00' then do
             minRba = "X'"minRba"'-- min rba_start"
             maxRba = "X'"maxRba"'-- max rba_start"
             end
         else do
             end
         end
     call out left('---- recover ', 72, '-')
     call out '--       Tipp: mit TSO LRSN logPoints umwandeln'
     call out '  RECOVER LIST TPLIST'
     call out '    PARALLEL'
     call out '--  TOLOGPOINT' maxRba
     if minRba <> maxRba then
         call out '--  TOLOGPOINT' minRba
     call out '--    LOGONLY BACKOUT YES'
     call out '--    RESTOREBEFORE' minRba
     call out '--  TOLASTCOPY'
     call out '--  TOLASTFULLCOPY'
     call out '--RECOVER TABLESPACE' rDsn
     call out '--  TOCOPY' dsn
     if cDsn > 1 then
         call out '    -- Achtung' cDsn 'copies|'
     return
endProcedure genRecover

genReorg: procedure expose m.
parse arg m
     call out left('---- reorg ', 72, '-')
     call out '  REORG TABLESPACE  LIST TPLIST'
     call out '    LOG NO'
     call out '    SORTDATA'
     call out '    COPYDDN(TCOPYD)'
     call out '    SHRLEVEL CHANGE'
     call out '                 -- Achtung mapping table' ,
                               'zufällig gewählt|'
     call out '    MAPPINGTABLE S100447.MAPTAB'm.m.rand2
     call out '    DRAIN_WAIT 40'
     call out '      RETRY 20 '
     call out '      RETRY_DELAY 180'
     call out '      MAXRO 40 '
     call out '      DRAIN WRITERS'
     call out '      LONGLOG CONTINUE'
     call out '      DELAY 1200'
     call out '      TIMEOUT TERM'
     call out '    UNLDDN TSRECD'
     call out '    UNLOAD CONTINUE'
     call out '    PUNCHDDN TPUNCH'
     call out '    DISCARDDN TDISC'
     call out '    SORTKEYS'
     call out '    SORTDEVT DISK'
     call out '    STATISTICS'
     call out '      INDEX ALL KEYCARD '
     call out '      UPDATE ALL'
     return
endProcedure genCopy

genRunstats: procedure expose m.
parse arg m
     call out left('---- runstats ', 72, '-')
     call out "  RUNSTATS TABLESPACE LIST TSLIST"
     call out "    SHRLEVEL CHANGE "
     call out "    INDEX(ALL)"
     call out "    REPORT NO  UPDATE ALL"
     return
endProcedure genRunstats

genUtil: procedure expose m.
parse arg m
     m.m.stepNo = m.m.stepNo + 1
     call out left("//STEP"m.m.stepNo , 10),
                       "EXEC PGM=DSNUTILB,TIME=1440,"
     call out "//             PARM=("m.m.dbSy",'"m.m.jn".UXUTIL'),"
     call out "//             REGION=0M"
     call out "//SYSPRINT   DD SYSOUT=*"
     call out "//SYSUDUMP   DD SYSOUT=*"
     call out "//UTPRINT    DD SYSOUT=*"
     call out "//SYSTEMPL   DD DISP=SHR,DSN="m.m.dbSy ,
                         || ".DBAA.LISTDEF(TEMPL)"
     call out "//INDUMMY      DD DUMMY"
     call out "//SYSIN      DD *"
     return
endProcedure genUtil

genDSN: procedure expose m.
parse arg m
     m.m.stepNo = m.m.stepNo + 1
     call out "//STEP"m.m.stepNo ,
                          "     EXEC PGM=IKJEFT01"
     call out "//SYSTSPRT         DD SYSOUT=*"
     call out "//SYSPRINT         DD SYSOUT=*"
     call out "//SYSTSIN          DD *"
     call out "DSN SYS("m.m.dbSy")"
     return
endProcedure genDsn

/* rexx ****************************************************************
  wsh: walter's rexx shell
  interfaces:
      edit macro: for adhoc evaluation or programming
          either block selection: q or qq and b or a
          oder mit Directives ($#...) im Text
      wsh i: tso interpreter
      batch: input in dd wsh
      docu: http://chsa4212/host/db2wiki/pmwiki.php?n=Main.Wsh
      syntax: http://chsa4212/host/db2wiki/pmwiki.php?n=Main.WshSyn
--- history ------------------------------------------------------------------
 6. 2.13 w.keller csmCopy aendert mgmtClas für neue lokale Files
 ********/ /*** end of help ********************************************
23. 1.13 w.keller sqlErrHandler sowie sqlRx und sql
11. 6.12 w.keller sqlUpdComLoop
23. 5.12 w.keller fix sqlStmt: drop accepts -204
31. 3.12 w.keller sql Query interface incl. sql über CSM
10. 2.12 w.keller div catTb* und eLong
 2. 6.11 w.keller sql error with current location and dsnTiar
 2. 5.11 w.keller sqlStmt etc..
16. 3.11 w.keller basic new r '' ==> r m.class.classO
28. 2.11 w.keller compFile by exprBlock, fix $@do forever, |
 7. 2.11 w.keller cleanup block / with sqlPush....
 2. 2.11 w.keller simplified syntax, ast for blocks, ? for help
19. 6.10 w.keller open/close stacked mit jUsers, framed eliminiert
19. 5.10 w.keller class wird direkt erzeugt ohne temporary
18. 4.10 w.keller scanUtilInto ==> testCase noch einbauen
17. 4.10 w.keller oMutate in fileTsoList eingebaut
14. 1.10 w.keller batch interface no longer dies on openIfNotYet
                  CSM.RZ1.P0.EXEC korrigiert
***********************************************************************/
/*--- main code wsh --------------------------------------------------*/
    call errReset 'hI'
    call pipeIni  /* without tstClass2 gives different result */
    m.wsh.version = 2.2
    parse arg spec
    if spec = '?' then
        return help('wsh version' m.wsh.version)
    isEdit = 0
    if spec = '' & m.err.ispf then do /* z/OS edit macro */
        isEdit = adrEdit('macro (spec) NOPROCESS', '*') == 0
        if isEdit then do
            if spec = '?' then
                return help('version' m.wsh.version)
            call adrEdit '(d) = dataset'
            call adrEdit '(m) = member'
            m.editDsn = dsnSetMbr(d, m)
            if spec = '' & m.editDsn = 'A540769.WK.REXX(WSH)' then
                spec = 't'
            end
        end
    call scanIni
    f1 = spec
    rest = ''
    if pos(verify(f1, m.scan.alfNum), '1 2') > 0 then
        parse var spec f1 2 rest
    u1 = translate(f1)
    if u1 = 'T' then
        return wshTst(rest)
    else if u1 = 'I' then
        return wshInter(rest)
    else if u1 = 'S' then
        spec = '$#@ call sqlStmtsOpt $.$sqlIn,' quote(rest) '$#sqlIn#='
    call wshIni
    inp = ''
    out = ''
    if m.err.os == 'TSO' then do
        if isEdit then do
            parse value wshEditBegin(spec) with inp out
            end
        else if sysvar('sysEnv') = 'FORE' then do
            end
        else do
            inp = s2o('-wsh')
            useOut = listDsi('OUT FILE')
            if \ (useOut = 16 & sysReason = 2) then
                out = s2o('-out')
            end
        end
    else if m.err.os == 'LINUX' then do
        inp = s2o('&in')
        out = s2o('&out')
        end
    else
        call err 'implement wsh for os' m.err.os
    m.wshInfo = 'compile'
    call compRun spec, inp, out, wshInfo
    if isEdit then
        call wshEditEnd
exit 0
/*--- actual test case ----------------------------------------------*/
wshIni: procedure expose m.
    call compIni
    call sqlOIni
    call scanWinIni
    return
endProcedure wshIni

tstRts: procedure expose m.
    call wshIni
    call sqlConnect dbaf
    call sqlQuery 3, "select * from sysibm.sysTableSpaceSTats" ,
                    "where dbName = 'MF01A1A' and name = 'A150A'",
                    "order by partition  asc"
    do while sqlFetch(3, rr)
        say f('@.DBNAME%-8C.@NAME%-8C @PARTITION %4C' ,rr)
        end
    call sqlDisconnect
endProcedure tstRts

wshTst: procedure expose m.
parse arg rest
    if rest = '' then do /* default */
        call sqlConnect DBAF
        call catColCom 'cmnBatch', 'DSN_PGROUP_TABLE',
                     , 'cmnBatch', 'DSN_PGROUP_TABLE_new'
        call sqlDisConnect DBAF
        return 0
        end
    c = ''
    do wx=1 to words(rest)
        c = c 'call tst'word(rest, wx)';'
        end
    if wx > 2 then
        c = c 'call tstTotal;'
    say 'wsh interpreting' c
    interpret c
    return 0
endProcedure wshTst

/*--- interpret user input: rexx, expr, data or shell ---------------*/
wshInter: procedure expose m.
parse arg inp
    call wshIni
    inp = strip(inp)
    mode = '*'
    do forever
        if pos(left(inp, 1), '/;:*@.-=') > 0 then
            parse var inp mode 2 inp
        if mode == '/' then
            return 0
        mode = translate(mode, ';', ':')
        if inp <> '' then do
            say 'as' mode 'interpreting' inp
            if mode = ';' then
                interpret inp
            else if mode = '*' then
                interpret 'say' inp
            else do
                call errReset 'h', 'say "******* intercepting error";',
                    'call errSay ggTxt; return "";'
                call oRun compile(comp(jBuf(inp)), mode)
                call errReset 'h'
                end
            end
        say 'enter' mode 'expression, / for end, ; or * for Rexx' ,
                                                 '@ . - =  for wsh'
        parse pull inp
        end
endProcedure wshInter

wshEditBegin: procedure expose m.
parse arg spec
    dst = ''
    li = ''
    m.wsh.editHdr = 0
    pc = adrEdit("process dest range Q", 0 4 8 12 16)
    if pc = 16 then
        call err 'bad range must be q'
    if pc = 0 | pc = 8 then do
        call adrEdit "(rFi) = lineNum .zFrange"
        call adrEdit "(rLa) = lineNum .zLrange"
    /*  say 'range' rFi '-' rLa */
        end
    else do
        rFi = ''
    /*  say 'no range' */
        end
    if pc = 0 | pc = 4 then do
        call adrEdit "(dst) = lineNum .zDest"
    /*  say 'dest' dst */
        dst = dst + 1
        end
    else do
    /*  say 'no dest' */
        if adrEdit("find first '$#out' 1", 4) = 0 then do
            call adrEdit "(dst) = cursor"
    /*      say '$#out' dst   */
            call adrEdit "(li) = line" dst
            m.wsh.editHdr = 1
            end
        end
    m.wsh.editDst = dst
    m.wsh.editOut = ''
    if dst \== '' then do
        m.wsh.editOut = jOpen(jBufTxt(), '>')
        if m.wsh.editHdr then
            call jWrite m.wsh.editOut, left(li, 50) date('s') time()
        end
    if rFi == '' then do
        call adrEdit "(zLa) = lineNum .zl"
        if adrEdit("find first '$#' 1", 4) = 0 then do
            call adrEdit "(rFi) = cursor"
            call adrEdit "(li) = line" rFi
            if abbrev(li, '$#out') | abbrev(li, '$#end') then
                rFi = 1
            if rFi < dst & dst \== '' then
                rLa = dst-1
            else
                rLa = zLa
            end
        else do
            rFi = 1
            rLa = zLa
            end
        end
    /*  say 'range' c1 'rc' pc':' rFi '-' rLa   'after' dst */

    m.wsh.editIn = jOpen(jBuf(), m.j.cWri)
    do lx=rFi to rLa
        call adrEdit "(li) = line" lx
        call jWrite m.wsh.editIn, li
        end
    call errReset 'h',
             , 'return wshEditErrH(ggTxt, ' rFi',' rLa')'
    return jClose(m.wsh.editIn) m.wsh.editOut
endProcedure wshEditBegin

wshEditEnd: procedure expose m.
    call errReset 'h'
    if m.wsh.editOut == '' then
        return 0
    call jClose(m.wsh.editOut)
    lab = wshEditInsLinSt(m.wsh.editDst, 0, , m.wsh.editOut'.BUF')
    call wshEditLocate max(1, m.wsh.editDst-7)
    return 1
endProcedure wshEditEnd

wshEditLocate: procedure
parse arg ln
    call adrEdit '(la) = linenum .zl'
    call adrEdit 'locate '  max(1, min(ln, la - 37))
    return
endProcedure wshEditLocate

wshEditErrH: procedure expose m.
parse arg ggTxt, rFi, rLa
    call errCleanup
    call errReset 'h'
    call errMsg ggTxt
    call mMove err, 1, 2
    isScan = 0
    if wordPos("pos", m.err.4) > 0 ,
        & pos(" in line ", m.err.4) > 0 then do
        parse var m.err.4 "pos " pos .     " in line " lin":"
        if pos = '' then do
            parse var m.err.4 " line " lin":"
            pos = 0
            end
        isScan = lin \== ''
        end
    m.err.1 = '***' m.wshInfo 'error ***'
    if m.wshInfo=='compile' & isScan then do
        do sx=1 to m.err.0
            call out m.err.sx
            end
        lab = rFi + lin
        if pos \= '' then
            lab = wshEditInsLin(lab, 'msgline', right('*',pos))
        lab = wshEditInsLinSt((rFi+lin),0, 'msgline', err)
        call wshEditLocate rFi+lin-25
        end
    else do
        if m.wsh.editOut \== '' then do
            do sx=1 to m.err.0
                call jWrite m.wsh.editOut, m.err.sx
                end
            lab = wshEditInsLinSt(m.wsh.editDst, 0, ,
                , m.wsh.editOut'.BUF')
            call wshEditInsLinSt m.wsh.editDst, m.wsh.editHdr,
                , msgline, err
            call wshEditLocate max(1, m.wsh.editDst-7)
            end
        else do
            do sx=1 to m.err.0
                say m.err.sx
                end
            end
        end
    call errCleanup
    exit
endSubroutine wshEditErrH

wshEditInsLinCmd: procedure
parse arg wh
    if dataType(wh, 'n')  then do
        if adrEdit("label" wh "= .a", 0 8 12) \= 12 then
            return 'line_before .a ='
        else
            return 'line_after .zl ='
        end
    else if left(wh, 1) == '.' then
        return 'line_before' wh '='
    else
        return wh
endProcedure wshEditInsLinCmd

wshEditInsLin: procedure
parse arg wh, type
    cmd = wshEditInsLinCmd(wh)
    do ax=3 to arg()
        li = strip(arg(ax), 't')
        if li == '' then
            iterate
        if translate(type) = 'MSGLINE' then do while length(li) > 72
            sx = lastPos(' ', li, 72)
            if sx < 10 then
                sx = 72
            one = left(li, sx)
            li = '    'strip(substr(li, sx))
            call adrEdit cmd type "(one)"
            end
        call adrEdit cmd type "(li)", 0 4
        end
    return cmd
endProcedure wshEditInsLin

wshEditInsLinSt: procedure expose m.
parse arg wh, pl, type, st
    if wh == '' then do
        do ox=1 to m.st.0
            say m.st.ox
            end
        return ''
        end
    wh = wh + pl
    cmd = wshEditInsLinCmd(wh)
    do ax=1 to m.st.0
        call wshEditInsLin cmd, type, m.st.ax
        end
    return cmd
endProcedure wshEditInsLinSt


/*** end wsh, begin all copies ****************************************/
/* copy tstAll begin  *************************************************/
/*----------- neu, noch versorgen |||||-------------------------------*/
tstWiki:
    call mapReset docs, 'k'
    call addFiles docs, 'n', '/media/wkData/literature/notes'
    call addFiles docs, 'd', '/media/wkData/literature/docs'

    in = jOpen(file('wiki.old'), '<')
    out = jOpen(file('wiki.new'), '>')
    abc = '(:abc: %l%'
    do cx=1 to length(m.scan.alfLC)
        c1 = substr(m.scan.alfLC, cx, 1)
        abc = abc '¢¢#'c1 '|' c1'!!'
        end
    call jWrite out, abc ':)'
    inTxt = 0
    li = m.i
    do lx=1 while jRead(in, i)
        if 0 then
            say length(m.i) m.i
        if m.i = '' then
            iterate
        li = m.i
        do forever
            bx = pos('¢=', li)
            if bx < 1 then
                leave
            ex = pos('=!', li)
            if ex <= bx then
                call err '=! before ¢= in' lx li
            li = left(li, bx-1)substr(li,bx+2, ex-bx-2)substr(li,ex+2)
            end
        li = strip(li)
        if abbrev(li, '|') then do
            w = word(substr(li, 2), 1)
            call jWrite out, '¢¢#'w'!! {$:abc}'
            call jWrite out, '|||' substr(li, 2)
            inTxt=1
            iterate
            end
        if \ inTxt then do
            call jWrite out, li
            iterate
            end
        if \ (abbrev(li, '->') | abbrev(li, '#') ,
                | abbrev(li, '¢')) then do
            call jWrite out, '-<' li
            iterate
            end
        cx = 1
        if substr(li, cx, 2) == '->' then
            cx = verify(li, ' ', 'n', cx+2)
        hasCross = substr(li, cx, 1) == '#'
        if hasCross then
            cx = verify(li, ' ', 'n', cx+1)
        ex = verify(li, '!:\, ', 'm', cx)
        ex = ex - (substr(li, ex, 1) \== '!')
        hasBr = substr(li, cx, 1) == '¢'
        if \ hasBr then
            w = substr(li, cx, ex+1-cx)
        else if substr(li, ex, 1) == '!' then
            w = substr(li, cx+1, ex-1-cx)
        else
            call err 'br not closed' substr(w, cx+1, ex-1-cx) 'in' lx li
        hasPdf = right(w, 4) == '.pdf'
        if hasPdf then
            w = left(w, length(w)-4)
        if verify(w, '#?', 'm') > 0 then do
            w = translate(w, '__', '#?')
            say '*** changing to' w 'in' lx li
            end
        o = '-< {def+'w'}'
        o = '-< ¢¢'w'!!'
        k = translate(w)
        if k.k == 1 then
            say '*** doppelter key' k 'in:' lx left(li,80)
        k.k = 1
        dT = ''
        if mapHasKey(docs, k) then do
            parse value mapGet(docs, k) with dT dC dN
            call mapPut docs, k, dT (dC+1) dN
            do tx=1 to length(dT)
                t1 = substr(dT, tx, 1)
                o = o '¢¢Lit'translate(t1)':'word(dN, tx) '|' t1 '!!'
                end
            end
        qSeq = 'nd'
        qq = left(qSeq, 1)
        qx = 0
        do forever
            qx = pos('@'qq, li, qx+1)
            if qx < 1 then do
                qq = substr(qSeq, 1 + pos(qq, qSeq), 1)
                qx=0
                if qq = '' then
                    leave
                else
                    iterate
                end
            if pos(qq, dT) < 1 then do
                say '*** @'qq 'document not found:' lx li
                iterate
                end
            do qb = qx-1 by -1 while substr(li, qb, 1) == ' '
                end
            do qe = qx+2 by 1 while substr(li, qe, 1) == ' '
                end
            if substr(li, qb, 1) == '.' & substr(li, qe, 1) == '.' then
                li = left(li, qb)substr(li, qe+1)
            else
                li = left(li, qb) substr(li, qe)
            end
        o = o':' strip(substr(li, ex+1+(substr(li,ex+1,1)==':')))
        if 0 then say left(li, 30) '==>' left(o, 30)
        call jWrite out, o
        end
    dk = mapKeys(docs)
    do dx=1 to m.dk.0
        parse value mapGet(docs, m.dk.dx) with dT dC dN
        if dC < 1 then
            say '*** document not used:' dT dC dn
        end
    call jClose in
    call jClose out
    return
endProcedure tstWiki

addFiles: procedure expose m.
parse arg m, ty, file
    fl = jOpen(fileList(file(file)), '<')
    do while jRead(fl, fi1)
        nm = substr(m.fi1, lastPos('/', m.fi1)+1)
        k = translate(left(nm, pos('.', nm)-1))
        if \ mapHasKey(m, k) then do
            call mapAdd m, k, ty 0 nm
            end
        else do
            parse value mapGet(m, k) with dT dC dN
            call mapPut m, k, dT || ty 0 dN nm
            end
        end
    call jClose fl
    return
endProcedure addFiles

tstAll: procedure expose m.
    say 'tstAll ws2 25.2.13...............'
    call tstBase
    call tstComp
    call tstDiv
    if m.err.os = 'TSO' then
        call tstZos
    call tstTut0
    return 0
endProcedure tstAll

/* copx tstZos begin **************************************************/
tstZOs:
    call tstTime
    call sqlIni
    call tstSql
    call tstSqlC
    call tstSqlQ
    call tstSqlUpdComLoop
    call tstSqlB
    call tstSqlStmt
    call tstSqlStmts
    call tstSqlO1
    call tstSqlO2
    call tstSqls1
    call tstSqlO
    call tstSqlFTab
    call tstTotal
    return
endProcedure tstZOs

tstWshBatch:
    call adrTso 'alloc dd(WSH) shr dsn(WK.TEXT(WSHBATCH))'
    call wshBatch
    return adrTso('free dd(WSH)')

tstLmdTiming:
parse arg lev
    say timing() lev
    call lmdBegin abc, lev
    c = 0
    do while lmdNext(abc, st.)
        c = c + st.0
        end
    call lmdEnd   abc
    say timing() lev 'with group - without reading' c
    call adrIsp 'lmdinit listid(lmdId) level('lev')'
    do c=0 while adrIsp('lmdlist listid(&lmdId) dataset(abc)', 8) = 0
        end
    call adrIsp 'lmdfree listid(&lmdId)'
    say timing() lev 'with list' c
    return
endProcedure lmdTiming

tstCsi: procedure expose m.
    if 0 then do
        call lmd 'A540769.*K'
        call tstCsiCla 'A540769.WK.REXX'
        call tstCsiCla 'A540769.AAA.DATASETS'
        call tstCsiCla 'A540769.RRR.DATASETS'
        end
    if 0 then do
        call tstCsiOpNx 'A540769.WK.*E*'
        call tstCsiOpNx 'A540769.AAA.DATASETS'
        call tstCsiOpNx 'A540769.RRR.DATASETS'
        end
    if 1 then do
        call tstCsiNxCl 'A540769.WK.**'
        call tstCsiNxCl 'DBTF.M*.**'
        call tstCsiNxCl 'DBTF.BE*.**'
        end
    return
tstCsi: procedure expose m.
 /* call lmd 'A540769.*K' */
    call tstCsi1   'A540769.WK.REXX'
    call tstCsi1   'A540769.AAA.DATASETS'
    call tstCsi1   'A540769.RRR.DATASETS'
    return

tstCsiCla:
parse arg ds
    say ds '-->' csiCla(ds)
    return

tstCsiOpNx: procedure expose m.
parse arg ds
    m = 'NUE123'
    s = 'res89'
    flds = 'devtyp volser mgmtclas comudsiz NOBYTTRK UDATASIZ HARBA'
    say 'csiOpen' ds
    call csiOpen m, ds, flds
    do while csiNext(m, s)
        say m.s     'dev' c2x(m.s.devTyp) ,
                    'vol' m.s.volSer 'cla' m.s.mgmtclas,
                    'comuDsiz' m.s.comuDsiz 'noBytTrk' m.s.noBytTrk,
                    'udatasiz' c2x(m.s.udatasiz) ,
                    'harba' c2x(m.s.harba)
        end
    return

tstCsiNxCl: procedure expose m.
parse arg ds
    m = 'ABC123'
    s = 'efg89'
    flds = 'devtyp volser mgmtclas'
    say 'csiOpen' ds
    call csiOpen m, ds, flds
    say timing() 'begin'
    do i=1 while csiNext(m, s)
        nn = csiArcTape(m.s.volser, m.s.mgmtClas, m.s.devtyp, m.s)
/*      oo = csiCla(strip(m.s))
        if oo <> nn then
            say nn '<>' oo m.s
 */     if i // 1000 = 0 then
            say timing() i nn m.s
        end
    say timing() (i-1) nn m.s
    return
endProcedure tstCsiNxCl

listCatClass: procedure expose m.
parse upper arg dsn
    call outtrap x., '*'
    call adrTso "listcat volume entry('"dsn"')", 4
    rt = rc
    call outtrap off
    /* say 'listct rc =' rt 'lines' x.0 */
    cl = ''
    vo = ''
    if word(x.1, 3) \== dsn then
        call out 'err ??? for dsn' dsn 'bad first line' x.1
    else if pos('NOT FOUND', x.1) > 0 then
        return 'notFound'
    else if word(x.1, 1)\== 'NONVSAM' then
        call out 'err ??? for dsn' dsn 'bad first line' x.1
    do x=2 to x.0 while vo = '' & left(x.x, 1) = ' '
     /* say x.x */
        p = pos('MANAGEMENTCLASS-', x.x)
        if p > 0 then
            vo = strip(word(substr(x.x, p+16), 1), 'l', '-')
        p = pos('VOLSER--', x.x)
        if p > 0 then
            vo = strip(word(substr(x.x, p+6), 1), 'l', '-')
        p = pos('DEVCLASS--', x.x)
            dt = strip(word(substr(x.x, p+8), 1), 'l', '-')
        end
   /*  say 'lc' cl 'vo' vo 'dt' dt 'dsn' dsn */
    if vo = '' then
        call out '??? err no volume for dsn' dsn
    else if vo = 'ARCIVE' then
        res =  'arcive'
    else if cl = '' then
        res = 'tape'
    else
        res = cl
    if   abbrev(res, 'ar') \= abbrev(dt, "X'0") ,
       | abbrev(res, 'ta') \= abbrev(dt, "X'7") ,
       | (left(res, 1) >= 'A') \= abbrev(dt, "X'3") then
       call out 'err ??? mismatch cl' cl 'vo' vo 'dt' dt 'dsn' dsn
    return res
endProcedure listCatClass

/* copx tstZos end   **************************************************/
/* copx tstDiv begin **************************************************/
tstDiv:
    call tstSorQ
    call tstSort
    call tstMatch
    call tstTotal
    return
endProcedure tstDiv

tstSorQ: procedure expose m.   /* wkTst??? remove once upon a time */
/*
$=/tstSorQ/
    ### start tst tstSorQ #############################################
    sort 29  c ACHT DREI DREIZEHN EINS ELF FUENF M.I.25 M.I.26 M.I.27 M+
    ..I.29 NEUN SECHS SIEBEN VIER VIERZEHN ZEHN ZWEI ZWOELF 0 1 1 1 2 2+
    . 3 3 4 4
    sort 22  c ACHT DREIZEHN ELF M.I.25 M.I.26 M.I.27 M.I.29 NEUN VIERZ+
    EHN ZEHN ZWOELF 0 1 1 1 2 2 3 3 4 4
    sort 15  c M.I.25 M.I.26 M.I.27 M.I.29 0 1 1 1 2 2 3 3 4 4
    sort 8  c M.I.25 M.I.26 M.I.27 M.I.29 0 1 1
    sort 1  M.I.29
$/tstSorQ/ */
/*
$=/tstSorQAscii/
    ### start tst tstSorQAscii ########################################
    sort 29  0 1 1 1 2 2 3 3 4 4 ACHT DREI DREIZEHN EINS ELF FUENF M.I.+
    25 M.I.26 M.I.27 M.I.29 NEUN SECHS SIEBEN VIER VIERZEHN ZEHN ZWEI Z+
    WOELF c
    sort 22  0 1 1 1 2 2 3 3 4 4 ACHT DREIZEHN ELF M.I.25 M.I.26 M.I.27+
    . M.I.29 NEUN VIERZEHN ZEHN ZWOELF c
    sort 15  0 1 1 1 2 2 3 3 4 4 M.I.25 M.I.26 M.I.27 M.I.29 c
    sort 8  0 1 1 M.I.25 M.I.26 M.I.27 M.I.29 c
    sort 1  M.I.29
$/tstSorQAscii/ */
    if m.err.os == 'LINUX' then
        call tst t, "tstSorQAscii"
    else
        call tst t, "tstSorQ"
    call mAdd mCut(i, 0), eins, zwei, drei, vier, fuenf, sechs,
        ,sieben, acht, neun, zehn, elf, zwoelf, dreizehn, vierzehn
    call mAdd i, 1, 2, 3, 4, 4, 3, 2, 1, 0, 1,
        , 'M.I.25', 'M.I.26', 'M.I.27', 'c', 'M.I.29'

    do yy = m.i.0 by -1 to 1
        do x = 0 to yy
            m.i.0 = x
            call sort i, o
            m = ''
            la = ''
            if x <> m.o.0 then
                call err 'size mismatch' x '<>' m.o.0
            do y=1 to m.o.0
                m = m m.o.y
                if \ (la << m.o.y) then
                    call err 'sort mismatch' yy x y '\' la '<<' m.o.y
                end
            end
        if yy // 7 = 1 then
           call tstOut t, 'sort' yy m
        do x = 2 to yy
            x1 = x-1
            m.i.x1 = m.i.x
            end
        end
    call tstEnd t
    return
endProcedure tstSorQ

tstSort: procedure expose m.
    call tstSortComp
    call tstSortComp '<<='
    call tstSortComp 'm.aLe <<= m.aRi'
    call tstSortComp 'if 1 then cmp = m.aLe <<= m.aRi; else call err sd'
    return
endProcedure tstSort

tstSortComp: procedure expose m.
parse arg cmp
/*
$=/tstSort/
    ### start tst tstSort #############################################
    sort 29  c ACHT DREI DREIZEHN EINS ELF FUENF M.I.25 M.I.26 M.I.27 M+
    ..I.29 NEUN SECHS SIEBEN VIER VIERZEHN ZEHN ZWEI ZWOELF 0 1 1 1 2 2+
    . 3 3 4 4
    sort 22  c ACHT DREIZEHN ELF M.I.25 M.I.26 M.I.27 M.I.29 NEUN VIERZ+
    EHN ZEHN ZWOELF 0 1 1 1 2 2 3 3 4 4
    sort 15  c M.I.25 M.I.26 M.I.27 M.I.29 0 1 1 1 2 2 3 3 4 4
    sort 8  c M.I.25 M.I.26 M.I.27 M.I.29 0 1 1
    sort 1  M.I.29
$/tstSort/ */
/*
$=/tstSortAscii/
    ### start tst tstSortAscii ########################################
    sort 29  0 1 1 1 2 2 3 3 4 4 ACHT DREI DREIZEHN EINS ELF FUENF M.I.+
    25 M.I.26 M.I.27 M.I.29 NEUN SECHS SIEBEN VIER VIERZEHN ZEHN ZWEI Z+
    WOELF c
    sort 22  0 1 1 1 2 2 3 3 4 4 ACHT DREIZEHN ELF M.I.25 M.I.26 M.I.27+
    . M.I.29 NEUN VIERZEHN ZEHN ZWOELF c
    sort 15  0 1 1 1 2 2 3 3 4 4 M.I.25 M.I.26 M.I.27 M.I.29 c
    sort 8  0 1 1 M.I.25 M.I.26 M.I.27 M.I.29 c
    sort 1  M.I.29
$/tstSortAscii/ */
    say '### start with comparator' cmp '###'
    if m.err.os == 'LINUX' then
        call tst t, "tstSortAscii"
    else
        call tst t, "tstSort"
    call mAdd mCut(i, 0), eins, zwei, drei, vier, fuenf, sechs,
        ,sieben, acht, neun, zehn, elf, zwoelf, dreizehn, vierzehn
    call mAdd i, 1, 2, 3, 4, 4, 3, 2, 1, 0, 1,
        , 'M.I.25', 'M.I.26', 'M.I.27', 'c', 'M.I.29'

    do yy = m.i.0 by -1 to 1
        do x = 0 to yy
            m.i.0 = x
            call sort i, o, cmp
            m = ''
            la = ''
            if x <> m.o.0 then
                call err 'size mismatch' x '<>' m.o.0
            do y=1 to m.o.0
                m = m m.o.y
                if \ (la << m.o.y) then
                    call err 'sort mismatch' yy x y '\' la '<<' m.o.y
                end
            end
        if yy // 7 = 1 then
           call tstOut t, 'sort' yy m
        do x = 2 to yy
            x1 = x-1
            m.i.x1 = m.i.x
            end
        end
    call tstEnd t
    return
endProcedure tstSort
tstMatch: procedure expose m.
/*
$=/tstMatch/
    ### start tst tstMatch ############################################
    match(eins, e?n*) 1 1 2,i,s trans(E?N*) EiNs
    match(eins, eins) 1 1 0 trans(EINS) EINS
    match(e1nss, e?n*) 1 1 2,1,ss trans(?*) 1ss
    match(eiinss, e?n*) 0 0 -9
    match(einss, e?n *) 0 0 -9
    match(ein s, e?n *) 1 1 2,i,s trans(E?N *) EiN s
    match(ein abss  , ?i*b*) 1 1 3,e,n a,ss   trans(?I*B*) eIn aBss  .
    match(ein abss wie gehtsssxdirx und auch , ) 0 0 -9
    match(ies000, *000) 1 1 1,ies trans(*000) ies000
    match(xx0x0000, *000) 1 1 1,xx0x0 trans(*000) xx0x0000
    match(000x00000xx, 000*) 1 1 1,x00000xx trans(000*) 000x00000xx
    match(000xx, *0*) 1 1 2,00,xx trans(ab*cd*ef) ab00cdxxef
$/tstMatch/ */
    call tst t, "tstMatch"
    call tstOut t, matchTest1('eins', 'e?n*'                        )
    call tstOut t, matchTest1('eins', 'eins'                        )
    call tstOut t, matchTest1('e1nss', 'e?n*', '?*'                 )
    call tstOut t, matchTest1('eiinss', 'e?n*'                      )
    call tstOut t, matchTest1('einss', 'e?n *'                      )
    call tstOut t, matchTest1('ein s', 'e?n *'                      )
    call tstOut t, matchTest1('ein abss  ', '?i*b*'                 )
    call tstOut t, matchTest1('ein abss wie gehtsssxdirx und auch ' )
    call tstOut t, matchTest1('ies000', '*000'                      )
    call tstOut t, matchTest1('xx0x0000', '*000'                    )
    call tstOut t, matchTest1('000x00000xx', '000*'                 )
    call tstOut t, matchTest1('000xx', '*0*', 'ab*cd*ef'            )
    call tstEnd t
return

matchTest1:
parse arg w, m, m2
    r = 'match('w',' m')' match(w, m) match(w, m, vv) m.vv.0
    do x=1 to m.vv.0
        r = r','m.vv.x
        end
    if m2 = '' then
        m2 = translate(m)
    if m.vv.0 >= 0 then
        r = r 'trans('m2')' matchTrans(m2, vv)
    return r
endProcedure matchTest1

tstTime: procedure
/*         Winterzeit dez 2011
$=/tstTime/
    ### start tst tstTime #############################################
    Lrsn2Lzt(C5E963363741) 2010-05-01-11.34.55.789008
    Achtung: output ist abhaengig von Winter/Sommerzeit und LeapSecs
    timeZone 3600.00000 leapSecs 25.0000000
    2jul(2011-03-31-14.35.01.234567)  11090
    Lrsn2Gmt(C5E963363741) 2010-05-01-10.35.20.789008
    Lrsn2Lzt(C5E963363741) 2010-05-01-11.34.55.789008
    gmt2Lrsn(2011-03-31-14.35.01.234567) C78D87B86E38
    lzt2Lrsn(2011-03-31-14.35.01.234567) C78D7A670B7C
    Lrsn2Gmt(gmt2Lrsn(2011-03-31-14.35.01.234567) 2011-03-31-14.35.01.2+
    34560
    gmt2Lrsn(Lrsn2Gmt(C5E963363741) C5E963363741
    Lrsn2LZt(LZt2Lrsn(2011-03-31-14.35.01.234567) 2011-03-31-14.35.01.2+
    34560
    LZt2Stc(Lrsn2LZt(C5E963363741)( C5E963363741
$/tstTime/
*/
    call jIni
    call tst t, 'tstTime'
    t1 = '2011-03-31-14.35.01.234567'
    s1 = 'C5E963363741'
    call out 'Lrsn2Lzt('s1')' timeLrsn2Lzt(s1)
    call out ,
     'Achtung: output ist abhaengig von Winter/Sommerzeit und LeapSecs'
    call out 'timeZone' m.timeZone * m.timeStckUnit ,
             'leapSecs' m.timeLeap * m.timeStckUnit
    call timeReadCvt 1
    call out '2jul('t1') ' time2jul(t1)
    call out 'Lrsn2Gmt('s1')' timeLrsn2Gmt(s1)
    call out 'Lrsn2Lzt('s1')' timeLrsn2Lzt(s1)
    call out 'gmt2Lrsn('t1')' timeGmt2Lrsn(t1)
    call out 'lzt2Lrsn('t1')' timeLzt2Lrsn(t1)
    call out 'Lrsn2Gmt(gmt2Lrsn('t1')' timeLrsn2Gmt(timeGmt2Lrsn(t1))
    call out 'gmt2Lrsn(Lrsn2Gmt('s1')' timeGmt2Lrsn(timeLrsn2Gmt(s1))
    call out 'Lrsn2LZt(LZt2Lrsn('t1')' timeLrsn2LZt(timeLZt2Lrsn(t1))
    call out 'LZt2Stc(Lrsn2LZt('s1')(' timeLZt2Lrsn(timeLrsn2LZt(s1))
    call tstEnd t
    return
endProcedure tstTime
/* copx tstDiv end   **************************************************/

/* copx tstSql begin **************************************************/
tstSqlUtils: procedure expose m.
    call sqlConnect 'DBAF'
    id = 'A540769.dsnUtils'
    rst = 'NO'
    retcode = -9876
    e = ''
    z = 0
    st = "TEMPLATE TCOPYD",
            "DSN('&SSID..&JO..&US..P&PART(2)..D&DATE(3)..T&TIME.')",
            "DATACLAS(NULL12) MGMTCLAS(COM#A011) STORCLAS(FAR$N)",
            "SPACE (150,3750) TRK UNCNT 59;",
         "listdef abc include tablespace DA540769.A002* partlevel;",
         "listdef mf  include tablespace MF01A1A.A110A partlevel;",
         "copy list abc copyddn(tcopyd) shrlevel change;"
    st = translate(st)
    call sqlExec "call SYSPROC.DSNUTILS ( :id, :rst,",
                   ":st,:retcode, :ANY" copies(',:e,:e,:z',12) ")"
    call sqlExec ,
          'ASSOCIATE LOCATOR (:RESULTS) WITH PROCEDURE SYSPROC.DSNUTILS'
    say 'results' results
    call sqlExec 'ALLOCATE C111 CURSOR FOR RESULT SET :RESULTS'
    say 'allocated c111'
    do while sqlExec('fetch c111 into :seq, :txt', 0 100) = 0
        say 'sysPrint' seq strip(txt, 't')
        end
    call sqlExec 'close c111'
    say 'closed'
    call sqlDisconnect
    exit
endProcedure tstSqlUtils

tstSqlStored: procedure expose m.
    call sqlConnect 'DBAF'
    rst = 'NO'
    retcode = -9876
    e = ''
    z = 0
    st = "abc"
    call sqlExec "call SYSPROC.COMMAND ( :st, :rst)"
    say 'after call st='st 'rst='rst
    call sqlExec ,
          'ASSOCIATE LOCATOR (:RESULTS) WITH PROCEDURE SYSPROC.COMMAND'
    say 'results' results
    call sqlExec 'ALLOCATE C111 CURSOR FOR RESULT SET :RESULTS'
    say 'allocated c111'
    do while sqlExec('fetch c111 into :seq, :txt', 0 100) = 0
        say 'sysPrint' seq strip(txt, 't')
        end
    call sqlExec 'close c111'
    say 'closed'
    call sqlDisconnect
    return
endProcedure tstSqlStored

tstSqlStoredWK: procedure expose m.
    call sqlConnect 'DBAF'
 /* st = "direct wkUtiSub"
    rst = 'NO'
    say 'before call st='st 'rst='rst
    call sqlExec "call A540769.WKUTILSUB ( :st, :rst)"
    say 'after call st='st 'rst='rst
 */ rst = 'NO'
    retcode = -9876
    e = ''
    z = 0
    prc = 'DB2UTIL.DB2UTIL'
    st = "DA540769.A2*" /*  DA540769.A1*" */
    say  "call" prc "("st", ...)"
    call sqlExec "call" prc "(:st, :rst)"
    say 'after call st='st 'rst='rst
    call sqlExec ,
          'ASSOCIATE LOCATOR (:RESULTS) WITH PROCEDURE' prc
 /* say 'results' results  */
    call sqlExec 'ALLOCATE C111 CURSOR FOR RESULT SET :RESULTS'
    say ''
    say '***** utility output'
    do while sqlExec('fetch c111 into :seq, :txt', 0 100) = 0
        say 'sysPrint' seq strip(txt, 't')
        end
    call sqlExec 'close c111'
    say '***** end output'
    call sqlDisconnect
    return 0
endProcedure tstSqlStoredWK

tstSqlStoredSQL1: procedure expose m.
    call sqlConnect 'DBIA'
    rst = 'NO'
    retcode = -9876
    e = ''
    z = 0
    st = "DA540769.A2* DA540769.A1*"
    call sqlExec "call A540769.WKSQL1 ( :st, :rst)"
    say 'after call st='st 'rst='rst
    call sqlExec ,
          'ASSOCIATE LOCATOR (:RESULTS) WITH PROCEDURE A540769.WKUTIL'
    say 'results' results
    call sqlExec 'ALLOCATE C111 CURSOR FOR RESULT SET :RESULTS'
    say 'allocated c111'
    do while sqlExec('fetch c111 into :seq, :txt', 0 100) = 0
        say 'sysPrint' seq strip(txt, 't')
        end
    call sqlExec 'close c111'
    say 'closed'
    call sqlDisconnect
    return
endProcedure tstSqlStoredSQL1

tstSqlTriggerTiming:
    parse upper arg tb ni
    m.noInsert = ni == 0
    cnt = 200000
    if tb = '' then
        TB = 'GDB9998.TWK511TRI'
    call sqlConnect dbaf
    say timing() 'noInsert' m.noInsert 'tb' tb
    call sql2St 49, '*', cc, 'select max(pri) MX from' tb
    if m.cc.1.mx == m.sqlNull then
        m.cc.1.mx = 0
    von = m.cc.1.mx + 1
    bis = m.cc.1.mx + cnt
    say m.cc.0 'max' m.cc.1.mx 'von' von 'bis' bis 'count' cnt tb
    if right(tb, 2) = 'A1' then do
        call sqlPrepare 3, 'insert into' tb '(pri, short, long, par)' ,
                   'values (?, ?, ?, ?)'
        do ax=von to bis
            call sqlExecute 3, ax,
                  , ax 'wsh short', ax 'wsh long long long long long ',
                  , (ax-1) // 1000 + 1
            end
        end
    else do
        call sqlPrepare 3, 'insert into' tb '(pri, short, long)' ,
                   'values (?, ?, ?)'
        do ax=von to bis
            call sqlExecute 3, ax,
                  , ax 'wsh short', ax 'wsh long long long long long ',
                  , (ax-1) // 1000 + 1
            end
        end
    /*  call sqlLn 5,,, 'select * from' tb 'where pri >=' von */
    call sqlExImm 'commit'
    say timing()
    call sqlDisconnect
    return
endProcedure tstSqlTriggerTiming

tstSql: procedure expose m.
    cx = 2
    call sqlConnect
    call jIni
/*
$=/tstSql/
    ### start tst tstSql ##############################################
    *** err: SQLCODE = -204: A540769.SYSDUMMY IS AN UNDEFINED NAME
    .    e 1: stmt = prepare s7 from :src
    .    e 2: with from :src = select * from sysdummy
    fetchA 1 ab= m.abcdef.123.AB abc ef= efg
    fetchA 0 ab= m.abcdef.123.AB abc ef= efg
    sqlVars :M.STST.A :M.STST.A.sqlInd, :M.STST.B :M.STST.B.sqlInd, :M.+
    STST.C :M.STST.C.sqlInd
    1 all from dummy1
    a=a b=2 c=---
    fetchBT 1 SYSTABLES
    fetchBT 0 SYSTABLES
    fetchBI 1 SYSINDEXES
    fetchBI 0 SYSINDEXES
    opAllCl 3
    fetchC 1 SYSTABLES
    fetchC 2 SYSTABLESPACE
    fetchC 3 SYSTABLESPACESTATS
    sql2St 3
    fetchD 1 SYSIBM.SYSTABLES
    fetchD 2 SYSIBM.SYSTABLESPACE
    fetchD 3 SYSIBM.SYSTABLESPACESTATS
$/tstSql/ */
    call tst t, "tstSql"
    src = 'select * from sysdummy'
    call sqlExec 'prepare s7 from :src'
    call sqlPrepare cx, "select 'abc' , 'efg'",
                            'from sysibm.sysDummy1'
    call sqlExec 'declare c'cx 'cursor for s'cx
    call sqlOpen cx
    a = 'abcdef'
    b = 123
    do i=1 to 2
        call out 'fetchA' sqlFetchInto(cx, ':m.a.b.ab, :m.a.b.ef') ,
            'ab= m.'a'.' || b'.'ab m.a.b.ab 'ef=' m.a.b.ef
        end
    call sqlClose cx
    drop stst a b c m.stst.a m.stst.b m.stst.c
    sv = sqlVars('M.STST',  A B C , 1)
    call out 'sqlVars' sv
    call out sql2St(,
             "select 'a' a, 2 b, case when 1=0 then 1 else null end c",
                 "from sysibm.sysDummy1",
           , stst) 'all from dummy1'
    call out 'a='m.stst.1.a 'b='m.stst.1.b 'c='m.stst.1.c
    call sqlPreDeclare cx, "select name" ,
                            "from sysibm.sysTables" ,
                            "where creator = 'SYSIBM' and name = ?"
    call sqlOpen cx, 'SYSTABLES'
    call out 'fetchBT' sqlFetchInto(cx, ':NM') nm
    call out 'fetchBT' sqlFetchInto(cx, ':NM') nm
    call sqlClose cx
    call sqlOpen cx, 'SYSINDEXES'
    a = 'a b c'
    b = 1234565687687234
    call out 'fetchBI' sqlFetchInto(cx, ':NM') nm
    call out 'fetchBI' sqlFetchInto(cx, ':NM') nm
    call sqlClose cx
    src = 'select name' ,
              "from sysibm.sysTables" ,
              "where creator = 'SYSIBM' and name like 'SYSTABLES%'",
              "fetch first 3 rows only"
     call sqlPreDeclare cx, src
     st = 'wie geht'' s'
     call out 'opAllCl' sqlOpAllCl(cx, st, ':M.ST.SX.NAME')
     do x=1 to m.st.0
         call out 'fetchC' x m.st.x.name
         end
     st = 'auch noch'
     src = "select strip(creator) || '.' || strip(name) name" ,
               substr(src,12)
     call out 'sql2St' sql2St(src, st)
     do x=1 to m.st.0
         call out 'fetchD' x m.st.x.name
         end
    call tstEnd t
    return
endProcedure tstSql


tstSqlB: procedure expose m.
/*
$=/tstSqlB/
    ### start tst tstSqlB #############################################
    #jIn 1# select strip(name) "tb", strip(creator) cr
    #jIn 2# , case when name = 'SYSTABLES' then 1 else null end
    #jIn 3# from sysibm.sysTables
    #jIn 4# where creator = 'SYSIBM' and name like 'SYSTABLES%'
    #jIn 5# .
    #jIn 6# order by name
    #jIn 7# fetch first 3 rows only
    #jIn eof 8#
    dest1.fet: SYSTABLES SYSIBM 1
    dest2.fet: SYSTABLESPACE SYSIBM ---
    dest3.fet: SYSTABLESPACESTATS SYSIBM ---
$/tstSqlB/ */
    call tst t, "tstSqlB"
    cx = 9
    call sqlConnect
    call jIni
    call mAdd mCut(t'.IN', 0),
      , 'select strip(name) "tb", strip(creator) cr' ,
      ,     ", case when name = 'SYSTABLES' then 1 else null end" ,
      ,   "from sysibm.sysTables" ,
      ,   "where creator = 'SYSIBM' and name like 'SYSTABLES%'", ,
      ,   "order by name",
      ,   "fetch first 3 rows only"
     call sqlPreOpen cx
     do qx=1 while sqlFetch(cx, 'dest'qx'.fet')
         dst = 'dest'qx'.fet'
         call out dst':' m.dst.tb m.dst.cr m.dst.col3
         drop m.dst.tb m.dst.cr m.dst.col3
         end
     call tstEnd t
     return
endProcedure tstSqlB

tstSqlO: procedure expose m.
/*
$=/tstSqlO/
    ### start tst tstSqlO #############################################
    *** err: SQLCODE = -204: A540769.SYSDUMMY IS AN UNDEFINED NAME
    .    e 1: stmt = prepare s7 from :src
    .    e 2: with from :src = select * from sysdummy
    REQD=Y col=123 case=--- .sqlInd:-1 col5=anonym geburri=1956-04-01+
    -06.00.00.000000
$/tstSqlO/
*/
    call sqlConnect
    call sqlStmt 'set current schema = A540769';
    call tst t, "tstSqlO"
    src = 'select * from sysdummy'
    call sqlExec 'prepare s7 from :src'
    r = sqlRdr( ,
          "select d.*, 123, timestamp('01.04.1956','06:00:00')" ,
                             '"geburri walter",',
                    'case when 1=0 then 1 else null end caseNull,',
                    "'anonym'" ,
               'from sysibm.sysdummy1 d')
    call jOpen r, '<'
    do while assNN('o', jReadO(r))

        call out 'REQD='m.o.IBMREQD 'col='m.o.col2,
                  'case='m.o.CASENULL '.sqlInd:'m.o.caseNull.sqlInd,
                  'col5='m.o.col5,
                  'geburri='m.o.GEBURRI
        end
    call jClose r
    call tstEnd t
    return
endProcedure tstSqlO

tstSqlFTab: procedure expose m.
/*
$=/tstSqlFTab/
    ### start tst tstSqlFTab ##########################################
    UPDATESTATSTIME----------------NACTIVE------NPAGES-XTENTS-LOADRLAST+
    TIME--------------REORGLASTTIME--------------EORGINSERTS-EORGDELETE+
    S-EORGUPDATES-GUNCLUSTINS-RGDISORGLOB-GMASSDELETE-GNEARINDREF-RGFAR+
    INDREF-STATSLASTTIME--------------TATSINSERTS-TATSDELETES-TATSUPDAT+
    ES-SMASSDELETE-COPYLASTTIME---------------PDATEDPAGES-COPYCHANGES-C+
    OPYUP-COPYUPDATETIME-------------I---DBID---PSID-TITION-STANCE-SPAC+
    E---TOTALRO-DATASIZ-UNCOMPR-DBNAME-------NAME---------REORGCL-REORG+
    SC-REORGHA-HASHLASTUS-DRI-L-STATS01----
    --- modified
    allg vorher                     others vorher
    db-------ts---------part---inst-UPDATESTATSTIME----------------NACT+
    IVE------NPAGES-XTENTS-LOADRLASTTIME--------------REORGLASTTIME----+
     ----------EORGINSERTS-EORGDELETES-EORGUPDATES-GUNCLUSTINS-RGDISORG+
    LOB-GMASSDELETE-GNEARINDREF-RGFARINDREF-STATSLASTTIME--------------+
    TATSINSERTS-TATSDELETES-TATSUPDATES-SMASSDELETE-COPYLASTTIME-------+
     --------PDATEDPAGES-COPYCHANGES-COPYUP-COPYUPDATETIME-------------+
    I---DBID---PSID-SPACE---TOTALRO-DATASIZ-UNCOMPR-REORGCL-REORGSC-REO+
    RGHA-HASHLASTUS-DRI-L-STATS01----
    db-------ts---------part---inst-UPDATESTATSTIME----------------NACT+
    IVE------NPAGES-XTENTS-LOADRLASTTIME--------------REORGLASTTIME----+
     ----------EORGINSERTS-EORGDELETES-EORGUPDATES-GUNCLUSTINS-RGDISORG+
    LOB-GMASSDELETE-GNEARINDREF-RGFARINDREF-STATSLASTTIME--------------+
    TATSINSERTS-TATSDELETES-TATSUPDATES-SMASSDELETE-COPYLASTTIME-------+
     --------PDATEDPAGES-COPYCHANGES-COPYUP-COPYUPDATETIME-------------+
    I---DBID---PSID-SPACE---TOTALRO-DATASIZ-UNCOMPR-REORGCL-REORGSC-REO+
    RGHA-HASHLASTUS-DRI-L-STATS01----
    allg nachher                    others nachher
    DBNAME                   INSTANCE                                  +
    .    NPAGES                                        REORGLASTTIME   +
    .                                   REORGUPDATES                   +
    .     REORGMASSDELETE                     STATSLASTTIME            +
    .                          STATSUPDATES                            +
    .           COPYUPDATEDPAGES               COPYUPDATETIME          +
    .            PSID                   DATASIZE                REORGSC+
    ANACCESS            DRIVETYPE
    .         NAME                   UPDATESTATSTIME                   +
    .                 EXTENTS                                          +
    .            REORGINSERTS                        REORGUNCLUSTINS   +
    .                  REORGNEARINDREF                                 +
    .   STATSINSERTS                        STATSMASSDELETE            +
    .                        COPYCHANGES                               +
    .    IBMREQD         SPACE                   UNCOMPRESSEDDATASIZE  +
    .  REORGHASHACCESS        LPFACILITY
    .                  PARTITION                                NACTIVE+
    .                        LOADRLASTTIME                             +
    .                        REORGDELETES                        REORGD+
    ISORGLOB                      REORGFARINDREF                       +
    .              STATSDELETES                        COPYLASTTIME    +
    .                                   COPYUPDATELRSN                 +
    .     DBID                  TOTALROWS               REORGCLUSTERSEN+
    S        HASHLASTUSED     STATS01
$/tstSqlFTab/
*/
    call tst t, 'tstSqlFTab'
    call sqlConnect
    call sqlPreOpen 17, 'select * from sysibm.sysTablespaceStats' ,
                "where dbName = 'xxxDB06' and name = 'SYSTSTAB'"
    call sqlFTabReset abc, 17, 1,     ,  12
    call sqlFTabDef      abc, 492, '%7e'
    call sqlFTabOthers abc
    call sqlfTab abc
    call sqlClose 17
    call out '--- modified'
    call sqlopen  17
    call sqlFTabReset abc, 17, 2 1, 1 3 'c', 12
    call sqlFTabDef      abc, 492, '%7e'
    call sqlFTabAdd      abc, DBNAME, '%-8C', 'db', 'allg vorher'  ,
                                                  , 'allg nachher'
    call sqlFTabAdd      abc, NAME  , '%-8C', 'ts'
    call sqlFTabAdd      abc, PARTITION , , 'part'
    call sqlFTabAdd      abc, INSTANCE  , , 'inst'
    call fTabAddTit      abc, 2,                    'others vorher'
    call fTabAddTit      abc, 3,                    'others nachher'
    call sqlFTabOthers abc
    call sqlFTab abc
    call sqlClose 17
    call tstEnd t
    return
endProcedure tstSqlFTab

tstSqlC: procedure expose m.
/*
$=/tstSqlCRx/
    ### start tst tstSqlCRx ###########################################
    *** err: SQLCODE = -104: ILLEGAL SYMBOL "?". SOME SYMBOLS THAT MIGH+
    T
    .    e 1:     BE LEGAL ARE: . <IDENTIFIER> JOIN INNER LEFT RIGHT FU+
    LL CROSS ,
    .    e 2:     HAVING GROUP
    .    e 3: src select * from sysibm?sysDummy1
    .    e 4:   >    >>>pos 21 of 30>>>
    .    e 5: stmt = prepare s9 into :M.SQL.9.D from :src
    .    e 6: with into :M.SQL.9.D = M.SQL.9.D
    .    e 7:      from :src = select * from sysibm?sysDummy1
    *** err: SQLCODE = -204: NONONO.SYSDUMMY1 IS AN UNDEFINED NAME
    .    e 1: stmt = prepare s9 into :M.SQL.9.D from :src
    .    e 2: with into :M.SQL.9.D = M.SQL.9.D
    .    e 3:      from :src = select * from nonono.sysDummy1
    sys  ==> server CHSKA000DBAF    .
    fetched a1=abc, i2=12, c3=---
    .  I1 C2  .
    .   1 eins
    2222 zwei
$/tstSqlCRx/
$=/tstSqlCCsm/
    ### start tst tstSqlCCsm ##########################################
    *** err: SQLCODE = -104: ILLEGAL SYMBOL "?". SOME SYMBOLS THAT MIGH+
    T
    .    e 1:     BE LEGAL ARE: . <IDENTIFIER> JOIN INNER LEFT RIGHT FU+
    LL CROSS ,
    .    e 2:     HAVING GROUP
    .    e 3: src select * from sysibm?sysDummy1
    .    e 4:   >    >>>pos 21 of 30>>>
    .    e 5: stmt = select * from sysibm?sysDummy1
    .    e 6: subsys = DD0G, host = RZ8, interfaceType Csm
    *** err: SQLCODE = -204: NONONO.SYSDUMMY1 IS AN UNDEFINED NAME
    .    e 1: stmt = select * from nonono.sysDummy1
    .    e 2: subsys = DD0G, host = RZ8, interfaceType Csm
    sys rz8/DD0G ==> server CHROI000DD0G    .
    fetched a1=abc, i2=12, c3=---
    .  I1 C2  .
    .   1 eins
    2222 zwei
$/tstSqlCCsm/ */
    sqlBuf = jBuf("select 1 i1, 'eins' c2 from sysibm.sysDummy1",
      , "union all select 2222 i1, 'zwei' c2 from sysibm.sysDummy1")
    do tx=1 to 2
        if tx = 1 then do
            call tst t, "tstSqlCRx"
            sys = ''
            call sqlConnect
            end
        else do
            call tst t, "tstSqlCCsm"
            sys =  'rz8/DD0G'
            end
        call sqlConnect sys
        cx = 9
        call sqlQuery cx, 'select * from sysibm?sysDummy1'
        call sqlQuery cx, 'select * from nonono.sysDummy1'
        call sqlQuery cx, "select 'abc' a1, 12 i2, current server srv",
                     ", case when 1=0 then 1 else null end c3",
                 "from sysibm.sysDummy1"
        do while sqlFetch(cx, dst)
            call out 'sys' sys '==> server' m.dst.srv
            call out 'fetched a1='m.dst.a1', i2='m.dst.i2', c3='m.dst.c3
            end
        call fmtFTab , sqlRdr(sqlBuf)
        call sqlDisconnect
        call tstEnd t
        end
    return
endProcedure tstSqlC

tstSqlQ: procedure expose m.
/*
$=/tstSqlQ/
    ### start tst tstSqlQ #############################################
    insert updC 1
    insert select updC 2
    dest4.fet: 1 eins 2012-04-01-06.07.08.000000 1 updC 0
    dest5.fet: 2 zwei 2012-02-29-15.44.33.220000 --- updC 0
    dest6.fet: 11 zehn+eins 2012-04-11-06.07.08.000000 1 updC 0
    dest7.fet: 12 zehn+zwei 2012-03-10-15.44.33.220000 --- updC 0
    SQLCODE = 000,  SUCCESSFUL EXECUTION
    warnings  4=W no where
    stmt = prepare s9 into :M.SQL.9.D from :src
    with into :M.SQL.9.D = M.SQL.9.D
    .     from :src = select * from final table (update session.dgtt  s+
    et c2 = 'u' || c2)
    dest9.fet: 1 ueins 2012-04-01-06.07.08.000000 updC 4
    dest10.fet: 2 uzwei 2012-02-29-15.44.33.220000 updC 4
    dest11.fet: 11 uzehn+eins 2012-04-11-06.07.08.000000 updC 4
    dest12.fet: 12 uzehn+zwei 2012-03-10-15.44.33.220000 updC 4
$/tstSqlQ/ */
    call tst t, "tstSqlQ"
    cx = 9
    qx = 3
    call sqlConnect
    call sqlUpdate,"declare global temporary table session.dgtt",
                           "(i1 int, c2 varchar(20), t3 timestamp)"
    call sqlUpdate,"insert into session.dgtt" ,
                    "values(1, 'eins', '2012-04-01 06.07.08')"
    call sqlUpdate,"insert into session.dgtt" ,
                    "values(2, 'zwei', '2012-02-29 15:44:33.22')"
    call out 'insert updC' m.sql..updateCount
    call sqlUpdate,"insert into session.dgtt" ,
                      "select i1+10, 'zehn+'||strip(c2), t3+10 days",
                           "from session.dgtt"
    call out 'insert select updC' m.sql..updateCount
    call sqlQuery cx, 'select d.*' ,
               ', case when mod(i1,2) = 1 then 1 else null end grad' ,
               'from session.dgtt d'
    do qx=qx+1 while sqlFetch(cx, 'dest'qx'.fet')
        dst = 'dest'qx'.fet'
        call out dst':' m.dst.i1 m.dst.c2 m.dst.t3 m.dst.grad ,
           'updC' m.sql.cx.updateCount
        drop m.dst.i1 m.dst.c2 m.dst.t3 m.dst.grad
        end
    call sqlClose cx
    call sqlQuery cx, "select * from final table (update session.dgtt",
                   " set c2 = 'u' || c2)"
    do qx=qx+1 while sqlFetch(cx, 'dest'qx'.fet')
        dst = 'dest'qx'.fet'
        call out dst':' m.dst.i1 m.dst.c2 m.dst.t3 ,
           'updC' m.sql.cx.updateCount
        drop m.dst.i1 m.dst.c2 m.dst.t3 m.dst.grad
        end
    call sqlClose cx
    call tstEnd t
    return
endProcedure tstSqlQ

tstSqlO: procedure expose m.
/*
$=/tstSqlO/
    ### start tst tstSqlO #############################################
    *** err: SQLCODE = -204: A540769.SYSDUMMY IS AN UNDEFINED NAME
    .    e 1: stmt = prepare s7 from :src
    .    e 2: with from :src = select * from sysdummy
    REQD=Y col=123 case=--- .sqlInd:-1 col5=anonym geburri=1956-04-01+
    -06.00.00.000000
$/tstSqlO/
*/
    call sqlConnect
    call sqlStmt 'set current schema = A540769';
    call tst t, "tstSqlO"
    src = 'select * from sysdummy'
    call sqlExec 'prepare s7 from :src'
    r = sqlRdr( ,
          "select d.*, 123, timestamp('01.04.1956','06:00:00')" ,
                             '"geburri walter",',
                    'case when 1=0 then 1 else null end caseNull,',
                    "'anonym'" ,
               'from sysibm.sysdummy1 d')
    call jOpen r, '<'
    do while assNN('o', jReadO(r))

        call out 'REQD='m.o.IBMREQD 'col='m.o.col2,
                  'case='m.o.CASENULL '.sqlInd:'m.o.caseNull.sqlInd,
                  'col5='m.o.col5,
                  'geburri='m.o.GEBURRI
        end
    call jClose r
    call tstEnd t
    return
endProcedure tstSqlO

tstSqlUpdComLoop: procedure expose m.
/*
$=/tstSqlUpdComLoop/
    ### start tst tstSqlUpdComLoop ####################################
    sqlCode 0: declare global temporary table session.dgtt (i1 int) on +
    commit ....
    sqlCode 0, 123 rows inserted: insert into session.dgtt select row_n+
    umber()....
    CNT
    123
    1 rows fetched: select count(*) cnt from session.dgtt
    123 rows deleted, 10 commits: delete from session.dgtt d where i1 i+
    n (sele....
    T
    0
    1 rows fetched: select count(*) cnt from session.dgtt
$/tstSqlUpdComLoop/ */
    call tst t, "tstSqlUpdComLoop"
    call sqlConnect
    call out sqlStmt("declare global temporary table session.dgtt",
                           "(i1 int) on commit preserve rows")
    call out sqlStmt("insert into session.dgtt",
       "select row_number() over() from sysibm.sysTables",
           "fetch first 123 rows only")
    call out sqlStmt("select count(*) cnt from session.dgtt")
    call out sqlUpdComLoop("delete from session.dgtt d where i1 in",
       "(select i1 from session.dgtt fetch first 13 rows only)")
    call out sqlStmt("select count(*) cnt from session.dgtt")
    call tstEnd t
    return
endProcedure tstSqlUpdComLoop

tstSqlO1: procedure expose m.
/*
$=/tstSqlO1/
    ### start tst tstSqlO1 ############################################
    tstR: @tstWriteoV2 isA :<tstSqlO1Type>
    tstR:  .CR = SYSIBM
    tstR:  .TB = SYSTABLEPART
    tstR: @tstWriteoV3 isA :<tstSqlO1Type>
    tstR:  .CR = SYSIBM
    tstR:  .TB = SYSTABLEPART_HIST
    tstR: @tstWriteoV4 isA :<tstSqlO1Type>
    tstR:  .CR = SYSIBM
    tstR:  .TB = SYSTABLES
    tstR: @tstWriteoV5 isA :<tstSqlO1Type>
    tstR:  .CR = SYSIBM
    tstR:  .TB = SYSTABLESPACE
    --- writeAll
    tstR: @tstWriteoV6 isA :<tstSqlO1Type>
    tstR:  .CR = SYSIBM
    tstR:  .TB = SYSTABLEPART
    tstR: @tstWriteoV7 isA :<tstSqlO1Type>
    tstR:  .CR = SYSIBM
    tstR:  .TB = SYSTABLEPART_HIST
    tstR: @tstWriteoV8 isA :<tstSqlO1Type>
    tstR:  .CR = SYSIBM
    tstR:  .TB = SYSTABLES
    tstR: @tstWriteoV9 isA :<tstSqlO1Type>
    tstR:  .CR = SYSIBM
    tstR:  .TB = SYSTABLESPACE
$/tstSqlO1/
*/
    call sqlConnect
    call tst t, "tstSqlO1"
    sq = sqlRdr("select strip(creator) cr, strip(name) tb",
                     "from sysibm.sysTables",
                     "where creator='SYSIBM' and name like 'SYSTABL%'",
                     "order by 2 fetch first 4 rows only")
    call jOpen sq, m.j.cRead
    do while assNN('ABC', jReadO(sq))
        if m.sq.rowCount = 1 then do
            cx = m.sq.cursor
            call mAdd t.trans, className(m.sql.cx.type) '<tstSqlO1Type>'
            end
        call outO abc
        end
    call jClose sq
    call out '--- writeAll'
    call pipeWriteAll sq
    call tstEnd t
    return 0
endProcedure tstSqlO1

tstSqlO2: procedure expose m.
/*
$=/tstSqlO2/
    ### start tst tstSqlO2 ############################################
    CR     TB                RR
    SYSIBM SYSTABLEPART       1
    SYSIBM SYSTABLEPART_HIST  4
    SYSIBM SYSTABLES          9
    SYSIBM SYSTABLESPACE     16
$/tstSqlO2/
*/
    call sqlConnect
    call tst t, "tstSqlO2"
    call pipe '+N'
    call out    "select strip(creator) cr, strip(name) tb,"
    call out         "(row_number()over())*(row_number()over()) rr"
    call out         "from sysibm.sysTables"
    call out         "where creator='SYSIBM' and name like 'SYSTABL%'"
    call out         "order by 2 fetch first 4 rows only"
    call pipe 'N|'
    call sqlSel
    call pipe 'P|'
    call fmtFTab abc
    call pipe '-'
    call tstEnd t
    return 0
endProcedure tstSqlO2
tstSqlS1: procedure expose m.
/*
$=/tstSqlS1/
    ### start tst tstSqlS1 ############################################
    select c, a from sysibm.sysDummy1
    tstR: @tstWriteoV2 isA :<cla sql c a>
    tstR:  .C = 1
    tstR:  .A = a
    select ... where 1=0
    tstR: @ obj null
$/tstSqlS1/
*/
    call sqlOIni
    call tst t, "tstSqlS1"
    call sqlConnect dbaf
    s1 = fileSingle( ,
        sqlRdr("select count(*) c, 'a' a from sysibm.sysdummy1"))
    call mAdd t.trans, className(objClass(s1)) '<cla sql c a>'
    call out 'select c, a from sysibm.sysDummy1'
    call tstWriteO t, s1
    call out 'select ... where 1=0'
    call tstWriteO t, fileSingle( ,
        sqlRdr("select*from sysibm.sysdummy1 where 1=0"), '')
    call tstEnd t
    return
endProcedure tstSqlS1
tstSqlStmt: procedure expose m.
/*
$=/tstSqlStmt/
    ### start tst tstSqlStmt ##########################################
    *** err: SQLCODE = -713: THE REPLACEMENT VALUE FOR CURRENT SCHEMA I+
    S
    .    e 1:     INVALID
    .    e 2: stmt = execute immediate :ggSrc
    .    e 3: with immediate :ggSrc = set current schema = 'sysibm'
    sqlCode -713: set current schema = 'sysibm'
    sqlCode 0: set current schema =  sysibm
    tstR: @tstWriteoV2 isA :<sql?sc>
    tstR:  .C = SYSIBM
    1 rows fetched: select current schema c  from sysDummy1
    tstR: @tstWriteoV3 isA :<sql?sc>
    tstR:  .C = SYSIBM
    1 rows fetched: (select current schema c from sysDummy1)
$/tstSqlStmt/ */
    call sqlConnect
    call tst t, "tstSqlStmt"
    cn = className(classNew('n* SQL u f C v'))
    call mAdd t.trans, cn '<sql?sc>'
    call tstOut t, sqlStmt("set current schema = 'sysibm'")
    call tstOut t, sqlStmt("  set current schema =  sysibm ")
    call tstOut t, sqlStmt("   select current schema c  from sysDummy1",
                           , ,'o')
    call tstOut t, sqlStmt("  (select current schema c from sysDummy1)",
                           , ,'o')
    call tstEnd t
    return
endProcedure tstSqlStmt
tstSqlStmts: procedure expose m.
/*
$=/tstSqlStmts/
   ### start tst tstSqlStmts #########################################
   *** err: SQLCODE = -104: ILLEGAL SYMBOL "BLABLA". SOME SYMBOLS THAT
   .    e 1:     MIGHT BE LEGAL ARE: <ERR_STMT> <WNG_STMT> GET SQL SAV+
   EPOINT HOLD
   .    e 2:     FREE ASSOCIATE
   .    e 3: src blabla
   .    e 4:   > <<<pos 1 of 6<<<
   .    e 5: stmt = blabla
   sqlCode -104: blabla
   sqlCode 0: set current schema=  sysIbm
   C
   1
   1 rows fetched: select count(*) "c" from sysDummy1  with    ur
   C
   1
   1 rows fetched: select count(*) "c" from sysDummy1  with    ur
   #jIn 1# set current -- sdf
   #jIn 2# schema = s100447;
   sqlCode 0: set current  schema = s100447
   #jIn eof 3#
$/tstSqlStmts/ */
    call sqlConnect
    call scanReadIni
    call scanWinIni
    call tst t, "tstSqlStmts"
    call sqlStmts "blabla ;;set current schema=  sysIbm "
    b = jBuf('select count(*) "c" from sysDummy1 --com' ,
             ,'with  /* comm */ ur;')
    call sqlStmts b
    call sqlStmts b, , '-sql72'
    call mAdd mCut(t'.IN', 0), 'set current -- sdf', 'schema = s100447;'
    call sqlStmts
    call tstEnd t
    return
endProcedure tstSqlStmts
/* copx tstSql end  ***************************************************/
/* copx tstComp begin **************************************************
    test the wsh compiler
***********************************************************************/
tstComp: procedure expose m.
    call compIni
    call tstCompDataConst
    call tstCompDataVars
    call tstCompShell
    call tstCompPrimary
    call tstCompExpr
    call tstCompFile
    call tstCompStmt
    call tstCompStmtA
    call tstCompDir
    call tstCompObj
    call tstCompORun
    call tstCompDataIO
    call tstCompPipe
    call tstCompRedir
    call tstCompComp
    call tstCompSyntax
    call tstCompSql
    call tstTotal
    return
endProcedure tstComp

tstComp1: procedure expose m.
parse arg ty nm cnt
    c1 = 0
    if cnt = 0 |cnt = '+' then do
        c1 = cnt
        cnt = ''
        end
    call jIni
    src = jBuf()
    call jOpen src, m.j.cWri
    do sx=2 to arg()
        call jWrite src, arg(sx)
        end
    call tstComp2 nm, ty, jClose(src), , c1, cnt
    return
endProcedure tstComp1

tstComp2: procedure expose m.
parse arg nm, spec, src, compSt
    call compIni
    call tst t, nm, compSt
    if src == '' then do
        src = jBuf()
        call tst4dp src'.BUF', mapInline(nm'Src')
        end
    m.t.moreOutOk = abbrev(strip(arg(5)), '+')
    cmp = comp(src)
    call out 'compile' spec',' (m.src.buf.0) 'lines:' m.src.buf.1
    r = compile(cmp, spec)
    noSyn = m.t.errHand = 0
    coErr = m.t.err
    say if( noSyn, "compiled", "*** syntaxed") r ":" objMet(r, 'oRun')
    cnt = 0
    do ax = 5 to max(arg(), 5) while m.t.err = coErr & noSyn
        a1 = strip(arg(ax))
        if a1 == '' & arg() >= 5 then
            iterate
        if abbrev(a1, '+') then do
            m.t.moreOutOk = 1
            a1 = strip(substr(a1, 2))
            end
        if datatype(a1, 'n') then
            cnt = a1
        else if a1 \== '' then
            call err 'tstComp2 bad arg('ax')' arg(ax)
        if cnt = 0 then do
            call mCut 'T.IN', 0
            call out "run without input"
            end
        else  do
            call mAdd mCut('T.IN', 0),
                ,"eins zwei drei", "zehn elf zwoelf?",
                , "zwanzig 21 22 23 24 ... 29|"
            do lx=4 to cnt
                call mAdd 'T.IN', left(lx "line" lx, lx+9, '-')';'
                end
            call out "run with" cnt "inputs"
            end
        m.t.inIx = 0
        call oRun r
        end
    call tstEnd t
    return
endProcedure tstComp2

tstCompDataConst: procedure expose m.
/*
$=/tstCompDataConst/
    ### start tst tstCompDataConst ####################################
    compile =, 8 lines:       Lline one, $** asdf
    run without input
    .      Lline one, .
    line two..
    line threecontinued on 4
    line five  fortsetzung
    line six   fortsetzung
$/tstCompDataConst/ */
    call tstComp1 '= tstCompDataConst',
        , '      Lline one, $** asdf',
        , 'line two.',
        , 'line three$*+ bla bla' ,
        , 'continued on 4',
        , 'line five $*( und so',
        , 'weiter $abc $? $''$*)'' $"$*)" und weiter $*) fortsetzung',
        , 'line six  $*( und $*( $** $*( so',
        , 'weiter $abc $? $*)'' $"$*)" und weiter $*) fortsetzung'

/*
$=/tstCompDataConstBefAftComm1/
    ### start tst tstCompDataConstBefAftComm1 #########################
    compile =, 3 lines:     $*(anfangs com.$*)       $*(plus$*) $** x
    run without input
    the only line;
$/tstCompDataConstBefAftComm1/ */
    call tstComp1 '= tstCompDataConstBefAftComm1',
        , '    $*(anfangs com.$*)       $*(plus$*) $** x',
        , 'the only line;',
        , '      $*(end kommentar$*)              '

/*
$=/tstCompDataConstBefAftComm2/
    ### start tst tstCompDataConstBefAftComm2 #########################
    compile =, 11 lines:     $*(anfangs com.$*)       $*(plus$*) $*+ x
    run without input
    the first non empty line;
    .      .
    befor an empty line with comments;
$/tstCompDataConstBefAftComm2/ */

    call tstComp1 '= tstCompDataConstBefAftComm2',
        , '    $*(anfangs com.$*)       $*(plus$*) $*+ x',
        , '    $*(forts Zeile com.$*)       $*(plus$*) $** x',
        , ' $*(comment 2. Zeile$*) $*(plus$*) $*+ x',
        , ' $*(forts Zeile com.$*) $*(plus$*) $** x',
        , 'the first non empty line;',
        , '      ',
        , 'befor an empty line with comments;',
        , ' $*(comment 4. Zeile$*) $*(plus$*) $*+ x',
        , ' $*(forts 4.Zeile com.$*) $*(plus$*) $** x',
        , '      $*(end kommentar$*)              $*+',
        , ' $*(forts end com.$*) $*(plus$*) $** x'
     return
endProcedure tstCompDataComm

tstCompDataVars: procedure expose m.
/*
$=/tstCompDataVars/
    ### start tst tstCompDataVars #####################################
    compile =, 5 lines:       Lline one, $** asdf
    run without input
    .      Lline one, .
    lline zwei output
    lline 3 .
    variable v1 = valueV1 ${v1}= valueV1; .
    .      $-.{""$v1} = valueV1; .
$/tstCompDataVars/ */
    call tstComp1 '= tstCompDataVars',
        , '      Lline one, $** asdf',
        , '   $$ lline zwei output',
        , 'lline 3 $=v1= valueV1 ' ,
        , 'variable v1 = $v1 $"${v1}=" ${  v1  }; ',
        , '      $"$-.{""""$v1} =" $-.{""$v1}; '
    return
endProcedure tstCompDataVars

tstCompShell: procedure expose m.
/*
$=/tstCompShell/
    ### start tst tstCompShell ########################################
    compile @, 12 lines:   $$  Lline one, $** asdf
    run without input
    Lline one,
    lline zwei output
    v1 = valueV1 ${v1}= valueV1|
    REXX OUT L5 CONTINUED L6 CONTINUED L7
    L8 ONE
    L9 TWO
    valueV1
    valueV1 valueV2
    out  valueV1 valueV2
    SCHLUSS
$/tstCompShell/ */
    call tstComp1 '@ tstCompShell',
        , '  $$  Lline one, $** asdf',
        , '   $$ lline zwei output',
        , '        $=v1= valueV1 ' ,
        , '$$       v1 = $v1 $"${v1}=" ${  v1  }| ' ,
        , 'call out rexx out l5, ' ,
        , '     continued l6 , ' ,
        , '     continued l7   ' ,
        , 'call out l8 one    ' ,
        , 'call out l9 two$=v2=valueV2  ',
        , '$$- $v1  $$- $v1 $v2   ',
        , 'call out   "out "     $v1 $v2   ',
        , '$$-   schluss    '
/*
$=/tstCompShell2/
    ### start tst tstCompShell2 #######################################
    compile @, 13 lines: $@do j=0 to 1 $@¢ $$ do j=$j
    run without input
    do j=0
    after if 0 $@¢ $!
    after if 0 $=@¢ $!
    do j=1
    if 1 then $@¢ a
    a2
    if 1 then $@=¢ b
    b2
    after if 1 $@¢ $!
    after if 1 $=@¢ $!
    end
$/tstCompShell2/ */
    call tstComp1 '@ tstCompShell2',
        , '$@do j=0 to 1 $@¢ $$ do j=$j' ,
        ,     'if $j then $@¢ ',
        ,          '$$ if $j then $"$@¢" a $$a2' ,
        ,          '$!',
        ,     'if $j then $@=¢ ',
        ,          '$$ if $j then $"$@=¢" b $$b2' ,
        ,          '$!',
        ,     'if $j then $@¢ $!' ,
        ,     '$$ after if $j $"$@¢ $!"' ,
        ,     'if $j then $@=¢ $!' ,
        ,     '$$ after if $j $"$=@¢ $!"' ,
        ,     '$!',
        , '$$ end'
    return
endProcedure tstCompShell

tstCompPrimary: procedure expose m.
    call compIni
/*
$=/tstCompPrimary/
    ### start tst tstCompPrimary ######################################
    compile =, 16 lines: Strings $"$""$""""$""" $'$''$''''$'''
    run without input
    Strings $"$""$" $'$''$'
    rexx $-{ 3 * 5 } = 15
    rexx $-¢ 5 * 7 $! = 35
    rexx $-// 7 * 11 $// = 77
    rexx $-/abcEf/ 11 * 13 $/abcEf/ = 143
    data  line three line four  bis hier
    shell line five line six bis hier
    var get   v1 value Eins, v1 value Eins .
    var isDef v1 1, v2 0 .
    #jIn eof 1#
    var read  >1 0 rr undefined
    #jIn eof 2#
    var read  >2 0 rr undefined
    no call abc$-{4*5} $-{efg$-{6*7} abc20 EFG42
    brackets $-{$-{1+9}*$-¢7+3$!*$-/b/5+5$/b/} 1000
    run with 3 inputs
    Strings $"$""$" $'$''$'
    rexx $-{ 3 * 5 } = 15
    rexx $-¢ 5 * 7 $! = 35
    rexx $-// 7 * 11 $// = 77
    rexx $-/abcEf/ 11 * 13 $/abcEf/ = 143
    data  line three line four  bis hier
    shell line five line six bis hier
    var get   v1 value Eins, v1 value Eins .
    var isDef v1 1, v2 0 .
    #jIn 1# eins zwei drei
    var read  >1 1 rr eins zwei drei
    #jIn 2# zehn elf zwoelf?
    var read  >2 1 rr zehn elf zwoelf?
    no call abc$-{4*5} $-{efg$-{6*7} abc20 EFG42
    brackets $-{$-{1+9}*$-¢7+3$!*$-/b/5+5$/b/} 1000
$/tstCompPrimary/ */
    call envRemove 'v2'
    call tstComp1 '= tstCompPrimary 3',
        , 'Strings $"$""$""""$"""' "$'$''$''''$'''",
        , 'rexx $"$-{ 3 * 5 } =" $-{ 3 * 5 }' ,
        , 'rexx $"$-¢ 5 * 7 $! =" $-¢ 5 * 7 $!' ,
        , 'rexx $"$-// 7 * 11 $// =" $-// 7 * 11 $//' ,
        , 'rexx $"$-/abcEf/ 11 * 13 $/abcEf/ ="',
            '$-/abcEf/ 11 * 13 $/abcEf/' ,
        , 'data $-=¢ line three',
        , 'line four $! bis hier'  ,
        , 'shell $-@¢ $$ line five',
        , '$$ line six $! bis hier' ,
        , '$= v1  =   value Eins  $=rr=undefined $= eins = 1 ',
        , 'var get   v1 $v1, v1 ${  v1  } ',
        , 'var isDef v1 ${? v${  eins  }  }, v2 ${?v2 } ',
        , 'var read  >1 ${> rr} rr $rr' ,
        , 'var read  >2 ${> rr} rr $rr',
        , 'no call $"abc$-{4*5} $-{efg$-{6*7}"',
            'abc$-{4*5} $-{efg$-{6*7}}',
        , 'brackets $"$-{$-{1+9}*$-¢7+3$!*$-/b/5+5$/b/}"',
            '$-{$-{1+9}*$-¢7+3$!*$-/b/5+5$/b/}'
    return
endProcedure tstCompPrimary

tstCompExpr: procedure expose m.
    call compIni
/*
$=/tstCompExprStr/
    ### start tst tstCompExprStr ######################################
    compile -, 3 lines: $=vv=vvStr
    run without input
    vv=vvStr
    o2String($.$vv)=vvStr
$/tstCompExprStr/ */
    call tstComp1 '- tstCompExprStr',
        , '$=vv=vvStr' ,
        , '"vv="$vv' ,
        , '$"o2String($.$vv)="o2String($.$vv)'
/*
$=/tstCompExprObj/
    ### start tst tstCompExprObj ######################################
    compile ., 5 lines: $=vv=vvStr
    run without input
    vv=
    vvStr
    s2o($.$vv)=
    vvStr
$/tstCompExprObj/ */
    call tstComp1 '. tstCompExprObj',
        , '$=vv=vvStr' ,
        , '"!vv="', '$vv',
        , '$"s2o($.$vv)="', 's2o($-$vv)'
/*
$=/tstCompExprDat/
    ### start tst tstCompExprDat ######################################
    compile =, 4 lines: $=vv=vvDat
    run without input
    vv=vvDat
    $.$vv= !vvDat
    $.-{"abc"}=!abc
$/tstCompExprDat/ */
    call tstComp1 '= tstCompExprDat',
        , '$=vv=vvDat' ,
        , 'vv=$vv',
        , '$"$.$vv=" $.$vv',
        , '$"$.-{""abc""}="$.-{"abc"}'

/*
$=/tstCompExprRun/
    ### start tst tstCompExprRun ######################################
    compile @, 3 lines: $=vv=vvRun
    run without input
    vv=vvRun
    o2string($.$vv)=vvRun
$/tstCompExprRun/ */
    call tstComp1 '@ tstCompExprRun',
        , '$=vv=vvRun' ,
        , 'call out "vv="$vv',
        , 'call out $"o2string($.$vv)="o2string($.$vv)'
/*
$=/tstCompExprCon/
$/tstCompExprCon/ */
/* wkTst sinnvolle Erweiterung ???
    call tstComp1 '# tstCompExprCon',
        , '$=vv=vvCon' ,
        , 'call out "vv="$vv',
        , 'call out $"o2string($.$vv)="o2string($.$vv)'
*/
    return
endProcedure tstCompExpr

tstCompStmt: procedure expose m.
/*
$=/tstCompStmt1/
    ### start tst tstCompStmt1 ########################################
    compile @, 8 lines: $= v1 = value eins  $= v2  =- 3*5*7 .
    run without input
    data v1 value eins v2 105
    eins
    zwei
    drei
    vier
    fuenf
    elf
    zwoelf  dreiZ
    . vierZ .
    fuenfZ
    lang v1 value eins v2 945
    oRun ouput 1
$/tstCompStmt1/ */
    call pipeIni
    call envPutO 'oRun', oRunner('call out "oRun ouput" (1*1)')
    call envRemove 'v2'
    call tstComp1 '@ tstCompStmt1',
        , '$= v1 = value eins  $= v2  =- 3*5*7 ',
        , '$$ data v1 $v1 v2 ${   v2  }',
        , '$$eins $@¢$$ zwei $$ drei  ',
        , '   $@¢   $! $@{   } $@//   $// $@/q r s /   $/q r s /',
             '       $@/eins/ $@¢ $$vier $! $/eins/ $! $$fuenf',
        , '$$elf $@=¢$@={ zwoelf  dreiZ  }  ',
        , '   $@=¢   $! $@=¢ $@=¢ vierZ $! $! $! $$fuenfZ',
        , '$$- "lang v1" $v1 "v2" ${v2}*9',
        , '$@$oRun""' /* String am schluss -> $$ "" statment||||| */

/*
$=/tstCompStmt2/
    ### start tst tstCompStmt2 ########################################
    compile @, 1 lines: $@for qq $$ loop qq $qq
    run without input
    #jIn eof 1#
    run with 3 inputs
    #jIn 1# eins zwei drei
    loop qq eins zwei drei
    #jIn 2# zehn elf zwoelf?
    loop qq zehn elf zwoelf?
    #jIn 3# zwanzig 21 22 23 24 ... 29|
    loop qq zwanzig 21 22 23 24 ... 29|
    #jIn eof 4#
$/tstCompStmt2/ */
    call tstComp1 '@ tstCompStmt2 3',
        , '$@for qq $$ loop qq $qq'

/*
$=/tstCompStmt3/
    ### start tst tstCompStmt3 ########################################
    compile @, 9 lines: $$ 1 begin run 1
    2 ct zwei
    ct 4 mit assign .
    run without input
    1 begin run 1
    3 run 3 ctV = ct 4 assign ctV|
    run 5 procCall $@$prCa
    out in proc at 8
    run 6 vor call $@prCa()
    out in proc at 8
    9 run end
    run with 3 inputs
    1 begin run 1
    3 run 3 ctV = ct 4 assign ctV|
    run 5 procCall $@$prCa
    out in proc at 8
    run 6 vor call $@prCa()
    out in proc at 8
    9 run end
$/tstCompStmt3/ */
    call tstComp1 '@ tstCompStmt3 3',
        , '$$ 1 begin run 1',
        , '$@ct $$ 2 ct zwei',
        , '$$ 3 run 3 ctV = $ctV|',
        , '$@ct $@=¢ct 4 mit assign $=ctV = ct 4 assign ctV $!',
        , '$$ run 5 procCall $"$@$prCa" $@$prCa',
        , '$$ run 6 vor call $"$@prCa()"',
        , '$@prCa()',
        , '$@proc prCa $$out in proc at 8',
        , '$$ 9 run end'

/*
$=/tstCompStmt4/
    ### start tst tstCompStmt4 ########################################
    compile @, 4 lines: $=eins=vorher
    run without input
    eins vorher
    eins aus named block eins .
$/tstCompStmt4/ */
    call tstComp1 '@ tstCompStmt4 0',
        , '$=eins=vorher' ,
        , '$$ eins $eins' ,
        , '$=/eins/aus named block eins $/eins/' ,
        , '$$ eins $eins'
/*
$=/tstCompStmtDo/
    ### start tst tstCompStmtDo #######################################
    compile @, 2 lines: ti=0$@do y=3 to 4 $@do 2 $@¢
    run without input
    y=3 ti1 z=7
    y=3 ti1 z=8
    y=3 ti2 z=7
    y=3 ti2 z=8
    y=4 ti3 z=7
    y=4 ti3 z=8
    y=4 ti4 z=7
    y=4 ti4 z=8
$/tstCompStmtDo/ */
    call tstComp1 '@ tstCompStmtDo', 'ti=0$@do y=3 to 4 $@do 2 $@¢',
     ,    'ti = ti + 1',
        '$@do $*(sdf$*) z $*(sdf$*) = 7 to 8 $$ y=$y ti$-{ti} z=$z $!'

/*
$=/tstCompStmtDo2/
    ### start tst tstCompStmtDo2 ######################################
    compile @, 7 lines: $$ $-=/sqlSel/
    run without input
    select 1 abc select 2 abc after table .
$/tstCompStmtDo2/ */
    call tstComp1 '@ tstCompStmtDo2',
         , '$$ $-=/sqlSel/',
         ,     '$=ty = abc ',
         ,     '$@do tx=1 to 2 $@=/table/',
         ,          'select $tx $ty',
         , '$/table/',
         ,     '$=ty = abc',
         ,     'after table',
         '$/sqlSel/'
     return
endProcedure tstCompStmt

tstCompStmtA: procedure expose m.
    call pipeIni

/*
$=/tstCompStmtAssAtt/
    ### start tst tstCompStmtAssAtt ###################################
    compile @, 19 lines: call tstCompStmtAA "begin", "tstAssAtt"
    run without input
    begin    tstAssAtt F1=F1val1   F2=         F3=         FR=
    gugus1
    ass1     tstAssAtt F1=F1val1   F2=F2ass1   F3=F3ass1   FR=
    ass2     tstAssAtt F1=F1val1   F2=F2ass1   F3=F3ass1   FR=<oAAR2>
    ass2     tstAssAr2 F1=FRF1ass2 F2=         F3=         FR=
    gugus3
    ass3     tstAssAtt F1=F1val1   F2=F2ass3   F3=F3ass1   FR=<oAAR2>
    ass3     tstAssAr2 F1=FRF1ass2 F2=FrF2ass3 F3=         FR=<oAAR3>
    ass3     tstAssAr3 F1=r2F1as3  F2=r2F2as3  F3=         FR=
    *** err: no field falsch in class tstAssAtt in EnvPut(falsch, +
             falsch, 1)
$/tstCompStmtAssAtt/

*/
    call classNew 'n? tstAssAtt u f F1 v, f F2 v,' ,
                'f F3 v, f FR r tstAssAtt'
    call envPutO 'tstAssAtt', oNew('tstAssAtt')
    call envPut 'tstAssAtt.F1', 'F1val1'
    call tstComp1 '@ tstCompStmtAssAtt',
        , 'call tstCompStmtAA "begin", "tstAssAtt"',
        , '$=tstAssAtt=:¢F2=F2ass1  $$gugus1',
        ,               'F3=F3ass1',
        ,               '!',
        , 'call tstCompStmtAA "ass1", "tstAssAtt"',
        , '$=tstAssAtt.FR.F1 = FRF1ass2',
        , '$=tstAssAr2 =. ${tstAssAtt.FR}',
        , 'call mAdd T.trans, $.$tstAssAr2 "<oAAR2>"',
        , 'call tstCompStmtAA "ass2", "tstAssAtt"',
          ';call tstCompStmtAA "ass2", "tstAssAr2"',
        , '$=tstAssAtt=:¢F2=F2ass3  $$gugus3',
        ,               ':/FR/ F2= FrF2ass3',
        ,                  'FR=:¢F1=r2F1as3',
        ,                       'F2=r2F2as3',
        ,     '  *  blabla $$ sdf',
        ,                        '!',
        ,               '/FR/    !',
        , '$=tstAssAr3 =. ${tstAssAtt.FR.FR}',
        , 'call mAdd T.trans, $.$tstAssAr3 "<oAAR3>";',
          'call tstCompStmtAA "ass3", "tstAssAtt";',
          'call tstCompStmtAA "ass3", "tstAssAr2";',
          'call tstCompStmtAA "ass3", "tstAssAr3"',
        , '$=tstAssAtt=:¢falsch=falsch$!'
/*
$=/tstCompStmtAsSuTy/
    ### start tst tstCompStmtAsSuTy ###################################
    compile @, 4 lines: call tstCompStmtA2 "begin", "tstAsSuTy"
    run without input
    begin    tstAsSuTy G1=G1ini1  .
    _..GT    tstAsSuTy F1=GTF1ini1 F2=         F3=         FR=
    as2      tstAsSuTy G1=G1ini1  .
    _..GT    tstAsSuTy F1=GtF1ass2 F2=F2ass2   F3=         FR=
$/tstCompStmtAsSuTy/
*/
    call classNew 'n? tstAsSuTy u f G1 v, f GT tstAssAtt'
    call envPutO 'tstAsSuTy', oNew('tstAsSuTy')
    call envPut 'tstAsSuTy.G1', 'G1ini1'
    call envPut 'tstAsSuTy.GT.F1', 'GTF1ini1'
    call tstComp1 '@ tstCompStmtAsSuTy',
        , 'call tstCompStmtA2 "begin", "tstAsSuTy"',
        , '$=tstAsSuTy.GT =:¢F1= GtF1ass2',
        ,         'F2= F2ass2 $!',
        , 'call tstCompStmtA2 "as2", "tstAsSuTy"'
/*
$=/tstCompStmtAssSt/
    ### start tst tstCompStmtAssSt ####################################
    compile @, 13 lines: .
    run without input
    *** err: bad stem index 1>0 @ <oASt>.HS class <clSt??> in EnvPut(ts+
    tAssSt.HS.1.F1, HS.1.ini0, )
    begin    tstAssSt  H1=H1ini1   HS.0=1       .
    _..1     tstAssSt. F1=HS.1.ini F2=         F3=         FR=
    ass2     tstAssSt  H1=H1ass2   HS.0=1       .
    _..1     tstAssSt. F1=         F2=hs+f2as2 F3=hs+f3as2 FR=
    ass3     tstAssSt  H1=H1ass3   HS.0=3       .
    _..1     tstAssSt. F1=         F2=hs+f2as3 F3=         FR=
    _..2     tstAssSt. F1=         F2=         F3=         FR=
    _..3     tstAssSt. F1=         F2=         F3=hs+f3as3 FR=
$/tstCompStmtAssSt/
*/
    cl = classNew('n? tstAssSt u f H1 v, f HS s tstAssAtt')
    cl = m.cl.2
    m.tstCl = m.cl.class
    call envPutO 'tstAssSt', oNew('tstAssSt')
    call oClaClear class4Name('tstAssAtt'), envGetO('tstAssSt')'.HS.1'
    call envPut 'tstAssSt.H1', 'H1ini1'
    call tstComp1 '@ tstCompStmtAssSt', '',
        , "call mAdd t.trans, $.$tstAssSt '<oASt>'",
               ", m.tstCl '<clSt??>'",
          ";call envPut 'tstAssSt.HS.1.F1', 'HS.1.ini0'",
          ";call envPut 'tstAssSt.HS.0', 1",
          ";call envPut 'tstAssSt.HS.1.F1', 'HS.1.ini1'",
        , 'call tstCompStmtSt "begin", "tstAssSt"',
        , '$=tstAssSt =:¢H1= H1ass2',
        ,      'HS =<:¢F2=hs+f2as2',
        ,          'F3=hs+f3as2$! !' ,
        , 'call tstCompStmtSt "ass2", "tstAssSt"',
        , '$=tstAssSt =:¢H1= H1ass3',
        ,      'HS =<:¢F2=hs+f2as3',
        ,          '; ; F3=hs+f3as3',
        ,            ' ! !' ,
        , 'call tstCompStmtSt "ass3", "tstAssSt"',
        , ''
/*
$=/tstCompStmtAssSR/
    ### start tst tstCompStmtAssSR ####################################
    compile @, 13 lines: .
    run without input
    *** err: bad stem index 1>0 @ <oASR>.HS class <clSR??> in EnvPut(ts+
    tAssSR.HS.1.F1, HS.1.ini0, )
    begin    tstAssSR  H1=H1ini1   HS.0=1       .
    _..1     tstAssSR. F1=HS.1.ini F2=         F3=         FR=
    ass2     tstAssSR  H1=H1ass2   HS.0=1       .
    _..1     tstAssSR. F1=         F2=hs+f2as2 F3=hs+f3as2 FR=
    ass3     tstAssSR  H1=H1ass3   HS.0=3       .
    _..1     tstAssSR. F1=         F2=hs+f2as3 F3=         FR=
    _..2     tstAssSR. F1=         F2=         F3=         FR=
    _..3     tstAssSR. F1=         F2=         F3=hs+f3as3 FR=
$/tstCompStmtAssSR/
*/
    cl = classNew('n? tstAssSR u f H1 v, f HS s r tstAssAtt')
    cl = m.cl.2
    m.tstCl = m.cl.class
    call envPutO 'tstAssSR', oNew('tstAssSR')
    call oClaClear class4Name('tstAssAtt'), envGetO('tstAssSR')'.HS.1'

    call envPut 'tstAssSR.H1', 'H1ini1'
    call tstComp1 '@ tstCompStmtAssSR', '',
        , "call mAdd t.trans, $.$tstAssSR '<oASR>'",
               ", m.tstCl '<clSR??>'",
          ";call envPut 'tstAssSR.HS.1.F1', 'HS.1.ini0'",
          ";call envPut 'tstAssSR.HS.0', 1",
          ";call envPutO 'tstAssSR.HS.1', ''",
          ";call envPut 'tstAssSR.HS.1.F1', 'HS.1.ini1'",
        , 'call tstCompStmtSt "begin", "tstAssSR"',
        , '$=tstAssSR =:¢H1= H1ass2',
        ,      'HS =<<:¢F2=hs+f2as2',
        ,          'F3=hs+f3as2$! !' ,
        , ';call tstCompStmtSt "ass2", "tstAssSR"',
        , '$=tstAssSR =:¢H1= H1ass3',
        ,      'HS =<:¢F2=hs+f2as3',
        ,          '; ; F3=hs+f3as3',
        ,            ' ! !' ,
        , 'call tstCompStmtSt "ass3", "tstAssSR"',
        , ''
/*
$=/tstCompStmtassTb/
    ### start tst tstCompStmtassTb ####################################
    compile @, 19 lines: .
    run without input
    *** err: bad stem index 1>0 @ <oASt>.HS class <clSt??> in EnvPut(ts+
    tAssSt.HS.1.F1, HS.1.ini0, )
    begin    tstAssSt  H1=H1ini1   HS.0=1       .
    _..1     tstAssSt. F1=HS.1.ini F2=         F3=         FR=
    tstR: @tstWriteoV4 isA :<assCla H1>
    tstR:  .H1 = H1ass2
    ass2     tstAssSt  H1=H1ini1   HS.0=2       .
    _..1     tstAssSt. F1=         F2=hs+f2as2 F3=hs+f3as2 FR=
    _..2     tstAssSt. F1=         F2=h3+f2as2 F3=h3+f3as2 FR=
    ass3     tstAssSt  H1=H1ass3   HS.0=3       .
    _..1     tstAssSt. F1=         F2=f2as3    F3=         FR=
    _..2     tstAssSt. F1=         F2=         F3=         FR=
    _..3     tstAssSt. F1=         F2=         F3=f3as3    FR=
$/tstCompStmtassTb/
*/
    cl = classNew('n? tstAssSt u f H1 v, f HS s tstAssAtt')
    cl = m.cl.2
    m.tstCl = m.cl.class
    call envPutO 'tstAssSt', oNew('tstAssSt')
    call oClaClear class4Name('tstAssAtt'), envGetO('tstAssSt')'.HS.1'
    call envPut 'tstAssSt.H1', 'H1ini1'
    call tstComp1 '@ tstCompStmtassTb', '',
        , "call mAdd t.trans, $.$tstAssSt '<oASt>'",
               ", m.tstCl '<clSt??>'",
          ";call envPut 'tstAssSt.HS.1.F1', 'HS.1.ini0'",
          ";call envPut 'tstAssSt.HS.0', 1",
          ";call envPut 'tstAssSt.HS.1.F1', 'HS.1.ini1'",
        , 'call tstCompStmtSt "begin", "tstAssSt"',
        , '$=tstAssSt =:¢ $@|¢  H1  ',
        , '                      H1ass2  ',
        , "$@{call mAdd 'T.TRANS', className(objClass(envWithObj()))",
               "'<assCla H1>'} $!",
        ,      'HS =<|¢  $*(...',
        ,       '..$*)  F2      F3   ',
        ,        '   hs+f2as2     hs+f3as2  ' ,
        ,        '  *   kommentaerliiii    ' ,
        ,        '                          ' ,
        ,        '   h3+f2as2    h3+f3as22222$! !' ,
        , 'call tstCompStmtSt "ass2", "tstAssSt"',
          '$=tstAssSt =:¢H1= H1ass3',
        ,      'HS =<|¢F2       F3',
        ,      '        f2as3' ,
        ,      '  ',
        ,      '                 $""',
        ,      '            f3as3 $! !' ,
        , 'call tstCompStmtSt "ass3", "tstAssSt"'
/*
$=/tstCompStmtassInp/
    ### start tst tstCompStmtassInp ###################################
    compile @, 11 lines: .
    run without input
    tstR: @tstWriteoV2 isA :<cla123>
    tstR:  .eins = l1v1
    tstR:  .zwei = l1v2
    tstR:  .drei = l1v3
    tstR: @tstWriteoV3 isA :<cla123>
    tstR:  .eins = l2v1
    tstR:  .zwei = l2v2
    tstR:  .drei = l21v3
    *** err: undefined variable oo in envGetO(oo)
    oo before 0
    oo nachher <oo>
    tstR: @tstWriteoV5 isA :<cla123>
    tstR:  .eins = o1v1
    tstR:  .zwei = o1v2
    tstR:  .drei = o1v3
$/tstCompStmtassInp/
*/
    call envRemove 'oo'
    call tstComp1 '@ tstCompStmtassInp', '',
        , "$@|¢eins    zwei  drei  ",
        , " l1v1    l1v2   l1v3",
        , "$@{call mAdd 'T.TRANS', className(objClass(envWithObj()))",
                  "'<cla123>'}" ,
        , "      l2v1   l2v2   l21v3",
        , "!",
        , "$$ oo before $.$oo",
        , "$; $>.$oo $@|¢eins zwei drei",
        , "            o1v1  o1v2   o1v3 $!",
        , "$; call mAdd 'T.TRANS', $.$oo '<oo>'",
        , "$; $$ oo nachher $.$oo $@$oo"
    return
endProcedure tstCompStmtA

tstCompStmtAA: procedure expose m.
parse arg ggTxt, ggN
    call out left(ggTxt,8) left(ggN, 9),
         'F1='left(envGet(ggN'.F1'), 8),
         'F2='left(envGet(ggN'.F2'), 8),
         'F3='left(envGet(ggN'.F3'), 8),
         'FR='envGetO(ggN'.FR')
    return
endSubroutine

tstCompStmtA2: procedure expose m.
parse arg ggTxt, ggN
    call out left(ggTxt,8) left(ggN, 9),
         'G1='left(envGet(ggN'.G1'), 8)
    call tstCompStmtAA '_..GT', ggN'.GT'
    return
endSubroutine

tstCompStmtSt: procedure expose m.
parse arg ggTxt, ggN
    call out left(ggTxt,8) left(ggN, 9),
         'H1='left(envGet(ggN'.H1'), 8),
         'HS.0='left(envGet(ggN'.HS.0'), 8)
    do sx=1 to envGet(ggN'.HS.0')
        call tstCompStmtAA '_..'sx, ggN'.HS.'sx
        end
    return
endSubroutine tstCompStmtSt

tstCompSyntax: procedure expose m.
    call tstCompSynPrimary
    call tstCompSynAss
    call tstCompSynRun
    return
endProcedure tstCompSyntax

tstCompSynPrimary: procedure expose m.

/*
$=/tstCompSynPri1/
    ### start tst tstCompSynPri1 ######################################
    compile @, 1 lines: a $ =
    *** err: scanErr pipe or $; expected: compile shell stopped before+
    . end of input
    .    e 1: last token  scanPosition $ =
    .    e 2: pos 3 in line 1: a $ =
$/tstCompSynPri1/ */
    call tstComp1 '@ tstCompSynPri1 +', 'a $ ='

/*
$=/tstCompSynPri2/
    ### start tst tstCompSynPri2 ######################################
    compile @, 1 lines: a $. {
    *** err: scanErr objRef expected after $. expected
    .    e 1: last token  scanPosition  {
    .    e 2: pos 5 in line 1: a $. {
$/tstCompSynPri2/ */
    call tstComp1 '@ tstCompSynPri2 +', 'a $. {'

/*
$=/tstCompSynPri3/
    ### start tst tstCompSynPri3 ######################################
    compile @, 1 lines: b $-  ¢  .
    *** err: scanErr objRef expected after $- expected
    .    e 1: last token  scanPosition   ¢
    .    e 2: pos 5 in line 1: b $-  ¢
$/tstCompSynPri3/ */
    call tstComp1 '@ tstCompSynPri3 +', 'b $-  ¢  '

/*
$=/tstCompSynPri4/
    ### start tst tstCompSynPri4 ######################################
    compile @, 1 lines: a ${ $*( sdf$*) } =
    *** err: scanErr var name expected
    .    e 1: last token  scanPosition } =
    .    e 2: pos 17 in line 1: a ${ $*( sdf$*) } =
$/tstCompSynPri4/ */
    call tstComp1 '@ tstCompSynPri4 +', 'a ${ $*( sdf$*) } ='

/*
$=/tstCompSynFile/
    ### start tst tstCompSynFile ######################################
    compile @, 1 lines: $@.<$*( co1 $*) $$abc
    *** err: scanErr block or expr expected for file expected
    .    e 1: last token  scanPosition $$abc
    .    e 2: pos 17 in line 1: $@.<$*( co1 $*) $$abc
$/tstCompSynFile/ */
    call tstComp1 '@ tstCompSynFile +', '$@.<$*( co1 $*) $$abc'

    return
endProcedure tstCompSynPrimary

tstCompSynAss: procedure expose m.

/*
$=/tstCompSynAss1/
    ### start tst tstCompSynAss1 ######################################
    compile @, 1 lines: $=
    *** err: scanErr assignment expected after $=
    .    e 1: last token  scanPosition .
    .    e 2: pos 3 in line 1: $=
$/tstCompSynAss1/ */
    call tstComp1 '@ tstCompSynAss1 +', '$='

/*
$=/tstCompSynAss2/
    ### start tst tstCompSynAss2 ######################################
    compile @, 2 lines: $=   .
    *** err: scanErr assignment expected after $=
    .    e 1: last token  scanPosition .
    .    e 2: pos 6 in line 1: $=
$/tstCompSynAss2/ */
    call tstComp1 '@ tstCompSynAss2 +', '$=   ', 'eins'

/*
$=/tstCompSynAss3/
    ### start tst tstCompSynAss3 ######################################
    compile @, 2 lines: $=   $$
    *** err: scanErr assignment expected after $=
    .    e 1: last token  scanPosition $$
    .    e 2: pos 6 in line 1: $=   $$
$/tstCompSynAss3/ */
    call tstComp1 '@ tstCompSynAss3 +', '$=   $$', 'eins'

/*
$=/tstCompSynAss4/
    ### start tst tstCompSynAss4 ######################################
    compile @, 1 lines: $=   eins
    *** err: scanErr = expected after $= "eins"
    .    e 1: last token  scanPosition .
    .    e 2: pos 10 in line 1: $=   eins
$/tstCompSynAss4/ */
    call tstComp1 '@ tstCompSynAss4 +', '$=   eins'

/*
$=/tstCompSynAss5/
    ### start tst tstCompSynAss5 ######################################
    compile @, 1 lines: $=  abc eins $$ = x
    *** err: scanErr = expected after $= "abc eins"
    .    e 1: last token  scanPosition $$ = x
    .    e 2: pos 14 in line 1: $=  abc eins $$ = x
$/tstCompSynAss5/ */
    call tstComp1 '@ tstCompSynAss5 +', '$=  abc eins $$ = x'

/*
$=/tstCompSynAss6/
    ### start tst tstCompSynAss6 ######################################
    compile @, 1 lines: $=  abc =
    *** err: scanErr block or expression after $= "abc" = expected
    .    e 1: last token  scanPosition .
    .    e 2: pos 10 in line 1: $=  abc =
$/tstCompSynAss6/ */
    call tstComp1 '@ tstCompSynAss6 +', '$=  abc ='

/*
$=/tstCompSynAss7/
    ### start tst tstCompSynAss7 ######################################
    compile @, 1 lines: $=  abc =..
    *** err: scanErr block or expression after $= "abc" = expected
    .    e 1: last token  scanPosition .
    .    e 2: pos 11 in line 1: $=  abc =..
$/tstCompSynAss7/ */
    call tstComp1 '@ tstCompSynAss7 +', '$=  abc =.'
    return
endProcedure tstCompSynAss

tstCompSynRun: procedure expose m.

/*
$=/tstCompSynRun1/
    ### start tst tstCompSynRun1 ######################################
    compile @, 1 lines: $@
    *** err: scanErr block or expr expected after $@ expected
    .    e 1: last token  scanPosition .
    .    e 2: pos 3 in line 1: $@
$/tstCompSynRun1/ */
    call tstComp1 '@ tstCompSynRun1 +', '$@'

/*
$=/tstCompSynRun2/
    ### start tst tstCompSynRun2 ######################################
    compile @, 1 lines: $@=
    *** err: scanErr block or expr expected after $@ expected
    .    e 1: last token  scanPosition .
    .    e 2: pos 4 in line 1: $@=
$/tstCompSynRun2/ */
    call tstComp1 '@ tstCompSynRun2 +', '$@='

/*
$=/tstCompSynRun3/
    ### start tst tstCompSynRun3 ######################################
    compile @, 1 lines: $@|
    *** err: scanErr block or expr expected after $@ expected
    .    e 1: last token  scanPosition .
    .    e 2: pos 4 in line 1: $@|
    *** err: scanErr comp2code bad fr | to | for @|| .
    .    e 1: last token  scanPosition .
    .    e 2: pos 4 in line 1: $@|
$/tstCompSynRun3/ */
    call tstComp1 '@ tstCompSynRun3 +', '$@|'

/*
$=/tstCompSynFor4/
    ### start tst tstCompSynFor4 ######################################
    compile @, 1 lines: $@for
    *** err: scanErr variable name after $@for expected
    .    e 1: last token  scanPosition .
    .    e 2: pos 6 in line 1: $@for
$/tstCompSynFor4/ */
    call tstComp1 '@ tstCompSynFor4 +', '$@for'

/*
$=/tstCompSynFor5/
    ### start tst tstCompSynFor5 ######################################
    compile @, 2 lines: $@for
    *** err: scanErr variable name after $@for expected
    .    e 1: last token  scanPosition .
    .    e 2: pos 6 in line 1: $@for
$/tstCompSynFor5/ */
    call tstComp1 '@ tstCompSynFor5 +', '$@for', a

/*
$=/tstCompSynFor6/
    ### start tst tstCompSynFor6 ######################################
    compile @, 2 lines: a
    *** err: scanErr variable name after $@for expected
    .    e 1: last token  scanPosition $$q
    .    e 2: pos 12 in line 2:  b $@for   $$q
$/tstCompSynFor6/ */
    call tstComp1 '@ tstCompSynFor6 +', 'a', ' b $@for   $$q'

/*
$=/tstCompSynFor7/
    ### start tst tstCompSynFor7 ######################################
    compile @, 3 lines: a
    *** err: scanErr statement after $@for "a" expected
    .    e 1: last token  scanPosition .
    .    e 2: pos 11 in line 2:  b $@for a
$/tstCompSynFor7/ */
    call tstComp1 '@ tstCompSynFor7 +', 'a', ' b $@for a', '  $$q'

/*
$=/tstCompSynCt8/
    ### start tst tstCompSynCt8 #######################################
    compile @, 3 lines: a
    *** err: scanErr ct statement expected
    .    e 1: last token  scanPosition .
    .    e 2: pos 8 in line 2:  b $@ct
$/tstCompSynCt8/ */
    call tstComp1 '@ tstCompSynCt8 +', 'a', ' b $@ct', '  $$q'

/*
$=/tstCompSynProc9/
    ### start tst tstCompSynProc9 #####################################
    compile @, 2 lines: a
    *** err: scanErr proc name expected
    .    e 1: last token  scanPosition $$q
    .    e 2: pos 12 in line 2:  b $@proc  $$q
$/tstCompSynProc9/ */
    call tstComp1 '@ tstCompSynProc9 +', 'a', ' b $@proc  $$q'

/*
$=/tstCompSynProcA/
    ### start tst tstCompSynProcA #####################################
    compile @, 2 lines: $@proc p1
    *** err: scanErr proc statement expected
    .    e 1: last token  scanPosition .
    .    e 2: pos 10 in line 1: $@proc p1
$/tstCompSynProcA/ */
    call tstComp1 '@ tstCompSynProcA +', '$@proc p1', '  $$q'

/*
$=/tstCompSynCallB/
    ### start tst tstCompSynCallB #####################################
    compile @, 1 lines: $@call (roc p1)
    *** err: scanErr procCall, for, do, ct, proc or objRef expected aft+
    er $@
    .    e 1: last token  scanPosition  (roc p1)
    .    e 2: pos 7 in line 1: $@call (roc p1)
$/tstCompSynCallB/ */
    call tstComp1 '@ tstCompSynCallB +', '$@call (roc p1)'

/*
$=/tstCompSynCallC/
    ### start tst tstCompSynCallC #####################################
    compile @, 1 lines: $@call( roc p1 )
    *** err: scanErr closing ) expected after $@call(
    .    e 1: last token  scanPosition roc p1 )
    .    e 2: pos 9 in line 1: $@call( roc p1 )
$/tstCompSynCallC/ */
    call tstComp1 '@ tstCompSynCallC +', '$@call( roc p1 )'

/*
$=/tstCompSynCallD/
    ### start tst tstCompSynCallD #####################################
    compile @, 2 lines: $@call( $** roc
    *** err: scanErr closing ) expected after $@call(
    .    e 1: last token  scanPosition .
    .    e 2: pos 16 in line 1: $@call( $** roc
$/tstCompSynCallD/ */
    call tstComp1 '@ tstCompSynCallD +',
        ,'$@call( $** roc' , ' $*( p1 $*) )'
    return
endProcedure tstCompSynRun

tstCompObj: procedure expose m.
    call tstReset t
    call oIni
    cl = classNew('n? tstCompCla u v, f FEINS v, f FZWEI v')
    do rx=1 to 10
        o = oNew(cl)
        m.tstComp.rx = o
        m.o = 'o'rx
        if rx // 2 = 0 then do
            m.o.fEins = 'o'rx'.1'
            m.o.fZwei = 'o'rx'.fZwei'rx
            end
        else do
            m.o.fEins = 'o'rx'.fEins'
            m.o.fZwei = 'o'rx'.2'
            end
        call mAdd 'T.TRANS', m.tstComp.rx '<o'rx'>'
        end

/*
$=/tstCompObjRef/
    ### start tst tstCompObjRef #######################################
    compile @, 13 lines: o1=m.tstComp.1
    run without input
    out .$"string" o1
    string
    out . o1
    tstR: @<o1> isA :tstCompCla = o1
    tstR:  .FEINS = o1.fEins
    tstR:  .FZWEI = o1.2
    out .{ o2 }
    tstR: @<o2> isA :tstCompCla = o2
    tstR:  .FEINS = o2.1
    tstR:  .FZWEI = o2.fZwei2
    out .¢ o3 $!
    tstR: @<o3> isA :tstCompCla = o3
    tstR:  .FEINS = o3.fEins
    tstR:  .FZWEI = o3.2
    out .¢ o4 $!
    tstR: @<o4> isA :tstCompCla = o4
    tstR:  .FEINS = o4.1
    tstR:  .FZWEI = o4.fZwei4
    out ./-/ o5 $/-/
    tstR: @<o5> isA :tstCompCla = o5
    tstR:  .FEINS = o5.fEins
    tstR:  .FZWEI = o5.2
$/tstCompObjRef/ */
m.ttt=1
    call tstComp1 '@ tstCompObjRef' ,
        , 'o1=m.tstComp.1',
        , 'o2 = m.tstComp.2' ,
        , '$$ out $".$""string""" o1 $$.$"string"',
        , '$$ out . o1 $$. o1',
        , '$$ out .{ o2 } $$.{ o2 }',
        , '$$ out .¢ o3 $"$!" $$.¢ ', ' m.tstComp.3 ', ' $!',
        , '$$ out .¢ o4 $"$!" $$.¢ ', ' m.tstComp.4 ', ' $!',
        , '$$ out ./-/ o5 $"$/-/" $$./-/  m.tstComp.5 ', ' $/-/'

/*
$=/tstCompObjRefPri/
    ### start tst tstCompObjRefPri ####################################
    compile @, 9 lines: $$ out .$"$.{o1}" $$.$.{ m.tstComp.1 }
    run without input
    out .$.{o1}
    tstR: @<o1> isA :tstCompCla = o1
    tstR:  .FEINS = o1.fEins
    tstR:  .FZWEI = o1.2
    out .$.-{o2}
    <o2>
    out .$.={o3}
    m.tstComp.3
    out .$.@{out o4}
    tstWriteO kindOf ORun oRun begin <<<
    tstR: @<o4> isA :tstCompCla = o4
    tstR:  .FEINS = o4.1
    tstR:  .FZWEI = o4.fZwei4
    tstWriteO kindOf ORun oRun end   >>>
    out .$.@¢$$abc $$efg$!
    tstWriteO kindOf ORun oRun begin <<<
    abc
    efg
    tstWriteO kindOf ORun oRun end   >>>
    out .$.@¢o5$!
    tstWriteO kindOf ORun oRun begin <<<
    tstR: @<o5> isA :tstCompCla = o5
    tstR:  .FEINS = o5.fEins
    tstR:  .FZWEI = o5.2
    abc
    tstWriteO kindOf ORun oRun end   >>>
$/tstCompObjRefPri/ */
    call tstComp1 '@ tstCompObjRefPri' ,
        , '$$ out .$"$.{o1}" $$.$.{ m.tstComp.1 }',
        , '$$ out .$"$.-{o2}" $$.$.-{ m.tstComp.2 }',
        , '$$ out .$"$.={o3}" $$.$.={ m.tstComp.3 }',
        , '$$ out .$"$.@{out o4}" $$.$.@{ call outO m.tstComp.4 }',
    , '$$ out .$"$.@¢$$abc $$efg$!" $$.$.@¢ $$abc ', ' ', ' $$efg $!',
        , '$$ out .$"$.@¢o5$!" $$.$.@¢ $$.m.tstComp.5', '$$abc $!'

/*
$=/tstCompObjRefFile/
    ### start tst tstCompObjRefFile ###################################
    compile @, 7 lines: $$ out .$".<.¢o1!" $$.$.<.¢ m.tstComp.1 $!
    run without input
    out ..<.¢o1!
    tstWriteO kindOf JRW jWriteNow begin <<<
    tstR: @<o1> isA :tstCompCla = o1
    tstR:  .FEINS = o1.fEins
    tstR:  .FZWEI = o1.2
    tstWriteO kindOf JRW jWriteNow end   >>>
    out .<$.-{o2}
    tstWriteO kindOf JRW jWriteNow begin <<<
    tstR: @<o2> isA :tstCompCla = o2
    tstR:  .FEINS = o2.1
    tstR:  .FZWEI = o2.fZwei2
    tstWriteO kindOf JRW jWriteNow end   >>>
    out .$.<{o3}
    tstWriteO kindOf JRW jWriteNow begin <<<
    m.tstComp.3
    tstWriteO kindOf JRW jWriteNow end   >>>
    out .$.<@{out o4}
    tstWriteO kindOf JRW jWriteNow begin <<<
    tstR: @<o4> isA :tstCompCla = o4
    tstR:  .FEINS = o4.1
    tstR:  .FZWEI = o4.fZwei4
    tstWriteO kindOf JRW jWriteNow end   >>>
    out .$<@¢$$abc $$efg$!
    tstWriteO kindOf JRW jWriteNow begin <<<
    abc
    efg
    tstWriteO kindOf JRW jWriteNow end   >>>
$/tstCompObjRefFile/ */

    call tstComp1 '@ tstCompObjRefFile' ,
        , '$$ out .$".<.¢o1!" $$.$.<.¢ m.tstComp.1 $!',
        , '$$ out .$"<$.-{o2}" $$.$.<.{ m.tstComp.2 }',
        , '$$ out .$"$.<{o3}" $$.$.<={ m.tstComp.3 }',
        , '$$ out .$"$.<@{out o4}" $$.$.<@{ call outO m.tstComp.4 }',
    , '$$ out .$"$<@¢$$abc $$efg$!" $$.$.<@¢ $$abc ', ' ', ' $$efg $!'

/*
$=/tstCompObjFor/
    ### start tst tstCompObjFor #######################################
    compile @, 2 lines: $@do rx=1 to 3 $$. m.tstComp.rx
    run without input
    FEINS=o1.fEins FZWEI=o1.2
    FEINS=o2.1 FZWEI=o2.fZwei2
    FEINS=o3.fEins FZWEI=o3.2
$/tstCompObjFor/
*/
    call tstComp1 '@ tstCompObjFor' ,
        , '$@do rx=1 to 3 $$. m.tstComp.rx' ,
        , '$| $@forWith with $$ FEINS=$FEINS FZWEI=$FZWEI'

/*
$=/tstCompObjRun/
    ### start tst tstCompObjRun #######################################
    compile @, 4 lines: $$ out .$"$@¢o1!" $$.$.@¢ $$. m.tstComp.1 $!
    run without input
    out .$@¢o1!
    tstWriteO kindOf ORun oRun begin <<<
    tstR: @<o1> isA :tstCompCla = o1
    tstR:  .FEINS = o1.fEins
    tstR:  .FZWEI = o1.2
    tstWriteO kindOf ORun oRun end   >>>
    out .$<@¢$$abc $$efg$!
    tstWriteO kindOf JRW jWriteNow begin <<<
    abc
    efg
    tstWriteO kindOf JRW jWriteNow end   >>>
$/tstCompObjRun/ */
    call tstComp1 '@ tstCompObjRun' ,
        , '$$ out .$"$@¢o1!" $$.$.@¢ $$. m.tstComp.1 $!',
    , '$$ out .$"$<@¢$$abc $$efg$!" $$.$.<@¢ $$abc ', ' ', ' $$efg $!'

    m.t.trans.0 = 0
/*
$=/tstCompObj/
    ### start tst tstCompObj ##########################################
    compile @, 6 lines: o1=m.tstComp.1
    run without input
    out . o1
    tstR: @tstWriteoV1 isA :tstCompCla = o1
    tstR:  .FEINS = o1.fEins
    tstR:  .FZWEI = o1.2
    out .{ o2 }
    tstR: @tstWriteoV2 isA :tstCompCla = o2
    tstR:  .FEINS = o2.1
    tstR:  .FZWEI = o2.fZwei2
    out .¢ o1, o2!
    tstR: @tstWriteoV1 isA :tstCompCla = o1
    tstR:  .FEINS = o1.fEins
    tstR:  .FZWEI = o1.2
    tstR: @tstWriteoV2 isA :tstCompCla = o2
    tstR:  .FEINS = o2.1
    tstR:  .FZWEI = o2.fZwei2
$/tstCompObj/ */
    call tstComp1 '@ tstCompObj' ,
        , 'o1=m.tstComp.1',
        , 'o2 = m.tstComp.2' ,
        , '$$ out . o1 $$. o1',
        , '$$ out .{ o2 } $$.{ o2 }',
    , '$$ out .¢ o1, o2!$; $@<.¢  m.tstComp.1  ', '  m.tstComp.2  $!'
    return
    m.t.trans.0 = 0
endProcedure tstCompObj

tstCompORun: procedure expose  m.
/*
$=/tstCompORun/
    ### start tst tstCompORun #########################################
    compile @, 6 lines: $@oRun()
    run without input
    oRun arg=1, v2=, v3=, v4=
    oRun arg=1, v2=, v3=, v4=
    oRun arg=2, v2=-{1 arg only} oder?, v3=, v4=
    oRun arg=2, v2=!.{1 obj only} oder?, v3=, v4=
    oRun arg=3, v2={2 args}, v3=und zwei?, v4=
    oRun arg=4, v2={3 args}, v3=zwei, v4=und drei?
$/tstCompORun/ */
    call compIni
    call envPutO 'oRun', oRunner('parse arg , v2, v3, v4;',
        'call tstOut t, "oRun arg="arg()", v2="v2", v3="v3", v4="v4' )
    call tstComp1 '@ tstCompORun',
        , '$@oRun()', '$@oRun-{}' ,
        , '    $@oRun-{$"-{1 arg only}" ''oder?''}' ,
        , '    $@oRun.{$".{1 obj only}" ''oder?''} $=v2=zwei' ,
        , '    $@oRun-{$"{2 args}", "und" $v2"?"}' ,
        , '    $@oRun-{$"{3 args}", $v2, "und drei?"}'
    return
endProcedure tstCompORun

tstCompDataIO: procedure expose m.
/*
$=/tstCompDataHereData/
    ### start tst tstCompDataHereData #################################
    compile =, 13 lines:  herdata $@#/stop/    .
    run without input
    . herdata .
    heredata 1 $x
    heredata 2 $y
    nach heredata
    . herdata ¢ .
    heredata 1 xValue
    heredata 2 yValueY
    nach heredata ¢
    . herdata { .
    HEREDATA 1 xValue
    heredata 2 yValueY
    nach heredata {
$/tstCompDataHereData/ */
    call tstComp1 '= tstCompDataHereData',
        , ' herdata $@#/stop/    ',
        , 'heredata 1 $x',
        , 'heredata 2 $y',
        , '$/stop/ $$ nach heredata',
        , ' herdata ¢ $@=/stop/    ',
        , '$=x=xValue$=y=yValueY',
        , 'heredata 1 $x',
        , 'heredata 2 $y',
        , '$/stop/ $$ nach heredata ¢',
        , ' herdata { $@/st/',
        , '; call out heredata 1 $x',
        , '$$heredata 2 $y',
        , '$/st/ $$ nach heredata {'
/*
$=/tstCompDataIO/
    ### start tst tstCompDataIO #######################################
    compile =, 5 lines:  input 1 $@.<$dsn $*+.
    run without input
    . input 1 .
    readInp line 1                       .
    readInp line 2                       .
    . nach dsn input und nochmals mit & .
    readInp line 1                       .
    readInp line 2                       .
    . und schluiss..
$/tstCompDataIO/ */
    dsn = word(tstPdsMbr(tstFilename('lib37', 'r'), 'readInp'), 1)
    dsnFB = strip(dsn tstFB('::F37', 0))
    b = jBuf(tstFB('readInp line 1', 37),
            ,tstFB('readInp line 2', 37))
    extFd = tstFB('&dsn('dsn') dd(xyz)', 0)
    extFd = tstFB(dsn 'dd(xyz) ::f', 0)
    if extFd = '' then
        extFd = dsn
    call jCat file(dsnFB), b
    call envPut 'dsn', dsn
    say 'dsn' dsn 'extFD' extFD'?'
    call tstComp1 '= tstCompDataIO',
        , ' input 1 $@.<$dsn $*+',
        , tstFB('::f', 0),
        , ' nach dsn input und nochmals mit & ' ,
        , '         $@.<' extFD,
        , ' und schluiss.'
    return
endProcedure tstCompDataIO

tstObjVF: procedure expose m.
parse arg v, f
    obj  = oNew(classNew('n? TstClassVF u v, f FLD1 v'))
    m.obj = if(f=='','val='v, v)
    m.obj.fld1 = if(f=='','FLD1='v, f)
    return obj
endProcedure tstObjVF

tstCompFile: procedure expose m.
/*
$=/tstCompFileBloSrc/
    $=vv=value-of-vv
    ###file from empty # block
    $@<#¢
        $!
    ###file from 1 line # block
    $@<#¢
    the only $ix+1/0 line $vv
    $!
    ###file from 2 line # block
    $@<#¢
        first line /0 $*+ no comment
        second and last line $$ $wie
    $!
    ===file from empty = block
    $@<=¢     $*+ comment
        $!
    ===file from 1 line = block
    $@<=¢ the only line $!
    ===file from 2 line = block
    $@<=¢ first line$** comment
        second and last line  $!
    ---file from empty - block
    $@<-/s/
        $/s/
    ---file from 1 line - block
    $@<-/s/ the only "line" (1*1) $/s/
    ---file from 2 line = block
    $@<-// first "line" (1+0)
        second   and   "last  line" (1+1)  $//
    ...file from empty . block
    $@<.¢
        $!
    ...file from 1 line . block
    $@<.¢ tstObjVF('v-Eins', '1-Eins') $!
    ...file from 2 line . block
    $@<.¢ tstObjVF('v-Elf', '1-Elf')
        tstObjVF('zwoelf')  $!
    ...file from 3 line . block
    $@<.¢ tstObjVF('einUndDreissig')
            s2o('zweiUndDreissig' o2String($vv))
            tstObjVF('dreiUndDreissig')  $!
    @@@file from empty @ block
    $@<@¢
        $!
    $=noOutput=before
    @@@file from nooutput @ block
    $@<@¢ nop
        $=noOutput = run in block $!
    @@@nach noOutput=$noOutput
    @@@file from 1 line @ block
    $@<@¢ $$. tstObjVF('w-Eins', 'w1-Eins') $!
    @@@file from 2 line @ block
    $@<@¢ $$.tstObjVF('w-Elf', 'w1-Elf')
        y='zwoelf' $$-y  $!
    @@@file from 3 line @ block
    $@<@¢ $$.tstObjVF('w einUndDreissig')    $$ +
    zweiUndDreissig $$ 33 $vv$!
    {{{ empty { block
    $@<{      }
    {{{ empty { block with comment
    $@<{    $*+ abc
          }
    {{{ one line { block
    $@<{ the only $"{...}" line $*+.
        $vv  }
    {{{ one line -{ block
    $@<-{ the only $"-{...}"  "line" $vv  }
    {{{ empty #{ block
    $@<#{            }
    {{{ one line #{ block
    $@<#{ the only $"-{...}"  "line" $vv ${vv${x}}  }
$/tstCompFileBloSrc/ */
/*
$=/tstCompFileBlo/
    ### start tst tstCompFileBlo ######################################
    compile =, 70 lines: $=vv=value-of-vv
    run without input
    ###file from empty # block
    ###file from 1 line # block
    the only $ix+1/0 line $vv
    ###file from 2 line # block
    first line /0 $*+ no comment
    second and last line $$ $wie
    ===file from empty = block
    ===file from 1 line = block
    . the only line .
    ===file from 2 line = block
    . first line
    second and last line  .
    ---file from empty - block
    ---file from 1 line - block
    THE ONLY line 1
    ---file from 2 line = block
    FIRST line 1
    SECOND AND last  line 2
    ...file from empty . block
    ...file from 1 line . block
    tstR: @tstWriteoV1 isA :TstClassVF = v-Eins
    tstR:  .FLD1 = 1-Eins
    ...file from 2 line . block
    tstR: @tstWriteoV2 isA :TstClassVF = v-Elf
    tstR:  .FLD1 = 1-Elf
    tstR: @tstWriteoV3 isA :TstClassVF = val=zwoelf
    tstR:  .FLD1 = FLD1=zwoelf
    ...file from 3 line . block
    tstR: @tstWriteoV4 isA :TstClassVF = val=einUndDreissig
    tstR:  .FLD1 = FLD1=einUndDreissig
    zweiUndDreissig value-of-vv
    tstR: @tstWriteoV5 isA :TstClassVF = val=dreiUndDreissig
    tstR:  .FLD1 = FLD1=dreiUndDreissig
    @@@file from empty @ block
    @@@file from nooutput @ block
    @@@nach noOutput=run in block
    @@@file from 1 line @ block
    tstR: @tstWriteoV6 isA :TstClassVF = w-Eins
    tstR:  .FLD1 = w1-Eins
    @@@file from 2 line @ block
    tstR: @tstWriteoV7 isA :TstClassVF = w-Elf
    tstR:  .FLD1 = w1-Elf
    zwoelf
    @@@file from 3 line @ block
    tstR: @tstWriteoV8 isA :TstClassVF = val=w einUndDreissig
    tstR:  .FLD1 = FLD1=w einUndDreissig
    zweiUndDreissig
    33 value-of-vv
    {{{ empty { block
    {{{ empty { block with comment
    {{{ one line { block
    the only {...} line value-of-vv
    {{{ one line -{ block
    THE ONLY -{...} line value-of-vv
    {{{ empty #{ block
    .            .
    {{{ one line #{ block
    . the only $"-{...}"  "line" $vv ${vv${x}}  .
$/tstCompFileBlo/ */
    call tstComp2 'tstCompFileBlo', '='
    m.t.trans.0 = 0

/*
$=/tstCompFileObjSrc/
    $=vv=value-vv-1
    $=fE=<¢ $!
    $=f2=.$.<.¢s2o("f2 line 1" o2String($vv))
         tstObjVF("f2 line2") $!
    ---empty file $"$@<$fE"
    $@$fE
    ---file with 2 lines $"$@<$f2"
    $@<.$f2
    $=vv=value-vv-2
    ---file with 2 lines $"$@<$f2"
    $@<.$f2
    $= dsn =- word(tstPdsMbr(tstFilename('libvb', 'r'), 'fileObj'),1) +
                tstFB('::V', 0)
    $@¢
        fi=jOpen(file($dsn),'>')
        call jWrite fi, 'line one on' $"$dsn"
        call jWrite fi, 'line two on' $"$dsn"
        call jClose fi
    $!
    ---file on disk out
    $@.<$dsn
$/tstCompFileObjSrc/ */
/*
$=/tstCompFileObj/
    ### start tst tstCompFileObj ######################################
    compile =, 20 lines: $=vv=value-vv-1
    run without input
    ---empty file $@<$fE
    ---file with 2 lines $@<$f2
    f2 line 1 value-vv-1
    tstR: @tstWriteoV1 isA :TstClassVF = val=f2 line2
    tstR:  .FLD1 = FLD1=f2 line2
    ---file with 2 lines $@<$f2
    f2 line 1 value-vv-1
    tstR: @tstWriteoV1 isA :TstClassVF = val=f2 line2
    tstR:  .FLD1 = FLD1=f2 line2
    ---file on disk out
    line one on $dsn
    line two on $dsn
$/tstCompFileObj/ */
    call tstComp2 'tstCompFileObj', '='

    return
endProcedure tstCompFile

tstCompPipe: procedure expose m.
/*
$=/tstCompPipe1/
    ### start tst tstCompPipe1 ########################################
    compile @, 1 lines:  call pipePreSuf "(1 ", " 1)"
    run without input
    #jIn eof 1#
    run with 3 inputs
    #jIn 1# eins zwei drei
    (1 eins zwei drei 1)
    #jIn 2# zehn elf zwoelf?
    (1 zehn elf zwoelf? 1)
    #jIn 3# zwanzig 21 22 23 24 ... 29|
    (1 zwanzig 21 22 23 24 ... 29| 1)
    #jIn eof 4#
$/tstCompPipe1/ */
    call tstComp1 '@ tstCompPipe1 3',
        , ' call pipePreSuf "(1 ", " 1)"'
/*
$=/tstCompPipe2/
    ### start tst tstCompPipe2 ########################################
    compile @, 2 lines:  call pipePreSuf "(1 ", " 1)"
    run without input
    #jIn eof 1#
    run with 3 inputs
    #jIn 1# eins zwei drei
    #jIn 2# zehn elf zwoelf?
    #jIn 3# zwanzig 21 22 23 24 ... 29|
    #jIn eof 4#
    ¢2 (1 eins zwei drei 1) 2!
    ¢2 (1 zehn elf zwoelf? 1) 2!
    ¢2 (1 zwanzig 21 22 23 24 ... 29| 1) 2!
$/tstCompPipe2/ */
    call tstComp1 '@ tstCompPipe2 3',
        , ' call pipePreSuf "(1 ", " 1)"' ,
        , ' $| call pipePreSuf "¢2 ", " 2!"'

/*
$=/tstCompPipe3/
    ### start tst tstCompPipe3 ########################################
    compile @, 3 lines:  call pipePreSuf "(1 ", " 1)"
    run without input
    #jIn eof 1#
    run with 3 inputs
    #jIn 1# eins zwei drei
    #jIn 2# zehn elf zwoelf?
    #jIn 3# zwanzig 21 22 23 24 ... 29|
    #jIn eof 4#
    <3 ¢2 (1 eins zwei drei 1) 2! 3>
    <3 ¢2 (1 zehn elf zwoelf? 1) 2! 3>
    <3 ¢2 (1 zwanzig 21 22 23 24 ... 29| 1) 2! 3>
$/tstCompPipe3/ */
    call tstComp1 '@ tstCompPipe3 3',
        , ' call pipePreSuf "(1 ", " 1)"' ,
        , ' $| call pipePreSuf "¢2 ", " 2!"',
        , ' $| call pipePreSuf "<3 ", " 3>"'

/*
$=/tstCompPipe4/
    ### start tst tstCompPipe4 ########################################
    compile @, 7 lines:  call pipePreSuf "(1 ", " 1)"
    run without input
    #jIn eof 1#
    run with 3 inputs
    #jIn 1# eins zwei drei
    #jIn 2# zehn elf zwoelf?
    #jIn 3# zwanzig 21 22 23 24 ... 29|
    #jIn eof 4#
    <3 ¢222 ¢221 ¢21 ¢20 (1 eins zwei drei 1) 20! 21! 221! 222! 3>
    <3 ¢222 ¢221 ¢21 ¢20 (1 zehn elf zwoelf? 1) 20! 21! 221! 222! 3>
    <3 ¢222 ¢221 ¢21 ¢20 (1 zwanzig 21 22 23 24 ... 29| 1) 20! 21! 221!+
    . 222! 3>
$/tstCompPipe4/ */
    call tstComp1 '@ tstCompPipe4 3',
        , ' call pipePreSuf "(1 ", " 1)"' ,
        , ' $| $@¢    call pipePreSuf "¢20 ", " 20!"',
        ,        ' $| call pipePreSuf "¢21 ", " 21!"',
        ,        ' $| $@¢      call pipePreSuf "¢221 ", " 221!"',
        ,                 ' $| call pipePreSuf "¢222 ", " 222!"',
        ,     '$!     $! ',
        , ' $| call pipePreSuf "<3 ", " 3>"'
    return
endProcedure tstCompPipe

tstCompRedir: procedure expose m.
/*
$=/tstCompRedir/
    ### start tst tstCompRedir ########################################
    compile @, 6 lines:  $>.$eins $@for vv $$ <$vv> $; .
    run without input
    #jIn eof 1#
    output eins .
    output piped zwei .
    run with 3 inputs
    #jIn 1# eins zwei drei
    #jIn 2# zehn elf zwoelf?
    #jIn 3# zwanzig 21 22 23 24 ... 29|
    #jIn eof 4#
    output eins <eins zwei drei> <zehn elf zwoelf?> <zwanzig 21 22 23 2+
    4 ... 29|>
    output piped zwei ab<eins zwei drei>yz ab<zehn elf zwoelf?>yz ab<zw+
    anzig 21 22 23 24 ... 29|>yz
$/tstCompRedir/ */
    call pipeIni
    call envRemove 'eins'  /* alte Variable loswerden */
    dsn = word(tstPdsMbr(tstFilename('libvb', 'r'), 'redir1'), 1)
    call envPut 'dsn', dsn
    call tstComp1 '@ tstCompRedir 3' ,
        , ' $>.$eins $@for vv $$ <$vv> $; ',
        , ' $$ output eins $-=¢$@$eins$!$; ',
        , ' $@for ww $$b${ww}y ',
        , '     $>$-{ $dsn } 'tstFB('::v', 0),
        ,         '$| call pipePreSuf "a", "z" $<.$eins',
        , ' $; $$ output piped zwei $-=¢$@<$dsn$! '
    return
endProcedure tstCompRedir

tstCompComp: procedure expose m.
/*
$=/tstCompCompShell/
    ### start tst tstCompCompShell ####################################
    compile @, 5 lines: $$compiling shell $; $= rrr =. $.compile@ $<#/+
    aaa/
    run without input
    compiling shell
    running einmal
    RUN 1 COMPILED einmal
    #jIn eof 1#
    running zweimal
    RUN 1 COMPILED zweimal
    #jIn eof 2#
    run with 3 inputs
    compiling shell
    running einmal
    RUN 1 COMPILED einmal
    #jIn 1# eins zwei drei
    compRun eins zwei dreieinmal
    #jIn 2# zehn elf zwoelf?
    compRun zehn elf zwoelf?einmal
    #jIn 3# zwanzig 21 22 23 24 ... 29|
    compRun zwanzig 21 22 23 24 ... 29|einmal
    #jIn eof 4#
    running zweimal
    RUN 1 COMPILED zweimal
    #jIn eof 5#
$/tstCompCompShell/ */
    call tstComp1 '@ tstCompCompShell 3',
        ,  "$$compiling shell $; $= rrr =. $.compile@ $<#/aaa/",
        ,  "call out run 1*1*1 compiled $cc; $@for v $$ compRun $v$cc",
        ,  "$/aaa/ $;",
        ,  "$=cc=einmal $$ running $cc $@$rrr",
        ,  "$=cc=zweimal $$ running $cc $@$rrr"
/*
$=/tstCompCompData/
    ### start tst tstCompCompData #####################################
    compile @, 5 lines: $$compiling data $; $= rrr =. $.compile=  +
        $<#/aaa/
    run without input
    compiling data
    running einmal
    call out run 1*1*1 compiled einmal
    running zweimal
    call out run 1*1*1 compiled zweimal
    run with 3 inputs
    compiling data
    running einmal
    call out run 1*1*1 compiled einmal
    running zweimal
    call out run 1*1*1 compiled zweimal
$/tstCompCompData/ */
    call tstComp1 '@ tstCompCompData 3',
        ,  "$$compiling data $; $= rrr =. $.compile=  $<#/aaa/",
        ,  "call out run 1*1*1 compiled $cc",
        ,  "$/aaa/ $;",
        ,  "$=cc=einmal $$ running $cc $@$rrr",
        ,  "$=cc=zweimal $$ running $cc $@$rrr"
    return
endProcedure tstCompComp

tstCompDir: procedure expose m.
/*
$=/tstCompDirSrc/
  'in src v1='$v1
  $#@ call out 'src @ out v1='$v1
  $#. s2o('src . v1=')
       $v1
  $#- 'src - v1='$v1
  $#= src = v1=$v1
$/tstCompDirSrc/ */
/*
$=/tstCompDir/
    ### start tst tstCompDir ##########################################
    compile call out 'before v1='$v1 $=v1=eins $#. s2o('. v1='$-$v1) $#+
    @ call out '@ v1='$v1 $#= = v1=$v1 $#- '- v1='$v1, 6 lines: 'in src+
    . v1='$v1
    run without input
    before v1=v1Before
    .. v1=eins
    @ v1=eins
    . = v1=eins .
    - v1=eins
    in src v1=eins
    src @ out v1=eins
    src . v1=
    eins
    src - v1=eins
    . src = v1=eins
$/tstCompDir/ */
    call envPut 'v1', 'v1Before'
    call tstComp2 'tstCompDir', "call out 'before v1='$v1 $=v1=eins" ,
        "$#. s2o('. v1='$-$v1) $#@ call out '@ v1='$v1" ,
        "$#= = v1=$v1 $#- '- v1='$v1"
/*
$=/tstCompDirPiSrc/
  zeile 1 v1=$v1
  zweite Zeile vor $"$@$#-"
  $@pi2()
  $#pi2#-
  $'zeile drei nach $@$#- v1='v1
  vierte und letzte Zeile
$/tstCompDirPiSrc/ */
/*
$=/tstCompDirPi/
    ### start tst tstCompDirPi ########################################
    compile call pipePreSuf '<','>' $=v1=eiPi $<.$pi $#pi#=, 6 lines: +
    zeile 1 v1=$v1
    run without input
    <zeile 1 v1=eins>
    <zweite Zeile vor $@$#->
    <zeile drei nach $@$#- v1=V1>
    <VIERTE UND LETZTE ZEILE>
$/tstCompDirPi/ */
    call tstComp2 'tstCompDirPi',
            , "call pipePreSuf '<','>' $=v1=eiPi $<.$pi $#pi#="
    return
endProcedure tstCompDir

tstCompSql: procedure expose m.
/*
$=/tstCompSqlSrc/
$@=¢
   select strip(creator) cr, strip(name) tb,
            (row_number()over())*(row_number()over()) rr
       from sysibm.sysTables
       where creator='SYSIBM' and name like 'SYSTABL%'
       order by 2 fetch first 4 rows only
$!
$| call sqlSel
$| call fmtFTab abc
$/tstCompSqlSrc/
$=/tstCompSql/
    ### start tst tstCompSql ##########################################
    compile @, 9 lines: $@=¢
    run without input
    CR     TB                RR
    SYSIBM SYSTABLEPART       1
    SYSIBM SYSTABLEPART_HIST  4
    SYSIBM SYSTABLES          9
    SYSIBM SYSTABLESPACE     16
$/tstCompSql/
*/
    call sqlConnect
    call tstComp2 'tstCompSql', '@'

    return
endProcedure tstCompFile
tstTut0: procedure expose m.
/*
$=/tstTut01Src/
$#=
$*+>.fSub()                               Kommentar
$*+>~tmp.jcl(t)                           Kommentar
$*+@=¢                                    Kommentar
$=subsys=DBAF
$=db=DA540769
$=ts=A977A
$*+@<~wk.jcl(jc)                          Kommentar
??*  -{sysvar(sysnode) date() time()} ts=$ts 10*len=$-{length($ts) * 10}
//P02     EXEC PGM=DSNUTILB,
//             PARM='$subsys,A540769C.FULCOPL'
//SYSPRINT  DD SYSOUT=*
//UTPRINT   DD SYSOUT=*
//SYSUDUMP  DD SYSOUT=*
//SYSTEMPL  DD DSN=$subsys.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN     DD *
LISTDEF C#LIST
  INCLUDE TABLESPACE $db.$ts*   PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
  $@¢if right($ts, 2) == '7A' then $@=¢
    FULL YES
  $! else
    $$ $''    FULL NO
  $!
    SHRLEVEL CHANGE
$*+!                                      Kommentar
$#out                                              20130224 11:48:24
$/tstTut01Src/
$=/tstTut01/
    ### start tst tstTut01 ############################################
    compile , 28 lines: $#=
    run without input
    ??*  -{sysvar(sysnode) date() time()} ts=A977A 10*len=50
    //P02     EXEC PGM=DSNUTILB,
    //             PARM='DBAF,A540769C.FULCOPL'
    //SYSPRINT  DD SYSOUT=*
    //UTPRINT   DD SYSOUT=*
    //SYSUDUMP  DD SYSOUT=*
    //SYSTEMPL  DD DSN=DBAF.DBAA.LISTDEF(TEMPL),DISP=SHR
    //SYSIN     DD *
    LISTDEF C#LIST
    INCLUDE TABLESPACE DA540769.A977A*   PARTLEVEL
    OPTIONS EVENT(ITEMERROR, SKIP)
    COPY LIST C#LIST COPYDDN(TCOPYD)
    FULL YES
    SHRLEVEL CHANGE
$/tstTut01/
$=/tstTut02Src/
$#@
$**>.fSub()
$**@¢
$=subsys=DBAF
$=db=DA540769
$=jx=0
$@do tx = 976 to 977 $@=¢
    $=ts=A$tx
    $=jx=-$jx+1
//A540769$jx JOB (CP00,KE50),'DB2 REO',
//         MSGCLASS=T,TIME=1440,
//         NOTIFY=&SYSUID,REGION=0M
//C$ts    EXEC PGM=DSNUTILB,
//             PARM='$subsys,A540769$jx.FULCOPL'
//SYSPRINT  DD SYSOUT=*
//UTPRINT   DD SYSOUT=*
//SYSUDUMP  DD SYSOUT=*
//SYSTEMPL  DD DSN=$subsys.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN     DD *
LISTDEF C#LIST
  INCLUDE TABLESPACE $db.$ts*   PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
    PARALLEL
    SHRLEVEL CHANGE
$!
$**!
$#out                                              20101229 13
$/tstTut02Src/
$=/tstTut02/
    ### start tst tstTut02 ############################################
    compile , 28 lines: $#@
    run without input
    //A5407691 JOB (CP00,KE50),'DB2 REO',
    //         MSGCLASS=T,TIME=1440,
    //         NOTIFY=&SYSUID,REGION=0M
    //CA976    EXEC PGM=DSNUTILB,
    //             PARM='DBAF,A5407691.FULCOPL'
    //SYSPRINT  DD SYSOUT=*
    //UTPRINT   DD SYSOUT=*
    //SYSUDUMP  DD SYSOUT=*
    //SYSTEMPL  DD DSN=DBAF.DBAA.LISTDEF(TEMPL),DISP=SHR
    //SYSIN     DD *
    LISTDEF C#LIST
    INCLUDE TABLESPACE DA540769.A976*   PARTLEVEL
    OPTIONS EVENT(ITEMERROR, SKIP)
    COPY LIST C#LIST COPYDDN(TCOPYD)
    PARALLEL
    SHRLEVEL CHANGE
    //A5407692 JOB (CP00,KE50),'DB2 REO',
    //         MSGCLASS=T,TIME=1440,
    //         NOTIFY=&SYSUID,REGION=0M
    //CA977    EXEC PGM=DSNUTILB,
    //             PARM='DBAF,A5407692.FULCOPL'
    //SYSPRINT  DD SYSOUT=*
    //UTPRINT   DD SYSOUT=*
    //SYSUDUMP  DD SYSOUT=*
    //SYSTEMPL  DD DSN=DBAF.DBAA.LISTDEF(TEMPL),DISP=SHR
    //SYSIN     DD *
    LISTDEF C#LIST
    INCLUDE TABLESPACE DA540769.A977*   PARTLEVEL
    OPTIONS EVENT(ITEMERROR, SKIP)
    COPY LIST C#LIST COPYDDN(TCOPYD)
    PARALLEL
    SHRLEVEL CHANGE
$/tstTut02/
$=/tstTut03Src/
$#@
$=subsys=DBAF
$@|¢
      db         ts
      DGDB9998   A976
      DA540769   A977
 !
$** $| call fmtFTab
$**    $#end
$|
$=jx=0
$@forWith o $@=¢
    $=jx=-$jx+1
//A540769$jx JOB (CP00,KE50),'DB2 REO',
//         MSGCLASS=T,TIME=1440,
//         NOTIFY=&SYSUID,REGION=0M
//C$ts    EXEC PGM=DSNUTILB,
//             PARM='$subsys,A540769$jx.FULCOPL'
//SYSPRINT  DD SYSOUT=*
//UTPRINT   DD SYSOUT=*
//SYSUDUMP  DD SYSOUT=*
//SYSTEMPL  DD DSN=$subsys.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN     DD *
LISTDEF C#LIST
  INCLUDE TABLESPACE $db.$ts*   PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
    PARALLEL
    SHRLEVEL CHANGE
$!
$#out
$/tstTut03Src/
$=/tstTut03/
    ### start tst tstTut03 ############################################
    compile , 31 lines: $#@
    run without input
    //A5407691 JOB (CP00,KE50),'DB2 REO',
    //         MSGCLASS=T,TIME=1440,
    //         NOTIFY=&SYSUID,REGION=0M
    //CA976    EXEC PGM=DSNUTILB,
    //             PARM='DBAF,A5407691.FULCOPL'
    //SYSPRINT  DD SYSOUT=*
    //UTPRINT   DD SYSOUT=*
    //SYSUDUMP  DD SYSOUT=*
    //SYSTEMPL  DD DSN=DBAF.DBAA.LISTDEF(TEMPL),DISP=SHR
    //SYSIN     DD *
    LISTDEF C#LIST
    INCLUDE TABLESPACE DGDB9998.A976*   PARTLEVEL
    OPTIONS EVENT(ITEMERROR, SKIP)
    COPY LIST C#LIST COPYDDN(TCOPYD)
    PARALLEL
    SHRLEVEL CHANGE
    //A5407692 JOB (CP00,KE50),'DB2 REO',
    //         MSGCLASS=T,TIME=1440,
    //         NOTIFY=&SYSUID,REGION=0M
    //CA977    EXEC PGM=DSNUTILB,
    //             PARM='DBAF,A5407692.FULCOPL'
    //SYSPRINT  DD SYSOUT=*
    //UTPRINT   DD SYSOUT=*
    //SYSUDUMP  DD SYSOUT=*
    //SYSTEMPL  DD DSN=DBAF.DBAA.LISTDEF(TEMPL),DISP=SHR
    //SYSIN     DD *
    LISTDEF C#LIST
    INCLUDE TABLESPACE DA540769.A977*   PARTLEVEL
    OPTIONS EVENT(ITEMERROR, SKIP)
    COPY LIST C#LIST COPYDDN(TCOPYD)
    PARALLEL
    SHRLEVEL CHANGE
$/tstTut03/
$=/tstTut04Src/
$#@
$=subsys=DBAF
$=db=DA540769
call sqlConnect $subsys
$@=¢  select dbName  db , tsName  ts
          from sysibm.sysTables
          where creator = 'SYSIBM' and name like 'SYSINDEXPAR%'
          order by name desc
$!
$| call sqlSel
$** $| call fmtFTab
$** $#end
$|
$=jx=0
$@forWith o $@=¢
    $=jx=-$jx+1
//A540769$jx JOB (CP00,KE50),'DB2 REO',
//         MSGCLASS=T,TIME=1440,
//         NOTIFY=&SYSUID,REGION=0M
//C$TS    EXEC PGM=DSNUTILB,
//             PARM='$subsys,A540769$jx.FULCOPL'
//SYSPRINT  DD SYSOUT=*
//UTPRINT   DD SYSOUT=*
//SYSUDUMP  DD SYSOUT=*
//SYSTEMPL  DD DSN=$subsys.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN     DD *
LISTDEF C#LIST
  INCLUDE TABLESPACE $DB.$TS*   PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
    PARALLEL
    SHRLEVEL CHANGE
$!
call sqlDisConnect
$#out                                              20101229
$/tstTut04Src/
$=/tstTut04/
    ### start tst tstTut04 ############################################
    compile , 35 lines: $#@
    run without input
    //A5407691 JOB (CP00,KE50),'DB2 REO',
    //         MSGCLASS=T,TIME=1440,
    //         NOTIFY=&SYSUID,REGION=0M
    //CSYSHIST     EXEC PGM=DSNUTILB,
    //             PARM='DBAF,A5407691.FULCOPL'
    //SYSPRINT  DD SYSOUT=*
    //UTPRINT   DD SYSOUT=*
    //SYSUDUMP  DD SYSOUT=*
    //SYSTEMPL  DD DSN=DBAF.DBAA.LISTDEF(TEMPL),DISP=SHR
    //SYSIN     DD *
    LISTDEF C#LIST
    INCLUDE TABLESPACE DSNDB06 .SYSHIST *   PARTLEVEL
    OPTIONS EVENT(ITEMERROR, SKIP)
    COPY LIST C#LIST COPYDDN(TCOPYD)
    PARALLEL
    SHRLEVEL CHANGE
    //A5407692 JOB (CP00,KE50),'DB2 REO',
    //         MSGCLASS=T,TIME=1440,
    //         NOTIFY=&SYSUID,REGION=0M
    //CSYSTSIPT    EXEC PGM=DSNUTILB,
    //             PARM='DBAF,A5407692.FULCOPL'
    //SYSPRINT  DD SYSOUT=*
    //UTPRINT   DD SYSOUT=*
    //SYSUDUMP  DD SYSOUT=*
    //SYSTEMPL  DD DSN=DBAF.DBAA.LISTDEF(TEMPL),DISP=SHR
    //SYSIN     DD *
    LISTDEF C#LIST
    INCLUDE TABLESPACE DSNDB06 .SYSTSIPT*   PARTLEVEL
    OPTIONS EVENT(ITEMERROR, SKIP)
    COPY LIST C#LIST COPYDDN(TCOPYD)
    PARALLEL
    SHRLEVEL CHANGE
$/tstTut04/
$=/tstTut05Src/
$#@
$=subsys = dbaf
$=lst=<:¢
    db = DGDB9998
    ts =<|¢
             ts
             A976
             A977
    !;
    db = DA540769
    <|/ts/
             ts
             A976
             A975
    /ts/
!
$** $$. $lst
$** $@ct $@¢$=tool =. $.compile@ $<~.wk.rexx(wshtut06)$!
$** $@$tool
$@do sx=1 to ${lst.0} $@¢
    $=db = ${lst.$sx.db}
    $** $$. ${lst.$sx}
    $@do tx=1 to ${lst.$sx.ts.0} $@=¢
        $*+ $$. ${lst.$sx.ts.$tx}
        $=ts= ${lst.$sx.ts.$tx.ts}
        $@¢ say $-=¢subsys $subsys db $db ts $ts $! $!
        $@copy()
        $!
    $!
$@ct $@¢
cl = classNew('n? DbTsList u s' ,
     classNew('n? DbTs u f db v, f ts s' ,
     classNew('n? Ts u f ts v')))
$=lst=. oNew(cl)
$!
$@proc copy $@=¢
$@ct $=jx=0
$=jx=-$jx+1
//A540769$jx JOB (CP00,KE50),'DB2 REO',
//         MSGCLASS=T,TIME=1440,
//         NOTIFY=&SYSUID,REGION=0M
//C$ts    EXEC PGM=DSNUTILB,
//             PARM='$subsys,A540769$jx.FULCOPL'
//SYSPRINT  DD SYSOUT=*
//UTPRINT   DD SYSOUT=*
//SYSUDUMP  DD SYSOUT=*
//SYSTEMPL  DD DSN=$subsys.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN     DD *
LISTDEF C#LIST
  INCLUDE TABLESPACE $db.$ts*   PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
    PARALLEL
    SHRLEVEL CHANGE
$!
$#out                                              201012
$/tstTut05Src/
$=/tstTut05/
    ### start tst tstTut05 ############################################
    compile , 56 lines: $#@
    run without input
    //A5407691 JOB (CP00,KE50),'DB2 REO',
    //         MSGCLASS=T,TIME=1440,
    //         NOTIFY=&SYSUID,REGION=0M
    //CA976    EXEC PGM=DSNUTILB,
    //             PARM='dbaf,A5407691.FULCOPL'
    //SYSPRINT  DD SYSOUT=*
    //UTPRINT   DD SYSOUT=*
    //SYSUDUMP  DD SYSOUT=*
    //SYSTEMPL  DD DSN=dbaf.DBAA.LISTDEF(TEMPL),DISP=SHR
    //SYSIN     DD *
    LISTDEF C#LIST
    INCLUDE TABLESPACE DGDB9998.A976*   PARTLEVEL
    OPTIONS EVENT(ITEMERROR, SKIP)
    COPY LIST C#LIST COPYDDN(TCOPYD)
    PARALLEL
    SHRLEVEL CHANGE
    //A5407692 JOB (CP00,KE50),'DB2 REO',
    //         MSGCLASS=T,TIME=1440,
    //         NOTIFY=&SYSUID,REGION=0M
    //CA977    EXEC PGM=DSNUTILB,
    //             PARM='dbaf,A5407692.FULCOPL'
    //SYSPRINT  DD SYSOUT=*
    //UTPRINT   DD SYSOUT=*
    //SYSUDUMP  DD SYSOUT=*
    //SYSTEMPL  DD DSN=dbaf.DBAA.LISTDEF(TEMPL),DISP=SHR
    //SYSIN     DD *
    LISTDEF C#LIST
    INCLUDE TABLESPACE DGDB9998.A977*   PARTLEVEL
    OPTIONS EVENT(ITEMERROR, SKIP)
    COPY LIST C#LIST COPYDDN(TCOPYD)
    PARALLEL
    SHRLEVEL CHANGE
    //A5407693 JOB (CP00,KE50),'DB2 REO',
    //         MSGCLASS=T,TIME=1440,
    //         NOTIFY=&SYSUID,REGION=0M
    //CA976    EXEC PGM=DSNUTILB,
    //             PARM='dbaf,A5407693.FULCOPL'
    //SYSPRINT  DD SYSOUT=*
    //UTPRINT   DD SYSOUT=*
    //SYSUDUMP  DD SYSOUT=*
    //SYSTEMPL  DD DSN=dbaf.DBAA.LISTDEF(TEMPL),DISP=SHR
    //SYSIN     DD *
    LISTDEF C#LIST
    INCLUDE TABLESPACE DA540769.A976*   PARTLEVEL
    OPTIONS EVENT(ITEMERROR, SKIP)
    COPY LIST C#LIST COPYDDN(TCOPYD)
    PARALLEL
    SHRLEVEL CHANGE
    //A5407694 JOB (CP00,KE50),'DB2 REO',
    //         MSGCLASS=T,TIME=1440,
    //         NOTIFY=&SYSUID,REGION=0M
    //CA975    EXEC PGM=DSNUTILB,
    //             PARM='dbaf,A5407694.FULCOPL'
    //SYSPRINT  DD SYSOUT=*
    //UTPRINT   DD SYSOUT=*
    //SYSUDUMP  DD SYSOUT=*
    //SYSTEMPL  DD DSN=dbaf.DBAA.LISTDEF(TEMPL),DISP=SHR
    //SYSIN     DD *
    LISTDEF C#LIST
    INCLUDE TABLESPACE DA540769.A975*   PARTLEVEL
    OPTIONS EVENT(ITEMERROR, SKIP)
    COPY LIST C#LIST COPYDDN(TCOPYD)
    PARALLEL
    SHRLEVEL CHANGE
$/tstTut05/
   tstTut06   ==> platz für copy aus tut05
$=/tstTut07Src/
$**$>.fEdit()
call sqlConnect dbtf
$@|¢  ts
VTCASHFLOW
VTCASHFLOWAMOUNT
VTINSTRFLATDATA
$!
$| $@=¢
    select name, statstime, strip(dbName) || '.' || strip(tsName) dbts
       from sysibm.sysTables
       where creator = 'VDPS2' and name in
  $=co=(
  $@forWith t $@=¢
                                           $co '$ts'
      $=co=,
  $!
                                           )
$!
$| call sqlSel
$** $| call fmtFtab
$|
$=jx=0
$@forWith t $@=¢
$=jx=-$jx+1
//A540769$jx JOB (CP00,KE50),
//       'CATALOG',MSGCLASS=T,TIME=1440,
//         NOTIFY=&SYSUID,REGION=0M
//STEP$jx EXEC PGM=DSNUTILB,TIME=1440,
//   PARM=(DBTF,'A540769$jx.RUNSTA'),
//   REGION=0M
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//UTPRINT  DD SYSOUT=*
//SYSOUT   DD SYSOUT=*
//RNPRIN01 DD SYSOUT=*
//SYSIN DD *
  LISTDEF LST#STA   INCLUDE TABLESPACE $DBTS
   OPTIONS EVENT (ITEMERROR, SKIP)

   RUNSTATS TABLESPACE LIST LST#STA
         SHRLEVEL CHANGE
           INDEX(ALL KEYCARD)
           REPORT YES UPDATE ALL
$!
call sqlDisconnect dbaf
$#out                                              20101231 11:56:23
$/tstTut07Src/
$=/tstTut07/
$=/tstTut07/
    ### start tst tstTut07 ############################################
    compile , 46 lines: $**$>.fEdit()
    run without input
    //A5407691 JOB (CP00,KE50),
    //       'CATALOG',MSGCLASS=T,TIME=1440,
    //         NOTIFY=&SYSUID,REGION=0M
    //STEP1 EXEC PGM=DSNUTILB,TIME=1440,
    //   PARM=(DBTF,'A5407691.RUNSTA'),
    //   REGION=0M
    //SYSPRINT DD SYSOUT=*
    //SYSUDUMP DD SYSOUT=*
    //UTPRINT  DD SYSOUT=*
    //SYSOUT   DD SYSOUT=*
    //RNPRIN01 DD SYSOUT=*
    //SYSIN DD *
    LISTDEF LST#STA   INCLUDE TABLESPACE VV27A1T.VDPS329
    OPTIONS EVENT (ITEMERROR, SKIP)
    ..
    RUNSTATS TABLESPACE LIST LST#STA
    SHRLEVEL CHANGE
    INDEX(ALL KEYCARD)
    REPORT YES UPDATE ALL
    //A5407692 JOB (CP00,KE50),
    //       'CATALOG',MSGCLASS=T,TIME=1440,
    //         NOTIFY=&SYSUID,REGION=0M
    //STEP2 EXEC PGM=DSNUTILB,TIME=1440,
    //   PARM=(DBTF,'A5407692.RUNSTA'),
    //   REGION=0M
    //SYSPRINT DD SYSOUT=*
    //SYSUDUMP DD SYSOUT=*
    //UTPRINT  DD SYSOUT=*
    //SYSOUT   DD SYSOUT=*
    //RNPRIN01 DD SYSOUT=*
    //SYSIN DD *
    LISTDEF LST#STA   INCLUDE TABLESPACE VV28A1T.VDPS390
    OPTIONS EVENT (ITEMERROR, SKIP)
    ..
    RUNSTATS TABLESPACE LIST LST#STA
    SHRLEVEL CHANGE
    INDEX(ALL KEYCARD)
    REPORT YES UPDATE ALL
    //A5407693 JOB (CP00,KE50),
    //       'CATALOG',MSGCLASS=T,TIME=1440,
    //         NOTIFY=&SYSUID,REGION=0M
    //STEP3 EXEC PGM=DSNUTILB,TIME=1440,
    //   PARM=(DBTF,'A5407693.RUNSTA'),
    //   REGION=0M
    //SYSPRINT DD SYSOUT=*
    //SYSUDUMP DD SYSOUT=*
    //UTPRINT  DD SYSOUT=*
    //SYSOUT   DD SYSOUT=*
    //RNPRIN01 DD SYSOUT=*
    //SYSIN DD *
    LISTDEF LST#STA   INCLUDE TABLESPACE VV21A1T.VDPS004
    OPTIONS EVENT (ITEMERROR, SKIP)
    ..
    RUNSTATS TABLESPACE LIST LST#STA
    SHRLEVEL CHANGE
    INDEX(ALL KEYCARD)
    REPORT YES UPDATE ALL
$/tstTut07/
$=/tstTut08Src/
$/tstTut08Src/
$=/tstTut08/
$/tstTut08/
*/
    call sqlOIni
    call sqlDisconnect '*'
    call tstComp2 'tstTut01'
    call tstComp2 'tstTut02'
    call tstComp2 'tstTut03'
    call tstComp2 'tstTut04'
    call tstComp2 'tstTut05'
    call tstComp2 'tstTut07'
    call tstTotal
    return
endProcedure tstTut0
/* copx tstComp end   *************************************************/
/* copx tstBase begin **************************************************
     test the basic classes
***********************************************************************/
tstBase: procedure expose m.
    call tstTstSay
    call oIni
    call tstO
    call tstM
    call classIni
    call tstMCat
    call tstMap
    call tstMapVia
    call tstClass
    call tstClass2
    call tstOEins
    call tstOGet
    call jIni
    call tstJSay
    call tstJ
    call tstJ2
    call tstJCatSql
    call catIni
    call tstCat
    call pipeIni
    CALL TstEnv
    CALL TstEnvCat
    call tstPipe
    call tstPipeS
    call tstEnvVars
    call tstEnvWith
    call tstTotal
    call tstPipeLazy
    call tstEnvClass
    call tstFile
    call tstFileList
    call tstF
    call tstFTab
    call tstFmt
    call tstFmtUnits
    call tstTotal
    call scanIni
    call tstSb
    call tstScan
    call ScanReadIni
    call tstScanRead
    call tstScanUtilInto
    call tstScanWin
    call tstScanSQL
    call tstTotal
    return
endProcedure tstBase

/*--- test the tst Module, check the output visually  ----------------*/
tstTstSay: procedure expose m.
    call tstIni
    oldErr = m.tst.err
    oldNames = m.tst.errNames
    say '+++ tstTstSay start with' oldErr 'totErrs and',
            m.tst.tests 'tests'
/*
$=/tstTstSayEins/
    ### start tst tstTstSayEins #######################################
    test eins einzige testZeile
$/tstTstSayEins/
$=/tstTstSayZwei/
    ### start tst tstTstSayZwei #######################################
    zwei 1. testZeile
    zwei 2. und letzte testZeile
$/tstTstSayZwei/
$=/tstTstSayDrei/
    ### start tst tstTstSayDrei #######################################
    drei 1. testZeile vor empty Zeile
    ..
    drei 3. testZeile vor 10 space
    .          .
    drei 5. testZeile ziemlich lang 66                                 +
    .                                77  5   10   15++++++++++++++++++++
    .+++++++++++++++++++++++++++++++++++++++++++.
$/tstTstSayDrei/
*/
    call tst x, 'tstTstSayEins'
    call tstOut x, "test eins einzige testZeile"
    call tstEnd x, 'err 0'


    call tst x, 'tstTstSayZwei'
    call tstOut x, "zwei 1. testZeile"
    call tstOut x, "zwei 2. und letzte testZeile"
    call tstEnd x, 'err 0'

    call tst x, 'tstTstSayZwei'
    call tstOut x, "zwei 1. testZeile "    /* ein space zuviel */
    call tstOut x, "zwei 2. und letzte testZeile"
    call tstOut x, "zwei 3. zuviel"
    call tstEnd x, 'err 3'

    call tst y, 'tstTstSayDrei'
    call tstOut y, 'drei 1. testZeile vor empty Zeile'
    call tstOut y, ''
    call tstOut y, 'drei 3. testZeile vor 10 space'
    call tstOut y, left('', 10)
    call tstOut y, 'drei 5. testZeile ziemlich lang',
                left(66, 66) left('77  5   10   15', 77, '+')
    call tstEnd y, 'err 0'
    if m.y.err <> 0 then
        call err '+++ tstTstSay errs' m.x.err 'expected' 0
    if m.tst.err <> oldErr + 3 then
        call err '+++ tstTstSay totErrs' m.tst.err 'expected' 3
    say '+++ tstTstSay end Ok with' m.tst.err 'totErrs and' ,
        m.tst.tests 'tests'
    m.tst.err = oldErr
    m.tst.errNames = oldNames
    return
endProcedure tstTstSay

tstMark: procedure expose m.
parse arg m, msg
    if symbol('m.m') == 'VAR' then
        m.m = msg';' m.m
    else
        m.m = msg 'new'
    return m
endProcedure tstMark
tstM: procedure expose m.
/*
$=/tstMa/
    ### start tst tstMa ###############################################
    mNew() 1=newM1 2=newM2
    mNew(tst...) 2=2 new 3=4; 3; 1 new 4=5 new
    iter 4; 3; 1 new
    iter 2 new
    iter 5 new
$/tstMa/
*/
    call tst t, 'tstMa'
    m1 = mNew()
    m2 = mNew()
    m.m1 = 'newM1'
    m.m2 = 'newM2'
    call tstOut t, 'mNew() 1='m.m1 '2='m.m2
    call mNewArea 'tst'm1
    t1 = tstMark(mNew('tst'm1), '1')
    t2 = tstMark(mNew('tst'm1), '2')
    call mFree tstMark(t1, '3')
    t3 = tstMark(mNew('tst'm1), '4')
    t4 = tstMark(mNew('tst'm1), '5')
    call tstOut t, 'mNew(tst...) 2='m.t2 '3='m.t3 '4='m.t4
    i = mIterBegin('tst'm1)
    do while assNN('i', mIter(i))
        call tstOut t, 'iter' m.i
        end
    call tstEnd t
/*
$=/tstM/
    ### start tst tstM ################################################
    symbol m.b LIT
    symbol m.a LIT
    mAdd a A.2
    mAdd a A.3
    m.a: 3: 1=eins 2=zwei 3=drei 4=M.A.4
    m.c: 5: 1=c vorAddSt a 2=eins 3=zwei 4=drei 5=c nacAddSt a 6=M.C.6
$/tstM/ */


    drop m.b m.a m.a.0 m.a.1 m.a.2
    call tst t, 'tstM'
    call tstOut t, 'symbol m.b' symbol('m.b')
    m.b = 1
    call tstOut t, 'symbol m.a' symbol('m.a')
    call tstOut t, 'mAdd a' mAdd(mCut(a, 0), 'eins', 'zwei')
    call tstOut t, 'mAdd a' mAdd(a, 'drei')
    call tstOut t, 'm.a:' m.a.0': 1='m.a.1 '2='m.a.2 '3='m.a.3 '4='m.a.4
    call mAdd mCut(c, 0), 'c vorAddSt a'
    call mAddSt c, a
    call mAdd c, 'c nacAddSt a'
    call tstOut t, 'm.c:' m.c.0': 1='m.c.1 '2='m.c.2 '3='m.c.3,
                    '4='m.c.4 '5='m.c.5 '6='m.c.6
    call tstEnd t
    return
endProcedure tstM

tstMCat: procedure expose m.
/*
$=/tstMCat/
    ### start tst tstMCat #############################################
    mCat(0, )                     =;
    mCat(0, %qn1%s)               =;
    mCat(0, %qn112222%s%qe%s11)   =;
    mCat(0, 1%s%qn231%s%qe%s2)    =;
    mCat(0, 1%s2@%s%qn33341%s2@%s%=;
    mCat(0, 1%s2@%s3@%s%qn451%s2@%=;
    mCat(1, )                     =eins;
    mCat(1, %qn1%s)               =eins;
    mCat(1, %qn112222%s%qe%s11)   =eins11;
    mCat(1, 1%s%qn231%s%qe%s2)    =1eins2;
    mCat(1, 1%s2@%s%qn33341%s2@%s%=1eins2eins333;
    mCat(1, 1%s2@%s3@%s%qn451%s2@%=1eins2eins3eins4;
    mCat(2, )                     =einszwei;
    mCat(2, %qn1%s)               =eins1zwei;
    mCat(2, %qn112222%s%qe%s11)   =eins112222zwei11;
    mCat(2, 1%s%qn231%s%qe%s2)    =1eins231zwei2;
    mCat(2, 1%s2@%s%qn33341%s2@%s%=1eins2eins33341zwei2zwei333;
    mCat(2, 1%s2@%s3@%s%qn451%s2@%=1eins2eins3eins451zwei2zwei3zwei4;
    mCat(3, )                     =einszweidrei;
    mCat(3, %qn1%s)               =eins1zwei1drei;
    mCat(3, %qn112222%s%qe%s11)   =eins112222zwei112222drei11;
    mCat(3, 1%s%qn231%s%qe%s2)    =1eins231zwei231drei2;
    mCat(3, 1%s2@%s%qn33341%s2@%s%=1eins2eins33341zwei2zwei33341drei2dr+
    ei333;
    mCat(3, 1%s2@%s3@%s%qn451%s2@%=1eins2eins3eins451zwei2zwei3zwei451d+
    rei2drei3drei4;
$/tstMCat/ */
    call mIni
    call tst t, "tstMCat"
     m.qq.1 = "eins"
     m.qq.2 = "zwei"
     m.qq.3 = "drei"
     do qx = 0 to 3
         m.qq.0 = qx
         call tstMCat1 qx
         call tstMCat1 qx, '%qn1%s'
         call tstMCat1 qx, '%qn112222%s%qe%s11'
         call tstMCat1 qx, '1%s%qn231%s%qe%s2'
         call tstMCat1 qx, '1%s2@%s%qn33341%s2@%s%qe333'
         call tstMCat1 qx, '1%s2@%s3@%s%qn451%s2@%s3@%s%qe4'
         end
     call tstEnd t
     return
endProcedure tstMCat

tstMCat1: procedure expose m.
parse arg m.qq.0, fmt
    call out left("mCat("m.qq.0"," fmt")", 30)"="mCat(qq, fmt)";"
return
endProcedure tstMCat1

tstMap: procedure expose m.
/*
$=/tstMap/
    ### start tst tstMap ##############################################
    mapNew m keys m-keys 0
    map m zwei --> 2
    map m Zwei is not defined
    map stem m-keys 4
    map m eins --> 1
    map m zwei --> 2
    map m drei --> 3
    map m vier --> 4
    *** err: duplicate key eins in map m
    map m zwei is not defined
    q 2 zw dr
    map stem Q 2
    map Q zw --> 2Q
    map Q dr --> 3Q
    map stem m 3
    map m eins --> 1
    map m zwei --> 2PUT
    map m vier --> 4PUT
    *** err: duplicate key zwei in map m
    tstMapLong eins keys 3
    tstMapLong zweiMal keys 48
    tstMapLong dreiMal keys 93
    tstMapLong vier    keys 138
    tstMapLong <fuenf> keys 188
    tstMap clear keys 0
    inline1 3
    inline1 1 ==    inline1 eins==
    inline1 2 ====
    inline1 3 ==    inline1 drei==
    inline2 1 1 ==    inline2 eins==
    inline3 ?
$/tstMap/ */
/*
$=/tstMapInline1/
    inline1 eins

    inline1 drei
$/tstMapInline1/ */
/*
$=/tstMapInline2/
    inline2 eins
$/tstMapInline2/ */

    call tst t, 'tstMap'
    m = mapNew('K')
    ky = mapKeys(m)
    call mAdd t'.TRANS', m 'm', ky 'm-keys'
    call tstOut t, 'mapNew' m 'keys' ky m.ky.0
    call mapAdd m, 'eins', 1
    call mapAdd m, 'zwei', 2
    call mapAdd m, 'drei', 3
    call mapAdd m, 'vier', 4
    call tstMapShow m, 'zwei'
    call tstMapShow m, 'Zwei'
    call tstMapShowSt m, mapKeys(m)
    call mapAdd m, 'eins', 1
    call mapReset m, '='
    call tstMapShow m, 'zwei'
    call mapAdd m, 'eins', 1
    call mapAdd m, 'zwei', 2
    call mapPut m, 'zwei', 2Put
    call mapPut m, 'vier', 4Put
    call mapReset q, '='
    call mapAdd q, 'zw', 2q
    call mapAdd q, 'dr', 3q
    call tstOut t, 'q' m.q.0 m.q.1 m.q.2
    call tstMapShowSt q, mapKeys(q)
    call tstMapShowSt m, mapKeys(m)
    call mapAdd m, 'zwei', 2addDup
    call tstMapLong m, 'eins'      ,201, 2000, -2, 2
    call tstMapLong m, 'zweiMal'   ,201, 2000, -2, 2
    call tstMapLong m, 'dreiMal'   ,201, 2000,  2,-2
    call tstMapLong m, 'vier   '   ,2010, 201, -2, 2
    call tstMapLong m, '<fuenf>'   ,2010, 201,  2,-2
    call mapClear m
    keys = mapKeys(m)
    call tstOut t, 'tstMap clear keys' m.keys.0
    i = mapInline('tstMapInline1')
    call tstOut t, 'inline1' m.i.0
    do x=1 to m.i.0
        call tstOut t, 'inline1' x '=='m.i.x'=='
        end
    i = mapInline('tstMapInline2')
    call tstOut t, 'inline2' m.i.0 '1 =='m.i.1'=='
    call tstOut t, 'inline3' mapInline('tstMapInline3', 'r')'?'
    call tstEnd t
    return
endProcedure tstMap

tstMapLong: procedure expose m.
parse arg m, w, f1, t1, f2, t2
    if f1 < t1 then
        b1 = 201
    else
        b1 = -201
    if f2 < t2 then
        b2 = 1
    else
        b2 = -1
    lo = copies(w, 2100 % length(w))
    keys = mapKeys(m)
    keyCn = m.keys.0
    call tstOut t, 'tstMapLong' w 'keys' keyCn
    do x = f1 by b1 to t1
        do y = x+f2 by b2 to x+t2
            k = left(lo, y)
            if mapHasKey(m, k) then
                call err 'mapLong hasKey before' w y
            call mapAdd m, k, w y
            if \ mapHasKey(m, k) then
                call err 'mapLong \ hasKey after' w y
            if mapGet(m, k) \== w y then
                call err 'mapLong \ get <> ' w y
            keys = mapKeys(m)
            if keyCn + 1 \= m.keys.0 then
                call err 'mapLong keys .0 <> ' w y
            keyCn = m.keys.0
            if k \== m.keys.keyCn then
                call err 'mapLong keys . ' keyCn '<>' w y
            end
        end
    return
endProcedure tstMapLong

tstMapVia: procedure expose m.
/*
$=/tstMapVia/
    ### start tst tstMapVia ###########################################
    map M K --> A
    mapVia(m, K)      A
    *** err: missing m.A at 3 in mapVia(M, K|)
    mapVia(m, K|)     M.A
    mapVia(m, K|)     valAt m.a
    mapVia(m, K|)     valAt m.a
    *** err: missing m.A.aB at 5 in mapVia(M, K|aB)
    mapVia(m, K|aB)   M.A.aB
    mapVia(m, K|aB)   valAt m.A.aB
    *** err: missing m.valAt m.a at 4 in mapVia(M, K||)
    mapVia(m, K||)    M.valAt m.a
    mapVia(m, K||)    valAt m.valAt m.a
    mapVia(m, K||F)   valAt m.valAt m.a.F
$/tstMapVia/ */
    call tst t, 'tstMapVia'
    u = 'A.aB'
    v = 'valAt m.a'
    drop m.a m.u m.v m.v.f
    call mapReset m, 'K'
    call mapAdd m, k, a
    call tstMapShow m, k
    call tstOut t, 'mapVia(m, K)     ' mapVia(m, 'K')
    call tstOut t, 'mapVia(m, K|)    ' mapVia(m, 'K|')
    m.a = v
    call tstOut t, 'mapVia(m, K|)    ' mapVia(m, 'K|')
    call tstOut t, 'mapVia(m, K|)    ' mapVia(m, 'K|')
    call tstOut t, 'mapVia(m, K|aB)  ' mapVia(m, 'K|aB')
    m.u = 'valAt m.'u
    call tstOut t, 'mapVia(m, K|aB)  ' mapVia(m, 'K|aB')
    call tstOut t, 'mapVia(m, K||)   ' mapVia(m, 'K||')
    v = m.a
    m.v = 'valAt m.'v
    m.v.f = 'valAt m.'v'.F'
    call tstOut t, 'mapVia(m, K||)   ' mapVia(m, 'K||')
    call tstOut t, 'mapVia(m, K||F)  ' mapVia(m, 'K||F')
    call tstEnd t
    return
endProcedure tstMapVia

tstMapShow: procedure expose m.
parse arg a, key
    if mapHasKey(a, key) then
        call tstOut t, 'map' a key '-->' mapGet(a, key)
    else
        call tstOut t, 'map' a key 'is not defined'
    return
endProcedure tstMapShow

tstMapShowSt: procedure expose m.
parse arg a, st
    call tstOut t, 'map stem' st m.st.0
    do wx=1 to m.st.0
        call tstMapShow a, m.st.wx
        end
    return
endProcedure tstMapShow

tstClass2: procedure expose m.
/*
$=/tstClass2o2/
    ### start tst tstClass2 ###########################################
    @CLASS.5 isA :class = u
    . choice u union
    .  .NAME = class
    .  stem 7
    .   .1 refTo @CLASS.1 :class = u
    .    choice v union
    .    choice c union
    .     .NAME = u
    .     .CLASS refTo @CLASS.15 :class = s
    .      choice s .CLASS refTo @CLASS.12 done :class @CLASS.12
    .   .2 refTo @CLASS.6 :class = c
    .    choice c union
    .     .NAME = v
    .     .CLASS refTo @CLASS.7 :class = u
    .      choice u stem 0
    .   .3 refTo @CLASS.8 :class = c
    .    choice c union
    .     .NAME = w
    .     .CLASS refTo @CLASS.7 done :class @CLASS.7
    .   .4 refTo @CLASS.9 :class = c
    .    choice c union
    .     .NAME = o
    .     .CLASS refTo @CLASS.7 done :class @CLASS.7
    .   .5 refTo @CLASS.10 :class = c
    .    choice c union
    .     .NAME = s
    .     .CLASS refTo @CLASS.11 :class = f
    .      choice f union
    .       .NAME = CLASS
    .       .CLASS refTo @CLASS.12 :class = r
    .        choice r .CLASS refTo @CLASS.5 done :class @CLASS.5
    .   .6 refTo @CLASS.13 :class = c
    .    choice c union
    .     .NAME = r
    .     .CLASS refTo @CLASS.11 done :class @CLASS.11
    .   .7 refTo @CLASS.14 :class = c
    .    choice c union
    .     .NAME = u
    .     .CLASS refTo @CLASS.15 :class = s
    .      choice s .CLASS refTo @CLASS.12 done :class @CLASS.12
    .   .8 refTo @CLASS.16 :class = c
    .    choice c union
    .     .NAME = n
    .     .CLASS refTo @CLASS.17 :class = u
    .      choice u stem 2
    .       .1 refTo @CLASS.18 :class = f
    .        choice f union
    .         .NAME = NAME
    .         .CLASS refTo @CLASS.1 done :class @CLASS.1
    .       .2 refTo @CLASS.15 done :class @CLASS.15
    .   .9 refTo @CLASS.19 :class = c
    .    choice c union
    .     .NAME = f
    .     .CLASS refTo @CLASS.20 :class = u
    .      choice u stem 2
    .       .1 refTo @CLASS.18 done :class @CLASS.18
    .       .2 refTo @CLASS.11 done :class @CLASS.11
    .   .10 refTo @CLASS.21 :class = c
    .    choice c union
    .     .NAME = c
    .     .CLASS refTo @CLASS.20 done :class @CLASS.20
    .   .11 refTo @CLASS.22 :class = c
    .    choice c union
    .     .NAME = m
    .     .CLASS refTo @CLASS.23 :class = u
    .      choice u stem 2
    .       .1 refTo @CLASS.18 done :class @CLASS.18
    .       .2 refTo @CLASS.24 :class = f
    .        choice f union
    .         .NAME = MET
    .         .CLASS refTo @CLASS.1 done :class @CLASS.1
$/tstClass2o2/

$=/tstClass2/
    ### start tst tstClass2 ###########################################
    @CLASS.4 isA :class = u
    . choice u union
    .  .NAME = class
    .  stem 7
    .   .1 refTo @CLASS.1 :class = u
    .    choice u union
    .     .NAME = v
    .     stem 2
    .      .1 refTo @CLASS.20 :class = m
    .       choice m union
    .        .NAME = o2String
    .        .MET = return m.m
    .      .2 refTo @CLASS.108 :class = m
    .       choice m union
    .        .NAME = o2File
    .        .MET = return file(m.m)
    .   .2 refTo @CLASS.5 :class = c
    .    choice c union
    .     .NAME = u
    .     .CLASS refTo @CLASS.6 :class = u
    .      choice u union
    .       .NAME = .
    .       stem 2
    .        .1 refTo @CLASS.7 :class = f
    .         choice f union
    .          .NAME = NAME
    .          .CLASS refTo @CLASS.1 done :class @CLASS.1
    .        .2 refTo @CLASS.8 :class = s
    .         choice s .CLASS refTo @CLASS.9 :class = r
    .          choice r .CLASS refTo @CLASS.4 done :class @CLASS.4
    .   .3 refTo @CLASS.10 :class = c
    .    choice c union
    .     .NAME = f
    .     .CLASS refTo @CLASS.11 :class = u
    .      choice u union
    .       .NAME = .
    .       stem 2
    .        .1 refTo @CLASS.7 done :class @CLASS.7
    .        .2 refTo @CLASS.12 :class = f
    .         choice f union
    .          .NAME = CLASS
    .          .CLASS refTo @CLASS.9 done :class @CLASS.9
    .   .4 refTo @CLASS.13 :class = c
    .    choice c union
    .     .NAME = s
    .     .CLASS refTo @CLASS.12 done :class @CLASS.12
    .   .5 refTo @CLASS.14 :class = c
    .    choice c union
    .     .NAME = c
    .     .CLASS refTo @CLASS.11 done :class @CLASS.11
    .   .6 refTo @CLASS.15 :class = c
    .    choice c union
    .     .NAME = m
    .     .CLASS refTo @CLASS.16 :class = u
    .      choice u union
    .       .NAME = .
    .       stem 2
    .        .1 refTo @CLASS.7 done :class @CLASS.7
    .        .2 refTo @CLASS.17 :class = f
    .         choice f union
    .          .NAME = MET
    .          .CLASS refTo @CLASS.1 done :class @CLASS.1
    .   .7 refTo @CLASS.18 :class = c
    .    choice c union
    .     .NAME = r
    .     .CLASS refTo @CLASS.12 done :class @CLASS.12
$/tstClass2/ */

    call classIni
    call tst t, 'tstClass2'
    call classOut , m.class.class
    call tstEnd t
    return
endProcedure tstClass2

tstClass: procedure expose m.
/*
$=/tstClass/
    ### start tst tstClass ############################################
    Q u =className= tstClassTf12
    Q.eins.zwei v ==> M.Q.eins.zwei
    *** err: bad type v: classNew(v tstClassTf12)
    *** err: bad type v: classBasicNew(v, tstClassTf12, )
    R u =className= uststClassTf12
    R u =className= uststClassTf12in
    R u =className= tstClassTf12
    R.eins.zwei v ==> M.R.eins.zwei
    R s =stem.0= 2
    R.1 r ==> M.R.1 :CLASS.3
    R.1 u =className= tstClassTf12
    R.1.eins.zwei v ==> M.R.1.eins.zwei
    R.2 r ==> M.R.2 :CLASS.3
    R.2 u =className= tstClassTf12
    R.2.eins.zwei v ==> M.R.2.eins.zwei
    S u =className= TstClass7
    S s =stem.0= 2
    S.1 u =className= TstClass7s
    S.1.eins v ==> M.S.1.eins
    S.1 m =met-metA--> say "metA"
    S.1 m =met-metB--> say "metB"
    S.2 u =className= TstClass7s
    S.2.zwei v ==> M.S.2.zwei
    S.2 m =met-metA--> say "metA"
    S.2 m =met-metB--> say "metB"
    class of mutate qq tstClassTf12
$/tstClass/ */

    f = 'eins.zwei'
    e = 'eins'
    z = 'zwei'
    drop m.q.f m.r.f m.r.0 m.r.1 m.r.1.f m.r.2 m.r.2.f
    drop m.s.0 m.s.1 m.s.1.e m.s.2 m.s.2.z
    call classIni
    call tst t, 'tstClass'
    t1  =  classNew('n? tstClassTf12 u f eins f zwei v')
    call tstClassOut t, t1, q
    z = m.class.0
    if class4name('tstClassB', '') == '' then do
        t2 = classNew('n tstClassB u n tstClassC u tstClassTf12,',
            's u v tstClassTf12')
        end
    else do /*  the second time we would get a duplicate error */
        call tstOut t, '*** err: bad type v: classNew(v tstClassTf12)'
        call tstOut t, '*** err: bad type v:' ,
            'classBasicNew(v, tstClassTf12, )'
        end
    t2 = classNew('n? uststClassTf12 u' ,
           'n? uststClassTf12in u tstClassTf12',
        , classNew('s u r, tstClassTf12'))
    m.r.0 = 2
    call tstClassOut t, t2, r
    t3 = classNew('n? TstClass7 u s',
         classNew('n? TstClass7s u c 1 f eins v, c 2 f zwei v',
            ,'m', 'metA say "metA"', 'metB say "metB"'))
    m.s.0 = 2
    m.s.1 = 1
    m.s.2 = 2
    call tstClassOut t, t3, s
    call oMutate qq, class4Name('tstClassTf12')
    tt = objClass(qq)
    call tstOut t, 'class of mutate qq' className(tt)
    call tstEnd t
    return
endProcedure tstClass

tstClassOut: procedure expose m.
parse arg o, t, a
    if wordPos(t, m.class.classV m.class.classW m.class.classO) > 0 then
        return tstOut(o, a m.t.name '==>' m.a)
    if m.t == 'r' then
        return tstOut(o, a m.t '==>' m.a ':'m.t.class)
    if m.t == 'u' & m.t.name \== '' then
        call tstOut o, a m.t '=className=' m.t.name
    if m.t == 'f' then
        return tstClassOut(o, m.t.class, a'.'m.t.name)
    if m.t = 'u' then do
        do ux=1 to m.t.0
            call tstClassOut o, m.t.ux, a
            end
        return 0
        end
    if m.t = 's' then do
        call tstOut o, a m.t '=stem.0=' m.a.0
        do ux=1 to m.a.0
            call tstClassOut o, m.t.class, a'.'ux
            end
        return 0
        end
    if m.t = 'c' then do
        if m.t.name = m.a then
            call tstClassOut o, m.t.class, a
         return 0
        end
    if m.t = 'm' then
        return tstOut(o, a m.t '=met-'m.t.name'-->' m.t.met)
    call err 'bad class type' m.t
endProcedure tstClassOut


tstO: procedure expose m.
/*
$=/tstO/
    ### start tst tstO ################################################
    oIsCla(TstOCla1) 0
    TstOCla1 -
    oIsCla(TstOCla1) 1
    TstOCla1 -
    oIsCla(TstOCla1) 1
    TstOCla1 contents of met1
    TstOCla1.met2 -
    TstOCla2.met1 contents of met1
    TstOCla2.met2 contents of met2
    TstOCla1.TstOMet3 -
    TstOCla1.TstOMet3 generated met TstOCla1:TstOMet3 code...;
    TstOCla2.TstOMet3 generated met TstOCla2:TstOMet3 code...;
    tstOObj1.met1 -
    tstOObj1.met1 contents of met1
$/tstO/
*/
    call mIni
    call tst t, 'tstO'
    call oIni
    c1 = 'TstOCla1'
    c2 = 'TstOCla2'
    m1 = 'met1'
    m2 = 'met2'
    m3 = 'TstOMet3'
    lg = m.o.lazyGen
    call tstOut t, 'oIsCla('c1')' oIsCla(c1)
    call tstOut t, c1 oClaMet(c1, 'met1', '-')
    call oAddCla c1
    call tstOut t, 'oIsCla('c1')' oIsCla(c1)
    call tstOut t, c1 oClaMet(c1, 'met1', '-')
    call oAddMet c1, m1, 'contents of met1'
    call tstOut t, 'oIsCla('c1')' oIsCla(c1)
    call tstOut t, c1 oClaMet(c1, m1, '-')
    call oAddCla c2, c1
    call oAddMet c2, 'met2', 'contents of met2'
    call tstOut t, c1'.met2' oClaMet(c1, 'met2', '-')
    call tstOut t, c2'.'m1 oClaMet(c2, m1, '-')
    call tstOut t, c2'.met2' oClaMet(c2, 'met2', '-')
    call tstOut t, c1'.'m3 oClaMet(c1, m3, '-')
    call oAddMet lg, m3,
            , "return 'generated met' cl':'me 'code...;'"
    call tstOut t, c1'.'m3 oClaMet(c1, m3, '-')
    call tstOut t, c2'.'m3 oClaMet(c2, m3, '-')
    o1 = 'tstOObj1'
    o2 = 'tstOObj2'
    call tstOut t, o1'.met1' objMet(o1, 'met1', '-')
    call oMutate o1, c1
    call tstOut t, o1'.met1' objMet(o1, 'met1', '-')
    call tstEnd t
    drop m.o.cParent.c1 m.o.cMet.c1.m1 m.o.cMet.c1.m2 m.o.cMet.c1.m3
    drop m.o.cParent.c2 m.o.cMet.c2.m1 m.o.cMet.c2.m2 m.o.cMet.c2.m3
    drop m.o.o2c.o1                                   m.o.cMet.lg.m3
    return
endProcedure tstO


tstOEins: procedure expose m.
/*
$=/tstOEins/
    ### start tst tstOEins ############################################
    class method calls of TstOEins
    .  met Eins.eins M
     FLDS of <obj e of TstOEins> .FEINS, .FZWEI
     methodcalls of object e of TstOEins
    .  met Eins.eins <obj e of TstOEins>
    .  met Eins.zwei <obj e2 of TstOEins>
    *** err: no method nein in class TstOEins of object <obj e+
    . of TstOEins>
    *** err: no class found for object noObj
    class method calls of TstOEins
    .  met Elf.zwei M
    FLDS of <obj f of TstOElf> .FEINS, .FZWEI, .FELF
    methodcalls of object f of TstOElf
    .  met Eins.eins <obj f of TstOElf>
    .  met Elf.zwei <obj f of TstOElf>
    .  met Elf.drei <obj f of TstOElf>
    oCopy c1 of class TstOEins, c2
    C1 u =className= TstOEins
    C1.FEINS v ==> M.C1.FEINS
    C1.FZWEI v ==> M.C1.FZWEI
    C1 m =met-eins--> call tstOut t, "  met Eins.eins" m
    C1 m =met-zwei--> call tstOut t, "  met Eins.zwei" m
    C2 u =className= TstOEins
    C2.FEINS v ==> M.C1.FEINS
    C2.FZWEI v ==> M.C1.FZWEI
    C2 m =met-eins--> call tstOut t, "  met Eins.eins" m
    C2 m =met-zwei--> call tstOut t, "  met Eins.zwei" m
    oCopy c3 of class TstOElf, c4
    C4 u =className= TstOElf
    C4 u =className= TstOEins
    C4.FEINS v ==> M.C3.FEINS
    C4.FZWEI v ==> M.C3.FZWEI
    C4 m =met-eins--> call tstOut t, "  met Eins.eins" m
    C4 m =met-zwei--> call tstOut t, "  met Eins.zwei" m
    C4.FELF r ==> M.C3.FELF :CLASS.3
    C4 m =met-zwei--> call tstOut t, "  met Elf.zwei" m
    C4 m =met-drei--> call tstOut t, "  met Elf.drei" m
    tEinsDop <class TstOEins>
    oRun 7*3 21
    oRun 12*12 144
$/tstOEins/ */
    call classIni
    call tst t, 'tstOEins'
    tEins = classNew('n? TstOEins u f FEINS v,f FZWEI v', 'm',
           , 'eins call tstOut t, "  met Eins.eins" m',
           , 'zwei call tstOut t, "  met Eins.zwei" m')
    call mAdd t.trans, tEins '<class TstOEins>'
    call tstOut t, 'class method calls of TstOEins'
    interpret oClaMet('TstOEins', 'eins')
    e = oNew('TstOEins')
    e2 = oNew('TstOEins')
    call mAdd t.trans, e '<obj e of TstOEins>'
    call mAdd t.trans, e2 '<obj e2 of TstOEins>'
    call tstOut t, 'FLDS of' e mCat(oFlds(e), '%qn, %s')
    call tstOut t, 'methodcalls of object e of TstOEins'
    call tstOmet e, 'eins'
    call tstOmet e2, 'zwei'
    call tstOmet e, 'nein'
    call tstOmet 'noObj', 'nein'
    tElf = classNew('n? TstOElf u TstOEins, f FELF r', 'm',
        , 'zwei call tstOut t, "  met Elf.zwei" m',
        , 'drei call tstOut t, "  met Elf.drei" m')
    call tstOut t, 'class method calls of TstOEins'
    interpret oClaMet('TstOElf', 'zwei')
    f = oNew('TstOElf')
    call mAdd t.trans, f '<obj f of TstOElf>'
    call tstOut t, 'FLDS of' f mCat(oFlds(f), '%qn, %s')
    call tstOut t, 'methodcalls of object f of TstOElf'
    call tstOmet f, 'eins'
    call tstOmet f, 'zwei'
    call tstOmet f, 'drei'
/*  call tstOut t, 'methodcalls of object f cast To TstOEins'
    call tstOmet oCast(f, 'TstOEins'), 'eins'
    call tstOmet oCast(f, 'TstOEins'), 'zwei'
    call tstOut t, 'FLDS of <cast(f, TstOEins)>',
        mCat(oFlds(oCast(f, 'TstOEins')), '%qn, %s')
 */
    call oMutate c1, class4Name('TstOEins')
    call tstOut t, 'oCopy c1 of class TstOEins, c2'
    call tstClassOut t, tEins, c1
    call oCopy c1, c2
    call tstClassOut t, tEins, c2
    call tstOut t, 'oCopy c3 of class TstOElf, c4'
    call oMutate c3, class4Name('TstOElf')
    call oCopy c3, c4
    call tstClassOut t, tElf, c4

/*    tEinsDop = classNew('n TstOEins u f FEINS v,f FZWEI v', 'm',
           , 'eins call tstOut t, "  met Eins.eins" m',
           , 'zwei call tstOut t, "  met Eins.zwei" m')
*/ tEinsDop = tEins
    call tstOut t, 'tEinsDop' tEinsDop
    e3 = oNew('TstOEins')
    if e3 <<= e | e3 <<= e2 then
        call err 'doppelt reinitialised objects'
    rr = oRunner('return 7 * 3')
    call tstOut t, 'oRun 7*3' oRun(rr)
    r12 = oRunner('return 12 * 12')
    call tstOut t, 'oRun 12*12' oRun(r12)
    call tstEnd t
    return
endProcedure tstOEins

tstOmet: procedure expose m.
parse arg m, met
    interpret objMet(m, met)
    return
endProcedure tstOmet

tstOGet: procedure expose m.
/*
$=/tstOGet/
    ### start tst tstOGet #############################################
    class.NAME= class
    class.NAME= class : w
    class|    = u
    *** err: bad stem index 91>7 @ CLASS.4 class class in oGet(CLASS.4,+
    . 91)
    class.91  = 0
    class.1   = CLASS.1 |= u
    class.2   = CLASS.5 |= c
$/tstOGet/ */
    call oIni
    call tst t, 'tstOGet'
    cc = m.class.class
    call tstOut t, 'class.NAME=' oGet(cc, 'NAME')
    o = oGetO(cc, 'NAME')
    call tstOut t, 'class.NAME=' o2String(o) ':' className(objClass(o))
    call tstOut t, 'class|    =' oGet(cc, '|')
    call tstOut t, 'class.91  =' className(oGet(cc, 91))
    call tstOut t, 'class.1   =' oGetO(cc, '1') '|=' oGet(cc, '1||')
    call tstOut t, 'class.2   =' className(oGetO(cc, '2')) ,
            '|=' oGet(cc, '2||')
    call tstEnd t
/*
$=/tstOGet2/
    ### start tst tstOGet2 ############################################
    tstOGet1            get1 w
    tstOGet1.f1         get1.f1 v
    tstOGet1.f2         get1.f2 w
    tstOGet1.F3|        get1.f3 v
    tstOGet1.f3.fEins   get1.f3.fEins v
    tstOGet1.f3.fZwei   get1.f3.fZwei w
    tstOGet1.f3%fDrei   !get1.f3.fDrei w
    tstOGet1.f3.fDrei   get1.f3.fDrei w
    tstOGet1.f3%1       get1.f3.fDrei.1 w
    tstOGet1.f3.2       TSTOGET1
    tstOGet1.f3.2|f1    get1.f1 v
    tstOGet1.f3.2|f3.2|f2 get1.f2 w
    *** err: bad stem index 4>3 @ TSTOGET1.F3 class TstOGet0 in oGet(TS+
    TOGET1, F3.4)
    tstOGet1.f3.4       0
    tstOGet1.f3.3       get1.f3.fDrei.3 w
    *** err: bad stem index 3>3A @ TSTOGET1.F3 class TstOGet0 in oGet(T+
    STOGET1, F3.3)
    tstOGet1.f3.2       0
$/tstOGet2/

 */
    c0 = classNew('n? TstOGet0 u f FEINS v,f FZWEI w,f FDREI r,v,' ,
            's r TstOGet0')
    cl = classNew('n? TstOGet u r, f F1 v, f F2 r, f F3 TstOGet0')
    call oMutate tstOGet1, cl
    m.tstOGet1    = s2o('get1 w')
    m.tstOGet1.f1 = 'get1.f1 v'
    m.tstOGet1.f2 = s2o('get1.f2 w')
    m.tstOGet1.f3 = 'get1.f3 v'
    m.tstOGet1.f3.fEins = 'get1.f3.fEins v'
    m.tstOGet1.f3.fZwei = s2o('get1.f3.fZwei w')
    m.tstOGet1.f3.fDrei = s2o('get1.f3.fDrei w')
    m.tstOGet1.f3.0 = 3
    m.tstOGet1.f3.1 = s2o('get1.f3.fDrei.1 w')
    m.tstOGet1.f3.2 = tstOGet1
    m.tstOGet1.f3.3 = s2o('get1.f3.fDrei.3 w')

    call tst t, 'tstOGet2'
    call tstOut t, 'tstOGet1           ' oGet(tstOGet1,   )
    call tstOut t, 'tstOGet1.f1        ' oGet(tstOGet1, f1)
    call tstOut t, 'tstOGet1.f2        ' oGet(tstOGet1, f2)
    call tstOut t, 'tstOGet1.F3|       ' oGet(tstOGet1, 'F3|')
    call tstOut t, 'tstOGet1.f3.fEins  ' oGet(tstOGet1, f3.fEins)
    call tstOut t, 'tstOGet1.f3.fZwei  ' oGet(tstOGet1, f3.fZwei)
    call tstOut t, 'tstOGet1.f3%fDrei  ' oGetO(tstOGet1, 'F3%FDREI')
    call tstOut t, 'tstOGet1.f3.fDrei  ' oGet(tstOGet1, f3.fDrei)
    call tstOut t, 'tstOGet1.f3%1      ' oGet(tstOGet1, 'F3%1')
    call tstOut t, 'tstOGet1.f3.2      ' oGetO(tstOGet1, 'F3.2')
    call tstOut t, 'tstOGet1.f3.2|f1   ' oGet(tstOGet1, 'F3.2|F1')
    call tstOut t, 'tstOGet1.f3.2|f3.2|f2' ,
                                oGet(tstOGet1, 'F3.2|F3.2|F2')
    call tstOut t, 'tstOGet1.f3.4      ' oGet(tstOGet1, 'F3.4')
    call tstOut t, 'tstOGet1.f3.3      ' oGet(tstOGet1, 'F3.3')
    m.tstOGet1.f3.0 = 3a
    call tstOut t, 'tstOGet1.f3.2      ' oGet(tstOGet1, 'F3.3')
    call tstEnd t
/*
$=/tstOPut3/
    ### start tst tstOPut3 ############################################
    tstOGet1.f1         get1.f1 v
    tstOGet1.f1   aPut1 f1.put1
    tstOGet1.f2   aPut2 f2.put2
    tstOGet1.f3.fEins  p3 f3.fEins,p3
    tstOGet1.f3%0       3A
    tstOGet1.f3%0    =4 4
    tstOGet1.f3.4.feins val f3.4|feins
$/tstOPut3/
 */
    call tst t, 'tstOPut3'
    call tstOut t, 'tstOGet1.f1        ' oGet(tstOGet1, f1)
    call oPut tstOget1, f1, 'f1.put1'
    call tstOut t, 'tstOGet1.f1   aPut1' oGet(tstOGet1, f1)
    call oPut tstOget1, f2, 'f2.put2'
    call tstOut t, 'tstOGet1.f2   aPut2' oGet(tstOGet1, f2)
    call oPut tstOget1, f3.fEins, 'f3.fEins,p3'
    call tstOut t, 'tstOGet1.f3.fEins  p3' oGet(tstOGet1, f3.fEins)
    call tstOut t, 'tstOGet1.f3%0      ' oGet(tstOGet1, 'F3%0')
    call oPut tstOget1, f3.0, 4
    call tstOut t, 'tstOGet1.f3%0    =4' oGet(tstOGet1, 'F3%0')
    call oPutO tstOget1, 'F3.4', ''
    call oPut tstOget1, 'F3.4|FEINS', 'val f3.4|feins'
    call tstOut t, 'tstOGet1.f3.4.feins'    ,
          oGet(tstOGet1, 'F3.4|FEINS')
    call tstEnd t
    return
endProcedure tstOGet

tstJSay: procedure expose m.
/*
$=/tstJSay/
    ### start tst tstJSay #############################################
    *** err: bad option openArg in jOpen(<obj j of JRW>, openArg)
    *** err: jWrite(<obj j of JRW>, writeArg) but not opened w
    *** err: can only write JSay.jOpen(<obj s of JSay>, <)
    *** err: jWrite(<obj s of JSay>, write s vor open) but not opened+
    . w
    *** err: can only read JRWEof.jOpen(<obj e of JRWEof>, >)
    *** err: jRead(<obj e of JRWEof>, XX) but not opened r
    read e vor open 0 m.xx valueBefore
    read e nach open 0 m.xx M.XX
    out eins
    #jIn 1# tst in line 1 eins ,
    out zwei in 1 vv=readAdrVV
    #jIn 2# tst in line 2 zwei ;   .
    out drei in 1 vv=readAdrVV Schluss
$/tstJSay/ */

    call jIni
    call tst t, 'tstJSay'
    jrw = oNew('JRW')
    call mAdd t'.TRANS', jrw '<obj j of JRW>'
    call jOpen jrw, 'openArg'
    call jWrite jrw, 'writeArg'
    s = oNew('JSay')
    call mAdd t'.TRANS', s '<obj s of JSay>'
    call jOpen s, m.j.cRead
    s = oNew('JSay')
    call mAdd t'.TRANS', s '<obj s of JSay>'
    call jWrite s, 'write s vor open'
    call jOpen s, '>'
    call jWrite s, 'write s nach open'
    e = oNew('JRWEof')
    call mAdd t'.TRANS', e '<obj e of JRWEof>'
    call jOpen e, '>'
    e = oNew('JRWEof')
    call mAdd t'.TRANS', e '<obj e of JRWEof>'
    m.xx = 'valueBefore'
    call tstOut t, 'read e vor open' jRead(e, xx) 'm.xx' m.xx
    call jOpen e, m.j.cRead
    call tstOut t, 'read e nach open' jRead(e, xx) 'm.xx' m.xx
    call out 'out eins'
    vv = 'readAdrVV'
    m.vv = 'readAdrVVValueBefore'
    call out 'out zwei in' in(vv) 'vv='vv
    m.vv = 'readAdrVVValueBefore'
    call out 'out drei in' in(vv) 'vv='vv 'Schluss'
    call tstEnd t
    return
endProcedure tstJSay

tstJ: procedure expose m.
/*
$=/tstJ/
    ### start tst tstJ ################################################
    out eins
    #jIn 1# tst in line 1 eins ,
    1 in() tst in line 1 eins ,
    #jIn 2# tst in line 2 zwei ;   .
    2 in() tst in line 2 zwei ;   .
    #jIn 3# tst in line 3 drei .schluss..
    3 in() tst in line 3 drei .schluss..
    #jIn eof 4#
    in() 3 reads vv VV
    line buf line one
    line buf line two
    line buf line three
    line buf line four
    *** err: jWrite(<buf b>, buf line five while reading) but not opene+
    d w
$/tstJ/ */

    call jIni
    call tst t, "tstJ"
    b = jOpen(jBuf(), '>')
    call mAdd t'.TRANS', b '<buf b>'
    call out 'out eins'
    do lx=1 by 1 while in(var)
        call out lx 'in()' m.var
        end
    call out 'in()' (lx-1) 'reads vv' vv
    call jOpen b, '>'
    call jWrite b, 'buf line one'
    call jClose b
    call mAdd m.b.stem, 'buf line two', 'buf line three'
    call jWrite b, 'buf line four'
    call jClose b
    call jOpen b, m.j.cRead
    do while (jRead(b, line))
        call out 'line' m.line
        end
    call jWrite b, 'buf line five while reading'
    call jClose b
    call tstEnd t
    return
endProcedure tstJ

tstJ2: procedure expose m.
/*
$=/tstJ2/
    ### start tst tstJ2 ###############################################
    class1 <Tst?1 class> <Tst?1 name>
    class2 <Tst?1 class> <Tst?1 name>
    class3 <Tst?1 class> <Tst?1 name>
    b read EINS feld eins, ZWEI feld zwei, DREI feld drei
    b read EINS feld eins, ZWEI feld zwei 2, DREI feld drei
    c read EINS feld eins, ZWEI feld zwei, DREI drei cat 1
    tstR: @tstWriteoV3 isA :<Tst?1 name>
    tstR:  .EINS = feld eins
    tstR:  .ZWEI = feld zwei
    tstR:  .DREI = drei cat 1
    c read EINS feld eins, ZWEI feld zwei 2, DREI drei cat 2
    tstR: @tstWriteoV4 isA :<Tst?1 name>
    tstR:  .EINS = feld eins
    tstR:  .ZWEI = feld zwei 2
    tstR:  .DREI = drei cat 2
$/tstJ2/ */

    call tst t, "tstJ2"
    ty = classNew('n* Tst u f EINS v, f ZWEI v, f DREI v')
    call mAdd t'.TRANS', ty '<Tst?1 class>'
    call mAdd t'.TRANS', m.ty.name '<Tst?1 name>'
    call tstOut t, 'class1' ty m.ty.name
    ty = classNew('n* Tst u f EINS v, f ZWEI v, f DREI v')
    call tstOut t, 'class2' ty m.ty.name
    ty = classNew('n* Tst u f EINS v, f ZWEI v, f DREI v')
    call tstOut t, 'class3' ty m.ty.name
    call oMutate qq, ty
    m.qq.eins = 'feld eins'
    m.qq.zwei = 'feld zwei'
    m.qq.drei = 'feld drei'
    b = jBuf()
    call jOpen b, '>'
    call jWriteO b, oCopy(qq)
    m.qq.zwei = 'feld zwei 2'
    call jWriteO b, qq
    call jOpen jClose(b), m.j.cRead
    c = jOpen(jBuf(), '>')
    do xx=1 while assNN('res', jReadO(b))
        call out 'b read EINS' m.res.eins', ZWEI' m.res.zwei,
                                     || ', DREI' m.res.drei
        m.res.drei = 'drei cat' xx
        call jWriteO c, res
        end
    call jOpen jClose(c), m.j.cRead
    do while assNN('ccc', jReadO(c))
        call out 'c read EINS' m.ccc.eins', ZWEI' m.ccc.zwei,
                                     || ', DREI' m.ccc.drei
        call outO ccc
        end
    call tstEnd t
    return
endProcedure tstJ2

tstCat: procedure expose m.
/*
$=/tstCat/
    ### start tst tstCat ##############################################
    catRead 1 line 1
    catRead 2 line 2
    catRead 3 line 3
    appRead 1 line 1
    appRead 2 line 2
    appRead 3 line 3
    appRead 4 append 4
    appRead 5 append 5
$/tstCat/ */
    call catIni
    call tst t, "tstCat"
    i = cat(jBuf('line 1', 'line 2'), jBuf('line 3'))
    call jOpen i, m.j.cRead
    do lx=1 by 1 while jRead(i, v)
        call tstOut t, 'catRead' lx m.v
        end
    call jOpen jClose(i), m.j.cApp
    call jWrite i, 'append 4'
    call jWrite i, 'append 5'
    call jOpen jClose(i), m.j.cRead
    do lx=1 by 1 while jRead(i, v)
        call tstOut t, 'appRead' lx m.v
        end
    call tstEnd t
    return
endProcedure tstCat

tstEnv: procedure expose m.
    call pipeIni
/*
$=/tstEnv/
    ### start tst tstEnv ##############################################
    before pipeBeLa
    after pipeEnd
    *** err: jWrite(<jBuf c>, write nach pop) but not opened w
    #jIn 1# tst in line 1 eins ,
    #jIn 2# tst in line 2 zwei ;   .
    #jIn 3# tst in line 3 drei .schluss..
    #jIn eof 4#
    before writeNow 2 c --> std
    before writeNow 1 b --> c
    b line eins
    b zwei |
    nach writeNow 1 b --> c
    add nach pop
    after push c only
    tst in line 1 eins ,
    tst in line 2 zwei ;   .
    tst in line 3 drei .schluss..
    nach writeNow 2 c --> std
    *** err: jWrite(<jBuf c>, ) but not opened w
$/tstEnv/ */

    call tst t, "tstEnv"
    c = jBuf()
    call mAdd t'.TRANS', c '<jBuf c>'
    call out 'before pipeBeLa'
    b = jBuf("b line eins", "b zwei |")
    call pipe '+Ff', c, b
    call out 'before writeNow 1 b --> c'
    call pipeWriteNow
    call out 'nach writeNow 1 b --> c'
    call pipe '-'
    call out 'after pipeEnd'
    call jWrite c, 'write nach pop'
    call mAdd c'.BUF', 'add nach pop'
    call pipe '+A', c
    call out 'after push c only'
    call pipeWriteNow
    call pipe '-'
    call pipe '+f', , c
    call out 'before writeNow 2 c --> std'
    call pipeWriteNow
    call out 'nach writeNow 2 c --> std'
    call pipe '-'
    call jWrite c
    call tstEnd t
    return
endProcedure tstEnv

tstEnvCat: procedure expose m.
    call pipeIni
/*
$=/tstEnvCat/
    ### start tst tstEnvCat ###########################################
    c1 contents
    c1 line eins |
    before writeNow 1 b* --> c*
    b1 line eins|
    b2 line eins
    b2 zwei |
    c2 line eins |
    after writeNow 1 b* --> c*
    c2 contents
    c2 line eins |
$/tstEnvCat/ */

    call tst t, "tstEnvCat"

    b0= jBuf()
    b0= jBuf()
    b1= jBuf("b1 line eins|")
    b2 = jBuf("b2 line eins", "b2 zwei |")
    c1 = jBuf("c1 line eins |")
    c2 = jBuf("c2 line eins |")
    call pipe '+Af', c1, b0, b1, b2, c2
    call out 'before writeNow 1 b* --> c*'
    call pipeWriteNow
    call out 'after writeNow 1 b* --> c*'
    call pipe '-'
    call out 'c1 contents'
    call pipe '+f' , , c1
    call pipeWriteNow
    call pipe '-'
    call pipe '+f' , , c2
    call out 'c2 contents'
    call pipeWriteNow
    call pipe '-'
    call tstEnd t
    return
endProcedure tstEnvCat

tstPipe: procedure expose m.
    call pipeIni
/*
$=/tstPipe/
    ### start tst tstPipe #############################################
    .+0 vor pipeBegin
    #jIn 1# tst in line 1 eins ,
    #jIn 2# tst in line 2 zwei ;   .
    #jIn 3# tst in line 3 drei .schluss..
    #jIn eof 4#
    .+7 nach pipeLast
    ¢7 +6 nach pipe 7!
    ¢7 +2 nach pipe 7!
    ¢7 +4 nach nested pipeLast 7!
    ¢7 (4 +3 nach nested pipeBegin 4) 7!
    ¢7 (4 (3 +1 nach pipeBegin 3) 4) 7!
    ¢7 (4 (3 tst in line 1 eins , 3) 4) 7!
    ¢7 (4 (3 tst in line 2 zwei ;    3) 4) 7!
    ¢7 (4 (3 tst in line 3 drei .schluss. 3) 4) 7!
    ¢7 (4 (3 +1 nach writeNow vor pipe 3) 4) 7!
    ¢7 (4 +3 nach preSuf vor nested pipeLast 4) 7!
    ¢7 +4 nach preSuf vor nested pipeEnd 7!
    ¢7 +5 nach nested pipeEnd vor pipe 7!
    ¢7 +6 nach writeNow vor pipeLast 7!
    .+7 nach writeNow vor pipeEnd
    .+8 nach pipeEnd
$/tstPipe/ */

    say 'x0' m.pipe.0
    call tst t, 'tstPipe'
    call out '+0 vor pipeBegin'
    say 'x1' m.pipe.0
    call pipe '+N'
    call out '+1 nach pipeBegin'
    call pipeWriteNow
    call out '+1 nach writeNow vor pipe'
    call pipe 'N|'
    call out '+2 nach pipe'
    call pipe '+N'
    call out '+3 nach nested pipeBegin'
    call pipePreSuf '(3 ', ' 3)'
    call out '+3 nach preSuf vor nested pipeLast'
    call pipe 'P|'
    call out '+4 nach nested pipeLast'
    call pipePreSuf '(4 ', ' 4)'
    call out '+4 nach preSuf vor nested pipeEnd'
    call pipe '-'
    call out '+5 nach nested pipeEnd vor pipe'
    call pipe 'N|'
    call out '+6 nach pipe'
    call pipeWriteNow
    say 'out +6 nach writeNow vor pipeLast'
    call out '+6 nach writeNow vor pipeLast'
    call pipe 'P|'
    call out '+7 nach pipeLast'
    call pipePreSuf '¢7 ', ' 7!'
    call out '+7 nach writeNow vor pipeEnd'
    call pipe '-'
    call out '+8 nach pipeEnd'
    say 'xx' m.pipe.0
    call tstEnd t
    return
endProcedure tstPipe

tstPipeS: procedure expose m.
/*
$=/tstPipeS/
    ### start tst tstPipeS ############################################
    eine einzige zeile
    nach all einzige Zeile
    select strip(creator) cr, strip(name) tb,
    (row_number()over())*(row_number()over()) rr
    from sysibm.sysTables
$/tstPipeS/
*/
    call tst t, "tstPipeS"
    call pipe '+s',, 'eine einzige zeile'
    call pipeWriteAll
    call out 'nach all einzige Zeile'
    call pipe 's',,
              , "select strip(creator) cr, strip(name) tb," ,
              ,      "(row_number()over())*(row_number()over()) rr" ,
              ,      "from sysibm.sysTables"
    call pipeWriteAll
    call pipe '-'
    call tstEnd t
    return
endProcedure tstPipeS

tstEnvVars: procedure expose m.
    call pipeIni
/*
$=/tstEnvVars/
    ### start tst tstEnvVars ##########################################
    put v1 value eins
    v1 hasKey 1 get value eins
    v2 hasKey 0
    one to theBur
    two to theBuf
$/tstEnvVars/ */
    call tst t, "tstEnvVars"
    call envRemove 'v2'
    m.tst.adr1 = 'value eins'
    put1 = envPutO('v1', oMutate(tst'.'adr1, m.class.classV))
    call tstOut t, 'put v1' m.put1
    call tstOut t, 'v1 hasKey' envHasKey('v1') 'get' envGet('v1')
    call tstOut t, 'v2 hasKey' envHasKey('v2')
    if 0 then
        call tstOut t, 'v2 get'    envGet('v2')
    call pipe '+F' , envGetO('theBuf', '-b')
    call out 'one to theBur'
    call out 'two to theBuf'
    call pipe '-'
    call pipe '+f',, envGetO('theBuf')
    call pipeWriteNow
    call pipe '-'
    call tstEnd t
    return
endProcedure tstEnvVars

tstEnvWith: procedure expose m.
/*
$=/tstEW2/
    ### start tst tstEW2 ##############################################
    tstK1|            get1 w
    tstK1%f1          get1.f1 v
    tstK1.f2          get1.f2 w
    tstK1%F3          get1.f3 v
    ttstK1.F3.FEINS   get1.f3.fEins v
    tstK1%F3%FZWEI    get1.f3.fZwei w
    tstK1.F3.FDREI    !get1.f3.fDrei w
    tstK1%F3%FDREI|   get1.f3.fDrei w
    tstK1.F3.1        get1.f3.1 w
    tstK1%F3%2        TSTEW1
    tstK1.F3.2|F1     get1.f1 v
    tstK1%F3%2|F3.2|F2 get1.f2 w
    *** err: undefined variable F1 in envGet(F1)
    F1          0
    F1          get1.f1 v
    f2          get1.f2 w
    F3          get1.f3 v
    F3.FEINS    get1.f3.fEins v
    F3.FZWEI    get1.f3.fZwei w
    F3%FDREI    !get1.f3.fDrei w
    F3%FDREI|   get1.f3.fDrei w
    F3%1        get1.f3.1 w
    pu1 F1      get1.f1 v
    pu2 F1      get2.f1 v
    po-2 F1     get1.f1 v
    *** err: undefined variable F1 in envGet(F1)
    po-1 F1     0
$/tstEW2/  */
    call pipeIni
    c0 = classNew('n? TstEW0 u f FEINS v,f FZWEI w, f FDREI r,v,s r')
    cl = classNew('n? TstEW u r TstEW0, f F1 v, f F2 r, f F3 TstEW0')
    call oMutate tstEW1, cl
    m.tstEW1    = s2o('get1 w')
    m.tstEW1.f1 = 'get1.f1 v'
    m.tstEW1.f2 = s2o('get1.f2 w')
    m.tstEW1.f3 = 'get1.f3 v'
    m.tstEW1.f3.fEins = 'get1.f3.fEins v'
    m.tstEW1.f3.fZwei = s2o('get1.f3.fZwei w')
    m.tstEW1.f3.fDrei = s2o('get1.f3.fDrei w')
    m.tstEW1.f3.0 = 3
    m.tstEW1.f3.1 = s2o('get1.f3.1 w')
    m.tstEW1.f3.2 = tstEW1
    m.tstEW1.f3.3 = s2o('get1.f3.3 w')
    call oMutate tstEW2, cl
    m.tstEW2    = s2o('get2 w')
    m.tstEW2.f1 = 'get2.f1 v'
    m.tstEW2.f2 = s2o('get2.f2 w')
    call envPutO 'tstK1', tstEW1

    call tst t, 'tstEW2'
    call tstOut t, 'tstK1|           ' envGet('tstK1|')
    call tstOut t, 'tstK1%f1         ' envGet('tstK1%F1')
    call tstOut t, 'tstK1.f2         ' envGet('tstK1.F2')
    call tstOut t, 'tstK1%F3         ' envGet('tstK1%F3|')
    call tstOut t, 'ttstK1.F3.FEINS  ' envGet('tstK1.F3.FEINS')
    call tstOut t, 'tstK1%F3%FZWEI   ' envGet('tstK1%F3%FZWEI')
    call tstOut t, 'tstK1.F3.FDREI   ' envGetO('tstK1.F3.FDREI')
    call tstOut t, 'tstK1%F3%FDREI|  ' envGet('tstK1%F3%FDREI')
    call tstOut t, 'tstK1.F3.1       ' envGet('tstK1.F3.1')
    call tstOut t, 'tstK1%F3%2       ' envGetO('tstK1%F3%2')
    call tstOut t, 'tstK1.F3.2|F1    ' envGet('tstK1.F3.2|F1')
    call tstOut t, 'tstK1%F3%2|F3.2|F2' ,
                                envGet('tstK1%F3%2|F3%2|F2')
    call tstOut t, 'F1         ' envGet('F1')
    call envPushWith tstEW1
    call tstOut t, 'F1         ' envGet('F1')
    call tstOut t, 'f2         ' envGet('F2')
    call tstOut t, 'F3         ' envGet('F3|')
    call tstOut t, 'F3.FEINS   ' envGet('F3.FEINS')
    call tstOut t, 'F3.FZWEI   ' envGet('F3.FZWEI')
    call tstOut t, 'F3%FDREI   ' envGetO('F3%FDREI')
    call tstOut t, 'F3%FDREI|  ' envGet('F3%FDREI|')
    call tstOut t, 'F3%1       ' envGet('F3%1')
    call tstOut t, 'pu1 F1     ' envGet('F1')
    call envPushWith tstEW2
    call tstOut t, 'pu2 F1     ' envGet('F1')
    call envPopWith
    call tstOut t, 'po-2 F1    ' envGet('F1')

    call envPopWith
    call tstOut t, 'po-1 F1    ' envGet('F1')
    call tstEnd t
/*
$=/tstEW3/
    ### start tst tstEW3 ##############################################
    .          s c3.F1          = v(c3.f1)
    *** err: no reference @ <c3>.F1 class CLASS.1 in envGet(c3.F1.FEINS+
    )
    .          s c3.F1.FEINS    = 0
    .          s c3.F3.FEINS    = .
    .          s c3.F3.FEINS    = val(c3.F3.FEINS)
    *** err: no field FEINS @ <c3> class TstEW in envGet(c3.FEINS)
    .          s c3.FEINS       = 0
    *** err: null @ <c3> class TstEW in envGet(c3|FEINS)
    .          s c3|FEINS       = 0
    aft Put   s c3|FEINS       = val(c3|FEINS)
    Push c3   s F3.FEINS       = val(c3.F3.FEINS)
    *** err: no field FEINS aftPuP= pushPut(F3 @ <c3>.F3 class TstEW0 i+
    n envGet(F3.FEINS aftPuP= pushPut(F3.FEINS))
    .          s F3.FEINS aftPuP= 0
    push c4   s F1             = v(c4.f1)
    put f2    s F2             = put(f2)
    *** err: no field F222 in class TstEW in EnvPut(F222, f222 stopped,+
    . 1)
    put ..    s F3.FEINS       = put(f3.fEins)
    popW c4   s F1             = v(c3.f1)
    *** err: undefined variable F1 in envGet(F1)
    popW c3   s F1             = 0
    .          s F222           = f222 pop stop
$/tstEW3/
*/
    call tst t, 'tstEW3'
    c3 = oNew('TstEW')
    call mAdd t.trans, c3 '<c3>'
    m.c3.f1 = 'v(c3.f1)'
    call envPutO 'c3', c3
    call tstEnvSG , 'c3.F1'
    call tstEnvSG , 'c3.F1.FEINS'
    call tstEnvSG , 'c3.F3.FEINS'
    call envPut 'c3.F3.FEINS', 'val(c3.F3.FEINS)'
    call tstEnvSG , 'c3.F3.FEINS'
    call tstEnvSG , 'c3.FEINS'
    call tstEnvSG , 'c3|FEINS'
    call envPut 'c3|FEINS', 'val(c3|FEINS)'
    call tstEnvSG 'aft Put', 'c3|FEINS'
    call envPushWith c3
    call tstEnvSG 'Push c3', 'F3.FEINS'
    call envPut 'F3.FEINS', 'pushPut(F3.FEINS)'
    call tstEnvSG , 'F3.FEINS aftPuP=' envGet('F3.FEINS')

    c4 = oNew('TstEW')
    call mAdd t.trans, c4 '<c4>'
    m.c4.f1 = 'v(c4.f1)'
    call envPut f222, 'f222 no stop'
    call envPushWith c4
    call tstEnvSG 'push c4', f1
    call envPut f2, 'put(f2)'
    call tstEnvSG 'put f2', f2
    call envPut f222, 'f222 stopped', 1
    call envPut f3.fEins, 'put(f3.fEins)'
    call tstEnvSG 'put .. ', f3.fEins
    call envPopWith
    call tstEnvSG 'popW c4', f1
    call envPopWith
    call envPut f222, 'f222 pop stop'
    call tstEnvSG 'popW c3', f1
    call tstEnvSG          , f222
    call tstEnd t

/*
$=/tstEW4/
    ### start tst tstEW4 ##############################################
    tstO4 S.0 0 R.0 0 class TstEW4
    *** err: no field FZWEI in class  in EnvPut(FZWEI, v 1.fZwei, 1)
    1 fEins   s FEINS          = v 1.fEins
    1 fZwei   s FZWEI          = .
    2 fEins   s FEINS          = .
    2 fZwei   s FZWEI          = v 2.fZwei
    v 1.fEins .# 1 vor
    v 1.fEins .# 2 nach withNext e
    *** err: undefined variable FEINS in envGet(FEINS)
    ? fEins   s FEINS          = 0
    1 fEins   s FEINS          = v 1|fEins
    1 fZwei   s FZWEI          = .
    2 fEins   s FEINS          = .
    2 fZwei   s FZWEI          = v 2.fZwei
    v 1|fEins .# 2
$/tstEW4/
*/
    c4 = classNew('n? TstEW4 u f S s TstEW0, f R s r TstEW0')
    o4 = oClear(oMutate('tstO4', c4))
    call tst t, 'tstEW4'
    call tstout t, o4 'S.0' m.o4.s.0 'R.0' m.o4.r.0 ,
        'class' className(objClass(o4))
    call envPushWith o4'.S', m.c4.f2c.s, 'asM'
    call envPut fZwei, 'v 1.fZwei', 1
    call envWithNext 'b'
    call envPut feins, 'v 1.fEins', 1
    call tstEnvSG '1 fEins ', fEins
    call tstEnvSG '1 fZwei ', fZwei
    m.o4.s.2.feins = 'vorher'
    m.o4.s.2.fZwei = s2o('vorher')
    call envWithNext
    call envPut fZwei, 'v 2.fZwei', 1
    call tstEnvSG '2 fEins ', fEins
    call tstEnvSG '2 fZwei ', fZwei
    call tstOut t, m.o4.s.1.fEins '.#' m.o4.s.0 'vor'
    call envWithNext 'e'
    call tstOut t, m.o4.s.1.fEins '.#' m.o4.s.0 'nach withNext e'
    call envPopWith
    call tstEnvSG '? fEins ', fEins
    call envPushWith o4'.R', m.c4.f2c.r, 'asM'
    call envWithNext 'b'
    call envPut fEins, 'v 1|fEins', 1
    call tstEnvSG '1 fEins ', fEins
    call tstEnvSG '1 fZwei ', fZwei
    call envWithNext
    call envPut fZwei, 'v 2.fZwei', 1
    call tstEnvSG '2 fEins ', fEins
    call tstEnvSG '2 fZwei ', fZwei
    call envWithNext 'e'
    call envPopWith
    o41r = m.o4.r.1
    call tstOut t, m.o41r.fEins '.#' m.o4.r.0
    call tstEnd t

    return
endProcedure tstEnvWith

tstEnvSG: procedure expose m. t
parse arg txt, nm
    call tstOut t, left(txt,10)'s' left(nm, 15)'=' envGet(nm)
    return

tstPipeLazy: procedure expose m.
    call pipeIni
/*
$=/tstPipeLazy/
    ### start tst tstPipeLazy #########################################
    a1 vor pipeBegin loop lazy 0 writeNow *** <class TstPipeLazyBuf>
    bufOpen <
    bufClose
    #jIn 2# tst in line 2 zwei ;   .
    #jIn 3# tst in line 3 drei .schluss..
    #jIn eof 4#
    a5 vor 2 writeNow in inIx 4
    a2 vor writeNow jBuf
    jBuf line 1
    jBuf line 2
    a3 vor writeNow in inIx 1
    tst in line 2 zwei ;   .
    tst in line 3 drei .schluss..
    a4 vor barLast inIx 4
    a6 vor barEnd inIx 4
    a7 nach barEnd lazy 0 writeNow ***
    b1 vor barBegin lazy 0 writeNow *** <class TstPipeLazyRdr>
    RdrOpen <
    #jIn 3# tst in line 3 drei .schluss..
    #jIn eof 4#
    rdrClose
    b4 vor writeNow
    b2 vor writeNow rdr inIx 2
    jRead lazyRdr
    tst in line 3 drei .schluss..
    jRead lazyRdr
    b3 vor barLast inIx 4
    b5 vor barEnd inIx 4
    b6 nach barEnd lazy 0 writeNow ***
    a1 vor pipeBegin loop lazy 1 writeAll *** +
        .<class TstPipeLazyBuf>
    a5 vor 2 writeAll in inIx 0
    a2 vor writeAll jBuf
    bufOpen <
    jBuf line 1
    jBuf line 2
    bufClose
    a3 vor writeAll in inIx 0
    #jIn 1# tst in line 1 eins ,
    tst in line 1 eins ,
    #jIn 2# tst in line 2 zwei ;   .
    tst in line 2 zwei ;   .
    #jIn 3# tst in line 3 drei .schluss..
    tst in line 3 drei .schluss..
    #jIn eof 4#
    a4 vor barLast inIx 0
    a6 vor barEnd inIx 4
    a7 nach barEnd lazy 1 writeAll ***
    b1 vor barBegin lazy 1 writeAll *** <class TstPipeLazyRdr>
    b4 vor writeAll
    b2 vor writeAll rdr inIx 1
    RdrOpen <
    jRead lazyRdr
    #jIn 2# tst in line 2 zwei ;   .
    tst in line 2 zwei ;   .
    jRead lazyRdr
    #jIn 3# tst in line 3 drei .schluss..
    tst in line 3 drei .schluss..
    jRead lazyRdr
    #jIn eof 4#
    rdrClose
    b3 vor barLast inIx 1
    b5 vor barEnd inIx 4
    b6 nach barEnd lazy 1 writeAll ***
$/tstPipeLazy/ */
    call tst t, "tstPipeLazy"
    do lz=0 to 1
        if lz then
            w = 'writeAll'
        else
            w = 'writeNow'
        m.t.inIx = 1-lz
        ty = class4Name('TstPipeLazyBuf', '')
        if ty == '' then do
            ty = classNew('n TstPipeLazyBuf u JRWDeleg', 'm',
            , 'jOpen call tstOut "T", "bufOpen" opt;',
              'call jOpen m.m.deleg, opt',
            , 'jClose call tstOut "T", "bufClose";',
              'call jClose m.m.deleg')
            end
        if \ lz then
             call mAdd t'.TRANS', ty '<class TstPipeLazyBuf>'
        call out 'a1 vor pipeBegin loop lazy' lz w '***' ty
        call pipe '+N'
        call out 'a2 vor' w 'jBuf'
        b = oNew('TstPipeLazyBuf', jBuf('jBuf line 1','jBuf line 2'))
        interpret 'call pipe'w 'b'
        call out 'a3 vor' w 'in inIx' m.t.inIx
        interpret 'call pipe'w
        call out 'a4 vor barLast inIx' m.t.inIx
        call pipe 'P|'
        call out 'a5 vor 2' w 'in inIx' m.t.inIx
        interpret 'call pipe'w
        call out 'a6 vor barEnd inIx' m.t.inIx
        call pipe '-'
        call out 'a7 nach barEnd lazy' lz w '***'

        ty = class4Name('TstPipeLazyRdr', '')
        if ty == '' then
            ty = classNew('n TstPipeLazyRdr u JRW', 'm',
            , 'jOpen call tstOut "T", "RdrOpen" opt',
            , 'jRead call out "jRead lazyRdr";' ,
                  'return jRead(m.m.rdr, var);',
            , 'jClose call tstOut "T",  "rdrClose";')
        if \ lz then
             call mAdd t'.TRANS', ty '<class TstPipeLazyRdr>'

        r = oNew('TstPipeLazyRdr')
            m.r.rdr = m.j.in
        if lz then
            call mAdd t'.TRANS', r '<lazyRdr>'
     m.t.inIx = 2-lz
     call out 'b1 vor barBegin lazy' lz w '***' ty
     call pipe '+N'
     call out 'b2 vor' w 'rdr inIx' m.t.inIx
     interpret 'call pipe'w 'r'
     call out 'b3 vor barLast inIx' m.t.inIx
     call pipe 'P|'
        call out 'b4 vor' w
        interpret 'call pipe'w
        call out 'b5 vor barEnd inIx' m.t.inIx
        call pipe '-'
     call out 'b6 nach barEnd lazy' lz w '***'
        end
    call tstEnd t
    return
endProcedure tstPipeLazy

tstEnvClass: procedure expose m.
    call pipeIni
/*
$=/tstEnvClass/
    ### start tst tstEnvClass #########################################
    a0 vor pipeBegin loop lazy 0 writeNow *** TY
    #jIn 2# tst in line 2 zwei ;   .
    #jIn 3# tst in line 3 drei .schluss..
    #jIn eof 4#
    a5 vor writeNow
    a1 vor jBuf()
    a2 vor writeNow b
    tstR: @<o20 of TstEnvClass10> isA :TstEnvClass10
    tstR:  .f11 = .
    tstR:  .F12 = value F12 of o1 <o20 of TstEnvClass10>
    tstR:  .f13 = .
    WriteO o2
    tstR: @<oc0 of TstEnvClass20> isA :TstEnvClass20 = valueO2Lazy0
    tstR:  .f24 = .
    tstR:  .F25 = value F25 of o20 <o20 of TstEnvClass20>
    a3 vor writeNow
    tst in line 2 zwei ;   .
    tst in line 3 drei .schluss..
    a4 vor barLast inIx 4
    a6 vor barEnd
    a7 nach barEnd lazy 0 writeNow ***
    a0 vor pipeBegin loop lazy 1 writeAll *** TY
    a5 vor writeAll
    a1 vor jBuf()
    a2 vor writeAll b
    tstR: @<o21 of TstEnvClass10> isA :TstEnvClass10
    tstR:  .f11 = .
    tstR:  .F12 = value F12 of o1 <o21 of TstEnvClass10>
    tstR:  .f13 = .
    WriteO o2
    tstR: @<oc1 of TstEnvClass20> isA :TstEnvClass20 = valueO2Lazy1
    tstR:  .f24 = .
    tstR:  .F25 = value F25 of o21 <o21 of TstEnvClass20>
    a3 vor writeAll
    #jIn 1# tst in line 1 eins ,
    tst in line 1 eins ,
    #jIn 2# tst in line 2 zwei ;   .
    tst in line 2 zwei ;   .
    #jIn 3# tst in line 3 drei .schluss..
    tst in line 3 drei .schluss..
    #jIn eof 4#
    a4 vor barLast inIx 0
    a6 vor barEnd
    a7 nach barEnd lazy 1 writeAll ***
$/tstEnvClass/ */

    call tst t, "tstEnvClass"
    t10 = classNew('n? TstEnvClass10 u f f11 v, f F12 v, f f13 v')
    t20 = classNew('n? TstEnvClass20 u v, f f24 v, f F25 v')
    do lz=0 to 1
        if lz then
            w = 'writeAll'
        else
            w = 'writeNow'
        m.t.inIx = 1-lz
        call out 'a0 vor pipeBegin loop lazy' lz w '***' ty
        call pipe '+N'
        call out 'a1 vor jBuf()'
        b = jOpen(jBuf(), m.j.cWri)
        o1 = oNew('TstEnvClass10')
        m.o1.F12 = 'value F12 of o1' o1
        call mAdd t'.TRANS', o1 '<o2'lz 'of TstEnvClass10>'
        call jWriteO b, o1
        call jWrite b, 'WriteO o2'
        o2 = oNew('TstEnvClass20')
        m.o2 = 'valueO2Lazy'lz
        m.o2.F25 = 'value F25 of o2'lz o2
        oc = oCopy(oCopy(o2))
        call mAdd t'.TRANS', o2 '<o2'lz 'of TstEnvClass20>'
        call mAdd t'.TRANS', oc '<oc'lz 'of TstEnvClass20>'
        call jWriteO b, oc
        call out 'a2 vor' w 'b'
        interpret 'call pipe'w jClose(b)
        call out 'a3 vor' w
        interpret 'call pipe'w
        call out 'a4 vor barLast inIx' m.t.inIx
        call pipe 'P|'
        call out 'a5 vor' w
        interpret 'call pipe'w
        call out 'a6 vor barEnd'
        call pipe '-'
        call out 'a7 nach barEnd lazy' lz w '***'
        end
    call tstEnd t
    m.t.trans.0 = 0
    return
endProcedure tstEnvClass

tstFile: procedure expose m.
    call catIni
/*
$=/tstFile/
    ### start tst tstFile #############################################
    write read 0 last 10 vor anfang
    write read 1 last 80  links1 1   und rechts |  ..
    write read 2 last 80 liinks2 2   und rechts |  ..
    write read 5 last 80 links5 5 rechts5
    write read 99 last 80 links99 99 rechts
    write read 100 last 80 links100 100 rechts
    write read 101 last 80 links101 101 rechts
    write read 999 last 80 links999 999 rechts
    write read 1000 last 80 links1000 1000 rechts
    write read 1001 last 80 links1001 1001 rechts
    write read 2109 last 80 links2109 2109 rechts
    out > eins 1                                                       +
    .             .
    out > eins 2 schluss.                                              +
    .             .
    buf eins
    buf zwei
    buf drei
    out > zwei mit einer einzigen Zeile                                +
    .             .
    . links1 1   und rechts |  .                                       +
    .              .
$/tstFile/ */
    call tst t, "tstFile"
    pds = tstFilename('lib', 'r')
    call tstFileWr pds, 0, ' links0', '  und rechts |  .  '
    call tstFileWr pds, 1, ' links1', '  und rechts |  .  '
    call tstFileWr pds, 2, 'liinks2', '  und rechts |  .  '
    call tstFileWr pds, 5, 'links5', 'rechts5'
    call tstFileWr pds, 99, 'links99', 'rechts'
    call tstFileWr pds, 100, 'links100', 'rechts'
    call tstFileWr pds, 101, 'links101', 'rechts'
    call tstFileWr pds, 999, 'links999', 'rechts'
    call tstFileWr pds, 1000, 'links1000', 'rechts'
    call tstFileWr pds, 1001, 'links1001', 'rechts'
    call tstFileWr pds, 2109, 'links2109', 'rechts'
    pd2 = tstFilename('li2', 'r')
    call pipeIni
    call pipe '+F', s2o(tstPdsMbr(pd2, 'eins'))
    call out tstFB('out > eins 1') /* simulate fixBlock on linux */
    call out tstFB('out > eins 2 schluss.')
    call pipe '-'
    call pipe '+F', s2o(tstPdsMbr(pd2, 'zwei'))
    call out tstFB('out > zwei mit einer einzigen Zeile')
    call pipe '-'
    b = jBuf("buf eins", "buf zwei", "buf drei")
    call pipe '+f', , s2o(tstPdsMbr(pd2, 'eins')), b,
                    ,jBuf(),
                    ,s2o(tstPdsMbr(pd2, 'zwei')),
                    ,s2o(tstPdsMbr(pds, 'wr0')),
                    ,s2o(tstPdsMbr(pds, 'wr1'))
    call pipeWriteNow
    call pipe '-'
    call tstEnd t
    return
endProcedure tstFile

/*--- simulate fixBlock 80 on linux ---------------------------------*/
tstFB: procedure expose m.
parse arg line, recL
    if m.err.os \== 'LINUX' then
        return line
    else if recL == '' then
        return left(line, 80)
    else
        return left(line, recL)
endProcedure tstFB

tstPdsMbr: procedure expose m.
parse arg pds, mbr
    if m.err.os = 'TSO' then
        return pds'('mbr') ::F'
    if m.err.os = 'LINUX' then
        return pds'.'mbr
    call err 'tstPdsMbr implement os' m.err.os
endProcedure tstPdsMbr

tstFileWR: procedure expose m.
parse arg dsn, num, le, ri
    io = file(tstPdsMbr(dsn, 'wr'num))
    call jOpen io, m.j.cWri
    do x = 1 to num /* simulate fixBlock 80 on LINUX*/
        call jWrite io, tstFB(le x ri)
        end
    call jClose io
    if num > 100 then
        call jReset io, tstPdsMbr(dsn, 'wr'num)

    call jOpen io, m.j.cRead
    m.vv = 'vor anfang'
    do x = 1 to num
        if \ jRead(io, vv) then
            call err x 'not jRead'
        else if m.vv <> le x ri then
            call err x 'read mismatch' m.vv
        end
    if jRead(io, vv) then
        call err x 'jRead but should be eof 1'
    if jRead(io, vv) then
        call err x'+1 jjRead but should be eof 2'
    call jClose io
    call tstOut t, 'write read' num 'last' length(m.vv) strip(m.vv,'t')
    return
endProcedure tstFileRW

tstFileList: procedure expose m.
    call catIni
/*
$=/tstFileList/
    ### start tst tstFileList #########################################
    empty dir
    filled dir
    <<pref 2 List>>eins
    <<pref 2 List>>zwei
    <<pref 2 List>>drei
    <<pref 2 List>>vier
    filled dir recursive
    <<pref 2 List>>eins
    <<pref 2 List>>zwei
    <<pref 2 List>>drei
    <<pref 2 List>>vier
    <<pref 1 vier>>eins
    <<pref 1 vier>>zwei
    <<pref 1 vier>>drei
$/tstFileList/ */
/*
$=/tstFileListTSO/
    ### start tst tstFileListTSO ######################################
    empty dir
    filled dir
    <<pref 2 LIST>>DREI
    <<pref 2 LIST>>EINS
    <<pref 2 LIST>>ZWEI
    filled dir recursive
    <<pref 2 LIST>>DREI
    <<pref 2 LIST>>EINS
    <<pref 1 VIER>>DREI
    <<pref 1 VIER>>EINS
    <<pref 1 VIER>>ZWEI
    <<pref 2 LIST>>ZWEI
$/tstFileListTSO/ */
    if m.err.os = 'TSO' then
        call tst t, "tstFileListTSO"
    else
        call tst t, "tstFileList"
    fi = file(tstFileName('FileList', 'r'))
    call fileMkDir fi
    fl = fileList(fi)
    call tstOut t, 'empty dir'
    call jWriteNow t, fl
    call tstFileListMake t, fi, 2
    call tstOut t, 'filled dir'
    call jWriteNow t, fl
    call tstOut t, 'filled dir recursive'
    call jWriteNow t, fileList(fi, 'r')
    call tstEnd t
    return
endProcedure tstFileList

tstFileListMake: procedure expose m.
parse arg t, fi, lev
    if \ fileIsDir(fi) then
        call fileMkDir fi
    call mAdd t'.TRANS', filePath(fi) || m.file.sep ,
                '<<pref' lev right(filePath(fi),4)'>>'
    call jCat fileChild(fi, 'eins','::F'),jBuf('zeile eins','eins' lev)
    call jCat fileChild(fi, 'zwei','::F'),jBuf('zeile zwei','zwei' lev)
    call jCat fileChild(fi, 'drei','::F'),jBuf('zeile drei','drei' lev)
    if lev > 1 then
        call tstFileListMake t, fileChild(fi, 'vier'), lev-1
    return
endProcedure tstFileListMake

tstF: procedure expose m.
/*
$=/tstF/
    ### start tst tstF ################################################
    f(1\s23%s345%s67\%8, eins,  zwei ) =1 23eins345 zwei 67%8;
    f(1\S23%s345%S67\%8, eins,  zwei ) =1\S23eins345zwei67%8;
    f(1\s23%s345%s67\%8, eins,  zwei ) =1 23eins345 zwei 67%8;
    f(1\s23%s345%S67\%8, eins,  zwei ) =1 23eins345zwei67%8;
    f(1%S2%s3@2%S4@%s5, eins,  zwei ) =1eins2 zwei 3zwei4 zwei 5;
    f(1%-2C2%3C3@2%3.2C4, eins,  zwei ) =1ei2ei 3zwe4;
    f(1@F1%s2@f2%s3@F3%s4, eins,  zwei ) =1fEins2fZwei3fDrei4;
    tstF2 _ %-9C @%5i @%8i @%+8i @%-8i -----
    _ 0             0        0       +0 0       .
    _ -1.2         -1       -1       -1 -1      .
    _ 2.34          2        2       +2 2       .
    _ -34.8765    -35      -35      -35 -35     .
    _ 567.91234   568      568     +568 568     .
    _ -8901     -8901    -8901    -8901 -8901   .
    _ 23456     23456    23456   +23456 23456   .
    _ -789012   *****  -789012  -789012 -789012 .
    _ 34e6      ***** 34000000 ******** 34000000
    _ -56e7     ***** ******** ******** ********
    _ 89e8      ***** ******** ******** ********
    _ txtli     txtli    txtli    txtli txtli   .
    _ undEinLan Text? gerText? gerText? undEinLa
    tstF2 _ %-9C @%5.2i @%12.2i @%+12.2i @%-12.2i -----
    _ 0          0.00         0.00        +0.00 0.00        .
    _ -1.2      -1.20        -1.20        -1.20 -1.20       .
    _ 2.34       2.34         2.34        +2.34 2.34        .
    _ -34.8765  *****       -34.88       -34.88 -34.88      .
    _ 567.91234 *****       567.91      +567.91 567.91      .
    _ -8901     *****     -8901.00     -8901.00 -8901.00    .
    _ 23456     *****     23456.00    +23456.00 23456.00    .
    _ -789012   *****   -789012.00   -789012.00 -789012.00  .
    _ 34e6      *****  34000000.00 +34000000.00 34000000.00 .
    _ -56e7     ***** ************ ************ ************
    _ 89e8      ***** ************ ************ ************
    _ txtli     txtli        txtli        txtli txtli       .
    _ undEinLan Text? nLangerText? nLangerText? undEinLanger
    tstF2 _ %-9C @%7e @%8E @%9.2e @%11.3E -----
    _ 0         0.00e00  0.00E00  0.00e+00  0.000E+000
    _ -1.2      -1.2e00 -1.20E00 -1.20e+00 -1.200E+000
    _ 2.34      2.34e00  2.34E00  2.34e+00  2.340E+000
    _ -34.8765  -3.5e01 -3.49E01 -3.49e+01 -3.488E+001
    _ 567.91234 5.68e02  5.68E02  5.68e+02  5.679E+002
    _ -8901     -8.9e03 -8.90E03 -8.90e+03 -8.901E+003
    _ 23456     2.35e04  2.35E04  2.35e+04  2.346E+004
    _ -789012   -7.9e05 -7.89E05 -7.89e+05 -7.890E+005
    _ 34e6      3.40e07  3.40E07  3.40e+07  3.400E+007
    _ -56e7     -5.6e08 -5.60E08 -5.60e+08 -5.600E+008
    _ 89e8      8.90e09  8.90E09  8.90e+09  8.900E+009
    _ txtli     txtli   txtli    txtli     txtli      .
    _ undEinLan undEinL undEinLa undEinLan undEinLange
    _ 8.76e-07  8.76e-7  8.76E-7  8.76e-07  8.760E-007
    _ 5.43e-11  0.05e-9  0.05E-9  5.43e-11  5.430E-011
    _ -8.76e-07 -8.8e-7 -8.76E-7 -8.76e-07 -8.760E-007
    _ -5.43e-11 -0.1e-9 -0.05E-9 -5.43e-11 -5.430E-011
$/tstF/ */
    call tst t, 'tstF'
    call tstF1 '1\s23%s345%s67\%8'
    call tstF1 '1\S23%s345%S67\%8'
    call tstF1 '1\s23%s345%s67\%8'
    call tstF1 '1\s23%s345%S67\%8'
    call tstF1 '1%S2%s3@2%S4@%s5'
    call tstF1 '1%-2C2%3C3@2%3.2C4'
    call tstF1 '1@F1%s2@f2%s3@F3%s4'
    nums = '0 -1.2 2.34 -34.8765 567.91234 -8901 23456' ,
                '-789012 34e6 -56e7 89e8 txtli undEinLangerText?'
    call tstF2 '_ %-9C @%5i @%8i @%+8i @%-8i', nums
    call tstF2 '_ %-9C @%5.2i @%12.2i @%+12.2i @%-12.2i', nums
    num2 = ' 8.76e-07  5.43e-11 -8.76e-07  -5.43e-11'
    call tstF2 '_ %-9C @%7e @%8E @%9.2e @%11.3E', nums num2
    call tstEnd t
    return
endProcedure tstF

tstF1: procedure expose m.
parse arg fmt
    e='eins'
    z=' zwei '
    f2 = 'f2'
    m.e.f1 = 'fEins'
    m.e.f2 = 'fZwei'
    m.e.f3 = 'fDrei'
    call out "f("fmt"," e"," z") ="f(fmt, e, z)";"
    return
endProcedure tstF1

tstF2: procedure expose m.
parse arg fmt, vals
    call out 'tstF2' fmt '-----'
    do vx=1 to words(vals)
        call out f(fmt, word(vals, vx))
        end
    return
endProcedure tstF2

tstFmt: procedure expose m.
    call pipeIni
/*
$=/tstFmt/
    ### start tst tstFmt ##############################################
    =   a2i b3b   d4                       fl5          ex6
    -11 -11 b3    d4-11+d4++++    -111.1000000 -1.11000E-12
    -1  -10 b     d4-10+d4+++            null1        null3
    -    -9 b3b-9 d4-9+d4+++       -11.0000000 -1.11900E-10
    -8+  -8 b3b-  d4-8+d4++        -18.0000000 -1.18000E010
    -7   -7 b3b   d4-7+d4+          -7.0000000 -1.70000E-07
    -    -6 b3    d4-6+d4           -0.1111160 -6.00000E006
    -5+  -5 b     d4-5+d                 null2        null2
    -4   -4 b3b-4 d4-4+         -11114.0000000 -1.11140E008
    -    -3 b3b-  d4-3              -0.1130000 -1.13000E-04
    -2+  -2 b3b   d4-               -0.1200000 -1.20000E001
    -1   -1 b3    d4                -0.1000000 -1.00000E-02
    0     0 b     d                      null1        null1
    1+    1 b3    d4                 0.1000000  1.00000E-02
    2++   2 b3b   d42                0.1200000  1.20000E001
    3     3 b3b3  d43+               0.1130000  1.13000E-04
    4+    4 b3b4+ d44+d          11114.0000000  1.11140E008
    5++   5 b     d45+d4                 null2        null2
    6     6 b3    d46+d4+            0.1111160  1.11116E005
    7+    7 b3b   d47+d4++           0.1111117  7.00000E-08
    8++   8 b3b8  d48+d4+++          8.0000000  1.80000E009
    9     9 b3b9+ d49+d4++++         0.9000000  1.19000E-08
    10   10 b     d410+d4++++            null1        null3
    11+  11 b3    d411+d4+++++       0.1110000  1.00000E-12
    1    12 b3b   d412+d4++++++  11112.0000000  2.00000E012
    13   13 b3b1  d               1111.3000000  1.13000E-12
    14+  14 b3b14 d4            111111.0000000  1.40000E013
    1    15 b     d41                    null2        null1
    16   16 b3    d416               6.0000000  1.16000E003
    17+  17 b3b   d417+              0.7000000  1.11170E-03
    1    18 b3b1  d418+d            11.0000000  1.11800E003
    19   19 b3b19 d419+d4            0.1190000  9.00000E-05
    20+  20 b     d420+d4+               null1        null2
    2    21 b3    d421+d4++         11.1210000  1.11000E-05
    22   22 b3b   d422+d4+++     11111.2000000  2.00000E007
    23+  23 b3b2  d423+d4++++        0.1111123  1.11230E-09
    c3L      a2i drei  d4                 fl5          ex6
    -11 -1.10E01 b3    d4-11+d   -111.1000000 -1.11000E-12
    -1  -1.00E01 b     d4-10+d          null1        null3
    -   -9.00E00 b3b-9 d4-9+d4    -11.0000000 -1.11900E-10
    -8+ -8.00E00 b3b-  d4-8+d4    -18.0000000 -1.18000E010
    -7  -7.00E00 b3b   d4-7+d4     -7.0000000 -1.70000E-07
    -   -6.00E00 b3    d4-6+d4     -0.1111160 -6.00000E006
    -5+ -5.00E00 b     d4-5+d           null2        null2
    -4  -4.00E00 b3b-4 d4-4+   -11114.0000000 -1.11140E008
    -   -3.00E00 b3b-  d4-3        -0.1130000 -1.13000E-04
    -2+ -2.00E00 b3b   d4-         -0.1200000 -1.20000E001
    -1  -1.00E00 b3    d4          -0.1000000 -1.00000E-02
    0    0.00E00 b     d                null1        null1
    1+   1.00E00 b3    d4           0.1000000  1.00000E-02
    2++  2.00E00 b3b   d42          0.1200000  1.20000E001
    3    3.00E00 b3b3  d43+         0.1130000  1.13000E-04
    4+   4.00E00 b3b4+ d44+d    11114.0000000  1.11140E008
    5++  5.00E00 b     d45+d4           null2        null2
    6    6.00E00 b3    d46+d4+      0.1111160  1.11116E005
    7+   7.00E00 b3b   d47+d4+      0.1111117  7.00000E-08
    8++  8.00E00 b3b8  d48+d4+      8.0000000  1.80000E009
    9    9.00E00 b3b9+ d49+d4+      0.9000000  1.19000E-08
    10   1.00E01 b     d410+d4          null1        null3
    11+  1.10E01 b3    d411+d4      0.1110000  1.00000E-12
    1    1.20E01 b3b   d412+d4  11112.0000000  2.00000E012
    13   1.30E01 b3b1  d         1111.3000000  1.13000E-12
    14+  1.40E01 b3b14 d4      111111.0000000  1.40000E013
    1    1.50E01 b     d41              null2        null1
    16   1.60E01 b3    d416         6.0000000  1.16000E003
    17+  1.70E01 b3b   d417+        0.7000000  1.11170E-03
    1    1.80E01 b3b1  d418+d      11.0000000  1.11800E003
    19   1.90E01 b3b19 d419+d4      0.1190000  9.00000E-05
    20+  2.00E01 b     d420+d4          null1        null2
    2    2.10E01 b3    d421+d4     11.1210000  1.11000E-05
    22   2.20E01 b3b   d422+d4  11111.2000000  2.00000E007
    23+  2.30E01 b3b2  d423+d4      0.1111123  1.11230E-09
$/tstFmt/ */

    call tst t, "tstFmt"
    b = jBuf()
    st = b'.BUF'
    call pipe '+F', b
    call tstDataClassOut '. c3 a2i i b3b c5 d4 c13 fl5 f8n2 ex6 e9n3',
        , -11, + 23
    call pipe '-'
    call fmtFTab abc, b
    call fmtFAddFlds fmtFReset(abc), oFlds(m.st.1)
    m.abc.1.tit = 'c3L'
    m.abc.2.fmt = 'e'
    m.abc.3.tit = 'drei'
    m.abc.4.fmt = 'l7'
    call fmtFWriteSt abc, b'.BUF'
    call tstEnd t
    return
endProcedure tstFmt

tstFTab: procedure expose m.
    call pipeIni
/*
$=/tstFTab/
    ### start tst tstFTab #############################################
    testData begin
    ..---------a2i-b3b------------------d4------fl5-ex6-------
    -11       -11 b3           -11+d4++++ -111.100 0.00e-9
    -1        -10 b            4-10+d4+++    null1 null3  .
    -          -9 b3b-9        d4-9+d4+++  -11.000 -0.1e-9
    -8+        -8 b3b-          d4-8+d4++  -18.000 -1.2e10
    -7         -7 b3b            d4-7+d4+   -7.000 -1.7e-7
    -          -6 b3              d4-6+d4   -0.111 -6.0e06
    -5+        -5 b                d4-5+d    null2 null2  .
    -4         -4 b3b-4             d4-4+ ******** -1.1e08
    -          -3 b3b-               d4-3   -0.113 -1.1e-4
    -2+        -2 b3b                 d4-   -0.120 -1.2e01
    -1         -1 b3                   d4   -0.100 -1.0e-2
    0           0 b                     d    null1 null1  .
    1+          1 b3                   d4    0.100 1.00e-2
    2++         2 b3b                 d42    0.120 1.20e01
    3           3 b3b3               d43+    0.113 1.13e-4
    4+          4 b3b4+             d44+d ******** 1.11e08
    5++         5 b                d45+d4    null2 null2  .
    6           6 b3              d46+d4+    0.111 1.11e05
    7+          7 b3b            d47+d4++    0.111 7.00e-8
    8++         8 b3b8          d48+d4+++    8.000 1.80e09
    9           9 b3b9+        d49+d4++++    0.900 1.19e-8
    10         10 b            410+d4++++    null1 null3  .
    11+        11 b3           11+d4+++++    0.111 0.00e-9
    1          12 b3b          2+d4++++++ ******** 2.00e12
    13         13 b3b1                  d 1111.300 0.00e-9
    14+        14 b3b14                d4 ******** 1.40e13
    1          15 b                   d41    null2 null1  .
    16         16 b3                 d416    6.000 1.16e03
    17+        17 b3b               d417+    0.700 1.11e-3
    1          18 b3b1             d418+d   11.000 1.12e03
    19         19 b3b19           d419+d4    0.119 9.00e-5
    20+        20 b              d420+d4+    null1 null2  .
    2          21 b3            d421+d4++   11.121 1.11e-5
    22         22 b3b          d422+d4+++ ******** 2.00e07
    23+        23 b3b2         423+d4++++    0.111 1.11e-9
    ..---------a2i-b3b------------------d4------fl5-ex6-------
    testData end
$/tstFTab/ */

    call tst t, "tstFTab"
    b = jBuf()
    st = b'.BUF'
    call pipe '+F', b
    call tstDataClassOut '. c3 a2i i b3b c5 d4 c13 fl5 f8n2 ex6 e9n3',
        , -11, + 23
    call pipe 'P|'
    call fTabReset ft, 2 1, 1 3
    call fTabAdd   ft, '.'   , '%-6C' , '.', 'testData begin',
                                            , 'testData end'
    call fTabAdd   ft, 'a2i' , ' %6i'
    call fTabAdd   ft, 'b3b' , ' %-12C'
    call fTabAdd   ft, 'd4'  , ' %10C'
    call fTabAdd   ft, 'fl5' , ' %8.3i'
    call fTabAdd   ft, 'ex6' , ' %7e'
    call fTab ft
    call pipe '-'
    call tstEnd t
    return
endProcedure tstFTab


tstfmtUnits: procedure
/*
$=/tstFmtUnits/
    ### start tst tstFmtUnits #########################################
    .            .3 ==>  0s30 ++>   0s30 -+> -0s30 -->  -0s30
    .            .8 ==>  0s80 ++>   0s80 -+> -0s80 -->  -0s80
    .             1 ==>  1s00 ++>   1s00 -+> -1s00 -->  -1s00
    .           1.2 ==>  1s20 ++>   1s20 -+> -1s20 -->  -1s20
    .            59 ==> 59s00 ++>  59s00 -+> -59s0 --> -59s00
    .         59.07 ==> 59s07 ++>  59s07 -+> -59s0 --> -59s07
    .        59.997 ==>  1m00 ++>   1m00 -+> -1m00 -->  -1m00
    .            60 ==>  1m00 ++>   1m00 -+> -1m00 -->  -1m00
    .          60.1 ==>  1m00 ++>   1m00 -+> -1m00 -->  -1m00
    .           611 ==> 10m11 ++>  10m11 -+> -10m1 --> -10m11
    .        3599.4 ==> 59m59 ++>  59m59 -+> -59m5 --> -59m59
    .        3599.5 ==>  1h00 ++>   1h00 -+> -1h00 -->  -1h00
    .          3661 ==>  1h01 ++>   1h01 -+> -1h01 -->  -1h01
    .         83400 ==> 23h10 ++>  23h10 -+> -23h1 --> -23h10
    .         84700 ==> 23h32 ++>  23h32 -+> -23h3 --> -23h32
    .         86400 ==>  1d00 ++>   1d00 -+> -1d00 -->  -1d00
    .         89900 ==>  1d01 ++>   1d01 -+> -1d01 -->  -1d01
    .       8467200 ==> 98d00 ++>  98d00 -+> -98d0 --> -98d00
    .    8595936.00 ==> 99d12 ++>  99d12 -+> -99d1 --> -99d12
    .    8638704.00 ==>  100d ++>   100d -+> -100d -->  -100d
    .       8640000 ==>  100d ++>   100d -+> -100d -->  -100d
    .     863913600 ==> 9999d ++>  9999d -+> ----d --> -9999d
    .     863965440 ==> ++++d ++> 10000d -+> ----d --> -----d
    .     8.6400E+9 ==> ++++d ++> +++++d -+> ----d --> -----d
    .            .3 ==>   0.300 ++>    0.300 -+>  -0.300 -->   -0.300
    .            .8 ==>   0.800 ++>    0.800 -+>  -0.800 -->   -0.800
    .             1 ==>   1.000 ++>    1.000 -+>  -1.000 -->   -1.000
    .           1.2 ==>   1.200 ++>    1.200 -+>  -1.200 -->   -1.200
    .            59 ==>  59.000 ++>   59.000 -+> -59.000 -->  -59.000
    .         59.07 ==>  59.070 ++>   59.070 -+> -59.070 -->  -59.070
    .        59.997 ==>  59.997 ++>   59.997 -+> -59.997 -->  -59.997
    .            60 ==>  60.000 ++>   60.000 -+> -60.000 -->  -60.000
    .          60.1 ==>  60.100 ++>   60.100 -+> -60.100 -->  -60.100
    .           611 ==> 611.000 ++>  611.000 -+> -611.00 --> -611.000
    .        3599.4 ==>   3k599 ++>    3k599 -+>  -3k599 -->   -3k599
    .        3599.5 ==>   3k600 ++>    3k600 -+>  -3k600 -->   -3k600
    .          3661 ==>   3k661 ++>    3k661 -+>  -3k661 -->   -3k661
    .         83400 ==>  83k400 ++>   83k400 -+> -83k400 -->  -83k400
    .     999999.44 ==> 999k999 ++>  999k999 -+> -999k99 --> -999k999
    .      999999.5 ==>   1M000 ++>    1M000 -+>  -1M000 -->   -1M000
    .    567.6543E6 ==> 567M654 ++>  567M654 -+> -567M65 --> -567M654
    .    .9999991E9 ==> 999M999 ++>  999M999 -+> -999M99 --> -999M999
    .    .9999996E9 ==>   1G000 ++>    1G000 -+>  -1G000 -->   -1G000
    .   .9999991E12 ==> 999G999 ++>  999G999 -+> -999G99 --> -999G999
    .   .9999996E12 ==>   1T000 ++>    1T000 -+>  -1T000 -->   -1T000
    .   567.6543E12 ==> 567T654 ++>  567T654 -+> -567T65 --> -567T654
    .   .9999991E15 ==> 999T999 ++>  999T999 -+> -999T99 --> -999T999
    .   .9999996E15 ==>   1P000 ++>    1P000 -+>  -1P000 -->   -1P000
    .   .9999991E18 ==> 999P999 ++>  999P999 -+> -999P99 --> -999P999
    .   .9999996E18 ==>   1E000 ++>    1E000 -+>  -1E000 -->   -1E000
    .   567.6543E18 ==> 567E654 ++>  567E654 -+> -567E65 --> -567E654
    .   .9999991E21 ==> 999E999 ++>  999E999 -+> -999E99 --> -999E999
    .   .9999996E21 ==>   1000E ++>    1000E -+>  -1000E -->   -1000E
    .   .9999992E24 ==> 999999E ++>  999999E -+> ------E --> -999999E
    .   .9999995E24 ==> ++++++E ++> 1000000E -+> ------E --> -------E
    .    10.6543E24 ==> ++++++E ++> +++++++E -+> ------E --> -------E
$/tstFmtUnits/ */
    call jIni
    call tst t, "tstFmtUnits"
    d = 86400
    lst = .3 .8 1 1.2 59 59.07 59.997 60 60.1 611 ,
          3599.4 3599.5 3661 d-3000 d-1700 d d+3500 ,
          d * 98 d * 99.49 d * 99.985 d*100 d * 9999 d * 9999.6 ,
          d * 1e5
    do wx=1 to words(lst)
        call tstOut t, right(word(lst, wx), 14) ,
                 '==>' fmtTime(   word(lst, wx)   ) ,
                 '++>' fmtTime(   word(lst, wx), 1),
                 '-+>' fmtTime('-'word(lst, wx),  ),
                 '-->' fmtTime('-'word(lst, wx), 1)
        end
    lst = subword(lst, 1, 14) 999999.44 999999.5,
        567.6543e6 .9999991e9 .9999996e9 .9999991e12 .9999996e12 ,
        567.6543e12 .9999991e15 .9999996e15 .9999991e18 .9999996e18 ,
        567.6543e18 .9999991e21 .9999996e21 .9999992e24 .9999995e24 ,
         10.6543e24
    do wx=1 to words(lst)
        call tstOut t, right(word(lst, wx), 14) ,
                 '==>' fmtDec(    word(lst, wx)   ) ,
                 '++>' fmtDec(    word(lst, wx), 1),
                 '-+>' fmtDec('-'word(lst, wx),   ),
                 '-->' fmtDec('-'word(lst, wx), 1)
        end
    call tstEnd t
    return
endProcedure tstfmtUnits

tstSb: procedure expose m.
/*
$=/tstSb/
    ### start tst tstSb ###############################################
    end        : 0
    char  3    : 1 abc
    lit   d?   : 0 .
    lit   de   : 1 de
    lit   de ? fg fgh: 1 fg
    while HIJ  : 0 .
    end        : 0
    while Jih  : 1 hi
    while ? klj: 1 jklkl ?
    end        : 1
    while ? klj: 0 .
    char  3    : 0 .
    lit        : 0 .
    until cba  : 0 .
    until ?qd  : 1 abc
    until ?qr  : 1 defdef .
    until ?qr  : 0 .
    strEnd ?   : 1 .
    strEnd ?   : 0 .
    strEnd ?   : 1 ab?cd??gh
    strEnd ") ": 1 ab
    strEnd ") ": 1 cd) gh
$/tstSb/ */
    call tst t, 'tstSb'
    call sbSrc s, 'abcdefghijklkl ?'
    call out 'end        :' sbEnd(s)
    call out 'char  3    :' sbChar(s, 3) m.s.tok
    call out 'lit   d?   :' sbLit(s, 'd?') m.s.tok
    call out 'lit   de   :' sbLit(s, 'de') m.s.tok
    call out 'lit   de ? fg fgh:' sbLit(s, 'de ? fg fgh') m.s.tok
    call out 'while HIJ  :' sbWhile(s, 'HIJ') m.s.tok
    call out 'end        :' sbEnd(s)
    call out 'while Jih  :' sbWhile(s, 'Jih') m.s.tok
    call out 'while ? klj:' sbWhile(s, '? klj') m.s.tok
    call out 'end        :' sbEnd(s)
    call out 'while ? klj:' sbWhile(s, '? klj') m.s.tok
    call out 'char  3    :' sbChar(s, 3) m.s.tok
    call out 'lit        :' sbLit(s, '') m.s.tok
    call sbSrc s, 'abcdefdef ?'
    call out 'until cba  :' sbUntil(s, 'cba') m.s.tok
    call out 'until ?qd  :' sbUntil(s, '?qd') m.s.tok
    call out 'until ?qr  :' sbUntil(s, '?qr') m.s.tok
    call out 'until ?qr  :' sbUntil(s, '?qr') m.s.tok
    call out 'strEnd ?   :' sbStrEnd(s, '?')  m.s.tok
    call out 'strEnd ?   :' sbStrEnd(s, '?')  m.s.tok
    call sbSrc s, 'ab??cd????gh?ijk'
    call out 'strEnd ?   :' sbStrEnd(s, '?')  m.s.tok
    call sbSrc s, 'ab) cd) ) gh) jk) )'
    call out 'strEnd ") ":' sbStrEnd(s, ') ')  m.s.tok
    call out 'strEnd ") ":' sbStrEnd(s, ') ')  m.s.tok
    call tstEnd t
    return
endProcedure tstSb

tstScan: procedure expose m.
/*
$=/tstScan.1/
    ### start tst tstScan.1 ###########################################
    scan src a034,Und hr123sdfER"st1" 'str2''mit''apo''s' .
    scan n tok 4: a034 key  val .
    scan , tok 1: , key  val .
    scan n tok 3: Und key  val .
    scan v tok 1:   key  val .
    scan n tok 10: hr123sdfER key  val .
    scan q tok 5: "st1" key  val st1
    scan v tok 1:   key  val st1
    scan a tok 19: 'str2''mit''apo''s' key  val str2'mit'apo's
    scan v tok 1:   key  val str2'mit'apo's
$/tstScan.1/ */
    call tst t, 'tstScan.1'

    call tstScan1 ,'l"litEins"l"litZwei"ndv" "aq1' ,
        ,"a034,Und hr123sdfER""st1"" 'str2''mit''apo''s' "
    call tstEnd t

/*
$=/tstScan.2/
    ### start tst tstScan.2 ###########################################
    scan src a034,Und hr123sdfER"st1" 'str2''mit''apo''s' .
    scan n tok 4: a034 key  val .
    scan , tok 1: , key  val .
    scan n tok 3: Und key  val .
    scan b tok 0:  key  val .
    scan n tok 10: hr123sdfER key  val .
    scan " tok 5: "st1" key  val st1
    scan b tok 0:  key  val st1
    scan ' tok 19: 'str2''mit''apo''s' key  val str2'mit'apo's
    scan b tok 0:  key  val str2'mit'apo's
$/tstScan.2/ */
    call tst t, 'tstScan.2'
    call tstScan1 , 'ndsb1' ,
        ,"a034,Und hr123sdfER""st1"" 'str2''mit''apo''s' "
    call tstEnd t

/*
$=/tstScan.3/
    ### start tst tstScan.3 ###########################################
    scan src a034,'wie 789abc
    scan n tok 4: a034 key  val .
    scan , tok 1: , key  val .
    *** err: scanErr ending Apostroph(') missing
    .    e 1: last token  scanPosition 'wie 789abc
    .    e 2: pos 6 in string a034,'wie 789abc
    scan ' tok 1: ' key  val .
    scan n tok 3: wie key  val .
    scan s tok 0:  key  val .
    *** err: scanErr illegal number end after 789
    .    e 1: last token 789 scanPosition abc
    .    e 2: pos 14 in string a034,'wie 789abc
    scan d tok 3: 789 key  val .
    scan n tok 3: abc key  val .
$/tstScan.3/ */
    call tst t, 'tstScan.3'
    call tstScan1 , 'nds1' ,
        ,"a034,'wie 789abc"
    call tstEnd t

/*
$=/tstScan.4/
    ### start tst tstScan.4 ###########################################
    scan src litEinsefr 23 sdfER'str1'litZwei "str2""mit quo"s .
    scan l tok 7: litEins key  val .
    scan n tok 3: efr key  val .
    scan b tok 0:  key  val .
    scan d tok 2: 23 key  val .
    scan b tok 0:  key  val .
    scan n tok 5: sdfER key  val .
    scan a tok 6: 'str1' key  val str1
    scan l tok 7: litZwei key  val str1
    scan b tok 0:  key  val str1
    scan q tok 15: "str2""mit quo" key  val str2"mit quo
    scan n tok 1: s key  val str2"mit quo
    scan b tok 0:  key  val str2"mit quo
$/tstScan.4/ */
    call tst t, 'tstScan.4'
    call tstScan1 , 'l"litEins"l"litZwei"ndbaq1' ,
           ,"litEinsefr 23 sdfER'str1'litZwei ""str2""""mit quo""s "
    call tstEnd t

/*
$=/tstScan.5/
    ### start tst tstScan.5 ###########################################
    scan src  aha;+-=f ab=cdEf eF='strIng' .
    scan b tok 0:  key  val .
    scan k tok 4:  no= key aha val def
    scan ; tok 1: ; key aha val def
    scan + tok 1: + key aha val def
    scan - tok 1: - key aha val def
    scan = tok 1: = key aha val def
    scan k tok 4:  no= key f val def
    scan k tok 4: cdEf key ab val cdEf
    scan b tok 4: cdEf key ab val cdEf
    scan k tok 8: 'strIng' key eF val strIng
    scan b tok 8: 'strIng' key eF val strIng
$/tstScan.5/ */
    call tst t, 'tstScan.5'
    call tstScan1 , 'bk1'," aha;+-=f ab=cdEf eF='strIng' "
    call tstEnd t
    return
endProcedure tstScan

tstScanRead: procedure expose m.
/*
$=/tstScanRead/
    ### start tst tstScanRead #########################################
    name erste
    space
    name Zeile
    space
    nextLine
    nextLine
    space
    name dritte
    space
    name Zeile
    space
    name schluss
    space
$/tstScanRead/ */
    call scanReadIni
    call tst t, 'tstScanRead'
    b = jBuf('erste Zeile  ',,'  dritte Zeile  schluss  ')
    s = jOpen(scanRead(b), m.j.cRead)
    do while \scanAtEnd(s)
        if scanName(s) then             call tstOut t, 'name' m.s.tok
        else if scanVerify(s, ' ') then call tstOut t, 'space'
        else if scanReadNL(s) then      call tstOut t, 'nextLine'
        else if \scanAtEnd(s) then      call scanErr s, 'cannot scan'
        end
    call jClose s
    call tstEnd t

/*
$=/tstScanReadMitSpaceLn/
    ### start tst tstScanReadMitSpaceLn ###############################
    name erste
    spaceLn
    name Zeile
    spaceLn
    name dritte
    spaceLn
    name Zeile
    spaceLn
    name schluss
    spaceLn
$/tstScanReadMitSpaceLn/ */
    call tst t, 'tstScanReadMitSpaceLn'
    s = jOpen(scanRead(b), '>')
    do forever
        if scanName(s) then         call out 'name' m.s.tok
        else if scanSpaceNL(s) then call out 'spaceLn'
        else if \scanAtEnd(s) then      call scanErr s, 'cannot scan'
        else                        leave
        end
    call jClose s
    call tstEnd t

/*
$=/tstScanJRead/
    ### start tst tstScanJRead ########################################
    1 jRead n tok erste val .
    2 jRead s tok  val .
    3 jRead n tok Zeile val .
    4 jRead s tok  val .
    5 jRead n tok dritte val .
    6 jRead s tok  val .
    7 jRead n tok Zeile val .
    8 jRead s tok  val .
    9 jRead n tok schluss val .
    10 jRead s tok  val .
    11 jRead 0 tok 1 val 1
    12 jRead s tok  val 1
    13 jRead + tok + val 1
    14 jRead s tok  val 1
    15 jRead 0 tok 2. val 2..
    16 jRead s tok  val 2..
    17 jRead + tok + val 2..
    18 jRead . tok . val 2..
    19 jRead s tok  val 2..
    20 jRead 0 tok +.3 val +.3
    21 jRead 0 tok -45e-3 val -45E-3
    22 jRead s tok  val -45E-3
    23 jRead " tok "a""b" val a"b
    24 jRead s tok  val a"b
    25 jRead ' tok 'c''d' val c'd
    className 1: Scan 18: Scan
$/tstScanJRead/ */

    call tst t, 'tstScanJRead'
    call jWrite jOpen(b,'>>'), '1  + 2. +. +.3-45e-3 "a""b"' "'c''d'"
    s = jOpen(scanRead(jClose(b)), '>')
    do x=1 while jRead(s, v.x)
        call out x 'jRead' m.v.x.type 'tok' m.v.x.tok 'val' m.v.x.val
        end
    call jClose s
    call out 'className 1:' className(objClass(v.1)),
                    '18:' className(objClass(v.18))
    call tstEnd t
    return
endProcedure tstScanRead

tstScanUtilInto: procedure expose m.
/*
$=/tstScanUtilIntoL/
TEMPLATE P3
     DSN('DBAF.DA540769.A802A.P00003.BV5I3NRN.REC')
     DISP(OLD,KEEP,KEEP)
TEMPLATE P4
     DSN('DBAF.DA540769.A802A.P00004.BV5I3NTK.REC')
     DISP(OLD,KEEP,KEEP)
LOAD DATA        LOG NO RESUME NO REPLACE COPYDDN(TCOPYD)
           STATISTICS INDEX(ALL) REPORT NO UPDATE ALL
 EBCDIC  CCSID(00500,00000,00000)
 SORTKEYS
  -- ENFORCE NO
  SORTDEVT DISK
  SORTNUM 160
  WORKDDN(TSYUTD,TSOUTD)
  INTO TABLE OA1P.TWB981 PART 1 INDDN TREC134
 WORKDDN(TSYUTS,TSOUTS)
 INTO TABLE "A540769"
   ."TWK802A1"
 PART 00001 INDDN P0
 WHEN(00001:00002) = X'0041'
 ( "DE1"
  POSITION(  00003:00010) DECIMAL
 , "CH2"
  POSITION(  00011:00015) CHAR(00005)
 , "TS3"
  POSITION(  00016:00041) TIMESTAMP EXTERNAL
 , "TI4"
  POSITION(  00042:00049) TIME EXTERNAL
 , "DA5"
  POSITION(  00050:00059) DATE EXTERNAL
 , "IN6"
  POSITION(  00060:00063) INTEGER
 , "RE7"
  POSITION(  00064:00067) FLOAT(21)
 )
 INTO TABLE "A540769"."TWK802A1"
 PART 00002 INDDN P0
 WHEN(00001:00002) = X'0041'
 ( "DE1"
  POSITION(  00003:00010) DECIMAL
 , "CH2"
  POSITION(  00011:00015) CHAR(00005)
 )
 dobido
$/tstScanUtilIntoL/
$=/tstScanUtilInto/
  ### start tst tstScanUtilInto #####################################
  -- 1 scanUtilInto
  . ( "DE1"
  .  POSITION(  00003:00010) DECIMAL
  . , "CH2"
  .  POSITION(  00011:00015) CHAR(00005)
  . , "TS3"
  .  POSITION(  00016:00041) TIMESTAMP EXTERNAL
  . , "TI4"
  .  POSITION(  00042:00049) TIME EXTERNAL
  . , "DA5"
  .  POSITION(  00050:00059) DATE EXTERNAL
  . , "IN6"
  .  POSITION(  00060:00063) INTEGER
  . , "RE7"
  .  POSITION(  00064:00067) FLOAT(21)
  . ) .
  .  -- table OA1P.TWB981 part 00001
  -- 2 scanUtilInto
  . ( "DE1"
  .  POSITION(  00003:00010) DECIMAL
  . , "CH2"
  .  POSITION(  00011:00015) CHAR(00005)
  . ) .
  .  -- table A540769.TWK802A1 part 00002
  -- 3 scanUtilInto
$/tstScanUtilInto/ */

    call scanReadIni
    b = jBuf()
    call mAddst b'.BUF', mapInline('tstScanUtilIntoL')
    call tst t, 'tstScanUtilInto'
    s = jOpen(scanUtilReset(ScanRead(b)), '<')
    do ix=1
        call out '--' ix 'scanUtilInto'
        if \ scanUtilInto(s) then
            leave
        call out '  -- table' m.s.tb 'part' m.s.part
        end
    call tstEnd t
    return
endProcedure tstSCanUtilInto

tstScanWin: procedure expose m.
/*
$=/tstScanWin/
    ### start tst tstScanWin ##########################################
    info 0: last token  scanPosition erste     Zeile                 dr+
    itteZe\npos 1 in line 1: erste     Zeile
    name erste
    spaceNL
    name Zeile
    spaceNL
    name dritteZeeeile
    info 5: last token dritteZeeeile scanPosition    zeile4            +
    .    fuenfueberSechs\npos 1 in line 4:    zeile4
    spaceNL
    name zeile4
    spaceNL
    name fuenfueberSechsUnddSiebenUNDundUndUAcht
    spaceNL
    info 10: last token  scanPosition undZehnueberElfundNochWeiterZwoel+
    fundim1\npos 9 in line 10:         undZehn
    name undZehnueberElfundNochWeiterZwoelfundim13
    spaceNL
    name Punkt
    infoE 14: last token Punkt scanPosition \natEnd after line 13: im13+
    .      Punkt
$/tstScanWin/ */
    call scanWinIni
    call tst t, 'tstScanWin'
    b = jBuf('?erste     Zeile?',,'?  dritteZeeeile?', '?   zeile4 ',
       ,'?          fuenf?', '?ueberSechsUnddS?', '?iebenUNDundUndU?',
       ,'?Acht           ?', '?               ?', '?        undZehn?',
       ,'?ueberElfundNoch?', '?WeiterZwoelfund?', '?im13      Punkt?')
    s = jOpen(scanWin(b, , , 2, 15), m.j.cRead)
    call tstOut t, 'info 0:' scanInfo(s)
    do sx=1 while \scanAtEnd(s)
        if scanName(s) then             call tstOut t, 'name' m.s.tok
        else if scanSpaceNL(s) then call tstOut t, 'spaceNL'
        else if \scanAtEnd(s) then      call scanErr s, 'cannot scan'
        if sx // 5 = 0 then
            call tstOut t, 'info' sx':' scanInfo(s)
        end
    call tstOut t, 'infoE' sx':' scanInfo(s)
    call tstEnd t

/*
$=/tstScanWinRead/
    ### start tst tstScanWinRead ######################################
    info 0: last token  scanPosition erste     Zeile                z3 +
    com Ze\npos 1 in line 1: erste     Zeile
    name erste
    spaceNL
    name Zeile
    spaceNL
    name z3
    info 5: last token z3 scanPosition  com Zeeeile z4 come4          f+
    uenf\npos 4 in line 3:  z3 com Zeeeile
    spaceNL
    name z4
    spaceNL
    name fuenf
    spaceNL
    info 10: last token  scanPosition com    Sechs  com  sieben   comAc+
    ht  com\npos 15 in line 5:     fuenf     c
    name com
    spaceNL
$/tstScanWinRead/ */
    call tst t, 'tstScanWinRead'
    call mAdd t.cmp,
       ,  "name Sechs",
       ,  "spaceNL",
       ,  "name com",
       ,  "info 15: last token com scanPosition   sieben   comAcht  c",
       || "om com    com\npos 2 in line 7: m  sieben   com" ,
       ,  "spaceNL",
       ,  "name sieben",
       ,  "spaceNL",
       ,  "name Acht",
       ,  "spaceNL",
       ,  "info 20: last token  scanPosition ueberElfundNochWeit com ",
       || "elfundim13\npos 1 in line 11: ueberElfundNoch",
       ,  "name ueberElfundNochWeit",
       ,  "spaceNL",
       ,  "name im13",
       ,  "spaceNL",
       ,  "name Punkt",
       ,  "info 25: last token Punkt scanPosition \natEnd after line ",
       || "13: im13      Punkt",
       ,  "infoE 26: last token Punkt scanPosition \natEnd after line",
       || " 13: im13      Punkt"
    b = jBuf('?erste     Zeile?',,'? z3 com Zeeeile?', '? z4 come4 ',
       ,'?    fuenf     c?', '?om    Sechs  co?', '?m  sieben   com?',
       ,'?Acht  com com  ?', '?  com          ?', '?  com   undZehn?',
       ,'?ueberElfundNoch?', '?Weit com elfund?', '?im13      Punkt?')
    s = scanWin(b, , , 2, 15)
    call scanOpts s, , , 'com'
    call tstOut t, 'info 0:' scanInfo(jOpen(s, m.j.cRead))
    do sx=1 while \scanAtEnd(s)
        if scanName(s) then             call tstOut t, 'name' m.s.tok
        else if scanSpaceNL(s) then call tstOut t, 'spaceNL'
        else if \scanAtEnd(s) then      call scanErr s, 'cannot scan'
        if sx // 5 = 0 then
            call tstOut t, 'info' sx':' scanInfo(s)
        end
    call tstOut t, 'infoE' sx':' scanInfo(s)
    call tstEnd t
    return
endProcedure tstScanWin

tstjCatSql: procedure expose m.
/*
$=/tstJCatSql/
    ### start tst tstJCatSql ##########################################
    cmd1 select     current time                 stamp from s.1
    cmd2 update ";--""'/*"
    cmd3 delete '*/''"' / 3 - 1
    cmd4 .
$/tstJCatSql/ */
    call tst t, 'tstJCatSql'
    b = jBuf('select -- /* c1', ' /* c1 */ current/* c2 " '' ',
       ,'c3"', '  c4   */time', 'stamp-- c5', 'from s.1; /* c6 */ ;' ,
       ,';update ";--""''/*";;       del123',
       , 'ete ''*/''''"'' / 3 - 1  -- c7', '/*c8 */   ')
    call jCatSqlReset tstJCat, , jOpen(b, '<'), 30
    do sx=1 until nx = ''
        nx = jCatSqlNext(tstJCat, ';')
        call tstOut t, 'cmd'sx nx
        end
    call jClose b
    call tstEnd t
    return
endProcedure tstJCatSql

tstScanSql: procedure expose m.
    call scanWinIni
/*
$=/tstScanSqlId/
    ### start tst tstScanSqlId ########################################
    sqlId ABC
    spaceNL
    sqlId AB__345EF
    spaceNL
$/tstScanSqlId/ */
    call tst t, 'tstScanSqlId'
    b = jBuf('abc  --  kommentar', right('ab_', 72), '_345ef-- kom')
    s = jOpen(scanSql(b), m.j.cRead)
    do sx=1 while \scanAtEnd(s)
        if scanSqlID(s) then       call tstOut t, 'sqlId' m.s.val
        else if scanSpaceNL(s) then call tstOut t, 'spaceNL'
        else                            call scanErr s, 'cannot scan'
        end
    call tstEnd t
/*
$=/tstScanSqlDelimited/
    ### start tst tstScanSqlDelimited #################################
    sqlDeId ABC
    spaceNL
    sqlDeId AB_3F
    spaceNL
    sqlDeId abc
    spaceNL
    sqlDeId ab_Ef
    spaceNL
$/tstScanSqlDelimited/ */
    call tst t, 'tstScanSqlDelimited'
    b = jBuf('abc  --  kommentar',,'  -- ',,right('ab_', 72),'3F-- kom',
           , '"abc"  --  ko', ' -- ',,right('"ab_', 72),'Ef"-- kom')
    s = jOpen(scanSql(b), m.j.cRead)
    do sx=1 while \scanAtEnd(s)
        if scanSqlDeID(s) then       call tstOut t, 'sqlDeId' m.s.val
        else if scanSpaceNL(s) then call tstOut t, 'spaceNL'
        else                            call scanErr s, 'cannot scan'
        end
    call tstEnd t
/*
$=/tstScanSqlQualified/
    ### start tst tstScanSqlQualified #################################
    sqlQuId ABC 1 ABC
    sqlQuId AB_3F 1 AB_3F
    sqlQuId abc 1 abc
    sqlQuId ab_Ef 1 ab_Ef
    sqlQuId EINS.Zwei.DREI 3 EINS
    sqlQuId vi er.fu  enf 2 vi er
$/tstScanSqlQualified/ */
    call tst t, 'tstScanSqlQualified'
    b = jBuf('abc  --  kommentar',,'  -- ',,right('ab_', 72),'3F-- kom',
           , '"abc"  --  ko', ' -- ',right('"ab_', 72),'Ef"-- kom',
           , 'eins."Zwei', '" -- com', ' . -- com', '  -- com',
           , 'drei -- ko', '"vi er"."fu  enf   " -- co')
    s = jOpen(scanSql(b), m.j.cRead)
    do sx=1 while \scanAtEnd(s)
        if scanSqlQuID(s) then
            call tstOut t, 'sqlQuId' m.s.val m.s.val.0 m.s.val.1
        else if scanSpaceNL(s) then call tstOut t, 'spaceNL'
        else                            call scanErr s, 'cannot scan'
        end
    call tstEnd t
/*
$=/tstScanSqlNum/
    ### start tst tstScanSqlNum #######################################
    sqlNum 1
    spaceNL
    sqlNum 2..
    spaceNL
    sqlNum .3
    spaceNL
    sqlNum 4.5
    spaceNL
    sqlNum +6
    spaceNL
    sqlNum +7.03
    spaceNL
    sqlNum -8
    spaceNL
    sqlNum -.9
    spaceNL
    sqlNum 1E2
    spaceNL
    sqlNum -2.E-2
    spaceNL
    sqlNum +.3E+3
    spaceNL
$/tstScanSqlNum/ */
    call tst t, 'tstScanSqlNum'
    b = jBuf('1 2. .3 4.5 +6 + --kom', , ' -- com ', , ' 7.03 -8 -  .9',
             '1e2 - 2.e-2 + .3e+3')
    s = jOpen(scanSql(b), m.j.cRead)
    do sx=1 while \scanAtEnd(s)
        if scanSqlNum(s) then
            call tstOut t, 'sqlNum' m.s.val
        else if scanSpaceNL(s) then call tstOut t, 'spaceNL'
        else                            call scanErr s, 'cannot scan'
        end
    call tstEnd t
/*
$=/tstScanSqlNumUnit/
    ### start tst tstScanSqlNumUnit ###################################
    sqlNumUnit 1 KB
    spaceNL
    sqlNumUnit .3 MB
    sqlNumUnit .5
    sqlNumUnit +6.E-5 B
    spaceNL
    sqlNumUnit -7
    char *
    spaceNL
    sqlNumUnit -.8
    char T
    char B
    spaceNL
    *** err: scanErr scanSqlNumUnit after +9. bad unit TB
    .    e 1: last token Tb scanPosition .
    .    e 2: pos 41 in line 1: 1 kb .3mB.5 +   6.e-5B -7* -.8 TB + 9.T+
    b
    sqlNumUnit +9..
    spaceNL
$/tstScanSqlNumUnit/ */
    call tst t, 'tstScanSqlNumUnit'
    b = jBuf('1 kb .3mB.5 +   6.e-5B -7* -.8 TB + 9.Tb')
    s = jOpen(scanSql(b), m.j.cRead)
    do sx=1 while \scanAtEnd(s)
        if scanSqlNumUnit(s, 0, 'B KB MB') then
            call tstOut t, 'sqlNumUnit' m.s.val
        else if scanSpaceNL(s) then call tstOut t, 'spaceNL'
        else if scanChar(s ,1) then call tstOut t, 'char' m.s.tok
        else call scanErr s, 'cannot scan'
        end
    call tstEnd t
    return
endProcedure tstScanSql

/*--- one single test scan with lines to scan in stem ln -------------*/
tstScan1:
parse arg sc, classs, ln
    if sc == '' then do
        call tstOut t, 'scan src' ln
        call scanSrc scanReset(s), ln
        end
    else do
        call tstOut t, 'scan scanner' sc
        s = sc
        end
    do forever
        x = tstScanType(s, classs)
        if x == '' then
           leave
        call tstOut t, 'scan' x 'tok' length(m.s.tok)':' m.s.tok ,
                  'key' m.s.key 'val' m.s.val
        end
    return
endProcedure tstScan1

tstScanType: procedure expose m.
parse arg s, opt
    cx = 1
    a2 = ''
    res = 0
    do while cx <= length(opt)
        f = substr(opt, cx, 1)
        cx = cx + 1
        if pos(substr(opt, cx, 1), "'""") > 0 then do
            m.tstScanType.src = opt
            m.tstScanType.pos = cx
            call scanString tstScanType
            a2 = m.tstScanType.val
            cx = m.tstScanType.pos
            end
        if      f == 'a' then
            res = scanString(s, "'")
        else if f == 'b' then
            res = scanSpaceNl(s)
        else if f == 'c' then
            res = scanChar(s, a2)
        else if f == 'd' then
            res = scanNat(s, a2)
        else if f == 'k' then
            res = scanKeyValue(s, 'def')
        else if f == 'l' then
            res = scanLit(s, a2)
        else if f == 'q' then
            res = scanString(s, '"')
        else if f == 'v' then
            res = scanVerify(s, a2)
        else if f == 'w' then
            res = scanWord(s)
        else if f == 'y' then
            res = scanVerify(s, a2, 'm')
        if res then
            return f
        end
    return scanType(s)
endProcedure tstScanType

/* copx tstBase end   *************************************************/

/* copx tst begin ****************************************************
      test infrastructure
***********************************************************************/
/*--- migrate all compares to new ones:
        tstCI input compare
        tstCO ouput migrated compares
        tstCIO input and output -------------------------------------*/
tstCI: procedure expose m.
parse arg m, nm
    m.m.CIO = 0
    signal tstCIwork
tstCIO: procedure expose m.
parse arg m, nm
    m.m.CIO = 1
tstCIwork:
    m.m.name = nm
    m.m.cmp.1 = left('### start tst' nm '', 67, '#')

    do ix=2 to arg()-1
        m.m.cmp.ix = arg(ix+1)
        end
    m.m.cmp.0 = ix-1
    if m.m.CIO then
        call tstCO m
    return

tstCO: procedure expose m.
parse arg m
    call tst2dpSay m.m.name, m'.CMP', 68
    return
/*--- initialise m as tester with name nm
        use inline input nm as compare lines -----------------------*/
tstReset: procedure expose m.
parse arg m, nm
    call tstIni
    m.m.name = nm
    m.m.inIx  = 0
    m.m.out.0 = 0
    m.m.err   = 0
    m.m.errHand = 0
    m.tst.act = m
    if \ datatype(m.m.trans.0, 'n') then
        m.m.trans.0 = 0
    m.m.trans.old = m.m.trans.0
    return
endProcedure tstReset

tst: procedure expose m.
parse arg m, nm, cmpSt
    call tstReset m, nm
    m.tst.tests = m.tst.tests+1
    if cmpSt == '' then do
        cmpSt = mCut(t'.CMP', 0)
        call tst4dp cmpSt, mapInline(nm)
        end
    m.m.cmp = cmpSt
    m.m.moreOutOk = 0
    call mAdd mCut(m'.IN', 0), 'tst in line 1 eins ,'    ,
                     , 'tst in line 2 zwei ;   ' ,
                     , 'tst in line 3 drei .schluss.'
    call tstOut m, left('### start tst' nm '', 67, '#')
    call errReset 'h', 'return tstErrHandler(ggTxt)'
    m.m.errCleanup = m.err.cleanup
    if m.tst.ini.j \== 1 then do
/*      call err implement outDest 'i', 'call tstOut' quote(m)', msg'
*/      end
    else do
        call oMutate m, class4name('Tst')
        call oMutate m'.IN', class4name('Tst')
        m.m.jReading = 1
        m.m.jWriting = 1
        m.m.jUsers = 0
        m.m.in.jReading = 1
        m.m.in.jWriting = 1
        m.m.in.jUsers = 0
        if m.tst.ini.e \== 1 then do
            m.m.oldJin = m.j.in
            m.m.oldOut = m.j.out
            m.j.in = m
            m.j.out = m
            end
        else do
            if m.pipe.0 <> 2 then
                call tstErr m, 'm.pipe.0' m.pipe.0 '<> 2'
            call pipe '+Ff', m , m'.IN'
            end
        end
    return m
endProcedure tst

tstEnd: procedure expose m.
parse arg m, opt opt2
    cmp = m.m.cmp
    m.m.jReading = 0
    m.m.jWriting = 0
    if m.tst.ini.j == 1 then do
        m.m.jReading = 0
        m.m.jWriting = 0
           if m.tst.ini.e \== 1 then do
            m.j.in = m.m.oldJin
            m.j.out = m.m.oldOut
            end
        else do
            if m.j.in \== m'.IN' | m.j.out \== m then
                call tstErr m, m.j.in '\==' m '|' m.j.out '\==' m
            call pipe '-'
            if m.pipe.0 <> 2 then
                call tstErr m, 'm.pipe.0' m.pipe.0 '<> 2'
            end
        end
    if m.m.err = 0 then
        if m.m.errCleanup \= m.err.cleanup then
            call tstErr m, 'err.Cleanup' m.err.cleanup '<> old',
                        m.m.errCleanup
    if m.m.out.0 \= m.cmp.0 & \ (m.m.moreOutOk,
            &  m.m.out.0 > m.cmp.0) then do
        call tstErr m, 'old' m.cmp.0 'lines \= new' m.m.out.0
        do nx = m.m.out.0 + 1 to min(m.m.out.0+10, m.cmp.0)
            say 'old -  ' m.cmp.nx
            end
        end
    call errReset 'h'
    m.tst.act = ''
    soll = 0
    if opt = 'err' then do
        soll = opt2
        if m.m.err \= soll then
            call err soll 'errors expected, but got' m.m.err
        end
    if m.m.err \= soll then do
        say 'new lines:' (m.m.out.0 - 1)
           call tst2dpSay m.m.name, m'.OUT', 68
        end
    say left('###' m.m.name 'end with' m.m.err 'errors ', 67, '#')

    if 1 & m.m.err \= soll then
        call err 'dying because of' m.m.err 'errors'
    m.m.trans.0 = m.m.trans.old
    return
endProcedure tstEnd

tst2dp: procedure expose m.
parse arg st, dp, ml
    dx = m.dp.0
    do sx=1 to m.st.0
        li = m.st.sx
        cx = 1
        do until cx > length(li)
            c = substr(li, cx, 1)
            ou = left('.', strip(c) == '' | pos(c, '.+') > 0)
            ex = min(length(li),cx+ml-length(ou)-2)
            ou = ou || substr(li, cx, ex+1-cx)
            dx = dx + 1
            c = right(ou, 1)
            if ex < length(li) then
                m.dp.dx = ou || '+'
            else if strip(c) == '' | pos(c, '.+') > 0 then
                m.dp.dx = ou || '.'
            else
                m.dp.dx = ou
            cx = ex +1
            end
        end
    m.dp.0 = dx
    return
endProcedure tst2dp

tst2dpSay: procedure expose m.
parse arg name, st, ml
    say '$=/'name'/'
    call tst2dp st, mCut('TST.TMP', 0), 68
    do nx=1 to m.tst.tmp.0
           say '   ' m.tst.tmp.nx
           end
     say '$/'name'/'
return tst2dpSay

tst4dp: procedure expose m.
parse arg st, dp
    sx = m.st.0
    inData = 0
    data = ''
    do dx=1 to m.dp.0
        li = strip(m.dp.dx)
        if pos(left(li, 1), '.+') > 0 then
         li = substr(li, 2)
        if right(li, 1) == '+' then do
            inData = 1
            data = data || left(li, length(li)-1)
            iterate
            end
        if right(li, 1) == '.' then
            li = left(li, length(li)-1)
        sx = sx + 1
        m.st.sx = repAll(repAll(data || li, '$ä', '/*'), '$ö', '*/')
        inData = 0
        data = ''
        end
    m.st.0 = sx
    if inData then
        call err 'end inData'
    return
endProcedure tst4dp

/*--- write to test: say lines and compare them ----------------------*/
tstWrite: procedure expose m.
parse arg m, arg
    call tstOut m, 'out:' arg
    return
endProcedure tstWrite

tstOut: procedure expose m.
parse arg m, arg
    do tx=m.m.trans.0 by -1 to 1
        arg = repAll(arg, word(m.m.trans.tx, 1),
            , subword(m.m.trans.tx, 2))
        end
    call mAdd m'.OUT', arg
    nx = m.m.out.0
    cmp = m.m.cmp
    c = m.cmp.nx
    if nx > m.cmp.0 then do
        if nx = m.cmp.0+1 & \ m.m.moreOutOK then
            call tstErr m, 'more new Lines' nx
        end
    else if c \== arg then do
        do cx=1 to min(length(c), length(arg)) ,
             while substr(c, cx, 1) == substr(arg, cx, 1)
             end
         msg = 'old line' nx '<> new overnext, firstDiff' cx',',
                 'len old' length(c)', new' length(arg)

        if cx > 10 then
            msg = overlay('|', msg, cx-10)
        call tstErr m, msg
        say c
        end
    say arg
    return 0
endProcedure tstOut

tstWriteO: procedure expose m.
parse arg m, var
    cl = objClass(var, '')
    if cl == '' then do
        if var == '' then
            call tstOut t, 'tstR: @ obj null'
        else
            call tstOut t, 'no class for' var 'in tstWriteO|'
        end
    else if abbrev(var, m.o.escW) then do
        call tstOut t, o2String(var)
        end
    else if cl == m.class.classV then do
        call tstOut t, m.var
        end
    else if oKindOf(var, 'JRW') then do
        call tstOut t, 'tstWriteO kindOf JRW jWriteNow begin <<<'
        call jWriteNow m, var
        call tstOut t, 'tstWriteO kindOf JRW jWriteNow end   >>>'
        end
    else if oKindOf(var, 'ORun') then do
        call tstOut t, 'tstWriteO kindOf ORun oRun begin <<<'
        call oRun var
        call tstOut t, 'tstWriteO kindOf ORun oRun end   >>>'
        end
    else do
        do tx=m.m.trans.0 by -1 to 1 ,
                while word(m.m.trans.tx, 1) \== var
            end
        if tx < 1 then
            call mAdd M'.TRANS', var 'tstWriteoV' || (m.m.trans.0+1)
        call classOut , var, 'tstR: '
        end
    return
endProcedure tstWriteO

tstReadO: procedure expose m.
parse arg m, arg
    if right(m, 3) == '.IN' then
       m = left(m, length(m)-3)
    else
        call err 'tstReadO bad m' m
    ix = m.m.inIx + 1
    m.m.inIx = ix
    if ix <= m.m.in.0 then do
        call tstOut m, '#jIn' ix'#' m.m.in.ix
        return s2o(m.m.in.ix)
        end
    call tstOut m, '#jIn eof' ix'#'
    return ''
endProcedure tstReadO

tstFilename: procedure expose m.
parse arg suf, opt
    if m.err.os == 'TSO' then do
        dsn = dsn2jcl('~tmp.tst.'suf)
        if opt = 'r' then do
            if sysDsn("'"dsn"'") \== 'DATASET NOT FOUND' then
                call adrTso "delete '"dsn"'"
            call csiOpen 'TST.CSI', dsn'.**'
            do while csiNext('TST.CSI', 'TST.FINA')
                say 'deleting csiNext' m.tst.fina
                call adrTso "delete '"m.tst.fina"'"
                end
            end
        return dsn
        end
    else if m.err.os == 'LINUX' then do
        if abbrev(suf, '/') then
            fn = suf
        else
            fn = .Stream%%new('~/tmp/tst/'suf)%%qualify /* full path */
        cx = lastPos('/', fn)
        if cx > 0 then do
            dir = left(fn, cx-1)
            if \sysIsFileDirectory(dir) then
                call adrSh "mkdir -p" dir
            if \sysIsFileDirectory(dir) then
                call err 'tstFileName could not create dir' dir
            end
        if opt \= 'r' then
            nop
        else if sysIsFile(fn) then
            call sysFileDelete fn
        else if sysIsFileDirectory(fn) then
            call adrSh 'rm -r' fn
        return fn
        end
    else
        call err 'tstFilename does not implement os' m.err.os
endProcedure tstFilename

/*--- say total errors and fail if not zero --------------------------*/
tstTotal: procedure expose m.
    say '######'
    say '######'
    say '######' m.tst.tests 'tests with' ,
                 m.tst.err 'errors in' m.tst.errNames
    say '######'
    say '######'
    if m.tst.err \== 0 then
        call err m.tst.err 'errors total'
    return
endProcedure tstTotal

/*--- test err: message, count it and continue -----------------------*/
tstErr: procedure expose m.
parse arg m, msg
    say '### error' msg
    m.m.err = m.m.err + 1
    m.tst.err = m.tst.err + 1
    nm = m.m.name
    if wordPos(nm, m.tst.errNames) < 1 then
        m.tst.errNames = m.tst.errNames nm
    return 0
endProcedure tstErr

/*--- tstErrHandler: intercept errors --------------------------------*/
tstErrHandler: procedure expose m.
parse arg ggTxt
    m = m.tst.act
    if m == '' then
        call err ggTxt
    m.m.errHand = m.m.errHand + 1
    call errMsg ggTxt
    call tstOut m.tst.act, '*** err:' m.err.1
        do x=2 to m.err.0
            call tstOut m, '    e' (x-1)':' m.err.x
            end
    return 0
endSubroutine tstErrHandler

tstTrc: procedure expose m.
parse arg msg
    m.tst.trc = m.tst.trc + 1
    say 'tstTrc' m.tst.trc msg
    return m.tst.trc
endProcedure tstTrc

/*--- tstIni: global initialization ----------------------------------*/
tstIni: procedure expose m.
    if m.tst.ini \== 1 then do
        m.tst.ini = 1
        call mapIni
        m.tst.err = 0
        m.tst.trc = 0
        m.tst.errNames = ''
        m.tst.tests = 0
        m.tst.act = ''
        end
    if m.tst.ini.j \== 1 & m.j.ini == 1 then do
        m.tst.ini.j = 1
          call classNew 'n Tst u JRWO', 'm',
             , "jReadO return tstReadO(m)",
             , "jWrite call tstOut m, line",
             , "jWriteO call tstWriteO m, var"
        end
    if m.tst.ini.e \== 1 & m.pipe.ini == 1 then do
        m.tst.ini.e = 1
        end
    return
endProcedure tstIni
/* copx tst    end   **************************************************/
/* copx tstData begin *************************************************/
tstData: procedure expose m.
parse arg ty 2 le 'n' nu, l, r, num
    abs = abs(num)
    if nu \== '' then do
        if abs // 5 = 0 then
            return 'null' || (abs % 5 // nu + 1)
        end
    if ty = 'c' then do
        if le = '' then
            le = 8
        le = abs // le + 1
        if r = '' then
            r = '+'
        return left(l || num || r, le, right(r, 1))
        end
    if pos(ty, 'ief') < 1 then
        call err 'bad type' ty
    nn = abs
    if abbrev(num, '-') | abbrev(num, '+') then
        parse var num si 2 nn
    else
        si = ''
    if ty == 'e' then
        ex = 'e' || left('-', abs // 2) || (abs // 15)
    else
        ex = ''
    if le \== '' then
        nn = right(nn, abs // max(1, le - length(si||ex)) + 1, 1)
    if ty \== 'i' & (abs // 4) \= 0 & length(nn) > 1 then
            nn = overlay('.', nn, length(nn) - abs // length(nn))
     return si || nn || ex
endProcedure tstData

tstDataClassFo: procedure expose m.
parse arg flds
    ty = ''
    do fx=1 by 2 to words(flds)
        if word(flds, fx) = '.' then
            ty = ty', v'
        else
            ty = ty', f' word(flds, fx) 'v'
        end
    t = classNew('n* tstData u' substr(ty, 2))
    fo = oNew(m.t.name)
    fs = oFlds(fo)
    do fx=1 to m.fs.0
        f = fo || m.fs.fx
        m.f = word(flds, 2*fx)
        end
    return fo
endProcedure tstDataClassFo


tstDataClassOut: procedure expose m.
parse arg flds, f, t
    fo = tstDataClassFo(flds)
    fs = oFlds(fo)
    do x=f to t
        o = oCopy(fo)
        do fx=1 to m.fs.0
            na = substr(m.fs.fx, 2)
            f = o || m.fs.fx
            m.f = tstData(m.f, na, '+'na'+', x)
            end
        call outO o
        end
    return
endProcedure tstDataClassOut
/* copx tstData end ***************************************************/
/* copy tstAll end   **************************************************/
/* copy time begin -----------------------------------------------------
 11.05.23 wk: numeric digits transparent: in jeder Procedure drin
              time2jul, tst externalisiert
----------------------------------------------------------------------*/
/*--- read timeZoneOffset and leapSeconds registers
        and set variables for uniq ----------------------------------*/
timeReadCvt: procedure expose m.
parse arg debug
    numeric digits 15
    /* offsets documented in z/OS Data Areas  Vol.1 */
    cvtOH      = '00000010'          /* cvt control block Address */
    cvtext2O   = x2d('00000560') /* offset  to extension 2    */
    cvtldtoO   = x2d('00000038') /* offset to timezone    */
    cvtlsoO    = x2d('00000050') /* offset to leapSeconds */

    /* CVT CB        address               + extention2   */
    cvtExt2A       = C2D(STORAGE(cvtOH,4)) + cvtext2O
    /* cvtLdto timeZone              address +offset      */
    m.timeZone     = c2d(STORAGE(d2x(cvtext2A+cvtldtoO, 8), 8))
    m.timeStckUnit = 1e-6 / 256 / 16
    /* cvtLso LeapSecs               address +offset      */
    m.timeLeap     = C2D(STORAGE(d2x(cvtext2A+cvtlsoO, 8), 8))
    m.timeUQDigits = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ012345678'
                         /* find lrsn of day 0 */
    m.timeUQZero = timeGmt2Lrsn('2004-12-31-00.00.22.000000')
                         /* 0 out last 6 bits  */
    m.timeUQZero = b2x(overlay('000000', x2b(m.timeUQZero), 43))
    if debug == 1 then do
      say 'stckUnit          =' m.timeStckUnit
      say 'timeLeap          =' d2x(m.timeLeap,16) '=' m.timeLeap ,
                   '=' format(m.timeLeap * m.timeStckUnit, 9,3) 'secs'
      say 'timeZone          =' d2x(m.timeZone,16) '=' m.timeZone,
                   '=' format(m.timeZone  * m.timeStckUnit, 6,3) 'secs'
      say "cvtext2_adr       =" d2x(cvtExt2A, 8)
      say 'timeUQZero        =' m.timeUQZero
      say 'timeUQDigis       =' ,
                    length(m.timeUQDigits) 'digits' m.timeUQDigits
    end
    m.timeReadCvt = 1
    return
endSubroutine timeReadCvt

timestampParse:
    parse arg yyyy'-'mo'-'dd'-'hh'.'mm'.'ss'.'ffffff
    return

/*--- GMT timestamp yyyy-mm.... -> stck value char(8)
         BLSUXTID is described in z/OS V1R7.0 MVS IPCS Customization
         BLSUXTID format : mo/dd/yyyy hh:mm:ss.ffffff ---------------*/
timeGmt2Stck: procedure expose m.
    parse arg tst
    call timestampParse tst
    tDate = mo'/'dd'/'yyyy' 'hh':'mm':'ss'.'ffffff
    ACC=left('', 8, '00'x)
    ADDRESS LINKPGM "BLSUXTID TDATE ACC"
    RETURN acc
endProcedure timeGmt2Stck

/*--- GMT timestamp yyyy-mm.... -> stck value in hex(16) ------------*/
timeGmt2LRSN: procedure expose m.
    return c2x(left(timeGmt2Stck(arg(1)), 6))
endProcedure timeGmt2LRSN

/*--- LZT (Locale Zurich Tst -> stck value in hex(16) ---------------*/
timeLZT2LRSN: procedure expose m.
parse arg tst
    numeric digits 23
    if m.timeReadCvt \== 1 then
        call timeReadCvt
    return left(d2x(c2d(timeGmt2Stck(tst)) ,
                     - m.timeZone + m.timeLeap, 16), 12)
endProcedure timeLZT2LRSN
/*--- conversion from Stck Clock Value to GMT Timestamp
        BLSUXTOD is described in z/OS V1R7.0 MVS IPCS Customization
        input -> + leapseconds -> output ----------------------------*/
timeStck2Gmt: PROCEDURE expose m.
parse arg stck
  stck = left(stck, 8, '00'x)
  TDATE = COPIES('0' , 26)
  ADDRESS LINKPGM "BLSUXTOD stck TDATE"
  /* return format   : mo/dd/yyyy hh:mm:ss.ffffff */
  /* Timestamp format: yyyy-mm-dd-hh.mm.ss.ffffff */
  parse var TDATE mo '/' dd '/' yyyy hh ':' mm ':' ss '.' ffffff
RETURN yyyy'-'mo'-'dd'-'hh'.'mm'.'ss'.'ffffff
endProcedure timeStck2Gmt

/*--- conversion from Lrsn Clock Value to GMT Timestamp -------------*/
timeLrsn2Gmt:
    return timeStck2Gmt(x2c(arg(1)))
endProcedure timeLrsn2Gmt

/*--- conversion from Lrsn Clock Value to LZT Local Zurich Time -----*/
timeLrsn2LZT: procedure expose m.
parse arg lrsn
    numeric digits 23
    if m.timeReadCvt \== 1 then
        call timeReadCvt
    return timeStck2Gmt(d2c(x2d(left(lrsn, 16, 0)) ,
                           + m.timeZone-m.timeLeap))
endProcedure timeLrsn2LZT

/*--- timestamp to julian --------------------------------------------*/
time2jul: procedure expose m.
parse arg yyyy '-' mm '-' dd '-'
        /* date function cannot convert to julian, only from julian
            ==> guess a julian <= the correct and
                try the next values
        */
    j = trunc((mm-1) * 29.5) + dd
    yy = right(yyyy, 2)
    do j=j by 1
        j = right(j, 3, 0)

        d = date('s', yy || j, 'j')
        if substr(d, 3) = yy || mm || dd then
            return yy || j
        end
    return
endProcedure time2jul
/* copy time end -----------------------------------------------------*/
/* copy fmt    begin **************************************************/
/*--- format the first arg by the format in the second ---------------*/
fmt: procedure
parse arg v, f 2 l
    if abbrev('-', f) then
        return v
    else if f == 'l' then
        return left(v, l)
    else if f == 'r' then
        return right(v, l)
    else if f == 'f' then do
        parse value l'.0.0.' with b '.' a '.' e '.'
        return format(v, b, a, e, 0)
        end
    else if f == 'e' then do
        parse var l b '.' a '.' e '.'
        if b == '' then b = 2
        if a == '' then a = 2
        if e == '' then e = 2
        res = format(v, b, a, e, 0)
        y = length(res)-e-1
        if substr(res, y) = '' then
            return left(res, y-1)left('E', e+1, 0)
        else if substr(res, y+1, 1) == '+' then
            return left(res, y)substr(res, y+2)
        else if substr(res, y+2, 1) == '0' then
            return left(res, y+1)substr(res, y+3)
        else
            call err 'formatoverflow' f || l 'for' v '-->' res
        end
     else if f = 's' then
        if l == '' then
            return strip(v, 't')
        else
            return strip(v, l)
    else if f == 'w' then do
        parse var l st ',' le
        return substr(v, st, le)
        end
    else
        call err 'bad format' f l 'for' v
endProcedure fmt

/*--- format special (title, null Value also for numbers) ------------*/
fmtS: procedure expose m.
parse arg v, ty 2 l
    if ty == 'f' then do
        if \ dataType(v, 'n') then do
            parse value l'.0.0.' with b '.' a '.' e '.'
            return right(v, b + a + (a \== 0) + e + 2 * (e > 0))
            end
        end
    else if ty == 'e' then do
        if \ dataType(v, 'n') then do
            parse var l b '.' a '.' e '.'
            if b == '' then b = 2
            if a == '' then a = 2
            if e == '' then e = 2
            return right(v, b + a + (a \== 0) + e + (e > 0))
            end
        end
    return fmt(v,  ty || l)
endProcedure fmtS
fmtTime: procedure expose m.
parse arg s, signed
    return fmtUnits(s, 't', signed==1)
endProcedure fmtTime

fmtDec: procedure expose m.
parse arg s, signed
    return fmtUnits(s, 'd', signed==1)
endProcedure fmtDec

fmtUnits: procedure expose m.
parse arg s, scale, signed
    if s >= 0 then
        res = fmtUnitsNN(s, scale, wi)
    else
        res = '-'fmtUnitsNN(abs(s), scale, wi)
    len = m.fmt.units.scale.f.length + signed
    if length(res) <= len then
       return right(res, len)
    if \ abbrev(res, '-') then
        return right(right(res, 1), len, '+')
    if length(res) = len+1 & datatype(right(res, 1), 'n') then
        return left(res, len)
    return right(right(res, 1), len, '-')
endProcedure fmtUnits

fmtUnitsNN: procedure expose m.
parse arg s, scale
    sf = 'FMT.UNITS.'scale'.F'
    sp = 'FMT.UNITS.'scale'.P'
    if m.sf \== 1 then do
        call fmtIni
        if m.sf \== 1 then
            call err 'fmtUnitsNN bad scale' scale
        end

    do q=3 to m.sp.0 while s >= m.sp.q
        end
    do forever
        qb = q-2
        qu = q-1
        r = format(s / m.sp.qb, ,0)
        if q > m.sf.0 then
            return r || substr(m.sf.units, qb, 1)
        if r < m.sf.q * m.sf.qu then
            return (r % m.sf.qu) || substr(m.sf.units, qu, 1) ,
                              || right(r //m.sf.qu, m.sf.width, 0)
            /* overflow because of rounding, thus 1u000: loop back */
        q = q + 1
        end
endProcedure fmtUnitsNN

fmtIni: procedure expose m.
    if m.fmt.ini == 1 then
        return
    m.fmt.ini = 1
    call fmtIniUnits 't', '?smhd', 0 100 60 60 24 100, 0.01, 2
    call fmtIniUnits 'd', '?.kMGTPE', 0 copies('1000 ',8), 0.001, 3
    return
endProcedure fmtIni

fmtIniUnits: procedure expose m.
parse arg sc, us, fact, prod, wi
    sf = 'FMT.UNITS.'sc'.F'
    sp = 'FMT.UNITS.'sc'.P'
    m.sf.0 = words(fact)
    if length(us) + 1 <> m.sf.0 then
        call err 'fmtIniUnits mismatch' us '<==>' fact
    m.sf.1 = word(fact, 1)
    m.sp.1 = prod
    do wx=2 to m.sf.0
        wx1 = wx-1
        m.sf.wx = word(fact, wx)
        m.sp.wx = m.sp.wx1 * m.sf.wx
        end
    m.sp.0 = m.sf.0
    m.sf.units = us
    m.sf.width = wi
    m.sf.length= 2 * wi + 1
    m.sf = 1
    return
endProcedure fmtIniUnits

/* copy fmt    end   **************************************************/
/* copy fmtF   begin **************************************************/
fmtFCsvAll: procedure expose m.
parse arg fSep
    if fSep = '' then
        fSep = ','
    if \ inO(i) then
        return
    f = oFlds(i)
    li = ''
    do fx=1 to m.f.0
        li = li',' substr(m.f.fx, 2)
        end
    call out substr(li, 3)
    do until \ inO(i)
        li = ''
        do fx=1 to m.f.0
            if m.f.fx = '' then do
                li = li',' m.i
                end
            else do
                fld = substr(m.f.fx, 2)
                li = li',' m.i.fld
                end
            end
        call out substr(li, 3)
        end
    return
endProcedure fmtFCsvAll

fmtFAdd: procedure expose m.
parse arg m
    fx = m.m.0
    do ax=2 to arg()
        fx = fx + 1
        parse value arg(ax) with m.m.fx.fld m.m.fx.fmt m.m.fx.tit
        end
    m.m.0 = fx
    return m
endProcedure fmtFAdd

fmtFAddFlds: procedure expose m.
parse arg m, st
    fx = m.m.0
    do sx=1 to m.st.0
        fx = fx + 1
        parse value m.st.sx with m.m.fx.fld m.m.fx.fmt m.m.fx.tit
        end
    m.m.0 = fx
    return m
endProcedure fmtFAddFlds

fmtF: procedure expose m.
parse arg m, st
    if arg() >= 3 then
        mid = arg(3)
    else
        mid = ' '
    li = ''
    do fx=1 to m.m.0
        f = st || m.m.fx.fld
        li = li || mid || fmtS(m.f, m.m.fx.fmt)
        end
    return substr(li, 1 + length(mid))
endProcedure fmtF

fmtFTab: procedure expose m.
parse arg m, rdr, wiTi
    if m == '' then
        m = 'FMTF.F'
    return fmtFWriteSt(fmtFReset('FMTF.F'), j2Buf(rdr)'.BUF', wiTi)
endProcedure fmtFTab

fmtFReset: procedure expose m.
parse arg m
    m.m.0 = 0
    return m
endProcedure fmtFReset

fmtFWriteSt: procedure expose m.  ?????????
parse arg m, st, wiTi
    if m.st.0 < 1 then
        return 0
    if m.m.0 < 1 then
        call fmtFAddFlds m, oFlds(m.st.1)
    call fmtFDetect m, st
    if wiTi \== 0 then
        call out fmtFTitle(m)
    do sx=1 to m.st.0
        call out fmtF(m, m.st.sx)
        end
    return st.0
fmtFWriteSt

fmtFTitle: procedure expose m.
parse arg m
    if arg() >= 2 then
        mid = arg(2)
    else
        mid = ' '
    li = ''
    do fx=1 to m.m.0
        if m.m.fx.tit \= '' then
            t = m.m.fx.tit
        else if m.m.fx.fld = '' then
            t = '='
        else
            t = substr(m.m.fx.fld, 1+abbrev(m.m.fx.fld, '.'))
        li = li || mid || fmtS(t, m.m.fx.fmt)
        end
    return substr(li, 1 + length(mid))

    res = ''
    fs = m.form.FLDS
    do ix=1 to m.fs.0
        res = res fmtS(m.fs.ix, m.form.ix)
        end
    return substr(res, 2)
endProcedure fmtFldTitle


fmtFldTitle: procedure expose m.
parse arg form
    res = ''
    fs = m.form.FLDS
    do ix=1 to m.fs.0
        res = res fmtS(m.fs.ix, m.form.ix)
        end
    return substr(res, 2)
endProcedure fmtFldTitle

fmtFld: procedure expose m.
parse arg form, st
    res = ''
    fs = m.form.FLDS
    do ix=1 to m.fs.0
        f = m.fs.ix
        res = res fmt(m.st.f, m.form.ix)
        end
    return substr(res, 2)
endProcedure fmtData

fmtFldSquash: procedure expose m.
parse arg newFo, class, src
    fs = oFlds(class)
    do fx = 1 to m.fs.0
        fd = m.fs.fx
        lMi = 9e9
        lMa = 0
        rMi = 9e9
        rMa = 0
        len = 0
        do sx = 1 to m.src.0
            x = verify(m.src.sx.fd, ' ', 'n')
            if x < 1 then
                iterate
            lMi = min(lMi, x)
            lMa = max(lMa, x)
            x = length(strip(m.src.sx.fd, 't'))
            rMi = min(rMi, x)
            rMa = max(rMa, x)
            end
        if rMa = 0  then
            m.newFo.fx = 'w1,1'len
        else
            m.newFo.fx = 'w'lMi',' || (rMa+1-lMi)
        end
    m.newFo.0 = m.fs.0
    m.newFo.flds = fs
    return newFo
endProcedure fmtFldSquash

fmtFDetect: procedure expose m.
parse arg m, st
    do fx=1 to m.m.0
        if m.m.fx.fmt = '' then
            m.m.fx.fmt = fmtFDetect1(st, m.m.fx.fld)
        end
    return m
endProcedure fmtDetect

fmtFDetect1: procedure expose m.
parse arg st, suf
    aMa = -1
    aCnt = 0
    aDiv = 0
    nCnt = 0
    nMi = ''
    nMa = ''
    nDi = -1
    nBe = -1
    nAf = -1
    eMi = ''
    eMa = ''
    do sx=1 to m.st.0
        f = m.st.sx || suf
        v = m.f
        aMa = max(aMa, length(v))
        if \ dataType(v, 'n') then do
            aCnt = aCnt + 1
            if length(v) > 100 then
                aDiv = 99
            else if aDiv <=3 then
                if aDiv.v \== 1 then do
                    aDiv.v = 1
                    aDiv = aDiv + 1
                    end
            iterate
            end
        nCnt = nCnt + 1
        if nMi == '' then
            nMi = v
        else
            nMi = min(nMi, v)
        if nMa == '' then
            nMa = v
        else
            nMa = max(nMa, v)
        parse upper var v man 'E' exp
        if exp \== '' then do
            en = substr(format(v, 2, 2, 9, 0), 7)
            if en = '' then
                en = exp
            if eMi == '' then
                eMi = en
            else
                eMi = min(eMi, en)
            if eMa == '' then
                eMa = en
            else
                eMa = max(eMa, en)
            end
        parse upper var man be '.' af
        nBe = max(nBe, length(be))
        nAf = max(nAf, length(af))
        nDi = max(nDi, length(be || af))
        end
/*  say 'suf' suf aCnt 'a len' aMa 'div' aDiv
    say '   ' nCnt 'n' nMi'-'nMa 'be' nBe 'af' nAf,
            'di' nDi 'ex' eMi'-'eMa */
    if nCnt = 0 | aDiv > 3 then
        newFo = 'l'max(0, aMa)
    else if eMi \== '' then do
        f1  = substr(format(nMa, 2, 2, 9, 0), 7)
        if f1 \= '' then
            eMa = max(eMa, f1)
        newFo = 'e' || (1+(eMi < 0)) || '.' || (max(0, nDi-1))'.' ,
            || max(length(eMa+0), length(eMi+0))
        end
    else if nAf > 0 then
        newFo ='f'nBe'.'nAf
    else
        newFo ='f'nBe'.0'
/*  say '   ' newFo  */
   return newFo
endProcedure fmtFDetect1

fmtFldRW: procedure expose m.
parse arg fo
    ty = oGetClassPara(m.j.in)
    call assert 'oFlds(ty) == m.fo.flds', 'fo different flds than class'
    call out fmtFldTitle(fo)
    do while in(ii)
        call out fmtFld(fo, ii)
        end
    return
endProcedure fmtClassRW

fmtFldSquashRW: procedure expose m.
parse arg in, opCl
    if in = '' then
        in = m.j.in
    if opCl == 'opCl' then
        call jOpen in, 'r'
    ty = oGetClassPara(in)
    flds = oFlds(ty)
    st = 'FMT.CLASSAD'
    do ix=1 while jRead(in, st'.'ix)
        end
    m.st.0 = ix - 1
    fo = fmtFldSquash(sqFo, ty, st)
    call out fmtFldTitle(fo)
    do ix = 1 to m.st.0
        call out fmtFld(fo, st'.'ix)
        end
    if opCl == 'opCl' then
        call jClose in
    return
endProcedure fmtFldSquashRW
/* copy fmtF  end  * **************************************************/
/* copy sort begin ****************************************************/
sort: procedure expose m.
parse arg i, o, cmp
    if cmp == '' then
        m.sort.comparator = "cmp = m.l.l0 <<= m.r.r0"
    else if length(cmp) < 6 then
        m.sort.comparator = "cmp = m.l.l0" cmp "m.r.r0"
    else if pos(';', cmp) < 1 then
        m.sort.comparator = "aLe = l'.'l0; aRi = r'.'r0; cmp =" cmp
    else
        m.sort.comparator = "aLe = l'.'l0; aRi = r'.'r0;" cmp
    call sort1 i, 1, m.i.0, o, 1, sort.work, 1
    m.o.0 = m.i.0
    return
endProcedure sort

sort1: procedure expose m.
parse arg i, i0, le, o, o0, w, w0
    if le <= 3 then do
        if le = 3 then do
            call sortMerge i, i0, i0+1, i, i0+1, i0+2, w, w0
            call sortMerge i, i0+2, i0+3, w, w0, w0+2, o, o0
            end
        else if le = 2 then
            call sortMerge i, i0, i0+1, i, i0+1, i0+2, o, o0
        else if le = 1 then
            m.o.o0 = m.i.i0
        return
        end
    h = (le + 1) % 2
    call sort1 i, i0,   h,    o, o0+le-h, w, w0
    call sort1 i, i0+h, le-h, w, w0,      o, o0
    call sortMerge o, o0+le-h, o0+le, w, w0, w0+le-h, o, o0
    return
endProcedure sort1

sortMerge: procedure expose m.
parse arg l, l0, le, r, r0, re, o, o0
    do while l0 < le & r0 < re
        interpret m.sort.comparator
        if cmp then do
            m.o.o0 = m.l.l0
            l0 = l0 + 1
            end
        else do
            m.o.o0 = m.r.r0
            r0 = r0 + 1
            end
        o0 = o0 + 1
        end
    do while l0 < le
        m.o.o0 = m.l.l0
        l0 = l0 + 1
        o0 = o0 + 1
        end
    do while r0 < re
        m.o.o0 = m.r.r0
        r0 = r0 + 1
        o0 = o0 + 1
        end
    return
endProcedure sortMerge
/* copy sort end   ****************************************************/
/* copy match begin ***************************************************/
/************************************* begin     copy      match ******/
/*--- wildCard matching with the following wildchars:
          * 0-n chars
          ? 1 char
      fill matched expressions instem st if st is non empty
      return 1 if mask matches wert ----------------------------------*/
match: procedure expose m.
parse arg wert, mask, st
    if st == '' then
        return matchRO(wert, mask)
    m.st.0 = -9
    return matchSt(wert, mask, st, 0)
endProcedure match

/*--- return the fixed prefix of maskt -------------------------------*/
matchPref: procedure
arg mask, suff
    ix = verify(mask, '*?', 'm')
    if ix = 0 then
        return mask
    else
        return left(mask, ix-1)suff
endProcedure matchPref

/*--- return true if mask matches wert -------------------------------*/
matchRO: procedure
arg wert, mask
    ix = verify(mask, '*?', 'm')
    if ix < 1 then return (mask == wert)
    if length(wert) < ix-1 then return 0
    if left(mask, ix-1) \== left(wert, ix-1) then return 0
    if substr(mask, ix, 1) == '?' then do
        if length(wert) < ix then return 0
        return matchRO(substr(wert, ix+1), substr(mask, ix+1))
        end
    mask = substr(mask, ix+1)                /* * 0 - n Chars */
    do ex = 1+length(wert) to ix by -1
        if matchRO(substr(wert, ex), mask) then return 1
        end
    return 0
endProcedure matchRO

/*--- wildCard matching: fill matched expressions instem st
      return 1 if mask matches wert ----------------------------------*/
matchSt: procedure expose m.
parse arg wert, mask, st, sx
    ix = verify(mask, '*?', 'm')
    if ix < 1 then do
        if mask \== wert then
            return 0
        m.st.0 = sx
        return 1
        end
    if \ abbrev(wert, left(mask, ix-1)) then
        return 0
    reMa = substr(mask, ix+1)
    sx = sx + 1
    if substr(mask, ix, 1) == '?' then do /* ? 1 Character */
        if length(wert) < ix then
            return 0
        m.st.sx = substr(wert, ix, 1)
        return matchSt(substr(wert, ix+1), reMa, st, sx)
        end
    do lx = 1+length(wert) to ix by -1 /* greedy: from all to empty */
        if matchSt(substr(wert, lx), reMa, st, sx) then do
            m.st.sx = substr(wert, ix, lx-ix)
            return 1
            end
        end
    return 0
endProcedure matchSt

matchTrans: procedure expose m.
parse arg mask, st
    r = ''
    ox = 1
    sx = 0
    ix = verify(mask, '*?', 'm')
    do sx=1 to m.st.0 while ix > 0
        if sx > m.st.0 then
            call err 'matchTrans('mask',' st') has only' ,
                                     m.st.0 'variables'
        r = r || substr(mask, ox, ix-ox)m.st.sx
        ox = ix+1
        ix = verify(mask, '*?', 'm', ox)
        end
    if ix > 0 then
        call err 'matchTrans('mask',' st') has only' ,
                                     m.st.0 'variables'
    return r || substr(mask, ox)
endProcedure matchTrans
/* copy match end *****************************************************/
/* copy comp begin *****************************************************
    the shell compiler
         syntax and semantics of the shell language see javaDoc
***********************************************************************/
/***** initialisation *************************************************/
/*--- module initialisation ------------------------------------------*/
compIni: procedure expose m.
    if m.compIni = 1 then
        return
    m.compIni = 1
    call pipeIni
    call scanReadIni
    cc = classNew('n Compiler u')
    call mNewArea 'COMP.AST', '='
    m.comp.stem.0 = 0
    m.comp.idChars = m.scan.alfNum'@_'
    call compIniKI '=', "skeleton", "expression or block"
    call compIniKI '.', "object", "expression or block"
    call compIniKI '-', "string", "expression or block"
    call compIniKI '@', "shell", "pipe or $;"
    call compIniKI ':', "assignAttributes", "assignment or statement"
    call compIniKI '|', "assignTable", "header, sfmt or expr"
    call compIniKI '#', "text", "literal data"
    return
endProcedure compIni

compReset: procedure expose m.
parse arg m
    m.m.scan = scanRead(,,'|0123456789')
    m.m.chDol = '$'
    m.m.chSpa = ' ' || x2c('09')
    m.m.chNotBlock = '${}='
    m.m.chNotWord = m.m.chNotBlock || m.m.chSpa
    m.m.chKind = '.-=#@:|'
    m.m.chKin2 = '.-=#;:|'
    m.m.chKinC = '.-=@'
    m.m.chOp = '.-<@|?'
    m.m.chOpNoFi = '.-@|?'
    return m
endProcedure compReset

compIniKI: procedure expose m.
parse arg ki, m.comp.kind.ki.name, m.comp.kind.ki.expec
return

/*--- constructor of Compiler ----------------------------------------*/
comp: procedure expose m.
parse arg src
    nn = oNew('Compiler')
    if src \== '' then
        m.nn.cmpRdr = o2File(src)
    else
        m.nn.cmpRdr = ''
    return nn
endProcedure comp

/**** user interface **************************************************/
/*--- compile and run ------------------------------------------------*/
compRun: procedure expose m.
parse arg spec, inO, ouO, infoA
    cmp = comp(inO)
    r = compile(cmp, spec)
    if infoA \== '' then
        m.infoA = 'run'
    if ouO \== '' then
        call pipe '+F', ouO
    call oRun r
    if ouO \== '' then
        call pipe '-'
    return 0
endProcedure compRun

/*--- compile the source and return an oRunner with the code ---------*/
compile: procedure expose m.
parse arg m, spec
    call compReset m
    kind = '@'
    spec = strip(spec)
    do while pos(left(spec, 1), m.m.chKind) > 0
       kind = left(spec, 1)
       spec = strip(substr(spec, 2))
       end
    call scanSrc m.m.scan, spec
    m.m.compSpec = 1
    res = compCUnit(m, kind, 1)
    do while abbrev(m.m.dir, '$#')
        call envPutO substr(m.m.dir, 3, length(m.m.dir)-4),
            , compCUnit(m, right(m.m.dir, 1))
        end
    if \ m.m.compSpec then
        call jClose m.m.scan
    return res
endProcedure compile

/*--- cUnit = compilation Unit = separate compilations
              no nesting| --------------------------------------------*/
compCUnit: procedure expose m.
parse arg m, ki, isFirst
    s = m.m.scan
    code = ''
    do forever
        m.m.dir = ''
        src = compUnit(m, ki, '$#')
        if \ compDirective(m) then
            return scanErr(s, m.comp.kind.ki.expec "expected: compile",
                 m.comp.kind.ki.name "stopped before end of input")
        if \ compIsEmpty(m, src) then do
                /*wkTst??? allow assTb in separatly compiled units */
            if isFirst == 1 & m.src.type == ':' ,
              & pos(' ', src) < 1 &  abbrev(src, 'COMP.AST.') then
                call mAdd src, '', ''
            code = code || ';'compAst2code(m, src, ';')
            end
        if m.m.dir == 'eof' then do
            if \ m.m.compSpec | m.m.cmpRdr == '' then
                return oRunner(code)
            call scanReadReset s, m.m.cmpRdr
            call jOpen s, m.j.cRead
            m.m.compSpec = 0
            end
        else if length(m.m.dir) == 3 then
            ki = substr(m.m.dir, 3, 1)
        else
            return oRunner(code)
        end
endProcedure compCUnit

/*--- directives divide cUnits ---------------------------------------*/
compDirective: procedure expose m.
parse arg m
    m.m.dir = ''
    s = m.m.scan
    lk = scanLook(s)
    cx = pos('#', lk, 3)
    if \ abbrev(lk, '$#') then do
        if \ scanAtEnd(m.m.scan) then
            return 0
        m.m.dir = 'eof'
        return 1
        end
    else if scanLit(s, '$#end' , '$#out') then do
        m.m.dir = 'eof'
        return 1
        end
    else if pos(substr(lk, 3, 1), m.m.chKinD) > 0 then do
        m.m.dirKind = substr(lk, 3, 1)
        m.m.dir = left(lk, 3)
        end
    else if cx > 3 & pos(substr(lk, cx+1, 1), m.m.chKinD) > 0 then do
        m.m.dirKind = substr(lk, 3, 1)
        m.m.dir = left(lk, cx+1)
        end
    else
        call scanErr s, 'bad directive:' word(lk, 1)
    if \ scanLit(s, m.m.dir) then
            call scanErr m.m.scan, 'directive mismatch' m.m.dir
    return 1
endProcedure compDirective

/**** parse the whole syntax *******************************************
          currently, with the old code generation,
              parsing and code generation is intermixec
              migrating to AST should will separate these tasks
***********************************************************************/
compUnit: procedure expose m.
parse arg m, kind, stopper
    s = m.m.scan
    if pos(kind, m.m.chKind';') < 1 then
        return scanErr(s, 'bad kind' kind 'in compUnit(...'stopper')')
    if stopper == '}' then do
        if kind \== '#' then do
            one = compExpr(m, 'b', translate(kind, ';', '@'))
            if compisEmpty(m, one) then
                return compAST(m, 'block')
            else
                return compAST(m, 'block', one)
            end
        tx = '= '
        cb = 1
        do forever /* scan nested { ... } pairs */
            call scanVerify s, '{}', 'm'
            tx = tx || m.s.tok
            if scanLit(s, '{') then
                cb = cb + 1
            else if scanLook(s, 1) \== '}' then
                call scanErr s, 'closing } expected'
            else if cb <= 1 then
                leave
            else if scanLit(s, '}') then
                cb = cb - 1
            else
                call scanErr s, 'closing } programming error'
            tx = tx || m.s.tok
            end
        return compAst(m, 'block', tx)
        end
    else if pos(kind, '.-=') > 0 then do
        return compData(m, kind)
        end
    else if pos(kind, '@;') > 0 then do
        call compSpNlComment m
        return compShell(m)
        end
    else if kind == '|' | kind == ':' then do
        if kind == '|' then
            res = compAssTab(m)
        else
            res = compAssAtt(m)
        if abbrev(res, '#') then
            return compAst(m, ':', substr(res, 3))
        else
            return compAst(m, ';', substr(res, 3))
        end
    else if kind == '#' then do
        res = compAST(m, 'block')
        call compSpComment m
        if \ scanReadNl(s) then
            call scanErr s,
                , 'space nl expected in heredata until' stopper
        do while \ abbrev(m.s.src, stopper)
            call mAdd res, '=' strip(m.s.src, 't')
            if \ scanReadNl(s, 1) then do
                if stopper = '$#' then
                    leave
                call scanErr s, 'eof in heredata until' stopper
                end
            end
        return res
        end
endProcedure compUnit

/*--- compile data lines return stmts or expr ------------------------*/
compData: procedure expose m.
parse arg m, ki
    s = m.m.scan
    lines = compAST(m, 'block')
    do forever
        state = 'f'
        do forever
            l = compExpr(m, 'd', ki)
            if \ scanReadNL(s) then
                state = 'l'
            if \ compIsEmpty(m, l) | (state=='' &\abbrev(l, 'c')) then
                call mAdd lines, l
            if state == 'l' then
                leave
            call compComment m
            state = ''
            end
        one = compStmt(m)
        if one == '' then
            leave
        call mAdd lines, one
        call compComment m
        end
    return lines
endProcedure compData

/*--- compile shell and return code ----------------------------------*/
compShell: procedure expose m.
parse arg m
    a = compAst(m, ';')
    m.a.text = ''
    do forever
        one = compPipe(m)
        if one \== '' then
            m.a.text = m.a.text || one
        if \ scanLit(m.m.scan, '$;') then
            return a
        call compSpNlComment m
        end
endProcedure compShell

/*--- compile an expression, type d=data, b=block w=word, s=strip ---*/
compExpr: procedure expose m.
parse arg m, type, ki
    s = m.m.scan
    if length(type) \== 1 | pos(type, 'dsbw') < 1 then
        call scanErr s, 'bad type' type 'in compExpr(,' type','ki ')'
    if length(ki) \== 1 | pos(ki, m.m.chKind';') < 1 then
        call scanErr s, 'bad kind' ki 'in compExpr(,' type','ki ')'
    charsNot = if(type=='b', m.m.chNotBlock,
            , if(type=='w', m.m.chNotWord,m.m.chDol))
    laTx = 9e9
    st = compNewStem(m)
    gotCom = 0
    if pos(type, 'sb') > 0 then do
        call compSpComment m
        gotCom = gotCom | m.m.gotComment
        end
    ki2 = if(ki=='=', '-=', ki)
    do forever
        if scanVerify(s, charsNot, 'm') then do
            call mAdd st, ki2 m.s.tok
            laTx = min(laTx, m.st.0)
            end
        else do
            pr = compPrimary(m, ki, 1)
            if pr = '' then
                leave
            call mAdd st, pr
            laTx = 9e9
            end
        gotCom = gotCom | compComment(m)
        end
    do rx = m.st.0 by -1 to laTx while m.st.rx = ki2
        end
    if pos(type, 'bs') > 0 then do
       if rx >= laTx then
           m.st.rx = strip(m.st.rx, 't')
       m.st.0 = rx
       end
   if ki == '=' then
       if m.st.0 < 1 then
           return 'e='
       else
           ki = '-'
    return substr('ce', 2-gotCom, rx < 1)ki'0*' st
endProcedure compExpr

/*--- compile a primary and return code ------------------------------*/
compPrimary: procedure expose m.
parse arg m, ki, withChain
    s = m.m.scan
    if \ scanLit(s, '$') then
        return ''
    if scanString(s) then     /*wkTst??? brauchts beides? */
        return translate(ki, '.--', '@;=')'=' m.s.val
    if withChain then do
        if scanLit(s, '.', '-') then do
            op = m.s.tok
            return op'('compCheckNN(m, compObj(m, op),
                , 'objRef expected after $'op)
            end
        end
    if pos(ki, '.<') >= 1 then
        f = '. envGetO'
    else
        f = '- envGet'
    if scanLit(s, '{') then do
        if scanLit(s, '?') then
            f = '- envIsDefined'
        else if scanLit(s, '>') then
            f = '- envReadO'
        res = compCheckNE(m, compExpr(m, 'b', '='), 'var name')
        if \scanLit(s, '}') then
            call scanErr s, 'closing } missing after ${'
        return f'(' || comp2Code(m, '-'res)')'
        end
    if scanName(s) then
        return f"('"m.s.tok"')"
    call scanBack s, '$'
    return ''
endProcedure compPrimary

compObj: procedure expose m.
parse arg m, ki
    s = m.m.scan
    pk = compOpKi(m, '?')
    one = compBlock(m, ki pk)
    if one \== '' then
        return compAstAddOp(m, one, ki)
    pp = ''
    if pk \== '' then do
        ki = right(pk, 1)
        pp = left(pk, length(pk)-1)
        end
    one = compPrimary(m, translate(ki, '.', '@'), 0)
    if one \== '' then
        return pp || one
    if ki == '.' then do
        if scanLit(s, 'compile') then do
            if pos(scanLook(s, 1), m.m.chKinC) < 1 then
                call scanErr s, 'compile kind expected'
            call scanChar s, 1
            return pp'. compile(comp(j2Buf()), "'m.s.tok'")'
            end
        end
    call scanBack s, pk
    return ''
endProcedure compObj

compFile: procedure expose m.
parse arg m
    res = compCheckNE(m, compExprBlock(m, '='),
        , 'block or expr expected for file')
    if \ abbrev(res, '.') then do
        end
    else if substr(res, verify(res, '.', n), 3) == '0* ' then do
        st = word(res, 2)
        if m.st.0 = 1 & abbrev(m.st.1, '. envGetO(') then
                /* if undefined variable use new jbuf */
            if pos(')', m.st.1) == length(m.st.1) then
                m.st.1 = left(m.st.1, length(m.st.1)-1) ,
                         || ", '-b')"
        end
    return compASTAddOp(m, res, '<')
endProcedure compFile

/*--- scan an operator chain and a kind ------------------------------*/
compOpKi: procedure expose m.
parse arg m, opt
    s = m.m.scan
    op = ''
    if opt == '<' then do
        call scanVerify s, m.m.chOpNoFi
        op = m.s.tok
        if scanLit(s, '<') then
            return op'<'
        end
    call scanVerify s, m.m.chOp
    op = op || m.s.tok
    k1 = scanLook(s, 1)
    if k1 \== '' & pos(k1, m.m.chKind) > 0 then do
        call scanLit s, k1
        return op || k1
        end
    if opt == '?' | op == '' | pos(right(op, 1), m.m.chKind) > 0 then
        return op
    call scanErr s, 'no kind after ops' op
endProcedure compOpKi

/*--- block or expression --------------------------------------------*/
compExprBlock: procedure expose m.
parse arg m, ki
    s = m.m.scan
    pk = compOpKi(m, '<')
    if right(pk, 1) == '<' then
        return compAstAddOp(m, compFile(m), pk)
    res = compBlock(m, ki pk)
    if res \== '' then
        return res
    if pk \== '' then
        lk = right(pk, 1)
    else
        lk = translate(ki, '.', '@')
    res = compExpr(m, 's', lk)
    if res \== '' then
        return compASTAddOp(m, res, pk)
    call scanBack s, pk
    return res
endProcedure compExprBlock

/*--- compile a pipe and return code ---------------------------------*/
compPipe: procedure expose m.
parse arg m
    s = m.m.scan
    inp = ''
    out = ''
    stmts = ''
    sBef = ''
    do forever
        if scanLit(s, '$<') then
            inp = inp',' comp2Code(m, compFile(m))
        else if scanLit(s, '$>>', '$>') then
            if out <> '' then
                call scanErr s, 'duplicate output'
            else
                out = substr('?FA', length(m.s.tok), 1) ,
                      comp2Code(m, compFile(m))
        else if scanLit(s, '$|') then do
            if stmts == '' then
                call scanErr s, 'stmts expected before $|'
            sBef = sBef"; call pipe 'N|'" || stmts
            stmts = ''
            end
        else do
            one = comp2code(m, ';'compStmts(m))
            if one == '' then
                leave
            stmts = stmts';' one
            end
        call compSpNlComment m
        end
    if sBef == '' then do
        if inp == '' & out == '' then
            return stmts
        if stmts == '' then do
            call scanErr s,'no statemtents in pipe'
            stmts = '; call pipeWriteAll'
            end
        end
    else if stmts == '' then
        call scanErr s, 'stmts expected after $|'
    inO = left('f', inp \== '')
    inp = substr(inp, 3)
    parse var out ouO out
    if sBef == '' then
        return "; call pipe '+"ouO || strip(inO"',"out","inp, "T", ","),
                || stmts"; call pipe '-'"
    else
        return "; call pipe '+N" || strip(inO"',,"inp, "T", ",") ,
               || substr(sBef, 17),
               || "; call pipe '"left(ouO'P', 1)"|'" ,
                  strip(","out,"T", ",") || stmts"; call pipe '-'"
endProcedure compPipe

/*--- compile stmts (stmt or java) -----------------------------------*/
compStmts: procedure expose m.
parse arg m
    lst = compNewStem(m)
    do forever
        one = compStmt(m)
        if one == '' then do
            do forever
                la = compExpr(m, 's', ';')
                if compIsEmpty(m, la) then
                    leave
                la = strip(comp2code(m, ';'la))
                if right(la, 1) \== ',' then do
                    one = one la
                    leave
                    end
                one = one strip(left(la, length(la)-1))
                call compSpNlComment m
                end
             if one = '' then
                 return 'l*' lst
             one = ';' one
             end
        call mAdd lst, one
        call compSpNlComment m
        end
endProcedure compStmts

/*--- compile a single statement -------------------------------------*/
compStmt: procedure expose m.
parse arg m
    s = m.m.scan
    if scanLit(s, "$=") then do
        res = compAss(m)
        if res == '' then
            call scanErr s, 'assignment expected after $='
        return res
        end
    if scanLit(s, '$@') then do
        if \ scanName(s) then
            return 'l;' comp2Code(m,
                , '@'compCheckNE(m, compExprBlock(m, '@'),
                , "block or expr expected after $@"))
        fu = m.s.tok
        if fu == 'for' | fu == 'with' | fu == 'forWith' then do
            v = comp2Code(m, '-'compCheckNE(m, compExpr(m, 'b', '='),
                   , "variable name after $@for"))
            call compSpComment m
            st = comp2Code(m, ';'compCheckNN(m, compStmt(m, 'with'),
                     , "statement after $@for" v))
            if fu == 'forWith' then
                st = 'call envSetWith envGetO('v');' st
            if abbrev(fu, 'for') then
                st = 'do while envReadO('v');' st'; end'
            if fu == 'forWith' then
                st = 'call envPushWith "";' st '; call envPopWith'
            else if fu == 'with' then
                st = 'call envPushName' v';' st '; call envPopWith'
            return ';' st
            end
        if fu == 'do' then do
            call compSpComment m
            var = if(scanName(s), m.s.tok, '')
            pre = var
            call compSpComment m
            if scanLook(s, 1) \== '=' then
                var = ''
            call compSpComment m
            suf = compExpr(m, 's', ';')
            if \ compIsEmpty(m, suf) then
                suf = comp2Code(m, ':'suf)
            else if var \== '' then
                call scanErr s, "$@do control construct expected"
            else
                suf = ''
            call compSpComment m
            st = comp2Code(m, ";"compCheckNN(m, compStmt(m),
                     , "$@do statement"))
            return "; do" pre suf";",
                if(var \== "", "call envPut '"var"'," var";") st"; end"
            end
        if fu == 'ct' then do
            call compSpComment m
            call compInter(comp2Code(m, ';'compCheckNN(m, compStmt(m),
                , 'ct statement')));
            return '; '
            end
        if fu == 'proc' then do
            nm = compCheckNE(m, compExpr(m, 'b', '='), "proc name")
            call compSpComment m
            st = oRunner(comp2Code(m, ';'compCheckNN(m, compStmt(m),
                , 'proc statement')));
            call envPutO compInter('return' comp2Code(m, '-'nm)), st
            return '; '
            end
        if scanLit(s, '(') then do
            call compSpComment m
            if \ scanLit(s, ')') then
                call scanErr s, 'closing ) expected after $@'fu'('
            return '; call oRun envGetO("'fu'")'
            end
        if scanLit(s, '{', '.{', '-{', '={') then do
            br = m.s.tok
            a = compExpr(m, 'b', if(br == '{', '-', left(br, 1)))
            if \ scanLit(s, '}') then
                call scanErr s, 'closing } expected after $@'fu || br
            res = '; call oRun envGetO("'fu'")'
            if pos(left(a, 1), 'ec') < 1 then
                res = res',' comp2code(m, a)
            return res
            end
        call scanErr s, 'procCall, for, do, ct, proc' ,
                 'or objRef expected after $@'
        end
    if scanLit(s, '$$') then
        return  compCheckNN(m, compExprBlock(m, '='),
            , 'block or expression expected after $$')
    return ''
endProcedure compStmt

compAss: procedure expose m.
parse arg m, aExt
    s = m.m.scan
    sla = scanLook(s)
    slx = verify(sla, m.m.chKind'/'m.m.chOp, 'n')
    if slx > 0 then
       sla = left(sla, slx-1)
    sla = pos('/', sla) > 0
    nm = ''
    if \ sla then do
        nm = compExpr(m, 'b', '=')
        if compIsEmpty(m, nm) then
            return ''
        nm = comp2Code(m, '-'nm)
        if \ scanLit(s, "=") then
            return scanErr(s, '= expected after $=' nm)
        end
    m.m.bName = ''
    vl = compCheckNE(m, compExprBlock(m, '='),
        , 'block or expression after $=' nm '=')
    if sla then
        if m.m.bName == '' then
            call scanErr s, 'missing blockName'
        else
            nm = "'"m.m.bName"'"
    va = compAstAftOp(m, vl)
    if va \== '' & m.va.type == ':' then do
        pu = "call envPushName" nm
        if abbrev(m.m.astOps, '<') then
            call mAdd va, pu ", 'asM'", "call envPopWith"
        else if abbrev(m.m.astOps, '<<') then
            call mAdd va, pu ", 'asM'", "call envPopWith"
        else
            call mAdd va, pu ", 'as1'", "call envPopWith"
        return va
        end
    if compAstKind(m, vl) == '-' then
        return '; call envPut' nm',' comp2Code(m, vl)aExt
    else
        return '; call envPutO' nm',' comp2Code(m, '.'vl)aExt
endProcedure compAss

/*--- block deals with the correct kind and operators
      the content is parsed by compUnit ------------------------------*/
compBlock: procedure expose m.
parse arg m, dKi ops
    s = m.m.scan
    if \ scanLit(s, '{', '¢', '/') then
        return ''
    start = m.s.tok
    if (ops \== '' & pos(right(ops, 1), m.m.chKind) < 1) ,
        | pos(dKi, m.m.chKind) < 1 then
        return scanErr(s, 'bad kind' ops 'for block (def' dKi')')
    if ops == '' then do
        ki = dKi
        end
    else do
       ki = right(ops, 1)
       ops = left(ops, length(ops)-1)
       end
    starter = start
    if start == '{' then
        stopper = '}'
    else if start == '¢' then
        stopper = '$!'
    else do
        call scanVerify s, '/', 'm'
        starter = '/'m.s.tok'/'
        stopper = '$'starter
        if \scanLit(s, '/') then
            call scanErr s, 'ending / after stopper' stopper 'expected'
        end
    res = compUnit(m, ki, stopper)
    if \ scanLit(s, stopper) then do
        if pos(ki, ':|') < 1 | \ abbrev(stopper, '$') then
            call scanErr s, 'ending' stopper 'expected after' starter
        else if \ scanLit(s, substr(stopper, 2)) then
            call scanErr s, 'ending' stopper 'or' substr(stopper, 2),
                    'expected after' starter
        end
    if abbrev(starter, '/') then
        m.m.bName = substr(starter, 2, length(starter)-2)
    else
        m.m.bName = ''
    if m.res.text == '' then
        m.res.text = ' '
    return compAstAddOp(m, res, ops)
endProcedure compBlock

compAssAtt: procedure expose m. aClass
parse arg m
    res = ''
    aClass = ''
    s = m.m.scan
    last = ''
    do forever
        if compSpNlComment(m, '*') then do
            end
        else if pos(scanLook(s, 1), '/!}') > 0 then do
            leave
            end
        else if scanLit(s, ';', '$;') then do
            if last = ';' then
                res = res'; call envWithNext'
            last = ';'
            end
        else do
            s1 = compAss(m, ", 1")
            if s1 == '' then do
                s1 = compStmt(m)
                if s1 == '' then
                    leave
                end
            else do
                if last == ';' then
                    res = res'; call envWithNext'
                last = 'a'
                end
            res = res';' comp2code(m, ';'s1)
            end
        if res ==  '' then
            res = ';'
        end
    if last == '' then
        return res
    else
        return '# call envWithNext "b";' res ,
               '; call envWithNext "e";'
endProcedure compAssAtt

compAssTab: procedure expose m. aClass
parse arg m
    s = m.m.scan
    call compSpNlComment m, '*'
    hy = 0
    tab = ''
    do forever
        bx = m.s.pos
        if \ scanName(s) then
            leave
        hx = hy + 1
        h.hx.beg = bx
        if hx > 1 & bx <= h.hy.end then
            call scanErr s, 'header overlap' m.s.tok 'pos' bx
        h.hx = m.s.tok
        tab = tab', f' m.s.tok 'v'
        h.hx.end = m.s.pos
        hy = hx
        call compSpComment m, '*'
        end
    if tab \== '' then
       aClass = classNew('n* Ass u' substr(tab, 3))
    res = ''
    isFirst = 1
    do while scanReadNl(s)
        do forever
            call compSpNlComment m, '*'
            s1 = compStmt(m)
            if s1 == '' then
                leave
            res = res';' comp2code(m, ';'s1)
            last = 's'
            end
        if pos(scanLook(s, 1), '/!}') > 0 then
            leave

        do qx=1
            bx = m.s.pos
            s1 = compExpr(m, 'w', '=')
            if compIsEmpty(m, s1) then
                leave
            ex = m.s.pos
            if ex <= bx then
                return scanErr(s, 'colExpr backward')
            do hy=1 to hx while bx >= h.hy.end
                end
            hz = hy+1
            if hz <= hx & ex > h.hz.beg then
                call scanErr s, 'value on hdr' h.hy 'overlaps' h.hz
            else if hy > hx | bx >= h.hy.end | ex <= h.hy.beg then
                call scanErr s, 'value from' bx 'to' ex ,
                    'no overlap with header' h.hy
            if qx > 1 then
                nop
            else if isFirst then do
                res = res"; call envWithNext 'b', '"aClass"'"
                isFirst = 0
                end
            else
                res = res"; call envWithNext"
            res = res"; call envPut '"h.hy"'," comp2Code(m, "-"s1)", 1"
            call compSpComment m, '*'
            end
        end
    if isFirst then
        return res
    else
        return '#' res"; call envWithNext 'e'"
endProcedure compassTab

/**** lexicals ********************************************************/
/*--- skip a comment. return 0 if there is none ----------------------*/
compComment: procedure expose m.
parse arg m
    s = m.m.scan
    res = 0
    do forever
        if scanLit(s, '$**') then
            m.s.pos = 1 + length(m.s.src) /* before next nl */
        else if scanLit(s, '$*+') then
            call scanReadNl s, 1
        else if scanLit(s, '$*(') then do
            do forever
                if scanVerify(s, m.m.chDol, 'm') then iterate
                if scanReadNl(s) then iterate
                if compComment(m) then iterate
                if \ scanLit(s, '$') then
                    call scanErr s, 'source end in comment'
                if scanLit(s, '*)') then
                    return 1
                if scanLit(s, '$') then iterate
                if scanString(s) then iterate
                end
            end
        else
            return res
        res = 1
        end
endProcedure compComment

/*--- skip spaces and comments ---------------------------------------*/
compSpComment: procedure expose m.
parse arg m, xtra
    s = m.m.scan
    sp = 0
    co = 0
    do forever
        if scanVerify(s, m.m.chSpa) then
            sp = 1
        else if compComment(m) then
            co = 1
        else if xtra == '' then
            leave
        else if \ scanLit(s, xtra) then
            leave
        else do
            co = 1
            m.s.pos = 1+length(m.s.src)
            end
        end
    m.m.gotComment = co
    return co | sp
endProcedure compSpComment

/*--- skip spaces, NLs and comments ----------------------------------*/
compSpNlComment: procedure expose m.
parse arg m, xtra
    found = 0
    do forever
        if compSpComment(m, xtra) then
            found = 1
        else if scanReadNl(m.m.scan) then
            found = 1
        else
            return found
        end
endProcedure compSpComment
/**** small helper routines ******************************************/
compInter: procedure expose m.
    interpret arg(1)
    return
endProcedure compInter

/*--- if va == null then issue an error with msg --------------------*/
compCheckNN: procedure expose m.
parse arg m, va, msg
    if va == '' then
        call scanErr m.m.scan, msg 'expected'
    return va
endProcedure compCheckNN

/*--- return true iff expression is empty ---------------------------*/
compIsEmpty: procedure expose m.
parse arg m, ex
    if pos(' ', ex) < 1 & pos('COMP.AST.', ex) > 0 then do
         a = substr(ex, pos('COMP.AST.', ex))
         a = compAstAftOp(m, a)
         if m.a.type = 'block' then
             return 0 /* m.a.0 == 0 */
         else
             return m.a.text == ''
         end
    e1 = word(ex, 1)
    return ex = '' | verify(e1, 'ec', 'm') > 0
endProcedure compIsEmpty

/*--- if va == null or empty then issue an error with msg -----------*/
compCheckNE: procedure expose m.
parse arg m, ex, msg
    e1 = left(ex, 1)
    if compIsEmpty(m, ex) then
        call scanErr m.m.scan, msg 'expected'
    return ex
endProcedure compCheckNE

/**** AST = Astract Syntax Graph ***************************************
          goal is to migrate to migrate to old codeGenerator to AST
***********************************************************************/
/*--- create a new AST -----------------------------------------------*/
compAST: procedure expose m.
parse arg m, tp
    n = mNew('COMP.AST')
    m.n.type = tp
    if wordPos(tp, 'block') > 0 then do
        do cx=1 to arg()-2
            m.n.cx = arg(cx+2)
            end
        m.n.0 = cx-1
        end
    else do
        m.n.text = arg(3)
        m.n.0 = 0
        end
    m.a.isAnnotated = 1
    return n
endProcedure compAST

/*--- add operandands to an AST -------------------------------------*/
compASTAddOp: procedure expose m.
parse arg m, a, ops
    if ops == '' then
        return a
    if pos('COMP.AST.', a) < 1 then
        return ops || a
    if m.a.type = 'ops' then do
        m.a.text = ops || m.a.text
        return a
        end
    n = compAst(m, 'ops', ops)
    call mAdd n, a
    return n
endProcedure compAstAddOp

/*--- return the first AST after the operand chain
          put the operands into m.m.astOps ---------------------------*/
compASTaftOp: procedure expose m.
parse arg m, a
    m.m.astOps = ''
    if \ abbrev(a, 'COMP.AST.') then
        return ''
    do while m.a.type == 'ops'
        m.m.astOps = m.a.text || m.m.astOps
        a = m.a.1
        end
    return a
endProcedure compASTAftOpType

/*--- return the kind of an AST --------------------------------------*/
compASTKind: procedure expose m.
parse arg m, a
    m.m.astOps = ''
    if \ abbrev(a, 'COMP.AST.') then
        return left(a, 1)
    c = a
    do while m.c.type == 'ops'
        if m.c.text \== '' then
            return left(m.c.text, 1)
        c = m.c.1
        end
    if a == c then
        return '?'
    return compAstKind(m, c)
endProcedure compASTKind

/*--- return the code for an AST with operand chain trg --------------*/
compAst2Code: procedure expose m.
parse arg m, a, aTrg
    if pos(' ', a) > 0 | \ abbrev(a, 'COMP.AST.') then
        return comp2Code(m, aTrg || a)
    if \ abbrev(a, 'COMP.AST.') then
        call err 'bad ast' a
    do while m.a.type == 'ops'
        aTrg = aTrg || m.a.text
        a = m.a.1
        end
    trg = compAstOpsReduce(m, aTrg)
    if m.a.type == translate(right(trg, 1), ';', '@') then do
        if length(trg) == 1 then do
            if pos(trg, ';@') > 0  then
                return 'do;' m.a.text ';end'
            else
                return m.a.text
            end
        else
            return compAST2Code(m, a, left(trg, length(trg)-1))
        end
    if m.a.type == 'block' then do
        op = right(trg, 1)
        tLe = left(trg, length(trg)-1)
        call compASTAnnBlock m, a
        if pos(m.a.maxKind, '.-<') > 0 & pos(op, '.-|?') > 0 then do
            if m.a.0 = 1 then do
                o1 = if(op=='-', '-', '.')
                r = compAst2Code(m, m.a.1, o1)
                r = compC2C(m, o1, compAstOpsReduce(m, tLe||o1), r)
                if pos(op, '.-<') > 0 then
                    return '('r')'
                else
                    return r
                end
            if m.a.0 = 0 & op == '?' then
                return compC2C(m, '.', compAstOpsReduce(m, tLe'.'))
            if op == '-' then do
                cd = ''
                do cx = 1 to m.a.0
                    cd = cd '('compAst2Code(m, m.a.cx, '-')')'
                    end
                return compC2C(m, '-', trg, substr(cd, 2))
                end
            call scanErr m.m.scan, 'bad block cardinality' aTrg
            end
        cd = ''
        do cx = 1 to m.a.0
            cd = cd';' compAst2Code(m, m.a.cx, ';')
            end
        if right(trg, 1) == '@' then
            trg = overlay(';', trg, length(trg))
        return compC2C(m, ';', trg, 'do;' cd'; end')
        end
    else if m.a.type == ';' then do
        return compC2C(m, ';', trg, m.a.text)
        if right(trg, 1)  == '-' then
            return compAst2Code(m, "- o2String('"oRunner(m.a.text)"')",
                , trg)
        if right(trg, 1)  == '<' then
            return compAst2Code(m, "< o2File('"oRunner(m.a.text)"')",
                , trg)
        end
    else if m.a.type == ':' then do
        if m.a.0 = 0 then
            call mAdd a, 'call envPushWith', 'call envPopWith'
        return compC2C(m, ';', trg,
            , 'do;' m.a.1';' m.a.text';' m.a.2'; end')
        end
    call scanErr m.m.scan, 'implement type' m.a.type 'for' a 'trg' trg
endProcedure compAst2Code

/*--- do a chain of code transformations
          from code of kind fr by opList


    op  as from kind               operand
     =  constant                   -
     -  rexx string Expr           cast to string/ concat file/output
     .  rexx object Expr           cast to object
     <  rexx file   Expr           cast to file
     ;  rexx Statements            execute, write obj, Str
     @  -                          cast to ORun, run an obj, write file
     |  -                          extract exactlyOne
     ?  -                          extract OneOrNull
----------------------------------------------------------------------*/

compC2C: procedure expose m.
parse arg m, fr, opList, code
oldCode = fr':' code '==>' opList '==>'
    do tx=length(opList) by -1 to 1
        to = substr(opList, tx, 1)
        if fr == to then
            iterate
        nn = '||||'
        if to == '-' then do
            if fr == '=' then
                 nn = quote(code)
            else if abbrev(fr code, '. envGetO(') then
                nn =  'envGet(' || substr(code, 9)
            else if fr == ';' then
                nn = "o2String('"oRunner(code)"')"
            else if pos(fr, '.<') > 0 then
                nn = "o2String("code")"
            end
        else if to == '.' then do
            if fr == '=' then
                 nn = quote(s2o(code))
            else if abbrev(fr expr, '- envGet(') then
                nn = 'envGetO('substr(expr, 8)
            else if fr == '-' then
                nn = 's2o('code')'
            else if fr == '<' then
                 nn = code
            else if fr == ';' then
                nn = quote(oRunner(code))
            end
        else if to == '@' then do
            if fr == '.' then
                nn = 'call oRun' code
            else if fr == '<' then
                nn = 'call pipeWriteAll' code
            else if fr == ';' then
                nn = code
            to = ';'
            end
        else if to == ';' then do
            if fr == '=' then
                nn = 'call out' quote(code)
            else if fr == '-' then
                nn = 'call out' code
            else if fr == '.' | fr == '<' then
                nn = 'call outO' code
            end
        else if to == ':' then do
            if fr == '=' then
                 nn = quote(code)
            else
                nn = code
            to = ';'
            end
        else if to == '<' then do
            if fr == '-' then
                 nn = 'file('code')'
            else if fr == '=' then
                 nn = "file("quote(code)")"
            else if fr == '.' then
                nn = 'o2File('code')'
            else if fr == ';' then
                nn = 'o2File('oRunner(code)')'
            end
        else if to == '|' | to == '?' then do
            if fr == '<' | fr == '.' then
                nn = 'fileSingle('code if(to == '|','', ", ''")')'
            else if fr == '@' | fr == ';' then
                      /* ???wkTst optimize: do it directly */
                nn = compC2C(m, fr, to'<', code)
            to = '.'
            end
        if nn == '||||' then
            return scanErr(m.m.scan,
                ,'compC2C bad fr' fr 'to' to 'list' opList)
        fr = to
        code = nn
        end
    return code
endProcedure compC2C

/*--- reduce a chain of operands -------------------------------------*/
          eliminate duplicates and identity transformations ----------*/
compAstOpsReduce: procedure expose m.
parse arg m, ops
    ki = ops
    ki  = space(translate(ops, ' ', 'e('), 0)
    fr = ';<; <;< -.- <@<'
    to = ';   <   -   <  '
    fr = fr '== -- .. << ;; @@ @('
    to = to '=  -  .  <  ;  @  (@'
    wc = words(fr)
    do until ki = oldKi
        oldKi = ki
        do wx=1 to wc
            do forever
                wf = word(fr, wx)
                cx = pos(wf, ki)
                if cx < 1 then
                    leave
                ki = left(ki, cx-1) || word(to, wx) ,
                                    || substr(ki, cx+length(wf))
                end
            end
        end
    return ki
endProcedure compASTOpsReduce

/*--- annotate a block if necessary ----------------------------------*/
compASTAnnBlock: procedure expose m.
parse arg m, a
    if m.a.isAnnotated == 1 then
        return
    mk = ''
    do cx=1 to m.a.0
       c = m.a.cx
       if pos(' ', c) > 0 | \ abbrev(c, 'COMP.AST.') then
           ki = left(c, 1)
       else if \ abbrev(c, 'COMP.AST.') then
           return scanErr(m.m.scan, 'bad ast' c 'parent' a) /0
       else
           call scanErr m.m.scan, 'implement kind of' c 'type' m.c.type
       if pos(ki, '=-.<;@:|') < 1 then do
           if pos(ki, 'el0') < 1 then
               call err 'bad kind' ki
           end
       else if mk == '' | pos(ki, '=-.<;@:|') > pos(mk, '=-.<;@:|') then
           mk = ki
       end
    m.a.maxKind = mk
    m.a.isAnnotated = 1
    return
endProcedrue compASTAnnBlock
/**** old code generator ***********************************************
          plan is to replace it with AST ******************************/
/*--- transform abstract syntax tree to code ------------------------
  wkTst??? codeTree besser dokumentieren
           optimizer an/und/abschaltbar machen
                (test sollte laufen, allenfalls gehen rexx variabeln
                                       verloren)
        syntax tree is simple, only where
        * a transformation is needed from several places or
        * must be deferred for possible optimizations

sn = ops*                 syntax node            op or syntax function
    ( '=' constant                            none
    | '-' rexxExpr     yielding string            cast to string
    | '.' rexxExpr     yielding object            cast to object
    | '<' rexxExpr     yielding file            cast to file
    | ';' rexxStmts                            execute, write obj, Str
    | '*' stem         yielding multiple sn    none
    )

ops = '@'                                    cast to ORun
    | '|'                                    single
    | 'e'                                    empty = space only
    | 'c'                                    empty = including a comment
    | '0'                                    cat expression parts
    | 'l'                                    cat lines
    | '('                                    add ( ... ) or do ... end
---------------------------------------------------------------------*/

comp2Code: procedure expose m.
parse arg m, ki expr
    if expr == '' & pos(' ', ki) < 1 & pos('COMP.AST.', ki) > 0 then do
         cx = pos('COMP.AST.', ki)
         return compAst2Code(m, substr(ki, cx), left(ki, cx-1))
         end
    /* wkTst??? optimize: use stem with code and interpret */
    if expr = '' & pos(right(ki, 1), '@;=') < 1 then
        return scanErr(m.m.scan, 'comp2Code empty expr' ki expr)
    do forever
        ki = comp2CodeKind(m, ki)
        if length(ki) <= 1 then
            if pos(ki, m.m.chKind';<') > 0 then
                return expr
            else
                call err 'comp2Code bad return' ki expr
        fr = right(ki, 1)
        to = substr(ki, length(ki)-1, 1)
        opt = ''
        if pos(to, 'l0') > 0 | (to == '*' & fr == '*') then do
            opt = to
            to = substr(ki, length(ki)-2, 1)
            end
        toBef = to
        nn = '||||'
        if fr == '*' then do
            if opt == '' then
                call scanErr m.m.scan, 'no sOp for * kind' ki expr
            cat = comp2CodeCat(m, expr, opt, to)
            parse var cat to nn
            end
        else if to == '-' then do
            if fr == '=' then
                 nn = quote(expr)
            else if abbrev(fr expr, '. envGetO(') then
                nn =  'envGet(' || substr(expr, 9)
            else if fr == ';' then
                nn = "o2String('"oRunner(expr)"')"
            else if pos(fr, '.<') > 0 then
                nn = "o2String("expr")"
            end
        else if to == '.' then do
            if fr == '=' then
                 nn = quote(s2o(expr))
            else if abbrev(fr expr, '- envGet(') then
                nn = 'envGetO('substr(expr, 8)
            else if fr == '-' then
                nn = 's2o('expr')'
            else if fr == '<' then
                 nn = expr
            else if fr == ';' then
                nn = quote(oRunner(expr))
            end
        else if to == '@' then do
            if fr == '.' then
                nn = 'call oRun' expr
            else if fr == '<' then
                nn = 'call pipeWriteAll' expr
            else if fr == ';' then
                nn = expr
            to = ';'
            end
        else if to == ';' then do
            if fr == '=' then
                nn = 'call out' quote(expr)
            else if fr == '-' then
                nn = 'call out' expr
            else if fr == '.' | fr == '<' then
                nn = 'call outO' expr
            else if fr == '#' then
                nn = 'call envPushWith ;'expr'; call envPopWith'
            end
        else if to == ':' then do
            if fr == '=' then
                 nn = quote(expr)
            else
                nn = expr
            to = ';'
            end
        else if to == '<' then do
            if fr == '-' then
                 nn = 'file('expr')'
            else if fr == '=' then
                 nn = "file("quote(expr)")"
            else if fr == '.' then
                nn = 'o2File('expr')'
            else if fr == ';' then
                nn = 'o2File('oRunner(expr)')'
            end
        else if to == '(' then do
            nn = compAddBracks(m, fr, expr)
            to = fr
            end
        else if to == '|' | to == '?' then do
            if fr == '<' | fr == '.' then do
                nn = 'fileSingle('expr if(to == '|','', ", ''")')'
                to = '.'
                end
            else if fr == '@' | fr == ';' then do
                to = to'<'fr
                nn = expr
                end
            end
        if nn == '||||' then
            return scanErr(m.m.scan,
                ,'comp2code bad fr' fr 'to' toBef 'for' ki expr)
        ki = left(ki, length(ki)-2-length(opt))to
        expr = nn
        end
endProcedure comp2Code

/*--- optimize operands: eliminate duplicates and
                         identity transformations -------------------*/
comp2CodeKind: procedure expose m.
parse arg m, ki
    ki = '$'space(translate(ki, '  ', 'ce'), 0)
    fr.2 = '== -- .. << ;; (( -( .(  ;( (< @;  @@ ;@ @( $l $0 @#'
    to.2 = '=   -  .  <  ;  ( (- (.  (; <  ;   @  @  (@ $  $  ;#'
    fr.3 = ';0; ;l; -.- -;- .-. .;. ;<; ;<( <(; @(- @(l |(l ?(l'
    to.3 = ' 0;  l;   -   -   .   .   ; ;<  <;  ;(- ;(l (|l (?l'
    do until ki = oldKi
        oldKi = ki
        do le=3 by-1 to 2
            do cx=1 while cx <= length(ki)+1-le
                wx = wordPos(substr(ki, cx, le), fr.le)
                if wx > 0 then
                    ki = left(ki, cx-1) || ,
                        word(to.le, wx) || substr(ki, cx+le)
                end
            end
        end
    return substr(ki, 2)
endProcedure comp2CodeKind

/*--- generate one codeString for one stem -------------------------*/
comp2CodeCat: procedure expose m.
parse arg m, st, sOp, trgt
    toCode = trgt == '@' | trgt == ';'
    if m.st.0 < 1 & trgt \== '<' then
        return trgt
    tr1 = trgt
    if \ toCode then do
                        /* check wether we need to evaluate statements
                            and cast the outptut to an object */
        maxTy = 0
         do x=1 to m.st.0
            maxTy = max(maxTy, pos(left(m.st.x, 1), '=-.<;@'))
            end
        if trgt \== '<' then do
            if maxTy >= 5 then do
                tr1 = ';'
                toCode = 1
                end
            end
        else do                        /* handle files */
            if maxTy > 1 then do    /* not constant */
                res = ';'
                do sx=1 to m.st.0
                    res = res';' comp2Code(m, ';'m.st.sx)
                    end
                return '<'res
                end
                                    /* constant file write to jBuf */
            buf = jOpen(jBuf(), m.j.cWri)
            do sx=1 to m.st.0
                call jWrite buf, substr(m.st.sx, 3)
                end
            return '<' quote(jClose(buf))
            end
        end

    if m.st.0 = 1 then do
        if trgt == '|' | trgt == '?' then
            return left(m.st.1, 1)  comp2Code(m, m.st.1)
        else if trgt \== '<' then
            return trgt comp2Code(m, trgt || m.st.1)
        end
    tr2 = tr1
    if toCode then do
        mc = '; '
        if sOp == 0 then do
            mc = ''
            tr2 = ':'
            end
        end
    else if sOp == '0' then
        mc = if(tr1 == '.' | tr1 == '-', '', ' || ')
    else if sOp == 'l' then
        mc = ' '
    else
        call scanErr m.m.scan, 'bad sOp' sOp ,
            'in comp2CodeCat('m',' st',' sOp',' trgt')'
    if symbol('m.st.1') \== 'VAR' then
        return err("bad m."st'.1')
    sep = if(tr1 == '.' | tr1 == '-' | tr1 == '=', ' || ', ' ')
    sep = if(sOp = 0, ' || ', ' ')
    tr3 = left(tr2, sOp \== 0)
    res = comp2Code(m, tr3 || m.st.1)
    do sx = 2 to m.st.0
        if (tr2 == '.' | tr2 == '-') ,
            & (m.st.sx = '-' | m.st.sx = '.') then do
                /* empty expr is simply a rexx syntax space */
            if right(res, 1) \== ' ' then
                res = res' '
            end
        else do
            act = comp2Code(m, tr3 || m.st.sx)
            res = compCatRexx(res, act, mc, sep)
            end
        end
    return copies(trgt || sOp, tr1 \== trgt)tr1 res
endProcedure comp2CodeCat

/*--- add expression brackets if necessary --------------------------*/
compAddBracks: procedure expose m.
parse arg m, ki, ex
    if ki == ';' then
         return 'do;' ex || left(';', ex \= '') 'end'
    if \ (ki == '.' | ki == '-') then
        return ex
    ex = strip(ex)
    e1 = left(ex, 1)
    if e1 == '(' & pos('(', ex, 2) = 0 & pos(')', ex) = length(ex) then
        return ex
    if pos(e1, '"''') > 0  & pos(e1, ex, 2) = length(ex) then
        return ex
    return '('ex')'
endProcedure compAddBracks

/*--- cat two rexx parts, avoid strange effects--------------------*/
compCatRexx: procedure expose m.
parse arg le, ri, mi, sep
    if mi \== '' then
        return le || mi || ri
    lr = right(le, 1)
    rl = left(ri, 1)
    if (lr == "'" | lr == '"') then do
        if rl == lr then                /* "a","b" -> "ab" */
            return left(le, length(le)-1) || substr(ri, 2)
        else if  rl == '(' then            /* "a",( -> "a" || ( */
            return le||sep||ri            /* avoid function call    */
        end
    else if pos(lr, m.comp.idChars) > 0 then
        if pos(rl, m.comp.idChars'(') > 0 then
            return le || sep || ri        /* a,b -> a || b */
    return le || mi || ri
endProcedure compCatRexx

/*--- push an empty stem on the stack --------------------------------*/
compNewStem: procedure expose m.
parse arg m
    st = mAdd('COMP.STEM', '')
    do ix=1 to arg()-1
        m.st.ix = arg(ix+1)
        end
    m.st.0 = ix-1
    return st
endProcedure compNewStem

/* copy comp end ******************************************************/
/* copy scan begin ****************************************************
Scan: scan an input:
    scanLine(m,ln) : begin scanning a single line (string)
    scanRead??(m,ln): begin scanning all lines of an opened reader
    scanAtEnd(m)   : returns whether we reached end of input
    scanLit(m,lit) : scan Literal lit if present or return 0
    scanChar(m,n)  : scan next n characters
    scanName(m)    : scan a name
    ScanNat(m)     : scan a natural number (without sign)
    scanString(m,q): scan a String with quote q. (with doubble = 1)
    scanVerify(m,c,o): verify(...,c,o,...)
    scanKeyValue(m): scan a key = value clause (with spaces)
    scanWord(m,u)  : scan a space delimited word or a string,
                          if u=1 then uppercase non-strings
    scanErr(m, txt): error with current scan location

    m is an adress, to store our state
    if a scan function succeeds, the scan posititon is moved

returns: true if scanned, false otherwise
         m.m.tok  ==> last token
         m.m.val  ==> last value for scanString/Word/KeyValue
         m.key    ==> key for scanKeyValue
         m.m.pos ==> scan position
         m.m.src ==> scan source
***********************************************************************/
scanIni: procedure expose m.
    if m.scan.ini == 1 then
        return
    m.scan.ini = 1
    m.scan.alfLC = 'abcdefghijklmnopqrstuvwxyz'
    m.scan.alfUC = translate(m.scan.alfLC)
    m.scan.alfa = m.scan.alfLC || m.scan.alfUC
    m.scan.alfNum = m.scan.alfa || '0123456789'
    return
endProcedure scanIni

scanReset: procedure expose m.
parse arg m, n1, np, co
    m.m.rdr = ''
    m.m.jReading = 0 /* if called without jReset */
    m.m.jWriting = 0
    return scanOpts(m, n1, np, co)
endProcedure scanReset

scanOpts: procedure expose m.
parse arg m, m.m.scanName1, namePlus, m.m.scanComment
    if m.m.scanName1 == '' then
        m.m.scanName1 = m.scan.alfa
    if namePlus == '' then
        m.m.scanNameR = m.m.scanName1 || '0123456789'
    else
        m.m.scanNameR = m.m.scanName1 || namePlus
    return m
endProcedure scanOpts


/*--- begin scanning a single line -----------------------------------*/
scanSrc: procedure expose m.
parse arg m, m.m.src
    return scanOpen(m)
endProcedure scanSrc

scanOpen: procedure expose m.
parse arg m
    m.m.tok = ''
    m.m.val = ''
    m.m.key = ''
    m.m.pos = 1
    m.m.atEnd = m.m.rdr == ''
    m.m.jReading = 1
    return m
endProcedure scanOpen

/*--- return the next len characters ---------------------------------*/
scanLook: procedure expose m.
parse arg m, len
    if len == '' then
        return substr(m.m.src, m.m.pos)
    else
        return substr(m.m.src, m.m.pos,
                     , min(len, 1 + length(m.m.src) - m.m.pos))
endProcedure scanLook

/*--- scan the literal lit ------------------------------------------*/
scanLit: procedure expose m.
parse arg m
    do ax=2 to arg()
        if abbrev(substr(m.m.src, m.m.pos), arg(ax)) then do
            m.m.tok = arg(ax)
            m.m.pos = m.m.pos + length(arg(ax))
            return 1
            end
        end
    m.m.tok = ''
    return 0
endProcedure scanLit

/*--- scan the next len characters -----------------------------------*/
scanChar: procedure expose m.
parse arg m, len
    nx = 1 + length(m.m.src)
    if len \= '' then
        nx = min(m.m.pos + len, nx)
    m.m.tok = substr(m.m.src, m.m.pos, nx - m.m.pos)
    m.m.pos = nx
    return m.m.tok \== ''
endProcedure scanChar

/*--- scan a string with quote char qu -------------------------------*/
scanString: procedure expose m.
parse arg m, prefs
    m.m.tok = ''
    bx = m.m.pos
    if prefs = '' then do
        qu = substr(m.m.src, bx, 1)
        if pos(qu, "'""") < 1 then
            return 0
        ax = bx + 1
        end
    else do
        do px=1 until abbrev(substr(m.m.src, bx), p1)
            p1 = word(prefs, px)
            if p1 = '' then
                return 0
            end
        qu = right(p1, 1)
        ax = bx + length(p1)
        end
    m.m.val = ''
    do forever
        qx = pos(qu, m.m.src, ax)
        if qx < 1 then
            return scanErr(m, 'ending Apostroph('qu') missing')
        m.m.val = m.m.val || substr(m.m.src, ax, qx-ax)
        if qx >= length(m.m.src) then
            leave
        else if substr(m.m.src, qx+1, 1) <> qu then
            leave
        ax = qx+2
        m.m.val = m.m.val || qu
        end
    m.m.tok = substr(m.m.src, bx, qx+1-bx)
    m.m.pos = qx+1
    return 1
endProcedure scanString

/*--- scan a Name, first char in *.scanName1, rest in *.scanNameR ----*/
scanName: procedure expose m.
parse arg m
    if pos(substr(m.m.src, m.m.pos, 1),
                 , m.m.scanName1) <= 0 then do
        m.m.tok = ''
        return 0
        end
    return scanVerify(m, m.m.scanNameR)
endProcedure scanName

/*--- scan with verify, vOpt is passed to verify ---------------------*/
scanVerify: procedure expose m.
parse arg m, alpha, vOpt, onlyIfMatch
    if vOpt == '' then   /* empty string does not take default */
        nx = verify(m.m.src, alpha, , m.m.pos)
    else
        nx = verify(m.m.src, alpha, vOpt, m.m.pos)
    if nx = 0 then
        if onlyIfMatch == 1 then
            nx = m.m.pos
        else
            nx = length(m.m.src) + 1
    m.m.tok = substr(m.m.src, m.m.pos, nx - m.m.pos)
    m.m.pos = nx
    return m.m.tok \== ''
endProcedure scanVerify

/*--- scan a natural number (no sign, decpoint ...) ------------------*/
scanNat: procedure expose m.
parse arg m, chEn
    if \ scanVerify(m, '0123456789') then
        return 0
    if chEn \== 0 then
        if pos(scanLook(m , 1), m.m.scanNameR) > 0 then
            call scanErr m, 'illegal number end after' m.m.tok
    return 1
endProcedure ScanNat

/*--- scan an integer (optional sign, no decpoint ...) ---------------*/
scanInt: procedure expose m.
parse arg m, chEn
    call scanLit m, '+', '-'
    si = m.m.tok
    if \ scanNat(m, chEn) then do
        m.m.pos = m.m.pos - si
        return 0
        end
    m.m.tok = si || m.m.tok
    return 1
endProcedure scanInt

/*--- scan a number (optional sign, decpoint, exponent) ------------*/
scanNum: procedure expose m.
parse arg m, chEn
    sx = m.m.pos
    call scanLit m, '+', '-'
    po = scanLit(m, '.')
    if \ scanNat(m, 0) then do
        m.m.pos = sx
        return 0
        end
    if \ po then
        if scanLit(m, '.') then
            call scanNat m, 0
        if scanLit(m, 'e', 'E') then
            if \ scanInt(m, 0) then
                call scanErr m, 'exponent expected after' ,
                             substr(m.m.src, sx, m.m.pos-sx)
    m.m.tok = substr(m.m.src, sx, m.m.pos-sx)
    m.m.val = translate(m.m.tok)
    if chEn \== 0 then
        if pos(scanLook(m , 1), m.m.scanNameR) > 0 then
            call scanErr m, 'illegal number end after' m.m.tok
    return 1
endProcedure scanNum

/*--- scan a word and put value into *.val
           a word is either delimited by space or stopper
                     or a string (with single or double quotes -------*/
scanWord: procedure expose m.
parse arg m, stopper
    if scanString(m)                   then return 1
    if \scanVerify(m, ' 'stopper, 'm') then return 0
    m.m.val = m.m.tok
    return 1
endProcedure scanWord

scanType: procedure expose m.
parse arg m, opt
    m.m.tok = ''
    if scanName(m) then
        m.m.type = 'n'
    else if scanNum(m) then
        m.m.type = 0
    else if scanString(m) then
        m.m.type = left(m.m.tok, 1)
    else if scanSpaceNl(m) then
        m.m.type = 's'
    else do
        call scanChar m, 1
        m.m.type = m.m.tok
        end
    return m.m.type
endProcedure scanType

scanBack: procedure expose m.
parse arg m, tok
    if m.m.pos <= length(tok) then
        call scanErr sc, 'cannot back "'tok'" length'
    cx = m.m.pos - length(tok)
    if substr(m.m.src, cx, length(tok)) \== tok then
        call scanErr sc, 'cannot back "'tok'" value'
    m.m.pos = cx
    return
endProcedure scanBack

/*--- scan a key = word phrase
          put key into m.key and word into m.m.val -------*/
scanKeyValue: procedure expose m.
parse arg m, def
    if \ scanName(m) then
        return 0
    m.m.key = m.m.tok
    if \ scanLit(scanSkip(m), '=') then do
        m.m.val = def
        m.m.tok = ' no='
        end
    else if \scanWord(scanSkip(m)) then
        return scanErr(m, 'word expected after' m.m.key '=')
    return 1
endProcedure scanKeyValue

/*--- return true/false whether we are at the end of input ----------*/
scanAtEnd: procedure expose m.
parse arg m
    return m.m.atEnd & m.m.pos > length(m.m.src)
endProcedure scanAtEnd

/*--- skip over spaces, nl and comments (if option set) --------------*/
scanSpaceNL: procedure expose m.
parse arg m
    lastTok = m.m.tok
    if m.m.rdr \== '' then
        interpret 'res = ' objMet(m, 'scanSpaceNl')
    else
        res = scanSpaceCom(m)
    m.m.tok = lastTok
    return res
endProcedure scanSpaceNL

scanSpaceCom: procedure expose m.
parse arg m
    res = scanVerify(m, ' ')
    if m.m.scanComment \== '' then
        if abbrev(substr(m.m.src, m.m.pos), m.m.scanComment) then do
            m.m.pos = 1 + length(m.m.src)
            return 1
            end
    return res
endProcedure scanSpaceCom

/*--- skip over space, nl and comments and return m -----------------*/
scanSkip: procedure expose m.
parse arg m
    call scanSpaceNl m
    return m
endProcedure scanSkip

/*--- emit an error with current scan pos ----------------------------*/
scanErr: procedure expose m.
parse arg m, txt
    m.m.err.0 = 0
    call err 'scanErr' txt'\n'scanInfo(m, m'.ERR')
    return 0
endProcedure scanErr

scanPos: procedure expose m.
parse arg m
    if m.m.rdr \== '' then
        interpret 'return' objMet(m, 'scanPos')
    else if scanAtEnd(m) then
        return E
    else
        return 1 m.m.pos
endProcedure scanPos

scanInfo: procedure expose m.
parse arg m
    msg = 'last token' m.m.tok 'scanPosition' ,
          strip(left(substr(m.m.src, m.m.pos), 40), 't')
    om = objMet(m, 'scanInfo', '')
    if om == '' then
        return msg'\npos' m.m.Pos 'in string' strip(m.m.src, 't')
    else
        interpret 'return msg ||' om
endProcedure scanInfo
/* copy scan end   ****************************************************/
/* copy scanRead begin ************************************************/
scanReadIni: procedure expose m.
    if m.scanRead.ini = 1 then
        return
    m.scanRead.ini = 1
    call scanIni
    call jIni
    ts = classNew('n Scan u f TOK v, f VAL v, f KEY v, f TYPE v')
    call classNew 'n ScanRead u JRW', 'm',
        , 'jReset call scanReadReset m, arg, arg2, arg3',
        , 'jOpen call scanReadOpen m',
        , 'jClose call jClose m.m.rdr',
        , 'jRead call scanType m; call oClaCopy "'ts'", m, var;' ,
            'return m.m.type \== ""',
        , 'scanReadNl return scanReadNlImpl(m, unCond)',
        , 'scanSpaceNl scanReadSpaceNl(m)',
        , 'scanInfo scanReadInfo(m)',
        , 'scanPos scanReadPos(m)'
    call classNew "n EditRead u JRW", "m",
        , "jRead  return editRead(m, var)",
        , "jOpen" ,
        , "jReset m.m.linex = arg - 1"
    return
endProcedure scanReadIni

/*--- begin scanning the lines of a reader ---------------------------*/
scanRead: procedure expose m.
parse arg rdr, n1, np, co
    return scanOpts(oNew('ScanRead', rdr), n1, np, co)

scanReadReset: procedure expose m.
parse arg m, r, n1, np, co
    call scanReset m, n1, np, co
    m.m.rdr = r
    return m
endProcedure scanReadReset

scanReadOpen: procedure expose m.
parse arg m, r, n1, np, co
    call scanOpen m
    m.m.atEnd = 0
    m.m.lineX = 0
    call jOpen m.m.rdr, m.j.cRead
    call scanReadNl m, 1
    return m
endProcedure scanReadOpen

/*--- scan over next newLine
        if unCond \== 1 only if we are already at endOfLine
         return true if we scanned a NL ------------------------------*/
scanReadNl: procedure expose m.
parse arg m, unCond
    interpret objMet(m, 'scanReadNl')
endProcedure scanReadNl

/*--- implementation of scanReadNl ----------------------------------*/
scanReadNLimpl: procedure expose m.
parse arg m, unCond
    if unCond \== 1 then
        if m.m.pos <= length(m.m.src) then
            return 0
    if m.m.atEnd then
        return 0
    m.m.atEnd = \ jRead(m.m.rdr, m'.SRC')
    if m.m.atEnd then do
        m.m.pos = 1 + length(m.m.src)
        end
    else do
        m.m.pos = 1
        m.m.lineX = m.m.lineX + 1
        end
    return \ m.m.atEnd
endProcedure scanReadNLimpl

scanReadSpaceNl: procedure expose m.
parse arg m
    fnd = 0
    do forever
        if scanSpaceCom(m) then
            fnd = 1
        if \ scanReadNl(m) then
             return fnd
        fnd = 1
        end
endProcedure scanReadSpaceNl

scanReadPos: procedure expose m.
parse arg m, msg
    if scanAtEnd(m) then
        return E
    else
        return m.m.lineX m.m.pos
endProcedure scanReadPos

scanReadInfo: procedure expose m.
parse arg m, msg
    if scanAtEnd(m) then
        msg = msg'\natEnd after'
    else
        msg = msg'\npos' m.m.pos 'in'
    return msg 'line' m.m.lineX':' strip(m.m.src, 't')
endProcedure scanReadInfo

/*--- use scan sqlEdit macro --> temporarily here --------------------*/
/*--- read next line from edit data ----------------------------------*/
editRead: procedure expose m.
parse arg m, var
    m.m.lineX = m.m.lineX + 1
    if adrEdit('(ll) = line' m.m.lineX, 12) ^= 0 then
        return 0
    m.var = ll
    return 1
endProcedure editRead
/*--- search loop in edit macro --------------------------------------*/
scanSqlSeekId: procedure expose m.
parse arg m, lx, cmd, opts
    if opts = '' then
        opts = word
                     /* line 1 col 0, otherwise first word is skipped*/
    if adrEdit("cursor =" max(trunc(lx), 1) 0, 12) = 12 then
        return -1
    do while adrEdit("seek" cmd opts, 4) = 0 /* find each command*/
        call adrEdit "(fx) = cursor"
        if m.debug then do
            call adrEdit "(LI) = LINE" fx
            call debug 'scanSqlSeekId after' lx 'found' cmd 'at' fx li
            end
        call jReset m.m.rdr, fx
        call jOpen m, '<'
        m.m.lineX = fx
        do while word(scanPos(m), 1) <= fx & scanSqlClass(m)
            if m.m.sqlClass = 'i' & m.m.val == cmd then
                return fx
            end
        call jClose m
        end
    return -1
endProcedure scanSqlSeekId
/* copy scanRead end **************************************************/
/* copy scanWin begin *************************************************
     scan the the concatenation of the lines of a reader
         any token my be split over several line
         except the end-of-line-comment-token
***********************************************************************/
scanWinIni: procedure expose m.
    if m.scanWin.ini = 1 then
        return
    m.scanWin.ini = 1
    call scanReadIni
    call jIni
    call classNew 'n ScanWin u JRW', 'm',
        , 'jReset call scanWinReset m, arg, arg2, arg3',
        , 'jOpen call scanWinOpen m, arg(3) ',
        , 'jClose call scanWinClose m ',
        , 'scanReadNl return scanWinNl(m, unCond)',
        , 'scanSpaceNl scanWinSpaceNl(m)',
        , 'scanInfo scanWinInfo(m)',
        , 'scanPos  scanWinPos(m)'
    return
endProcedure scanWinIni

/*--- instanciate a new window scanner, open rdr ---------------------*/
scanWin: procedure expose m.
parse arg rdr, wiSz, wiBa, cuPo, cuLe
    return scanWinOpts(oNew('ScanWin', rdr), wiSz, wiBa, cuPo, cuLe)

/*--- set the reader and attributes of window scanner m -------------*/
scanWinReset: procedure expose m.
parse arg m, r, wiSz, wiGa, cuPo, cuLe
    call scanReset m
    m.m.rdr = r
    m.m.atEnd = 'still closed'
    return scanWinOpts(m, wiSz, wiGa, cuPo, cuLe)
endProcedure scanWinReset

/*--- set the attributes of window scanner m ------------------------*/
scanWinOpts: procedure expose m.
parse arg m, wiSz, wiGa, cuPo, cuLe
    wiSz = word(wiSz 5, 1)
    wiGa = word(wiGa 1, 1)
    m.m.cutPos = word(cuPo 1, 1)
    m.m.cutLen = word(cuLe 72, 1)
    m.m.winTot = (wiSz * 2 + wiGa) * m.m.cutLen
    m.m.posLim = (wiSz     + wiGa) * m.m.cutLen
    m.m.posOff =  wiGa * m.m.cutLen
    return m
endProcedure scanWinOpts

/*--- open reader and start scanning --------------------------------*/
scanWinOpen: procedure expose m.
parse arg m, lx
    call scanOpen m
    m.m.atEnd = 0
    if lx = '' then
        m.m.lineX = 1
    else
        m.m.lineX = lx
    m.m.pos = 1
    m.m.src = ''
    call jOpen m.m.rdr, m.j.cRead
    call scanWinRead m
    return m
endProcedure scanWinOpen

scanWinClose: procedure expose m.
parse arg m
    m.m.atEnd = 'still closed'
    call jClose m.m.rdr
    return
endProcedure scanWinClose
/*--- move the source window: cut left side and append at right side
      return number of characters cut at left ------------------------*/
scanWinRead: procedure expose m.
parse arg m
    dlt = 0
    if m.m.atEnd then
        return 0
    if m.m.pos >= m.m.posLim then do     /*  cut left side */
        dlt = m.m.pos - (m.m.pos // m.m.cutLen + m.m.posOff)
        m.m.src = substr(m.m.src, dlt+1)
        m.m.pos = m.m.pos - dlt
        m.m.lineX = m.m.lineX + dlt % m.m.cutLen
        end
    do while length(m.m.src) < m.m.winTot /* read and fill to len */
        if \ jRead(m.m.rdr, m'.'one) then do
            m.m.atEnd = 1
            return dlt
            end
        m.m.src = m.m.src || substr(m.m.one, m.m.cutPos, m.m.cutLen)
        end
    call assert 'length(m.m.src) = m.m.winTot'
    return dlt
endProcedure scanWinRead

/*--- return position of next line start -----------------------------*/
scanWinNLPos: procedure expose m.
parse arg m
    return m.m.pos + m.m.cutLen - ((m.m.pos - 1) // m.m.cutLen)

/*--- scan over spaces and comments ----------------------------------*/
scanWinSpaceNL: procedure expose m.
parse arg m
    res = 0
    do forever
        call scanWinRead m
        if scanVerify(m, ' ') then do
            res = 1
            iterate
            end
        else if scanLit(m, '/*') then do
            ex = pos('*/', m.m.src, m.m.pos+2)
            if ex <= m.m.pos then
                return scanErr(m, '*/ missing after /*')
            m.m.pos = ex+2
            res = 1
            end
        else do
            cl = length(m.m.scanComment)
            np = scanWinNlPos(m)
            if \ ( cl>0 & m.m.pos+cl <= np & m.m.scanComment ,
                    == substr(m.m.src, m.m.pos, cl)) then
                return res
            m.m.pos = np
            res = 1
            end
        end
endProcedure scanWinSpaceNl

/*--- return current position in input ------------------------------*/
scanWinPos: procedure expose m.
parse arg m
    if scanAtEnd(m) then
        return 'E'
    else
        ps = m.m.pos - 1
    return (m.m.lineX + (ps % m.m.cutLen)) (ps // m.m.cutLen + 1)
endProcedure scanWinPos

/*--- return a description of the current scan position --------------*/
scanWinInfo: procedure expose m.
parse arg m
    p = scanWinPos(m)
    if p == 'E' then do
        res = 'atEnd after'
        p = m.m.lineX - 1 + length(m.m.src) % m.m.cutLen
        end
    else do
        res = 'pos' word(p, 2) 'in'
        p = word(p, 1)
        end
    return '\n'res 'line' p':' strip(substr(m.m.src,
          , 1 + (p - m.m.lineX) * m.m.cutLen, m.m.cutLen), 't')
endProcedure scanWinInfo
/* copy scanWin end   *************************************************/
/* copy scanSql begin *************************************************/
/*--- initialize with reader inRdr ----------------------------------*/
scanSql: procedure expose m.
parse arg inRdr
    return scanSqlReset(scanWin(inRdr), inRdr)

scanSqlReset: procedure expose m.
parse arg m, r, scanWin
    if scanWin \== 0 then
        call scanWinOpts m, 5, 2, 1, 72
    m.m.rdr = r
    return scanOpts(m, , '0123456789_' , '--')
endProcedure scanSqlReset

/*--- scan a sql token put class in m.sqlclass:
      'i': ordinary identifier   e.g. Name
      'd': delimited identifier  e.g. "Delimited"
      'q': qualified identifier  e.g. abc."efg"
      'u': integer units         e.g. 8G
      'n': number                e.g. -234 or .2e3
      's': string                e.g. 'abc''ef'
      '' : at end
         : any other character   e.g. ;
      ----------------------------------------------------------------*/
scanSqlClass: procedure expose m.
parse arg m, retSpace
    m.m.val = ''
    if scanSpaceNl(m) & retSpace = 1 then do
        m.m.sqlClass = 'b'
        return 1
        end
    c2 = scanLook(m ,2)
    if scanString(m, "' x' X'") then do
        m.m.sqlClass = 's'
        if \abbrev(m.m.tok, "'") then
            m.m.val = x2c(m.m.val)
        end
    else if scanSqlQuId(m) then do
        if m.m.val.0 > 1 then
            m.m.sqlClass = 'q'
        else if abbrev(m.m.tok, '"') then
            m.m.sqlClass = 'd'
        else
            m.m.sqlClass = 'i'
        end
    else if scanSqlNum(m, 0)  then
        m.m.sqlClass = 'n'
    else if scanChar(m, 1) then
        m.m.sqlClass = m.m.tok
    else if scanAtEnd(m) then do
        m.m.sqlClass = ''
        return 0
        end
    else
        call scanErr m, 'cannot scan sql'
    return 1
endProcedure scanSqlClass

scanSqlSkipBrackets: procedure expose m.
parse arg m, br
    if br \== '' then
        nop
    else if scanLit(m, '(') then
        br = 1
    else
        return 0
    do while scanSqlClass(m) & m.m.sqlClass \== ';'
        if m.m.sqlClass = '('        then br = br + 1
        else if m.m.sqlClass \== ')' then iterate
        else if br > 1              then br = br - 1
        else                             return 1
        end
    call scanErr m, '; or eof, but' br 'closing ) expected'
endProcedure skipBrackets
/*--- scan an ordinary sql identifier e.g. abc, ef_12 ----------------*/
scanSqlId: procedure expose m.
parse arg m
    if \ scanName(m) then
        return 0
    m.m.val = translate(m.m.tok)
    return 1
endProcedure scanSqlId

/*--- scan a delimited or ordinay sql identifier ---------------------*/
scanSqlDeId: procedure expose m.
parse arg m
    if scanSqlId(m) then
        return 1
    if \ scanString(m, '"') then
        return 0
    m.m.val = strip(m.m.val, 't')
    return 1
endProcedure scanSqlDeId

/*--- scan a qualified sql identifier --------------------------------*/
scanSqlQuId: procedure expose m.
parse arg m
    res = ''
    rto = ''
    do qx=1
        if \ scanSqlDeId(m) then do
            if qx <> 1 then
                call scanErr m, 'id expected after .'
            return 0
            end
        m.m.val.qx = m.m.val
        res = res'.'m.m.val
        rto = rto'.'m.m.tok
        if \ scanLit(scanSkip(m), '.') then
            leave
        call scanSpaceNl m
        end
    m.m.val.0 = qx
    m.m.val = substr(res, 2)
    m.m.tok = substr(rto, 2)
    return 1
endProcedure scanSqlQuId

/*--- scan a sql number ----------------------------------------------*/
scanSqlNum: procedure expose m.
parse arg m, checkEnd, noSp
    si = ''
    if noSp == 1 then
        call err 'deimplement noSp, use scanNum instead'
    if scanLit(m, '+', '-') then do
        si = m.m.tok
        call scanSpaceNl m
        ch = scanLook(m, 2)
        if left(ch, 1) == '.' then
            ch = substr(ch, 2)
        if pos(left(ch, 1), '0123456789') < 1 then do
            call scanBack m, si
            m.m.val = ''
            return 0
            end
        end
    res = scanNum(m, checkEnd)
    m.m.val = si || m.m.val
    return res

endProcedure scanSqlNum

/*--- scan a sql number with a unit which may follow without space ---*/
scanSqlNumUnit: procedure expose m.
parse arg m, both, units
    if \ scanSqlNum(m, 0) then
        return 0
    nu = m.m.val
    sp = scanSpaceNl(m)
    if scanSqlId(m) then do
        if units == '' | wordpos(m.m.val, units) > 0 then
            nu = nu m.m.val
        else if both | \ sp then
            call scanErr m, 'scanSqlNumUnit after' nu 'bad unit' m.m.val
        else
            call scanBack m, m.m.tok
        end
    else if both then
        call scanErr m, 'scanSqlNumUnit no unit after' nu
    else if \sp & pos(scanLook(m, 1), m.m.scanNameR) > 0 then
        call scanErr m, 'scanSqlNumUnit bad number end after' nu
    m.m.val = nu
    return 1
endProcedure scanSqlNumUnit

/* copy scanSql end   *************************************************/
/* copy scanUtil begin *************************************************
    scan db2 utility input statements using scan and a reader
**********************************************************************/
/*--- initialize with reader inRdr ----------------------------------*/
scanUtilReader: procedure expose m.
parse arg m, inRdr
    call scanReader m, inRdr
    call scanOptions sc, , , '--'
    call scanUtilReset m
    return m
endProcedure scanUtilReader

scanUtilSql: procedure expose m.
parse arg inRdr
    m = scanSql(inRdr)
    call scanUtilReset m
    return m
endProcedure scanUtilReader

scanUtilReset: procedure expose m.
parse arg m
    m.m.utilBrackets = 0
    m.scanUtil =  'BACKUP CATENFM CATMAINT CHECK' ,
                  'COPY COPYTOCOPY DIAGNOSE EXEC LISTDEF LOAD' ,
                  'MERGECOPY MODIFY OPTIONS QUIESCE REBUILD' ,
                  'RECOVER REORG REPAIR REPORT RESTORE' ,
                  'RUNSTATS STOSPACE TEMPLATE UNLOAD'
    return m
endProcedure scanUtilReset
/*--- scan next token and put its class in m.sc.utilClass:
      'u' a utility name
      'n' a name
      '"' a quoted name
      "'" an apostroph'd string
      '.' a .
      ',' a ,
      'v' a value
      ''  at end
      ---------------------------------------------------------------*/
scanUtil: procedure expose m.
parse arg sc
    m.sc.utilSpace = scanSpaceNl(sc)
    ty = '?'
    if scanLit(sc, '(') then do
        m.sc.utilBrackets = m.sc.utilBrackets + 1
        end
    else if scanLIT(sc, ')') then do
        m.sc.utilBrackets = m.sc.utilBrackets - 1
        if m.sc.utilBrackets < 0 then
           call scanErr sc, 'unmatched closing bracket )'
        end
    else if scanLit(sc, ',') then do
        end
    else if scanLit(sc, '.') then do
        end
    else if scanString(sc, "'") then do
        end
    else if scanString(sc, '"') then do
        end
    else if scanName(sc) then do
        m.sc.val = translate(m.sc.tok)
        if m.sc.utilBrackets > 0 then
            ty = 'n'
        else if 0 < wordPos(m.sc.val, m.scanUtil) then
            ty = 'u'
        else
            ty = 'n'
        end
    else if scanVerify(sc, ' (),''"', 'm') then do
        ty = 'v'
        m.sc.val = translate(m.sc.tok)
        end
    else if \scanAtEnd(sc) then do
            call scanErr sc, 'scanUtil stopped before end'
        end
    else do
        ty = ''
        m.sc.val = ''
        end
    if ty == '?' then
        m.sc.utilClass = left(m.sc.tok, 1)
    else
        m.sc.utilClass = ty
    return m.sc.utilClass
endProcedure scanUtil

/*--- scan a value or a bracketed list of values ---------------------*/
scanUtilValue: procedure expose m.
parse arg sc, remApo, nl
    if remApo = '' | rempApo = 0 then
        remApo = "nv"
    else if rempApo = 1 then
        remApo = "nv'"
    if '(' \== scanUtil(sc) then
         return scanUtilValueOne(sc, remApo)
    v = ''
    brx = m.sc.utilBrackets
    oLine = word(scanPos(sc), 1)
    do forever
        call scanUtil sc
        one = scanUtilValueOne(sc, remApo)
        if one == '' then
           call scanErr sc, 'eof in brackets'
        else if brx > m.sc.utilBrackets then
           return v
        nLine = word(scanPos(sc), 1)
        if \ m.sc.utilSpace then
            v = v || one
        else if nl \== '' & oLine <> nLine then
            v = v || nl || one
        else
            v = v' 'one
        oLine = nLine
        end
endProcedure scanUtilValue

scanUtilValueOne: procedure expose m.
parse arg sc, valTy
    if m.sc.utilClass == '' then
        return ''
    else if m.sc.utilClass == 'u' then
        call scanErr sc, 'util in scanUtilValueOne'
    if pos(m.sc.utilClass, valTy) > 0 then
        return m.sc.val
    else
        return m.sc.tok
endProcedure scanUtilValueOne

/*--- skip over nested brackets --------------------------------------*/
scanUtilSkipBrackets: procedure expose m.
parse arg m, br, doCat
    if br \== '' then
        lim = m.m.utilBrackets - br
    else if scanLit(m, '(') then do
        lim = m.m.utilBrackets
        m.m.utilBrackets = lim + 1
        end
    else
        return 0
    doCat = doCat == 1
    res = ''
    do while scanUtil(m) \== ''
        if m.m.utilBrackets <= lim then do
            if doCat then
                m.m.val = res
            return 1
            end
        if doCat then
            res = res m.m.tok
        end
    return scanErr(m, 'eof with' m.m.utilBrackets 'open (')
endProcedure skipBrackets

/*--- analyze a punch file write intoField to stdOut -----------------*/
scanUtilInto: procedure expose m.
parse arg m
    if m.m.utilBrackets \== 0 then
        call scanErr m, 'scanUtilInto with brackets' m.m.utilBrackets
  /*sc = scanUtilReader(m.j.in)
    call jOpen sc, 'r'
 */ do forever
        cl = scanUtil(m)
        if cl == '' then
            return 0
        if cl = 'n' & m.m.tok == 'INTO' then
            leave
        end
    if scanUtil(m) \== 'n' | m.m.tok \== 'TABLE' then
        call scanErr m, 'bad into table '
    if \ scanSqlQuId(scanSkip(m)) then
        call scanErr m, 'table name expected'
    if m.m.utilBrackets \== 0 then
        call scanErr m, 'into table in brackets' m.m.utilBrackets
    m.m.tb = m.m.val
    m.m.part = ''
    m.m.when = ''
    do forever
        cl = scanUtil(m)
        if cl == '' then
            call scanErr m, 'eof after into'
        if cl == 'n' & m.m.tok == 'PART' then do
            if scanUtil(m) == 'v' then
                m.m.part = m.m.val
            else
                call scanErr m, 'bad part'
            end
        else if cl == 'n' & wordPos(m.m.val, 'WHEN WORKDDN') > 0 then do
            call scanUtilSkipBrackets m
            end
        else if cl == '(' then do
           leave
           end
        end
    oX =  m.m.lineX
    oL =  overlay('', m.m.src, 1, m.m.pos-2)
    do while m.m.utilBrackets > 0
        call scanUtil m
        if oX \== m.m.lineX then do
            call out strip(oL, 't')
            oX =  m.m.lineX
            oL =  m.m.src
            end
        end
    call out left(oL, m.m.pos)
 /* call jClose sc
 */ return 1
endProcedure scanUtilInto
/* copy scanUtil end **************************************************/
/* copy pipe begin *****************************************************
***********************************************************************/
pipeIni: procedure expose m.
    if m.pipe.ini == 1 then
        return
    m.pipe.ini = 1
    call catIni
    call mapReset env.vars
    m.env.with.0 = 0
    call mapReset env.c2w
    call mNewArea 'ENV.WICO', '='
    m.pipe.0 = 1
    m.pipe.1.in  = jOpen(oNew('JRWEof'), '<')
    m.pipe.1.out = jOpen(oNew('JSay'), '>')
    call pipe '+'
    return
endProcedure pipeIni

/*-------------------------------
  +-       push pop frame
  PYNFA    ouput Parent saY Newcat File, Appendtofile
  psf|     parent string file oldOut
  old          --> new
  pipeBegin    --> pipe '+N'
  pipeBeLa f   --> pipe '+F'
  pipeLast     --> pipe 'P|'
  pipeLast f   --> pipe 'F|', f
  pipeEnd      --> pipe '-'
--------------------------------*/
pipe: procedure expose m.
parse arg opts, aO, aI
    ox = 1; oc = substr(opts, ox, 1)
    ax = m.pipe.0
    px = ax -1
    if oc == '-' then do
        if px < 2 then
            call err 'pipe pop empty'
        call jClose m.pipe.ax.out
        call jClose m.pipe.ax.in
        ax = px
        m.pipe.0 = ax
        px = ax-1
        ox = ox+1; oc = substr(opts, ox, 1)
        end
    if oc == '+' then do
        px = ax
        ax = ax+ 1
        m.pipe.0 = ax
        m.pipe.ax.in  = jOpen(m.pipe.px.in, '<')
        m.pipe.ax.out = jOpen(m.pipe.px.out, '>')
        ox = ox+1; oc = substr(opts, ox, 1)
        end
    oOut = m.pipe.ax.out
    if pos(oc, 'NYPFA') > 0 then do
        call jClose oOut
        if oc == 'Y' then
            m.pipe.ax.out = jOpen(m.pipe.1.out, '>')
        else if oc == 'P' then
            m.pipe.ax.out = jOpen(m.pipe.px.out, '>')
        else if oc == 'N' then
            m.pipe.ax.out = jOpen(Cat(), '>')
        else if oc == 'F' then
            m.pipe.ax.out = jOpen(o2file(aO), '>')
        else if oc == 'A' then
            m.pipe.ax.out = jOpen(o2file(aO), '>>')
        ox = ox+1; oc = substr(opts, ox, 1)
        end
    if pos(oc, 's|fp') > 0 then do
        call jClose m.pipe.ax.in
        if oc == 'p' then
            m.pipe.ax.in = jOpen(m.pipe.px.in, '<')
        else if oc == '|' then
            m.pipe.ax.in = jOpen(oOut, '<')
        else if oc == 'f' then do
            if arg() <= 3 then
                m.pipe.ax.in = jOpen(o2file(aI), '<')
            else do
                ct = jOpen(Cat(), '>')
                do lx = 3 to arg()
                    call jWriteAll ct, arg(lx)
                    end
                m.pipe.ax.in = jOpen(jclose(ct), '<')
                end
            end
        else if arg() <= 3 then
            m.pipe.ax.in = jOpen(jBuf(aI), '<')
        else do
            bu = jOpen(jBuf(), '>')
            do lx = 3 to arg()
                call jWrite bu, arg(lx)
                end
            m.pipe.ax.in = jOpen(jclose(bu), '<')
            end
        ox = ox+1; oc = substr(opts, ox, 1)
        end
    if oc \== ' ' then
        call err 'implement' substr(opts, ox) 'in pipe' opts
    m.j.in  = m.pipe.ax.in
    m.j.out = m.pipe.ax.out
    return
endProcedure pipe

/*--- write all from rdr (rsp in) to out, not lazy ----------------*/
pipeWriteNow: procedure expose m.
    parse arg rdr
    call jWriteNow m.j.out, if(rdr == '', m.j.in, rdr)
    return
endProcedure pipeWriteNow

/*--- write all from rdr (rsp in) to out, possibly lazy -----------*/
pipeWriteAll: procedure expose m.
parse arg rdr
    call jWriteAll m.j.out, if(rdr == '', m.j.in, rdr)
    return
endProcedure pipeWriteAll

pipePreSuf: procedure expose m.
parse arg le, ri
    do while in(v)
        call out le || m.v || ri
        end
    return
endProcedure pipePreSuf

envIsDefined: procedure expose m.
parse arg na
    return   '' \== mapValAdr(env.vars, na)
endProcedure envIsDefined

envPushWith: procedure expose m.
parse arg obj, cl, fn, elCl
    tos = m.env.with.0 + 1
    m.env.with.0 = tos
    m.env.with.tos.fun = fn
    m.env.with.tos.muElCl = ''
    if fn == '' then do
        call envSetWith obj, cl
        return
        end
    if cl == '' then
        cl = objClass(obj)
    if fn == 'as1' then do
        call envSetWith obj, cl
        m.env.with.tos.muElRef = m.cl.valueCl \== '',
                               & m.cl.valueCl \== m.class.classV
        if m.env.with.tos.muElRef then
            m.env.with.tos.muElCl = m.cl.valueCl
        else
            m.env.with.tos.muElCl = cl
        return
        end
    else if fn \== 'asM' then
        call err 'bad fun' fn
    ff = oClaMet(cl, 'oFlds')  /*just be sure it's initialised */
    if m.cl.stemCl == '' then
        call err 'class' className(cl) 'not stem'
    cc = m.cl.stemCl
    isRef = m.cc == 'r'
    m.env.with.tos.muElRef = isRef
    if m.cc \== 'r' then
        m.env.with.tos.muElCl = cc
    else if elCl \== '' then
        m.env.with.tos.muElCl = elCl
    else if m.cc.class == '' then
        call err 'elCl null for envPushWith('obj ','cl ','multi', ...)'
    else
        m.env.with.tos.muElCl = m.cc.class
    m.env.with.tos.class = ''
    m.env.with.tos.muCla = cl
    m.env.with.tos.muObj = obj
    return
endProcedure envPushWith

envSetWith: procedure expose m.
parse arg obj, cl
    if cl == '' & obj \== '' then
        cl = objClass(obj)
    tos = m.env.with.0
    m.env.with.tos = obj
    m.env.with.tos.class = cl
    return
endProcedure envSetWith

envWithObj: procedure expose m.
    tos = m.env.with.0
    if tos < 1 then
        call err 'no with in envWithObj'
    return m.env.with.tos
endProcedure envWithObj

envAccPath: procedure expose m. m cl
parse arg pa, stop, nllNw
    nullNew = nllNw == 1
    dx = verify(pa, m.class.cPath, 'm')
    if dx = 0 then do
        n1 = pa
        p2 = ''
        end
    else do
        n1 = left(pa, dx-1)
        p2 = substr(pa, dx)
        end
    wCla = ''
    do wx = m.env.with.0 by -1 to if(stop==1, m.env.with.0, 1)
        wCla = m.env.with.wx.class
        if symbol('m.wCla.f2c.n1') == 'VAR' then
            return oAccPath(m.env.with.wx, pa, m.env.with.wx.class)
        end
    if stop == 1 then
        return 'no field' n1 'in class' className(wCla)
    vv =  mapValAdr(env.vars, n1)
    if vv \== '' then
        if p2 == '' then
            return oAccPath(vv, '', m.class.classR)
        else
            return oAccPath(vv, '|'p2, m.class.classR)
    else if nullNew & p2 == '' then
        return oAccPath(mapValAdr(env.vars, n1,'a'), p2,m.class.classR)
    else
        return 'undefined variable' pa
endProcedure envAccPath

envWithNext: procedure expose m.
parse arg beEn, defCl, obj
    tos = m.env.with.0
    if tos < 1 then
        call err 'envWithNext with.0' tos
    st = m.env.with.tos.muObj
    if beEn  == 'b' then do
        if m.env.with.tos.fun == 'asM' then
            m.st.0 = 0
        if m.env.with.tos.muElCl == '' then
            m.env.with.tos.muElCl = defCl
        end
    else if m.env.with.tos.fun == 'asM' then
        m.st.0 = m.st.0 + 1
    else if m.env.with.tos.fun == '' then
        call outO m.env.with.tos
    else if beEn = '' then
        call err 'no multi allowed'
    if beEn == 'e' then
        return
    if m.env.with.tos.fun == 'as1' then do
         if m.env.with.tos == '' then
             call err 'implement withNext null'
         return
         end
/*  if obj \== '' then do
        if \ m.env.with.tos.muElRef then
            call err 'obj but not ref'
        m.nn = obj
        call envSetWith obj
        end
*/
    if m.env.with.tos.fun == '' then do
        call envSetWith oNew(m.env.with.tos.muElCl)
        return
        end
    nn = st'.' || (m.st.0 + 1)
    if m.env.with.tos.muElRef then do
        m.nn = oNew(m.env.with.tos.muElCl)
        call envSetWith m.nn
        end
    else do
        call oClear oMutate(nn, m.env.with.tos.muElCl)
        call envSetWith nn
        end
    return
endProcedure envWithNext

envPushName: procedure expose m.
parse arg nm, multi, elCl
    res = envAccPath(nm, , 1)
    if res \== 1 then
        return err(res 'in envPushName('nm',' multi')')
    do while m.cl == 'r'
        if m.m == '' then do
            res = oRefSetNew(m, cl)
            if res \== 1 then
                call err res 'in envPushName('nm',' multi')'
            end
        m = m.m
        cl = objClass(m)
        end
    call envPushWith m, cl, multi, elCl
    return
endProcedure envPushName

envNewWiCo: procedure expose m.
parse arg co, cl
    k1 = strip(co cl)
    n = mapGet('ENV.C2W', k1, '')
    if n \== '' then
        return n
    k2 = k1
    if co \== '' then do
        k2 = strip(m.co.classes cl)
        n = mapGet('ENV.C2W', k2, '')
        end
    k3 = k2
    if n == '' then do
        cx = wordPos(cl, m.co.classes)
        if cx > 0 then do
            k3 = space(subWord(m.co.classes, 1, cx-1),
                     subWord(m.co.classes, cx+1) cl, 1)
            n = mapGet('ENV.C2W', k3, '')
            end
        end
    if n == '' then
        n = envNewWico2(co, k3)
    call mapAdd 'ENV.C2W', k1, n
    if k2 \== k1 then
        call mapPut 'ENV.C2W', k2, n
    if k3 \== k2 & k3 \== k1 then
        call mapPut 'ENV.C2W', k3, n
    return n
endProcedure envNewWiCo

envNewWiCo2: procedure expose m.
parse arg co, clLi
    n = mNew('ENV.WICO')
    if co == '' then
        m.n.level = 1
    else
        m.n.level = m.co.level + 1
    m.n.classes = clLi
    na = ''
    do cx = 1 to words(clLi)
        c1 = word(clLi, cx)
        na = na className(c1)
        do qx=1 to 2
            ff = c1 || word('.FLDS .STMS', qx)
            do fx = 1 to m.ff.0
                fn = m.ff.fx
                if fn == '' then
                    iterate
                fn = substr(fn, 2)
                m.n.f2c.fn = cx
                end
            end
        end
    m.n.classNames = space(na, 1)
    return n
endProcedure envNewWiCo2

envPopWith:procedure expose m.
    tos = m.env.with.0
    m.env.with.0 = tos - 1
    return
endProcedure envPopWith

envGet: procedure expose m.
parse arg na
    res = envAccPath(na)
    if res == 1 then
        res = oAccStr(m, cl)
    if res == 1 then
        return str
    return err(res 'in envGet('na')')
endProcedure envGet

envGetO: procedure expose m.
parse arg na, opt
    res = envAccPath(na, , opt == '-b')
    if res == 1 then
        res = oAccO(m, cl, opt)
    if res == 1 then
        return ref
    return err(res 'in envGetO('na')')
endProcedure envGetO

envPutO: procedure expose m.
parse arg na, ref, stop
    res = envAccPath(na, stop, 1)
    if res == 1 then
        res = ocPutO(m, cl, ref)
    if res = 1 then
        return ref
    return err(res 'in envPutO('na',' ref',' stop')')
endProcedure envPutO

envPut: procedure expose m.
parse arg na, va, stop
    res = envAccPath(na, stop , 1)
    if res == 1 then
        res = ocPut(m, cl, va)
    if res == 1 then
        return va
    return err(res 'in EnvPut('na',' va',' stop')')
endProcedure envPut

envRead: procedure expose m.
parse arg na
    return in("ENV.VARS."na)

envReadO: procedure expose m.
parse arg na
    res = inO()
    if res == '' then
        return 0
    call envPutO na, res
    return 1
endProcedure envReadO

envHasKey: procedure expose m.
parse arg na
    return mapHasKey(env.vars, na)

envRemove: procedure expose m.
parse arg na
    return mapRemove(env.vars, na)
/* copy pipe end ******************************************************/
/* copy cat  begin ****************************************************
***********************************************************************/
/*--- create a new cat -----------------------------------------------*/
cat: procedure expose m.
    m = oNew('Cat') /* calls catReset */
    do ax=1 to arg()
        call catWriteAll m, arg(ax)
        end
    return m
endProcedure cat

catReset: procedure expose m.
parse arg m
    m.m.RWs.0 = 0
    m.m.catWr = ''
    m.m.catRd = ''
    m.m.catIx = -9e9
    m.m.catKeepOpen = ''
    return m
endProcedure catReset

catClose: procedure expose m.
parse arg m
    if m.m.catWr \== '' then do
        call jClose m.m.catWr
        call mAdd m'.RWS', m.m.catWr
        m.m.catWr = ''
        end
    if m.m.catRd \== '' then do
        call jClose m.m.catRd
        m.m.catRd = ''
        end
    m.m.catIx = -9e9
    return m
endProcedure catClose

catOpen: procedure expose m.
parse arg m, oo
    if oo == m.j.cRead then do
        m.m.catIx = 0
        call catNextRdr m
        m.m.jReading = 1
        end
    else if oo == m.j.cWri | oo == m.j.cApp then do
        if oo == m.j.cWri then
            m.m.RWs.0 = 0
        m.m.catIx = -9e9
        m.m.jWriting = 1
        end
    else do
        call err 'catOpen('m',' oo') bad opt'
        end
    return m
endProcedure catOpen

/*--- return and open next reader ------------------------------------*/
catNextRdr: procedure expose m.
parse arg m
    if m.m.catRd \== '' then
        call jClose m.m.catRd
    cx = m.m.catIx + 1
    m.m.catIx = cx
    if cx > m.m.RWs.0 then do
        m.m.catRd = ''
        return 0
        end
    m.m.catRd = m.m.RWs.cx
    if cx = word(m.m.catKeepOpen, 1) then
        m.m.catKeepOpen = subWord(m.catKeepOpen, 2)
    else
        call jOpen m.m.catRd , m.j.cRead
    return 1
endProcedure catNextRdr

catReadO: procedure expose m.
parse arg m
    do while m.m.catRd \== ''
        res = jReadO(m.m.catRd)
        if res \== '' then
            return res
        call catNextRdr m
        end
    return ''
endProcedure catReadO

catWrite: procedure expose m.
parse arg m, line
    if m.m.catWr == '' then
        m.m.catWr = jOpen(jBuf(), m.j.cWri)
    call jWrite m.m.catWr, line
    return
endProcedure catWrite

catWriteO: procedure expose m.
parse arg m, var
    if m.m.catWr == '' then
        m.m.catWr = jOpen(jBuf(), m.j.cWri)
    call jWriteO m.m.catWr, var
    return
endProcedure catWriteO

/*--- write contents of a reader to cat
          or keep it for later reading -------------------------------*/
catWriteAll: procedure expose m.
parse arg m
    if m.m.catWr \== '' then do
        call mAdd m'.RWS', jClose(m.m.catWr)
        m.m.catWr = ''
        end
    do ax=2 by 1 to arg()
        r = o2File(arg(ax))
        call mAdd m'.RWS', r
        if m.r.jReading then do
            m.m.catKeepOpen = m.m.rws.0 m.m.catKeepOpen
            call jOpen r, m.j.cRead
            end
        end
    return
endProcedure catWriteAll

/*--- create a reader/WriteO for an external file --------------------*/
file: procedure expose m.
parse arg str
    return oNew('File', str)
endProcedure file

fileChild: procedure expose m.
parse arg m, name, opt
    interpret objMet(m, 'fileChild')
endProcedure fileChild

fileRm: procedure expose m.
parse arg m
    interpret objMet(m, 'fileRm')
    return
endProcedure fileRm

filePath: procedure expose m.
parse arg m
    interpret objMet(m, 'filePath')
endProcedure filePath

fileIsFile: procedure expose m.
parse arg m
    interpret objMet(m, 'fileIsFile')
endProcedure fileIsFile

fileIsDir: procedure expose m.
parse arg m
    interpret objMet(m, 'fileIsDir')
endProcedure fileIsDir

fileMkDir: procedure expose m.
parse arg m, opt
    interpret objMet(m, 'fileMkDir')
    return
endProcedure fileRm

fileRmDir: procedure expose m.
parse arg m, opt
    interpret objMet(m, 'fileRmDir')
    return
endProcedure fileRm

/*--- create a reader/WriteO for the filelist of a directory----------*/
fileList: procedure expose m.
parse arg m, opt
    str = oIfStr(m, '')
    if str == '' then
        return oNew('FileList', filePath(m),  opt)
    else
        return oNew('FileList', dsn2Jcl(str),  opt)
endProcedure fileList

fileSingle: procedure expose m.
parse arg m
    call jOpen m, '<'
    res = jReadO(m)
    two = jReadO(m)
    call jClose m
    if res == '' then
        if arg() < 2 then
             call err 'empty file in fileSingle('m')'
        else
            res = arg(2)
    if two \== '' then
        call err '2 or more recs in fileSingle('m')'
    return res
endProcedure fileSingle

catIni: procedure expose m.
    if m.cat.ini == 1 then
        return
    m.cat.ini = 1
    call jIni
    call classNew "n Cat u JRWO", "m",
        , "jOpen  call catOpen m, opt",
        , "jReset call catReset m, arg",
        , "jClose call catClose m",
        , "jReadO return catReadO(m)",
        , "jWrite call catWrite m, line; return",
        , "jWriteO call catWriteO m, var; return",
        , "jWriteAll call catWriteAll m, rdr; return"

    call classAddMet m.class.classV, 'o2File return file(m.m)'
    call classAddMet m.class.classW, 'o2File return file(substr(m,2))'
    if m.err.os == 'TSO' then
        call fileTsoIni
    else if m.err.os == 'LINUX' then
        call fileLinuxIni
    else
        call err 'file not implemented for os' m.err.os
    return
endProcedure catIni
/* copy cat  end   ****************************************************/
/* copy fiLinux begin *************************************************/
/*--- send ggShCmd to shell bash,
        fail if rc <> 0 or not listed in ggRet -----------------------*/
adrSh: procedure expose m.  /* really no need for variables???? */
    parse arg ggShCmd, ggRet
    address 'bash' ggShCmd
    if rc == 0                     then return 0
    else if ggRet == '*'           then return rc
    else if wordPos(rc, ggRet) > 0 then return rc
    else
        call err 'adrSh rc' rc 'for' ggShCmd
endProcedure adrSh

fileLinuxReset: procedure expose m.
parse arg m, nm
    m.m.spec = nm
    if abbrev(nm, '&') then do
        if nm == '&in' then do
            m.m.stream = .input
            m.m.jReading = 1
            end
        else if nm == '&out' then do
            m.m.stream = .output
            m.m.jWriting = 1
            end
        else do
            call err 'bad spec' nm
            end
        end
    else do
        m.m.stream = .Stream%%new(nm)
        m.m.stream%%init(m.m.stream%%qualify)
        end
    return m
endProcedure fileLinuxReset

fileLinuxOpen: procedure expose m.
parse arg m, opt
    if opt == m.j.cRead then do
        res = m.m.stream%%open(read shareread)
        m.m.jReading = 1
        end
    else do
        if opt == m.j.cApp then
            res = m.m.stream%%open(write append)
        else if opt == m.j.cWri then
            res = m.m.stream%%open(write replace)
        else
            call err 'fileLinuxOpen('m',' opt') with bad opt'
        m.m.jWriting = 1
        end
    if res \== 'READY:' then
        call err 'fileLinuxOpen fails' res':' opt ,
        "'"m.m.stream%%qualify"'"
    return m
endProcedure fileLinuxOpen

fileLinuxClose:
parse arg m
    res = m.m.stream%%close
    if res \== 'READY:' then
        call err 'fileLinuxClose' res':' m.m.stream%%qualify
    return m
endProcedure fileLinuxClose

fileLinuxRead: procedure expose m.
parse arg m, var
    res = m.m.stream%%lineIn
    if res == '' then
        if m.m.stream%%state \== 'READY' then
            return 0
    m.var = res
       m.o.o2c.var = m.class.classV
    return 1
endProcedure fileLinuxRead

fileLinuxWrite: procedure expose m.
parse arg m, line
    if m.m.stream%%lineOut(line) then
        call err 'fileLinuxWrite'
    return
endProcedure fileLinuxWrite

fileLinuxRmDir: procedure expose m.
parse arg m, opt
    if opt == '' then
        return adrSh('rmdir' m.m.spec)
    else if opt == '-r' then
        return adrSh('rm -r' m.m.spec)
    else
        call err 'bad opt' opt 'in fileLinuxRmDir'
endProcedure fileLInuxRmDir

fileLinuxListReset: procedure expose m.
parse arg m, m.m.spec, o
    if o == 'r' then
        m.m.opt = 'S'
    else if o == '' then
        m.m.opt = ''
    else
        call err 'bad opt' o 'in fileLinuxListReset'
    m.m.rx = 'closed'
    return m
endProcedure fileLinuxListReset

fileLinuxListOpen: procedure expose m.
parse arg m
    if m \== translate(m) then
        call err 'bad m for fileLinuxList:' m
    if m.m.opt == '' then
        rc = sysFileTree(m.m.spec'/*', 'm.'m'.LIST')
    else
        rc = sysFileTree(m.m.spec'/*', 'm.'m'.LIST', m.m.opt)
    if rc \== 0 then
        call err 'rc' rc 'in sysFileTree('m.m.spec', m.'m'.LIST)'
    m.m.rx = 0
    m.m.jReading = 1
    return m
endProcedure fileLinuxListOpen

fileLinuxListRead: procedure expose m.
parse arg m, var
    x = m.m.rx + 1
    if x > m.m.list.0 then
        return 0
    m.var = substr(m.m.list.x, 43)
    m.m.rx = x
    call oMutate var, m.class.classV
    return 1
endProcedure fileLinuxListRead

fileLinuxIni: procedure expose m.
    if m.fileLinux.ini == 1 then
        return
    m.fileLinux.ini = 1
    m.file.sep = '/'
    call jIni
    call classNew "n File u JRW", "m",
        , "jReset call fileLinuxReset m, arg",
        , "jOpen  call fileLinuxOpen m, opt",
        , "jClose call fileLinuxClose m",
        , "jRead return fileLinuxRead(m, var)",
        , "jWrite call fileLinuxWrite m, line",
        , "jWriteO call jWrite m, o2String(var)",
        , "filePath return m.m.stream%%qualify",
        , "fileIsFile return sysIsFile(m.m.stream%%qualify)" ,
        , "fileIsDir return sysIsFileDirectory(m.m.stream%%qualify)" ,
        , "fileChild return file(m.m.stream%%qualify'/'name)",
        , "fileRm return adrSh(m.m.spec)",
        , "fileMkDir return adrSh('mkdir' m.m.stream%%qualify)" ,
        , "fileRmDir return fileLinuxRmDir(m, opt)"
    call classNew "n FileList u JRW", "m",
        , "jReset call fileLinuxListReset m, arg, arg2",
        , "jOpen  call fileLinuxListOpen m, opt",
        , "jClose m.m.rx = 'closed'",
        , "jRead return fileLinuxListRead(m, var)"
    return
endProcedure fileLinuxIni
/* copy fiLinux end   *************************************************/
/* copy fileTso begin *************************************************/
fileTsoReset: procedure expose m.
parse arg m, sp
    m.m.readIx = 'c'
    if symbol('m.m.defDD') \== 'VAR' then do
        m.m.defDD = 'CAT*'
        m.fileTso.buf = m.fileTso.buf + 1
        m.m.buf = 'FILETSO.BUF'm.fileTso.buf
        m.m.spec = sp
        end
    if sp \== '' then do
        m.m.spec = dsnSpec(sp)
        rr = translate(subword(m.m.spec, 4))
        m.m.stripT = \ (pos(':V', rr) > 0 | pos('RECFM(V', rr) > 0)
        end
    return m
endProcedure fileTsoReset

fileTsoOpen: procedure expose m.
parse arg m, opt
    buf = m.m.buf
    if opt == m.j.cRead then do
        aa = dsnAlloc(m.m.spec, 'SHR', m.m.defDD)
        if m.dsnAlloc.dsn <> '' then
            if sysDsn("'"m.dsnAlloc.dsn"'") <> 'OK' then
                call err 'cannot read' m.dsnAlloc.dsn':',
                               sysDsn("'"m.dsnAlloc.dsn"'")
        call readDDBegin word(aa, 1)
        m.m.jReading = 1
        m.buf.0 = -1
        m.m.readIx = 0
        end
    else do
        if opt == m.j.cApp then
            aa = dsnAlloc(m.m.spec, 'MOD', m.m.defDD)
        else if opt == m.j.cWri then
            aa = dsnAlloc(m.m.spec, 'OLD', m.m.defDD)
        else
            call err 'fileTsoOpen('m',' opt') with bad opt'
        call writeDDbegin word(aa, 1)
        m.m.jWriting = 1
        m.buf.0 = 0
        m.m.readIx = 'w'
        end
    m.m.dd = word(aa, 1)
    m.m.free = subword(aa, 2)
    m.m.dsn = m.dsnAlloc.dsn
    return m
endProcedure fileTsoOpen

fileTsoClose: procedure expose m.
parse arg m
    buf = m.m.buf
    if m.m.readIx \== 'c' then do
        if m.m.readIx == 'w' then do
            if m.buf.0 > 0 then
                call writeDD m.m.dd, 'M.'BUF'.'
            call writeDDend m.m.dd
            end
        else do
            call readDDend m.m.dd
            end
        interpret m.m.free
        end
    m.buf.0 = 'closed'
    m.m.readIx = 'c'
    m.m.free  = ''
    m.m.dd    = ''
    return m
endProcedure fileTsoClose

fileTsoRead: procedure expose m.
parse arg m, var
    ix = m.m.readIx + 1
    buf = m.m.buf
    if ix > m.buf.0 then do
        res = readDD(m.m.dd, 'M.'buf'.')
        if \ res then
            return 0
        ix = 1
        end
    m.m.readIx = ix
    m.var = m.buf.ix
    call oMutate var, m.class.classV
    return 1
endProcedure fileTsoRead

fileTsoWrite: procedure expose m.
parse arg m, var
    buf = m.m.buf
    ix = m.buf.0 + 1
    m.buf.0 = ix
    if m.m.stripT then
        m.buf.ix = strip(var, 't')
    else
        m.buf.ix = var
    if ix > 99 then do
        call writeDD m.m.dd, 'M.'buf'.'
        m.buf.0 = 0
        end
    return
endProcedure fileTsoWrite

fileTsoWriteO: procedure expose m.
parse arg m, var
    if objClass(var, m.class.classV) == m.class.classV then do
        call fileTsoWrite m, m.var
        return
        end
    call err 'fileTsoWriteO('m',' var') cannot write objects of class',
                              objClass(var)
endProcedure fileTsoWriteO

fSub: procedure expose m.
    return file('.sysout(T) writer(intRdr)')
endProcedure fSub

fEdit: procedure expose m.
parse arg spec, vw
    if spec == '' then
        spec = 'new ::f'
    else if abbrev(spec, '::') then
        spec = 'new' spec
    else if abbrev(spec, ':') then
        spec = 'new' ':'spec
    f  = oNew('FileEdit', spec)
    m.f.editType = if(abbrev(translate(vw), 'V'), 'view', 'edit')
    return f
endProcedure fEdit

fileTsoEditClose: procedure expose m.
parse arg m
    dsn = m.m.dsn
    if dsn \== '' then do
        call fileTsoClose m
        call adrIsp m.m.editType "dataset('"dsn"')", 4
        return
        end
    fr = m.m.free
    dd = m.m.dd
    m.m.free = ''
    call fileTsoClose m
    call adrIsp "LMINIT DATAID(lmmId) ddName("dd") ENQ(SHRW)"
    eRc = adrIsp(m.m.editType "dataid("lmmId")", '*')
    lRc = adrIsp("LMFree DATAID("lmmId")", '*')
    interpret fr
    if (eRc \== 0 & eRc \== 4) | lRc \== 0 then
        call err m.m.editType 'rc' eRc', lmFree rc' lRc
    return
endProcedure fileTsoEditClose

fileTsoIni: procedure expose m.
    if m.fileTso.ini == 1 then
        return
    m.fileTso.ini = 1
    m.file.sep = '.'
    m.fileTso.buf = 0
    call jIni
    um = "call err 'for tso undefined method'"
    call classNew "n File u JRW", "m",
        , "jOpen  call fileTsoOpen m, opt",
        , "jReset call fileTsoReset m, arg",
        , "jClose call fileTsoClose m",
        , "jRead return fileTsoRead(m, var)",
        , "jWrite call fileTsoWrite m, line",
        , "jWriteO call fileTsoWriteO m, var",
        , "filePath return word(m.m.spec, 1)"           ,
        , "fileIsFile" um "'fileIsFile'"      ,
        , "fileIsDir   return 1"              ,
        , "fileChild   return file(word(m.m.spec, 1)'.'name opt)",
        , "fileRm"     um "'fileRm'"          ,
        , "fileMkDir"  ,
        , "fileRmDir"  um "'fileRmDir'"
 /*     , "filePath return m.m.stream%%qualify",
        , "fileIsFile return sysIsFile(m.m.stream%%qualify)" ,
        , "fileIsDir return sysIsFileDirectory(m.m.stream%%qualify)" ,
        , "fileChild return file(m.m.stream%%qualify'/'name)",
        , "fileRm return adrSh(m.m.spec)",
        , "fileMkDir return adrSh('mkdir' m.m.stream%%qualify)" ,
        , "fileRmDir return fileLinuxRmDir(m, opt)" */
    call classNew "n FileList u JRW", "m",
        , "jReset if arg2 == 'r' then m.m.dsnMask=arg'.**';",
                                "else m.m.dsnMask=arg'.*';",
        , "jOpen  call csiOpen m, m.m.dsnMask",
        , "jClose" ,
        , "jRead return csiNext(m, var)"
    call classNew "n FileEdit u File", "m",
        , "jClose call fileTsoEditClose m"
    return
endProcedure fileTsoIni
/* copy fileTso end   *************************************************/
/* copy sqlDiv begin **************************************************/
/*--- generate the format m for a sql cx as specified in sp
          use the information from the sqlDa -------------------------*/
sqlFTabReset: procedure expose m.
parse arg ff, cx, tBef, tAft, m.ff.maxChar, m.ff.blobMax, m.ff.maxDec
    if m.ff.maxChar == '' then
        m.ff.maxChar == 32
    if m.ff.blobMax == '' then
        m.ff.blobMax = 200
    bf = '%-'max(m.ff.blobMax, 4)'C'
    m.ff.flds = ''
    m.ff.sqlX = cx
    call fTabReset ff, tBef, tAft
    m.ff.sql2fmt.384 = '%-10C' /* date    */
    m.ff.sql2fmt.388 = '%-8C'  /* time    */
    m.ff.sql2fmt.392 = '%-26C' /* timestamp */
    m.ff.sql2fmt.400 = 'c'     /* graphic string */
    m.ff.sql2fmt.404 = bf      /* BLOB           */
    m.ff.sql2fmt.408 = bf      /* CLOB           */
    m.ff.sql2fmt.412 = bf      /* DBCLOB         */
    m.ff.sql2fmt.448 = 'c'     /* varchar        */
    m.ff.sql2fmt.452 = 'c'     /* char           */
    m.ff.sql2fmt.452 = 'c'     /* long varchar   */
    m.ff.sql2fmt.460 = 'c'     /* null term. string */
    m.ff.sql2fmt.464 = 'c'     /* graphic varchar   */
    m.ff.sql2fmt.468 = 'c'     /* graphic char      */
    m.ff.sql2fmt.472 = 'c'     /* long graphic varchar   */
    m.ff.sql2fmt.480 = '%7e'   /* float                  */
    m.ff.sql2fmt.484 = 'd'     /* packed decimal         */
    m.ff.sql2fmt.492 = '%20i'  /* bigInt                 */
    m.ff.sql2fmt.496 = '%11i'  /* int                    */
    m.ff.sql2fmt.500 = '%6i'   /* smallInt               */
    m.ff.sql2fmt.904 = '%-34H' /* rowID 17 Byte Binary   */
    return
endProcedure sqlFTabReset
/*--- set a defaultFormat for type tx in fTab ff ---------------------*/
sqlFTabDef: procedure expose m.
parse arg ff, tx, m.ff.sql2fmt.tx
return ff

sqlFTabAdd: procedure expose m.
parse arg m, c1 aDone, f1, l1
    if symbol('m.m.set.c1') == 'VAR' then do
        sx = m.m.set.c1
        if word(m.m.set.sx, 1) == c1 & sx <= m.m.set.0 then do
            parse var m.m.set.sx c1 aDone
            f1 = m.m.set.sx.fmt
            l1 = m.m.set.sx.label
            end
        end
    cx = m.m.sqlX
    kx = sqlCol2kx(cx, c1)
    if kx == '' then
        call err 'colName not found' c1
    do tx=2 to arg()-3
        if arg(tx+3) \== '' then
            call fTabAddTit m, tx, arg(tx+3)
        end
    if f1 \== '' then do
        if right(f1, 1) \== ' ' then
            f1 = f1' '
        return fTabAdd(m, c1 aDone, f1, l1)
        end
    ty = m.sql.cx.d.kx.sqlType
    le = m.sql.cx.d.kx.sqlLen
    withNulls = ty // 2
    ty = ty - withNulls
    if symbol('m.m.sql2fmt.ty') <> 'VAR' then
        call err 'sqlType' ty 'col' c1 'not supported'
    f2 = m.m.sql2fmt.ty
    if f2 == 'c' then
        f2 = '%-'min(le, m.m.maxChar)'C'
    else if f2 == 'd' then do
        trace ?r
        pr =  le % 256
        de =  le // 256
        f2 = '%'pr'.'de'i'
        end
    if \ abbrev(f2, '%') then
        call err 'sqlType' ty 'col' c1 'bad format' f2
    return fTabAdd(m, c1 aDone, f2' ', l1)
endProcedure sqlFTabAdd

sqlFTabOthers: procedure expose m.
parse arg m, doNot
    cx = m.m.sqlX
    call sqlRxFetchVars cx
    do kx=1 to m.sql.cx.d.sqlD
        c1 = m.sql.cx.col.kx
        wx = wordPos(c1, m.m.cols)
        if (wx < 1 | m.m.wx.done \== 1) & wordPos(c1, doNot) < 1 then
            call sqlFTabAdd m, m.sql.cx.col.kx
        end
    return
endProcedure sqlFTabOthers

sqlFTab: procedure expose m.
parse arg m
    call fTabBegin m
    do while sqlRxFetch(m.m.sqlX, 'sqlFTab')
        call out f(m.m.fmt, 'sqlFTab')
        end
    return fTabEnd(m)
endProcedure sqlFTab

sqlFTabCol: procedure expose m.
parse arg m
    do rx=1 while sqlRxFetch(m.m.sqlX, 'sqlFTab')
        call out left('--- row' rx '', 100, '-')
        call fTabCol m, 'sqlFTab'
        end
    call out left('--- end of' (rx-1) 'rows ', 100, '-')
    return
endProcedure sqlFTabCol

/*--- generate the format ff for a sql cx as specified in sp
          use the information from the sqlDa -------------------------*/
deleteSqlGenFmt: procedure expose m.
parse arg ff, cx, sp
    if abbrev(sp, '=') then
        return substr(sp, 2)
    if sp = '' then
        sp = '*st'
    m.ff.0 = m.sql.cx.d.sqlD
    m.ff.flds = oFlds(sqlType(cx))
    if abbrev(sp, '*') then do
        do ix=1 to m.ff.0
            m.ff.ix = substr(sp, 2)
            end
        return ff
        end
    if abbrev(fmts, '=') then
        m.Sql.cx.FMT = substr(fmts, 2)
    defs = 'ir7 fr9 sl12 Tl26' sp
    do wx = 1 to words(defs)
        parse value word(defs, wx) with ty 2 fo
        select
            when ty = 'd' then      t.384 = fo
            when ty = 'f' then      t.480 = fo'/f'
            when ty = 'i' then      t.496 = fo'/i'
            when ty = 'n' then      t.484 = fo'/n'
            when ty = 's' then      t.448 = fo
            when ty = 't' then      t.388 = fo
            when ty = 'T' then      t.392 = fo
            otherwise          call err 'bad type' ty 'for format' fo
            end
        end
    if symbol('t.496') == 'VAR' then
        t.500 = t.496
    if symbol('t.448') == 'VAR' then do
        t.452 = t.448
        t.456 = t.448
        t.464 = t.448
        end
    do wx = 1 to m.ff.0
        ty = m.sql.cx.d.wx.sqlType
        le = m.sql.cx.d.wx.sqlLen
        withNulls = ty // 2
        ty = ty - withNulls
        if symbol('t.ty') <> 'VAR' then
            call err 'sqlType' ty 'not supported'
        parse var t.ty fo 2 fl '/' op
        if op = 'i' then
             if le = 2 then le = 6
             else           le = 12
        else if op <> '' then
            call err 'length for sqlType' ty 'op' op 'not implemented'
        if fl = '=' then
            fl = le
        else if abbrev(fl, '<') then
            fl = min(le, substr(fl, 2))
        m.ff.wx = fo || fl
        end
    return ff
endProcedure sqlGenFmt

tstCatTb:
/*
$=/tstCatTb/
    ### start tst tstCatTb ############################################
    ..
    select * from sysibm.SYSDUMMY1  .
    IBMREQD
    I .
    Y .
    I .
    IBMREQD
$/tstCatTb/
*/
    call sqlConnect
    call tst t, 'tstCatTb'
    call sqlCatTb 'sysDummy1'
    call sqlCatTb 'SYSTableSpaceStats',
             , "name = 'A403A1' and dbName = 'DA540769'"
    call tstEnd t
    return
endProcedure tstCatTb

sqlCatTb: procedure expose m.
parse arg ty gOnly, wh, ord, fTab, paPlus
    tb = tkrTable(, ty)
    if gOnly == 1 then
        edFun = ''
    else
        edFun = tkrTable(, ty, 'e')
    cx = 1
    ft = 'ft'm.tb.alias
    call sqlFTabReset ft, cx, 'c 1', '1 c', 12, if(fTab, , 2000)
    call sqlFTabDef      ft, 492, '%7e'
    call FTabSet         ft, 'CONTOKEN'  , '%-16H'
    call FTabSet         ft, 'DBNAME'    , '%-8C', 'db'
    call FTabSet         ft, 'DSNAME'    , '%-44C'
    call FTabSet         ft, 'DSNUM'     , '%5i'
    call FTabSet         ft, 'PARTITION' ,'%5i' , 'part'
    call FTabSet         ft, 'PIT_RBA'   , '%-12H'
    call FTabSet         ft, 'RBA1'      , '%-12H'
    call FTabSet         ft, 'RBA2'      , '%-12H'
    call FTabSet         ft, 'START_RBA' ,'%-12H'
    call FTabSet         ft, 'TSNAME'    , '%-8C', 'ts'
    call FTabSet         ft, 'VERSION'   , '%-28C'
    if edFun \== '' then do
        interpret 'sq =' edFun'(ft, tb, wh, ord)'
        end
    else do
        cl = sqlColList(m.tb.table, m.ft.blobMax)
        sq = 'select' cl tkrTable( , tb, 'f') wh ,
             'order by' if(ord=='', m.tb.order, ord)
        call sqlPreOpen cx, sq
        call sqlFTabOthers ft
        end
    if fTab then
        call sqlFTab ft
    else
        call sqlFTabCol ft
    call sqlRxClose cx
    call sqlCatTbTrailer space(m.TKR.path paPlus, 1), sq
    return 0
endProcedure sqlCatTb

sqlCatTbTrailer: procedure expose m.
parse arg pa, sq
    ox = lastPos(' order by ', sq)
    if ox < 1 then
        call err 'order by not found in' sq
    ord = substr(sq, ox+10)
    sq = left(sq, ox-1)
    sqUp = translate(sq)
    call out ''
    call out 'dbSys:' m.sql.conDbSys
    call out 'path:' pa
    int = ''
    iNx = '  '
    br = ''
    cx = 1
    stops = '(select from where'
    do while cx < length(sq)
        nx = -1
        do sx=1 to words(stops)
            n2 = pos(word(stops, sx), sq, cx+1)
            if n2 > cx & (nx < 1 | n2 < nx) then
                nx = n2
            end
        if nx < 0 then
            leave
        call out int || substr(sq, cx, nx-cx)
        int = iNx
        if substr(sq, nx, 3) = '(se' then do
            iNx = iNx'  '
            br = left(br, length(int))')'
            end
        cx = nx
        end
    ll =  strip(substr(sq, cx))
    bq = strip(br)
    do while bq <> ''
        if right(bq, 1) \== ')' | right(ll, 1) \== ')' then
           call err 'missing ) bq:' bq', ll:' ll
        ll = strip(left(ll, length(ll) - 1))
        bq = strip(left(bq, length(bq) - 1))
        end
    call out int || ll
    if br <> '' then
        call out br
    if ord <> '' then
        call out '  order by' ord
    return
endProcedure sqlCatTbTrailer

sqlCatIxKeys: procedure expose m.
parse arg ft, tb, wh, ord
    sq = 'select ikK.colSeq, ikK.colName, ikK.ordering, ikK.period' ,
             ', ik.creator, ik.name, ik.tbCreator, ik.tbName, ikC.*'  ,
          tkrTable(, tb ,'f') wh,
          'order by' if(ord == '', m.tb.order, ord)
    call sqlPreOpen m.ft.sqlX, sq
    call sqlFTabAdd      ft, CREATOR, '%-8C', 'creator'
    call sqlFTabAdd      ft, NAME   , '%-16C','index'
    call sqlFTabAdd      ft, colSeq  , '%5i',  'coSeq'
    call sqlFTabAdd      ft, colName, '%-16C', 'column'
    call sqlFTabAdd      ft, ordering
    call sqlFTabAdd      ft, period
    call sqlFTabAdd      ft, COLNO
    call sqlFTabAdd      ft, COLTYPE
    call sqlFTabAdd      ft, LENGTH
    call sqlFTabAdd      ft, SCALE
    call sqlFTabAdd      ft, NULLS
    call sqlFTabOthers ft, 'COL9 COL10 COL11 COL47'
    return sq
endProcedure sqlCatIxKeys

sqlCatIXStats: procedure expose m.
parse arg ft, tb, wh, ord
    sq = 'select *' tkrTable( , tb, 'f') wh ,
         'order by' if(ord == '', m.tb.order, ord)
    call sqlPreOpen m.ft.sqlX, sq
    call sqlFTabAdd      ft, CREATOR, '%-8C', 'creator'
    call sqlFTabAdd      ft, NAME   ,       , 'index'
    call sqlFTabAdd      ft, INSTANCE   , '%1i' , 'i'
    call sqlFTabAdd      ft, PARTITION , , 'part'
    call sqlFTabOthers ft
    return sq
endProcedure sqlCatIXStats

sqlCatTables: procedure expose m.
parse arg ft, tb, wh, ord
    al = m.tb.alias
    sq = 'select' al'.*, tsX.type tsType, tsX.partitions',
            ', tsX.pgSize, tsX.dsSize' ,
            ', timestamp(rba1 || x''0000'') rba1Tst' ,
            ', timestamp(rba2 || x''0000'') rba2Tst' ,
          'from' m.tb.table 'left join sysibm.sysTablespace tsX',
            'on' al'.dbName = tsx.dbName and' al'.tsName = tsX.name',
            'where' m.tb.cond wh ,
            'order by'  if(ord == '', m.tb.order, ord)
    call sqlPreOpen m.ft.sqlX, sq
    call sqlFTabAdd      ft, creator   , '%-8C', 'creator'
    call sqlFTabAdd      ft, NAME      , '%-16C', 'table'
    call sqlFTabAdd      ft, type
    call sqlFTabAdd      ft, dbNAME    , '%-8C', 'db'
    call sqlFTabAdd      ft, tsNAME    , '%-8C', 'ts'
    call sqlFTabAdd      ft, tsType
    call sqlFTabAdd      ft, partitions,       , 'parts'
    call sqlFTabAdd      ft, pgSize
    call sqlFTabAdd      ft, dsSize
    call sqlFTabOthers ft, 'RBA1 RBA1TST RBA2 RBA2TST'
    call sqlFTabAdd      ft, rba1      , '%-12H'
    call sqlFTabAdd      ft, rba1Tst   ,       , 'rba1Timestamp:GMT'
    call sqlFTabAdd      ft, rba2      , '%-12H'
    call sqlFTabAdd      ft, rba2Tst   ,       , 'rba2Timestamp:GMT'
    return sq
endProcedure sqlCatTables

sqlCatTSStats: procedure expose m.
parse arg ft, tb, wh, ord
    sq = 'select' m.tb.alias'.*' ,
           tkrTable( , tb, 'f') wh ,
           'order by' if(ord == '', m.tb.order , ord)
    call sqlPreOpen m.ft.sqlX, sq
    call sqlFTabAdd      ft, DBNAME, '%-8C', 'db'
    call sqlFTabAdd      ft, NAME   , '%-8C', 'ts'
    call sqlFTabAdd      ft, INSTANCE   , '%1i' , 'i'
    call sqlFTabAdd      ft, PARTITION , , 'part'
    call sqlFTabAdd      ft, NACTIVE   , , 'nActive'
    call sqlFTabAdd      ft, NPAGES    , , 'nPages'
    call sqlFTabAdd      ft, SPACE       , , 'spaceKB'
    call sqlFTabAdd      ft, TOTALROWS   , , 'totRows'
    call sqlFTabAdd      ft, DATASIZE         , , 'dataSz'
    call sqlFTabAdd      ft, LOADRLASTTIME    , , 'loadRLasttime'
    call sqlFTabAdd      ft, REORGLASTTIME    , , 'reorgLasttime'
    call sqlFTabAdd      ft, REORGINSERTS     , , 'inserts'
    call sqlFTabAdd      ft, REORGDELETES     , , 'deletes'
    call sqlFTabAdd      ft, REORGUPDATES     , , 'updates'
    call sqlFTabAdd      ft, REORGUNCLUSTINS  , , 'unClIns'
    call sqlFTabAdd      ft, REORGDISORGLOB   , , 'disorgL'
    call sqlFTabAdd      ft, REORGMASSDELETE  , , 'massDel'
    call sqlFTabAdd      ft, REORGNEARINDREF  , , 'nearInd'
    call sqlFTabAdd      ft, REORGFARINDREF   , , 'farInd'
    call sqlFTabAdd      ft, REORGCLUSTERSENS , , 'cluSens'
    call sqlFTabAdd      ft, REORGSCANACCESS  , , 'scanAcc'
    call sqlFTabAdd      ft, REORGHASHACCESS  , , 'hashAcc'
    call sqlFTabAdd      ft, STATSLASTTIME    , , 'statsLasttime'
    call sqlFTabAdd      ft, STATSINSERTS     , , 'inserts'
    call sqlFTabAdd      ft, STATSDELETES     , , 'deletes'
    call sqlFTabAdd      ft, STATSUPDATES     , , 'updates'
    call sqlFTabAdd      ft, STATSMASSDELETE  , , 'massDel'
    call sqlFTabAdd      ft, COPYLASTTIME     , , 'copyLasttime'
    call sqlFTabAdd      ft, COPYUPDATETIME   , , 'copyUpdatetime'
    call sqlFTabAdd      ft, COPYUPDATELRSN   , '%-12H', 'updateLRSN'
    call sqlFTabAdd      ft, COPYUPDATEDPAGES , , 'updaPgs'
    call sqlFTabAdd      ft, COPYCHANGES      , , 'changes'
    call sqlFTabOthers ft
    return sq
endProcedure sqlCatTSStats

sql4obj: procedure expose m.
parse arg m, tb
    call out 'insert into' tb '--' className(objClass(m))
    line = ''
    ff = oFlds(m)
    pr = '   ('
    do fx=1 to m.ff.0
        call sql4ObjOut substr(m.ff.fx, 2)
        end
    call sql4ObjOut , 1
    call out '   ) values '
    pr = '   ('
    do fx=1 to m.ff.0
        f1 = substr(m.ff.fx, 2)
        v = m.m.f1
        if dataType(v, n) then
            call sql4ObjOut v
        else do qx=1 until v == ''
            vx = verify(v, m.mPrint)
            if vx = 0 then do
                l1 = min(60, length(v))
                w = quote(left(v, l1), "'")
                end
            else if vx > 29 | vx = 0 then do
                l1 = min(60, vx)
                w = quote(left(v, l1), "'")
                end
            else do
                l1 = min(29, length(v))
                w = 'x'quote(c2x(left(v, l1)), "'")
                end
            if qx == 1 then
                call sql4ObjOut w
            else do
                if qx = 2 then
                    call sql4ObjOut , 1
                call out '   ||' w
                end
            v = substr(v, l1+1)
            end
        end
    call sql4ObjOut , 1
    call out '   ) ; '
    return
endProcedure
sql4objOut:
parse arg t1, force
    if (force == 1 & line \== '') | length(line t1) > 65 then do
        call out pr  substr(line, 3)
        pr = '   ,'
        line = ''
        end
    if force \== 1 then
        line = line',' t1
    return
endProcedure sql4objOut
/* copy sqlDiv end   **************************************************/
/* copy db2Cat begin **************************************************/
catTbLastCol: procedure expose m.
parse upper arg cr, tb
    return sql2one( ,
          "select strip(char(colcount)) || ' ' || strip(c.name) one"  ,
              "from sysibm.sysTables t left join sysibm.sysColumns c" ,
                  "on c.tbCreator = t.creator and c.tbName = t.name"  ,
                       "and c.colNo = t.colCount"                     ,
               "where t.creator = '"cr"' and t.name = '"tb"'", ,'')
endProcedure catTbLastCol

catTbCols: procedure expose m.
parse upper arg cr, tb
    if sql2St("select strip(name) name "     ,
          "from sysibm.sysColumns " ,
          "where tbcreator = '"cr"' and tbname='"tb"'",
          "order by colNo", ggSt) < 1 then
        return ''
    res = m.ggst.1.name
    do cx=2 to m.ggst.0
        res = res m.ggst.cx.name
        end
    return res
endProcedure catTbCols

catTbColsTrunc: procedure expose m.
parse upper arg cr, tb, maxL
    if sql2St("select strip(name) name, colType, length, length2"     ,
          "from sysibm.sysColumns " ,
          "where tbcreator = '"cr"' and tbname='"tb"'",
          "order by colNo", ggSt) < 1 then
        return ''
    res = ''
    do cx=1 to m.ggst.0
        ty = m.ggSt.cx.colType
        if pos('LOB', ty) > 0 then
            res = res', substr('m.ggSt.cx.name', 1,' ,
                 min(maxL, m.ggSt.cx.length2)') 'm.ggSt.cx.name
        else if pos('CHAR', ty) > 0 & m.ggSt.cx.length > maxL then
            res = res', substr('m.ggSt.cx.name', 1,' maxL')',
                 m.ggSt.cx.name
        else
            res = res',' m.ggSt.cx.name
        end
    return substr(res, 3)
endProcedure catTbColsTrunc

catIxKeys: procedure expose m.
parse upper arg cr, ix
    sql = "select colSeq, colName, ordering"                          ,
              "from sysibm.sysKeys"                                   ,
               "where ixCreator = '"cr"' and ixName = '"ix"'" ,
               "order by colSeq"
    call sqlPreOpen 1, sql
    res = ''
    do kx=1 while sqlFetchInto(1, ':sq, :col, :ord')
        if sq \= kx then
            call err 'expected' kx 'but got colSeq' sq ,
                     'in index' cr'.'ix'.'col
        res = res || strip(col) || translate(ord, '<>?', 'ADR')
        end
    call sqlClose 1
    return res
endProcedure catIxKeys

catColCom: procedure expose m.
parse upper arg fCr, fTb, tCr, tTb
    sql = "select t.name, t.colType, t.nulls, t.""DEFAULT"""        ,
                    ", coalesce(f.nulls, 'new')"                    ,
              "from sysibm.sysColumns t"                            ,
                "left join sysibm.sysColumns f"                     ,
                  "on f.tbCreator = '"fCr"' and f.tbName = '"fTb"'" ,
                    "and f.name = t.name"                           ,
              "where t.tbCreator = '"tCr"' and t.tbName = '"tTb"'"  ,
              "order by t.colNo"
    call sqlPreOpen 1, sql
    pr = ' '
    do kx=1 while sqlFetchInto(1, ':na, :ty, :nu, :de, :nn')
        /* say kx na ty nu de 'nn' nn */
        if pos('CHAR', ty) > 0 then
            dv = "''"
        else if pos('INT' ,ty) > 0 | wordPos(ty, 'REAL FLOAT') > 0 then
            dv = 0
        else if ty == 'TIMESTMP' then
            dv = '0001-01-01-00.00.00'
        else if pos('LOB', ty) > 0 then
            dv = ty"('')"
        else
            dv = '???'
        if nu = 'Y' then
            dv = 'case when 1=0 then' dv 'else null end'
        r = '???'
        if ty = 'ROWID' then do
            r = '--'
            end
        else if nn == 'new' then do
            if de = 'Y' then
                r = '--'
            else if nu == 'N' then
                r = dv
            else
                r = 'case when 1=0 then' dv 'else null end'
            end
        else do
            if nu = 'Y' | (nu = nn) then
                r = ''
            else
                r = 'coalesce('na',' dv')'
            end
        if abbrev(r, '--') then do
            r = ' ' r
            end
        else do
            r = pr r
            pr = ','
            end
        if pos('???', r) > 0 then
            call err 'no default for type' ty 'in' tCr'.'tTb'.'na
        call out r na
        end
    call sqlClose 1
    return
endProcedure catColCom
/* copy db2Cat end   **************************************************/
/* copy sqlO   begin ***************************************************
    sql interface  mit  o und j Anbindung
***********************************************************************/
sqlOini: procedure expose m.
    if m.sqlO.ini == 1 then
        return
    call sqlIni
    m.sqlO.ini = 1
    call jIni
    m.sqlO.cursors  = left('', 200)
    call classNew 'n SqlResultRdr u JRWO', 'm',
        , "jReset m.m.cursor = arg; m.m.type = arg2;",
        , "jOpen  call sqlResultRdrOpen m, opt",
        , "jClose call sqlClose m.m.cursor",
        , "jReadO return sqlSelReadO(m)"
    call classNew 'n SqlSel u JRWO', 'm',
        , "jReset m.m.src = arg; m.m.type = arg2;",
        , "jOpen  call sqlSelOpen m, opt",
        , "jClose call sqlSelClose m",
        , "jReadO return sqlSelReadO(m)"
    call classNew 'n SqlDRS u SqlSel', 'm',
        , "jReset m.m.loc = arg; m.m.type = arg2;",
        , "jOpen  call sqlDRSOpen m, opt",
        , "jClose call sqlSelClose m",
        , "jReadO return sqlSelReadO(m)"
    call classNew 'n SqlRxConnection u', 'm',
        , "sqlQuery  return sqlRxQuery(cx, src, retOk)",
        , "sqlFetch  return sqlRxFetch(cx, dst, retOk)",
        , "sqlClose  return sqlRxClose(cx, retOk)",
        , "sqlUpdate return sqlRxUpdate(cx, src, retOk)",
        , "sqlCall   call err 'implement sqlRxCall"
    call classNew 'n SqlRxStatement u', 'm',
        , "sqlQuery  return sqlRxQuery(m.cx.cursor, src, retOk)",
        , "sqlFetch  return sqlRxFetch(m.cx.cursor, dst, retOk)",
        , "sqlClose  return sqlRxClose(m.cx.cursor, retOk)",
        , "sqlUpdate return sqlRxUpdate(m.cx.cursor, src, retOk)",
        , "sqlCall   call err 'implement sqlRxCall"
    call classNew 'n SqlCsmConnection u', 'm',
        , "sqlQuery  return sqlCsmQuery(cx, src, retOk)",
        , "sqlFetch  return sqlCsmFetch(cx, dst)",
        , "sqlClose  return 0",
        , "sqlUpdate call err 'implement sqlCsmUpdate'"   ,
        , "sqlCall   call err 'implement sqlCsmCall'"
    call classNew 'n SqlCsmStatement u', 'm',
        , "sqlQuery  return sqlCsmQuery(m.cx.cursor, src, retOk)",
        , "sqlFetch  return sqlCsmFetch(m.cx.cursor, dst)",
        , "sqlClose  return 0",
        , "sqlUpdate call err 'implement sqlCsmUpdate'"   ,
        , "sqlCall   call err 'implement sqlCsmCall'"
    return 0
endProcedure sqlOini
/*--- connect and/or disconnect to DB2 -------------------------------*/
sqlConnect: procedure expose m.
parse upper arg sys, retOk
    call sqlOIni
    if pos('/', sys) > 0 then do
        parse value space(sys, 0) with hst '/' sys
        cTy = 'Csm'
        end
    else do
        hst = ''
        cTy = 'Rx'
        end
    if m.sql.conType==cTy & m.sqlHost==hst & m.sqlconDbSYs == sys then
        return 0
    if m.sql.conType \== '' then
        call sqlDisconnect
    res = 0
    if cTy = 'Rx' then
        res = sqlRxConnect(sys, retOk)
    else
        m.sql.conDbSys = sys
    if res < 0 then
        return res
    m.sql.conType = cTy
    m.sql.conhost = hst
    m.sql.connection = oNew('Sql'cTy'Connection')
    return res
endProcedure sqlConnect

sqlDisconnect: procedure expose m.
parse arg retOk
    if m.sql.conType == 'Rx' then
        call sqlRxDisconnect
    m.sql.conType = ''
    m.sql.conDbSys = ''
    return 0
endProcedure sqlDisonnect

/*--- execute a query from sql, with one resultset -------------------*/
sqlQuery: procedure expose m.
parse arg cx, src, retOk, m.sql.cx.type
    if m.sql.cx.type \== '' then
        m.sql.cx.type = class4Name(m.sql.cx.type)
    if datatype(cx, 'n') then
        interpret objMet(m.sql.connection, 'sqlQuery')
    else
        interpret objMet(cx, 'sqlQuery')
/*--- fetch next row to m.dst.* at end return false ------------------*/
sqlFetch: procedure expose m.
parse arg cx, dst, retOk
    if datatype(cx, 'n') then
        interpret objMet(m.sql.connection, 'sqlFetch')
    else
        interpret objMet(cx, 'sqlFetch')
/*--- close cursor 'c'cx ---------------------------------------------*/
sqlClose: procedure expose m.
parse arg cx, retOk
    if datatype(cx, 'n') then
        interpret objMet(m.sql.connection, 'sqlClose')
    else
        interpret objMet(cx, 'sqlClose')
    return 0
/*-- execute an sql with no resultset, but possibly outParms ---------*/
sqlUpdate: procedure expose m.
parse arg cx, src, retOk
    if cx == '' | datatype(cx, 'n') then
        interpret objMet(m.sql.connection, 'sqlUpdate')
    else
        interpret objMet(cx, 'sqlUpdate')
endProcedue sqlUpdate

/*-- execute an sql call with outParms and multiple resultSets -------*/
sqlCall: procedure expose m.
parse arg cx, src, retOk
    if cx == '' | datatype(cx, 'n') then
        interpret objMet(m.sql.connection, 'sqlCall')
    else
        interpret objMet(cx, 'sqlCall')
endProcedure sqlCall

sqlSel: procedure expose m.
parse arg src, type
     s = oNew('SqlSel', inp2str(src, '-sql'), type)
     call pipeWriteAll s
     return m.s.rowCount
endProcedure sqlSel

/*--- return a free cursor -------------------------------------------*/
sqlGetCursor: procedure expose m.
parse arg rng
    if rng == '' then
        return sqlGetCursorRng(rng, 10, 48)
    else if rng == 'h' then
        return sqlGetCursorRng(rng, 60, 99)
    else if rng == 'a' then
        return sqlGetCursorRng(rng, 110, 199)
    else
        call err 'bad cursor range' rng
endProcedure sqlGetCursor

sqlGetCursorRng: procedure expose m.
parse arg rng, fr, to
    cx = pos(' ', m.sqlO.cursors, fr)
    if cx < fr & cx > to then
        call err "no more '"rng"' cursors between" fr "and" to,
                 ":"m.sqlO.cursors
    m.sqlO.cursors = overlay('u', m.sqlO.cursors, cx)
    return cx
endProcedure sqlGetCursorRNG

/*--- mark a cursor as closed ----------------------------------------*/
sqlFreeCursor: procedure expose m.
parse arg cx
    if substr(m.sqlO.cursors, cx, 1) \== 'u' then
         call err 'sqlFreeCursor('cx') not in use :'m.sqlO.cursors
    m.sqlO.cursors = overlay(' ', m.sqlO.cursors, cx)
    return
endProcedure sqlFreeCursor

sqlStmtsOpt: procedure expose m.
parse arg src, opts
    upper opts
    sub = ''
    o = ''
    retOk = ''
    do wx=1 to words(opts)
        w = word(opts, wx)
        if abbrev(w, '-SQL') then
            o = o'-sql'substr(w, 5)
        else if w == '-O' | w == 'O' then
            o = o'-o'
        else if w = '*' | datatype(w, 'n') then
            retOk = retOk w
        else if length(w) == 4 then
            sub = w
        else
            call err 'bad opt' w 'in opts' opts 'not -sql? -o or subsys'
        end
    call sqlOIni
    if   (sub == '' & m.sql.conDbSys== '') ,
       | (sub \== '' & m.sql.conDbSys \== sub) then
        call sqlConnect sub
    return sqlStmts(src, strip(retOk), strip(o))
endProcedure sqlStmtsOpt

/*** execute sql's in a stream (separated by ;)
       opt: 'o' ==> write objects, otherwise fmtFTab
            'sql72' ==> spufi formatting (window 72) else linebreaks */
sqlStmts: procedure expose m.
parse arg sqlSrc, retOk, opt
   dlm = ';'
   isStr = oStrOrObj(sqlSrc, m.j.in)
   fLen = ''
   if pos('sql', opt) > 0 then
       fLen = word(substr(opt, pos('sql', opt)+3), 1)
   if isStr then do
       m.sqlStmts.rdr = ''
       call sbSrc sqlStmts, ggStr
       end
   else do
       fi = jOpen(o2File(ggObj), '<')
       call jCatSqlReset sqlStmts, , fi, fLen
       end
   do forever
       s1 = jCatSqlNext(sqlStmts, dlm)
       if s1 = '' then
           leave
       if translate(left(s1, 10)) == 'TERMINATOR' then do
            dlm = strip(substr(s1, 11))
            if length(dlm) \== 1 then
                call scanErr sqlStmts, 'bad terminator' dlm
            iterate
            end
       call outSt(splitNl(sqlTmp, sqlStmt(s1, retOk, opt)))
       end
   if \ isStr then
       call jClose fi
   return 0
endProcedure sqlStmts

sqlStmt: procedure expose m.
parse arg src, retOk, opt
    cx = sqlGetCursor()
    r1 = sqlExecute(cx, src, retOK)
    res = m.sql.sqlHaHi || sqlMsgLine(r1, m.sql.cx.updateCount, src)
    if m.sql.cx.resultSet \== '' then do
        rdr = sqlResultRdr(cx)
        if pos('o', opt) > 0 then
            call pipeWriteAll rdr
        else
            call fmtFTab sqlStmtFmt, rdr
        res = sqlMsgLine(m.rdr.rowCount 'rows fetched', , src)
        end
    call sqlFreeCursor cx
    return res
endProcedure sqlStmt

/*--- execute the given sql plus a commit
         until no more rows are updated -----------------------------*/
sqlUpdComLoop: procedure expose m.
parse arg src, retOk, opt
    src = inp2Str(src)
    crs = sqlGetCursor()
    upds = 0
    if retOk == '' then
        retOk = 100
    do coms=0
        cd = sqlExecute(crs, src, retOk)
        if m.sql.crs.updateCount < 1 then
            return sqlMsgLine( , upds, src, coms 'commits')
        upds = upds + m.sql.crs.updateCount
        call sqlCommit
        if coms // 20 = 19 then
            say sqlMsgLine(time(), upds, src, (coms+1) 'commits')
        end
endProcedure sqlUpdComLoop

removeSqlStmt: procedure expose m.
parse arg src, ggRet, opt
    bx = verify(src, '( ')
    if bx < 1 then
        return ''
    fun = translate(word(substr(src, bx), 1))
    w2  = translate(word(substr(src, bx), 2))
    res = ''
    if fun == 'SELECT' | fun = 'WITH' then do
        s = oNew('SqlSel', inp2str(src, '%S%+Q\s'))
        if pos('o', opt) > 0 then
            call pipeWriteAll s
        else
            call fmtFTab sqlStmtFmt, s
        res = m.s.rowCount 'rows fetched'
        end
    else if  fun = 'SET' &  abbrev(w2, ':') then do
        ex = pos('=', w2)
        if ex > 2 then
            var = strip(substr(w2, 2, ex-2))
        else
            var = strip(substr(w2, 2))
        if var = '' then
            var = 'varUnbekannt'
        call sqlExec src, ggRet
        res = 'sqlCode' sqlCode var'='value(var)
        end
    else if fun = 'SET' | (fun = 'DECLARE' & w2 = 'GLOBAL') then do
        call sqlExImm src, ggRet
        res = 'sqlCode' sqlCode
        end
    else if fun = 'CALL' then do
        res = sqlStmtCall(src, ggRet, opt)
        end
    else do
        call sqlExec src, ggRet
        res = 'sqlCode' sqlCode
        if wordPos(fun, 'DELETE INSERT UPDATE') > 0 THEN
            res = res',' sqlErrd.3 'rows' ,
                  translate(fun, m.mAlfLC, m.mAlfUC)'d'
        end
    aa = strip(src)
    ll = 75 - length(res)
    if length(aa) > ll then
        aa = space(aa, 1)
    if length(aa) > ll then
        aa = left(aa,  ll-3)'...'
    return res':' aa
endProcedure removeSqlStmt

sqlStmtCall: procedure expose m.
parse arg src, retOk, opt
    s = scanSrc(scanSqlReset(sqlstmtcall, ,0), src)
    if \ scanSqlId(scanSkip(s)) | m.s.val \== 'CALL' then
        call scanErr s, 'not a call'
    if \ scanSqlQuId(scanSkip(s)) then
        call scanErr s, 'qualified id missing after call'
    loc = ''
    if m.s.val.0 = 1 then
        wh = 'name =' quote(m.s.val.1, "'")
    else if m.s.val.0 = 2 then
        wh = "schema = '"strip(m.s.val.1)"'" ,
             "and name = '"strip(m.s.val.2)"'"
    else if m.s.val.0 = 3 then do
        loc = m.s.val.1
        wh = "schema = '"strip(m.s.val.2)"'" ,
             "and name = '"strip(m.s.val.3)"'"
        end
    else
        call scanErr s, 'storedProcedureName' m.s.val ,
               'has' m.s.val.0 'parts, should have 1, 2 or 3'
    pn = m.s.val
    da = sqlStmtCallDa(sqlStmtCall, loc, wh)
    if \ scanLit(scanSkip(s), '(') then
        call scanErr s, '( expected after call' pn
    varChars = f
    do ax=1
        m.da.ax.varName = ''
        isEmpty = 0
        if scanLit(scanSkip(s), ':') then do
             if \ scanVerify(scanSkip(s), m.mAlfDot) then
                 call scanErr s, 'variable expected after : in call' pn
             m.da.ax.varName = m.s.tok
             if m.da.ax.io == 'i' | m.da.ax.io == 'b' then
                 m.da.ax.sqlData = envGet(m.da.ax.varName)
             end
        else if scanString(s) then
            m.da.ax.sqlData = m.s.val
        else if scanVerify(s, ',):;', 'm') then
            m.da.ax.sqlData = strip(m.s.tok)
        else
            isEmpty = 1
        if scanLit(scanSkip(s), ')') then
            leave
        if \ scanLit(s, ',') then
            call scanErr s, if(isEmpty, 'value, var, ') ,
                         || "',' or ')' expected"
        end
    if ax \= m.da.sqlD then
        if \ (ax=1 & m.da.sqlD = 0 & isEmpty) then
            call scanErr s, 'call with' ax 'parms but' ,
                                pn 'needs' m.da.sqld
    caCo = sqlExec('call' pn 'using descriptor :M.'da, 466)
    call out '--- called' pn', sqlCode' caCo
    do ax=1 to m.da.sqlD
        call Out '  parm' ax m.da.ax.io m.da.ax.parmName,
                 || if(m.da.ax.varName \== '',' $'m.da.ax.varName),
               '=' m.da.ax.sqlData
        if m.da.ax.varName \== '' then
            call envPut m.da.ax.varName, m.da.ax.sqlData
        end
    if caCo = 466 then do
        drop sqlDP
        call sqlExec 'describe procedure :pn into :m.sqlDp'
        if m.sqldp.sqlD < 1 then
             call err 'bad sqldp sqlD='m.sqldp.sqlD 'for sqlCode' caCo
        do dx=1 to m.sqldp.sqlD
            call out '  dynamic result set' dx m.sqldp.dx.sqlName ,
                     'locator='m.sqldp.dx.sqlLocator
            end
        do dx=1 to m.sqldp.sqlD
            drs = 'dynamic result set' dx'='m.sqldp.dx.sqlName 'of' pn
            call out '--- begin of' drs
            rdr = sqlDRS(m.sqldp.dx.sqlLocator)
            if pos('o', opt) > 0 then
                call pipeWriteAll rdr
            else
                call fmtFTab sqlStmtFmt, rdr
            call out '---' m.rdr.rowCount 'rows fetched from' drs
            end
        end
    return 'sqlCode' caCo
endProcedure sqlStmtCall

sqlStmtCallDa: procedure expose m.
parse arg da, loc, wh
    cr = if(loc=='',,loc'.')'sysIbm'
    sql = "select 'SCHEMA=''' || strip(schema) || ''''",
             "|| ' and name='''   || strip(name  ) || ''''",
             "|| ' and specificName=''' || strip(specificName) || ''''",
             "|| ' and routineType =''' || strip(routineType ) || ''''",
             "|| ' and VERSION     =''' || strip(VERSION     ) || ''''",
          "from" cr".SysRoutines ",
          "where" wh "and active = 'Y'"
    if sqlpreAllCl(49, sql, rou, ':m.rou') <> 1 then
        call err m.rou.0 'routines found for' wh
    rdr = jOpen(sqlRdr('select * from' cr'.sysParms where' m.rou,
         'order by ordinal'), '<')
    do ix=1 while assNN('A', jReadO(rdr))
         if m.a.ordinal <>  ix then
             call err 'ix' ix 'mismatch ordinal' m.a.ordinal
         ty = m.a.dataTypeId
         m.da.ix.sqlType = ty
         m.da.ix.sqlLen  = m.a.length
         m.da.ix.sqlLen.sqlPrecision = m.a.length
         m.da.ix.sqlLen.sqlScale     = m.a.scale
         if wordPos(ty, 384 385) > 0 then        /* date */
             m.da.ix.sqlLen  = 10
         else if wordPos(ty, 388 389) > 0 then   /* time */
             m.da.ix.sqlLen  = 8
         else if wordPos(ty, 392 393) > 0 then   /* timestamp */
             m.da.ix.sqlLen  = 26
         m.da.ix.sqlData = ''
         m.da.ix.parmName= m.a.parmName
         m.da.ix.io      = translate(m.a.rowType, 'iob', 'POB')
         m.da.ix.sqlInd  = 1
         end
    m.da.sqlD = ix - 1
    return da
endProcedure sqlStmtCallDa

sqlResultRdr: procedure expose m.
parse arg cx, type
     return oNew('SqlResultRdr', cx, type)
endProcedure sqlRdr

sqlRdr: procedure expose m.
parse arg src, type
     return oNew('SqlSel', inp2str(src, '%S%qn %S'), type)
endProcedure sqlRdr

sqlResultRdrOpen: procedure expose m.
parse arg m, opt
    if opt\== m.j.cRead then
        call err 'opt not' m.j.cRead 'sqlResultRdrOpen('m',' opt')'
    m.m.jReading = 1
    m.m.rowCount = 0
    return m
endProcedure sqlResultRdrOpen

/*--- prepare and open cursor
      generate type and fetchList ------------------------------------*/
sqlSelOpen: procedure expose m.
parse arg m, opt
    m.m.cursor = sqlGetCursor()
    call sqlQuery m.m.cursor, m.m.src, ,m.m.type  /* ????? */
    return sqlResultRdrOpen(m, opt)
endProcedure sqlOpen

/*--- dynamic result sets --------------------------------------------*/
sqlDRS: procedure expose m.
parse arg loc, type
     return oNew('SqlDRS', loc, type)
endProcedure sqlDRS

sqlDRSOpen: procedure expose m.
parse arg m, opt
    if opt\== m.j.cRead then
        call err 'opt not' m.j.cRead 'sqlDRSOpen('m',' opt')'
    crs = sqlGetCursor('a')
    crN = 'C'crs
    m.m.cursor = crs
    call sqlReset crs
    call sqlexec 'allocate C'crs 'cursor for result set :m.m.loc'
    call sqlExec 'describe cursor c'crs 'into :m.sql.'crs'.D'
    m.m.jReading = 1
    m.m.rowCount = 0
    return m
endProcedure sqlDRSOpen

/*--- create the type, fetch vars etc. from the sqlDA ---------------*/
sqlFetchClass: procedure expose m.
parse arg cx
    if m.sql.cx.type = '' then do
        ff = mCat('SQL.'cx'.COL', '%qn v, f %s')
        m.sql.cx.type = classNew('n* SQL u f' ff 'v')
        end
    return m.sql.cx.type
endProcedure sqlFetchClass

/*--- fetch cursor for this sqlSel -----------------------------------*/
sqlSelReadO: procedure expose m.
parse arg m
    cx = m.m.cursor
    v = oNew(sqlFetchClass(cx))
    if \ sqlFetch(cx, v) then
        return ''
    m.m.rowCount = m.m.rowCount + 1
    return v
endProcedure sqlSelReadO

/*--- close sql Cursor -----------------------------------------------*/
sqlSelClose: procedure expose m.
parse arg m, v
    call sqlClose m.m.cursor
    call sqlFreeCursor m.m.cursor
    m.m.cursor = ''
    return m
endProcedure sqlSelClose
/* copy sqlO   end   **************************************************/
/* copy sqlC   begin ***************************************************
    sql interface Compatibility mode
***********************************************************************/
/*--- prepare and declare 'c'cx from sql src -------------------------*/
sqlPreDeclare: procedure expose m.
parse arg cx, src, ggRetOk, descOut
     m.sql.cx.type = ''
     res = sqlPrepare(cx, src, ggRetOk, descOut)
     if res >= 0 then
         return sqlExec('declare c'cx 'cursor for s'cx)
     return res
endProcedure sqlPreDeclare

/*--- prepare, declare and open 'c'cx from sql src -------------------*/
sqlPreOpen: procedure expose m.
parse arg cx, src, descOut, descInp
     res = sqlPreDeclare(cx, src, descOut, descInp)
     if res >= 0 then
         return sqlOpen(cx)
     return res
endProcedure sqlPreOpen

/*--- fetch cursor 'c'cx into variables ggVars -----------------------*/
sqlFetchInto:
parse arg ggCx, ggVars
    if ggVars == '' then
        ggVars = 'descriptor :M.SQL.'ggCX'.D'
                        /* accept sqlCodes > 0 except 100 */
    ggRes = sqlExec('fetch c'ggCx 'into' ggVars, 100)
    if ggRes == 0 then
        return 1
    if ggRes == 100 then
        return 0
    return ggRes
endProcedure sqlFetchInto

/*--- return sql variable list for stem st and fields the word in vars
          if withInd == 1 then with sqlIndicator variables
        sqlVars('S', 'A B') --> ':S.A, :S.B'
        sqlVars('S', 'A B', 1) --> ':S.A :S.A.SQLIND, :S.B :S.B.SQLIND'
----------------------------------------------------------------------*/
sqlVars: procedure expose m.
parse arg st, vars, withInd
    res = ''
    if st ^== '' then
        st = st'.'
    do ix=1 to words(vars)
        res = res', :'st || word(vars, ix)
        if withInd == 1 then
             res = res ':'st || word(vars, ix)'.sqlInd'
        end
    return substr(res, 3)
endProcedure sqlVars

/*--- open cursor 'c'cx fetch all into variables vars and close
      st = passed stem, sx = row number
      return number of rows fetched ----------------------------------*/
sqlOpAllCl:
parse arg ggCx, st, ggVars
    if arg() >= 4 then do
        call sqlDescribeInput ggCx
        do ggAx=4 to arg()
            call sqlDASet ggCx, 'I', ggAx-3, arg(ggAx)
            end
        ggRes = sqlOpen(ggCx use)
        end
    else do
        ggRes = sqlOpen(ggCx)
        end
    if ggRes < 0 then
        return ggRes
    do sx = 1 until ggRes \== 1
        ggRes = sqlFetchInto(ggCx, ggVars)
        end
    m.st.0 = sx - 1
    call sqlRxClose ggCx
    if ggRes == 0 then
        return m.st.0
    return ggRes
endProcedure sqlOpAllCl

/*--- prepare, declare open cursor 'c'cx, fetch all and close
      return number of rows fetched ----------------------------------*/
sqlPreAllCl:
parse arg ggCx, ggSrc, st, ggVars
    ggRes = sqlPreDeclare(ggCx, ggSrc)
    if ggRes >= 0 then
        return sqlOpAllCl(ggCx, st, ggVars)
    return ggRes
endProcedure sqlPreAllCl

/*--- execute statement 's'cx using arguments arg(2), arg(3)... ------*/
sqlExecStmt:
parse arg ggCx ggRetOk  /* no , for ggRetOk, arg(2) is used already| */
    if ggAx > 1 then
        call sqlDescribeInput ggCx
    do ggAx=2 to arg()
        call sqlDASet ggCx, 'I', ggAx-1, arg(ggAx)
        end
     return sqlExec('execute s'ggCx 'using descriptor :M.SQL.'ggCx'.I',
                   , ggRetOk)
endProcedure execStmt

/*--- execute immediate the sql src ----------------------------------*/

/* copy sqlC   end   **************************************************/
/* copy sqlCsm begin **************************************************/
/*--- send an sql to csm an handle sqlCode ---------------------------*/
sqlCsmExe:
parse arg cx, ggSqlStmt, ggRetOk
    sql_HOST =  m.sql.conHost
    SQL_DB2SSID = m.sql.conDbSys
    sql_query = ggSqlStmt
    address tso "CSMAPPC START PGM(CSMASQL)"
    if \ (rc = 0 |  rc = 4) then
        call err 'csmappc rc' rc
    if sqlCode = 0 then
        return 0
    else if pos('*', ggRetOk) > 0 | wordPos(sqlCode, ggRetOk) > 0 ,
            then do
        if sqlCode < 0 & pos('say', ggRetOk) > 0 then
            call errSay sqlmsg(sqlCA2Rx(sqlCa))
        return sqlCode
        end
    else if sqlCode < 0 then
        call err sqlmsg(sqlCA2rx(sqlCa))
    else if pos('w', ggRetOk) < 1 then
        if sqlCode = 100 then
            call errSay 'sqlCode +100 row not found\nstmt =' ggSqlStmt
        else
            call errSay sqlMsg(sqlCA2rx(sqlCa)), 'w'
    return sqlCode
endProcedure sqlCsmExe

/*--- execute a query from sql, with one resultset -------------------*/
sqlCsmQuery: procedure expose m.
parse arg cx, sqlSrc, retOk, src
    res = sqlCsmExe(cx, sqlSrc, 100 retOk)
    if res < 0 then
        return res
    f = m.sql.cx.type
    if src == '' then
        src = 'SQL.'cx'.DATA'
    m.sql.cx.data = src
    if f \== '' then do
        f = f'.FLDS'
        if m.f.0 < sqlD then
            call err 'not enough fields in type'
        end
    do kx=1 to sqlD
        rxNa = SQLDA_REXXNAME.kx
        cn = sqlVarName(f, kx, sqlDa_name.kx)
        m.sql.cx.col.kx = cn
        do rx=1 to sqlRow#
            if substr(sqlIndicator.rx, kx ,1) == 'ff'x then
                m.src.rx.cn = m.sqlNull
            else
                m.src.rx.cn = value(rxNa'.'rx)
            end
        end
    m.src.0 = sqlRow#
    m.sql.cx.col.0 = sqlD
    m.sql.cx.daIx = 0
    return 0
endProcedure sqlCsmQuery

sqlCsmFetch: procedure expose m.
parse arg cx, dst
    src = m.sql.cx.data
    rx = m.sql.cx.daIx + 1
    if rx > m.sql.cx.data.0 then
        return 0
    m.sql.cx.daIx = rx
    do kx = 1 to m.sql.cx.col.0
        c = m.sql.cx.col.kx
        m.dst.c = m.src.rx.c
        end
    return 1
endProcedure sqlCsmFetch
/* copy sqlCsm end   **************************************************/
/* copy sqlQCsm begin *************************************************/
/*--- execute a query from sql, with one resultset -------------------*/
sqlQuery: procedure expose m.
parse arg cx, src, retOk
    return sqlCsmQuery(cx, src, retOk)
/*--- fetch next row to m.dst.* at end return false ------------------*/
sqlFetch: procedure expose m.
parse arg cx, dst, retOk
    return sqlCsmFetch(cx, dst)
/*--- close cursor 'c'cx ---------------------------------------------*/
sqlClose: procedure expose m.
parse arg cx, retOk
    return 0
/*-- execute an sql with no resultset, but possibly outParms ---------*/
sqlUpdate: procedure expose m.
parse arg cx, src, retOk
    return sqlCsmUpdate(cx, src, retOk)
/*-- execute an sql call statement with outParms and several results--*/
sqlCall: procedure expose m.
parse arg cx, src, retOk
    return sqlCsmCall(cx, src, retOk)
/* copy sqlQCsm end   *************************************************/
/* copy sqlRx  begin ***************************************************
       Achtung: inc generiert sql aus sqlRx, Aenderungen nur in sqlRx|
    sql interface
***********************************************************************/
/*--- initialize sqlRx -----------------------------------------------*/
sqlIni: procedure expose m.
    if m.sql.ini == 1 then
        return
    m.sqlNull = '---'
    m.sqlInd = 'sqlInd'
    m.sql.defCurs= 49
    m.sqlCAMsg = 0
    m.sqlSuMsg = 2
    m.sql.ini = 1
    m.sql.conType = ''
    m.sql.conDbSys = ''
    m.sql.conhost = ''
    isInProd = wordPos(sysvar(sysNode), 'RZ2 RZ4') > 0
    m.sqlRetOK = 'dne' copies('rod', \ isInProd)
    return 0
endProcedure sqlIni

/*--- connect to the db2 subsystem sys -----------------------------*/
sqlRxConnect: procedure expose m.
parse upper arg sys, ggRetOk
    call sqlIni
    address tso "SUBCOM DSNREXX"
    if rc <> 0 then do
       sRc = RXSUBCOM('ADD','DSNREXX','DSNREXX') /* ADD HOST CMD ENV  */
       if sRc <> 0 then
           call err 'rc' sRc 'from RXSUBCOM(ADD, DSNREXX, DSNREXX)'
       end
    if sys = '-' then
        return 0
    if sys \== '' then
        nop
    else if sysvar(sysnode) == 'RZ1' then
        sys = 'DBAF'
/*  else if sysvar(sysnode) == 'RZ4' then
        sys = 'DP4G'
*/  else
        call err 'no default subsys for' sysvar(sysnode)
    m.sql.conDbSys = sys
    ggSqlStmt =  'connect' sys
    address dsnRexx ggSqlStmt
    if rc = 0 then
        return 0
    interpret sqlErrorHandler(rc, ggRetOk, ggSqlStmt)
endProcedure sqlRxConnect

/*--- diconnect from db2 ---------------------------------------------*/
sqlRxDisconnect: procedure expose m.
parse arg retOk
    ggSqlStmt =  'disconnect'
    m.sql.conDbSys = ''
    address dsnRexx ggSqlStmt
    if rc = 0 then
        return 0
    interpret sqlErrorHandler(rc, ggRetOk, ggSqlStmt)
endProcedure sqlDisconnect

/*--- execute a query from sql, with one resultset -------------------*/
sqlRxQuery: procedure expose m.
parse arg cx, src, retOk
     res = sqlPrepare(cx, src, retOk, 1)
     if res < 0 then
         return res
     res = sqlExec('declare c'cx 'cursor for s'cx, retOk)
     if res < 0 then
         return res
     res = sqlExec('open c'cx, retOk)
     if res < 0 then
         return res
     call sqlRxFetchVars cx
     m.sql.cx.updateCount = sqlErrd.3
     m.sql.cx.resultSet = cx
     return res
endProcedure sqlRxQuery

/*--- fetch next row to m.dst.* at end return false ------------------*/
sqlRxFetch: procedure expose m.
parse arg cx, dst, retOk
    fetCode = sqlExec('fetch c'cx 'into' sqlRxFetchVars(cx), 100 retOk)
    if fetCode == 100 then
        return 0
    if fetCode < 0 then
        return fetCode
    call sqlSetNull cx, dst
    return 1
endProcedure sqlRxFetch

/*--- close cursor 'c'cx ---------------------------------------------*/
sqlRxClose: procedure expose m.
parse arg cx, retOk
     return sqlExec('close c'cx, retOk)
endProcedure sqlRxClose

/*-- execute an sql with no resultset, but possibly outParms ---------*/
sqlRxUpdate: procedure expose m.
parse arg cx, src, retOk
    m.sql.cx.updateCount = ''
    m.sql.cx.resultSet   = ''
    bx = verify(src, '( ')
    if bx > 0 then
        fun = translate(word(substr(src, bx), 1))
    if  fun = 'SET' then do
        w2 = translate(word(substr(src, bx), 2))
        if \ abbrev(w2, ':') then
            return sqlExImm(src, retOk)
        trace ?r
        ex = pos('=', w2)
        if ex = 0 then
            ex = length(w2)+1
        var = strip(substr(w2, 2, ex-2))
        if var = '' then
            call err 'bad hostVar in' src
        m.sql.outVar = var
        src2 = 'set :M.sql.out.'var substr(w, ex) subword(src, 3)
        return sqlExec(src2, retOk)
        end
    if fun == 'DECLARE'  then do
        if 'GLOBAL' == translate(word(substr(src, bx), 2)) then
            return sqlExImm(src, retOk)
        end
    res = sqlExec(src, retOk)
    if wordPos(fun, 'DELETE INSERT UPDATE') > 0 then
        m.sql.cx.updateCount = sqlErrd.3
    return res
endProcedure sqlRxUpdate

/*-- execute a query, update or call ---------------------------------*/
sqlExecute: procedure expose m.
parse arg cx, src, retOk
    src = inp2Str(src, '-sql')
    f = translate(word(substr(src, max(verify(src, '( '), 1)), 1))
    m.sql.cx.fun = f
    if f == 'SELECT' | f == 'WITH' then
        return sqlQuery(cx, src, retOk)
    else if f == 'CALL' then
        call err 'implement sql call for:' src
    else
        return sqlUpdate(cx, src, retOk)
endProcedure sqlExecute

/*-- execute a query, copy result to stem ----------------------------*/
sql2St: procedure expose m.
parse arg src, dst, retOk, type
    cx = m.sql.defCurs
    res = sqlQuery(cx, src, retOk, type)
    if res >= 0 then do
        do sx=1 while sqlFetch(cx, dst'.'sx)
           end
        res = sx-1
        end
    m.dst.0 = res
    call sqlRxClose cx
    return res
endProcedure sql2St

/*-- execute a query and return value of the first column
           if > 1 row fail, if 0 rows return arg(3) or fail ----------*/
sql2One: procedure expose m.
parse arg src, dst
    cx = m.sql.defCurs
    call sqlQuery cx, src
    if \ sqlFetch(cx, dst) then
        if arg() > 2 then
            return arg(3)
        else
            call err 'no row returned for:' src
    if sqlFetch(cx, dst.2) then
        call err '2 or more rows for' src
    c1 = m.sql.cx.col.1
    res = m.dst.c1
    call sqlRxClose cx
    return res
endProcedure sql2One

/*--- reset sql cursor 'c'cx fields ----------------------------------*/
sqlReset: procedure expose m.
parse arg cx
     m.sql.cx.updateCount = ''
     m.sql.cx.resultSet   = ''
     m.sql.cx.needDesc    = 1
     m.sql.cx.d.sqlD = 'noSqlDA'
     m.sql.cx.i.sqlD = 'noDescInp'
     m.sql.cx.fetchVars = ''
     m.sql.cx.type  = ''
     m.sql.cx.col.0 = ''
     m.sql.cx.into = ''
     return
endProcedue sqlReset

/*--- prepare statement 's'cx from sql src into descriptor desc ------*/
sqlPrepare: procedure expose m.
parse arg cx, src, retOk, descOut
     src = inp2str(src, '%qn%s ')
     s = ''
     if descOut == 1 then
         s = 'into :M.SQL.'cx'.D'
     call sqlReset cx
     return sqlExec('prepare s'cx s 'from :src', retOk)
endProcedure sqlPrepare

/*--- open cursor 'c'cx using arguments arg(2), arg(3)... ------------*/
sqlOpen: procedure expose m.
parse arg cx us
    if us == '' then do
        if arg() <=  1 then
            return sqlExec('open c'cx)
        call sqlDescribeInput cx
        do ix=1 to arg()-1
            call sqlDASet cx , 'I', ix, arg(ix+1)
            end
        end
    return sqlExec('open c'cx 'using descriptor :M.SQL.'cx'.I')
endProcedure sqlOpen

/*--- execute a prepared statement with arg(2), arg(3)... ------------*/
sqlExePreSt: procedure expose m.
parse arg cx retOk
    if arg() <=  1 then
        return sqlExec('execute s'cx, retOk)
    call sqlDescribeInput cx
    do ix=1 to arg()-1
        call sqlDASet cx , 'I', ix, arg(ix+1)
        end
    return sqlExec('execute s'cx 'using descriptor :M.SQL.'cx'.I',
                   , retOk)
endProcedure sqlExePreSt
/*--- describe output (if not already done)
         and return size of sqlDa ------------------------------------*/
sqlDescribeOutput: procedure expose m.
parse arg cx, force
    if force == 1 | \ datatype(m.sql.cx.d.sqlD, 'n') then
         call sqlExec 'describe s'cx 'into :M.SQL.'cx'.D', 0
    return m.sql.cx.d.sqlD
endProcedure sqlDescribeOutput

/*--- describe input (if not already done)
         and return size of input sqlDA ------------------------------*/
sqlDescribeInput: procedure expose m.
parse arg cx, force
    if force == 1 | \ datatype(m.sql.cx.i.sqlD, 'n') then
         call sqlExec 'describe input s'cx 'into :M.SQL.'cx'.I'
    return m.sql.cx.i.sqlD
endProcedure sqlDescribeInput

/*--- describe table and return sqlDA --------------------------------*/
sqlDescribeTable: procedure expose m.
parse upper arg tb, force
    if force == 1 | \ datatype(m.sql.table.tb.sqlD, 'n') then
         call sqlExec 'describe table :tb into :M.SQL.TABLE.'tb
    return 'SQL.TABLE.'tb
endProcedure sqlDescribeTable

/*--- return select column list for table tb
      omit Blobs (blobMax < 0) or substr(blob, 1, blobMax) ----------*/
sqlColList: procedure expose m.
parse arg tb al, blobMax
    sd = sqlDescribeTable(tb)
    bs = ''
    lst = ''
    if al \== '' & right(al, 1) \== '.' then
        al = al'.'
    do sx=1 to m.sd.sqld
        if wordPos(m.sd.sx.sqlType, '404 405 408 409 412 413') < 1 then
            lst = lst',' al || m.sd.sx.sqlName
        else do
            bs = bs m.sd.sx.sqlName
            if blobMax >= 0 then
                lst = lst', length('al || m.sd.sx.sqlName')' ,
                                          m.sd.sx.sqlName'Len' ,
                     || ', substr('al  || m.sd.sx.sqlName ,
                     || ', 1,' blobMax')' m.sd.sx.sqlName
            end
        end
    m.sd.colList = substr(lst, 3)
    m.sd.blobs = strip(bs)
    return substr(lst, 3)
endProcedure sqlColList

/*--- put sqlNull in all vars where indicator says so ---------------*/
sqlSetNull: procedure expose m.
    parse arg cx, dst
    do nx=1 to m.sql.cx.sqlNull.0
        col = m.sql.cx.sqlNull.nx
        if m.dst.col.sqlInd < 0 then
            m.dst.col = m.sqlNull
        end
    return
endProcedure sqlSetNull

/*--- use describe output to generate column names,
                fetchVariables and sqlNull names ---------------------*/
sqlRxFetchVars: procedure expose m.
parse arg cx
    if m.sql.cx.fetchVars \== '' then
        return m.sql.cx.fetchVars
    call sqlDescribeOutput cx
    f = m.sql.cx.type
    if f \== '' then do
        f = f'.FLDS'
        if m.f.0 < m.sql.cx.d.sqlD then
            call err 'not enough column names'
        end
    m.sql.cx.col.0 = m.sql.cx.d.sqlD
    nx = 0
    vars = ''
    do kx=1 to m.sql.cx.d.sqlD
        cn = sqlVarName(f, kx, m.sql.cx.d.kx.sqlName)
        m.sql.cx.col.kx = cn
        m.sql.cx.col2kx.cn = kx
        vars = vars', :m.dst.'cn
        if m.sql.cx.d.kx.sqlType // 2 = 1 then do
            vars = vars' :m.dst.'cn'.sqlInd'
            nx = nx + 1
            m.sql.cx.sqlNull.nx = cn
            end
        end
    m.sql.cx.sqlNull.0 = nx
    m.sql.cx.fetchVars = substr(vars, 3)
    return m.sql.cx.fetchVars
endProcedure sqlRxFetchVars

sqlCol2kx: procedure expose m.
parse arg cx, nm
    call sqlRxFetchVars cx
    if symbol('M.SQL.CX.COL2KX.NM') \== 'VAR' then
        return ''
    kx = m.sql.cx.col2kx.nm
    if m.sql.cx.col.kx == nm then
        return kx
    drop m.sql.cx.col.kx
    return ''
endProcedure sqlCol2kx

sqlVarName: procedure expose m. sqlVarName.
parse arg f, kx, sNa
    if f == '' then do
        cx = verifId(sNa)
        if cx > 0 then /* avoid bad characters for classNew| */
           sNa = left(sNa, cx-1)
        upper sNa
        if sNa == '' | symbol('sqlVarName.sNa') == 'VAR' then
                sNa = 'COL'kx
        sqlVarName.sNa = 1
        return sNa
        end
    else do
        if m.f.kx == '' then
            call err 'implement empty varName'
        return substr(m.f.kx, 2)
        end
endProcedure sqlVarName

/*--- set one value in a DA, handle nulls ----------------------------*/
sqlDASet: procedure expose m.
parse arg cx, da, ix, val
    m.sql.cx.da.ix.sqlData = val
    m.sql.cx.da.ix.sqlInd = - (val == m.sqlNull)
    /* data types schienen einmal nicht zu funktionieren .......
    if wordPos(m.da.ix.sqlType, '384 385 388 389 392 393') > 0 then
        m.da.ix.sqlType = 448 + (m.da.ix.sqlType // 2) */
    return
endProcedure sqlDASet

sqlExImm:
parse arg ggSrc, ggRetOk
     return sqlExec('execute immediate :ggSrc', ggRetOk)
endProcedure sqlExImm

sqlCommit: procedure expose m.
parse arg src
     return sqlExec('commit')
endProcedure sqlCommit

/*--- execute sql thru the dsnRexx interface -------------------------*/
sqlExec: /* no procedure, to keep variables sql... */
    parse arg ggSqlStmt, ggRetOk
    m.sql.sqlHaHi = ''
    address dsnRexx 'execSql' ggSqlStmt
    /* say 'sqlCode' sqlCode 'rc' rc 'for' ggSqlStmt ggNo */
    if rc = 0 then
        return 0
    interpret sqlErrorHandler(rc, ggRetOk, ggSqlStmt)
endProcedure sqlExec

sqlErrorHandler: procedure expose m. ,
                   sqlCode sqlErrMc sqlErrP sqlErrD. sqlWarn. sqlState
parse arg drC, retOk, verb rest
    if drC == 0 then
        return 'return 0'
    if wordPos(drC, '1 -1') < 0 then
        return "call err 'dsnRexx rc" drC"' sqlmsg()"
    if pos('-', retOK) < 1 then
        retOK = retOk m.sqlRetOk
    if pos('*', retOK) > 0 | wordPos(sqlCode, retOK) > 0 then do
        if sqlCode < 0 & pos('say', retOK) > 0 then
            return "call outSt errMsg(' }'sqlMsg()); return" sqlCode
        else
            return "return" sqlCode
        end
    upper verb
    if verb == 'DROP' then do
        if sqlCode == -204 & wordPos('dne', retok) > 0 then
            return 'return' sqlCode
        if sqlCode = -672 & verb=='DROP' ,
               & wordPos('rod', retok) > 1 then do
            hahi = m.sql.sqlHaHi ,
                 || sqlMsgLine(sqlCode, 'tb='sqlErrMc ,verb rest)'\n'
            call sqlExec 'alter table' SqlErrMc ,
                    'drop restrict on drop'
            hahi = hahi || m.sql.sqlHaHi ,
                        || sqlMsgLine(sqlCode, , ggSqlStmt)'\n'
            call sqlExec verb rest
            m.sql.sqlHaHi = hahi
            return 'return' sqlCode
            end
        end
    if drC < 0 then
         return "call err sqlmsg(); return" sqlCode
    if (sqlCode <> 0 | sqlWarn.0 ^==' ') & pos('w',retOK) < 1 then
        return "call outSt errMsg(' }'sqlMsg()); return" sqlCode
    return 'return' sqlCode
endProcedure sqlErrorHandler

sqlMsgLine: procedure expose m. sqlErrD.
parse arg res, cnt, src, plus
    verb = translate(word(src, 1))
    if datatype(res, 'n') then
        res = 'sqlCode' res
    if cnt \== '' then do
        res = res',' cnt
        vx = wordPos(translate(word(src,1)), 'DELETE INSERT UPDATE')
        if datatype(cnt, 'n') then
            if vx > 0 then
               res = res 'rows' word('deleted inserted updated', vx)
            else if cnt <> 0 then
                res = res 'rows updated'
        end
    if plus \== '' then
        res = res',' plus
    if abbrev(res, ', ') then
        res = substr(res, 3)
    if src \== '' then do
        ll = 75 - length(res)
        aa = strip(src)
        if length(aa) > ll then
            aa = space(aa, 1)
        if length(aa) > ll then
           aa = left(aa,  ll-3)'...'
        res = res':' aa
        end
    return res
endProcedure sqlMsgLine

/*--- send a command to db2 through the TSO dsn processor ------------*/
sqlDsn: procedure expose m.
parse arg st, sys, cmd, rcOk
    x = outtrap('M.'st'.')
    push 'END'
    push cmd
    address tso 'DSN SYSTEM('sys')'
    rr = rc
    x = outtrap(off)
    if rr = 0 | rcOk = '*' | wordPos(rr, rcOk) > 0 then
        return rr
    fl = max(1, m.st.0 - 10)
    em = 'rc' rr 'for DSN SYSTEM('sys') cmd' cmd,
          '\nOuputlines' fl '-' m.st.0':'
    do lx=fl to m.st.0
        em = em '\n' strip(m.st.lx, 't')
        end
    call err em
endProcedure sqlDsn
/*--- issue an sql error message -------------------------------------*/
sqlMsg: /* no procedure, to keep variables sql... */
    if \ dataType(sqlCode, 'n') then do
        ggRes = 'sqlCode' sqlCode 'not numeric\n'sqlCaMsg()
        end
    else do
        ggRes = sqlDsntiar(sqlRx2CA())
        ggWa = sqlMsgWarn()
        if ggWa \= '' then
            ggRes = ggRes'\nwarnings' ggWa
        if m.sqlCAMsg == 1 then
           ggRes = ggRes'\n'sqlCaMsg()'\n'sqlCaMsg(sqlCa2Rx(sqlCa))
        end
    ggSt = 'SQL.HOST'
    ggVa = 'SQL.HOST.VAR'
    ggBe = 'SQL.HOST.BEF'
    call sqlHostVars ggSqlStmt, 12, ggSt
    if datatype(sqlErrd.5, 'n') & sqlErrd.5 > 0 then do
        ggW1 = translate(word(ggSqlStmt, 1))
        ggW2 = translate(word(ggSqlStmt, 2))
        if ggW1 == 'PREPARE' then
            ggVV = sqlHostVarFind(ggSt, 'FROM')
        else if ggW1 ggW2 == 'EXECUTE IMMEDIATE' then
            ggVV = sqlHostVarFind(ggSt, 1)
        else
            ggVV = ''
        if ggVV == '' then
            ggRes = ggRes || sqlMsgSrcPos(ggSqlStmt, sqlErrd.5)
        else
            ggRes = ggRes || sqlMsgSrcPos(value(ggVV), sqlErrd.5)
        end
    ggRes = ggRes'\nstmt =' ggSqlStmt
    ggPref = '\nwith'
    do ggXX=1 to m.ggSt.0
        ggRes = ggRes || ggPref m.ggBe.ggXX ':'m.ggVa.ggXX ,
                      '=' value(m.ggVa.ggXX)
        ggPref = '\n    '
        end
    if m.sqlSuMsg == 1 | (m.sqlSuMsg == 2 & m.sql.conHost \== '') then
        ggRes = ggRes'\nsubsys =' m.sql.conDbSys ,
             || ', host =' m.sql.conHost', interfaceType' m.sql.conType
    return  ggRes
endSubroutine sqlMsg

/*--- use dsnTiar to translate sql Info to error text ----------------*/
sqlDsnTiar: procedure expose m.
parse arg ca
    if -438  = sqlCa2Rx(ca) then
        return '\nSQLCODE = -438:',
           'APPLICATION RAISED ERROR WITH sqlState' sqlState ,
           'and DIAGNOSTIC TEXT:' sqlErrMc
    liLe = 78
    msLe = liLe * 10
    msg = d2c(msLe,2) || left('', msLe)
    len = d2c(liLe, 4)
    ADDRESS LINKPGM "DSNTIAR ca msg len"
    if rc = 0      then nop
    else if rc = 4 then say 'warn linkPgm dsnTiar rc' rc 'sqlCa' ca
    else                call err 'linkPgm dsnTiar rc' rc 'sqlCa' ca
    res = strip(substr(msg, 13, liLe-10))
    cx = pos(', ERROR: ', res)
    if cx > 0 then
        res = left(res, cx-1)':' strip(substr(res, cx+9))
    do c=3+liLe by liLe to msLe while substr(msg, c, 10) = ''
            res = res'\n    'strip(substr(msg, c+10, liLe-10))
        end
    return res
endProcedure sqlDsnTiar

/*--- format all rexx sqlCa fields into a message --------------------*/
sqlCaMsg:
    return 'sqlCode' sqlCode 'sqlState='sqlState                    ,
           '\n    errMC='translate(sqlErrMc, ',', 'ff'x)            ,
           '\n    warnings='sqlWarnCat('+') 'erP='sqlErrP           ,
           '\n    errD.1='sqlErrD.1 '2='sqlErrD.2 '3='sqlErrD.3     ,
           '\n    errD.4='sqlErrD.4 '5='sqlErrD.5 '6='sqlErrD.6
endProcedure sqlCaMsg

/*--- format the sqlCA into the dsnTiar SQLCA ------------------------*/
sqlRx2Ca: procedure expose m. ,
                   sqlCode sqlErrMc sqlErrP sqlErrD. sqlWarn. sqlState
    if \ (datatype(sqlcode, 'n') & datatype(sqlErrD.1, 'n') ,
                                 & datatype(sqlErrD.3, 'n')) then
        return err('sqlCode etc. not numeric\nsqlCa =' sqlCaMsg())
    if digits() < 10 then
        numeric digits 10
    sqlCa = 'SQLCA   ' || d2c(136, 4) || d2c(sqlCode, 4) ,
            || d2c(min(70, length(sqlErrMc)), 2)left(sqlErrMc, 70) ,
            || left(sqlErrP, 8) ,
            || d2c(sqlErrD.1, 4)d2c(sqlErrD.2, 4)d2c(sqlErrD.3, 4) ,
            || d2c(sqlErrD.4, 4)d2c(sqlErrD.5, 4)d2c(sqlErrD.6, 4) ,
            || sqlWarnCat() || sqlState
    if length(sqlCa) <> 136 then
        call err 'sqlCa length' length(sqlCa) 'not 136' ,
                 '\n'sqlCaMsg() '==>'  ca', hex='c2x(ca)
    return sqlCa
endProcedure sqlRx2Ca

/*--- extract the fields from the SqlCA and put it to rexx vars ------*/
sqlCA2Rx: procedure expose m. ,
       sqlCode sqlErrMc sqlErrP sqlErrD. sqlWarn. sqlState
parse arg ca
    numeric digits 10
    if length(ca) < 136 | c2d(substr(ca, 9, 4), 4) <> 136 then
        call err 'bad sqlCa len' length(ca) 'not 136:' ca', hex='c2x(ca)
    sqlCode  = c2d(substr(ca, 13 ,4), 4)
    sqlErrMC = substr(ca, 19, c2d(substr(ca, 17, 2), 2))
    sqlErrP  = substr(ca, 89, 8)
    do ix=1 to 6
        sqlErrD.ix = c2d(substr(ca, 93 + 4 * ix, 4), 4)
        end
    do ix=0 to 10
        sqlWarn.ix = substr(ca, 121 + ix, 1)
        end
    sqlState = substr(ca, 132, 5)
    return sqlCode
endProcedure sqlCA2Rx

/*--- concat the sql warnings with Separator sep --------------------*/
sqlWarnCat: procedure expose m. sqlWarn.
parse arg sep
    return sqlWarn.0 || sep,
        || sqlWarn.1||sqlWarn.2||sqlWarn.3||sqlWarn.4||sqlWarn.5||sep ,
        || sqlWarn.6||sqlWarn.7||sqlWarn.8||sqlWarn.9||sqlWarn.10||sep
endProcedure sqlWarnCat

/*--- make the text for sqlWarnings ----------------------------------*/
sqlMsgWarn: procedure expose m. sqlWarn.
     r = ''
     text =' 1=W var truncated, 1=S scrollable, 1=N nonScrollable,'  ,
            '2=W nulls in aggregate,'                                ,
            '3=W more cols than vars,'                               ,
                             '3=Z more result sets than locators,'   ,
            '4=W no where, 4=D sensitive dynamic, 4=I insensitive,'  ,
                          '4=S sensitive static,'                    ,
            '5=W not valid sql, 5=1 readOnly, 5=2 readDelete,'       ,
                          '5=3 readDeleteUpdate,'                    ,
            '6=W day changed to month range,'                        ,
            '7=W dec digits truncated,'                              ,
            '8=W char substituted,'                                  ,
            '9=W arith excep in count, 9=Z multipe result sets,'     ,
            '10=W char conversion err in ca,'
     do wx = 1 to 10
         w = sqlWarn.wx
         if w = ' ' then
             iterate
         t = wx'='w
         cx = pos(' 'wx'='w' ', text)
         ex = pos(','         , text, cx + 1)
         if cx > 0 & ex > cx then
             r = r substr(text, cx+1, ex-cx)
         else
             r = r wx'='w '?,'
         end
     r = strip(r, 't', ',')
     if r = '' & sqlwarn.0 <> '' then
        call err 'sqlWarn.0='sqlWarn.0 'but all warns empty'
     return r
endProcedure sqlMsgWarn

/*--- show in the source src the point pos  (where error occured)
          a few lines from src around pos and arrow to pos ----------*/
sqlMsgSrcPos: procedure expose m.
parse arg src, pos
    liLe = 68
    liCn = 3
    afLe = 25
    t1 = space(left(src, pos), 1)
    t2 = left(' ', substr(src, pos, 1) == ' ' ,
                 | substr(src, pos+1, 1) == ' ') ,
         || space(substr(src, pos+1), 1)
    afLe = min(afLe, length(t2))
    if length(t1) + afLe > liLe * liCn then
        t1 = '...'right(t1, liLe * liCn - afLe -3)
    else if length(t1)+length(t2) > liLe then
        t1 = left(' ', (liCn * liLe - length(t1) -afLe) // liLe)||t1
    pL = length(t1) // liLe
    if length(t2) <= liLe-pL then
        tx = t1 || t2
    else
        tx = t1 || left(t2, liLe-pL-3)'...'
    res = '\nsrc' strip(substr(tx, 1, liLe), 't')
    do cx=1+liLe by liLe to length(tx)
        res = res || '\n  +' strip(substr(tx, cx, liLe), 't')
        end
    loc = 'pos' pos 'of' length(src)
    if length(loc)+6 < pL then
        return res'\n  >' right('>>>'loc'>>>', pL)
    else
        return res'\n  >' left('', pL-1)'<<<'loc'<<<'
endProcdedure sqlMsgSrcPos

/*--- get the hostVars in the sql in src and the word before ---------*/
sqlHostVars: procedure expose m.
parse arg src, cnt, st
    cx = 1
    sx = 0
    do cnt
        cx = pos(':', src, cx) + 1
        if cx < 2 then
           leave
        if pos(substr(src, cx, 1), m.mAlfRex1) < 1 then
            iterate
        ex = verify(src, m.mAlfRexR, 'n', cx)
        if ex - cx > 100 then
            iterate
        sx = sx + 1
        if ex < 1 then
            m.st.var.sx = substr(src, cx)
        else
            m.st.var.sx = substr(src, cx, ex - cx)
                       /* search word before */
        do bE = cx-2 by -1 to 1 ,
                while substr(src, bE, 1) == ' '
            end
        do bB = bE by -1 to max(1, bE-20),
                while pos(substr(src, bB, 1), m.ut.alfa) > 0
            end
        if bB < bE & bB >= 0 then
            m.st.bef.sx = substr(src, bB+1, bE-bB)
        else
            m.st.bef.sx = ''
        end
    m.st.0 = sx
    return sx
endProcedure sqlHostVars

/*--- find the name of hostvar, by index or by before ----------------*/
sqlHostVarFind: procedure expose m.
parse arg st, fnd
    if datatype(fnd, 'n') & fnd <= m.st.0 then
        return m.st.var.fnd
    do ix=1 to m.st.0
        if translate(m.st.bef.ix) = fnd then
            return m.st.var.ix
        end
    return ''
endSubroutine sqlHostVarFind
/* copy sqlRx  end   **************************************************/
/* copy csi begin    ***************************************************
     csi interface: see dfs managing catalogs appendix c
         returncode/reason see message IDC3009I
**********************************************************************/
/*--- specify dsn mask and fields to start a csi catalog search --------
      arguments:
          m       objectPointer
          dsnMask specifies the dsns with wildcards:
              %  1 character
              *  0 - n character in one level
              ** 0 - n levels
          fields a (space separated) list of field names -------------*/
csiOpen: procedure expose m.
parse arg m, dsnMask, fields
    m.m.fld.0 = words(fields)
    ffix = d2c(m.m.fld.0, 2)
    do x=1 to m.m.fld.0
        m.m.fld.x = translate(word(fields, x))
        ffix = ffix || left(m.m.fld.x, 8)
        end
    if dsnMask \== '' & pos('*', dsnMask) < 1 then
        dsnMask = dsnMask'.**'
    m.m.filt = left(dsnMask, 149) ,
             || left('Y', 3) ,        /* resume offset 149      */
             || ffix                  /* csiNumEn offset 152    */

    WORKLEN = 1024 * 64
    m.m.work = D2C(WORKLEN,4) || COPIES('00'X,WORKLEN-4)
    m.m.pos = workLen + 1
    return
endProcedure csiOpen

/*--- put the next dsn into m.o and m.o.* (for other fields)
      return 1 if next dsn exists 0 otherwise ------------------------*/
csiNext: procedure expose m.
parse arg m, o
    usedL = C2D(SUBSTR(m.m.work,9,4)) /* GET AMOUNT OF WORK AREA USED */
    px = m.m.pos
    do forever
        if px > usedL then do
            if substr(m.m.filt, 150, 1) \== 'Y' then do
                m.m.pos = px
                m.o = ''
                return 0
                end
            reason = left('', 4)
            ADDRESS LINKPGM 'IGGCSI00  reason m.'m'.filt  m.'m'.work'
            if rc == 0 & substr(reason, 3, 2) == '0000'x then
                nop
            else if rc == 4 & substr(reason, 3, 2) == '0464'x then
                say 'data set entry with error'
            else
                call err 'call csi returns' rc,
                             'rc' c2d(substr(reason, 4,1)),
                             'reason' c2d(substr(reason, 3,1)),
                             'module' substr(reason, 1,2)
            usedL = C2D(SUBSTR(m.m.work,9,4)) /* GET WORK AREA USED */
            numFD = C2D(SUBSTR(m.m.work,13,2)) /* no flds + 1 */
            if numFd <> m.m.fld.0 + 1 then
                call err 'csiNumFd' numFd 'not' m.m.fld.0 '+' 1
            px = 15
            iterate
            end
        eType =  substr(m.m.work, px+1, 1)
        m.o = strip(substr(m.m.work, px+2, 44), 't')
        flag = substr(m.m.work, px, 1)
        /* say 'eType' eType m.o 'flag' c2x(flag) */
        if eType == '0' then do
            if flag \== '00'x & flag \== '40'x then
                call err 'flag' c2x(flag) 'for catalog' m.o
            px = px + 50    /* length of catalog entry  */
            iterate
            end
        else do
            if \ abbrev(x2b(c2x(flag)), '101') then
                call err 'call csi entry flag' x2b(c2x(flag)),
                             'rc' c2d(substr(m.m.work, px+49,1)),
                             'reason' c2d(substr(m.m.work, px+48,1)),
                             'module' substr(m.m.work, px+46, 2),
                             'for entry' m.o,
                             'see qw IDC3009I'
            py = px + 46
            tl = c2d(substr(m.m.work, py, 2))
            pl = py + 4
            pf = py + m.m.fld.0 * 2 + 4
            do fx = 1 to m.m.fld.0
                fi = m.m.fld.fx
                fl = c2d(substr(m.m.work, pl, 2))
                m.o.fi = substr(m.m.work, pf, fl)
                if fi = 'MGMTCLAS' then
                    m.o.fi = substr(m.o.fi, 3, c2d(left(m.o.fi ,2)))
                else if wordPos(fi, 'COMUDSIZ NOBYTTRK') > 0 then
                    m.o.fi = c2d(m.o.fi)
                pf = pf + fl
                pl = pl + 2
                end
            if py + tl <> pf then
                call err 'length mismatch for entry' m.o
            m.m.pos = pf
            return 1
            end
        end
endProcedure csiNext
/*--- if dsn is arcived return 'arcive'
      if dsn is tape return 'tape'
      otherwise return managment class ------------------------------*/
csiArcTape: procedure expose m.
parse arg vo, cl, dt, dsn
        if vo = '' then
            say err '||| no volume for dsn' dsn
        else if vo = 'ARCIVE' then
            res = 'arcive'
        else if cl <> '' then
            res = cl
        else if abbrev(vo, 'SHR') then
            res = 'SHR'
        else
            res = 'tape'
        if   res = 'arcive' then
            return res
      /*if   abbrev(res, 'ar') \= abbrev(dt, '00'x) , */
        if   abbrev(res, 'ta') \= abbrev(c2x(left(dt, 1)), '7') ,
           | (left(res, 1) >= 'A') \= abbrev(dt, '30'x) then
           say '||| mismatch cl' cl 'vo' vo 'dt' c2x(dt) 'dsn' dsn
        return res
endProcedure csiArcTape
/* copy csi end ******************************************************/
/* copy csm begin ******************************************************
    interface to csm,
        it is integrate with adrTso, eg. dsnAlloc , 'RZ3/..' uses csm
***********************************************************************/
adrCsm:
    return adrTso('csmExec' arg(1), arg(2))
endProcedure adrCsm

csmCopy: procedure expose m.
parse arg csnFr, csnTo, retOk
    if dsnGetMbr(csnTo) \= '' ,
         & dsnGetMbr(csnFr) <> dsnGetMbr(csnTo) then
        call err 'member rename' csnFr 'to' csnTo
    parse value csmSysDsn(csnFr) with sysFr '/' dsnFr
    parse value csmSysDsn(csnTo) with sysTo '/' dsnTo
    if sysTo = '*' then do
        old = sysDsn("'"dsnTo"'")
        end
    else if sysFr = '*' then do
        pdsTo = dsnSetMbr(dsnTo)
        al = "SYSTEM("sysTo") DDNAME(COPYTo)",
             "DATASET('"pdsTo"') DISP(SHR)"
        alRes = dsnAlloc(systo'/'pdsTo, ,'COPYTO', '*')
        if datatype(alRes, 'n') then do
                   /* wir müssen es selbst allozieren csmxUtil
                      vergisst management class ||||| */
            say 'could not allocate' al
            say 'trying to create'
            rc = listDsi("'"dsnSetMbr(dsnFr)"' SMSINFO")
            if rc = 0 then
                mv = ''
            else if rc = 4 & sysReason = 19 then do
                mv = 'UNITCNT(30)'
                say 'multi volume' mv
                end
            else if rc \= 0 then
                call err 'listDsi rc' rc 'reason' sysReason,
                                     sysMsgLvl1 sysMsgLvl2
            al = left(al, length(al)-4)'CAT)'
            if right(sysDsSms, 7) == 'LIBRARY' ,
                | abbrev(sysDsSms, 'PDS') then
                 al = al 'DSNTYPE(LIBRARY)'
            if sysUnits = 'TRACK' then
                sysUnits = 'TRACKS'
            al = al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
                "RECFM("sysREcFM") LRECL("SYSLRECL")",
                "blksize("sysBLkSIZE")",
                "SPACE("sysPrimary"," sysSeconds")" sysUnits mv
            call adrCsm "allocate" al
            end
        call adrTso 'free dd(copyTo)'
        end
    c = "'COPY" sysFr"/''"dsnFr"'' TO" ,
                        sysTo"/''"dsnSetMbr(dsnTo)"'' REPLACE'"
    csmRc = adrTso("exec 'CSM.RZ1.P0.EXEC(CSRXUTIL)'" c , retOk)
    if sysTo = '*' & old <> 'OK' then do
        /* csm normally does not set mgmtclass - avoid delete | */
        call adrTso "ALTER '"dsnTo"' mgmtclas(COM#A091)"
        end
    return csmRc
endProcedure csmCopy

csmAlloc: procedure expose m.
parse arg dsn dd disp rest ':' nn, retRc
    sys = ''
    a2 = ''
    parse value csmSysDsn(dsn) with sys '/' dsn
    if disp = '' then
        disp = 'shr'
    al = "SYSTEM("sys") DDNAME("dd")"
    if dsn <> '' then do
        a2 = "DATASET('"dsnSetMbr(dsn)"')"
        mbr = dsnGetMbr(dsn)
        if mbr <> '' then
            a2 = a2 'MEMBER('mbr')'
        end
    if abbrev(disp, 'SYSOUT(') then
        a2 = a2 disp
    else
        a2 = a2 "DISP("disp")"
    if retRc <> '' | nn = '' then do
        alRc = adrCsm('allocate' al a2 rest, retRc)
        if alRc <> 0 then
            return alRc
        return dd 'call adrTso "free dd('dd')";'
        end
    do retry=0 by 1
        alRc = adrCsm('allocate' al a2 rest, '*')
        if alRc = 0 then
            return dd 'call adrTso "free dd('dd')";'
        if retry > 0 | nn = '' | wordPos(disp, 'OLD SHR') < 1 then
            return err('cmsAlloc rc' alRc 'for' al rest)
        say 'csmAlloc rc' alRc 'for' al a2 rest '...trying to create'
        nn = al 'disp(cat)' dsnCreateAtts(dsn, nn, 1)
        call adrCsm 'allocate' nn
        call adrTso 'free  dd('dd')'
        end
endProcedure csmAlloc

csmSysDsn: procedure expose m.
parse upper arg dsn, withStar
    if pos('/', dsn) < 1 then
        sys = '*'
    else
        parse var dsn sys '/' dsn
    if sys <> '' & sys <> '*' & sys <> sysvar(sysnode) then
        return sys'/'dsn
    else if withStar == 0 then
        return dsn
    else
        return '*/'dsn
endProcedure csmSysDsn
/* copy csm end********************************************************/
/* copy adrIsp begin *************************************************/
/**********************************************************************
    lmd: catalog read
    call sequence: lmdBegin, lmdNext*, lmdEnd
        mit lmd service (mit save in file und read,
                         weil list zu langsam und listcat abstürzt)
        1. arg (grp)     als group dataset für lmd save
                         und dd name für file read
***********************************************************************/
lmdBegin: procedure expose m.
    parse arg grp, lev
    call adrIsp 'lmdinit listid(lmdId) level('lev')'
    res = adrIsp('lmdlist listid(&lmdId) option(save) group('grp')', 4)
    call adrIsp 'lmdfree listid(&lmdId)'
    if res = 0 then do
        call trc timing() 'lmdlist save' grp lev
        call adrTso 'alloc dd('grp') shr dsn('grp'.datasets)'
        end
    else do
        call trc 'no datasets found' timing() 'lmdlist save' grp lev
        call adrTso 'alloc dd('grp') dummy'
        end
    call readDDBegin grp
return /* end lmdBegin */

lmdNext:
    parse arg ggGrp, ggSt, withVolume
    if \ readDD(ggGrp, ggSt) then
         return 0
    if withVolume \== 1 then
        do ggIx=1 to value(ggSt'0')
            x = value(ggSt || ggIx, word(value(ggSt || ggIx), 1))
            end
    return 1
endSubroutin lmdNext

lmdEnd: procedure expose m.
    parse arg grp
    call readDDEnd grp
    call adrTso 'free dd('grp')'
return /* end lmdEnd */

lmd: procedure expose m.
    parse arg lev, withVol
    call lmdBegin gg1, lev
    do while lmdNext(gg1, q., withVol)
        do x=1 to q.0
           call out q.x
           end
        end
    call lmdEnd gg1
    return
endProcedure lmd
/**********************************************************************
    member list of a pds:
        call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmm: procedure expose m.
parse arg dsn
    id = lmmBegin(dsn)
    do ix=1 by 1
        m = lmmNext(id)
        if m = '' then
            leave
        call out m
        end
    call lmmEnd id
    return
endProcedure lmm

lmmBegin: procedure expose m.
parse arg dsn
    mbr = dsnGetMbr(dsn)
    pds = dsnSetMbr(dsn, )
    call adrIsp "LMINIT DATAID(lmmId) DATASET('"pds"') ENQ(SHRW)"
    call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
    res = lmmId
    if mbr <> '' then
        res = res 'pattern('mbr')'
    return res
endProcedure lmmBegin

lmmEnd: procedure expose m.
parse arg lmmId opt
    call adrIsp "LMMLIST DATAID("lmmId") option(free)", 8
    call adrIsp "LMCLOSE DATAID("lmmId")"
    call adrIsp "LMFREE DATAID("lmmId")"
    return
endProcedure lmmEnd

lmmNext: procedure expose m.
parse arg lmmId opt
    if adrIsp("LMMLIST DATAID("lmmid")" ,
               "OPTION(LIST) MEMBER(Mbr)" opt, 4 8) = 0 then
        return strip(mbr)
    else
        return ''
endProcedure lmmNext

lmmRm: procedure expose m.
parse arg dsn, mbrs
    mbrs = dsnGetMbr(dsn) mbrs
    pds = dsnSetMbr(dsn, )
    call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
    call adrIsp "LMOPEN DATAID("lmmId") OPTION(OUTPUT) "
    err = ''
    do wx=1 to words(mbrs)
        m1 = word(mbrs, wx)
        rr = adrIsp("lmmDel dataid("lmmId") member("m1")", 0 8 12)
        if rc = 0 then
            say 'removed' m1 'from' pds
        else if rc = 8 then
            say 'not found' m1 'in' pds
        else do
            err = 'error deleting' m1 'in' pds 'rc' rr strip(zerrlm)
            say err
            leave
            end
        end
    call adrIsp "LMCLOSE DATAID("lmmId")"
    call adrIsp "LMFREE DATAID("lmmId")"
    if err <> '' then
        call err err
    return
endProcedure lmmRm
/*--- address ispf with error checking -------------------------------*/
adrIsp:
    parse arg ggIspCmd, ggRet
    address ispexec ggIspCmd
    if rc = 0 then return 0
    else if ggRet == '*' then return rc
    else if wordPOS(rc, ggRet) > 0 then return rc
    else
        call err 'adr ispExec rc' rc 'in' ggIspCmd':' strip(zerrlm)
endSubroutine adrIsp

/*--- address editor with error checking -----------------------------*/
adrEdit:
    parse arg ggEditCmd, ggRet
    address isrEdit ggEditCmd
    if rc = 0 then return 0
    else if ggRet == '*' then return rc
    else if wordPOS(rc, ggRet) > 0 then return rc
    else
        call err 'adr isrEdit rc' rc 'for' ggEditCmd
endSubroutine adrEdit
/* copy adrIsp end   *************************************************/
/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
    parse arg ggTsoCmd, ggRet
    address tso ggTsoCmd
    if rc == 0                     then return 0
    else if ggRet == '*'           then return rc
    else if wordPos(rc, ggRet) > 0 then return rc
    else
        call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */

/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure expose m.
parse upper arg dsn ., addPrefix
    if left(dsn,1) = "'" then
        return strip(dsn, 'b', "'")
    sp = sysvar('SYSPREF')
    if sp == '' then
        sp = userid()
    cx = pos('~', dsn)
    if cx < 1 & addPrefix == 1 then
        return sp'.'dsn
    do while cx \== 0
        le = left(dsn, cx-1)
        ri = substr(dsn, cx+1)
        if right(le, 1) == '.' | left(ri, 1) == '.' then
            dsn = le || sp || ri
        else
            dsn = le || left('.', le \== '') || sp ,
                     || left('.', ri \== '') || ri
        cx = pos('~', spec, cx)
        end
    return dsn
endProcedure dsn2Jcl

/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure expose m.
parse arg dsn .
    return "'"dsn"'"
endProcedure jcl2dsn

dsnSetMbr: procedure expose m.
parse arg dsn, mbr
     bx = pos('(', dsn)
     if bx > 0 then
         dsn = strip(left(dsn, bx-1))
     if mbr <> '' then
         dsn = dsn'('strip(mbr)')'
     return dsn
endProcedure dsnSetMbr

dsnGetMbr: procedure expose m.
parse arg dsn
     lx = pos('(', dsn)
     rx = pos(')', dsn, lx+1)
     if lx < 1 then
         return ''
     else if lx < rx then
         return substr(dsn, lx+1, rx-lx-1)
     else
         return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
    io: read or write a dataset with the following callsequences:
        read:  readDDBegin, readDD*,  readDDEnd
        write: writeBegin,  writeDD*, writeEnd

        readDD returns true if data read, false at eof
***********************************************************************/

/*--- prepare reading from a DD --------------------------------------*/
readDDBegin: procedure expose m.
    parse upper arg ggDD
    call errAddCleanup 'call readDDEnd' ggDD', "*"'
return /* end readDDBegin */

/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt = '' then
        ggCnt = 100
    call adrTso 'execio' ggCnt 'diskr' ggDD '(stem' ggSt')', 2
    return (value(ggSt'0') > 0)
return /* end readDD */

/*--- finish reading DD  ggDD ----------------------------------------*/
readDDEnd: procedure expose m.
    parse upper arg ggDD, ggRet
    call errRmCleanup 'call readDDEnd' ggDD', "*"'
    return adrTso('execio 0 diskr' ggDD '(finis)', ggRet)
endProcedure readDDEnd

/*--- prepare writing to DD ggDD -------------------------------------*/
writeDDBegin: procedure expose m.
    parse upper arg ggDD
                  /* ensure file is erased, if no records are written */
    call adrTso 'execio' 0 'diskw' ggDD '(open)'
    call errAddCleanup 'call writeDDEnd' ggDD', "*"'
return /* end writeDDBegin */

/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    call adrTso 'execio' ggCnt 'diskw' ggDD '(stem' ggSt')'
    return
endSubroutine writeDD

/*--- end writing to dd ggDD (close) --------------------------------*/
writeDDEnd: procedure expose m.
parse upper arg ggDD, ggRet
    call errRmCleanup 'call writeDDEnd' ggDD', "*"'
    return adrTso('execio 0 diskw' ggDD '(finis)', ggRet)
endProcedure writeDDEnd

/*--- readNx: read next line, using buffer ---------------------------*/
/*--- begin: allocate dsnSpec and ini ------------------------ -------*/
readNxBegin: procedure expose m.
    parse arg m, m.m.dsn, m.m.dd, m.m.Cnt
    if m.m.dd = '' then
        m.m.dd = 'DDNX'
    if m.m.cnt = '' then
        m.m.cnt = 1000
    m.m.cx = m.m.cnt + 999
    m.m.buf0x = 0
    m.m.0 = 0
    m.m.free = subword(dsnAlloc('dd('m.m.dd')' m.m.dsn), 2)
    call readDDBegin m.m.dd
    return m
endProcedure readDDNxBegin

/*--- return the stem of the next line, or '' at end -----------------*/
readNx: procedure expose m.
parse arg m
    m.m.cx = m.m.cx + 1
    if m.m.cx <= m.m.0 then
        return m'.'m.m.cx
    m.m.buf0x = m.m.buf0x + m.m.0
    if \ readDD(m.m.dd, 'M.'m'.', m.m.cnt)then
        return ''
    m.m.cx = 1
    return m'.1'
endProcedure readDDNx
/*--- return the stem of the curr line, '' at end --------------------*/
readNxCur: procedure expose m.
parse arg m
    if m.m.cx <= m.m.0 then
        return m'.'m.m.cx
    else
        return ''
endProcedure readNxCur

/*--- return the position (line number) of reader
           plus le characters of the current line (default 50) ------*/
readnxPos: procedure expose m.
parse arg m, le
    li = m'.'m.m.cx
    li = strip(m.li, 't')
    if arg() < 2 then
        le = 50
    if le < 1 then
        li = ''
    else if length(li) <= le then
        li = ':' li
    else
        li = ':' left(li, le-3)'...'
    return 'line' (m.m.buf0x + m.m.cx)li
endProcedure readnxPos

/*--- close and deallocate ------------------------------------------*/
readNxEnd: procedure expose m.
parse arg m
    call readDDEnd m.m.dd
    interpret m.m.free
    return
endProcedure readDDNxEnd

/*--- standardise a dsn spec
       word1             dsName or -
       word2             dd     or -
       word3             disp   or -
       word4 to first :  attributes in tso format
       after first :     attributes for new allocation
----------------------------------------------------------------------*/
dsnSpec: procedure expose m.
parse upper arg spec
    rr = ''      /* put leading - in separate words */
    do sx=1 while words(rr) < 3 & wx \= ''
        wx = word(spec, sx)
        do while abbrev(wx, '-') & words(rr) < 3
            wx = substr(wx, 2)
            rr = rr '-'
            end
        rr = rr wx
        end
    spec = rr subWord(spec, sx)
    na = ''
    dd = ''
    di = ''
    if left(spec, 1) = '&' then /* external spec is handled ok */
        spec = strip(substr(spec, 2))
    do wx=1 by 1
        w = word(spec, wx)
        if w = '' | abbrev(w, '.') | abbrev(w, ':') then
            leave
        else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
            di = w
        else if w = 'CATALOG' then
            di = di w
        else if abbrev(w, 'DD(') then
            dd = substr(w, 4, length(w)-4)
        else if abbrev(w, 'DSN(') then
            na = strip(substr(w, 5, length(w)-5))
        else if na == '' then
            na = dsn2jcl(w)
        else if dd == '' then
            dd = w
        else if di == '' then
            di = w
        else
            leave
        end
    if na == '' then
        na = '-'
    else if abbrev(na, "'") then
        na = substr(na, 2, length(na)-2)
    if dd == '' then dd = '-'
    if di == '' then di = '-'
    re = subword(spec, wx)
    if abbrev(re, '.') then
        re = substr(re, 2)
    return na dd di re
endProcedure dsnSpec

/*--- alloc a dsn with dsnAlloc
          if the dsn is inuse wait and retry
          until either the allocation is successfull
          or the timeout occurs --------------------------------------*/
dsnAllocWait: procedure expose m.
parse upper arg spec, pDi, pDD, timeOut
    x = max(1, arg() - 1)
    do rt=0
        m.adrTsoAl.1 = ''
        m.adrTsoAl.2 = ''
        m.adrTsoAl.3 = ''
        call outtrap m.adrTsoAl.
        res = dsnAlloc(spec, pDi, pDD, '*')
        call outtrap off
        if \ abbrev(res, ' ') then
            return res
        msg = m.adrTsoAl.1'\n'm.adrTsoAl.2'\n'm.adrTsoAl.3
        if rt > timeOut & timeOut \== '' then
            return err('timeout allocating' spec time() '\n'msg)
        if pos('DATA SET IS ALLOCATED TO ANOTHER', msg) < 1 then
            return err('allocating' spec'\n'msg)
        say time() 'sleep and retry alloc' spec
        call sleep 1, 0
        end
endProcedure dsnAllocWait

/*--- alloc a dsn or a dd
          spec '-'<ddName>
               datasetName? disposition? '.'? attributes? (':' newAtts)?
          disp default disposition
          dd   default dd name
          retRc   erlaubte ReturnCodes (leer = 0)
          returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, pDi, pDD, retRc
    parse value dsnSpec(spec) with na dd di rest
    if na = '-' then
        m.dsnAlloc.dsn = ''
    else
        m.dsnAlloc.dsn = na
    if na == '-' & dd \== '-' & di == '-' & rest = '' then
        return dd
    if dd == '-' & pDD \== '' then
        dd = pDD
    if dd == '-' then
        dd = 'DD*'
    dd = tsoDD(dd)
    if di = '-' & pDi \== '' then
        di = pDi
    if di = '-' then
        di = 'SHR'
    else if pos('(', na) < 1 then
        nop
    else if di = 'MOD' then
        call err 'disp mod for' na
    else
        di = 'SHR'
    if pos('/', na) > 0 then
        return csmAlloc(na dd di rest, retRc)
    else
        return tsoAlloc(na dd di rest, retRc)
endProcedure dsnAlloc

/*--- find a free dd with prefix dd ----------------------------------*/
tsoDD: procedure expose m.
parse arg dd, f
    if m.err.ispf then
        call adrIsp 'vget wshTsoDD shared', 0 8
    else if symbol('m.tso.tsoDD') == 'VAR' then
        wshTsoDD = m.tso.tsoDD
    else
        wshTsoDD = ''
    if f == '-' then do
        px = wordPos(dd, wshTsoDD)
        if px < 1 then
            call err 'tsoDD dd' dd 'not used' wshTsoDD
        wshTsoDD = strip(subword(wshTsoDD, 1, px-1) ,
                         subWord(wshTsoDD, px+1))
        end
    else do
        if right(dd, 1) = '*' then do
            dd = left(dd, length(dd)-1) || m.err.screen
            cx = lastPos(' 'dd, ' 'wshTsoDD)
            if cx < 1 then
                dd = dd'1'
            else do
                old = word(substr(wshTsoDD, cx), 1)
                if datatype(substr(old, length(dd)+1), 'n') then
                    dd = dd || (substr(old, length(dd)+1) + 1)
                else
                    call err 'tsoDD old' old 'suffix not numeric dd' dd
                end
            end
        if wordPos(dd, wshTsoDD) > 0 then
            call err 'tsoDD dd' dd 'already used' wshTsoDD
        wshTsoDD = strip(wshTsoDD dd)
        end
    if m.err.ispf then
        call adrIsp 'vPut wshTsoDD shared'
    m.tso.tsoDD = wshTsoDD
    return dd
endProcedure tsoDD

tsoAlloc: procedure expose m.
parse arg na dd disp rest ':' nn, retRc
    c = 'alloc dd('dd')' disp
    if na \== '-' then
        c = c "DSN('"na"')"
    else if disp = 'NEW' and nn \== '' then
        c = c dsnCreateAtts(,nn)
    call outtrap m.adrTsoAl.
    alRc = adrTso(c rest, '*')
    call outtrap off
    if alRc =  0 then do
        call errAddCleanup 'call tsoFree' dd', "*"'
        return dd 'call tsoFree' dd';'
        end
    if nn \= '' & wordPos(disp, 'OLD SHR') > 0 ,
          & sysDsn("'"m.dsnAlloc.dsn"'") == 'DATASET NOT FOUND' then do
        say 'tsoAlloc creating' c rest ':'nn
        call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(na, nn)
        call adrTso 'free  dd('dd')'
        return tsoAlloc(na dd disp rest, retRc)
        end
    do ax=1 to m.adrTsoAl.0
        say m.adrTsoal.ax
        end
    if retRc = '*' | wordPos(alRc, retRc) > 0 then
        return ' ' alRc
    call err 'tsoAlloc rc' alRc 'for' c rest
endProcedure tsoAlloc

tsoAtts: procedure expose m.
parse arg dsn
    rc = listDsi("'"dsn"' SMSINFO")
    if rc = 0 then
        mv = ''
    else if rc = 4 & sysReason = 19 then do
        mv = 'UNITCNT(30)'
        say 'multi volume' mv
        end
    else if rc ^= 0 then
        call err 'listDsi rc' rc 'reason' sysReason,
                             sysMsgLvl1 sysMsgLvl2
    al = 'CAT'
    al = ''
    if right(sysDsSms, 7) == 'LIBRARY' ,
        | abbrev(sysDsSms, 'PDS') then
         al = al 'DSNTYPE(LIBRARY)'
    if sysUnits = 'TRACK' then
        sysUnits = 'TRACKS'
    al = al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
        "DATACLAS("sysDataClass")" ,
        "RECFM("translate('1 2 3', ' 'sysREcFM, ' 123')")",
        "LRECL("SYSLRECL")",
        "blksize("sysBLkSIZE")",
        "SPACE("sysPrimary"," sysSeconds")" sysUnits mv
    return al
endProcedure tsoAtts

tsoFree: procedure expose m.
parse arg dd, ggRet
    call adrTso 'free dd('dd')', ggRet
    call tsoDD dd, '-'
    call errRmCleanup 'call tsoFree' dd', "*"'
    return
endProcedure tsoFree

dsnCreateAtts: procedure expose m.
parse arg dsn, atts, forCsm
    forCsm = forCsm == 1
    aU = ' 'translate(atts)
    if abbrev(atts, ':') then do
        parse var atts a1 atts
        bl = 32760
        rl = substr(a1, 3)
        if abbrev(a1, ':F') then do
            if rl = '' then
                rl = 80
            recfm='f b'
            bl = bl - (bl // rl)
            end
        else do
            if rl = '' then
                rl = bl-4
            recfm = substr(a1, 2, 1) 'b'
            end
        if forCsm then
            atts =  atts "recfm("space(recfm, 0)") lrecl("rl")",
                    "blkSize("bl")"
        else
            atts = atts "recfm("recfm") lrecl("rl") block("bl")"
        end
    if pos('(', dsn) > 0 & pos(' DSNTYPE(', aU) < 1 ,
                         & pos(' DSORG(',   aU) < 1 then
        atts = atts 'dsntype(library) dsorg(po)'
    if pos(' MGMTCLAS(', aU) < 1 then
        atts = atts 'mgmtclas(COM#A091)'
    if pos(' SPACE(', aU) < 1 then
        if forCsm then
            atts = atts 'space(10, 1000) cylinder'
        else
            atts = atts 'space(10, 1000) cyl'
    if dsn == '' then
       return atts
    return "dataset('"dsnSetMbr(dsn)"')" atts
endProcedure dsnCreateAtts
/*--- check if a dataset is archive ------------------------------------
          returns 'ok'                    if dataset on disk
                  'not'                   if dataset is not catalogued
                  'arc'                   if dataset archived
                  listDsi errorMsg        otherwise ------------------*/
dsnArc: procedure expose m.
parse upper arg dsn
    lc = listDsi("'"strip(dsn)"' noRecall")
    if lc = 0 then
        return 'ok'
    else if lc=4 & sysReason = 19 then  /* multiple volumes */
        return 'ok'
    else if lc=16 & sysReason = 5 then
        return 'notCat'
    else if lc=16 & sysReason = 9 then
        return 'arc'
    else
        return 'listDsi cc='lc', sysReason='sysReason ,
                          'm2='sysMsgLvl2', m1='sysMsgLvl1
endProcedure dsnArc
/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
    ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
    call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
    interpret subword(ggAlloc, 2)
    return
endSubroutine readDsn

/*--- write the dataset specified in ggDsnSpec from stem ggSt
          write ggCnt records if not empty otherwise ggst0
          if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
    call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
            '(stem' ggSt 'open finis)'
    interpret subword(ggAlloc, 2)
    if ggSay == 1 | m.debug == 1 then
       say ggCnt 'records written to' ggDsnSpec
    return
endSubroutine writeDsn

copyDSN: procedure expose m.
parse arg frSpec, toSpec, ggSay
    frDD = dsnAlloc(frSpec, 'SHR', 'FRDD')
    toDD = dsnAlloc(toSpec, 'OLD', 'TODD')
    call readDDBegin word(frDD, 1)
    call writeDDBegin word(toDD, 1)
    cnt = 0
    do while readDD(word(frDD, 1), r.)
        call writeDD word(toDD, 1), r.
        cnt = cnt + r.0
        end
    call readDDEnd word(frDD, 1)
    call writeDDEnd word(toDD, 1)
    interpret ';' subword(frDD, 2) '; ; ;' subword(toDD, 2)
    if ggSay == 1 | m.debug == 1 then
       say cnt 'records copied from' frSpec 'to' to toSpec
    return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
/* copy j begin *******************************************************
    the j framework
         jReset
         jOpen
         jClose
         jRead
         jWrite
***********************************************************************/
jRead: procedure expose m.
parse arg m, var
    met = objMet(m, 'jRead')
    if m.m.jReading then
        interpret met
    else
        return err('jRead('m',' var') but not opened r')
endProcedure jRead

jReadO: procedure expose m.
parse arg m
if arg() > 1 then call err '???  old interface'
    met = objMet(m, 'jReadO')
    if m.m.jReading then
        interpret met
    else
        return err('jReadO('m',' var') but not opened r')
endProcedure jReadO

jWrite: procedure expose m.
parse arg m, line
    met = objMet(m, 'jWrite')
    if \ m.m.jWriting then
        return err('jWrite('m',' line') but not opened w')
    interpret met
    return
endProcedure jWrite

jWriteO: procedure expose m.
parse arg m, var
    met = objMet(m, 'jWriteO')
    if \ m.m.jWriting then
        return err('jWriteO('m',' var') but not opened w')
    interpret met
    return
endProcedure jWriteO

jWriteAll: procedure expose m.
parse arg m, rdr
    rdr = o2file(rdr)
    met = objMet(m, 'jWriteAll')
    if \ m.m.jWriting then
        return err('jWriteAll('m',' rdr') but not opened w')
    interpret met
    return
endProcedure jWriteAll

jWriteNow: procedure expose m.
parse arg m, rdr
    rdr = o2file(rdr)
    interpret objMet(m, 'jWriteNow')
    return
endProcedure jWriteNow

jCat: procedure expose m.
parse arg opt m
    if m = '' then do
        m = opt
        opt = m.j.cWri
        end
    call jOpen m, opt
    do ax=2 to arg()
        call jWriteAll m, arg(ax)
        end
    call jClose m
    return m
endProcedure jCat

jWriteNowImpl: procedure expose m.
parse arg m, rdr
    call jOpen rdr, m.j.cRead
    do while jRead(rdr, line)
        call jWrite m, m.line
        end
    call jClose rdr
    return
endProcedure jWriteNow

jWriteNowImplO: procedure expose m.
parse arg m, rdr
    call jOpen rdr, m.j.cRead
    do while assNN('li', jReadO(rdr))
        call jWriteO m, li
        end
    call jClose rdr
    return
endProcedure jWriteNow

/*--- reset JRW: fail if open, initialise ---------------------------*/
jReset: procedure expose m.
parse arg m, arg, arg2, arg3
    if m.m.jReading == 1 | m.m.jWriting == 1 then
        return err('still open jReset('m',' arg2')') / 3
    m.m.jReading = 0
    m.m.jWriting = 0
    m.m.jUsers = 0
    interpret objMet(m, 'jReset')
    return m
endProcedure jReset

jOpen: procedure expose m.
parse arg m, opt
    met = objMet(m, 'jOpen')
    oUsers = m.m.jUsers
    if opt = m.j.cRead then do
        if m.m.jReading then
            nop
         else if m.m.jWriting then
            return err('already opened for writing jOpen('m',' opt')')
        else do
            interpret met
            m.m.jReading = 1
            end
        end
    else if \ abbrev('>>', opt, 1) then do
        return err('bad option' opt 'in jOpen('m',' opt')')
        end
    else do
        if m.m.jWriting then
            nop
         else if m.m.jReading then
            return err('already opened for reading jOpen('m',' opt')')
        else do
            interpret met
            m.m.jWriting = 1
            end
        end
    m.m.jUsers = oUsers + 1
    return m
endProcedure jOpen

jClose: procedure expose m.
parse arg m
    met = objMet(m, 'jClose')
    oUsers = m.m.jUsers
    if oUsers = 1 then do
        interpret met
        m.m.jReading = 0
        m.m.jWriting = 0
        end
    else if oUsers < 1 then
        call err 'jClose' m 'but already closed'
    m.m.jUsers = oUsers - 1
    return m
endProcedure jClose

/*--- cat the lines of the file together, with mid between lines,
                fail if not all lines are strings -------------------*/
jCatLines: procedure expose m.
parse arg m, fmt
    if abbrev(fmt, '-sql') then
        return jCatSql(m, substr(fmt, 5))
    else
        fmt = '%s%qn %s%qe%q^'fmt
    call jOpen m, m.j.cRead
    if \ jRead(m, line) then do
        call jClose m
        return ''
        end
    res = f(fmt, m.line)
    do while jRead(m, line)
        res = res || f(fmt'%Qn', m.line)
        end
    call jClose m
    return res || f(fmt'%Qe')
endProcedure jCatLines

/*--- cat the line of a file, using comments
               fixline (with token wrapping) or separate lines -------*/
jCatSql: procedure expose m.
parse arg m, fLen
    call jCatSqlReset m'.JCATSQL', , jOpen(m, '<'), fLen
    res = jCatSqlNext(m'.JCATSQL')
    call jClose m
    return res
endProcedure jCatSql

jCatSqlReset: procedure expose m.
parse arg m, aSrc, m.m.rdr, m.m.fLen
    call jCatSqlNL m, aSrc
    return m
endProcedure jCatSqlReset

jCatSqlNL: procedure expose m.
parse arg m
    if m.m.rdr \== '' then
      if jRead(m.m.rdr, m'.SRC') then do
        if m.m.fLen \== '' then
            m.m.src = left(m.m.src, m.m.fLen)
        else if m.m.src == '' then
            m.m.src = ' '
        else if substr(m.m.src, length(m.m.src), 1) \== ' ' then
            m.m.src = m.m.src' '
        m.m.pos = 1
        return 1
        end
    m.m.pos = length(m.m.src)+1
    return 0
endProcedure jCatSqlNl

jCatSqlNext: procedure expose m.
parse arg m, stop
    res = ''
    bx = m.m.pos
    do forever
        call sbUntil m, '"''-/'stop
        if sbEnd(m) then do
            res = res || substr(m.m.src, bx)
            bx = 0
            end
        else if substr(m.m.src, m.m.pos, 2) = '--' then do
            res = res || substr(m.m.src, bx, m.m.pos-bx)' '
            bx = 0
            end
        else if substr(m.m.src, m.m.pos, 2) = '/*' then do
            res = res || substr(m.m.src, bx, m.m.pos-bx)' '
            do forever
                px = pos('*/', m.m.src, m.m.pos)
                if px > 0 then
                    leave
                if \ jCatSqlNL(m) then
                    return res
                end
            bx = px+2
            m.m.pos = bx
            end
        else if sbLit(m, ''' "') then do
            c1 = m.m.tok
            do while \ sbStrEnd(m, c1)
                res = res || substr(m.m.src, bx)
                if m.m.fLen \== '' then
                    if jCatSqlNl(m) then do
                        bx = m.m.pos
                        iterate
                        end
                call err 'unclosed' c1 'string:' m.m.src
                end
            end
        else if pos(substr(m.m.src, m.m.pos, 1), stop) > 0 then do
            res = strip(res||substr(m.m.src, bx, m.m.pos-bx), 't')
            call sbChar m, 1
            if res <> '' then
                return strip(res)
            bx = m.m.pos
            end
        else if \ sbLit(m, '- /') then do
            call err 'bad char at' substr(m.m.src, m.m.pos) 'in' m.m.src
            end
        if bx = 0 then
            if jCatSqlNl(m) then
                bx = m.m.pos
            else
                return strip(res)
        end
endProcedure jCatSqlNext

jIni: procedure expose m.
    if m.j.ini == 1 then
        return
    m.j.ini = 1
    m.j.cRead = '<'
    m.j.cWri = '>'
    m.j.cApp = '>>'
    call classIni
    am = "call err 'call of abstract method"
    c1 = classNew('n JRW u ORun, f JREADING v, f JWRITING v', 'm',
        , "new return jReset("m.class.basicNew", arg, arg2, arg3)",
        , "jRead"   am "jRead('m',' var')'" ,
        , "jReadO if \ jRead(m, 'J.GGVAR') then return '';",
                "return s2o(m.j.ggVar)" ,
        , "jWrite" am "jWrite('m',' line')'" ,
        , "jWriteO call jWrite(m, o2string(var))" ,
        , "jWriteAll call jWriteNowImpl m, rdr",
        , "jWriteNow call jWriteNowImpl m, rdr",
        , "jReset",
        , "jOpen" am" jOpen('m',' opt')'" ,
        , "jClose" ,
        , "oRun call pipeWriteAll m",
        , "o2String return jCatLines(m, fmt)",
        , "o2File return m")
    m.class.forceDown.c1 = c1'#new'
    c2 = classNew('n JRWDeleg u JRW', 'm',
        , "new return jReset("m.class.basicNew", arg)",
        , "jRead return jRead(m.m.deleg, var)" ,
        , "jReadO return jReadO(m.m.deleg)" ,
        , "jWrite  call jWrite(m.m.deleg, line)" ,
        , "jWriteO call jWrite(m.m.deleg, var)" ,
        , "jWriteAll call jWriteAll m.m.deleg, rdr",
        , "jWriteNow call jWriteNow m.m.deleg, rdr",
        , "jReset    if arg \== '' then m.m.deleg = arg;",
                                   "else call jReset m.m.deleg;",
        , "jOpen     call jOpen m.m.deleg,' opt; return m" ,
        , "jClose    call jClose m.m.deleg; return m" )
    m.class.forceDown.c2 = c2'#new'
    call classNew 'n JRWO u JRW', 'm',
        , "jRead res = jReadO(m); if res == '' then return 0;" ,
                "m.var = o2string(res); return 1" ,
        , "jReadO"   am "jReadO('m')'" ,
        , "jWrite  call jWriteO(m, s2o(var))" ,
        , "jWriteO" am "jWriteO('m',' line')'",
        , "jWriteAll call jWriteNowImplO m, rdr",
        , "jWriteNow call jWriteNowImplO m, rdr",

    am = "call err 'call errObject"
    call classNew 'n JRWErr u JRW', 'm',
        , "jWriteAll" er "jWriteAll 'm', rdr'",
        , "jWriteNow" er "jWriteNow 'm', 'rdr'",
        , "jClose" er "jClose 'm'"
    call classNew 'n JSay u JRW', 'm',
        , "jWrite say line" ,
        , "jWriteO call classOut , var, 'outO: '",
        , "jOpen if \ abbrev(opt, m.j.cWri) then",
            "call err 'can only write JSay.jOpen('m',' opt')';" ,
            "else m.m.jWriting = 1"
    call classNew 'n JStem u JSay', 'm',
        , "jReset m.m.stem = arg;",
               "if \ dataType(m.arg.0, 'n') then m.arg.0 = 0" ,
        , "jWrite call mAdd m.m.stem, line"
    call classNew 'n JRWEof u JRW', 'm',
        , "jRead drop m.var; return 0",
        , "jOpen if pos('>', opt) > 0 then",
            "call err 'can only read JRWEof.jOpen('m',' opt')';" ,
            "else m.m.jReading = 1"
    m.j.in = jOpen(oNew('JRWEof'), m.j.cRead)
    m.j.errRead  = "return err('jRead('m',' var') but not opened r')"
    m.j.errReadO = "return err('jReadO('m',' var') but not opened r')"
    m.j.errWrite = "return err('jWrite('m',' line') but not opened w')"
    m.j.errWriteO= "return err('jWriteO('m',' var') but not opened w')"
    call classNew "n JBuf u JRWO, f BUF s r", "m",
        , "jOpen call jBufOpen m, opt",
        , "jClose call oMutate m, 'JBuf'",
        , "jReset call jBufReset m, arg",
        , "jRead" m.j.errRead ,
        , "jReadO" m.j.errReadO ,
        , "jWrite" m.j.errWrite ,
        , "jWriteO" m.j.errWriteO
    call classNew "n JBufOR u JBuf", "m",
        , "jRead return jBufORead(m, var)",
        , "jReadO return jBufOReadO(m)"
    call classNew "n JBufSR u JBuf", "m",
        , "jRead return jBufSRead(m, var)",
        , "jReadO return jBufSReadO(m)"
    call classNew "n JBufOW u JBuf", "m",
        , "jWrite call jBufOWrite m, line",
        , "jWriteO call jBufOWriteO m, var"
    call classNew "n JBufSW u JBuf", "m",
        , "jWrite call jBufSWrite m, line",
        , "jWriteO call jBufSWriteO m, var"
    call classNew "n JBufTxt u JBuf, f MAXL v ", "m",
        , "jReset call jBufReset m, arg; m.m.maxl = 80",
        , "jWriteO call jBufWrite m, o2Text(var, m.m.maxl)"
    return
endProcedure jIni

/*--- return a JRW from rdr or in ------------------------------------*/
j2Rdr: procedure expose m.
    parse arg rdr
    if oStrOrObj(rdr, m.j.in) then
        return jBuf(ggStr)
    else
        return o2file(ggObj)
endProcedure j2Rdr
      /* jstr is part of out interface --> inp2str */
inp2str: procedure expose m.
    parse arg rdr, fmt
    if oStrOrObj(rdr, m.j.in) then
        return ggStr
    else
        return o2String(ggObj, fmt)
endProcedure inp2str

j2Buf: procedure expose m.
    parse arg rdr
    if oStrOrObj(rdr, m.j.in) then
        return jBuf(ggStr)
    if oClaInheritsOf(ggCla, 'JBuf') & m.ggObj.jUsers < 1 then
        return ggObj
    b = jOpen(jBuf(), m.j.cWri)
    call jWriteNow b, o2File(ggObj)
    return jClose(b)
endProcedure j2Buf

in: procedure expose m.
parse arg arg
    return jRead(m.j.in, arg)
endProcedure in

inO: procedure expose m.
    if arg() > 0 then call err '??? old interface'
    return jReadO(m.j.in)
endProcedure in

out: procedure expose m.
parse arg line
    call jWrite m.j.out, line
    return 0
endProcedure out

outO: procedure expose m.
parse arg arg
    call jWriteO m.j.out, arg
    return
endProcedure outO

JRWDeleg: procedure expose m.
parse arg arg
    return oNew('JRWDeleg', arg)
endProcedure JRWDeleg

/*--- jBuf: buffer read or write (supports datataypes) ---------------*/
jBuf: procedure expose m.
    m = oNew('JBuf') /* calls jBufReset */
    do ax=1 to arg()
        m.m.buf.ax = arg(ax)
        end
    m.m.buf.0 = ax-1
    m.m.allS = 1
    return m
endProcedure jBuf
/*--- jBuf: buffer read or write (supports datataypes) ---------------*/
jBufTxt: procedure expose m.
    m = oNew('JBufTxt') /* calls jBufReset */
    do ax=1 to arg()
        m.m.buf.ax = arg(ax)
        end
    m.m.buf.0 = ax-1
    m.m.allS = 1
    return m
endProcedure jBufTxt

jBufReset: procedure expose m.
parse arg m
    m.m.stem = m'.BUF'
    do ax=1 to arg() - 1
        m.m.buf.ax = arg(ax+1)
        end
    m.m.buf.0 = ax-1
    m.m.allS = 1
    return m
endProcedure jBufReset

jBufOpen: procedure expose m.
parse arg m, opt
    if opt == m.j.cRead then do
        m.m.readIx = 0
        if m.m.allS then
            call oMutate m, 'JBufSR'
        else
            call oMutate m, 'JBufOR'
        return m
        end
    if opt == m.j.cWri then do
        m.m.buf.0 = 0
        m.m.allS = 1
        end
    else if opt \== m.j.cApp then
         call err 'jBufOpen('m',' opt') with bad opt'
    if m.m.allS then
        call oMutate m, 'JBufSW'
    else
        call oMutate m, 'JBufOW'
    return m
endProcedure jBufOpen

jBufOWrite: procedure expose m.
parse arg m, line
    call mAdd m'.BUF', s2o(line)
    return
endProcedure jBufOWrite
jBufSWrite: procedure expose m.
parse arg m, line
    call mAdd m'.BUF', line
    return
endProcedure jBufWrite

jBufWriteStem: procedure expose m.
parse arg m, st
    ax = m.m.buf.0
    if m.m.allS then do
        do sx=1 to m.st.0
            ax = ax + 1
            m.m.buf.ax = m.st.sx
            end
        end
    else do
        do sx=1 to m.st.0
            ax = ax + 1
            m.m.buf.ax = o2String(m.st.sx)
            end
       end
       m.m.buf.0 = ax
    return m
endProcedure jBufWrite

jBufOWriteO: procedure expose m.
parse arg m, ref
    call mAdd m'.BUF', ref
    return
endProcedure jBufOWriteO

jBufSWriteO: procedure expose m.
parse arg m, ref
    cl = objClass(ref)
    if cl = m.class.classV then do
        call mAdd m'.BUF', m.ref
        return
        end
    if cl == m.class.classW then do
        call mAdd m'.BUF', substr(ref, 2)
        return
        end
    do ax=1 to m.m.buf.0
        m.m.buf.ax = s2o(m.m.buf.ax)
        end
    m.m.allS = 0
    call oMutate m, 'JBufOW'
    call mAdd m'.BUF', ref
    return
endProcedure jBufWriteO

jBufOReadO: procedure expose m.
parse arg m
    nx = m.m.readIx + 1
    if nx > m.m.buf.0 then
        return ''
    m.m.readIx = nx
    return m.m.buf.nx
endProcedure jBufOReadO

jBufSReadO: procedure expose m.
parse arg m
    nx = m.m.readIx + 1
    if nx > m.m.buf.0 then
        return ''
    m.m.readIx = nx
    return s2o(m.m.buf.nx)
endProcedure jBufSReadO

jBufORead: procedure expose m.
parse arg m, var
    nx = m.m.readIx + 1
    if nx > m.m.buf.0 then
        return 0
    m.m.readIx = nx
    m.var = o2String(m'.BUF.'nx)
    return 1
endProcedure jBufORead

jBufSRead: procedure expose m.
parse arg m, var
    nx = m.m.readIx + 1
    if nx > m.m.buf.0 then
        return 0
    m.m.readIx = nx
    m.var = m.m.buf.nx
    return 1
endProcedure jBufRead

jBufTxtWriteO: procedure expose m.
parse arg m, ref
    if m.m.allS \== 1 then
        call err '1 \== allS' m.m.allS 'in jBufTxtWriteO('m',' ref')'
    cl = objClass(ref, '?')
    if cl = m.class.classV then
        call mAdd m'.BUF', m.ref
    else if cl == m.class.classW then
        call mAdd m'.BUF', substr(ref, 2)
    else if ref == '' then
        call mAdd m'.BUF', '@ null object'
    else if cl == '?' then
        call mAdd m'.BUF', '@'ref 'class=???'
    else do
        l = '@'ref 'class='className(cl)
        ff = oFlds(ref)
        do fx=1 to m.ff.0 while length(l) < m.m.maxl + 3
            if m.ff.fx == '' then
                 l = l', .='m.ref
            else do
                 f1 = substr(m.ff.fx, 2)
                 l = l',' f1'='m.ref.f1
                 end
            end
        if length(l) > m.m.maxl then
            l = left(l, m.m.maxl-3)'...'
        call mAdd m'.BUF', l
        end
    return
endProcedure jBufTxtWriteO

/* copy j end *********************************************************/
/* copy o begin ******************************************************
    an object is register for a class in o2c
    a class has a list of parents in cParent
    a class has a methodTable cMet with lazy initialization
        if the parent is class OLazyMet, a methof found there is
             a method generator
        otherwise an existing method is simply copied
***********************************************************************/
oIni: procedure expose m.
    if m.o.ini == 1 then
        return
    m.o.ini = 1
    call mIni
    m.o.escW = '!'
    m.o.lazyGen = 'OLazyMetGen' /* lazy method generator */
    call oAddCla m.o.lazyGen
    return
endProcedure oIni

/*--- return whether cl is a currently defined class ----------------*/
oIsCla: procedure expose m.
parse arg cl
    return symbol('m.o.cParent.cl') == 'VAR'
endProcedure oIsCla

/*--- add class cl with the given parents ---------------------------*/
oAddCla: procedure expose m.
parse arg cl, parents
    if verifId(cl, '.') > 0 | pos('.', cl) <> lastPos('.', cl) then
        call err 'bad class name' cl 'in oAddCla('cl',' parents')'
    if oIsCla(cl) then
        call err 'duplicate class' cl 'in oAddCla('cl',' parents')'
    do px=1 to words(parents)
        if \ oIsCla(word(parents, px)) then
            call err word(parents, px) 'is no class' ,
                    'in oAddCla('cl',' parents')'
        end
    m.o.cParent.cl = parents
    return
endProcedure oAddCla

/*--- add to class cl method met ------------------------------------*/
oAddMet: procedure expose m.
parse arg cl, met, cont
    if \ oIsCla(cl) then
        call err 'undefined class' cl 'in oAddMet('cl',' met',' cont')'
    if symbol('m.o.cMet.cl.met') == 'VAR' then
       call err 'duplicate method' met 'in oAddMet('cl',' met',' cont')'
    m.o.cMet.cl.met = cont
    return
endProcedure oAddMet
/*--- create an an object of the class className
        and call it's new method ------------------------------------*/
oNew: procedure expose m.
parse arg cl, arg, arg2, arg3
    if symbol('m.o.cParent.cl') \== 'VAR' then
        cl = class4name(cl)
    interpret oClaMet(cl, 'new')
endProcedure oNew

/*--- return the class of object obj --------------------------------*/
objClass: procedure expose m.
parse arg m
    if symbol('m.o.o2c.m') == 'VAR' then
         return m.o.o2c.m
    else if abbrev(m, m.o.escW) then
         return m.class.classW
    else if arg() >= 2 then
        return arg(2)
    else
        return err('no class found for object' m)
endProcedure objClass

oKindOf: procedure expose m.
parse arg obj, sup
    cl = objClass(obj, '')
    if cl == '' then
        return 0
    return oClaInheritsOf(cl, sup)
endProcedure oKindOf

oClaInheritsOf: procedure expose m.
parse arg cl, sup    /* wkTst optimierung in classAdded */
    if symbol('m.o.cParent.cl') \== 'VAR' then
         cl = class4name(cl)
    if symbol('m.o.cParent.sup') \== 'VAR' then
         sup = class4name(sup)
    if cl == sup then
        return 1
    do sx=1 to words(m.o.cParent.cl)
        if oClaInheritsOf(word(m.o.cParent.cl, sx), sup) then
            return 1
        end
    return 0
endProcedure oClaInheritsOf
/*--- return the code of method me of object m
         set m to the address and ggClass to the class ---------------*/
objMet: procedure expose m. m ggClass
parse arg m, me
    if symbol('m.o.o2c.m') == 'VAR' then
         ggClass = m.o.o2c.m
    else if abbrev(m, m.o.escW) then
         ggClass = "w"
    else if arg() >= 3 then
        return arg(3)
    else
        return err('no class found for object' m)
    if symbol('m.o.cMet.ggClass.me') == 'VAR' then
       return m.o.cMet.ggClass.me
    code = oClaMet(ggClass, me, '---')
    if code \== '---' then
        return code
    else if arg() >= 3 then
         return arg(3)
    return err('no method' me 'in class' className(ggClass) ,
               'of object' m)
endProcedure objMet

oClaMet: procedure expose m.
parse arg cl, me
    if symbol('m.o.cMet.cl.me') == 'VAR' then
       return m.o.cMet.cl.me
    if \ oIsCla(cl) then do
        c2 = class4Name(cl, '')
        if c2 \== ''  & oIsCla(c2) then do
            cl = c2
            if symbol('m.o.cMet.cl.me') == 'VAR' then
                return m.o.cMet.cl.me
            end
        else do
            if arg() >= 3 then
                return arg(3)
            else
                return err('no class' cl 'in oClaMet('cl',' me')')
            end
        end
    code = oLazyMetGen(m.o.lazyGen, cl, me)
    do px = 1 to words(m.o.cParent.cl) while code == '---'
        code = oClaMet(word(m.o.cParent.cl, px), me, '---')
        end
    if code == '---' then do
        if arg() >= 3 then
            return arg(3)
        else
            return err('no met' me 'in class' cl)
        end
    m.o.cMet.cl.me = code
    return code
endProcedure oClaMet

oLazyMetGen: procedure expose m.
parse arg lg, cl, me
    if symbol('m.o.cMet.lg.me') \== 'VAR' then
        return '---'
    interpret m.o.cMet.lg.me
endProcedure oLazyMetGen

/*--- return the stem of fieldnames of object m ---------------------*/
oFlds: procedure expose m.
parse arg m
    return objMet(m, 'oFlds')
endProcedure oFlds

/*--- return the contents of field f navigation along path ----*/
oGet: procedure expose m.
parse arg obj, path, clazz
    nullNew = 0
    ret = oAccPath(obj, path, clazz)
    if ret == 1 then
        ret = oAccStr(m, cl)
    if ret == 1 then
        return str
    return err(ret 'in oGet('obj',' path')')
endProcedure oGet

oAccStr: procedure expose m. str
parse arg m, cl
    if cl == m.class.classV then
        str = m.m
    else if m.cl.valueCl == '' then
        return 'no value @' m 'class' className(cl)
    else if m.m == '' then
        return 'null @' m 'class' className(cl)
    else if abbrev(m, m.o.escW) then
        str = substr(m ,2)
    else
        str = o2String(m.m)
    return 1
endProcedure oAccStr

oGetO: procedure expose m.
parse arg obj, path, opt, clazz
    nullNew = pos('n', opt) > 0
    ret = oAccPath(obj, path, clazz)
    if ret == 1 then
        ret = oAccO(m, cl, opt)
    if ret == 1 then
        return ref
    else
        return err(ret 'in oGetO('obj',' path')')
endProcedure oGetO

oAccO: procedure expose m. ref
parse arg m, cl, opt
    if cl == m.class.classV then do
        ref = s2o(m.m)
        end
    else if m.cl \== 'r' then do
        ref = m
        end
    else if m.m == '' then do
        if opt == '-b' then do
            m.m = jBuf()
            end
        else if opt == '-n' then do
            rsn = oRefSetNew(m, cl)
            if rsn \==1 then
               return rsn
            end
        ref = m.m
        end
    else if objClass(m.m, 0) \== 0 then do
        ref = m.m
        end
    else do
        return 'no class for' m.m '@' m 'class' cl
        end
    return 1
endProcedure oAccO

oPut: procedure expose m.
parse arg obj, path, str
    nullNew = 1
    res = oAccPath(obj, path)
    if res == 1 then
        res = ocPut(m, cl, str)
    if res == 1 then
        return str
    return err(res 'in oPut('obj',' path',' str')')
endProceudre oPut

ocPut: procedure expose m.
parse arg m, cl, str
    if m.cl.valueCl == m.class.classV then
        m.m = str
    else if m.cl.valueCl \== '' then
        m.m = s2o(str)
    else
        return 'no value @' m 'class' className(cl)
    return 1
endProcedure ocPut

oPutO: procedure expose m.
parse arg obj, path, ref
    nullNew = 1
    res = oAccPath(obj, path)
    if res == 1 then
        res = ocPutO(m, cl, ref)
    if res == 1 then
        return ref
    return err(ret 'in oPut('obj',' path',' ref')')
endProcedure oPutO

ocPutO: procedure expose m.
parse arg m, cl, ref
    if m.cl.valueCl == m.class.classV then
        m.m = o2string(ref)
    else if m.cl.valueCl \== '' then
        m.m = ref
    else if m.cl.stemCl \== '' then
        return 'implement put to stem'
    else
        return 'no value @' m 'class' className(cl)
    return 1
endProcedure ocPutO

oClear: procedure expose m.
parse arg m
    interpret objMet(m, 'oClear')
    return m
endProcedure oClear

oClaClear: procedure expose m.
parse arg cla, m
    interpret "drop cla;" oClaMet(cla, 'oClear')
    return m
endProcedure oClaClear

oAccPath: procedure expose m. m cl nullNew
parse arg m, pa, cl
    if cl == '' & m \== '' then do
        cl = objClass(m)
        end
    if pa == '' then
        return 1
    call oClaMet cl, 'oFlds'
    if abbrev(pa, m.class.cRef) ,
            | (\ m.cl.hasFlds & abbrev(pa, m.class.cNav)) then do
        if pa == m.class.cRef & m.cl.valueCl == m.class.classV then do
            cl = m.class.classV
            return 1
            end
        if (m.cl.valueCl == '' | m.cl.valueCl == m.class.classV) ,
              & m.cl \== 'r' then
            return 'no reference @' m 'class' cl
        if m.m = '' then do
            if \ nullNew then
                return 'null @' m 'class' className(cl)
            rsn = oRefSetNew(m, cl)
            if rsn \== 1 then
                return rsn
            end
        return oAccPath(m.m, substr(pa, 2))
        end
    if pos(left(pa, 1), m.class.cPath) > 0 then
        return oAccPath(m, substr(pa, 2), cl)
    px = verify(pa, m.class.cPath, 'm')
    if px < 1 then
        px = length(pa)+1
    fn = left(pa, px-1)
    pa = substr(pa, px)
    if symbol('m.cl.f2c.fn') == 'VAR' then
        return oAccPath(m'.'fn, pa, m.cl.f2c.fn)
    if m.cl.stemCl=='' | fn=='' | verify(fn, '0123456789','n')>0 then
        return 'no field' fn '@' m 'class' className(cl)
    if fn == 0 then
        return oAccPath(m'.0', pa, m.class.classV)
    if abbrev(fn, 0) | verify(m.m.0, '0123456789', 'n') > 0,
            | fn > m.m.0 then
        return 'bad stem index' fn'>'m.m.0 '@' m 'class' className(cl)
    return oAccPath(m'.'fn, pa, m.cl.stemCl)
endProcedure oAccPath

oRefSetNew: procedure expose m.
parse arg m, cl
    cr = m.cl.valueCl
    if m.cr.class = '' then
        return 'no class for null @' m 'class' className(cl)
    if m.cr.class = m.class.classW then
        m.m = o2s()
    else if m.cr \== 'r' then
        return 'class' className(cl) 'not ref'
    else
        m.m = oNew(m.cr.class)
    return 1
endProcedure oRefSetNew


/*--- mutate object m to the class named name -----------------------*/
oMutate: procedure expose m.
parse arg m, cl
    m.o.o2c.m = cl
    return m
endProcedure oMutate

/*--- copy object m of class cl to t --------------------------------*/
oClaCopy: procedure expose m.
parse arg cl, m, t
    interpret "drop cl;" oClaMet(cl, 'oCopy')
endProcedure oClaCopy

/*--- copy object m to t / create a new object if t=='' -------------*/
oCopy: procedure expose m.
parse arg m, t
    interpret objMet(m, 'oCopy')
endProcedure oCopy

/*--- return a new instance of a subclass of Run
        with code code in method oRun -------------------------------*/
oRunner: procedure expose m.
    if arg() >= 1 then
           r = oNew(classNew('n* ORun u ORun, m oRun' arg(1)))
    else
           r = oNew(classNew('n| ORun u ORun'))
    return r
endProcedure oRunner

/*--- set code for runner -------------------------------------------*/
oRunnerCode: procedure expose m.
parse arg r, code
    call classSetMet objClass(r), 'oRun', code
    return r
endProcedure oRunnerCode

/*--- run method oRun of object m -----------------------------------*/
oRun: procedure expose m.
parse arg m, arg, arg2, arg3
    interpret objMet(m, 'oRun')
    return
endProcedure oRun

/*--- run method oRun and return output in new JBuf ------------------*/
oRun2File: procedure expose m.
parse arg rn
    b = jBuf()
    call pipe '+F' , b
    call oRun rn
    call pipe '-'
    return b
endProcedure oRun2File

/*--- cast the object to a file -------------------------------------*/
o2File: procedure expose m.
parse arg m
    interpret objMet(m, 'o2File')
    call err 'o2file did not return'
endProcedure o2File

/*--- cast the object to a String -----------------------------------*/
o2String: procedure expose m.
parse arg m, fmt
    if opt == '' then
        opt = '-b '
    interpret objMet(m, 'o2String')
    return err('o2String did not return')
endProcedure o2String

/*--- return true if object is kind of String------------------------*/
oStrOrObj: procedure expose m. ggStr ggObj ggCla
parse arg ggObj, def
    if ggObj == '' then
        ggObj = def
    ggCla = objClass(ggObj, '')

    if ggCla == '' then do
        ggStr = ggObj
        ggObj = ''
        return 1
        end
    else if wordPos(ggCla, m.class.classV m.class.classW) > 0 then do
        ggStr = o2String(ggObj)
        ggObj = ''
        return 1
        end
    else do
        ggStr = ''
        return 0
        end
endProcedure oStrOrObj

/*--- return true if object is kind of String ----- ???? -------------*/
oStrOrFile: procedure expose m. ggStr ggObj ggCla
parse arg m, def
    if oStrOrObj(m, def) then
        return 1
    ggObj = o2File(ggObj)
    return 0
endProcedure oStrOrFile

/*--- return a short string representation of an object -------------*/
o2Text: procedure expose m.
parse arg m, maxL
    if m == '' then
        return '@ null object'
    if maxL == '' then
        maxL = 80
    cl = objClass(m, '?')
    if cl = m.class.classV then
        l = m.m
    else if cl == m.class.classW then
        l = substr(m, 2)
    else if cl == '?' then
        l = '@'m 'class=???'
    else do
        l = '@'m 'class='className(cl)
        ff = oFlds(m)
        do fx=1 to m.ff.0 while length(l) < maxL + 3
            if m.ff.fx == '' then
                 l = l', .='m.m
            else do
                 f1 = substr(m.ff.fx, 2)
                 l = l',' f1'='m.m.f1
                 end
            end
        end
    if length(l) <= maxL then
        return l
    return left(l, maxL-3)'...'
endProcedure o2Text

/*--- cast a String to an object -----------------------------------*/
s2o: procedure expose m.
parse arg str
    return m.o.escW || str
    return r
endProcedure s2o

oIfStr: procedure expose m.
parse arg m
    if length(m) > 200 then
        return m
    cl = objClass(m, '')
    if cl = '' then
        return m
    else if cl = m.class.classV then
        return = m.m
    else if cl == m.class.classW then
        return = substr(m, 2)
    else if arg() >= 2 then
        return arg(2)
    else
        call err m 'of class' className(cl) 'not kind of string'
endProcedure oIfStr

/* copy o end *******************************************************/
/* copy class begin **************************************************
    a class has fields and methods,
    the class module handles only the metadata,
    object handling (instanciation, methodcalls etc.) is in O

    classes are represented by a metadata tree,
        its nodes of class class have diffenrent types:

class subTypes (implemented as choices)
    'u'    = union:    NAME -> name of class if <> '',
                    stem -> references component classes
    'f' = field:      NAME -> fieldName (x.name),
                    CLASSS -> reference to class of fieldValue
    's' = stem:     class -> ref to class at each stem element
    'c' = choice:   NAME -> selection value,
                    CLASS -> ref to class of choice
    'm' = method:    NAME -> methodName,
                    MET -> rexxCode
    'r' = reference CLASS -> ref to type at reference
special classes
    'v'    = Value     String Value
    'w'    = ValueAsA    StringValue packed into an adress (prefix escW)
    'o' = AnyClass    any class with dynamic classLookup on object
formal definition, see classIni

class expression (ce) allow the following syntax
    ce = className | classAdr | 'n'('?','*','|')? name union | union
        | 'f' name ce | 's' ce | 'c' name ce | 'm' name code | r ce?
    union = 'u' (ce (',' ce)*)?

    the modifiers of 'n' means
        none:    create new class, fail if name already defined
        '?':    create new class or return old of that name
        '*':    use an exisiting class of that definition
                or create new class with a unique name
        '|':    create a new class with a unique name
    'm' extends to then end of the ce (line)
    'u' allows several components, in classNew also multiple args
                Achtung, aber NICHT rekursiv|
***********************************************************************/
classIni: procedure expose m.
    if m.class.ini == 1 then
        return
    m.class.ini = 1
    m.class.in2 = 0
    call oIni
    call mapIni
    call mNewArea 'CLASS', 'CLASS'
    call mapReset 'CLASS.N2C'  /* name to class */
    m.class.classV = classBasicNew('u', 'v')
    m.class.classW = classBasicNew('u', 'w')
    m.class.classO = classBasicNew('u', 'o')

    m.class.class = classNew('n class u v',
            , 'c u u f NAME v, s r class',
            , 'c f u f NAME v, f CLASS r class',
            , 'c s f CLASS r class' ,
            , 'c c u f NAME v, f CLASS r class',
            , 'c m u f NAME v, f MET  v' ,
            , 'c r f CLASS r class' )
    m.class.cNav = '.'
    m.class.cRef = '|'
    m.class.cDot = '%'
    m.class.cPath = m.class.cNav || m.class.cRef || m.class.cDot
    m.class.classR = classNew('r')
    m.class.basicNew = "oMutate(mNew(cl), cl)"
    call oAddMet m.o.lazyGen, 'new', "return classGenNew(cl, me)"
    call oAddMet m.o.lazyGen,'oClear',"return classGenClear(cl, me)"
    call oAddMet m.o.lazyGen,'oFlds',"return classGenFlds(cl, me)"
    call oAddMet m.o.lazyGen, 'oCopy', "return classGenCopy(cl, me)"

    cr = mIterBegin('CLASS')
    do while assNN('cr', mIter(cr))
        call classFinish cr
        call oClaMet cr, 'oFlds' /* generate flds */
        end
    m.class.in2 = 1

    call oAddMet m.class.classV, 'oCopy', "return oCopyV(m, t)"
    call classAddMet m.class.classV, 'o2String return m.m'
    call classAddMet m.class.classW, 'o2String return substr(m, 2)'
    call classNew 'n ORun u',
         , 'm oRun call err "call of abstract method oRun"',
         , 'm o2File return oRun2File(m)',
         , 'm o2String return jCatLines(oRun2File(m), fmt)'

    return
endProcedure classIni


/*--- return the name of a class if it exists otherwise the class ---*/
className: procedure expose m.
parse arg cl
    if m.cl = 'u' & m.cl.name \= '' then
        return m.cl.name
    else
        return cl
endProcedure className

/*--- return class of given name or class ---------------------------*/
class4Name: procedure expose m.
parse arg nm
    if symbol('m.class.n2c.nm') == 'VAR' then
        return m.class.n2c.nm
    if arg() > 1 then
        return arg(2)
    call err 'no class' nm
endProcedure class4Name

classBasicNew: procedure expose m.
parse arg ty, nm, cl, nmTy
    n = mNew('CLASS')
    m.n = ty
    m.n.name = nm
    m.n.nameComp = nm
    if ty == 'u' & nm \== '' then do
        if pos(nmTy, '*|') > 0 then do
            m.n.name = nm || substr(n, 1+lastPos('.', n))
            if nmTy == '*' then
                m.n.nameComp = nm'*'
            else
                m.n.nameComp = m.n.name
            end
        call mapAdd class.n2c, m.n.name, n
        end
    call mapAdd class.n2c, n, n
    m.n.class = ''
    m.n.met = ''
    m.n.0 = 0
    if length(ty) \== 1 | pos(ty, 'ufscrm') < 1 then
        call err 'bad type' ty': classBasicNew('ty',' nm',' cl')'
    else if nm == '' & pos(ty, 'fm') > 0 then
        call err 'empty name: classBasicNew('ty',' nm',' cl')'
    else if nm \== '' & ty \== 'c' & verifId(nm) > 0 then
        call err 'bad name' nm': classBasicNew('ty',' nm',' cl')'
    else if nm \= '' & pos(ty, 'rs') > 0 then
        call err 'name for type' ty': classBasicNew('ty',' nm',' cl')'
    else if pos(ty, 'fcrs') > 0 then do
        if cl \== '' then
            m.n.class = mapGet(class.n2c, cl)
        else if ty == 'r' then
            m.n.class = m.class.classO
  /*    else say 'cl leer' ty nm nmTy   ???????*/
        end
    else if ty == 'm' then
        m.n.met = cl
    else if cl \== '' then
        call err 'class for type' ty': classBasicNew('ty',' nm',' cl')'
    return n
endProcedure classBasicNew


classNew: procedure expose m.
parse arg clEx 1 ty rest
    if abbrev(ty, 'n') then do
        if wordPos(ty, 'n n? n* n|') < 1 then
            call err 'bad type' ty': classNew('clEx')'
        nmTy = right(ty, 1)
        parse var rest nm ty rest
        if ty \== 'u' then
            call err 'class name' nm 'without u: classNew('clEx')'
        if nmTy == 'n' then do
             if mapHasKey(class.n2c, nm) then
                call err 'class' nm 'already defined: classNew('clEx')'
            end
        else if nmTy == '?' then do
            if mapHasKey(class.n2c, nm) then
                return mapGet(class.n2c, nm)
            end
        else if nmTy == '*' then do
            if arg() \== 1 then
                call err 'arg()='arg() 'for n* : classNew('clEx')'
            if mapHasKey(class.n2c, clEx) then
                return mapGet(class.n2c, clEx)
            end
        n = classBasicNew('u', nm, , nmTy)
        end
    else do
        nmTy = ''
        if arg() \== 1 then
            call err 'arg()='arg() 'without name: classNew('clEx')'
        if mapHasKey(class.n2c, clEx) then
               return mapGet(class.n2c, clEx)
        if length(ty) <> 1 | pos(ty, 'ufscmr') < 1 then
            call err 'bad type' ty': classNew('clEx')'
        nm = ''
        if pos(ty, 'usr') < 1 then
            parse var rest nm rest
        if ty = 'u'  then do
            n = classBasicNew(ty)
            end
        else if    ty = 'm' then do
            n = classBasicNew(ty, nm, rest)
            rest = ''
            end
        else do
            parse var rest t1 rest
            if wordPos(t1, 'u f s c m r') > 0 then do
                n = classBasicNew(ty, nm)
                m.n.class = classNew(t1 rest)
                rest = ''
                end
            else do
                n = classBasicNew(ty, nm, t1)
                end
            end
        end
    if ty \== 'u' then do
        if rest \== '' then
            call err 'rest' rest 'but end of classExp expected:' clEx
        end
    else do
        lx = 0
        do while lx < length(rest)
            cx = pos(',', rest, lx+1)
            if cx <= lx | word(substr(rest, lx+1), 1) == 'm' then
                cx = length(rest)+1
            a = mAdd(n, classNew(strip(substr(rest, lx+1, cx-lx-1))))
            lx=cx
            end
        pref = ''
        do ax=2 to arg()
            if length(arg(ax)) == 1 & arg(ax) \== ' ' then
                pref = arg(ax)' '
            else
                call mAdd n, classNew(pref || arg(ax))
            end
        end
    cr = mIterBegin('CLASS')
    do while assNN('cr', mIter(cr)) & \ classEqual(n, cr)
        end
    isNew = cr == n
    if \ isNew then do
        if mapRemove(class.n2c, n) \== n then
            call err 'mapRemove('n') mismatch'
        if m.n == 'u' & m.n.name \== '' then
            if mapRemove(class.n2c, m.n.name) \== n then
                call err 'mapRemove('m.n.name') mismatch'
        call mFree n
        n = cr
        end
    if isNew & m.class.in2 then
        call classFinish n
    if nmTy == '' | nmTy == '*' then
        call mapAdd class.n2c, clEx, n
    return n
endProcedure classNew

/*--- to the finish for new class cl -------------------------------*/
classFinish: procedure expose m.
parse arg cl, force
    call oMutate cl, m.class.class
                        /* find super and sub classes */
    m.cl.sub = ''
    sups = ''
    do ux=1 to m.cl.0
        u1 = m.cl.ux
        if m.u1 \== 'u' then
            iterate
        if wordPos(u1, sups) > 0 then
            call err u1 'already in sups' sups': classSuperSub('cl')'
        sups = sups u1
        if wordPos(m.cl.SUB, cl) > 0 | symbol('m.u1.sub') \== 'VAR' then
            call err cl 'is already in' u1'.sub' u1.SUB  ,
                || ': classSuperSub('cl')'
        m.u1.sub = strip(m.u1.sub cl)
        end
    m.cl.super = sups
                        /* add class to o */
    call oAddCla cl, sups
    if pos(m.cl, 'mfrsv') < 1 then do
        allMets = ''
        forceMets = ''
        do cx=1 to m.cl.0
            ch = m.cl.cx
            if m.ch == 'm' then do
                call oAddMet cl, m.ch.name, m.ch.met
                allMets = allMets m.ch.name
                end
            else if symbol('m.class.forceDown.ch') == 'VAR' then
                forceMets = forceMets m.class.forceDown.ch
            end
        myForce = ''
        do fx=1 to words(forceMets)
            parse value word(forceMets, fx) with fCla '#' fMet
            if wordPos(fMet, allMets) < 1 then do
                call oAddMet cl, fMet, m.o.cMet.fCla.fMet
                myForce = myForce cl'#'fMet
                allMets = allMets fMet
                end
            end
        if myForce \== '' then
            m.class.forceDown.cl = strip(myForce)
        end
    if cl == m.class.class then
        call mAlias 'CLASS', cl
    else  /* object adresses */
        call mNewArea cl, 'O.'substr(cl,7)
    if m.cl \== 'u' | m.cl.name == '' then
        return
    call mAlias cl, m.cl.name
    return
endProcedure classFinish

classAddMet: procedure expose m.
parse arg clNm, met code
    cl = class4Name(clNm)
    if pos(m.cl, 'uvw') < 1 then
        call err 'class not nvw but' m.cl,
            'in classAdd1Method('clNm',' met code')'
    call mAdd cl, classNew('m' met code)
    call oAddMet cl, met, code
    return cl
endProcedure classAddMet
/*--- return true iff the two classes are equal -------------------*/
classEqual: procedure expose m.
parse arg l, r
    if m.l \== m.r | m.l.nameComp \== m.r.nameComp ,
            | m.l.class \== m.r.class | m.l.0 \== m.r.0  then
        return 0
    if m.l.met \== m.r.met  then
        return 0
    do sx=1 to m.l.0
        if m.l.sx \== m.r.sx then
            return 0
        end
    return 1
endProcedure classEqual

classGenNew: procedure expose m.
parse arg cl, met
     return  "m=" m.class.basicNew";" oClaMet(cl, 'oClear') ";" ,
             "return m"
endProcedure classGenNew

classGenFlds: procedure expose m.
parse arg cl, met
    m.cl.flds.0 = 0
    m.cl.stms.0 = 0
    m.cl.stemCl = ''
    m.cl.valueCl = ''
    call classGenFldsAdd cl, cl
    m.cl.hasFlds = m.cl.flds.0 > 1 ,
        | (m.cl.flds.0 == 1 & m.cl.flds.1 \== '') | m.cl.stms.0 > 0
    return cl'.FLDS'
endProcedure classGenFlds

/*--- add the the fields of class cl to stem f ----------------------*/
classGenFldsAdd: procedure expose m.
parse arg f, cl, nm
    n1 = substr(nm, 1+abbrev(nm, '.') )
    if symbol('m.f.f2c.n1') \== 'VAR' then
        m.f.f2c.n1 = cl
    if cl == m.class.classV | cl == m.class.classW | m.cl=='r' then do
        if nm == '' then do
            if m.f.valueCl \== '' then
                return  err('value mistmatch')
            m.f.valueCl = cl
            end
        if nm == '' then do
             call mMove f'.FLDS', 1, 2
             m.f.flds.1 = ''
             end
        else do
            call mAdd f'.FLDS', nm
            end
        return 0
        end
    if m.cl = 's' then do
        if m.cl.class == '' then
            call err 'stem null class'
        a1 = mAdd(f'.STMS', nm)
        m.a1.class = m.cl.class
        if nm == '' then
            m.f.stemCl = m.cl.class
        return 0
        end
    if m.cl = 'f' then
        return classGenFldsAdd(f, m.cl.class, nm'.'m.cl.name)
    if m.cl.class \== '' then
        return classGenFldsAdd(f, m.cl.class, nm)
    do tx=1 to m.cl.0
        call classGenFldsAdd f, m.cl.tx, nm
        end
    return 0
endProcedure classGenFldsAdd

classGenClear: procedure expose m.
parse arg cl, met
    r = ''
    call oClaMet cl, 'oFlds'
    do fx=1 to m.cl.flds.0
        f1 = m.cl.flds.fx
        if f1 == '' then
            c1 = cl
        else do
            c1 = substr(f1, 2)
            c1 = m.cl.f2c.c1
            end
        if c1 == m.class.classW then
            r = r classGenStmt(f1, "m.m~ = '"m.o.escW"';")
        else
            r = r classGenStmt(f1,  "m.m~ = '';")
        end
    do sx=1 to m.cl.stms.0
        r = r classGenStmt(m.cl.stms.sx, "m.m~.0 = 0;")
        end
    return r
endProcedure classGenClear

classGenStmt: procedure expose m.
parse arg f, st, resWo
    isNice = translate(f) == f
    resWo = translate(resWo) 'GGFF M'
    fDod = '.'f'.'
    do wx=1 to words(resWo) while isNice
        isNice = pos('.'word(resWo, wx)'.', fDot) < 1
        end
    if isNice then
        return repAll(st, '~', f)
    else
        return "ggFF = '"substr(f, 2)"';" repAll(st, '~', '.ggFF')
endProceduer classGenAss

classGenCopy: procedure expose m.
parse arg cl, me
    r = repAll("if t == '' then t =" m.class.basicNew ";" ,
               "else call oMutate t, cl;", 'cl', "'"cl"'")
    ff = oClaMet(cl, 'oFlds')            /* build code for copy */
    do fx=1 to m.cl.flds.0
        r = r classGenStmt(m.cl.flds.fx, 'm.t~ = m.m~;', 't')
        end
    do fx=1 to m.cl.stms.0
        nm = m.cl.stms.fx
        sc = m.cl.stms.fx.class
        if nm == '' then
            st = ''
        else do
            r = r "st = '"substr(nm, 2)"';"
            st = '.st'
            end
        r = r "m.t"st".0 = m.m"st".0;" ,
               "do sx=1 to m.m"st".0;" ,
                 "call oClaCopy '"sc"', m"st".sx, t"st".sx; end;"
        end
    return r 'return t;'
endProcedure classGenCopy

/*--- oCopy for classW ----------------------------------------------*/
oCopyW: procedure expose m.
trace ?r
parse arg m, t
    if t == '' then
        return m
    m.t = o2String(m)
    return oMutate(t, m.class.classV)
endProcedure oCopyW
/*--- print object ---------------------------------------------------*/
objOut: procedure expose m.
parse arg m, pr, p1
   c = objClass(m, '')
   if c == '' then
       call out p1 'no class for' m
   else if c == m.class.classV then
       call out p1 || m.m
   else if c == m.class.classW then
       call out p1 || o2String(m)
   else
       call classOutDone c, m, pr, p1
   return
endProcedure objOut

/*--- recursively output (with out:) the object a with class t -------*/
classOut: procedure expose m.
parse arg t, a, pr, p1
    return classOutDone(if(t=='',m.class.classO, t), a, pr, p1)
endProcedure classOut

/*--- ouput object a with class t and stopper done ------------------*/
classOutDone: procedure expose m. done.
parse arg t, a, pr, p1
    if p1 == '' then
        p1 = pr
    if right(p1, 1) \== ' ' then
        p1 = p1' '
    if done.ini \== 1 then do
        done.ini = 1
        t = class4Name(t, t)
        p1 = p1'@'a' '
        end
    if done.t.a == 1 then
        return out(p1'done :'className(t) '@'a)
    done.t.a = 1
    if t = m.class.classO then do
        if a == '' then
            return out(p1'obj null')
        t = objClass(a, '')
        if t = '' then
            return out(p1'obj has no class @'m.a)
        else
            return classOutDone(t, a, pr, p1'isA')
        end

    if t == m.class.classV then
        return out(p1'=' m.a)
    if t == m.class.classW == 'w' then
        return out(p1'}' substr(a, 2))
    if m.t == 'f' then
        return classOutDone(m.t.class, a'.'m.t.name, pr, p1'.'m.t.name)
    if m.t == 'r' then do
        if m.a == '' then
            return out(p1'refTo :'className(m.t.class) '@null@')
        else
            return classOutDone(m.t.class, m.a, pr,
                    , p1'refTo @'m.a)
        end
    if m.t = 'u' then do
        t1 = m.t.1
        vv = m.t.0 > 0 & m.t.1 == m.class.classV
        call out p1 || if(m.t.name == '', 'union', ':'m.t.name) ,
             || copies(' =' m.a, vv)
        do ux=1+vv to m.t.0
            call classOutDone m.t.ux, a, pr' '
            end
        return 0
        end
    if m.t = 's' then do
        call out p1'stem' m.a.0
        do ux=1 to m.a.0
            call classOutDone m.t.class, a'.'ux, pr' ', pr' .'ux
            end
        return 0
        end
    if m.t = 'c' then do
        if m.t.name = m.a then
            call classOutDone m.t.class, a, pr, p1'choice' m.a
        return 0
        end
    if m.t = 'm' then
        return 0
    return err('bad class type' m.t)
endProcedure classOutDone
/* copy class end   ***************************************************/
/* copy mapExp begin **************************************************/
mapVia: procedure expose m.
parse arg a, ky
    sx = pos('|', ky)
    if sx < 1 then
        return mapGet(a, ky)
    via = mapGet(a, left(ky, sx-1))
    do while sx <= length(ky)
        fx = sx+1
        sx = pos('|', ky, fx)
        if sx < 1 then
            sx = length(ky) + 1
        if sx = fx then do
            if symbol('m.via') \== 'VAR' then
                call err 'missing m.'via 'at' sx 'in mapVia('a',' ky')'
            via = m.via
            end
        else do
            f = substr(ky, fx, sx - fx)
            if symbol('m.via.f') \== 'VAR' then
                call err 'missing m.'via'.'f ,
                     'at' sx 'in mapVia('a',' ky')'
            via = m.via.f
            end
        end
    return via
endProcedure mapVia

mapExpAt: procedure expose m.
parse arg a, src, sx
    m.map.ExpAt = 0
    cx = pos('$', src, sx)
    if cx < 1 then
        return substr(src, sx)
    res = substr(src, sx, cx-sx)
    do forever
        if substr(src, cx+1, 1) = '{' then do
            ex = pos('}', src, cx+2)
            if ex < 1 then
                call err 'missing } after' substr(src, cx) 'in' src
            res = res || mapVia(a, strip(substr(src, cx+2, ex-cx-2)))
            ex = ex + 1
            end
        else do
            ex = verify(src, m.mAlfDot, 'n', cx+1)
            if ex < 1 then
                return res || mapVia(a, substr(src, cx+1))
            if ex = cx+1 then do
                m.map.ExpAt = cx
                return res
                end
            res = res || mapVia(a, substr(src, cx+1, ex-cx-1))
            end
        cx = pos('$', src, ex)
        if cx < 1 then
            return res || substr(src, ex)
        res = res || substr(src, ex, cx-ex)
        end
endProcedure mapExpAt

mapExp: procedure expose m.
parse arg a, src
    res = mapExpAt(a, src, 1)
    if m.map.ExpAt \== 0 then
        call err 'mapExp stopped at' substr(src, map.ExpAt) 'in' src
    return res
endProcedure mapExp

mapExpAllAt: procedure expose m.
parse arg a, dst, src, sx, cx
    do while sx <= m.src.0
        li = mapExpAt(a, m.src.sx, cx)
        dx = m.map.ExpAt
        if (cx=1 & dx = 0) | li \= '' then
            call mAdd dst, li
        if dx = 0 then do
            cx = 1
            sx = sx+1
            end
        else do
            return sx dx
            end
        end
    return ''
endProcedure mapExpAllAt

mapExpAll: procedure expose m.
parse arg a, dst, src
    sto = mapExpAllAt(a, dst, src, 1, 1)
    if sto == '' then
         return
    lx = word(sto, 1)
    call err 'mapExpAll stopped at' sto':' m.src.lx
endProcedure mapExpAll
/* copy mapExp end ****************************************************/
/* copy map begin ******************************************************
    a map stores values at keys
    it may also maintain a list of keys
    the basic ideas are similar to the java Interface java.util.Map
    contrary to stems we also handle keys longer then 250 bytes
***********************************************************************/
/*--- initialize the module ------------------------------------------*/
mapIni: procedure expose m.
    if m.map.ini = 1 then
        return
    m.map.ini = 1
    call mIni
    m.map.0 = 0
    m.map.inlineSearch = 1
    call mapReset map.inlineName, map.inline
    return
endProcedure mapIni

mapInline: procedure expose m.
parse arg pName, opt
    if mapHasKey(map.inlineName, pName) then do
        im = mapGet(map.inlineName, pName)
        if pos('l', opt) < 1 & symbol('m.im.0') \== 'VAR' then do
            m.im.0 =  m.im.lEnd - m.im.lBegin - 1
            do ix=1 to m.im.0
                m.im.ix = strip(sourceline(ix+m.im.lBegin), 't')
                end
            end
        return im
        end
    name = '/'
    do lx = m.map.inlineSearch to sourceline()
        if \ abbrev(sourceline(lx), '$') then
            iterate
        li = sourceline(lx)
        s1 = pos('/', li)+ 1
        if s1 < 3 | s1 > 4 then
            iterate
        s2 = pos('/', li, s1)
        if s2 <= s1 then
            iterate
        if s1 == 3 then do
            if name \== substr(li, s1, s2-s1) then
                iterate
            im = 'MAP.INLINE.' || (m.map.inline.0+1)
            call mapAdd map.inlineName, name, im
            m.im.lBegin = lBeg
            m.im.lEnd = lx
            m.im.mark = mrk
            if name == pName then do
                m.map.inlineSearch = lx+1
                return mapInline(pName)
                end
            name = '/'
            end
        else if \ mapHasKey(map.inlineName,
                , substr(li, s1, s2-s1)) then do
            lBeg = lx
            mrk = substr(li, 2, s1-3)
            name = substr(li, s1, s2-s1)
            end
        else do
            name = '/'
            end
        end
    if pos('r', opt) > 0 then
        return ''
    return err('no inline data /'pName'/ found')
endProcedure mapInline

/*--- create a new map ----------------------------------------------*/
mapNew: procedure expose m.
parse arg opt
    m.map.0 = m.map.0 + 1
    return mapReset('MAP.'m.map.0 , opt)
endProcedure mapNew

/*--- make an empty map, if opt <> '' maintain stem of keys
                ('K' in map.keys, '=' in a else in opt) --------------*/
mapReset: procedure expose m.
    parse arg a, opt
    if symbol('m.map.keys.a') == 'VAR' then
        call mapClear a
    if opt = '=' then
        st = a
    else if translate(opt) = 'K' then
        st = 'MAP.KEYS.'a
    else
        st = opt
    m.map.keys.a = st
    if st \== '' then
        m.st.0 = 0
    return a
endProcedure

/*--- add a new key value pair to the map ----------------------------*/
mapAdd: procedure expose m.
parse arg a, ky, val
    vv = mapValAdr(a, ky, 'a')
    m.vv = val
    return val
endProcedure mapAdd

/*--- change the value at a key or add key value ---------------------*/
mapPut: procedure expose m.
parse arg a, ky, val
    vv = mapValAdr(a, ky, 'p')
    m.vv = val
    return val
endProcedure mapPut

/*--- return 1 if key ky exists in map a, 0 otherwise ----------------*/
mapHasKey: procedure expose m.
parse arg a, ky
    return mapValAdr(a, ky) \== ''
endProcedure mapHasKey

/*--- return the value of key ky in map a if it exists,
          else if called with a third argument return third argument
          else issue an error ----------------------------------------*/
mapGet: procedure expose m.
parse arg a, ky
    vv =  mapValAdr(a, ky)
    if vv \== '' then
        return m.vv
    else if arg() > 2 then
        return arg(3)
    else
        return err('missing key in mapGet('a',' ky')')
endProcedure mapGet

/*--- return a stem of all keys --------------------------------------*/
mapKeys: procedure expose m.
parse arg a
    if m.map.keys.a == '' then
        call err 'mapKeys('a') with no keys'
     return m.map.keys.a
endProcedure mapKeys

/*--- remove a key from the map, do nothing if it is missing ---------*/
mapRemove: procedure expose m.
parse arg a, ky
    vv = mapValAdr(a, ky)
    if vv == '' then
        return ''
    if m.map.keys.a \== '' then do
        trace ?R /* not tested yet ???wkTest */
        k = m.map.keys.a
        mx = m.k.0
        do i=1 to mx
            if m.k.i == ky then do
                m.k.i = m.k.mx
                m.k.0 = mx - 1
                return
                end
            end
        end
    val = m.vv
    drop m.a.ky
    return val
endProcedure mapRemove

/*--- remove all entries ---------------------------------------------*/
mapClear: procedure expose m.
parse arg a
    st = mapKeys(a)
    liLe = 243 - length(a)
    do kx=1 to m.st.0
        ky = m.st.kx
        drop m.st.kx
        if length(ky) <= liLe then do
            drop m.a.ky
            end
        else do
            adr = mapValAdr(a, ky)
            if adr \== '' then do
                ha = left(adr, lastPos('.', adr) - 3)
                do i = 1 to m.ha.k.0
                     drop m.ha.k.i m.ha.v.i
                     end
                 drop m.ha.k.0
                 end
            end
        end
    m.st.0 = 0
    return a
endProcedure mapClear

/*--- return the value pointer for a key, '' if non existing
             with fun = 'a' add a key, with 'p' put a key ------------*/
mapValAdr: procedure expose m.
parse arg a, ky, fun
    if length(ky) + length(a) <= 243 then do
        res = a'.'ky
         if symbol('m.res') == 'VAR' then do
            if fun == 'a' then
                call err 'duplicate key' ky 'in map' a
            return res
            end
        else if fun == '' then
            return ''
        end
    else do
        len = 243 - length(a)
        q = len % 4
        ha = a'.'left(ky, len - 2 * q) || substr(ky,
            , (length(ky)-len) % 2 + 2 * q, q) || right(ky, q)
        if symbol('M.ha.k.0') == 'VAR' then do
            do i=1 to m.ha.k.0
                if m.ha.k.i == ky then do
                    if fun == 'a' then
                        call err 'duplicate key' ky ,
                            'map' a 'hash' ha'.K.'i
                    return ha'.V.'i
                    end
                end
            end
        else do
            i = 1
            end
        if fun == '' then
            return ''
        if i > 9 then
            call err 'overflow long key' y 'in map' a 'hash' ha'.K.'i
        m.ha.k.0 = i
        m.ha.k.i = ky
        res = ha'.V.'i
        end
    if m.map.keys.a \== '' then
        call mAdd m.map.Keys.a, ky
    m.res = ''
    return res
endProcedure mapValAdr

/* copy map end *******************************************************/
/* copy m begin ********************************************************
  we use variables as follows
    m. stem m: all global data and object data that must survive
               a procedure call  (m for memory in Memoria of B5000)
        m.<mbr>.** to avoid conflicts: every rexx Module (copy) should
               only allocate addresses m.<mbr>.** with <mbr> the name of
               the rexx module
        we pass parameters around (e.g. a=address, m=memory, st=stem)
            and the called function may use m.a or m.a.subField etc.
    gg*: local variable in subroutines without procedure
    everything else: temporary data within procedure

  every subroutine is declared as procedure expose m.
        (also if no m. variable is used, because e.g. of error handling)
  the few subroutines that cannot use procedure, should use only
        variables starting with gg
***********************************************************************/
/*---make an area -----*/

mNewArea: procedure expose m.
parse arg nm, adr
    m.m.area.0 = m.m.area.0 + 1
    a = 'M.AREA.'m.m.area.0
    if adr == '=' then
        adr = nm
    else if adr == '' then
        adr = 'M.'m.m.area.0
    if symbol('m.m.n2a.adr') == 'VAR' then
        call err 'adr' adr 'for area' nm 'already used'
    m.m.n2a.adr = a
    call mAlias adr, nm
    m.m.p2a.adr = a

    m.a.0 = 0
    m.a.free.0 = 0
    m.a.address = adr
    return nm
endProcedure mNewArea

mAlias: procedure expose m.
parse arg oldNa, newNa
    if symbol('m.m.n2a.oldNa') \== 'VAR' then
        call err 'area' oldNa 'does not exist'
    if oldNa == newNa then
        return
    if symbol('m.m.n2a.newNa') == 'VAR' then
        call err 'newName' newNa 'for old' oldNa 'already used'
    m.m.n2a.newNa = m.m.n2a.oldNa
    return
endProcedure mAlias

mNew: procedure expose m. ggArea
parse arg name
    if symbol('m.m.n2a.name') \== 'VAR' then
        call err 'area' name 'does not exists'
    ggArea = m.m.n2a.name
    if m.ggArea.free.0 > 0 then do
        fx = m.ggArea.free.0
        m.ggArea.free.0 = fx-1
        m = m.ggArea.free.fx
        end
    else do
        m.ggArea.0 = m.ggArea.0 + 1
        m = m.ggArea.address'.'m.ggArea.0
        end
    return m
endProcedure mNew

mFree: procedure expose m.
parse arg m
    p = 'M.P2A.'left(m, lastPos('.', m)-1)
    area = m.p
    fx = m.area.free.0 + 1
    m.area.free.0 = fx
    m.area.free.fx = m
    return
endProcedure mFree
/*--- iterate over all allocate elements of an area ------------------*/
mIterBegin: procedure expose m.
parse arg nm
    a = m.m.n2a.nm
    return m.a.address'.0'
endProcedure mIterBegin

mIter: procedure expose m.
parse arg cur
    if cur == '' then
        return ''
    lx = lastPos('.', cur)
    p = 'M.P2A.'left(cur, lx-1)
    a = m.p
    ix = substr(cur, lx+1)
    do ix=ix+1 to m.a.0
        n = m.a.address'.'ix
        do fx=1 to m.a.free.0 while m.a.free \== n
            end
        if fx > m.a.free.0 then
            return n
        end
    return ''
endProcedure mIter

/*--- get m.a --------------------------------------------------------*/
mGet: procedure expose m.
parse arg a
    return m.a
endProcedure mGet

/*--- cut stem a to length len ---------------------------------------*/
mCut: procedure expose m.
parse arg a, len
    m.a.0 = len
    return a
endProcedure mCut

/*--- add one or several arguments to stem m.a -----------------------*/
mAdd: procedure expose m.
parse arg a
    ix = m.a.0
    do ax = 2 to arg()
        ix = ix + 1
        m.a.ix = arg(ax)
        end
    m.a.0 = ix
    return a'.'ix
endProcedure mAdd

/*--- pop last element from stem m.a ---------------------------------*/
mPop: procedure expose m.
parse arg a
    ix = m.a.0
    if ix < 1 then
        call err 'pop from empty stem' a
    m.a.0 = ix-1
    return m.a.ix
endProcedure mPop

/*--- add to m.dst.* a (sub)sequence of m.src.* ----------------------*/
mAddSt: procedure expose m.
    parse arg dst, src, fx , tx
    dx = m.dst.0
    if fx == '' then
        fx = 1
    if tx == '' then
        tx = m.src.0
    do sx = fx to tx
        dx = dx + 1
        m.dst.dx = m.src.sx
        end
    m.dst.0 = dx
    return
endProcedure mAddSt

/*--- find position of first occurrence of ele in stem m,
        return 0 if nonemove a part of a stem -----------------------*/
mPos: procedure expose m.
parse arg m, ele, sx
    if sx == '' then
        sx = 1
    do x=sx to m.m.0
        if m.m.x = ele then
            return x
        end
    return 0
endProcedure mPos

/*--- move a part of a stem ------------------------------------------*/
mMove: procedure expose m.
parse arg m, sx, dx
    if dx < sx then do
        y = dx
        do x=sx to m.m.0
            m.m.y = m.m.x
            y = y + 1
            end
        end
    else if dx > sx then do
        y = m.m.0 + dx - sx
        do x=m.m.0 by -1 to sx
            m.m.y = m.m.x
            y = y - 1
            end
        end
    m.m.0 = m.m.0 + dx - sx
    return
endProcedure mMove

/*--- insert a stem into another ------------------------------------*/
mInsert: procedure expose m.
parse arg m, tx, st
    call mMove m, tx, tx+m.st.0
    do sx=1 to m.st.0
        dx = tx-1+sx
            m.m.dx = m.st.sx
            end
    return
endProcedure mInsert

/*--- strip all elements of a stem -----------------------------------*/
mStrip: procedure expose m.
parse arg st, opt
    if opt == '' then
        opt = 'b'
    do x=1 to m.st.0
        m.st.x = strip(m.st.x, opt)
        end
    return st
endProcedure mStrip


/* cat the lines of a stem, possibly repeated --------------------------
       args: stem, fmt see fGen: -------------------------------------*/
mCat: procedure expose m.
parse arg st, fmt
    return mCatFT(st, 1, m.st.0, fmt)

mCatFT: procedure expose m.
parse arg st, fx, tx, fmt
    if tx < fx then
        return ''
    fmt = '%s%qn%s%qe%q^'fmt
    res = f(fmt, m.st.fx)
    do sx=fx+1 to tx
        res = res || f(fmt'%Qn', m.st.sx)
        end
    return res || f(fmt'%Qe')
endProcedure mCatFT

mIni: procedure expose m.
    if m.m.ini = 1 then
        return
    m.m.ini = 1
    m.mDigits = '0123456789'
    m.mAlfLC  = 'abcdefghijklmnopqrstuvwxyz'
    m.mAlfUC  = translate(m.mAlfLC)
    m.mAlfa   = m.mAlfLC || m.mAlfUC
    m.mAlfNum = m.mAlfa || m.mDigits
    m.mAlfDot = m.mAlfNum || '.'
    m.mBase64 = m.mAlfUC || m.mAlfLC || m.mDigits'+-'
    m.mId     = m.mAlfNum'_'   /* avoid rexx allowed @ # $ ¬ . | ? */
    m.mAlfRex1 = m.mAlfa'@#$?'  /* charset problem with ¬|  */
    m.mAlfRexR = m.mAlfRex1'.0123456789'
    m.mPrint = m.mAlfNum'+-*/=()¢!{}<> .:,;?|''"%&#@$£\_'
    m.m.area.0 = 0
    call mNewArea
    return
endProcedure mIni

verifId: procedure expose m.
    parse arg src, extra, sx
    if sx == '' then
        sx = 1
    if pos(substr(src, sx, 1), m.mDigits) > 0 then
        return sx
    else
        return verify(src, m.mId || extra, 'n', sx)
endProcedure verifId

/* copy m end *********************************************************/
/* copy fTab begin ****************************************************/
fTabReset: procedure expose m.
parse arg m, m.m.titBef, m.m.titAft
    m.m.generated = ''
    m.m.0 = 0
    m.m.len = 0
    m.m.cols = ''
    m.m.tit.0 = words(m.m.titBef m.m.titAft) + 5
    m.m.set.0 = 0
    do tx=1 to m.m.tit.0
        m.m.tit.tx = ''
        end
    return m
endProcedure fTabReset

/* add a piece to title tx at current pos */
fTabAddTit: procedure expose m.
parse arg m, tx, t1
    m.m.generated = ''
    m.m.tit.tx = left(m.m.tit.tx, m.m.len) || t1
    return m
endProcedure fTabAddTit

/*--- set the infos for one column -----------------------------------*/
fTabSet: procedure expose m.
parse arg m, c1 aDone, f1, l1
    sx = m.m.set.0 + 1
    m.m.set.0 = sx
    m.m.set.sx = c1 aDone
    m.m.set.sx.fmt = f1
    m.m.set.sx.label = l1
    m.m.set.c1 = sx
    return
endProcedure fTabSet

fTabAdd: procedure expose m.
parse arg m, c1 aDone, f1, l1
    cx = m.m.0 + 1
    m.m.generated = ''
    m.m.0 = cx
    m.m.cols = m.m.cols c1
    if words(m.m.cols) <> cx then
        call err 'mismatch of column number' cx 'col' c1
    if length(aDone) > 1 | wordPos('<'aDone'>', '<> <0> <1>') < 1 then
        call err 'bad done' length(aDone) '<'aDone'> after c1' c1
    m.m.cx.col = c1
    m.m.cx.done = aDone \== 0
    if l1 == '' then
        m.m.cx.label = c1
    else
        m.m.cx.label = l1
    px = pos('%', f1)
    ax = pos('@', f1)
    if px < 1 | (ax > 0 & ax < px) then
        m.m.cx.fmt = f1
    else
        m.m.cx.fmt = left(f1, px-1)'@'c1 || substr(f1, px)
    m.fTabTst.c1 = m.m.cx.label
    t1 = f(f1, m.m.cx.label)
    if pos(strip(t1), m.m.cx.label) < 1 then
        t1 = left(left('', max(0, verify(t1, ' ') -1))m.m.cx.label,
           , length(t1))
    m.m.cx.len = length(t1)
    call fTabAddTit m, 1, t1
    do tx=2 to arg()-3
        if arg(tx+3) \== '' then
            call fTabAddTit m, tx, arg(tx+3)
        end
    m.m.len = m.m.len + length(t1)
    return m
endProcedure fTabAdd

fTabGenerate: procedure expose m.
parse arg m
    f = ''
    do kx=1 to m.m.0
        f = f || m.m.kx.fmt
        end
    m.m.fmt = m'.fmtKey'
    call fGen f, m.m.fmt

    cSta = m.m.tit.0+3
    do cEnd=cSta until kx > m.m.0
        cycs = ''
        do cx=cSta to cEnd
            m.m.tit.cx = ''
            cycs = cycs cx
            end
        cx = cSta
        ll = 0
        do kx=1 to m.m.0 while length(m.m.tit.cx) < max(ll,1)
            m.m.tit.cx = left(m.m.tit.cx, ll)m.m.kx.col
            cx = cx + 1
            if cx > cEnd then
                cx = cSta
            ll = ll + m.m.kx.len
            end
        end
    m.m.cycles = strip(cycs)
    m.m.tit.1 = translate(lefPad(m.m.tit.1, m.m.len), '-', ' ')'---'
    m.m.generated = m.m.generated't'
    return
endProcedure fTabGenerate

fTabColGen: procedure expose m.
parse arg m
    do kx=1 to m.m.0
        l = if(m.m.kx.label == m.m.kx.col, , m.m.kx.label)
        f = lefPad(l, 10) lefPad(m.m.kx.col, 18)
        if length(f) > 29 then
           if length(l || m.m.kx.col) < 29 then
               f = l || left('', 29 - length(l||m.m.kx.col))m.m.kx.col
           else
               f = lefPad(strip(l m.m.kx.col), 29)
        g = strip(m.m.kx.fmt)
        o = right(g, 1)
        if pos(o, 'dief') > 0 then
            f = f '@'m.m.kx.col'%12e @'m.m.kx.col'%18c'
        else if o = 'C' then
            f = f left(g, length(g)-1)'c'
        else
            f = f g
        m.m.kx.colFmt = f
        end
    m.m.generated = m.m.generated'c'
    return
endProcedure fTabColGen

lefPad: procedure expose m
parse arg s, len
    if length(s) >= len then
        return s
    return left(s, len)
endProcedure lefPad

rigPad: procedure expose m
parse arg s, len
    if length(s) >= len then
        return s
    return right(s, len)
endProcedure rigPad

fTab: procedure expose m.
parse arg m
    call fTabBegin m
    do forever
        i = inO()
        if i == '' then
           leave
        call out f(m.m.fmt, i)
        end
    return fTabEnd(m)
endProcedure fTab

fTabCol: procedure expose m.
parse arg m, i
    if pos('c', m.m.generated) < 1 then
        call fTabColGen m
    do cx=1 to m.m.0
        call out f(m.m.cx.colFmt, i)
        end
    return 0
endProcedure fTabCol

fTabBegin: procedure expose m.
parse arg m
    if pos('t', m.m.generated) < 1 then
        call fTabGenerate m
    return fTabTitles(m, m.m.titBef)

fTabEnd: procedure expose m.
parse arg m
    return fTabTitles(m, m.m.titAft)

fTabTitles: procedure expose m.
parse arg m, list
    list = repAll(list, 'c', m.m.cycles)
    do tx=1 to words(list)
        t1 = word(list, tx)
        call out m.m.tit.t1
        end
    return m
endProcedure fTabTitles
/* copy fTab end   ****************************************************/
/* copy f begin *******************************************************/
f: procedure expose m.
parse arg ggFmt, ggA1, ggA2
    if symbol('M.f.fmt.ggFmt') == 'VAR' then
        interpret M.f.fmt.ggFmt
    else
        interpret fGen(ggFmt)
endProcedure f

fAll: procedure expose m.
parse arg fmt
    do forever
        o = inO()
        if o == '' then
            return
        call out f(fmt, o)
        end
endProcedure f

/*--- format character2hex (if not sql null) -------------------------*/
fH: procedure expose m.
parse arg v, l
    if v \== m.sqlNull then
        v = c2x(v)
    if l >= 0 then
        return right(v, l)
    else
        return left(v, -l)
endProcedure fH

/*--- format integer or fixPoint Decimal -----------------------------*/
fI: procedure expose m.
parse arg v, l, d
    if datatype(v, 'n') then do
        if d == '' then
            v = format(v, ,0,0)
        else
            v = format(v, ,d,0)
        if abbrev(l, '+') then
            if \ abbrev(v, '-') then
                v = '+'v
        if length(v) > abs(l) then
            return right('', abs(l), '*')
        end
    if l >= 0 then
        return right(v, l)
    else
        return left(v, -l)
endProcedure fI

/*--- format floating point in E notitaion ---------------------------*/
fE: procedure expose m.
parse arg v, l, d, eChar
    if eChar == '' then
        eChar = 'e'
    if \ datatype(v, 'n') then
        return left(v, l)
    else if l = 7 then
        return fEStrip(format(v, 2, 2, 2, 0), 0, 2, 0, 2, eChar)
    else if l = 8 then
        return fEStrip(format(v, 2, 2, 2, 0), 1, 2, 0, 2, eChar)
    else if l < 7 then
        call err 'bad width fE('v',' l',' d')'
    else if d == '' then
        return fEStrip(format(v, 2, l-6, 2, 0), 1, l-6, 0, 2, eChar)
    else if l - d - 5 < 1 then
        call err 'bad prec fE('v',' l',' d')'
    else
        return fEStrip(format(v, 2, d, l-d-5, 0), 1, d, 1, l-d-5, eChar)
endProcedure fE

fEStrip: procedure expose m.
parse arg v, mSi, de, eSi, ePr, eChar
    parse var v ma 'E' ex
    if ex == '' then do
        ma = strip(ma, 't')
        ex = '+'left('', ePr, 0)
        end
    if eSi == 0 then do
        if abbrev(ex, '+') then
            ex = substr(ex, 2)
        else if abbrev(ex, '-0') then
            ex = '-'substr(ex, 3)
        else do
            exO = ex
            ex = left('-9', ePr, '9')
       /*   say 'format('ma '* (1E'exO') / (1E'ex'), 2,' de', 0)' */
            ma = format(ma * ('1E'exO) / ('1E'ex), 2, de, 0)
            end
        end
    if mSi == 0 then
        if abbrev(ma, ' ') then
            ma = substr(ma, 2)
        else
            ma = format(ma, 2, de-1)
    r = ma || eChar || ex
    if length(r) - length(eChar) <> 2 + mSi + de + eSi + ePr then
        call err 'bad fEStrip('v',' mSi',' de',' eSi',' ePr',' eChar ,
             || ') ==>' r 'bad len' length(r)
    return r
endProcedure fEStrip
/*--------------------------------------------------------------------
fGen: Format generator    should be compatible with fPrint|
 <<<< + extension of fPrint, - in fPrint but not implemented

 + \s   a single space
 + \n   a newLine
 + \%  \@ \\ the escaped char
   ('@' argN? '.'? field)?'%' flags? width? ('.' precision)? specifier
 specifier: is the most significant one and defines the type

 - c Character a
 - C Cut %-nC = left(v,n), %nC = right(v,n) %n.mC = substr(m, n)
 - d or i Signed decimal integer
 - e Scientific notation (mantissa/exponent) using e character 3.9265e+2
 - E Scientific notation (mantissa/exponent) using E character 3.9265E+2
 - f Decimal floating point
 - g Use the shorter of %e or %f
 - G Use the shorter of %E or %f
 - h Characters in hex
 - o Unsigned octal 610
 - S Strip(..., both)
 - u Unsigned decimal integer
 - x Unsigned hexadecimal integer
 - X Unsigned hexadecimal integer (capital letters)
 - p Pointer address
 - n Nothing printed. The argument must be a pointer to a signed int, wh
 + % A % followed by another % character will write % to stdout. %
 + Q for iterator first nxt end
 Flags:
 - - Left-justify within the given field width; Right justification is
 - + Forces to precede the result with a plus or minus sign (+ or -)
 - (space) If no sign is going to be written, a blank space is inserte
 - # Used with o, x or X specifiers the value is preceeded with 0, 0x
         force decimalpoint ...
 - 0 Left-pads the number with zeroes (0) instead of spaces, where pad
 + = reuse previous input argument

 length not implemented
----------------------------------------------------------------------*/
fGen: procedure expose m.
parse arg src, key
    if key == '' then do
        qSuf = right(src, 3)
        if length(qSuf) == 3 & abbrev(qSuf, '%Q') then
            s2 = left(src, length(src) - 3)
        else
            s2 = src
        call fGen s2, s2
        if symbol('m.f.fmt.src') == 'VAR' then
            return m.f.fmt.src
        call err fGen 'format' src 'still undefined'
        end
    cx = 1
    ky = key
    do forever
        cy = pos('%q', src, cx)
        if cy < 1 then do
            m.f.fmt.ky = fGenCode(substr(src, cx), 'F.INFO.'ky)
            leave
            end
        m.f.fmt.ky = fGenCode(substr(src, cx, cy-cx), 'F.INFO.'ky)
        if substr(src, cy, 3) == '%q^' then do
            if substr(src, cy, 5) == '%q^%q' then
                cy = cy+3
            else if length(src) = cy + 2 then
                leave  /* do not overrite existing fmt | */
            end
        if cy > length(src)-2 then
            call err 'bad final %q in' src
        if substr(src, cy, 3) == '%q^' then
            ky = key
        else
            ky = key'%Q'substr(src, cy+2, 1)
        m.f.tit.ky.0 = 0
        cx = cy+3
        end
    if symbol('m.f.fmt.key') == 'VAR' then
        return m.f.fmt.key
    call sbErr fGen 'format' src 'still undefined'
endProcedure fGen

fGenCode: procedure expose m.
parse arg aS, jj
    jx = 0
    call sbSrc fGen, aS
    ax = 0
    cd = ''
    do forever
        txt = fText()
        if txt \== '' then
            cd = cd '||' quote(txt, "'")
        if sbEnd(fGen) then do
            m.jj.0 = jx
            if cd \== '' then
                return "return" substr(cd, 4)
            else
                return "return ''"
            end
        an = ''
        af = '-'
        if \ sbLit(fGen, '@') then do
            ax = ax + 1
            end
        else do
            if sbWhile(fGen, '0123456789') then
                ax = m.fGen.tok
            else if ax < 1 then
                ax = 1
            if substr(m.fGen.src, m.fGen.pos, 1) \== '%' then do
                call sbLit fGen, '.'
                af = fText()
                end
            end
        if \ sbLit(fGen, '%') then
            call sbErr  fGen, 'missing %'
        call sbWhile fGen, '-+'
        flags = m.fGen.tok
        call sbWhile fGen, '0123456789'
        len   = m.fGen.tok
        siL = len
        if len \== '' & flags \== '' then
            siL = left(flags, 1)len
        prec  = ''
        if sbLit(fGen, '.') then do
            if len == '' then
                call sbErr fGen, 'empty len'
            call sbWhile fGen, '0123456789'
            prec = m.fGen.tok
            end
        call sbChar fGen, 1
        sp = m.fGen.tok
        if ax < 3 then
            aa = 'ggA'ax
        else
            aa = 'arg(' || (ax+1) || ')'
        if af \== '-' then do
            if af \== '' then
                af = '.'af
            if abbrev(aa, 'ggA') & pos('.GG', af) < 1 ,
                 & translate(af) == af then
                aa = 'm.'aa || af
            else
                aa = 'mGet('aa '||' quote(af, "'")')'
            end
        if sp = 'c' then do
            pd = word('rigPad lefPad', (pos('-', flags) > 0)+1)
            if prec \== '' then
                cd = cd '||' pd'(substr('aa',' prec'),' len')'
            else
                cd = cd '||' pd'('aa',' len')'
            end
        else if sp = 'C' then do
            if prec \== '' then
                cd = cd '|| substr('aa',' prec',' len')'
            else if pos('-', flags) > 0 then
                cd = cd '|| left('aa',' len')'
            else
                cd = cd '|| right('aa',' len')'
            end
        else if sp == 'H' then
            cd = cd "|| fH("aa", '"siL"')"
        else if sp == 'h' then
            cd = cd "|| translate(fH("aa", '"siL"'), 'abcdef','ABCDEF')"
        else if sp == 'i' then do
            cd = cd "|| fI("aa", '"siL"'"
            if prec == '' then
                cd = cd')'
            else
                cd = cd',' prec')'
            end
        else if sp == 'E' | sp == 'e' then
            cd = cd "|| fE("aa"," len"," prec", '"sp"')"
        else if sp == 's' then
            cd = cd '||' aa
        else if sp = 'S' then
            cd = cd '|| strip('aa')'
        else
            call sbErr fGen, 'bad specifier' sp
        jx = jx + 1
        m.jj.jx.arg = ax
        m.jj.jx.name = af
        end
endProcedure fGenCode

fText: procedure expose m. ft.
    res = ''
    do forever
        if sbUntil(fGen, '\@%') then
            res = res || m.fGen.tok
        if \ sbLit(fGen, '\') then
            return res
        call sbChar fGen, 1
        if pos(m.fGen.tok, 's\@%') < 1 then
            res = res'\' || m.fGen.tok
        else
            res = res || translate(m.fgen.tok, ' ', 's')
        end
endProcedure fText

/* copy f end   *******************************************************/
/* copy sb begin *** scan basic ***************************************/
/*--- start scanning with a new src ----------------------------------*/
sbSrc: procedure expose m.
parse arg m, m.m.src
    m.m.pos = 1
    m.m.tok = ''
    return m

sbErr: procedure expose m.
parse arg m, txt
    call err txt 'lastToken' m.m.tok 'sbPos' m.m.pos':' ,
         strip(substr(m.m.src, m.m.pos, 20), 't') 'in' m.m.src
endProcedure sbErr

/*--- return true if at end of src -----------------------------------*/
sbEnd: procedure expose m.
parse arg m
    return m.m.pos > length(m.m.src)

/*--- scan n chararcters, atmost to end of src -----------------------*/
sbChar: procedure expose m.
parse arg m, len
    prP = m.m.pos
    m.m.pos = min(m.m.pos + len, length(m.m.src) + 1)
    m.m.tok = substr(m.m.src, prP, m.m.pos -prP)
    return m.m.pos > prP

/*--- scan first matching literal ------------------------------------*/
sbLit : procedure expose m.
parse arg m, lits
    do lx=1 until substr(m.m.src, m.m.pos, length(l1)) == l1
        l1 = word(lits, lx)
        if l1 == '' then do
            m.m.tok = ''
            return 0
            end
        end
    m.m.tok = l1
    m.m.pos = m.m.pos + length(l1)
    return 1

/*--- scan while in charset ------------------------------------------*/
sbWhile: procedure expose m.
parse arg m, chSet
    vx = verify(m.m.src, chSet, 'n', m.m.pos)
    if vx = 0 then
        vx = length(m.m.src) + 1
    m.m.tok = substr(m.m.src, m.m.pos, vx-m.m.pos)
    m.m.pos = vx
    return m.m.tok \== ''

/*--- scan until in charset ------------------------------------------*/
sbUntil: procedure expose m.
parse arg m, chSet
    vx = verify(m.m.src, chSet, 'm', m.m.pos)
    if vx = 0 then
        vx = length(m.m.src) + 1
    m.m.tok = substr(m.m.src, m.m.pos, vx-m.m.pos)
    m.m.pos = vx
    return m.m.tok \== ''

/*--- scan until (and over) string End -------------------------------*/
sbStrEnd: procedure expose m.
parse arg m, sep
    px = m.m.pos
    m.m.tok = ''
    do forever
        py = pos(sep, m.m.src, px)
        if py = 0 then do
            m.m.pos = length(m.m.src) + 1
            m.m.tok = m.m.tok || substr(m.m.src, px)
            return 0
            end
        m.m.tok = m.m.tok || substr(m.m.src, px, py-px)
        px = py + length(sep)
        if length(m.m.src) < px + length(sep) - 1 ,
            | sep \== substr(m.m.src, px, length(sep)) then do
            m.m.pos = px
            return 1
            end
        m.m.tok = m.m.tok || sep
        px = px + length(sep)
        end
endProcedure sbStrEnd
/* copy sb end   *** scan basic ***************************************/
/* copy err begin *** errorhandling, messages, help    ****************/
errIni: procedure expose m.
    if m.err.ini == 1 then
        return
    m.err.ini     = 1
    m.err.handler = ''
    m.err.cleanup = ';'
    m.err.opt     = ''
    parse source m.err.os .
    m.err.ispf    = 0
    m.err.screen  = ''
    if m.err.os \== 'LINUX' then
        if sysVar('sysISPF') = 'ACTIVE' then do
            m.err.ispf = 1
            address ispExec 'vget zScreen shared'
            m.err.screen = zScreen
            end
    return
endProcedure errIni

/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
    call errIni
    parse arg m.err.opt, m.err.handler
    if pos('I', translate(m.err.opt)) > 0 & m.err.ispf then
        call adrIsp 'control errors return'
    return
endSubroutine errReset

/*--- error routine: abend with message ------------------------------*/
err:
    parse arg ggTxt, ggOpt
    call errIni
    drop err handler cleanup opt call return
    if ggOpt == '' & m.err.handler \== '' then
        interpret m.err.handler
    call errSay 'f}'ggTxt
    call errCleanup
    if ggOpt == '' then
        ggOpt = m.err.opt
    upper ggOpt
    if pos('T', ggOpt) > 0  then do
        trace ?r
        say 'trace ?r in err'
        end
    if pos('H', ggOpt) > 0 & m.err.eCat == 'f' then do
        call errSay ' }errorhandler exiting with divide by zero' ,
                                   'to show stackHistory'
        x = 1 / 0
        end
    call errSay ' }errorhandler exiting with exit(12)'
    exit errSetRc(12)
endSubroutine err

/*--- set rc for ispf: -------------------------------------------------
    if a cmd is run by ispStart, its RC is ignored,
         but ISPF passes the value of the shared variable zIspfRc
         back as return code
----------------------------------------------------------------------*/
errSetRc: procedure expose m.
parse arg zIspfRc
    if m.err.ispf then
        address ispExec vput 'zIspfRc' shared
    return zIspfRc
endProcedure errSetRc

/*--- error routine: user message cleanup exit -----------------------*/
errAddCleanup: procedure expose m.
parse arg code
    call errIni
        /* concatenate backwards, then it is executed also backwards */
    m.err.cleanup = ';'code || m.err.cleanup
    return
endProcedure errAddCleanup

errRmCleanup: procedure expose m.
parse arg code
    call errIni
    cx = pos(';'code';', m.err.cleanup)
    if cx > 0 then
        m.err.cleanup = left(m.err.cleanup, cx) ,
                     || substr(m.err.cleanup, cx + length(code)+2)
    return
endProcedure errRmCleanup

errCleanup: procedure expose m.
    call errIni
    errCleanup = m.err.cleanup
    if errCleanup = ';' then
        return
    m.err.cleanup = ';'
    say 'err cleanup begin' errCleanup
    interpret errCleanup
    say 'err cleanup end' errCleanup
    return
endProcedure errCleanup

/*--- say an errorMessage msg with pref and linesplits --------------*/
errSay: procedure expose m.
parse arg msg
    return saySt(errMsg(msg))

/*--- prefix an errormessage with pref,
          split it into lines at \n to stem m.err -------------------*/
errMsg: procedure expose m.
parse arg msg
    m.err.eCat = 'f'
    do while substr(msg, 2, 1) == '}'
        parse var msg m.err.eCat '}' msg
        end
    if m.err.eCat <> '' then do
       parse source . . ggS3 .                       /* current rexx */
       pTxt = ',error,fatal error,input error,syntax error,warning,'
       px = pos(','m.err.eCat, pTxt)
       if px < 1 then do
           m.err.eCat = 'f'
           px = pos(','m.err.eCat, pTxt)
           end
       msg = substr(pTxt, px+1, pos(',', pTxt, px+2)-px-1) ,
             'in' ggS3':' msg
       end
    return splitNl(err, msg)           /* split lines at \n */
endProcedure errMsg

splitNL: procedure expose m.
parse arg st, msg
    bx = 1
    do lx=1 to 20
        ex = pos('\n', msg, bx)
        if ex < bx then
            leave
        m.st.lx = substr(msg, bx, ex-bx)
        bx = ex+2
        end
    m.st.lx = substr(msg, bx)
    m.st.0 = lx
    return st
endProcedure splitNL

/*--- say (part of) the lines of a stem ----------------------------*/
saySt: procedure expose m.
parse arg st, fx, tx
    do lx=word(fx 1, 1) to word(tx m.st.0, 1)
        say m.st.lx
        end
    return st
endProcedure saySt

/*--- out (part of) the lines of a stem ----------------------------*/
outSt: procedure expose m.
parse arg st, fx, tx
    do lx=word(fx 1, 1) to word(tx m.st.0, 1)
        call out m.st.lx
        end
    return st
endProcedure outSt

/*--- say a trace message if m.trace is set --------------------------*/
debug: procedure expose m.
parse arg msg
    if m.debug == 1 then
        say 'debug:' msg
    return
endProcedure debug

/*--- output a trace if m.trace is set -------------------------------*/
trc: procedure expose m.
parse arg msg
    if m.trace == 1 then
        call out 'trc:' msg
    return
endProcedure trc

/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
    interpret 'assertRes =' arg(1)
    if assertRes \==1 then
        call err 'assert failed' arg(1) '==>' assertRes':' arg(2)
    return
endProcedure assert

/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg
    call errSay 'i}'msg
    call help 0
    call err 'i}'msg
endProcedure errHelp

/*--- display the first comment block of the source as help ----------*/
help: procedure expose m.
parse arg doClear
    if doClear \== 0 then
        address tso 'clear'
    parse source . . s3 .
    say right(' help for rexx' s3, 72, '*')
    do lx=1 while pos('/*', sourceLine(lx)) < 1
        if lx > 10 then
            return err('initial commentblock not found for help')
        end
    doInc = 1
    ho = m.err.helpOpt
    do lx=lx+1 to sourceline() while pos('*/', sourceline(lx)) = 0
        li = strip(sourceLine(lx), 't')
        cx = lastPos('{', li)
        if cx > 0 then do
            if length(ho) = 1 then
                doInc = cx = length(li) | pos(ho, li, cx+1) > 0
            li = left(li, cx-1)
            end
        if doInc then
            say li
        end
    say right(' end help for rexx' s3, 72, '*')
    return 4
endProcedure help

/* copy err end   *****************************************************/
/* copy ut begin  *****************************************************/
utIni: procedure expose m.
    if m.ut.ini == 1 then
        return
    m.ut.ini = 1
    m.ut.digits = '0123456789'
    m.ut.alfLC  = 'abcdefghijklmnopqrstuvwxyz'
    m.ut.alfUC  = translate(m.ut.alfLc)
    m.ut.Alfa   = m.ut.alfLc || m.ut.alfUC
    m.ut.alfNum = m.ut.alfa || m.ut.digits
    m.ut.alfDot = m.ut.alfNum || '.'
    return
endProcedure utIni
/*--- if function  warning all3 arguments get evaluated|
                   e.g if(x=0, 'infinity', 1/0) will fail| -----------*/
if: procedure expose m.
parse arg co, ifTrue, ifFalse
    if co then
        return ifTrue
    else
        return ifFalse
endProcedure if
/*--- embedded ASSignement:
      assign the second argument to the variable with name in first arg
      and return the value assigned ----------------------------------*/
ass:
    call value arg(1), arg(2)
    return arg(2)
/*--- embedded ASSignement return NotNull:
      assign the second argument to the variable with name in first arg
      and return 1 if value not null, 0 if null ----------------------*/
assNN:
    call value arg(1), arg(2)
    return arg(2) \== ''

/*--- return current time and cpu usage ------------------------------*/
utTime: procedure expose m.
    return time() 'ela='time('E') 'cpu='sysvar('syscpu'),
            'su='sysvar('syssrv')

tstUtTime: procedure expose m.
    say 'begin' utTime()  sysvar('sysnode')
    do 3000000
       end
    say 'end  ' utTime()
return

/*--- sleep several seconds ------------------------------------------*/
sleep: procedure expose m.
parse arg secs, sayIt
    if sayit <> 0 then
        say 'sleeping' secs 'secs' time()
    CALL SYSCALLS 'ON'
    ADDRESS SYSCALL "sleep" secs
    CALL SYSCALLS 'OFF'
    if sayit <> 0 then
        say 'slept' secs 'secs' time()
    return
endProcedure sleep

/*--- left without truncation ----------------------------------------*/
lefPad: procedure expose m
parse arg s, len
    if length(s) >= len then
        return s
    return left(s, len)
endProcedure lefPad

/*--- right without truncation ---------------------------------------*/
rigPad: procedure expose m
parse arg s, len
    if length(s) >= len then
        return s
    return right(s, len)
endProcedure rigPad

/*--- quote string txt using quoteChar qu ("" ==> ") -----------------*/
quote: procedure expose m.
parse arg txt, qu
    if qu = '' then
        qu = '"'
    res = qu
    ix = 1
    do forever
        qx = pos(qu, txt, ix)
        if qx = 0 then
            return res || substr(txt, ix) || qu
        res = res || substr(txt, ix, qx-ix) || qu || qu
        ix = qx + length(qu)
        end
endProcedure quote

/*--- translate to lowercase -----------------------------------------*/
ut2lc: procedure expose m.
parse arg s
    return translate(s, m.ut.alfLc, m.ut.alfUc)

/*--- verify an id ---------------------------------------------------*/
verifId: procedure expose m.
    parse arg src, extra
    if pos(left(src, 1), m.ut.digits) > 0 then
        return 1
    else
        return verify(src, m.mId || extra, 'n')

/*--- return the count of occurrences of needle in heyStack ----------*/
posCount: procedure expose m.
parse arg needle, hayStack, start, fin
    if start = '' then
        start = 1
    if fin = '' then
        fin = length(hayStack) + 1 - length(needle)
    do cnt = 0 by 1
        start = pos(needle, haystack, start)
        if start < 1 | start > fin then
             return cnt
        start = start + length(needle)
        end
endProcedure posCount

repAll: procedure expose m.
parse arg src
    do ax = 2 by 2 to arg()
        src = repAl2(src, src, arg(ax), arg(ax+1))
        end
    return src
endProcedure repAll

repAl2: procedure expose m.
parse arg src, sPos, old, new
    res = ''
    cx = 1
    do forever
        nx = pos(old, sPos, cx)
        if nx < 1 then
            return res || substr(src, cx)
        res = res || substr(src, cx, nx-cx) || new
        cx = nx + length(old)
        end
endProcedure repAl2

repAllWords: procedure expose m.
parse arg src, w, new
    res = ''
    wx = 0
    cx = 1
    do forever
        wx = wordPos(w, src, wx+1)
        if wx < 1 then
            return res || substr(src, cx)
        nx = wordindex(src, wx)
        res = res || substr(src, cx, nx-cx) || new
        cx = nx + length(w)
        end
endProcedure repAllWords
/* copy ut end ********************************************************/
}¢--- A540769.WK.REXX.O13(CA1) cre=2012-11-14 mod=2012-11-14-13.28.45 A540769 ---
/* rexx ----------------------------------------------------------------
            call a cs-ca UsaLine Cmd
----------------------------------------------------------------------*/
parse arg a1, a2, a3
parse source . . self .
return caX(self, a1, a2, a3)
}¢--- A540769.WK.REXX.O13(CCSID) cre=2006-04-19 mod=2006-04-19-14.09.04 F540769 ---
/* rexx */
address ispexec 'vget  ( ZTERMCID  ZTERMCP ZTERMCP5 ZTERMCS5 ZTERMCS )'
say 'ZTERMCID' ZTERMCID 'ZTERMCP' ZTERMCP 'ZTERMCP5' ZTERMCP5 ,
                        'ZTERMCS5' ZTERMCS5 'ZTERMCS' ZTERMCS
}¢--- A540769.WK.REXX.O13(CD) cre= mod= ----------------------------------------
/* copy cd begin **************************************************
   send the file frDsn from the current not
            to the node toNode as toDsn if not empty
            using connect direct
            default attributes may be overridden (inDISP=(OLD))
            or additional connect direct attributes may be specified
            in argument 4 with syntax a=b c = d etc.
***********************************************************************/
cd: procedure expose m.
    parse upper arg frDsn, toNode, args
    if toNode == 'RZ1' | toNode == 'RZ2' then
        toNode = 'SKA.'toNode
    toDsn = 'outDsn...fehlt'
    as = wrArgs("CD.AS", 0             ,
        , "SIGNON"                     ,
        , "   SUBMIT PROC=MVS03DSN     - " ,
        , "NEWNAME=PVT760MP            - " ,
        , "MAXDELAY=UNLIMITED          - " ,
        , "&DEST="toNode              "- " ,
        , "&INDSN="frDsn              "- " ,
        , "&INDISP=(SHR,KEEP,KEEP)     - " ,
        , "&OUTDSN="toDsn             "- " ,
        , "&OUTDISP=(NEW,CATLG,DELETE) - " )
    call scanBegin s, args
    call trc 'scanBegin' args
    ax = 0
    do while scanKeyValue(s, 1, 1)
        k = m.s.key
        if k = 'DSN' | k == 'OUTDSN' then do
            k = 'OUTDSN'
            toDsn = m.s.val
            end
        do y=2 to m.as.0
            px = pos(k'=', m.as.y)
            if px > 0 then
                leave
            end
        if px > 0 then do
            m.as.y= left(m.as.y, px-1)k'='m.s.val '-'
            end
        else do
            ax = ax + 1
            call wrArgs as, , "&OPARM" || ax || "="k"="m.s.val "-"
            end
        end
    call scanVerify s, ' '
    if ^scanAtEol(s) then
        call scanErr s, 'key = value expected'
    if pos('..', toDsn) > 0 then
        call err 'no dsn specified in' args

    say 'sending' frDsn 'to' toNode toDsn 'with connect direct'
    hx = m.as.0
    m.as.hx = left(m.as.hx, length(m.as.hx) - 1)
    call wrArgs as, , 'SIGNOFF'
    if m.trace == 1 then do
        call trc 'connectDirect sysin'
        call out as
        end

    if m.foreground then
        if listdsi('dmpublib FILE') = 0 then
            call err 'dmPublib already allocated, cdadm running?'
    doAlloc = m.foreground

    call adrTso "alloc new delete  dd(sysIN) recfm(f,b) lrecl(80)"
    call writeDDBegin sysin
    call wrDSfromDS 'dd=sysIn', 'stem='as

    if doAlloc then do
        say 'dynamically allocating connectDirect files'
        call adrTso "alloc dd(DMPUBLIB) shr" ,
             "dsn('JOBP.FT1A.PRCS' 'SFT.DIV.X0.CD.PRCS')"
        call adrTso "alloc dd(DMNETMAP) shr dsn('SFT.SKA.P0.CD.NETMAP')"
        call adrTso "alloc dd(DMMSGFIL) shr dsn('SFT.DIV.X0.CD.MSG')"
        call adrTso "alloc dd(DMPRINT) sysout(T)"
        end

    call trc "everything allocated callin dmBatch"
    cdRc = adrTso("CALL *(DMBATCH) 'YYSLYNN'", '*')
    call trc 'dmBatch rc' cdRc
    call adrTso "free dd(sysin)"
    if doAlloc  then
        call adrTso "free dd(DMPUBLIB DMPRINT DMNETMAP DMMSGFIL)"
    if cdRc ^= 0 then
        call err 'rc' cdRc 'in connectDirect'
    return
endProcedure cd

/* copy cd end   ******************************************************/
}¢--- A540769.WK.REXX.O13(CDOS29) cre= mod= ------------------------------------
/* copy connDir begin **************************************************
   send the file frDsn from the current not
            to the node toNode as toDsn if not empty
            using connect direct
            additional connect direct attributes may be specified
                by arguments 4... (with ,a b, or equifalently , a='b',
***********************************************************************/
connectDirect: procedure
    parse upper arg frDsn, toNode, toDsn
    say 'sending' frDsn 'to' toNode toDsn 'with connect direct'
    call adrTso "alloc shr dd(sysut1) reuse dsn("frDsn")"
    call adrTso "alloc new delete  dd(DDIN) dsn("dsnTemp(connDir)")" ,
                   "recfm(f,b) lrecl(80)"
    call writeDDBegin ddIn
    t.1 = "DEST='"toNode"'"
    t.2 = "DSNCOPY='YES'"
    x=2
    if toDsn ^= '' then do
        x = x + 1
        t.x = "DSN='"dsn2Jcl(toDsn)"'"
        end
    do ax=4 to arg()
        parse upper value arg(ax) with key val
        val = strip(val)
        call trc 'arg' ax':' arg(ax) 'key' key "val '"val"'"
        if key = '' then
            iterate
        x = x+1
        if pos("=", key) > 0 then
            t.x = key val
        else
            t.x = key"='"val"'"
        end
    call writeDD ddIn, t., x
    call writeDDEnd ddIn
    if 1 then do
        call trc 'connectDirect ddIn' x
        do i=1 to x
            call trc i t.i
            end
        end
    call adrTso "call *(OS2900)"
    call adrTsoRc 'free dd(sysut1)'  /* a ghost freed it already */
    call adrTso 'free dd(ddin) delete'
    /* os2900 does not free it dd's, so we do it
                 otherwise the second run will fail... */
    call adrTsoRc 'free dd(ddPrint work01 cmdout dmprint)'
    say 'end connectDirect'
return /* end connectDirect */
/* copy connDir end   *************************************************/
}¢--- A540769.WK.REXX.O13(CDT) cre=2006-05-23 mod=2006-05-23-16.28.51 F540769 ---
/* REXX *************************************************************

    this editmacro replaces all #dt# by the current date time

**********************************************************************/
call adrEdit('macro (args)')
say 'macro args' args
tst = time('N')
tst = 'D'date('j')'.T'left(tst,2)substr(tst, 4, 2)right(tst,2)
say 'timestamp' tst
call adrEdit "c '#dt#' '"tst"' all"
exit 0

/************** member copy adr **************************************/
/**********************************************************************
    dsn*: manipulate dataSetNames
        dsn2Jcl:     convert from tso to JCL format
        dsnFromJcl:  convert from jcl to TSO format
        dsnGetLLQ:   get the llq from a dsn
        dsnGetMbr:   get the Member name from a dsn
        dsnApp:      cleanup and append dsn parts (preserve apos ...)
        dsnSetMbr:   set a Member name or remove it if mbr = ''
***********************************************************************/
 say dsnApp("a.b c(d e) f' ))) h")
 say dsnApp("'a.b c(d e) f' ))) h")
 call help
 call errHelp(test errHelp)
dsn2jcl: procedure
parse arg dsn .
    if left(dsn,1) = "'" then
        return strip(dsn, 'b', "'")
    else if sysvar('SYSPREF') = '' then
        return dsn
    else
        return sysvar('SYSPREF')'.'dsn
endProcedure dsn2Jcl

dsnFromJcl: procedure
parse arg dsn .
    return "'"dsn"'"
endProcedure dsnFromJcl

dsnApp: procedure
parse arg parts
    dsn = ''
    do wx=1 by 1
        w = word(parts, wx)
        if w = '' then
            leave
        do while w <> ''
            if pos(right(w, 1), "') ") <= 0 then
                leave
            w = left(w, length(w)-1)
            end
        dsn = dsn || w
        end
    if pos('(', dsn) > 0 then
        dsn = dsn')'
    if left(dsn,1) = "'" then
        return dsn"'"
    else
        return dsn
endProcedure dsnApp

dsnSetMbr: procedure
parse arg dsn, mbr
     mbr = strip(mbr)
     bx = pos('(', dsn)
     if mbr = '' then do
         if bx < 1 then
             return dsn
         else if left(dsn, 1) = "'" then
             return left(dsn,bx-1)"'"
         else
             return left(dsn,bx-1)
         end
     else do
         if bx < 1 then
             return dsnApp(dsn '('mbr)
         else
             return dsnApp(left(dsn, bx)  mbr)
         end
endProcedure dsnSetMbr

dsnGetMbr: procedure
parse arg dsn
     lx = pos('(', dsn)
     rx = pos(')', dsn, lx+1)
     if lx < 1 then
         return ''
     else if lx < rx then
         return substr(dsn, lx+1, rx-lx-1)
     else
         return strip(substr(dsn,lx+1), 't', "'")
endProcedure dsnGetMbr

dsnGetLLQ: procedure
parse arg dsn
     rx = pos('(', dsn) - 1
     if rx < 0 then
         rx = length(dsn)
     lx = lastPos('.', dsn, rx)
     return strip(substr(dsn, lx+1, rx-lx), 'b', "'")
endProcedure dsnGetLLQ

/**********************************************************************
    lmd: catalog read
    call sequence: lmdBegin, lmdNext*, lmdEnd
        mit lmd service (mit save in file und read,
                         weil list zu langsam und listcat abstürzt)
        1. arg (grp)     als group dataset für lmd save
                         und dd name für file read
***********************************************************************/
lmdTest: procedure
parse arg lev
    say showTime() 'lmdTest' lev
    call lmdBegin 'test', lev
    say showTime() 'lmdTest after begin' lev
    z = 0
    do while lmdNext('test', st.)
        do y=1 to st.0
            z=z+1
            say z word(st.y, 1)
            end
        end
    call lmdEnd 'test'
    say showTime() 'lmdTest' z 'files in' lev
return /* readTest */

lmdBegin: procedure
    parse arg grp, lev
    call adrIsp 'lmdinit listid(lmdId) level('lev')'
    call adrIsp 'lmdlist listid(&lmdId) option(save) group('grp')'
    call adrIsp 'lmdfree listid(&lmdId)'
    say showTime() 'lmdlist save' grp lev
    call readBegin grp, grp'.datasets'
return /* end lmdBegin */

lmdNext:
    parse arg lvGrp, lvSt
return readNext(lvGrp, lvSt)

lmdEnd: procedure
    parse arg grp
    call readEnd grp
return /* end lmdEnd */

/**********************************************************************
    member list of a pds:
        call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmmTest: procedure
parse arg dsn
    if dsn = '' then
        dsn = 'wk.pli(*)'
    say 'lmmTest for dsn' dsn
    id = lmmBegin(dsn)
    do ix=1 by 1
        m = lmmNext(id)
        if m = '' then
            leave
        say ix m
        end
    call lmmEnd id
    say  'lmmTest end' (ix-1) 'members in' dsn
    return
endProcedure lmmTest

lmmBegin: procedure
parse arg dsn
    mbr = dsnGetMbr(dsn)
    pds = dsnSetMbr(dsn, )
    call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
    call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
    res = lmmId
    if mbr <> '' then
        res = res 'pattern('mbr')'
    say 'lmmBegin returning' res
    return res
end lmmBegin

lmmEnd: procedure
parse arg lmmId opt
    if adrIspRc("LMMLIST DATAID("lmmId") option(free)") <> 0 then
        if rc <> 8 then
            call err "lmmEnd" id lmmId "rc" rc "for lmmList free"
    call adrIsp "LMCLOSE DATAID("lmmId")"
    call adrIsp "LMFREE DATAID("lmmId")"
    return
endProcedure lmmEnd

lmmNext: procedure
parse arg lmmId opt
    gmRc = adrIspRc("LMMLIST DATAID("lmmid")" ,
               "OPTION(LIST) MEMBER(Mbr)" opt)
    if gmRc = 0 then
        return mbr
    else if gmRc = 8 | gmRC = 4 then
        return ''
    else
        call err 'lmmList rc' gmRc
endProcedure lmmNext

/**********************************************************************
    read: read a file
    call sequence: readBegin, readNext*, readEnd
        1. arg (dd)     dd name, wird alloziert in begin und free in end
        readNext liest 100 records in übergebenen stem,
            returns false at eof
***********************************************************************/
readTest: procedure
parse arg dsn
    say showTime() 'readTest' dsn
    call readBegin 'ddEins', dsn
    z = 0
    do while readNext('ddEins', st.)
        do y=1 to st.0
            z=z+1
            say z strip(st.y, 't')
            end
        end
    call readEnd 'ddEins'
    say showTime() 'readTest' z 'records in' dsn
return /* readTest */

readBegin: procedure
    parse arg dd, dsn
    call adrTso 'alloc dd('dd') shr reuse dsn('dsn')'
return /* end readBegin */

readNext:
    parse arg lv_DD, lv_St
    if adrTsoRc('execio 100 diskr' lv_DD '(stem' lv_St')') = 0 then
        return 1
    else if rc = 2 then
        return (value(lv_St'0') > 0)
    else
        call err 'execio 100 diskr' lv_DD 'rc' rc
return /* end readNext */

readEnd: procedure
    parse arg dd
    call adrTso 'execio 0 diskr' dd '(finis)'
    call adrTso 'free  dd('dd')'
return /* end readEnd */


/**********************************************************************
    writeApp: append lines to a file
        ggDsn:  dsn to append lines
        ggStem  stem containing line (with dot|)
        ggNr    number of lines, if empty <stem>.0
***********************************************************************/
writeApp:
parse arg ggDsn, ggStem, ggNr
    if ggNr = '' then
        ggNr = value(ggStem'0')
    if pos('(', ggDsn) < 1 then do  /* sequential ds, use disp=mod */
        call adrTso 'alloc mod reuse dd(ddApp) dsn('ggDsn')'
        end
    else do                       /* pds: read and rewrite */
        call adrTso 'alloc shr reuse dd(ddApp) dsn('ggDsn')'
        if sysdsn(ggDsn) = 'OK' then do
            call adrTso 'execio * diskr ddApp (stem ggL. finis)'
            call adrTso 'execio' ggL.0 'diskw ddApp (stem ggL.)'
            end
        end
    call adrTso 'execio' ggNr 'diskw ddApp (stem' ggStem 'finis)'
    call adrTso 'free dd(ddApp)'
return
endProcedure writeApp

log: procedure
parse arg logLine
    l.1 = date('s') time() logLine
    call writeApp 'wk.out(ll)', l., 1
    return
endProcedure log
/**********************************************************************
    variable Expansion: replace variable by their value
***********************************************************************/

varExpandTest: procedure
    m.v.eins ='valEins'
    m.v.zwei ='valZwei'
    m.l.1='zeile eins geht unverändert'
    m.l.2='$EINS auf zeile ${ZWEI} und \$EINS'
    m.l.3='...$EINS?auf zeile ${ZWEI}und $EINS'
    m.l.4='...$EINS,uf zeile ${ZWEI}und $EINS$$'
    m.l.5='${EINS}$ZWEI$EINS${ZWEI}'
    m.l.0=5
    call varExpand l, r, v
    do y=1 to m.r.0
        say 'old' y m.l.y
        say 'new' y m.r.y
        end
    return
endProcedure varExpandTest

varExpand: procedure expose m.
parse arg old, new, var
varChars = ,
    '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
do lx=1 to m.old.0
    cx = 1
    res = ''
    do forever
        dx = pos('$', m.old.lx, cx)
        if dx < cx then do
            m.new.lx = res || strip(substr(m.old.lx, cx), 't')
            leave
            end

        res = res || substr(m.old.lx, cx, dx - cx)
        if dx >= length(m.old.lx) then
            call err '$ at end line m.'old'.'lx'='m.old.lx
        if substr(m.old.lx, dx+1, 1) = '$' then do
            res = res || '$'
            cx = dx + 2
            iterate
            end
        if substr(m.old.lx, dx+1, 1) = '{' then do
            cx = pos('}', m.old.lx, dx+1)
            if cx <= dx then
                call err 'ending } missing line m.'old'.'lx'='m.old.lx
            na = substr(m.old.lx, dx+2, cx-dx-2)
            cx = cx + 1
            end
        else do
            cx = verify(m.old.lx, varChars, 'N', dx+1);
            if cx <= dx then
                cx = length(m.old.lx) + 1
            na = substr(m.old.lx, dx+1, cx-dx-1)
            end
        if symbol('m.v.na') = 'VAR' then
            res = res || m.var.na
        else
             call err 'var' na 'not defined line m.'old'.'lx'='m.old.lx
        end
    m.new.0 = m.old.0
    end
return /* var expand */

/**********************************************************************
    adrSql: execute sql thru the dsnRexx interface
***********************************************************************/

adrSql: /* no procedure, to keep variables sql... */
    parse arg ggStmt, ggNo
    if ggNo <> '1' then
        ggStmt = 'execSql' ggStmt
    address dsnRexx ggStmt
    if rc = 0 then
        nop  /* say "sql ok:" ggStmt */
    else if rc > 0 then
        say "sql warn rc" rc sqlmsg()':' ggStmt
    else
        call err "sql rc" rc sqlmsg()':' ggStmt
return
endSubroutine adrSql

adrSqlConnect: procedure
parse arg sys
    if adrTSORc("SUBCOM DSNREXX") <> 0 then do
       sRC = RXSUBCOM('ADD','DSNREXX','DSNREXX') /* ADD HOST CMD ENV  */
       say 'subcom' sRc
       end
    call adrSql "connect" sys, 1
    return
endProcedure adrSqlConnect

adrSqlDisconnect: procedure
    call adrSql "disconnect ", 1
    return
endProcedure adrSqlDisconnect

sqlMsg: /* no procedure, to keep variables sql... */
    if sqlCode = 0 then
        return 'ok (sqlCode=0)'
    else
        return 'sqlCode='sqlCode,
            'errMc' strip(translate(sqlerrmc, ',', 'FF'x))
endSubroutine sqlMsg

/**********************************************************************
    adrDsn: send a command to db2 with the TSO dsn command
***********************************************************************/

adrDsn: procedure
parse arg sys, cmd, rcOk
    call adrTso 'alloc dd(sysprint) new reuse'
    push 'END'
    push cmd
    rr = adrTsoRc('DSN SYSTEM('sys')')
    say 'rc' rr 'adrTso DSN SYSTEM('sys') cmd' cmd
    if wordPos(rr, rcOk) < 1 then do
        say 'error rc' rr 'in adrTso DSN SYSTEM('sys') cmd' cmd

        call adrTso 'execio * diskr sysprint (finis stem pr.)'
        say 'sysprint' pr.0 'lines'
        do x=1 to pr.0
            say strip(pr.x, 't')
            end
        call adrTso 'free dd(sysprint) '
        call err 'rc' rr 'in adrTso DSN SYSTEM('sys') cmd' cmd
        end
    call adrTso 'free dd(sysprint)'
    return rr
endProcedure adr Dsn

/**********************************************************************
    adr*: address an environment
        adrTso: fails if rc <> 0
        adrTsoRc: returns rc without failing
***********************************************************************/
adrTsoRc:
    parse arg tsoCmd
    address tso tsoCmd
return rc  /* end adrTsoRc */

adrTso:
    parse arg tsoCmd
    address tso tsoCmd
    if rc <> 0 then
        call err 'adrTso rc' rc 'for' tsoCmd
return /* end adrTso */

adrIspRc:
    parse arg ispCmd
    address ispexec ispCmd
return rc /* end adrIspRc */

adrIsp:
    parse arg ispCmd
    address ispexec ispCmd
    if rc <> 0 then
        call err 'adrIsp rc' rc 'for' ispCmd
return /* end adrIsp */

adrEdit:
    parse arg editCmd, ret
    address isrEdit editCmd
    if rc <> 0 then
        call err 'adr isrEdit rc' rc 'for' editCmd
return /* end adrEdit */

adrEditRc:
    parse arg editCmd
    address isrEdit editCmd
return rc /* end adrEditRc */

err:
    parse arg txt
    parse source s1 s2 s3 .
    say 'fatal error in' s3':' txt
exit 12

errHelp: procedure
parse arg errMsg
    say 'fatal error:' errMsg
    call help
    call err errMsg
endProcedure errHelp

help: procedure
    parse source . . s3 .
    say 'help for rexx' s3
    do lx=1 by 1
        if pos('/*', sourceLine(lx)) > 0 then
            leave
        else if lx > 10 then do
            say 'initial commentblock not found for help'
            return
            end
        end
    do lx=lx+1 by 1
        li = strip(sourceLine(lx), 't', ' ')
        if pos('*/', li) > 0 then
            leave
        say li
        end
    return
endProcedure help

showtime:
parse arg showmsg
return time() sysvar('syscpu') sysvar('syssrv') showmsg

}¢--- A540769.WK.REXX.O13(CDTEST) cre= mod= ------------------------------------
/* rexx */
m.trace = 1
m.foreground = sysvar(sysenv) == 'FORE'

call cd A540769.TEST.out,
                 , 'rz2',
                 , 'A540769.test.rz1sys1',
                 , 'proc = ska03dsn newName = wktest' ,
                   'MGMTCLAS=S005Y000 LRECL=22756'
call cd A540769.TEST.out,
                 , 'rz2',
                 , 'A540769.test.rz1sys2',
                 , 'proc = ska03dsn newName = wktest' ,
                   'MGMTCLAS=S005Y000 LRECL=22756'
call cd A540769.TEST.out,
                 , 'rz2',
                 , 'A540769.test.rz1sys3',
                 , 'proc = ska03dsn newName = wktest' ,
                   'MGMTCLAS=S005Y000 LRECL=22756'
exit
call cd PVSO.RZ1.P0.TS4SXXXX.D05300.TXXXXXX.TRACK2,
                 , 'TEST',
                 , 'T1DAT.DOCSYS.FTSCS.PVSTRACK(+1)',
                 , 'proc = mvs03dsn newName = wktest' ,
                   'MGMTCLAS=MCGDG DATACLAS=DCVFILE LRECL=32756'

err:
parse arg ggMsg
    call errA ggMsg
    exit 12
endSubroutine err
/* copy scan begin ****************************************************/
/**********************************************************************
Scan: scan an input:
    scanBegin(m,ln): set scan Source to ln
    scanEol  (m)   : returns whether we reached end of line already
    scanLit(m,lit) : scan Literal lit if present or return 0
    scanChar(m,n)  : scan next n characters
    scanName(m)    : scan a name
    scanNum(m)     : scan integer (without sign)
    scanString(m,q): scan a String with quote q. (with doubble = 1)
    scanVerify(m,c,o): verify(...,c,o,...)
    scanKeyValue(m): scan a key = value clause (with spaces)
    scanWord(m,u)  : scan a space delimited word or a string,
                          if u=1 then uppercase non-strings
    scanErr(m, txt): error with current scan location

returns: true if scanned 0 otherwise
         m.m.tok  ==> last token
         m.m.val  ==> last value for scanString/Word/KeyValue
         m.m.key  ==> key for scanKeyValue
         m.scan.m.pos ==> scan position
         m.scan.m.src ==> scan source
***********************************************************************/

scanBegin: procedure expose m.
parse arg m, aSrc
    m.scan.m.src = aSrc
    m.scan.m.pos = 1
    m.scan.m.tok = ''
    m.scan.m.val = ''
    if symbol('m.scan.m.Name') ^== 'VAR' then do
        m.scan.LC   = 'abcdefghijklmnopqurstuvwxyz'
        m.scan.UC   = 'ABCDEFGHIJKLMNOPQURSTUVWXYZ'
        m.scan.Alpha = m.scan.LC || m.scan.UC
        m.scan.AlNum = '0123456789' || m.scan.ALPHA
        m.scan.m.Name1 = m.scan.ALPHA
        m.scan.m.Name = m.scan.ALNUM
        end
    return
endProcedure scanBegin

scanEOL: procedure expose m.
parse arg m, qu
    return m.scan.m.pos > length(m.scan.m.src)
endProcedure scanEOL

scanChar: procedure expose m.
parse arg m, len
    nx = 1 + length(m.scan.m.src)
    if len ^== '' then
        if nx > m.scan.m.pos + len then
            nx = m.scan.m.pos + len
    if nx = m.scan.m.pos then
        return 0
    m.m.tok = substr(m.scan.m.src, m.scan.m.pos, nx - m.scan.m.pos)
    m.scan.m.pos = nx
    return 1
endProcedure scanChar

scanLit: procedure expose m.
parse arg m, lit
    if ^ abbrev(substr(m.scan.m.src, m.scan.m.pos), lit) then
        return 0
    m.scan.m.pos = m.scan.m.pos + length(lit)
    return 1
endProcedure scanLit

scanString: procedure expose m.
parse arg m, qu
    m.m.val = ''
    if qu = '' then
        qu = "'"
    if substr(m.scan.m.src, m.scan.m.pos, 1) ^== qu then
        return 0
    bx = m.scan.m.pos
    qx = m.scan.m.pos + 1
    do forever
        px = pos(qu, m.scan.m.src, qx)
        if px < 1 then
            call scanErr m, 'ending Apostroph('qu') missing'
        m.m.val = m.m.val || substr(m.scan.m.src, qx, px-qx)
        if px >= length(m.scan.m.src) then
            leave
        else if substr(m.scan.m.src, px+1, 1) <> qu then
            leave
        qx = px+2
        m.m.val = m.m.val || qu
        end
    m.m.tok = substr(m.scan.m.src, bx, px+1-bx)
    m.scan.m.pos = px+1
    return 1
endProcedure scanString

scanName: procedure expose m.
parse arg m, alpha
    if pos(substr(m.scan.m.src, m.scan.m.pos, 1),
                 , m.scan.m.Name1) <= 0 then
        return 0
    bx = m.scan.m.pos
    m.scan.m.pos = bx + 1
    call scanVerify m, m.scan.m.Name
    m.m.tok = substr(m.scan.m.src, bx, m.scan.m.pos - bx)
    return 1
endProcedure scanName

scanVerify: procedure expose m.
parse arg m, alpha, vOpt
    if vOpt == '' then   /* empty string does not take default| */
        nx = verify(m.scan.m.src, alpha, , m.scan.m.pos)
    else
        nx = verify(m.scan.m.src, alpha, vOpt, m.scan.m.pos)
    if nx = 0 then
        nx = length(m.scan.m.src) + 1
    m.m.tok = substr(m.scan.m.src, m.scan.m.Pos, nx - m.scan.m.Pos)
    if nx <= m.scan.m.pos then
        return 0
    m.scan.m.pos = nx
    return 1
endProcedure scanVerify

scanNum: procedure expose m.
parse arg m
    if ^ scanVerify(m, '0123456789') then
        return 0
    else if pos(substr(m.scan.m.src, m.scan.m.pos, 1), m.scan.m.name1) ,
             > 0 then
        call scanErr m, 'illegal number end'
    return 1
endProcedure scanNum

scanWord: procedure expose m.
parse arg m, uc
    call scanVerify m, ' '
    if scanString(m, "'") then            return 1
    else if scanString(m, """") then      return 1
    else
        res = scanVerify(m, ' ', 'm')

    m.m.val = m.m.tok
    if uc == 1 then
        upper m.m.val
    return res
endProcedure scanWord

scanKeyValue: procedure expose m.
parse arg m, uk, uv
    bx = m.scan.m.pos
    call scanVerify m, ' '
    if scanName(m) then do
        m.m.key = translate(m.m.tok)
        if uk == 1 then
            upper m.m.key
        call scanVerify m, ' '
        if scanLit(m, '=') then do
            call scanWord m, uv
            return 1
            end
        end
    m.scan.m.pos = bx
    return 0
endProcedure scanKeyValue

scanErr: procedure expose m.
parse arg m, txt
    say 'scanErr' txt
    say '  last token' m.scan.m.tok
    say '  charPos' m.scan.m.Pos':',
                  strip(substr(m.scan.m.src, m.scan.m.Pos), 't')
    say '  in line:' strip(m.scan.m.src, 't')
    if symbol('m.scan.m.lineinfo') == 'VAR' then
        interpret 'say "  lineinfo:" ('m.scan.m.lineinfo')'
    call err 'scanErr' txt
endProcedure scanErr
/* copy scan end   ****************************************************/
/* copy adr begin ****************************************************/
/**********************************************************************
    dsn*: manipulate dataSetNames
        dsn2Jcl:     convert from tso to JCL format
        dsnFromJcl:  convert from jcl to TSO format
        dsnPosLev:   get the index of first char of level
                     (negativ levels are counted from the right)
        dsnGetMbr:   get the Member name from a dsn
        dsnApp:      cleanup and append dsn parts (preserve apos ...)
        dsnSetMbr:   set a Member name or remove it if mbr = ''
        dsnTemp      return the name of a temporary dataset
        dsnGetLLQ    ==> dsnGetLev(..., -1) depreciated
***********************************************************************/
dsn2jcl: procedure
parse arg dsn .
    if left(dsn,1) = "'" then
        return strip(dsn, 'b', "'")
    else if sysvar('SYSPREF') = '' then
        return dsn
    else
        return sysvar('SYSPREF')'.'dsn
endProcedure dsn2Jcl

dsnFromJcl: procedure
parse arg dsn .
    return "'"dsn"'"
endProcedure dsnFromJcl

dsnApp: procedure
parse arg parts
    dsn = ''
    do wx=1 by 1
        w = word(parts, wx)
        if w = '' then
            leave
        do while w <> ''
            if pos(right(w, 1), "') ") <= 0 then
                leave
            w = left(w, length(w)-1)
            end
        dsn = dsn || w
        end
    if pos('(', dsn) > 0 then
        dsn = dsn')'
    if left(dsn,1) = "'" then
        return "'"strip(dsn, 'b', "'")"'"
    else
        return dsn
endProcedure dsnApp

dsnSetMbr: procedure
parse arg dsn, mbr
     mbr = strip(mbr)
     bx = pos('(', dsn)
     if mbr = '' then do
         if bx < 1 then
             return dsn
         else if left(dsn, 1) = "'" then
             return left(dsn,bx-1)"'"
         else
             return left(dsn,bx-1)
         end
     else do
         if bx < 1 then
             return dsnApp(dsn '('mbr)
         else
             return dsnApp(left(dsn, bx)  mbr)
         end
endProcedure dsnSetMbr

dsnGetMbr: procedure
parse arg dsn
     lx = pos('(', dsn)
     rx = pos(')', dsn, lx+1)
     if lx < 1 then
         return ''
     else if lx < rx then
         return substr(dsn, lx+1, rx-lx-1)
     else
         return strip(substr(dsn,lx+1), 't', "'")
endProcedure dsnGetMbr

dsnPosLev: procedure
parse arg dsn, lx
    sx = posLev('.', dsn, lx)
    if sx ^= 1 then
        return sx
    else
        return 1 + (left(dsn, 1) == "'")
endProcedure dsnPosLev

dsnGetLev: procedure
parse arg dsn, lx
    sx = dsnPosLev(dsn, lx)
    if sx < 1 then
        return ''
    ex = pos('.', dsn, sx)
    if ex < 1 then do
         ex = pos('(', dsn, sx)
         if ex < 1 then
             return substr(dsn, sx)
        end
    return substr(dsn, sx, ex-sx)
endProcedure dsnGetLev

dsnTemp: procedure
parse upper arg suf
    l = time(l);
    d = 'tempFile.t'left(l,2)substr(l,4,2)substr(l,7,2)'.m'right(l,6)
    call trc 'jobName' mvsVar('SYMDEF', 'JOBNAME')
    d = 'tmpFile.'mvsVar('SYMDEF', 'JOBNAME')'.'suf
    call trc 'tempFile' sub '=>' d
    return d
endProcedure dsnTemp

/**********************************************************************
StringHandling
    posRep: return the index of rep'th occurrence of needle
            negativ rep are counted from the right
***********************************************************************/
quote: procedure
parse arg txt, qu
    if qu = '' then
        qu = "'"
    res = qu
    ix = 1
    do forever
        qx = pos(qu, txt, ix)
        if qx = 0 then
            return res || substr(txt, ix) || qu
        res = res || substr(txt, ix, qx-ix) || qu || qu
        ix = qx + length(qu)
        end
endProcedure quote

posRep: procedure
parse arg needle, hayStack, rep, start
    if rep > 0 then do
        if start = '' then
            start = 1
        do cc = 1 to rep
             sx = pos(needle, hayStack, start)
             if sx < 1 then
                 return 0
             start = sx + length(needle)
             end
        return sx
        end
    else if rep < 0 then do
        if start = '' then
            start = length(hayStack)
        do cc = 1 to -rep
             sx = lastPos(needle, hayStack, start)
             if sx < 1 then
                 return 0
             start = sx - length(needle)
             end
        return sx
        end
    else
        return 0
endProcedure posRep

posLev: procedure
parse arg needle, hayStack, rep, start
    if rep > 1 then do
        sx = posRep(needle, hayStack, rep-1, start)
        if sx < 1 then
            return 0
        return 1+sx
        end
    else if rep < -1 then do
        sx = posRep(needle, hayStack, rep+1, start)
        if sx < 1 then
            return 0
        return 1+lastPos(needle, hayStack, sx-1)
        end
    else if rep ^= -1 then
        return rep     /* for 0 and 1 */
    else if start == '' then   /* pos fails with empty start| */
        return 1 + lastPos(needle, hayStack)
    else
        return 1 + lastPos(needle, hayStack, start)
endProcedure posLev


posCount: procedure
parse arg needle, hayStack, start, fin
    if start = '' then
        start = 1
    if fin = '' then
        fin = length(hayStack) + 1 - length(needle)
    cnt = 0
    do forever
        start = pos(needle, haystack, start)
        if start < 1 | start > fin then
             return cnt
        cnt = cnt + 1
        start = start + length(needle)
        end
endProcedure posCount

/**********************************************************************
    lmd: catalog read
    call sequence: lmdBegin, lmdNext*, lmdEnd
        mit lmd service (mit save in file und read,
                         weil list zu langsam und listcat abstürzt)
        1. arg (grp)     als group dataset für lmd save
                         und dd name für file read
***********************************************************************/
lmdBegin: procedure
    parse arg grp, lev
    call adrIsp 'lmdinit listid(lmdId) level('lev')'
    res = adrIspRC('lmdlist listid(&lmdId) option(save) group('grp')')
    call adrIsp 'lmdfree listid(&lmdId)'
    if res = 0 then do
        call trc showTime() 'lmdlist save' grp lev
        call adrTso 'alloc dd('grp') shr dsn('grp'.datasets)'
        end
    else if res = 4 then do
        call trc 'no datasets found' showTime() 'lmdlist save' grp lev
        call adrTso 'alloc dd('grp') dummy'
        end
    else
        call err 'rc' res 'in lmdlist save' grp lev
    call readDDBegin grp
return /* end lmdBegin */

lmdNext:
    parse arg ggGrp, ggSt
return readDD(ggGrp, ggSt)

lmdEnd: procedure
    parse arg grp
    call readDDEnd grp
    call adrTso 'free dd('grp')'
return /* end lmdEnd */

/**********************************************************************
    member list of a pds:
        call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmmTest: procedure
parse arg dsn
    if dsn = '' then
        dsn = 'wk.pli(*)'
    say 'lmmTest for dsn' dsn
    id = lmmBegin(dsn)
    do ix=1 by 1
        m = lmmNext(id)
        if m = '' then
            leave
        say ix m
        end
    call lmmEnd id
    say  'lmmTest end' (ix-1) 'members in' dsn
    return
endProcedure lmmTest

lmmBegin: procedure
parse arg dsn
    mbr = dsnGetMbr(dsn)
    pds = dsnSetMbr(dsn, )
    call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
    call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
    res = lmmId
    if mbr <> '' then
        res = res 'pattern('mbr')'
    say 'lmmBegin returning' res
    return res
endProcedure lmmBegin

lmmEnd: procedure
parse arg lmmId opt
    if adrIspRc("LMMLIST DATAID("lmmId") option(free)") <> 0 then
        if rc <> 8 then
            call err "lmmEnd" id lmmId "rc" rc "for lmmList free"
    call adrIsp "LMCLOSE DATAID("lmmId")"
    call adrIsp "LMFREE DATAID("lmmId")"
    return
endProcedure lmmEnd

lmmNext: procedure
parse arg lmmId opt
    gmRc = adrIspRc("LMMLIST DATAID("lmmid")" ,
               "OPTION(LIST) MEMBER(Mbr)" opt)
    if gmRc = 0 then
        return mbr
    else if gmRc = 8 | gmRC = 4 then
        return ''
    else
        call err 'lmmList rc' gmRc
endProcedure lmmNext

/**********************************************************************
    read: read a file
    valid call sequences:
        readDsn                                read a whole dsn
        readDDBegin, readDD*, readDDEnd        read dd in chunks
        writeBegin, writeDD*, writeEnd         write dsn in chunks

        readDD liest 100 records in übergebenen stem,
            returns false at eof
***********************************************************************/
readTest: procedure
parse arg dsn
    say showTime() 'readTest' dsn
    call readBegin 'ddEins', dsn
    z = 0
    do while readDD('ddEins', st.)
        do y=1 to st.0
            z=z+1
            say z strip(st.y, 't')
            end
        end
    call readEnd 'ddEins'
    say showTime() 'readTest' z 'records in' dsn
return /* readTest */

readDDBegin: procedure
return /* end readDDBegin */

readDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt = '' then
        ggCnt = 100
    if adrTsoRc('execio' ggCnt 'diskr' ggDD '(stem' ggSt')') = 0 then
        return (value(ggSt'0') > 0)
    else if rc = 2 then
        return (value(ggSt'0') > 0)
    else
        call err 'execio' ggCnt 'diskr' ggDD 'rc' rc
return /* end readDD */

readDDEnd: procedure
    parse arg dd
    call adrTso 'execio 0 diskr' dd '(finis)'
return /* end readDDEnd */

writeDDBegin: procedure
    parse arg ggDD
    call adrTso 'execio' 0 'diskw' ggDD '(open)'
return /* end writeDDBegin */

writeDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    call adrTso 'execio' ggCnt 'diskw' ggDD '(stem' ggSt')'
    return
endSubroutine writeDD

writeDDEnd: procedure
    parse arg dd
    call adrTso 'execio 0 diskw' dd '(finis)'
return /* end writeDDEnd */

writeDsn:
    parse arg ggDsn, ggSt
    call adrTso 'alloc dd(ggWrite) dsn('ggDsn')'
    call writeDDBegin 'ggWrite'
    call writeDD 'ggWrite', ggSt
    call writeDDEnd 'ggWrite'
    call adrTso 'free  dd(ggWrite)'
    return
endProcedure writeDsn

/**********************************************************************
    writeApp: append lines to a file
        ggDsn:  dsn to append lines
        ggStem  stem containing line (with dot|)
        ggNr    number of lines, if empty <stem>.0
***********************************************************************/
writeApp:
parse arg ggDsn, ggStem, ggNr
    if ggNr = '' then
        ggNr = value(ggStem'0')
    if pos('(', ggDsn) < 1 then do  /* sequential ds, use disp=mod */
        call adrTso 'alloc mod reuse dd(ddApp) dsn('ggDsn')'
        end
    else do                       /* pds: read and rewrite */
        call adrTso 'alloc shr reuse dd(ddApp) dsn('ggDsn')'
        if sysdsn(ggDsn) = 'OK' then do
            call adrTso 'execio * diskr ddApp (stem ggL. finis)'
            call adrTso 'execio' ggL.0 'diskw ddApp (stem ggL.)'
            end
        end
    call adrTso 'execio' ggNr 'diskw ddApp (stem' ggStem 'finis)'
    call adrTso 'free dd(ddApp)'
return
endProcedure writeApp

log: procedure
parse arg logLine
    l.1 = date('s') time() logLine
    call writeApp 'wk.out(ll)', l., 1
    return
endProcedure log
/**********************************************************************
    adrSql: execute sql thru the dsnRexx interface
***********************************************************************/

adrSqlRc: /* no procedure, to keep variables sql... */
    parse arg ggSqlStmt, ggNo
    if ggNo <> '1' then
        ggSqlStmt = 'execSql' ggSqlStmt
    address dsnRexx ggSqlStmt
    if rc = 0 then
        return 0  /* say "sql ok:" ggSqlStmt */
    else if rc < 0 then
        call err "sql rc" rc sqlmsg()
    if sqlCode = 0 then
        say 'warning' sqlMsg()
    return sqlCode
endSubroutine adrSqlRc

adrSql: /* no procedure, to keep variables sql... */
    parse arg ggSqlStmt, ggNo
    if adrSqlRc(ggSqlStmt, ggNo) = 0 then
        return
    call err "sql rc" rc sqlmsg()
endSubroutine adrSql

adrSqlConnect: procedure
parse arg sys
    if adrTSORc("SUBCOM DSNREXX") <> 0 then do
       sRc = RXSUBCOM('ADD','DSNREXX','DSNREXX') /* ADD HOST CMD ENV  */
       if sRc <> 0 then
           call err 'rc' sRc 'from RXSUBCOM(ADD, DSNREXX, DSNREXX)'
       end
    call adrSql "connect" sys, 1
    return
endProcedure adrSqlConnect

adrSqlDisconnect: procedure
    call adrSql "disconnect ", 1
    return
endProcedure adrSqlDisconnect

sqlMsg: /* no procedure, to keep variables sql... */
    ggW = ''
    do ggX=0 to 10
        if sqlWarn.ggx <> '' then
            ggw = ggw ggx'='sqlWarn.ggx
        end
    return  'sqlCode' sqlCode 'state' sqlState 'warn' ggW ,
            'errMc' strip(translate(sqlerrmc, ',', 'FF'x))':' ggSqlStmt
endSubroutine sqlMsg

/**********************************************************************
    adrDsn: send a command to db2 with the TSO dsn command
***********************************************************************/

adrDsn: procedure
parse arg sys, cmd, rcOk
    call adrTso 'alloc dd(sysprint) new reuse'
    push 'END'
    push cmd
    rr = adrTsoRc('DSN SYSTEM('sys')')
    say 'rc' rr 'adrTso DSN SYSTEM('sys') cmd' cmd
    if wordPos(rr, rcOk) < 1 then do
        say 'error rc' rr 'in adrTso DSN SYSTEM('sys') cmd' cmd

        call adrTso 'execio * diskr sysprint (finis stem pr.)'
        say 'sysprint' pr.0 'lines'
        do x=1 to pr.0
            say strip(pr.x, 't')
            end
        call adrTso 'free dd(sysprint) '
        call err 'rc' rr 'in adrTso DSN SYSTEM('sys') cmd' cmd
        end
    call adrTso 'free dd(sysprint)'
    return rr
endProcedure adr Dsn

/**********************************************************************
    adr*: address an environment
        adrTso: fails if rc <> 0
        adrTsoRc: returns rc without failing
***********************************************************************/
adrTsoRc:
    parse arg ggTsoCmd
    address tso ggTsoCmd
return rc  /* end adrTsoRc */

adrTso:
    parse arg ggTsoCmd
    address tso ggTsoCmd
    if rc <> 0 then
        call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */

adrIspRc:
    parse arg ggIspCmd
    address ispexec ggIspCmd
return rc /* end adrIspRc */

adrIsp:
    parse arg ggIspCmd
    address ispexec ggIspCmd
    if rc <> 0 then
        call err 'adrIsp rc' rc 'for' ggIspCmd
return /* end adrIsp */

adrEdit:
    parse arg ggEditCmd, ret
    address isrEdit ggEditCmd
    if rc <> 0 then
        call err 'adr isrEdit rc' rc 'for' ggEditCmd
return /* end adrEdit */

adrEditRc:
    parse arg ggEditCmd
    address isrEdit ggEditCmd
return rc /* end adrEditRc */

/**********************************************************************
    messages, errorhandling help
***********************************************************************/
/* caller should define err as follows ---------------------------------
err:
parse arg ggMsg
    call errA ggMsg
    exit 12
endSubroutine err
   end call should define err ----------------------------------------*/

errA:
    parse arg ggTxt
    parse source . . ggS3 .
    say 'fatal error in' ggS3':' ggTxt
    exit setRc(12)
endSubroutine errA

trc: procedure expose m.
parse arg msg
    if m.trace == 1 then
        say 'trc:' msg
    return
endProcedure trc

setRc: procedure
parse arg zIspfRc
/**********************************************************************
    if a cmd is run by ispStart, its RC is ignored,
         but ISPF passes the value of the shared varible zIspfRc
         back as return code
***********************************************************************/
    if sysVar('sysISPF') = 'ACTIVE' then do
        say 'exitRc setting zIspfRc='zIspfRc
        address ispExec vput 'zIspfRc' shared
        end
    return zIspfRc
endProcedure setRc

errHelp: procedure
parse arg ggMsg
    say 'fatal error:' ggMsg
    call help
    call err ggMsg
endProcedure errHelp

help: procedure
/**********************************************************************
    display the first comment block of the source as help text
***********************************************************************/
    parse source . . s3 .
    say 'help for rexx' s3
    do lx=1 by 1
        if pos('/*', sourceLine(lx)) > 0 then
            leave
        else if lx > 10 then do
            say 'initial commentblock not found for help'
            return
            end
        end
    do lx=lx+1 by 1
        li = strip(sourceLine(lx), 't', ' ')
        if pos('*/', li) > 0 then
            leave
        say li
        end
    return 4
endProcedure help

showtime: procedure
parse arg showmsg
return time() sysvar('syscpu') sysvar('syssrv') showmsg
/* copy adr end   ****************************************************/
}¢--- A540769.WK.REXX.O13(CHECKRTS) cre=2011-09-09 mod=2011-09-09-10.24.36 A540769 ---
/* REXX  **************************************************************

synopsis: CHECKRTS db fun

    db   = db2 subsystem
    type = TS oder IX

Aufruf von reoCheck, Docu siehe dort

docu: http://chsa4212/host/db2wiki/pmwiki.php?n=Main.RtsReo

history ***************************************************************
09.09.2011   v5.7      alter code eliminiert
*******************************************************************/
parse upper arg ssid type
    result = 0
    call reoCheck ssid type
    if \ datatype(result, 'n') then
        result = 0
    exit result
}¢--- A540769.WK.REXX.O13(CLASS) cre=2009-09-03 mod=2013-05-27-11.47.08 A540769 ---
/* copy class begin **************************************************
    a class has fields and methods,
    the class module handles only the metadata,
    object handling (instanciation, methodcalls etc.) is in O

    classes are represented by a metadata tree,
        its nodes of class class have diffenrent types:

class subTypes (implemented as choices)
    'u'    = union:    NAME -> name of class if <> '',
                    stem -> references component classes
    'f' = field:      NAME -> fieldName (x.name),
                    CLASSS -> reference to class of fieldValue
    's' = stem:     class -> ref to class at each stem element
    'c' = choice:   NAME -> selection value,
                    CLASS -> ref to class of choice
    'm' = method:    NAME -> methodName,
                    MET -> rexxCode
    'r' = reference CLASS -> ref to type at reference
special classes
    'v'    = Value     String Value
    'w'    = ValueAsA  StringValue packed into an address (prefix escW)
    'o' = AnyClass    any class with dynamic classLookup on object
formal definition, see classIni

class expression (ce) allow the following syntax
    ce = className | classAdr | 'n'('?','*','|')? name union | union
        | 'f' name ce | 's' ce | 'c' name ce | 'm' name code | r ce?
    union = 'u' (ce (',' ce)*)?

    the modifiers of 'n' means
        none:    create new class, fail if name already defined
        '?':    create new class or return old of that name
        '*':    use an exisiting class of that definition
                or create new class with a unique name
        '|':    create a new class with a unique name
    'm' extends to then end of the ce (line)
    'u' allows several components, in classNew also multiple args
                Achtung, aber NICHT rekursiv|
***********************************************************************/
classIni: procedure expose m.
    if m.class.ini == 1 then
        return
    m.class.ini = 1
    m.class.in2 = 0
    call oIni
    call mapIni
    call mNewArea 'CLASS', 'CLASS'
    call mapReset 'CLASS.N2C'  /* name to class */
    m.class.classV = classBasicNew('u', 'v')
    m.class.classW = classBasicNew('u', 'w')
    m.class.classO = classBasicNew('u', 'o')

    m.class.class = classNew('n class u v',
            , 'c u u f NAME v, s r class',
            , 'c f u f NAME v, f CLASS r class',
            , 'c s f CLASS r class' ,
            , 'c c u f NAME v, f CLASS r class',
            , 'c m u f NAME v, f MET  v' ,
            , 'c r f CLASS r class' )
    m.class.cNav = '.'
    m.class.cRef = '|'
    m.class.cDot = '%'
    m.class.cPath = m.class.cNav || m.class.cRef || m.class.cDot
    m.class.classR = classNew('r')
    m.class.basicNew = "oMutate(mNew(cl), cl)"
    call oAddMet m.o.lazyGen, 'new', "return classGenNew(cl, me)"
    call oAddMet m.o.lazyGen,'oClear',"return classGenClear(cl, me)"
    call oAddMet m.o.lazyGen,'oFlds',"return classGenFlds(cl, me)"
    call oAddMet m.o.lazyGen, 'oCopy', "return classGenCopy(cl, me)"

    cr = mIterBegin('CLASS')
    do while assNN('cr', mIter(cr))
        call classFinish cr
        call oClaMet cr, 'oFlds' /* generate flds */
        end
    m.class.in2 = 1

    call oAddMet m.class.classV, 'oCopy', "return oCopyV(m, t)"
    call classAddMet m.class.classV, 'o2String return m.m'
    call classAddMet m.class.classW, 'o2String return substr(m, 2)'
    call classNew 'n ORun u',
         , 'm oRun call err "call of abstract method oRun"',
         , 'm o2File return oRun2File(m)',
         , 'm o2String return jCatLines(oRun2File(m), fmt)'

    return
endProcedure classIni


/*--- return the name of a class if it exists otherwise the class ---*/
className: procedure expose m.
parse arg cl
    if m.cl = 'u' & m.cl.name \= '' then
        return m.cl.name
    else
        return cl
endProcedure className

/*--- return class of given name or class ---------------------------*/
class4Name: procedure expose m.
parse arg nm
    if symbol('m.class.n2c.nm') == 'VAR' then
        return m.class.n2c.nm
    if arg() > 1 then
        return arg(2)
    call err 'no class' nm
endProcedure class4Name

classBasicNew: procedure expose m.
parse arg ty, nm, cl, nmTy
    n = mNew('CLASS')
    m.n = ty
    m.n.name = nm
    m.n.nameComp = nm
    if ty == 'u' & nm \== '' then do
        if pos(nmTy, '*|') > 0 then do
            m.n.name = nm || substr(n, 1+lastPos('.', n))
            if nmTy == '*' then
                m.n.nameComp = nm'*'
            else
                m.n.nameComp = m.n.name
            end
        call mapAdd class.n2c, m.n.name, n
        end
    call mapAdd class.n2c, n, n
    m.n.class = ''
    m.n.met = ''
    m.n.0 = 0
    if length(ty) \== 1 | pos(ty, 'ufscrm') < 1 then
        call err 'bad type' ty': classBasicNew('ty',' nm',' cl')'
    else if nm == '' & pos(ty, 'fm') > 0 then
        call err 'empty name: classBasicNew('ty',' nm',' cl')'
    else if nm \== '' & ty \== 'c' & verifId(nm) > 0 then
        call err 'bad name' nm': classBasicNew('ty',' nm',' cl')'
    else if nm \= '' & pos(ty, 'rs') > 0 then
        call err 'name for type' ty': classBasicNew('ty',' nm',' cl')'
    else if pos(ty, 'fcrs') > 0 then do
        if cl \== '' then
            m.n.class = mapGet(class.n2c, cl)
        else if ty == 'r' then
            m.n.class = m.class.classO
  /*    else say 'cl leer' ty nm nmTy   ???????*/
        end
    else if ty == 'm' then
        m.n.met = cl
    else if cl \== '' then
        call err 'class for type' ty': classBasicNew('ty',' nm',' cl')'
    return n
endProcedure classBasicNew


classNew: procedure expose m.
parse arg clEx 1 ty rest
    if abbrev(ty, 'n') then do
        if wordPos(ty, 'n n? n* n|') < 1 then
            call err 'bad type' ty': classNew('clEx')'
        nmTy = right(ty, 1)
        parse var rest nm ty rest
        if ty \== 'u' then
            call err 'class name' nm 'without u: classNew('clEx')'
        if nmTy == 'n' then do
             if mapHasKey(class.n2c, nm) then
                call err 'class' nm 'already defined: classNew('clEx')'
            end
        else if nmTy == '?' then do
            if mapHasKey(class.n2c, nm) then
                return mapGet(class.n2c, nm)
            end
        else if nmTy == '*' then do
            if arg() \== 1 then
                call err 'arg()='arg() 'for n* : classNew('clEx')'
            if mapHasKey(class.n2c, clEx) then
                return mapGet(class.n2c, clEx)
            end
        n = classBasicNew('u', nm, , nmTy)
        end
    else do
        nmTy = ''
        if arg() \== 1 then
            call err 'arg()='arg() 'without name: classNew('clEx')'
        if mapHasKey(class.n2c, clEx) then
               return mapGet(class.n2c, clEx)
        if length(ty) <> 1 | pos(ty, 'ufscmr') < 1 then
            call err 'bad type' ty': classNew('clEx')'
        nm = ''
        if pos(ty, 'usr') < 1 then
            parse var rest nm rest
        if ty = 'u'  then do
            n = classBasicNew(ty)
            end
        else if    ty = 'm' then do
            n = classBasicNew(ty, nm, rest)
            rest = ''
            end
        else do
            parse var rest t1 rest
            if wordPos(t1, 'u f s c m r') > 0 then do
                n = classBasicNew(ty, nm)
                m.n.class = classNew(t1 rest)
                rest = ''
                end
            else do
                n = classBasicNew(ty, nm, t1)
                end
            end
        end
    if ty \== 'u' then do
        if rest \== '' then
            call err 'rest' rest 'but end of classExp expected:' clEx
        end
    else do
        lx = 0
        do while lx < length(rest)
            cx = pos(',', rest, lx+1)
            if cx <= lx | word(substr(rest, lx+1), 1) == 'm' then
                cx = length(rest)+1
            a = mAdd(n, classNew(strip(substr(rest, lx+1, cx-lx-1))))
            lx=cx
            end
        pref = ''
        do ax=2 to arg()
            if length(arg(ax)) == 1 & arg(ax) \== ' ' then
                pref = arg(ax)' '
            else
                call mAdd n, classNew(pref || arg(ax))
            end
        end
    cr = mIterBegin('CLASS')
    do while assNN('cr', mIter(cr)) & \ classEqual(n, cr)
        end
    isNew = cr == n
    if \ isNew then do
        if mapRemove(class.n2c, n) \== n then
            call err 'mapRemove('n') mismatch'
        if m.n == 'u' & m.n.name \== '' then
            if mapRemove(class.n2c, m.n.name) \== n then
                call err 'mapRemove('m.n.name') mismatch'
        call mFree n
        n = cr
        end
    if isNew & m.class.in2 then
        call classFinish n
    if nmTy == '' | nmTy == '*' then
        call mapAdd class.n2c, clEx, n
    return n
endProcedure classNew

/*--- to the finish for new class cl -------------------------------*/
classFinish: procedure expose m.
parse arg cl, force
    call oMutate cl, m.class.class
                        /* find super and sub classes */
    m.cl.sub = ''
    sups = ''
    do ux=1 to m.cl.0
        u1 = m.cl.ux
        if m.u1 \== 'u' then
            iterate
        if wordPos(u1, sups) > 0 then
            call err u1 'already in sups' sups': classSuperSub('cl')'
        sups = sups u1
        if wordPos(m.cl.SUB, cl) > 0 | symbol('m.u1.sub') \== 'VAR' then
            call err cl 'is already in' u1'.sub' u1.SUB  ,
                || ': classSuperSub('cl')'
        m.u1.sub = strip(m.u1.sub cl)
        end
    m.cl.super = sups
                        /* add class to o */
    call oAddCla cl, sups
    if pos(m.cl, 'mfrsv') < 1 then do
        allMets = ''
        forceMets = ''
        do cx=1 to m.cl.0
            ch = m.cl.cx
            if m.ch == 'm' then do
                call oAddMet cl, m.ch.name, m.ch.met
                allMets = allMets m.ch.name
                end
            else if symbol('m.class.forceDown.ch') == 'VAR' then
                forceMets = forceMets m.class.forceDown.ch
            end
        myForce = ''
        do fx=1 to words(forceMets)
            parse value word(forceMets, fx) with fCla '#' fMet
            if wordPos(fMet, allMets) < 1 then do
                call oAddMet cl, fMet, m.o.cMet.fCla.fMet
                myForce = myForce cl'#'fMet
                allMets = allMets fMet
                end
            end
        if myForce \== '' then
            m.class.forceDown.cl = strip(myForce)
        end
    if cl == m.class.class then
        call mAlias 'CLASS', cl
    else  /* object addresses */
        call mNewArea cl, 'O.'substr(cl,7)
    if m.cl \== 'u' | m.cl.name == '' then
        return
    call mAlias cl, m.cl.name
    return
endProcedure classFinish

classAddMet: procedure expose m.
parse arg clNm, met code
    cl = class4Name(clNm)
    if pos(m.cl, 'uvw') < 1 then
        call err 'class not nvw but' m.cl,
            'in classAdd1Method('clNm',' met code')'
    call mAdd cl, classNew('m' met code)
    call oAddMet cl, met, code
    return cl
endProcedure classAddMet
/*--- return true iff the two classes are equal -------------------*/
classEqual: procedure expose m.
parse arg l, r
    if m.l \== m.r | m.l.nameComp \== m.r.nameComp ,
            | m.l.class \== m.r.class | m.l.0 \== m.r.0  then
        return 0
    if m.l.met \== m.r.met  then
        return 0
    do sx=1 to m.l.0
        if m.l.sx \== m.r.sx then
            return 0
        end
    return 1
endProcedure classEqual

classGenNew: procedure expose m.
parse arg cl, met
     return  "m=" m.class.basicNew";" oClaMet(cl, 'oClear') ";" ,
             "return m"
endProcedure classGenNew

classGenFlds: procedure expose m.
parse arg cl, met
    m.cl.flds.0 = 0
    m.cl.stms.0 = 0
    m.cl.stemCl = ''
    m.cl.valueCl = ''
    call classGenFldsAdd cl, cl
    m.cl.hasFlds = m.cl.flds.0 > 1 ,
        | (m.cl.flds.0 == 1 & m.cl.flds.1 \== '') | m.cl.stms.0 > 0
    return cl'.FLDS'
endProcedure classGenFlds

/*--- add the the fields of class cl to stem f ----------------------*/
classGenFldsAdd: procedure expose m.
parse arg f, cl, nm
    n1 = substr(nm, 1+abbrev(nm, '.') )
    if symbol('m.f.f2c.n1') \== 'VAR' then
        m.f.f2c.n1 = cl
    if cl == m.class.classV | cl == m.class.classW | m.cl=='r' then do
        if nm == '' then do
            if m.f.valueCl \== '' then
                return  err('value mistmatch')
            m.f.valueCl = cl
            end
        if nm == '' then do
             call mMove f'.FLDS', 1, 2
             m.f.flds.1 = ''
             end
        else do
            call mAdd f'.FLDS', nm
            end
        return 0
        end
    if m.cl = 's' then do
        if m.cl.class == '' then
            call err 'stem null class'
        a1 = mAdd(f'.STMS', nm)
        m.a1.class = m.cl.class
        if nm == '' then
            m.f.stemCl = m.cl.class
        return 0
        end
    if m.cl = 'f' then
        return classGenFldsAdd(f, m.cl.class, nm'.'m.cl.name)
    if m.cl.class \== '' then
        return classGenFldsAdd(f, m.cl.class, nm)
    do tx=1 to m.cl.0
        call classGenFldsAdd f, m.cl.tx, nm
        end
    return 0
endProcedure classGenFldsAdd

classGenClear: procedure expose m.
parse arg cl, met
    r = ''
    call oClaMet cl, 'oFlds'
    do fx=1 to m.cl.flds.0
        f1 = m.cl.flds.fx
        if f1 == '' then
            c1 = cl
        else do
            c1 = substr(f1, 2)
            c1 = m.cl.f2c.c1
            end
        if c1 == m.class.classW then
            r = r classGenStmt(f1, "m.m~ = '"m.o.escW"';")
        else
            r = r classGenStmt(f1,  "m.m~ = '';")
        end
    do sx=1 to m.cl.stms.0
        r = r classGenStmt(m.cl.stms.sx, "m.m~.0 = 0;")
        end
    return r
endProcedure classGenClear

classGenStmt: procedure expose m.
parse arg f, st, resWo
    isNice = translate(f) == f
    resWo = translate(resWo) 'GGFF M'
    fDod = '.'f'.'
    do wx=1 to words(resWo) while isNice
        isNice = pos('.'word(resWo, wx)'.', fDot) < 1
        end
    if isNice then
        return repAll(st, '~', f)
    else
        return "ggFF = '"substr(f, 2)"';" repAll(st, '~', '.ggFF')
endProceduer classGenAss

classGenCopy: procedure expose m.
parse arg cl, me
    r = repAll("if t == '' then t =" m.class.basicNew ";" ,
               "else call oMutate t, cl;", 'cl', "'"cl"'")
    ff = oClaMet(cl, 'oFlds')            /* build code for copy */
    do fx=1 to m.cl.flds.0
        r = r classGenStmt(m.cl.flds.fx, 'm.t~ = m.m~;', 't')
        end
    do fx=1 to m.cl.stms.0
        nm = m.cl.stms.fx
        sc = m.cl.stms.fx.class
        if nm == '' then
            st = ''
        else do
            r = r "st = '"substr(nm, 2)"';"
            st = '.st'
            end
        r = r "m.t"st".0 = m.m"st".0;" ,
               "do sx=1 to m.m"st".0;" ,
                 "call oClaCopy '"sc"', m"st".sx, t"st".sx; end;"
        end
    return r 'return t;'
endProcedure classGenCopy

/*--- oCopy for classW ----------------------------------------------*/
oCopyW: procedure expose m.
trace ?r
parse arg m, t
    if t == '' then
        return m
    m.t = o2String(m)
    return oMutate(t, m.class.classV)
endProcedure oCopyW
/*--- print object ---------------------------------------------------*/
objOut: procedure expose m.
parse arg m, pr, p1
   c = objClass(m, '')
   if c == '' then
       call out p1 'no class for' m
   else if c == m.class.classV then
       call out p1 || m.m
   else if c == m.class.classW then
       call out p1 || o2String(m)
   else
       call classOutDone c, m, pr, p1
   return
endProcedure objOut

/*--- recursively output (with out:) the object a with class t -------*/
classOut: procedure expose m.
parse arg t, a, pr, p1
    return classOutDone(if(t=='',m.class.classO, t), a, pr, p1)
endProcedure classOut

/*--- ouput object a with class t and stopper done ------------------*/
classOutDone: procedure expose m. done.
parse arg t, a, pr, p1
    if p1 == '' then
        p1 = pr
    if right(p1, 1) \== ' ' then
        p1 = p1' '
    if done.ini \== 1 then do
        done.ini = 1
        t = class4Name(t, t)
        p1 = p1'@'a' '
        end
    if done.t.a == 1 then
        return out(p1'done :'className(t) '@'a)
    done.t.a = 1
    if t = m.class.classO then do
        if a == '' then
            return out(p1'obj null')
        t = objClass(a, '')
        if t = '' then
            return out(p1'obj has no class @'m.a)
        else
            return classOutDone(t, a, pr, p1'isA')
        end

    if t == m.class.classV then
        return out(p1'=' m.a)
    if t == m.class.classW == 'w' then
        return out(p1'}' substr(a, 2))
    if m.t == 'f' then
        return classOutDone(m.t.class, a'.'m.t.name, pr, p1'.'m.t.name)
    if m.t == 'r' then do
        if m.a == '' then
            return out(p1'refTo :'className(m.t.class) '@null@')
        else
            return classOutDone(m.t.class, m.a, pr,
                    , p1'refTo @'m.a)
        end
    if m.t = 'u' then do
        t1 = m.t.1
        vv = m.t.0 > 0 & m.t.1 == m.class.classV
        call out p1 || if(m.t.name == '', 'union', ':'m.t.name) ,
             || copies(' =' m.a, vv)
        do ux=1+vv to m.t.0
            call classOutDone m.t.ux, a, pr' '
            end
        return 0
        end
    if m.t = 's' then do
        call out p1'stem' m.a.0
        do ux=1 to m.a.0
            call classOutDone m.t.class, a'.'ux, pr' ', pr' .'ux
            end
        return 0
        end
    if m.t = 'c' then do
        if m.t.name = m.a then
            call classOutDone m.t.class, a, pr, p1'choice' m.a
        return 0
        end
    if m.t = 'm' then
        return 0
    return err('bad class type' m.t)
endProcedure classOutDone
/* copy class end   ***************************************************/
}¢--- A540769.WK.REXX.O13(COMP) cre=2012-04-02 mod=2012-09-17-15.23.53 A540769 ---
/* copy comp begin *****************************************************
    the shell compiler
         syntax and semantics of the shell language see javaDoc
***********************************************************************/
/***** initialisation *************************************************/
/*--- module initialisation ------------------------------------------*/
compIni: procedure expose m.
    if m.compIni = 1 then
        return
    m.compIni = 1
    call pipeIni
    call scanReadIni
    cc = classNew('n Compiler u')
    call mNewArea 'COMP.AST', '='
    m.comp.stem.0 = 0
    m.comp.idChars = m.scan.alfNum'@_'
    call compIniKI '=', "skeleton", "expression or block"
    call compIniKI '.', "object", "expression or block"
    call compIniKI '-', "string", "expression or block"
    call compIniKI '@', "shell", "pipe or $;"
    call compIniKI ':', "assignAttributes", "assignment or statement"
    call compIniKI '|', "assignTable", "header, sfmt or expr"
    call compIniKI '#', "text", "literal data"
    return
endProcedure compIni

compReset: procedure expose m.
parse arg m
    m.m.scan = scanRead(,,'|0123456789')
    m.m.chDol = '$'
    m.m.chSpa = ' ' || x2c('09')
    m.m.chNotBlock = '${}='
    m.m.chNotWord = m.m.chNotBlock || m.m.chSpa
    m.m.chKind = '.-=#@:|'
    m.m.chKin2 = '.-=#;:|'
    m.m.chKinC = '.-=@'
    m.m.chOp = '.-<@|?'
    m.m.chOpNoFi = '.-@|?'
    return m
endProcedure compReset

compIniKI: procedure expose m.
parse arg ki, m.comp.kind.ki.name, m.comp.kind.ki.expec
return

/*--- constructor of Compiler ----------------------------------------*/
comp: procedure expose m.
parse arg src
    nn = oNew('Compiler')
    if src \== '' then
        m.nn.cmpRdr = o2File(src)
    else
        m.nn.cmpRdr = ''
    return nn
endProcedure comp

/**** user interface **************************************************/
/*--- compile and run ------------------------------------------------*/
compRun: procedure expose m.
parse arg spec, inO, ouO, infoA
    cmp = comp(inO)
    r = compile(cmp, spec)
    if infoA \== '' then
        m.infoA = 'run'
    if ouO \== '' then
        call pipeBeLa '>' ouO
    call oRun r
    if ouO \== '' then
        call pipeEnd
    return 0
endProcedure compRun

/*--- compile the source and return an oRunner with the code ---------*/
compile: procedure expose m.
parse arg m, spec
    call compReset m
    kind = '@'
    spec = strip(spec)
    do while pos(left(spec, 1), m.m.chKind) > 0
       kind = left(spec, 1)
       spec = strip(substr(spec, 2))
       end
    call scanSrc m.m.scan, spec
    m.m.compSpec = 1
    res = compCUnit(m, kind, 1)
    do while abbrev(m.m.dir, '$#')
        call envPutO substr(m.m.dir, 3, length(m.m.dir)-4),
            , compCUnit(m, right(m.m.dir, 1))
        end
    if \ m.m.compSpec then
        call jClose m.m.scan
    return res
endProcedure compile

/*--- cUnit = compilation Unit = separate compilations
              no nesting| --------------------------------------------*/
compCUnit: procedure expose m.
parse arg m, ki, isFirst
    s = m.m.scan
    code = ''
    do forever
        m.m.dir = ''
        src = compUnit(m, ki, '$#')
        if \ compDirective(m) then
            return scanErr(s, m.comp.kind.ki.expec "expected: compile",
                 m.comp.kind.ki.name "stopped before end of input")
        if \ compIsEmpty(m, src) then do
                /*wkTst??? allow assTb in separatly compiled units */
            if isFirst == 1 & m.src.type == ':' ,
              & pos(' ', src) < 1 &  abbrev(src, 'COMP.AST.') then
                call mAdd src, '', ''
            code = code || ';'compAst2code(m, src, ';')
            end
        if m.m.dir == 'eof' then do
            if \ m.m.compSpec | m.m.cmpRdr == '' then
                return oRunner(code)
            call scanReadReset s, m.m.cmpRdr
            call jOpen s, m.j.cRead
            m.m.compSpec = 0
            end
        else if length(m.m.dir) == 3 then
            ki = substr(m.m.dir, 3, 1)
        else
            return oRunner(code)
        end
endProcedure compCUnit

/*--- directives divide cUnits ---------------------------------------*/
compDirective: procedure expose m.
parse arg m
    m.m.dir = ''
    s = m.m.scan
    lk = scanLook(s)
    cx = pos('#', lk, 3)
    if \ abbrev(lk, '$#') then do
        if \ scanAtEnd(m.m.scan) then
            return 0
        m.m.dir = 'eof'
        return 1
        end
    else if scanLit(s, '$#end' , '$#out') then do
        m.m.dir = 'eof'
        return 1
        end
    else if pos(substr(lk, 3, 1), m.m.chKinD) > 0 then do
        m.m.dirKind = substr(lk, 3, 1)
        m.m.dir = left(lk, 3)
        end
    else if cx > 3 & pos(substr(lk, cx+1, 1), m.m.chKinD) > 0 then do
        m.m.dirKind = substr(lk, 3, 1)
        m.m.dir = left(lk, cx+1)
        end
    else
        call scanErr s, 'bad directive:' word(lk, 1)
    if \ scanLit(s, m.m.dir) then
            call scanErr m.m.scan, 'directive mismatch' m.m.dir
    return 1
endProcedure compDirective

/**** parse the whole syntax *******************************************
          currently, with the old code generation,
              parsing and code generation is intermixec
              migrating to AST should will separate these tasks
***********************************************************************/
compUnit: procedure expose m.
parse arg m, kind, stopper
    s = m.m.scan
    if pos(kind, m.m.chKind';') < 1 then
        return scanErr(s, 'bad kind' kind 'in compUnit(...'stopper')')
    if stopper == '}' then do
        if kind \== '#' then do
            one = compExpr(m, 'b', translate(kind, ';', '@'))
            if compisEmpty(m, one) then
                return compAST(m, 'block')
            else
                return compAST(m, 'block', one)
            end
        tx = '= '
        cb = 1
        do forever /* scan nested { ... } pairs */
            call scanVerify s, '{}', 'm'
            tx = tx || m.s.tok
            if scanLit(s, '{') then
                cb = cb + 1
            else if scanLook(s, 1) \== '}' then
                call scanErr s, 'closing } expected'
            else if cb <= 1 then
                leave
            else if scanLit(s, '}') then
                cb = cb - 1
            else
                call scanErr s, 'closing } programming error'
            tx = tx || m.s.tok
            end
        return compAst(m, 'block', tx)
        end
    else if pos(kind, '.-=') > 0 then do
        return compData(m, kind)
        end
    else if pos(kind, '@;') > 0 then do
        call compSpNlComment m
        return compShell(m)
        end
    else if kind == '|' | kind == ':' then do
        if kind == '|' then
            res = compAssTab(m)
        else
            res = compAssAtt(m)
        if abbrev(res, '#') then
            return compAst(m, ':', substr(res, 3))
        else
            return compAst(m, ';', substr(res, 3))
        end
    else if kind == '#' then do
        res = compAST(m, 'block')
        call compSpComment m
        if \ scanReadNl(s) then
            call scanErr s,
                , 'space nl expected in heredata until' stopper
        do while \ abbrev(m.s.src, stopper)
            call mAdd res, '=' strip(m.s.src, 't')
            if \ scanReadNl(s, 1) then do
                if stopper = '$#' then
                    leave
                call scanErr s, 'eof in heredata until' stopper
                end
            end
        return res
        end
endProcedure compUnit

/*--- compile data lines return stmts or expr ------------------------*/
compData: procedure expose m.
parse arg m, ki
    s = m.m.scan
    lines = compAST(m, 'block')
    do forever
        state = 'f'
        do forever
            l = compExpr(m, 'd', ki)
            if \ scanReadNL(s) then
                state = 'l'
            if \ compIsEmpty(m, l) | (state=='' &\abbrev(l, 'c')) then
                call mAdd lines, l
            if state == 'l' then
                leave
            call compComment m
            state = ''
            end
        one = compStmt(m)
        if one == '' then
            leave
        call mAdd lines, one
        call compComment m
        end
    return lines
endProcedure compData

/*--- compile shell and return code ----------------------------------*/
compShell: procedure expose m.
parse arg m
    a = compAst(m, ';')
    m.a.text = ''
    do forever
        one = compPipe(m)
        if one \== '' then
            m.a.text = m.a.text || one
        if \ scanLit(m.m.scan, '$;') then
            return a
        call compSpNlComment m
        end
endProcedure compShell

/*--- compile an expression, type d=data, b=block w=word, s=strip ---*/
compExpr: procedure expose m.
parse arg m, type, ki
    s = m.m.scan
    if length(type) \== 1 | pos(type, 'dsbw') < 1 then
        call scanErr s, 'bad type' type 'in compExpr(,' type','ki ')'
    if length(ki) \== 1 | pos(ki, m.m.chKind';') < 1 then
        call scanErr s, 'bad kind' ki 'in compExpr(,' type','ki ')'
    charsNot = if(type=='b', m.m.chNotBlock,
            , if(type=='w', m.m.chNotWord,m.m.chDol))
    laTx = 9e9
    st = compNewStem(m)
    gotCom = 0
    if pos(type, 'sb') > 0 then do
        call compSpComment m
        gotCom = gotCom | m.m.gotComment
        end
    ki2 = if(ki=='=', '-=', ki)
    do forever
        if scanVerify(s, charsNot, 'm') then do
            call mAdd st, ki2 m.s.tok
            laTx = min(laTx, m.st.0)
            end
        else do
            pr = compPrimary(m, ki, 1)
            if pr = '' then
                leave
            call mAdd st, pr
            laTx = 9e9
            end
        gotCom = gotCom | compComment(m)
        end
    do rx = m.st.0 by -1 to laTx while m.st.rx = ki2
        end
    if pos(type, 'bs') > 0 then do
       if rx >= laTx then
           m.st.rx = strip(m.st.rx, 't')
       m.st.0 = rx
       end
   if ki == '=' then
       if m.st.0 < 1 then
           return 'e='
       else
           ki = '-'
    return substr('ce', 2-gotCom, rx < 1)ki'0*' st
endProcedure compExpr

/*--- compile a primary and return code ------------------------------*/
compPrimary: procedure expose m.
parse arg m, ki, withChain
    s = m.m.scan
    if \ scanLit(s, '$') then
        return ''
    if scanString(s) then     /*wkTst??? brauchts beides? */
        return translate(ki, '.--', '@;=')'=' m.s.val
    if withChain then do
        if scanLit(s, '.', '-') then do
            op = m.s.tok
            return op'('compCheckNN(m, compObj(m, op),
                , 'objRef expected after $'op)
            end
        end
    if pos(ki, '.<') >= 1 then
        f = '. envGetO'
    else
        f = '- envGet'
    if scanLit(s, '{') then do
        if scanLit(s, '?') then
            f = '- envIsDefined'
        else if scanLit(s, '>') then
            f = '- envReadO'
        res = compCheckNE(m, compExpr(m, 'b', '='), 'var name')
        if \scanLit(s, '}') then
            call scanErr s, 'closing } missing after ${'
        return f'(' || comp2Code(m, '-'res)')'
        end
    if scanName(s) then
        return f"('"m.s.tok"')"
    call scanBack s, '$'
    return ''
endProcedure compPrimary

compObj: procedure expose m.
parse arg m, ki
    s = m.m.scan
    pk = compOpKi(m, '?')
    one = compBlock(m, ki pk)
    if one \== '' then
        return compAstAddOp(m, one, ki)
    pp = ''
    if pk \== '' then do
        ki = right(pk, 1)
        pp = left(pk, length(pk)-1)
        end
    one = compPrimary(m, translate(ki, '.', '@'), 0)
    if one \== '' then
        return pp || one
    if ki == '.' then do
        if scanLit(s, 'compile') then do
            if pos(scanLook(s, 1), m.m.chKinC) < 1 then
                call scanErr s, 'compile kind expected'
            call scanChar s, 1
            return pp'. compile(comp(j2Buf()), "'m.s.tok'")'
            end
        end
    call scanBack s, pk
    return ''
endProcedure compObj

compFile: procedure expose m.
parse arg m
    res = compCheckNE(m, compExprBlock(m, '='),
        , 'block or expr expected for file')
    if \ abbrev(res, '.') then do
        end
    else if substr(res, verify(res, '.', n), 3) == '0* ' then do
        st = word(res, 2)
        if m.st.0 = 1 & abbrev(m.st.1, '. envGetO(') then
                /* if undefined variable use new jbuf */
            if pos(')', m.st.1) == length(m.st.1) then
                m.st.1 = left(m.st.1, length(m.st.1)-1) ,
                         || ", '-b')"
        end
    return compASTAddOp(m, res, '<')
endProcedure compFile

/*--- scan an operator chain and a kind ------------------------------*/
compOpKi: procedure expose m.
parse arg m, opt
    s = m.m.scan
    op = ''
    if opt == '<' then do
        call scanVerify s, m.m.chOpNoFi
        op = m.s.tok
        if scanLit(s, '<') then
            return op'<'
        end
    call scanVerify s, m.m.chOp
    op = op || m.s.tok
    k1 = scanLook(s, 1)
    if k1 \== '' & pos(k1, m.m.chKind) > 0 then do
        call scanLit s, k1
        return op || k1
        end
    if opt == '?' | op == '' | pos(right(op, 1), m.m.chKind) > 0 then
        return op
    call scanErr s, 'no kind after ops' op
endProcedure compOpKi

/*--- block or expression --------------------------------------------*/
compExprBlock: procedure expose m.
parse arg m, ki
    s = m.m.scan
    pk = compOpKi(m, '<')
    if right(pk, 1) == '<' then
        return compAstAddOp(m, compFile(m), pk)
    res = compBlock(m, ki pk)
    if res \== '' then
        return res
    if pk \== '' then
        lk = right(pk, 1)
    else
        lk = translate(ki, '.', '@')
    res = compExpr(m, 's', lk)
    if res \== '' then
        return compASTAddOp(m, res, pk)
    call scanBack s, pk
    return res
endProcedure compExprBlock

/*--- compile a pipe and return code ---------------------------------*/
compPipe: procedure expose m.
parse arg m
    s = m.m.scan
    ios = ''
    stmts = ''
    stmtLast = ''
    do forever
        io1 = compRedirIO(m, 1)
        if io1 \== '' then do
            ios = ios',' io1
               call compSpNlComment m
            end
        else do
            if stmtLast \== '' then do
                if \ scanLit(s, '$|') then
                    leave
                call compSpNlComment m
                end
            one = comp2code(m, ';'compStmts(m))
            if one == '' then do
                if stmtLast \== '' then
                    call scanErr s, 'stmts expected after $|'
                if ios == '' then
                    return ''
                leave
                end
           if stmtLast \== '' then
                stmts = stmts'; call pipe' || stmtLast
            stmtLast = ';' one
            end
        end
    if stmts \== '' then
        stmtLast = insert('Begin', stmts, pos('pipe;', stmts)+3) ,
                   || '; call pipeLast' stmtLast'; call pipeEnd'
    if ios \== '' then do
        if stmtLast == '' then
            stmtLast = '; call pipeWriteAll'
        stmtLast = '; call pipeBeLa 'substr(ios, 3) || stmtLast';' ,
                   'call pipeEnd'
        end
    return stmtLast
endProcedure compPipe

/*--- compile an io redirection, return
        if makeExpr then "option", expr
                    else code write inut to standard out -------------*/
compRedirIO: procedure expose m.
parse arg m
    s = m.m.scan
    if \ scanLit(s, '$<', '$>>', '$>') then
        return ''
    opt = substr(m.s.tok, 2)
    return "'"opt"'" comp2Code(m, compFile(m))
endProcedure compRedirIO

/*--- compile stmts (stmt or java) -----------------------------------*/
compStmts: procedure expose m.
parse arg m
    lst = compNewStem(m)
    do forever
        one = compStmt(m)
        if one == '' then do
            do forever
                la = compExpr(m, 's', ';')
                if compIsEmpty(m, la) then
                    leave
                la = strip(comp2code(m, ';'la))
                if right(la, 1) \== ',' then do
                    one = one la
                    leave
                    end
                one = one strip(left(la, length(la)-1))
                call compSpNlComment m
                end
             if one = '' then
                 return 'l*' lst
             one = ';' one
             end
        call mAdd lst, one
        call compSpNlComment m
        end
endProcedure compStmts

/*--- compile a single statement -------------------------------------*/
compStmt: procedure expose m.
parse arg m
    s = m.m.scan
    if scanLit(s, "$=") then do
        res = compAss(m)
        if res == '' then
            call scanErr s, 'assignment expected after $='
        return res
        end
    if scanLit(s, '$@') then do
        if \ scanName(s) then
            return 'l;' comp2Code(m,
                , '@'compCheckNE(m, compExprBlock(m, '@'),
                , "block or expr expected after $@"))
        fu = m.s.tok
        if fu == 'for' | fu == 'with' | fu == 'forWith' then do
            v = comp2Code(m, '-'compCheckNE(m, compExpr(m, 'b', '='),
                   , "variable name after $@for"))
            call compSpComment m
            st = comp2Code(m, ';'compCheckNN(m, compStmt(m, 'with'),
                     , "statement after $@for" v))
            if fu == 'forWith' then
                st = 'call envSetWith envGetO('v');' st
            if abbrev(fu, 'for') then
                st = 'do while envReadO('v');' st'; end'
            if fu == 'forWith' then
                st = 'call envPushWith "";' st '; call envPopWith'
            else if fu == 'with' then
                st = 'call envPushName' v';' st '; call envPopWith'
            return ';' st
            end
        if fu == 'do' then do
            call compSpComment m
            var = if(scanName(s), m.s.tok, '')
            pre = var
            call compSpComment m
            if scanLook(s, 1) \== '=' then
                var = ''
            call compSpComment m
            suf = compExpr(m, 's', ';')
            if \ compIsEmpty(m, suf) then
                suf = comp2Code(m, ':'suf)
            else if var \== '' then
                call scanErr s, "$@do control construct expected"
            else
                suf = ''
            call compSpComment m
            st = comp2Code(m, ";"compCheckNN(m, compStmt(m),
                     , "$@do statement"))
            return "; do" pre suf";",
                if(var \== "", "call envPut '"var"'," var";") st"; end"
            end
        if fu == 'ct' then do
            call compSpComment m
            call compInter(comp2Code(m, ';'compCheckNN(m, compStmt(m),
                , 'ct statement')));
            return '; '
            end
        if fu == 'proc' then do
            nm = compCheckNE(m, compExpr(m, 'b', '='), "proc name")
            call compSpComment m
            st = oRunner(comp2Code(m, ';'compCheckNN(m, compStmt(m),
                , 'proc statement')));
            call envPutO compInter('return' comp2Code(m, '-'nm)), st
            return '; '
            end
        if scanLit(s, '(') then do
            call compSpComment m
            if \ scanLit(s, ')') then
                call scanErr s, 'closing ) expected after $@'fu'('
            return '; call oRun envGetO("'fu'")'
            end
        if scanLit(s, '{', '.{', '-{', '={') then do
            br = m.s.tok
            a = compExpr(m, 'b', if(br == '{', '-', left(br, 1)))
            if \ scanLit(s, '}') then
                call scanErr s, 'closing } expected after $@'fu || br
            res = '; call oRun envGetO("'fu'")'
            if pos(left(a, 1), 'ec') < 1 then
                res = res',' comp2code(m, a)
            return res
            end
        call scanErr s, 'procCall, for, do, ct, proc' ,
                 'or objRef expected after $@'
        end
    if scanLit(s, '$$') then
        return  compCheckNN(m, compExprBlock(m, '='),
            , 'block or expression expected after $$')
    return ''
endProcedure compStmt

compAss: procedure expose m.
parse arg m, aExt
    s = m.m.scan
    sla = scanLook(s)
    slx = verify(sla, m.m.chKind'/'m.m.chOp, 'n')
    if slx > 0 then
       sla = left(sla, slx-1)
    sla = pos('/', sla) > 0
    nm = ''
    if \ sla then do
        nm = compExpr(m, 'b', '=')
        if compIsEmpty(m, nm) then
            return ''
        nm = comp2Code(m, '-'nm)
        if \ scanLit(s, "=") then
            return scanErr(s, '= expected after $=' nm)
        end
    m.m.bName = ''
    vl = compCheckNE(m, compExprBlock(m, '='),
        , 'block or expression after $=' nm '=')
    if sla then
        if m.m.bName == '' then
            call scanErr s, 'missing blockName'
        else
            nm = "'"m.m.bName"'"
    va = compAstAftOp(m, vl)
    if va \== '' & m.va.type == ':' then do
        pu = "call envPushName" nm
        if abbrev(m.m.astOps, '<') then
            call mAdd va, pu ", 'asM'", "call envPopWith"
        else if abbrev(m.m.astOps, '<<') then
            call mAdd va, pu ", 'asM'", "call envPopWith"
        else
            call mAdd va, pu ", 'as1'", "call envPopWith"
        return va
        end
    if compAstKind(m, vl) == '-' then
        return '; call envPut' nm',' comp2Code(m, vl)aExt
    else
        return '; call envPutO' nm',' comp2Code(m, '.'vl)aExt
endProcedure compAss

/*--- block deals with the correct kind and operators
      the content is parsed by compUnit ------------------------------*/
compBlock: procedure expose m.
parse arg m, dKi ops
    s = m.m.scan
    if \ scanLit(s, '{', '¢', '/') then
        return ''
    start = m.s.tok
    if (ops \== '' & pos(right(ops, 1), m.m.chKind) < 1) ,
        | pos(dKi, m.m.chKind) < 1 then
        return scanErr(s, 'bad kind' ops 'for block (def' dKi')')
    if ops == '' then do
        ki = dKi
        end
    else do
       ki = right(ops, 1)
       ops = left(ops, length(ops)-1)
       end
    starter = start
    if start == '{' then
        stopper = '}'
    else if start == '¢' then
        stopper = '$!'
    else do
        call scanVerify s, '/', 'm'
        starter = '/'m.s.tok'/'
        stopper = '$'starter
        if \scanLit(s, '/') then
            call scanErr s, 'ending / after stopper' stopper 'expected'
        end
    res = compUnit(m, ki, stopper)
    if \ scanLit(s, stopper) then do
        if pos(ki, ':|') < 1 | \ abbrev(stopper, '$') then
            call scanErr s, 'ending' stopper 'expected after' starter
        else if \ scanLit(s, substr(stopper, 2)) then
            call scanErr s, 'ending' stopper 'or' substr(stopper, 2),
                    'expected after' starter
        end
    if abbrev(starter, '/') then
        m.m.bName = substr(starter, 2, length(starter)-2)
    else
        m.m.bName = ''
    if m.res.text == '' then
        m.res.text = ' '
    return compAstAddOp(m, res, ops)
endProcedure compBlock

compAssAtt: procedure expose m. aClass
parse arg m
    res = ''
    aClass = ''
    s = m.m.scan
    last = ''
    do forever
        if compSpNlComment(m, '*') then do
            end
        else if pos(scanLook(s, 1), '/!}') > 0 then do
            leave
            end
        else if scanLit(s, ';', '$;') then do
            if last = ';' then
                res = res'; call envWithNext'
            last = ';'
            end
        else do
            s1 = compAss(m, ", 1")
            if s1 == '' then do
                s1 = compStmt(m)
                if s1 == '' then
                    leave
                end
            else do
                if last == ';' then
                    res = res'; call envWithNext'
                last = 'a'
                end
            res = res';' comp2code(m, ';'s1)
            end
        if res ==  '' then
            res = ';'
        end
    if last == '' then
        return res
    else
        return '# call envWithNext "b";' res ,
               '; call envWithNext "e";'
endProcedure compAssAtt

compAssTab: procedure expose m. aClass
parse arg m
    s = m.m.scan
    call compSpNlComment m, '*'
    hy = 0
    tab = ''
    do forever
        bx = m.s.pos
        if \ scanName(s) then
            leave
        hx = hy + 1
        h.hx.beg = bx
        if hx > 1 & bx <= h.hy.end then
            call scanErr s, 'header overlap' m.s.tok 'pos' bx
        h.hx = m.s.tok
        tab = tab', f' m.s.tok 'v'
        h.hx.end = m.s.pos
        hy = hx
        call compSpComment m, '*'
        end
    if tab \== '' then
       aClass = classNew('n* Ass u' substr(tab, 3))
    res = ''
    isFirst = 1
    do while scanReadNl(s)
        do forever
            call compSpNlComment m, '*'
            s1 = compStmt(m)
            if s1 == '' then
                leave
            res = res';' comp2code(m, ';'s1)
            last = 's'
            end
        if pos(scanLook(s, 1), '/!}') > 0 then
            leave

        do qx=1
            bx = m.s.pos
            s1 = compExpr(m, 'w', '=')
            if compIsEmpty(m, s1) then
                leave
            ex = m.s.pos
            if ex <= bx then
                return scanErr(s, 'colExpr backward')
            do hy=1 to hx while bx >= h.hy.end
                end
            hz = hy+1
            if hz <= hx & ex > h.hz.beg then
                call scanErr s, 'value on hdr' h.hy 'overlaps' h.hz
            else if hy > hx | bx >= h.hy.end | ex <= h.hy.beg then
                call scanErr s, 'value from' bx 'to' ex ,
                    'no overlap with header' h.hy
            if qx > 1 then
                nop
            else if isFirst then do
                res = res"; call envWithNext 'b', '"aClass"'"
                isFirst = 0
                end
            else
                res = res"; call envWithNext"
            res = res"; call envPut '"h.hy"'," comp2Code(m, "-"s1)", 1"
            call compSpComment m, '*'
            end
        end
    if isFirst then
        return res
    else
        return '#' res"; call envWithNext 'e'"
endProcedure compassTab

/**** lexicals ********************************************************/
/*--- skip a comment. return 0 if there is none ----------------------*/
compComment: procedure expose m.
parse arg m
    s = m.m.scan
    res = 0
    do forever
        if scanLit(s, '$**') then
            m.s.pos = 1 + length(m.s.src) /* before next nl */
        else if scanLit(s, '$*+') then
            call scanReadNl s, 1
        else if scanLit(s, '$*(') then do
            do forever
                if scanVerify(s, m.m.chDol, 'm') then iterate
                if scanReadNl(s) then iterate
                if compComment(m) then iterate
                if \ scanLit(s, '$') then
                    call scanErr s, 'source end in comment'
                if scanLit(s, '*)') then
                    return 1
                if scanLit(s, '$') then iterate
                if scanString(s) then iterate
                end
            end
        else
            return res
        res = 1
        end
endProcedure compComment

/*--- skip spaces and comments ---------------------------------------*/
compSpComment: procedure expose m.
parse arg m, xtra
    s = m.m.scan
    sp = 0
    co = 0
    do forever
        if scanVerify(s, m.m.chSpa) then
            sp = 1
        else if compComment(m) then
            co = 1
        else if xtra == '' then
            leave
        else if \ scanLit(s, xtra) then
            leave
        else do
            co = 1
            m.s.pos = 1+length(m.s.src)
            end
        end
    m.m.gotComment = co
    return co | sp
endProcedure compSpComment

/*--- skip spaces, NLs and comments ----------------------------------*/
compSpNlComment: procedure expose m.
parse arg m, xtra
    found = 0
    do forever
        if compSpComment(m, xtra) then
            found = 1
        else if scanReadNl(m.m.scan) then
            found = 1
        else
            return found
        end
endProcedure compSpComment
/**** small helper routines ******************************************/
compInter: procedure expose m.
    interpret arg(1)
    return
endProcedure compInter

/*--- if va == null then issue an error with msg --------------------*/
compCheckNN: procedure expose m.
parse arg m, va, msg
    if va == '' then
        call scanErr m.m.scan, msg 'expected'
    return va
endProcedure compCheckNN

/*--- return true iff expression is empty ---------------------------*/
compIsEmpty: procedure expose m.
parse arg m, ex
    if pos(' ', ex) < 1 & pos('COMP.AST.', ex) > 0 then do
         a = substr(ex, pos('COMP.AST.', ex))
         a = compAstAftOp(m, a)
         if m.a.type = 'block' then
             return 0 /* m.a.0 == 0 */
         else
             return m.a.text == ''
         end
    e1 = word(ex, 1)
    return ex = '' | verify(e1, 'ec', 'm') > 0
endProcedure compIsEmpty

/*--- if va == null or empty then issue an error with msg -----------*/
compCheckNE: procedure expose m.
parse arg m, ex, msg
    e1 = left(ex, 1)
    if compIsEmpty(m, ex) then
        call scanErr m.m.scan, msg 'expected'
    return ex
endProcedure compCheckNE

/**** AST = Astract Syntax Graph ***************************************
          goal is to migrate to migrate to old codeGenerator to AST
***********************************************************************/
/*--- create a new AST -----------------------------------------------*/
compAST: procedure expose m.
parse arg m, tp
    n = mNew('COMP.AST')
    m.n.type = tp
    if wordPos(tp, 'block') > 0 then do
        do cx=1 to arg()-2
            m.n.cx = arg(cx+2)
            end
        m.n.0 = cx-1
        end
    else do
        m.n.text = arg(3)
        m.n.0 = 0
        end
    m.a.isAnnotated = 1
    return n
endProcedure compAST

/*--- add operandands to an AST -------------------------------------*/
compASTAddOp: procedure expose m.
parse arg m, a, ops
    if ops == '' then
        return a
    if pos('COMP.AST.', a) < 1 then
        return ops || a
    if m.a.type = 'ops' then do
        m.a.text = ops || m.a.text
        return a
        end
    n = compAst(m, 'ops', ops)
    call mAdd n, a
    return n
endProcedure compAstAddOp

/*--- return the first AST after the operand chain
          put the operands into m.m.astOps ---------------------------*/
compASTaftOp: procedure expose m.
parse arg m, a
    m.m.astOps = ''
    if \ abbrev(a, 'COMP.AST.') then
        return ''
    do while m.a.type == 'ops'
        m.m.astOps = m.a.text || m.m.astOps
        a = m.a.1
        end
    return a
endProcedure compASTAftOpType

/*--- return the kind of an AST --------------------------------------*/
compASTKind: procedure expose m.
parse arg m, a
    m.m.astOps = ''
    if \ abbrev(a, 'COMP.AST.') then
        return left(a, 1)
    c = a
    do while m.c.type == 'ops'
        if m.c.text \== '' then
            return left(m.c.text, 1)
        c = m.c.1
        end
    if a == c then
        return '?'
    return compAstKind(m, c)
endProcedure compASTKind

/*--- return the code for an AST with operand chain trg --------------*/
compAst2Code: procedure expose m.
parse arg m, a, aTrg
    if pos(' ', a) > 0 | \ abbrev(a, 'COMP.AST.') then
        return comp2Code(m, aTrg || a)
    if \ abbrev(a, 'COMP.AST.') then
        call err 'bad ast' a
    do while m.a.type == 'ops'
        aTrg = aTrg || m.a.text
        a = m.a.1
        end
    trg = compAstOpsReduce(m, aTrg)
    if m.a.type == translate(right(trg, 1), ';', '@') then do
        if length(trg) == 1 then do
            if pos(trg, ';@') > 0  then
                return 'do;' m.a.text ';end'
            else
                return m.a.text
            end
        else
            return compAST2Code(m, a, left(trg, length(trg)-1))
        end
    if m.a.type == 'block' then do
        op = right(trg, 1)
        tLe = left(trg, length(trg)-1)
        call compASTAnnBlock m, a
        if pos(m.a.maxKind, '.-<') > 0 & pos(op, '.-|?') > 0 then do
            if m.a.0 = 1 then do
                o1 = if(op=='-', '-', '.')
                r = compAst2Code(m, m.a.1, o1)
                r = compC2C(m, o1, compAstOpsReduce(m, tLe||o1), r)
                if pos(op, '.-<') > 0 then
                    return '('r')'
                else
                    return r
                end
            if m.a.0 = 0 & op == '?' then
                return compC2C(m, '.', compAstOpsReduce(m, tLe'.'))
            if op == '-' then do
                cd = ''
                do cx = 1 to m.a.0
                    cd = cd '('compAst2Code(m, m.a.cx, '-')')'
                    end
                return compC2C(m, '-', trg, substr(cd, 2))
                end
            call scanErr m.m.scan, 'bad block cardinality' aTrg
            end
        cd = ''
        do cx = 1 to m.a.0
            cd = cd';' compAst2Code(m, m.a.cx, ';')
            end
        if right(trg, 1) == '@' then
            trg = overlay(';', trg, length(trg))
        return compC2C(m, ';', trg, 'do;' cd'; end')
        end
    else if m.a.type == ';' then do
        return compC2C(m, ';', trg, m.a.text)
        if right(trg, 1)  == '-' then
            return compAst2Code(m, "- o2String('"oRunner(m.a.text)"')",
                , trg)
        if right(trg, 1)  == '<' then
            return compAst2Code(m, "< o2File('"oRunner(m.a.text)"')",
                , trg)
        end
    else if m.a.type == ':' then do
        if m.a.0 = 0 then
            call mAdd a, 'call envPushWith', 'call envPopWith'
        return compC2C(m, ';', trg,
            , 'do;' m.a.1';' m.a.text';' m.a.2'; end')
        end
    call scanErr m.m.scan, 'implement type' m.a.type 'for' a 'trg' trg
endProcedure compAst2Code

/*--- do a chain of code transformations
          from code of kind fr by opList


    op  as from kind               operand
     =  constant                   -
     -  rexx string Expr           cast to string/ concat file/output
     .  rexx object Expr           cast to object
     <  rexx file   Expr           cast to file
     ;  rexx Statements            execute, write obj, Str
     @  -                          cast to ORun, run an obj, write file
     |  -                          extract exactlyOne
     ?  -                          extract OneOrNull
----------------------------------------------------------------------*/

compC2C: procedure expose m.
parse arg m, fr, opList, code
oldCode = fr':' code '==>' opList '==>'
    do tx=length(opList) by -1 to 1
        to = substr(opList, tx, 1)
        if fr == to then
            iterate
        nn = '||||'
        if to == '-' then do
            if fr == '=' then
                 nn = quote(code)
            else if abbrev(fr code, '. envGetO(') then
                nn =  'envGet(' || substr(code, 9)
            else if fr == ';' then
                nn = "o2String('"oRunner(code)"')"
            else if pos(fr, '.<') > 0 then
                nn = "o2String("code")"
            end
        else if to == '.' then do
            if fr == '=' then
                 nn = quote(s2o(code))
            else if abbrev(fr expr, '- envGet(') then
                nn = 'envGetO('substr(expr, 8)
            else if fr == '-' then
                nn = 's2o('code')'
            else if fr == '<' then
                 nn = code
            else if fr == ';' then
                nn = quote(oRunner(code))
            end
        else if to == '@' then do
            if fr == '.' then
                nn = 'call oRun' code
            else if fr == '<' then
                nn = 'call pipeWriteAll' code
            else if fr == ';' then
                nn = code
            to = ';'
            end
        else if to == ';' then do
            if fr == '=' then
                nn = 'call out' quote(code)
            else if fr == '-' then
                nn = 'call out' code
            else if fr == '.' | fr == '<' then
                nn = 'call outO' code
            end
        else if to == ':' then do
            if fr == '=' then
                 nn = quote(code)
            else
                nn = code
            to = ';'
            end
        else if to == '<' then do
            if fr == '-' then
                 nn = 'file('code')'
            else if fr == '=' then
                 nn = "file("quote(code)")"
            else if fr == '.' then
                nn = 'o2File('code')'
            else if fr == ';' then
                nn = 'o2File('oRunner(code)')'
            end
        else if to == '|' | to == '?' then do
            if fr == '<' | fr == '.' then
                nn = 'fileSingle('code if(to == '|','', ", ''")')'
            else if fr == '@' | fr == ';' then
                      /* ???wkTst optimize: do it directly */
                nn = compC2C(m, fr, to'<', code)
            to = '.'
            end
        if nn == '||||' then
            return scanErr(m.m.scan,
                ,'compC2C bad fr' fr 'to' to 'list' opList)
        fr = to
        code = nn
        end
    return code
endProcedure compC2C

/*--- reduce a chain of operands -------------------------------------*/
          eliminate duplicates and identity transformations ----------*/
compAstOpsReduce: procedure expose m.
parse arg m, ops
    ki = ops
    ki  = space(translate(ops, ' ', 'e('), 0)
    fr = ';<; <;< -.- <@<'
    to = ';   <   -   <  '
    fr = fr '== -- .. << ;; @@ @('
    to = to '=  -  .  <  ;  @  (@'
    wc = words(fr)
    do until ki = oldKi
        oldKi = ki
        do wx=1 to wc
            do forever
                wf = word(fr, wx)
                cx = pos(wf, ki)
                if cx < 1 then
                    leave
                ki = left(ki, cx-1) || word(to, wx) ,
                                    || substr(ki, cx+length(wf))
                end
            end
        end
    return ki
endProcedure compASTOpsReduce

/*--- annotate a block if necessary ----------------------------------*/
compASTAnnBlock: procedure expose m.
parse arg m, a
    if m.a.isAnnotated == 1 then
        return
    mk = ''
    do cx=1 to m.a.0
       c = m.a.cx
       if pos(' ', c) > 0 | \ abbrev(c, 'COMP.AST.') then
           ki = left(c, 1)
       else if \ abbrev(c, 'COMP.AST.') then
           return scanErr(m.m.scan, 'bad ast' c 'parent' a) /0
       else
           call scanErr m.m.scan, 'implement kind of' c 'type' m.c.type
       if pos(ki, '=-.<;@:|') < 1 then do
           if pos(ki, 'el0') < 1 then
               call err 'bad kind' ki
           end
       else if mk == '' | pos(ki, '=-.<;@:|') > pos(mk, '=-.<;@:|') then
           mk = ki
       end
    m.a.maxKind = mk
    m.a.isAnnotated = 1
    return
endProcedrue compASTAnnBlock
/**** old code generator ***********************************************
          plan is to replace it with AST ******************************/
/*--- transform abstract syntax tree to code ------------------------
  wkTst??? codeTree besser dokumentieren
           optimizer an/und/abschaltbar machen
                (test sollte laufen, allenfalls gehen rexx variabeln
                                       verloren)
        syntax tree is simple, only where
        * a transformation is needed from several places or
        * must be deferred for possible optimizations

sn = ops*                 syntax node            op or syntax function
    ( '=' constant                            none
    | '-' rexxExpr     yielding string            cast to string
    | '.' rexxExpr     yielding object            cast to object
    | '<' rexxExpr     yielding file            cast to file
    | ';' rexxStmts                            execute, write obj, Str
    | '*' stem         yielding multiple sn    none
    )

ops = '@'                                    cast to ORun
    | '|'                                    single
    | 'e'                                    empty = space only
    | 'c'                                    empty = including a comment
    | '0'                                    cat expression parts
    | 'l'                                    cat lines
    | '('                                    add ( ... ) or do ... end
---------------------------------------------------------------------*/

comp2Code: procedure expose m.
parse arg m, ki expr
    if expr == '' & pos(' ', ki) < 1 & pos('COMP.AST.', ki) > 0 then do
         cx = pos('COMP.AST.', ki)
         return compAst2Code(m, substr(ki, cx), left(ki, cx-1))
         end
    /* wkTst??? optimize: use stem with code and interpret */
    if expr = '' & pos(right(ki, 1), '@;=') < 1 then
        return scanErr(m.m.scan, 'comp2Code empty expr' ki expr)
    do forever
        ki = comp2CodeKind(m, ki)
        if length(ki) <= 1 then
            if pos(ki, m.m.chKind';<') > 0 then
                return expr
            else
                call err 'comp2Code bad return' ki expr
        fr = right(ki, 1)
        to = substr(ki, length(ki)-1, 1)
        opt = ''
        if pos(to, 'l0') > 0 | (to == '*' & fr == '*') then do
            opt = to
            to = substr(ki, length(ki)-2, 1)
            end
        toBef = to
        nn = '||||'
        if fr == '*' then do
            if opt == '' then
                call scanErr m.m.scan, 'no sOp for * kind' ki expr
            cat = comp2CodeCat(m, expr, opt, to)
            parse var cat to nn
            end
        else if to == '-' then do
            if fr == '=' then
                 nn = quote(expr)
            else if abbrev(fr expr, '. envGetO(') then
                nn =  'envGet(' || substr(expr, 9)
            else if fr == ';' then
                nn = "o2String('"oRunner(expr)"')"
            else if pos(fr, '.<') > 0 then
                nn = "o2String("expr")"
            end
        else if to == '.' then do
            if fr == '=' then
                 nn = quote(s2o(expr))
            else if abbrev(fr expr, '- envGet(') then
                nn = 'envGetO('substr(expr, 8)
            else if fr == '-' then
                nn = 's2o('expr')'
            else if fr == '<' then
                 nn = expr
            else if fr == ';' then
                nn = quote(oRunner(expr))
            end
        else if to == '@' then do
            if fr == '.' then
                nn = 'call oRun' expr
            else if fr == '<' then
                nn = 'call pipeWriteAll' expr
            else if fr == ';' then
                nn = expr
            to = ';'
            end
        else if to == ';' then do
            if fr == '=' then
                nn = 'call out' quote(expr)
            else if fr == '-' then
                nn = 'call out' expr
            else if fr == '.' | fr == '<' then
                nn = 'call outO' expr
            else if fr == '#' then
                nn = 'call envPushWith ;'expr'; call envPopWith'
            end
        else if to == ':' then do
            if fr == '=' then
                 nn = quote(expr)
            else
                nn = expr
            to = ';'
            end
        else if to == '<' then do
            if fr == '-' then
                 nn = 'file('expr')'
            else if fr == '=' then
                 nn = "file("quote(expr)")"
            else if fr == '.' then
                nn = 'o2File('expr')'
            else if fr == ';' then
                nn = 'o2File('oRunner(expr)')'
            end
        else if to == '(' then do
            nn = compAddBracks(m, fr, expr)
            to = fr
            end
        else if to == '|' | to == '?' then do
            if fr == '<' | fr == '.' then do
                nn = 'fileSingle('expr if(to == '|','', ", ''")')'
                to = '.'
                end
            else if fr == '@' | fr == ';' then do
                to = to'<'fr
                nn = expr
                end
            end
        if nn == '||||' then
            return scanErr(m.m.scan,
                ,'comp2code bad fr' fr 'to' toBef 'for' ki expr)
        ki = left(ki, length(ki)-2-length(opt))to
        expr = nn
        end
endProcedure comp2Code

/*--- optimize operands: eliminate duplicates and
                         identity transformations -------------------*/
comp2CodeKind: procedure expose m.
parse arg m, ki
    ki = '$'space(translate(ki, '  ', 'ce'), 0)
    fr.2 = '== -- .. << ;; (( -( .(  ;( (< @;  @@ ;@ @( $l $0 @#'
    to.2 = '=   -  .  <  ;  ( (- (.  (; <  ;   @  @  (@ $  $  ;#'
    fr.3 = ';0; ;l; -.- -;- .-. .;. ;<; ;<( <(; @(- @(l |(l ?(l'
    to.3 = ' 0;  l;   -   -   .   .   ; ;<  <;  ;(- ;(l (|l (?l'
    do until ki = oldKi
        oldKi = ki
        do le=3 by-1 to 2
            do cx=1 while cx <= length(ki)+1-le
                wx = wordPos(substr(ki, cx, le), fr.le)
                if wx > 0 then
                    ki = left(ki, cx-1) || ,
                        word(to.le, wx) || substr(ki, cx+le)
                end
            end
        end
    return substr(ki, 2)
endProcedure comp2CodeKind

/*--- generate one codeString for one stem -------------------------*/
comp2CodeCat: procedure expose m.
parse arg m, st, sOp, trgt
    toCode = trgt == '@' | trgt == ';'
    if m.st.0 < 1 & trgt \== '<' then
        return trgt
    tr1 = trgt
    if \ toCode then do
                        /* check wether we need to evaluate statements
                            and cast the outptut to an object */
        maxTy = 0
         do x=1 to m.st.0
            maxTy = max(maxTy, pos(left(m.st.x, 1), '=-.<;@'))
            end
        if trgt \== '<' then do
            if maxTy >= 5 then do
                tr1 = ';'
                toCode = 1
                end
            end
        else do                        /* handle files */
            if maxTy > 1 then do    /* not constant */
                res = ';'
                do sx=1 to m.st.0
                    res = res';' comp2Code(m, ';'m.st.sx)
                    end
                return '<'res
                end
                                    /* constant file write to jBuf */
            buf = jOpen(jBuf(), m.j.cWri)
            do sx=1 to m.st.0
                call jWrite buf, substr(m.st.sx, 3)
                end
            return '<' quote(jClose(buf))
            end
        end

    if m.st.0 = 1 then do
        if trgt == '|' | trgt == '?' then
            return left(m.st.1, 1)  comp2Code(m, m.st.1)
        else if trgt \== '<' then
            return trgt comp2Code(m, trgt || m.st.1)
        end
    tr2 = tr1
    if toCode then do
        mc = '; '
        if sOp == 0 then do
            mc = ''
            tr2 = ':'
            end
        end
    else if sOp == '0' then
        mc = if(tr1 == '.' | tr1 == '-', '', ' || ')
    else if sOp == 'l' then
        mc = ' '
    else
        call scanErr m.m.scan, 'bad sOp' sOp ,
            'in comp2CodeCat('m',' st',' sOp',' trgt')'
    if symbol('m.st.1') \== 'VAR' then
        return err("bad m."st'.1')
    sep = if(tr1 == '.' | tr1 == '-' | tr1 == '=', ' || ', ' ')
    sep = if(sOp = 0, ' || ', ' ')
    tr3 = left(tr2, sOp \== 0)
    res = comp2Code(m, tr3 || m.st.1)
    do sx = 2 to m.st.0
        if (tr2 == '.' | tr2 == '-') ,
            & (m.st.sx = '-' | m.st.sx = '.') then do
                /* empty expr is simply a rexx syntax space */
            if right(res, 1) \== ' ' then
                res = res' '
            end
        else do
            act = comp2Code(m, tr3 || m.st.sx)
            res = compCatRexx(res, act, mc, sep)
            end
        end
    return copies(trgt || sOp, tr1 \== trgt)tr1 res
endProcedure comp2CodeCat

/*--- add expression brackets if necessary --------------------------*/
compAddBracks: procedure expose m.
parse arg m, ki, ex
    if ki == ';' then
         return 'do;' ex || left(';', ex \= '') 'end'
    if \ (ki == '.' | ki == '-') then
        return ex
    ex = strip(ex)
    e1 = left(ex, 1)
    if e1 == '(' & pos('(', ex, 2) = 0 & pos(')', ex) = length(ex) then
        return ex
    if pos(e1, '"''') > 0  & pos(e1, ex, 2) = length(ex) then
        return ex
    return '('ex')'
endProcedure compAddBracks

/*--- cat two rexx parts, avoid strange effects--------------------*/
compCatRexx: procedure expose m.
parse arg le, ri, mi, sep
    if mi \== '' then
        return le || mi || ri
    lr = right(le, 1)
    rl = left(ri, 1)
    if (lr == "'" | lr == '"') then do
        if rl == lr then                /* "a","b" -> "ab" */
            return left(le, length(le)-1) || substr(ri, 2)
        else if  rl == '(' then            /* "a",( -> "a" || ( */
            return le||sep||ri            /* avoid function call    */
        end
    else if pos(lr, m.comp.idChars) > 0 then
        if pos(rl, m.comp.idChars'(') > 0 then
            return le || sep || ri        /* a,b -> a || b */
    return le || mi || ri
endProcedure compCatRexx

/*--- push an empty stem on the stack --------------------------------*/
compNewStem: procedure expose m.
parse arg m
    st = mAdd('COMP.STEM', '')
    do ix=1 to arg()-1
        m.st.ix = arg(ix+1)
        end
    m.st.0 = ix-1
    return st
endProcedure compNewStem

/* copy comp end ******************************************************/
}¢--- A540769.WK.REXX.O13(CONSUMGE) cre=2012-06-20 mod=2012-06-28-17.29.55 A540769 ---
$#@
$=out=~tmp.sql
$=exclNew=1
if 1 then $@¢
    $>$out(rz2Sql)
    $@gen{rz2, dbof, QMW0008}
    $@gen{rz2, dp2g, QMW0013}
    $@gen{rz2, dvbp, QMW0010}
$!
if 1 then $@¢
    $>$out(rz4Sql)
    $@gen{rz4, dbol}
    $@gen{rz4, dp4g}
$!
if 1 then $@¢
    $>$out(rz1Sql)
    $@gen{rz1, dbaf, QMW0001}
    $@gen{rz1, dbtf, QMW0002}
    $@gen{rz1, dbba, QMW0005}
    $@gen{rz1, dblf}
    $@gen{rz1, dvtb, QMW0006}
    $@gen{rz1, dboc, QMW0007}
$!
if 1 then $@¢
    $>$out(rz8Sql)
    $@gen{rz8, dc0g}
    $@gen{rz8, dd0g}
    $@gen{rz8, dp8g}
    $@gen{rz8, daeg}
    $@gen{rz8, dcvg}
    $@gen{rz8, ddvg}
    $@gen{rz8, dx0g}
$!
if 1 then $@¢
    $>$out(rzzSql)
    $@gen{rzz, de0g}
    $@gen{rzz, devg}
$!

$@proc gen $@¢
    parse upper arg ., rz, subsys
    $=rz=-rz
    $=subsys=-subsys
    $=isElar=-wordPos($subsys, 'DVBP DBBA DVTB DEVG DCVG DDVG')>0
    say 'gen rz='$rz', subsys='$subsys', isElar='$isElar
    $$ ¢$subsys!
    if m.done.rz \== 1 then $@¢
        $@rzBegin()
        m.done.rz = 1
        $!
$@=/genAll/
--************************************************************
$@¢if \ $isElar then  $@=¢
--$'$$' fehlende Fullcopies Tablespaces, letzte 8 Tage:
$! else $@=¢
--$'$$' DXB - fehlende Fullcopies TS, letzte 8 Tage:
$! $!
--************************************************************

$@missFullcopies1()

$@exclude{PT}

$@missFullcopies2db{8}

--************************************************************
$@¢if \ $isElar then  $@=¢
--$'$$' fehlende Fullcopies Indexspaces, letzte 8 Tage:
$! else $@=¢
--$'$$' DXB - fehlende Fullcopies IX, letzte 8 Tage:
$! $!
--************************************************************

 SELECT SUBSTR(IX.CREATOR,1,8) AS CREATOR
       ,SUBSTR(IX.NAME,1,8) AS IXNAME
       ,SUBSTR(IX.DBNAME,1,8) AS DBNAME
       ,SUBSTR(IX.INDEXSPACE,1,8) AS IXSPACE
       ,IP.PARTITION
       ,DATE(IX.CREATEDTS) AS CREATEDATE
 FROM SYSIBM.SYSINDEXES IX,
      SYSIBM.SYSINDEXPART IP
 WHERE IX.CREATOR = IP.IXCREATOR
   AND IX.NAME    = IP.IXNAME
   AND IX.COPY    = 'Y'
   AND IP.SPACE <> -1
   AND DATE(IX.CREATEDTS) < CURRENT DATE

   $@exclude{IX}
   AND NOT EXISTS
       (SELECT ' '
        FROM  SYSIBM.SYSCOPY CP
        WHERE IX.DBNAME     = CP.DBNAME
          AND IX.INDEXSPACE = CP.TSNAME
          AND (IP.PARTITION = CP.DSNUM OR CP.DSNUM = 0)
          AND CP.ICTYPE IN ('F','R','X')
          AND CP.TIMESTAMP > CURRENT TIMESTAMP - 8 DAYS
       )
 ORDER BY CREATOR, IXNAME, IP.PARTITION
 WITH UR;

--************************************************************
$@¢if \ $isElar then  $@=¢
--$'$$' Imagecopy Datasets die nicht katalogisiert sind:
$! else $@=¢
--$'$$' DXB - Imagecopy Datasets, nicht katalogisiert:
$! $!
--************************************************************

$@¢ if $exclNew | wordPos($subsys, DBOF) > 0 then $@=¢
WITH DS AS
(
SELECT DBNAME, TSNAME, DSNUM
      ,MAX(ICDATE) ICDATE
      ,MAX(JOBNAME)JOBNAME
      ,DSNAME
  FROM SYSIBM.SYSCOPY C
 WHERE ICTYPE IN ('F','I')
   AND C.TIMESTAMP >= CURRENT TIMESTAMP - 21 DAYS
$! else $@=¢
SELECT SUBSTR(DBNAME,1,8) AS DBNAME
      ,SUBSTR(TSNAME,1,8) AS TSNAME
      ,CHAR(DSNUM) AS PART
      ,ICDATE
      ,JOBNAME
      ,DSNAME
  FROM SYSIBM.SYSCOPY C
 WHERE ICTYPE IN ('F','I')
   AND C.TIMESTAMP >= CURRENT TIMESTAMP - 21 DAYS
   AND S100447.DSLOCATE(DSNAME) IS NULL
$!
$!

$@exclude{C}
$@¢ if $exclNew | wordPos($subsys, DBOF) > 0 then $@=¢
 GROUP BY DBNAME, TSNAME, DSNUM, DSNAME
)
SELECT SUBSTR(DBNAME,1,8) AS DBNAME
      ,SUBSTR(TSNAME,1,8) AS TSNAME
      ,CHAR(DSNUM) AS PART
      ,ICDATE, JOBNAME, DSNAME
    FROM DS
    where S100447.DSLOCATE(DSNAME) IS NULL
$!
$!
ORDER BY DBNAME, TSNAME, PART
WITH UR;

$@¢
if wordPos($subsys, DBOF) > 0 then
$@=¢
--************************************************************
--$'$$' fehlende Fullcopies XBS Tablespaces, letzte 2 Tage:
--************************************************************

$@missFullcopies1()
   AND PT.DBNAME = 'BE01A1P'
   AND ( PT.TSNAME LIKE 'A00%'
      OR PT.TSNAME LIKE 'A01%'
      OR PT.TSNAME LIKE 'A02%' )
$@missFullcopies2{2}

$!
if $isElar & $subsys \= DBBA then $@=/elar2/
--************************************************************
--$'$$' XB  - kein oder falscher eintrag in txbc181:
--************************************************************

SELECT SUBSTR(T1.DBNAME,1,8)  AS DBNAME
      ,SUBSTR(T1.NAME,1,8)    AS NAME
      ,T1.PARTITION
      ,SUBSTR(T1.CREATOR,1,8) AS CREATOR
      ,T1.TABLE
      ,ST.XBC181_STATUS
  FROM (
SELECT SP.DBNAME
      ,SP.NAME
      ,PT.PARTITION
      ,SUBSTR(TB.CREATOR,1,18) AS CREATOR
      ,SUBSTR(TB.NAME,1,18)    AS TABLE
  FROM SYSIBM.SYSTABLESPACE SP
      ,SYSIBM.SYSTABLEPART  PT
      ,SYSIBM.SYSTABLES     TB
 WHERE SP.DBNAME LIKE 'XB%'
   AND SP.PARTITIONS > 0
   AND TB.NAME LIKE 'XB%'
   AND SP.DBNAME = PT.DBNAME
   AND SP.NAME   = PT.TSNAME
   AND SP.DBNAME = TB.DBNAME
   AND SP.NAME = TB.TSNAME
   AND TB.TYPE = 'T'
       ) AS T1
LEFT OUTER JOIN BUA.TXBC181 ST
  ON T1.CREATOR = ST.XBC181_CREATOR
 AND T1.TABLE     = ST.XBC181_TABNAME
 AND T1.PARTITION = ST.XBC181_PARTNR
INNER JOIN BUA.TXBC111
   ON DBNAME = EYPREF || ENSTORAR || ENSEG

WHERE ST.XBC181_STATUS IS NULL
   OR ST.XBC181_STATUS NOT IN ('UL','FZ','RU','RO')
WITH UR;

--************************************************************
--$'$$' xb  - fehlende fullcopies ts, letzte 8 tage:
--************************************************************

SELECT SUBSTR(TB.DBNAME,1,8)          AS DBNAME
      ,SUBSTR(TB.TSNAME,1,8)          AS TSNAME
      ,ST.XBC181_PARTNR               AS PART
      ,SUBSTR(ST.XBC181_CREATOR,1,8)  AS CREATOR
      ,SUBSTR(ST.XBC181_TABNAME,1,18) AS TABLE
      ,ST.XBC181_STATUS
  FROM BUA.TXBC181 ST
      ,SYSIBM.SYSTABLES TB
 WHERE ST.XBC181_STATUS IN ('RU','FZ','RO')
   AND ST.XBC181_TABNAME = TB.NAME
   AND TB.TYPE = 'T'
   AND NOT EXISTS
       (SELECT ' '
        FROM  SYSIBM.SYSCOPY CP
        WHERE TB.DBNAME = CP.DBNAME
          AND TB.TSNAME = CP.TSNAME
          AND (ST.XBC181_PARTNR = CP.DSNUM  OR  CP.DSNUM = 0)
          AND CP.ICTYPE IN ('F','R','X')
          AND CP.TIMESTAMP > CURRENT TIMESTAMP -  8  DAYS
         )
$@¢if wordPos($subsys, 'DVBP') > 0 then $@=¢
   AND NOT (TB.DBNAME = 'XBD2R001')
   AND NOT (TB.DBNAME = 'XBD2R002')
   AND NOT (TB.DBNAME = 'XBDPL001')
   AND NOT (TB.DBNAME = 'XBDPL002')
   AND NOT (TB.DBNAME = 'XBDL1001')
   AND NOT (TB.DBNAME = 'XBDL1002')
   AND NOT (TB.DBNAME = 'XBDL0001')
   AND NOT (TB.DBNAME = 'XBDL0002')
   AND NOT (TB.DBNAME = 'XBDPK001')
   AND NOT (TB.DBNAME = 'XBDPK002')
   AND NOT (TB.DBNAME = 'XBDJH001')
   AND NOT (TB.DBNAME = 'XBDJH002')
   AND NOT (TB.DBNAME = 'XBDT0001')
   AND NOT (TB.DBNAME = 'XBDT0002')
   AND NOT (TB.DBNAME = 'XBDT2001')
   AND NOT (TB.DBNAME = 'XBDT2002')
   AND NOT (TB.DBNAME = 'XBDT3001')
   AND NOT (TB.DBNAME = 'XBDT3002')
   AND NOT (TB.DBNAME = 'XBDM3001')
   AND NOT (TB.DBNAME = 'XBDM3002')
   AND NOT (TB.DBNAME = 'XBDT1001')
   AND NOT (TB.DBNAME = 'XBDT1002')
   AND NOT (TB.DBNAME = 'XBDNT001')
   AND NOT (TB.DBNAME = 'XBDNT002')
$! $!
order by TB.DBNAME, TB.tsNAME, ST.XBC181_PARTNR
WITH UR;

--************************************************************
--$'$$' XB  - imagecopy datasets, nicht katalogisiert:
--************************************************************

SELECT CP.DBNAME
      ,CP.TSNAME
      ,CP.DSNUM
      ,CP.ICDATE
      ,CP.JOBNAME
      ,CP.DSNAME
  FROM BUA.TXBC181      ST
      ,SYSIBM.SYSTABLES TB
      ,SYSIBM.SYSCOPY   CP
 WHERE ST.XBC181_STATUS IN ('RU','FZ','RO')
   AND ST.XBC181_TABNAME = TB.NAME
   AND TB.TYPE = 'T'
   AND TB.DBNAME = CP.DBNAME
   AND TB.TSNAME = CP.TSNAME
   AND ST.XBC181_PARTNR = CP.DSNUM
   AND CP.ICTYPE IN ('F','I')
   AND CP.TIMESTAMP >= CURRENT TIMESTAMP - 21 DAYS
   AND S100447.DSLOCATE(CP.DSNAME) IS NULL
order by CP.DBNAME, CP.tsNAME, CP.DSNUM
WITH UR;

--************************************************************
--$'$$' XB  - unld/punch datasets, nicht katalogisiert:
--************************************************************

SELECT SUBSTR(XBC181_CREATOR,1,8)  AS CREATOR
      ,SUBSTR(XBC181_TABNAME,1,18) AS TABLE
      ,XBC181_PARTNR               AS PART
      ,XBC181_UNL_DSN_C            AS PUNCH
      ,XBC181_UNL_DSN              AS SYSREC
  FROM BUA.TXBC181
WHERE XBC181_STATUS IN ('UL')
  AND ( S100447.DSLOCATE(CHAR(XBC181_UNL_DSN_C)) IS NULL
   OR   S100447.DSLOCATE(CHAR(XBC181_UNL_DSN  )) IS NULL )
order by XBC181_CREATOR, XBC181_TABNAME, XBC181_PARTNR

WITH UR;

$/elar2/
if $isElar then $@=/elar3/
--************************************************************
--$'$$' xb  - tablepaces mit > 200 Partitionen:
--************************************************************

 SELECT DBNAME, NAME, PARTITIONS
   FROM SYSIBM.SYSTABLESPACE
  WHERE PARTITIONS > 200
    AND DBNAME LIKE 'XB%'

   ---------  START EXCLUDE LIST -------------------------------

 --AND NOT (DBNAME = 'XBxxxxx'  AND NAME = 'xxxxxxx' ) -- comment

   ---------  END EXCLUDE LIST ---------------------------------

 ORDER BY PARTITIONS DESC
 WITH UR;

$/elar3/
$!
--************************************************************
--$'$$' LOB-Tablespaces mit falschen Spezifikationen:
--************************************************************

SELECT SUBSTR(DBNAME,1,8) AS DBNAME
      ,SUBSTR(NAME,1,8) AS TSNAME
      ,BPOOL
      ,LOG
FROM   SYSIBM.SYSTABLESPACE S
WHERE  TYPE = 'O'
  AND (BPOOL NOT IN('BP8','BP32K') OR LOG = 'N')
$@¢ if $exclNew then $@=¢
    $@exclGen{S, F}
$! else $@=¢
  AND DBNAME NOT IN ('DSNDB01','DSNDB06','DSNDB04','DSNTESQ'
                    ,'DUTILTST','XSN8D71L','DB2XML')
  AND DBNAME NOT LIKE 'DSNX%'
  AND DBNAME NOT LIKE 'IDTA%'
$@¢ if pos($subsys, 'DBOF') > 0 then $@#¢
  AND DBNAME NOT LIKE 'DB2OSC%'
  AND DBNAME NOT LIKE 'DSNO%'
$! $!
  AND DBNAME NOT LIKE 'DB2PLAN%'
$!
$!
ORDER BY DBNAME, TSNAME
WITH UR;

--************************************************************
--$'$$' Tablespaces mit fehlerhafter Spezifikation:
--************************************************************

SELECT DISTINCT SUBSTR(TS.DBNAME,1,8) AS DBNAME
      ,SUBSTR(TS.NAME,1,8) AS TSNAME
      ,TS.BPOOL
      ,SUBSTR(PT.STORNAME,1,8) AS STORNAME
      ,PT.STORTYPE
FROM SYSIBM.SYSDATABASE DB,
     SYSIBM.SYSTABLESPACE TS,
     SYSIBM.SYSTABLEPART PT
WHERE DB.NAME = TS.DBNAME
  AND DB.NAME = PT.DBNAME
  AND TS.NAME = PT.TSNAME
$@exclude{PT,F}
  AND DB.TYPE <> 'W'
  AND (TS.BPOOL =  'BP0'
       OR PT.STORNAME <> 'GSMS'
       OR PT.STORTYPE =  'E')
ORDER BY DBNAME, TSNAME
WITH UR;
$@¢ if $exclNew then $@=/new/
--************************************************************
--$'$$' Indexspaces mit fehlerhafter Spezifikation:
--************************************************************

SELECT DISTINCT SUBSTR(IX.CREATOR,1,8) AS CREATOR
      ,SUBSTR(IX.NAME,1,8) AS IXNAME
      ,IX.BPOOL
      ,SUBSTR(IP.STORNAME,1,8) AS STORNAME
      ,IP.STORTYPE
FROM SYSIBM.SYSINDEXES IX,
     SYSIBM.SYSINDEXPART IP
WHERE IX.CREATOR = IP.IXCREATOR
  AND IX.NAME    = IP.IXNAME
$@exclude{IX,F}
$@¢ if $subsys = 'DBAF' then $@=¢
   AND NOT (IX.DBNAME LIKE 'DHPS%')
$! $!
  AND (IX.BPOOL = 'BP0'
       OR IP.STORNAME <> 'GSMS'
       OR IP.STORTYPE = 'E')
ORDER BY CREATOR, IXNAME
WITH UR;

--************************************************************
--$'$$' tableParts mit pri/secQty <> -1 oder vielen extents
--************************************************************

 SELECT SUBSTR(PT.DBNAME,1,8) "db"
       ,SUBSTR(PT.TSNAME,1,8) "ts"
       ,PT.PARTITION "part"
       ,pt.pQty "priQty"
       ,pt.sQty "secQty"
       ,r.extents
 FROM
      SYSIBM.SYSTableSpace ts
   join   SYSIBM.SYSTABLEPART pt
     on pt.dbName = ts.dbName and pt.tsname = ts.name
   left join sysibm.sysTableSpaceStats r
     on    pt.dbNAME = r.DBNAME
       AND pt.tsName = r.NAME
       AND ts.dbid     = r.dbid
       AND ts.psid     = r.psid
       AND pt.partition = r.partition
 WHERE (pt.pQty <> -1 or pt.sQty <> -1 or r.extents > 300)
$@exclGen{PT, F}
 ORDER BY pt.DBNAME, pt.tsNAME, PT.PARTITION
 fetch first 999 rows only
 WITH UR;

--************************************************************
--$'$$' IndexParts mit pri/secQty <> -1 oder vielen extents
--************************************************************

SELECT SUBSTR(Ip.ixCREATOR,1,8) AS CREATOR
      ,SUBSTR(Ip.ixNAME,1,16) AS IXNAME
      ,IP.PARTITION
      ,ip.pQty "priQty"
      ,ip.sQty "secQty"
      ,ip.extents
FROM
    SYSIBM.SYSINDEXES   Ix
  join  SYSIBM.SYSINDEXPART IP
      on ix.creator = ip.ixCreator and ix.name = ip.ixName
  left join SYSIBM.SYSINDEXSpaceStats r
    on ix.creator = r.creator and ix.name = r.creator
       and ix.dbid = r.dbid and ix.isobid = r.isobid
       and ip.partition = r.partition
 WHERE (ip.pQty <> -1 or ip.sQty <> -1 or r.extents > 300)
$@exclGen{IX, F}
 order by ix.creator, ix.name, ip.partition
 fetch first 999 rows only
 WITH UR;
$/new/
$!
$/genAll/
$!

$@proc rzBegin $@/rzBegin/
if $rz == 'RZ2' then
$@#¢
--* 23.12.09 W. Keller dsLocate verschoben wegen Performance
--*             Anpassung erfolgte nur für DBOF und Sektion Image Copy
--*             Datasets welche nicht katalogisiert sind||||||
$!
$/rzBegin/

$@proc exclGen  $@/exclGen/
parse upper arg , q, var
$=q=-q
$=var=-var
$@=¢
   AND NOT ($q.DBNAME like 'DSNDB%')            -- DB2 CATALOG
   AND NOT ($q.DBNAME LIKE 'DSN8%')             -- IBM TEST DB
   AND NOT ($q.DBNAME LIKE 'WKDBD%')            -- DB2 WORK DATABASE
   AND NOT ($q.DBNAME = 'DSNTESQ')              -- DB2 CATALOG CLONE
   AND NOT ($q.DBNAME LIKE 'DB2MAPP%')          -- REORG MAPPING TABLES
   AND NOT ($q.DBNAME LIKE 'DB2PLAN%')          -- explain tables
   and not translate($q.dbName, '999999999AAAAAA', '012345678FISWXY')
           = 'DA999999'                        -- user datenbanken
   AND NOT ($q.DBNAME LIKE 'DB2ALA%')           -- marec  generated
   AND NOT ($q.DBNAME LIKE '%MAREC%')           -- marec generated
   AND NOT ($q.DBNAME LIKE 'DACME%')            -- Mail Heinz Bühler
$!
if pos($var, ' FG') > 1 then $@=¢
   AND NOT ($q.DBNAME = 'SYSIBMTA')             -- engineering
   AND NOT ($q.DBNAME = 'SYSIBMTS')             -- engineering
   AND NOT ($q.DBNAME = 'DB2PM')                -- PERF.EXPERT DATABASE
   AND NOT ($q.DBNAME = 'DB2OSC')               -- osc
   AND NOT ($q.DBNAME like 'DSN%')              -- div databases
   AND NOT ($q.DBNAME like 'DSQ%')              -- qmf databse
   AND $q.DBNAME NOT IN ('DUTILTST','XSN8D71L','DB2XML')
   AND $q.DBNAME NOT LIKE 'IDTA%'               -- tools
$!
if wordPos($subsys, 'DBAF DBTF') > 0 then $@=¢
   AND NOT ($q.DBNAME LIKE 'DGDB%')             -- PROTOTYPEN
   AND NOT ($q.DBNAME LIKE 'DGO%')              -- PROTOTYPEN
   AND NOT ($q.DBNAME LIKE '%A1X%')             -- Neue Prototypen
   AND NOT ($q.DBNAME LIKE 'DAU%')              -- Schulung Gerrit
   AND NOT ($q.DBNAME LIKE 'IDT%')              -- ibm tools
$!
$/exclGen/
$@proc exclude  $@/exclude/
parse upper arg , q, var
$=q=-q
$=var=-var
$@=¢
   ---------  START EXCLUDE LIST -------------------------------

   -- COMMON SECTION: EXCLUDE LIST SAVE PROCEDURE --
$!
if $exclNew then $@/exclNew/
$@exclGen{$q, $var}
if wordPos($subsys, 'DBOF') > 0  & $q <> 'IX' & $var == '' then $@=¢

   AND NOT ($q.DBNAME = 'XC01A1P'  AND $q.TSNAME LIKE 'A2%'  )
                                                -- EOS: Armin Breyer
   AND NOT ($q.DBNAME = 'XR01A1P'  AND $q.TSNAME LIKE 'A2%'  )
                                                -- ERET: Armin Breyer
   AND NOT ($q.DBNAME = 'CSQDBOF' AND $q.TSNAME like 'TSBLOB%' )
$!
else if wordPos($subsys, 'DP2G') > 0 & $var == '' then $@=¢

   AND NOT ($q.DBNAME LIKE 'OS80%')             -- HAT EIGENE IMAGECOPY
$!
else if wordPos($rz, 'RZ4 RZ8') > 0 & $var == 'F' then $@¢
  if $q == IX then $@=¢
   AND NOT $q.DBNAME = 'DB2PMPDB'               -- PMON KITD2
  $! else $@=¢
   AND NOT ($q.DBNAME = 'DB2PMPDB'
                AND $q.TSNAME like 'ACCS%')     -- PMON KITD2
  $!
$!
if wordPos($subsys, 'DBOC DP4G') > 0 then $@=¢
   AND NOT ($q.DBNAME = 'DB2PDB')               -- performance DB
   AND NOT ($q.DBNAME = 'DB2XML')               -- performance DB
   AND NOT ($q.DBNAME like 'DSN%')
$!
if wordPos($rz, 'RZ1 RZ8 RZZ') > 0 then $@=¢
   AND NOT ($q.DBNAME LIKE 'OE02%')             -- Mail Ivo Eichmann
   AND NOT ($q.DBNAME LIKE 'CSQ%')              -- M-QUEUE DATENBANK
$!
if $isElar then  $@=¢
   AND NOT ($q.DBNAME LIKE 'XB%')               -- ELAR Dokumente
$!
$/exclNew/ else $@/exclOld/
if pos($var, ' FG') > 1 then $@=¢
   AND NOT ($q.DBNAME = 'DB2PM')                -- PERF.EXPERT DATABASE
   AND NOT ($q.DBNAME LIKE 'WKDBD%')            -- DB2 WORK DATABASE
   AND NOT ($q.DBNAME LIKE 'DSN%')              -- IBM DATENBANKEN
$! else $@=¢
   AND NOT ($q.DBNAME = 'DSNDB06')              -- DB2 CATALOG
   AND NOT ($q.DBNAME = 'DSNDB01')              -- DB2 DIRECTORY
   AND NOT ($q.DBNAME = 'DSNDB04')              -- DB2 SAMPLE DB
   AND NOT ($q.DBNAME = 'DSNTESQ')              -- DB2 CATALOG CLONE
   AND NOT ($q.DBNAME LIKE 'WKDBD%')            -- DB2 WORK DATABASE
   AND NOT ($q.DBNAME LIKE 'DSN8%')             -- IBM TEST DB
$!
if wordPos($subsys, 'DBAF DBTF') > 0 then $@=¢
   AND NOT ($q.DBNAME LIKE 'DGDB%')             -- PROTOTYPEN
$!
$@=¢
   AND NOT ($q.DBNAME LIKE 'DB2MAPP%')          -- REORG MAPPING TABLES
   AND NOT ($q.DBNAME LIKE 'DA0%')
   AND NOT ($q.DBNAME LIKE 'DA1%')
   AND NOT ($q.DBNAME LIKE 'DA2%')
   AND NOT ($q.DBNAME LIKE 'DA3%')
   AND NOT ($q.DBNAME LIKE 'DA4%')
   AND NOT ($q.DBNAME LIKE 'DA5%')
   AND NOT ($q.DBNAME LIKE 'DA6%')
   AND NOT ($q.DBNAME LIKE 'DA7%')
   AND NOT ($q.DBNAME LIKE 'DA8%')
   AND NOT ($q.DBNAME LIKE 'DA9%')
   AND NOT ($q.DBNAME LIKE 'DF0%')
   AND NOT ($q.DBNAME LIKE 'DF1%')
   AND NOT ($q.DBNAME LIKE 'DF2%')
   AND NOT ($q.DBNAME LIKE 'DF3%')
   AND NOT ($q.DBNAME LIKE 'DF4%')
   AND NOT ($q.DBNAME LIKE 'DF5%')
   AND NOT ($q.DBNAME LIKE 'DF6%')
   AND NOT ($q.DBNAME LIKE 'DF7%')
   AND NOT ($q.DBNAME LIKE 'DF8%')
   AND NOT ($q.DBNAME LIKE 'DF9%')
$!
if wordPos($rz, 'RZ1 RZ4') > 0 & $var == 'F' then $@=¢
   AND NOT ($q.DBNAME LIKE 'DS1%')
$!
if $subsys == 'DBAF' then $@=¢
   AND NOT ($q.DBNAME LIKE 'DW0%')
   AND NOT ($q.DBNAME LIKE 'DX0%')
   AND NOT ($q.DBNAME LIKE 'DX1%')
   AND NOT ($q.DBNAME LIKE 'DX2%')
   AND NOT ($q.DBNAME LIKE 'DX3%')
   AND NOT ($q.DBNAME LIKE 'DX4%')
   AND NOT ($q.DBNAME LIKE 'DX5%')
   AND NOT ($q.DBNAME LIKE 'DX6%')
   AND NOT ($q.DBNAME LIKE 'DX7%')
   AND NOT ($q.DBNAME LIKE 'DX8%')
   AND NOT ($q.DBNAME LIKE 'DX9%')
   AND NOT ($q.DBNAME LIKE 'DY0%')
   AND NOT ($q.DBNAME LIKE 'DY1%')
   AND NOT ($q.DBNAME LIKE 'DY2%')
   AND NOT ($q.DBNAME LIKE 'DY3%')
   AND NOT ($q.DBNAME LIKE 'DY4%')
   AND NOT ($q.DBNAME LIKE 'DY5%')
   AND NOT ($q.DBNAME LIKE 'DY6%')
   AND NOT ($q.DBNAME LIKE 'DY7%')
   AND NOT ($q.DBNAME LIKE 'DY8%')
   AND NOT ($q.DBNAME LIKE 'DY9%')
   AND NOT ($q.DBNAME LIKE 'DI017%')
$!
$@=¢
   AND NOT ($q.DBNAME LIKE 'DB2ALA%')         -- marec  generated
   AND NOT ($q.DBNAME LIKE $"'$MAREC%'")         -- marec generated
   -- END COMMON SECTION (START SUBSYSTEM SPECIFIC EXEPTIONS)
$!
if wordPos($subsys, 'DBOF') > 0  & $q <> 'IX' & $var == '' then $@=¢

   AND NOT ($q.DBNAME = 'CSQDBOF'  AND $q.TSNAME = 'TSBLOB1' ) -- G.KERN
   AND NOT ($q.DBNAME = 'CSQDBOF'  AND $q.TSNAME = 'TSBLOB2' ) -- G.KERN
   AND NOT ($q.DBNAME = 'CSQDBOF'  AND $q.TSNAME = 'TSBLOB3' ) -- G.KERN
   AND NOT ($q.DBNAME = 'CSQDBOF'  AND $q.TSNAME = 'TSBLOB4' ) -- G.KERN
   AND NOT ($q.DBNAME = 'XC01A1P'  AND $q.TSNAME LIKE 'A2%'  )
                                              -- EOS: Armin Breyer
   AND NOT ($q.DBNAME = 'XR01A1P'  AND $q.TSNAME LIKE 'A2%'  )
                                              -- ERET: Armin Breyer
$!
else if wordPos($subsys, 'DP2G') > 0 & $var == '' then $@=¢

   AND NOT ($q.DBNAME LIKE 'OS80%')            -- HAT EIGENE IMAGECOPY
$!
else if wordPos($rz, 'RZ4 RZ8') > 0 & $var == 'F' then $@¢
    if $q == IX then $@=¢
   AND NOT $q.DBNAME = 'DB2PMPDB'                          --PMON KITD2
    $! else $@=¢
   AND NOT ($q.DBNAME = 'DB2PMPDB' AND $q.TSNAME = 'ACCS1') --PMON KITD2
   AND NOT ($q.DBNAME = 'DB2PMPDB' AND $q.TSNAME = 'ACCS2') --PMON KITD2
   AND NOT ($q.DBNAME = 'DB2PMPDB' AND $q.TSNAME = 'ACCS3') --PMON KITD2
   AND NOT ($q.DBNAME = 'DB2PMPDB' AND $q.TSNAME = 'ACCS4') --PMON KITD2
    $!
$!
$@¢if $isElar then  $@=¢
   AND NOT ($q.DBNAME LIKE 'XB%')               -- ELAR Dokumente
$! $!
if pos($var, ' F') > 1 then $@=¢

$@¢ if $subsys == 'DBOF' then $@=¢
   AND NOT ($q.DBNAME LIKE 'DACME%')     -- Mail Heinz Bühler
$! $!
   AND NOT ($q.DBNAME LIKE 'DSQ%')       -- QMF DATENBANK
   AND NOT ($q.DBNAME LIKE 'SYSIBMTS%')  -- KIDI61
   AND NOT ($q.DBNAME LIKE 'SYSIBMTA%')  -- KIDI61
$!
if $subsys == 'DBOL' & $var == '' then $@=¢
   AND NOT ($q.DBNAME = 'CM01A1P')   -- MAIL VON WALTER GOETZ

$!
if wordPos($subsys, 'DBAF DBBA') > 0 then $@=¢
   AND NOT ($q.DBNAME LIKE 'DGO%')              -- PROTOTYPEN
   AND NOT ($q.DBNAME LIKE 'OE02%')             -- Mail Ivo Eichmann
   AND NOT ($q.DBNAME LIKE 'DACME%')            -- Mail Heinz Bühler
   AND NOT ($q.DBNAME LIKE 'CSQ%')              -- M-QUEUE DATENBANK
   AND NOT ($q.DBNAME LIKE 'DAU%')              -- Schulung Gerrit
   AND NOT ($q.DBNAME LIKE '%A1X%')             -- Neue Prototypen
   AND NOT ($q.DBNAME LIKE 'DSN%')              -- db2
   AND NOT ($q.DBNAME LIKE 'IDT%')              -- ibm tools
$!
if wordPos($rz, 'RZ8') > 0 then $@=¢
   AND NOT ($q.DBNAME LIKE 'DS1%')
$!
if wordPos($subsys, 'DC0G DD0G DP8G DX0G') > 0 then $@=¢
   AND NOT ($q.DBNAME LIKE 'DW0%')
   AND NOT ($q.DBNAME LIKE 'DY0%')
   AND NOT ($q.DBNAME LIKE 'DY1%')
   AND NOT ($q.DBNAME LIKE 'DX0%')               -- Schulungs DB's
   AND NOT ($q.DBNAME LIKE 'DX1%')               -- Unilog Integrata
   AND NOT ($q.DBNAME LIKE 'DX2%')
   AND NOT ($q.DBNAME LIKE 'DX9%')

$!
if wordPos($rz, 'RZ8') > 0  & $q \== IX & $var == '' $*+
        & \ $isElar then $@=¢
   AND NOT ($q.DBNAME LIKE 'OE02%')           -- Mail Ivo Eichmann
   AND NOT ($q.DBNAME LIKE 'DACME%')          -- Mail Heinz Bühler
   AND NOT ($q.DBNAME LIKE 'DDASE%') -- MAIL WERNER KURZ (TÄGL. CREATE)
   AND NOT ($q.DBNAME LIKE 'VV11%')           -- MAIL JÜRG GUBLER
   AND NOT ($q.DBNAME LIKE 'VV12%')           -- MAIL JÜRG GUBLER
   AND NOT ($q.DBNAME LIKE 'VV13%')           -- MAIL JÜRG GUBLER
   AND NOT ($q.DBNAME LIKE 'VV14%')           -- MAIL JÜRG GUBLER
   AND NOT ($q.DBNAME LIKE 'VV15%')           -- MAIL JÜRG GUBLER
   AND NOT ($q.DBNAME LIKE 'VV16%')           -- MAIL JÜRG GUBLER
   AND NOT ($q.DBNAME LIKE 'VV17%')           -- MAIL JÜRG GUBLER
   AND NOT ($q.DBNAME LIKE 'VV18%')           -- MAIL JÜRG GUBLER
   AND NOT ($q.DBNAME LIKE 'CSQ%')            -- M-QUEUE DATENBANK
$!
$/exclOld/
$@=¢

   ---------  END EXCLUDE LIST -------------------------------
$!
$/exclude/


$@proc missFullcopies1 $@=/missFullCopies1/
 SELECT SUBSTR(PT.DBNAME,1,8) AS DBNAME
       ,SUBSTR(PT.TSNAME,1,8) AS TSNAME
       ,PT.PARTITION
       ,DATE(TS.CREATEDTS) AS CREATEDATE
 FROM   SYSIBM.SYSDATABASE DB,
        SYSIBM.SYSTABLESPACE TS,
        SYSIBM.SYSTABLEPART PT
 WHERE DB.NAME = PT.DBNAME
   AND DB.NAME = TS.DBNAME
   AND TS.NAME = PT.TSNAME
$/missFullCopies1/

$@proc missFullcopies2db $@=/missFullCopies2db/
   AND DB.TYPE NOT IN ('T','W')
$@missFullcopies2-{arg(2)}
$/missFullCopies2db/

$@proc missFullcopies2 $@/missFullCopies2/
parse arg , days
$=days=-days
$@=¢
   AND TS.NTABLES <> 0
   AND PT.SPACE <> -1
   AND DATE(TS.CREATEDTS) < CURRENT DATE
   AND NOT EXISTS
       (SELECT ' '
        FROM  SYSIBM.SYSCOPY CP
        WHERE PT.DBNAME = CP.DBNAME
          AND PT.TSNAME = CP.TSNAME
          AND (PT.PARTITION = CP.DSNUM  OR  CP.DSNUM = 0)
          AND CP.ICTYPE IN ('F','R','X')
          AND CP.TIMESTAMP > CURRENT TIMESTAMP - $days DAYS
         )
 ORDER BY DBNAME, TSNAME, PT.PARTITION
 WITH UR;
$!
$/missFullCopies2/
$#out                                              20120628 17:25:18
$#out                                              20120626 17:01:14
$#out                                              20120626 16:57:50
$#out                                              20120626 16:00:50
$#out                                              20120626 15:11:39
}¢--- A540769.WK.REXX.O13(CSI) cre=2009-09-03 mod=2013-09-23-12.19.50 A540769 ---
/* copy csi begin    ***************************************************
     csi interface: see dfs managing catalogs chapt. 11
         returncode/reason see message IDC3009I
**********************************************************************/
/*--- specify dsn mask and fields to start a csi catalog search --------
      arguments:
          m       objectPointer
          dsnMask specifies the dsns with wildcards:
              %  1 character
              *  0 - n character in one level
              ** 0 - n levels
          fields a (space separated) list of field names -------------*/
csiOpen: procedure expose m.
parse arg m, dsnMask, fields
    m.m.fld.0 = words(fields)
    ffix = d2c(m.m.fld.0, 2)
    do x=1 to m.m.fld.0
        m.m.fld.x = translate(word(fields, x))
        ffix = ffix || left(m.m.fld.x, 8)
        end
    if dsnMask \== '' & pos('*', dsnMask) < 1 then
        dsnMask = dsnMask'.**'
    m.m.filt = left(dsnMask, 149) ,
             || left('Y', 3) ,        /* resume offset 149      */
             || ffix                  /* csiNumEn offset 152    */

    WORKLEN = 1024 * 64
    m.m.work = D2C(WORKLEN,4) || COPIES('00'X,WORKLEN-4)
    m.m.pos = workLen + 1
    return
endProcedure csiOpen

/*--- put the next dsn into m.o and m.o.* (for other fields)
      return 1 if next dsn exists 0 otherwise ------------------------*/
csiNext: procedure expose m.
parse arg m, o
    usedL = C2D(SUBSTR(m.m.work,9,4)) /* GET AMOUNT OF WORK AREA USED */
    px = m.m.pos
    do forever
        if px > usedL then do
            if substr(m.m.filt, 150, 1) \== 'Y' then do
                m.m.pos = px
                m.o = ''
                return 0
                end
            reason = left('', 4)
            ADDRESS LINKPGM 'IGGCSI00  reason m.'m'.filt  m.'m'.work'
            if rc == 0 & substr(reason, 3, 2) == '0000'x then
                nop
            else if rc == 4 & substr(reason, 3, 2) == '0464'x then
                say 'data set entry with error'
            else
                call err 'call csi returns' rc,
                             'rc' c2d(substr(reason, 4,1)),
                             'reason' c2d(substr(reason, 3,1)),
                             'module' substr(reason, 1,2)
            usedL = C2D(SUBSTR(m.m.work,9,4)) /* GET WORK AREA USED */
            numFD = C2D(SUBSTR(m.m.work,13,2)) /* no flds + 1 */
            if numFd <> m.m.fld.0 + 1 then
                call err 'csiNumFd' numFd 'not' m.m.fld.0 '+' 1
            px = 15
            iterate
            end
        eType =  substr(m.m.work, px+1, 1)
        m.o = strip(substr(m.m.work, px+2, 44), 't')
        flag = substr(m.m.work, px, 1)
        /* say 'eType' eType m.o 'flag' c2x(flag) */
        if eType == '0' then do
            if flag \== '00'x & flag \== '40'x then
                call err 'flag' c2x(flag) 'for catalog' m.o
            px = px + 50    /* length of catalog entry  */
            iterate
            end
        else do
            if \ abbrev(x2b(c2x(flag)), '101') then
                call err 'call csi entry flag' x2b(c2x(flag)),
                             'rc' c2d(substr(m.m.work, px+49,1)),
                             'reason' c2d(substr(m.m.work, px+48,1)),
                             'module' substr(m.m.work, px+46, 2),
                             'for entry' m.o,
                             'see qw IDC3009I'
            py = px + 46
            tl = c2d(substr(m.m.work, py, 2))
            pl = py + 4
            pf = py + m.m.fld.0 * 2 + 4
            do fx = 1 to m.m.fld.0
                fi = m.m.fld.fx
                fl = c2d(substr(m.m.work, pl, 2))
                m.o.fi = substr(m.m.work, pf, fl)
                if fi = 'MGMTCLAS' then
                    m.o.fi = substr(m.o.fi, 3, c2d(left(m.o.fi ,2)))
                else if wordPos(fi, 'COMUDSIZ NOBYTTRK') > 0 then
                    m.o.fi = utc2d(m.o.fi)
        /*      say fi '=??? <'m.o.fi'>' c2x(m.o.fi)  */
                pf = pf + fl
                pl = pl + 2
                end
            if py + tl <> pf then
                call err 'length mismatch for entry' m.o
            m.m.pos = pf
            return 1
            end
        end
endProcedure csiNext
/*--- if dsn is arcived return 'arcive'
      if dsn is tape return 'tape'
      otherwise return managment class ------------------------------*/
csiArcTape: procedure expose m.
parse arg vo, cl, dt, dsn
        if vo = '' then
            say err '||| no volume for dsn' dsn
        else if vo = 'ARCIVE' then
            res = 'arcive'
        else if cl <> '' then
            res = cl
        else if abbrev(vo, 'SHR') then
            res = 'SHR'
        else
            res = 'tape'
        if   res = 'arcive' then
            return res
      /*if   abbrev(res, 'ar') \= abbrev(dt, '00'x) , */
        if   abbrev(res, 'ta') \= abbrev(c2x(left(dt, 1)), '7') ,
           | (left(res, 1) >= 'A') \= abbrev(dt, '30'x) then
           say '||| mismatch cl' cl 'vo' vo 'dt' c2x(dt) 'dsn' dsn
        return res
endProcedure csiArcTape
/* copy csi end ******************************************************/
}¢--- A540769.WK.REXX.O13(CSM) cre=2013-09-27 mod=2013-09-27-11.36.33 A540769 ---
/* copy csm begin ******************************************************
    interface to csm,
        it is integrate with adrTso, eg. dsnAlloc , 'RZ3/..' uses csm
***********************************************************************/
adrCsm:
    return adrTso('csmExec' arg(1), arg(2))
endProcedure adrCsm

csmCopy: procedure expose m.
parse arg csnFr, csnTo, retOk
    if dsnGetMbr(csnTo) \= '' & dsnGetMbr(csnTo) \= '' then do
        if dsnGetMbr(csnFr) <> dsnGetMbr(csnTo) then
            call err 'member rename' csnFr 'to' csnTo
        csnTo = dsnSetMbr(csnTo)
        end
    parse value csmSysDsn(csnFr) with sysFr '/' dsnFr
    parse value csmSysDsn(csnTo) with sysTo '/' dsnTo
    if sysTo = '*' then do
        old = sysDsn("'"dsnTo"'")
        end
    else if sysFr = '*' then do
        pdsTo = dsnSetMbr(dsnTo)
        al = "SYSTEM("sysTo") DDNAME(COPYTo)",
             "DATASET('"pdsTo"') DISP(SHR)"
        alRes = dsnAlloc(systo'/'pdsTo, ,'COPYTO', '*')
        if datatype(alRes, 'n') then do
                   /* wir müssen es selbst allozieren csmxUtil
                      vergisst management class ||||| */
            say 'could not allocate' al
            say 'trying to create'
            rc = listDsi("'"dsnSetMbr(dsnFr)"' SMSINFO")
            if rc = 0 then
                mv = ''
            else if rc = 4 & sysReason = 19 then do
                mv = 'UCOUNT(30)' /* 7.8.13 corrected attribute */
                say 'creating' dsn 'with multi volume' mv
                end
            else if rc \= 0 then
                call err 'listDsi rc' rc 'reason' sysReason,
                                     sysMsgLvl1 sysMsgLvl2
            al = left(al, length(al)-4)'CAT)'
            if right(sysDsSms, 7) == 'LIBRARY' ,
                | abbrev(sysDsSms, 'PDS') then
                 al = al 'DSNTYPE(LIBRARY)'
            if sysUnits = 'TRACK' then
                sysUnits = 'TRACKS'
            al = al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
                "RECFM("sysREcFM") LRECL("SYSLRECL")",
                "blksize("sysBLkSIZE")",
                "SPACE("sysPrimary"," sysSeconds")" sysUnits mv
            call adrCsm "allocate" al
            end
        call tsoFree word(alRes, 2)
        end
    c = "'COPY" sysFr"/''"dsnFr"'' TO" ,
                        sysTo"/''"dsnSetMbr(dsnTo)"'' REPLACE'"
    csmRc = adrTso("exec 'CSM."sysvar("sysnode")".P0.EXEC(CSRXUTIL)'",
           c , retOk)
    if sysTo = '*' & old <> 'OK' then do
        /* csm normally does not set mgmtclass - avoid delete | */
        call adrTso "ALTER '"dsnTo"' mgmtclas(COM#A091)"
        end
    return csmRc
endProcedure csmCopy

csmAlloc: procedure expose m.
parse arg dsn dd disp rest ':' nn, retRc
    sys = ''
    a2 = ''
    parse value csmSysDsn(dsn) with sys '/' dsn
    if disp = '' then
        disp = 'shr'
    al = "SYSTEM("sys") DDNAME("dd")"
    if dsn <> '' then do
        a2 = "DATASET('"dsnSetMbr(dsn)"')"
        mbr = dsnGetMbr(dsn)
        if mbr <> '' then
            a2 = a2 'MEMBER('mbr')'
        end
    if abbrev(disp, 'SYSOUT(') then
        a2 = a2 disp
    else
        a2 = a2 "DISP("disp")"
    if disp = 'NEW' & nn \== '' then
        a2 = a2 dsnCreateAtts( , nn, 1)
    if retRc <> '' | nn = '' then
        return adrCsm('allocate' al a2 rest, retRc)
    do retry=0 by 1
        alRc = adrCsm('allocate' al a2 rest, '*')
        if alRc = 0 then
            return 0
        if retry > 0 | nn = '' | wordPos(disp, 'OLD SHR') < 1 then
            return err('cmsAlloc rc' alRc 'for' al rest)
        say 'csmAlloc rc' alRc 'for' al a2 rest '...trying to create'
        nn = al 'disp(cat)' dsnCreateAtts(dsn, nn, 1)
        call adrCsm 'allocate' nn
        call adrTso 'free  dd('dd')'
        end
endProcedure csmAlloc

csmSysDsn: procedure expose m.
parse upper arg dsn, withStar
    if pos('/', dsn) < 1 then
        sys = '*'
    else
        parse var dsn sys '/' dsn
    if sys <> '' & sys <> '*' & sys <> sysvar(sysnode) then
        return sys'/'dsn
    else if withStar == 0 then
        return dsn
    else
        return '*/'dsn
endProcedure csmSysDsn

/*--- execute a rexx (under tso) in another rz
           here we use rexx TPSYSIKJ which was written for
           jcl procedure RM@IKJ01
arguments
rz   which rz to run rexx
proc the (remote) procedure library to use
opt  options
cmd  the tso command to execute
----------------------------------------------------------------------*/
/*--- execute a rexx (under tso) in another rz
          directly (without TPSYSIKJ) --------------------------------*/
csmExRx: procedure expose m.
parse arg rz, proc, opt, cmd
    do cx=1 to (length(cmd)-1) % 68
        cmd.cx = substr(cmd, 68*cx-67,68)'-'
        end
    cmd.cx = substr(cmd, 68*cx-67)
    cmd.0 = cx
    timeout = 11
    if 0 then do
        call adrTso  'free ed(rmtSys)'  ,'*'
        call tsoFree tsoDD(rmtsPrt, 'a')
        call adrTso  'free dd(rmtsIn)','*'
        call adrTso  'free dd(sysproc)' ,'*'
        end
    call dsnAlloc rz"/"proc "dd(rmSyPro) rmtDDn(sysProc)"
    call dsnAlloc rz"/tmp.tsin new dd(rmTsIn) rmtDdn(sysTsIn) ::f "
    call tsoOpen rmTsIn, 'w'
    call writeDD rmTsIn, cmd.
    call tsoClose rmtsin
    call dsnAlloc rz"/tmp.prt new dd(rmtsprt) rmtDdn(sysTsPrt)",
                    "::f133"
    call dsnAlloc rz"/tmp.rmt new dd(rmtSys) timeout("timeout")"
    call adrtso "csmappc start pgm(csmexec)" ,
           "parm('select tsocmd(''csmappc allocate plu(*.rmtSys)" ,
                 "tpname(sysikj) dealloc '')')",
           "timeout("timeOut")", '*'
    if rc <> 0 | appc_rc <> 0 then do
        ee = 'csm tso exec rc='rc 'appc_rc='appc_rc
        say ee
        say '  rexx rz='rz 'proc='proc 'opt=opt'
        say '  cmd='cmd
        call csmappcRcSay ggTsoCmd
        call readDD 'rmTsPrt', p.
        call tsoClose rmtsPrt
        say p.0 'tso output lines'
        do px=1 to p.0
            say ' ' strip(p.px, 't')
            end
        call err ee
        end
    call tsoFree rmSyPro rmtsPrt rmtSys rmtsIn
    return
/*--- sys the re and result variables from csmAppcRc -----------------*/
 csmappcRcSay: procedure expose appc_rc appc_reason appc_msg. ,
           appc_state_c appc_state_f
 parse arg cmd
     say 'rc='appc_rc 'reason='appc_reason ,
         'state_c='appc_state_c appc_state_f
     say '  for' cmd
     do ix=1 to appc_msg.0
         say ' ' appc_msg.ix
         end
     return appc_rc
 endProcedure csmappcRcSay
/* copy csm end *******************************************************/
}¢--- A540769.WK.REXX.O13(CSMCOPY) cre=2012-01-20 mod=2012-01-20-17.12.43 A540769 ---
$#@
$<#/dsn/
   A540769.TMPUL.SV03A1P.A033A.PUN
   A540769.TMPUL.SV03A1P.A033A.UNL
$/dsn/ $@for v $@¢
    call csmCopy 'RZ2/'strip($v), 'RR2/'strip($v)
    $!
$#out                                              20120120 16:59:40
$#out                                              20120117 16:06:03
}¢--- A540769.WK.REXX.O13(CSMSQL) cre=2012-03-21 mod=2012-03-21-16.30.05 A540769 ---
call sqlIni
call sqldisConnect 'DBAF'
say 'start cmsSql'
sql_HOST = rz8
sql_query = 'select current server cs, current timestamp ts' ,
            'from sysibm.sysdummy1'
sql_query = 'select creator, name, createdTs ,current server',
     ', case when mod(row_number() over(), 2) = 0 then 1 else null end',
     'from sysibm.sysTables fetch first 7 rows only'
SQL_DB2SSID = 'DD0G'
sql_PLAN = 'DB2TS'
address tso "CSMAPPC START PGM(CSMASQL)"
say 'csmappc' rc 'sqlCode' sqlCode', sqlD' sqlD', sqlRow#' sqlRow#
call outNl sqlDsnTiarCall(sqlCa)
Do I = 1 To SQL_Message.0
    Say SQL_Message.I
    End
say _name SQLDA_NAME.0 SQLDA_NAME.1 SQLDA_NAME.2
say rexxName SQLDA_REXXNAME.0 SQLDA_REXXNAME.1 SQLDA_REXXNAME.2
do rx=1 to sqlRow#
    t = 'row' rx
    say c2x(sqlIndicator.rx)
    do cx=1 to sqlD
        t = t', da='SQLDA_NAME.1 'rx='SQLDA_REXXNAME.cx
        rr = SQLDA_REXXNAME.cx
        if substr(sqlIndicator.rx, cx ,1) == 'ff'x then
            t = t m.sqlNull
        else
            t = t value(SQLDA_REXXNAME.cx'.'rx)
        end
    say t
    end
exit
/* copy sql    begin ***************************************************
    sql interface
***********************************************************************/
sqlIni: procedure expose m.
parse arg opt
    if m.sql.ini == 1 & opt \== 1 then
        return
    m.sqlNull = '---'
    m.sqlInd = 'sqlInd'
    m.sqlRetOK.0 = 0
    m.sqlMsgCa = 0
    m.sqlMsgDsntiar = 1
    m.sqlMsgCodeT   = 0
    call sqlPushRetOk
    m.sql.ini = 1
    m.sql.connected = ''
    return
endProcedure sqlIni

/*--- prepare statement 's'cx from sql src into descriptor desc ------*/
sqlPrepare: procedure expose m.
parse arg cx, src, descOut, descInp
     s = ''
     if descOut == 1 then
         s = 'into :M.SQL.'cx'.D'
     res = sqlExec('prepare s'cx s 'from :src')
     if res < 0 then
         return res
     if descInp == 1 | (descInp == '' & pos('?', src) > 0) then
         res = sqlExec('describe input s'cx 'into :M.SQL.'cx'.I')
     else
         m.sql.cx.i.sqlD = 0
     return res
endProcedure

/*--- prepare and declare 'c'cx from sql src -------------------------*/
sqlPreDeclare: procedure expose m.
parse arg cx, src, descOut, descInp
     res = sqlPrepare(cx, src, descOut, descInp)
     if res >= 0 then
         return sqlExec('declare c'cx 'cursor for s'cx)
     return res
endProcedure sqlPreDeclare

/*--- prepare, declare and open 'c'cx from sql src -------------------*/
sqlPreOpen: procedure expose m.
parse arg cx, src, descOut, descInp
     res = sqlPreDeclare(cx, src, descOut, descInp)
     if res >= 0 then
         return sqlOpen(cx)
     return res
endProcedure sqlPreOpen

/*--- open cursor 'c'cx using arguments arg(2), arg(3)... ------------*/
sqlOpen: procedure expose m.
parse arg cx
    do ix=1 to arg()-1
        call sqlDataSet 'SQL.'cx'.I', ix, arg(ix+1)
        end
     return sqlExec('open c'cx 'using descriptor :M.SQL.'cx'.I')
endProcedure sqlOpen

/*--- close cursor 'c'cx ---------------------------------------------*/
sqlClose: procedure expose m.
parse arg cx, src
     return sqlExec('close c'cx)
endProcedure sqlClose

/*--- fetch cursor 'c'cx into variables ggVars -----------------------*/
sqlFetchInto:
parse arg ggCx, ggVars
    if ggVars == '' then
        ggVars = 'descriptor :M.SQL.'ggCX'.D'
                        /* accept sqlCodes > 0 except 100 */
    ggRes = sqlExec('fetch c'ggCx 'into' ggVars, 100 m.sqlRetOk)
    if ggRes == 0 then
        return 1
    if ggRes == 100 then
        return 0
    return ggRes
endProcedure sqlFetchInto

/*--- return sql variable list for stem st and fields the word in vars
          if withInd == 1 then with sqlIndicator variables
        sqlVars('S', 'A B') --> ':S.A, :S.B'
        sqlVars('S', 'A B', 1) --> ':S.A :S.A.SQLIND, :S.B :S.B.SQLIND'
----------------------------------------------------------------------*/
sqlVars: procedure expose m.
parse arg st, vars, withInd
    res = ''
    if st ^== '' then
        st = st'.'
    do ix=1 to words(vars)
        res = res', :'st || word(vars, ix)
        if withInd == 1 then
             res = res ':'st || word(vars, ix)'.sqlInd'
        end
    return substr(res, 3)
endProcedure sqlVars

sqlVarsNull: procedure expose m.
parse arg st, vars
    hasNulls = 0
    do ix = 1 to words(vars)
        fld = word(vars, ix)
        if m.st.fld.sqlInd < 0 then do
            m.st.fld = m.sqlNull
            hasNulls = 1
            end
        end
    return hasNulls
endProcedure sqlVarsNull

/*--- open cursor 'c'cx fetch all into variables vars and close
      st = passed stem, sx = row number
      return number of rows fetched ----------------------------------*/
sqlOpAllCl:
parse arg ggCx, st, ggVars
    do ggAx=4 to arg()
        call sqlDataSet 'SQL.'ggCx'.I', ggAx-3, arg(ggAx)
        end
    ggRes = sqlOpen(ggCx)
    if ggRes < 0 then
        return ggRes
    do sx = 1 until ggRes \== 1
        ggRes = sqlFetchInto(ggCx, ggVars)
        end
    m.st.0 = sx - 1
    call sqlClose ggCx
    if ggRes == 0 then
        return m.st.0
    return ggRes
endProcedure sqlOpAllCl

sqlDataSet: procedure expose m.
parse arg da, ix, val
    m.da.ix.sqlData = val
    m.da.ix.sqlInd = - (arg(ix+2) == m.sqlNull)
    /* data types schienen einmal nicht zu funktionieren .......
    if wordPos(m.da.ix.sqlType, '384 385 388 389 392 393') > 0 then
        m.da.ix.sqlType = 448 + (m.da.ix.sqlType // 2) */
    return
endProcedure sqlDataSet
/*--- prepare, declare open cursor 'c'cx, fetch all and close
      return number of rows fetched ----------------------------------*/
sqlPreAllCl:
parse arg ggCx, ggSrc, st, ggVars
    ggRes = sqlPreDeclare(ggCx, ggSrc)
    if ggRes >= 0 then
        return sqlOpAllCl(ggCx, st, ggVars)
    return ggRes
endProcedure sqlPreAllCl

/*--- execute statement 's'cx using arguments arg(2), arg(3)... ------*/
sqlExecute:
parse arg ggCx ggRetOk  /* no , for ggRetOk, arg(2) is used already| */
    do ggAx=2 to arg()
        call sqlDataSet 'SQL.'ggCx'.I', ggAx-1, arg(ggAx)
        end
     return sqlExec('execute s'ggCx 'using descriptor :M.SQL.'ggCx'.I',
                   , ggRetOk)
endProcedure

/*--- execute immediate the sql src ----------------------------------*/
sqlExImm:
parse arg ggSrc, ggRetOk
     return sqlExec('execute immediate :ggSrc', ggRetOk)
endProcedure sqlExImm

sqlCommit: procedure expose m.
parse arg src
     return sqlExec('commit')
endProcedure sqlCommit

/*--- execute sql thru the dsnRexx interface -------------------------*/
sqlExec: /* no procedure, to keep variables sql... */
    parse arg ggSqlStmt, ggRetOk, ggNo
    if ggNo <> '1' then
        ggSqlStmt = 'execSql' ggSqlStmt
    address dsnRexx ggSqlStmt
    /* say 'sqlCode' sqlCode 'rc' rc 'for' ggSqlStmt ggNo */
    if rc = 0 then
        return 0
    if ggRetOk = '' then
        ggRetOk = m.sqlRetOk
    if wordPos(rc, '1 -1') < 0 then
        call err 'dsnRexx rc' rc sqlmsg()
    else if pos('*', ggRetOk) > 0 | wordPos(sqlCode, ggRetOk) > 0 ,
            then do
        if sqlCode < 0 & pos('say', ggRetOk) > 0 then
            say 'sqlError' sqlmsg()
        return sqlCode
        end
    else if rc < 0 then
        call err sqlmsg()
    else if sqlCode <> 0 | (pos('w',ggRetOk)<1 & sqlWarn.0^==' ') then
        call errSay sqlMsg(), ,'w'
    return sqlCode
endSubroutine sqlExec

/*--- connect to the db2 subsystem sys -----------------------------*/
sqlConnect: procedure expose m.
parse upper arg sys, retOk
    call sqlIni
    address tso "SUBCOM DSNREXX"
    if rc <> 0 then do
       sRc = RXSUBCOM('ADD','DSNREXX','DSNREXX') /* ADD HOST CMD ENV  */
       if sRc <> 0 then
           call err 'rc' sRc 'from RXSUBCOM(ADD, DSNREXX, DSNREXX)'
       end
    if sys = '-' then
        return 0
    res = sqlExec("connect" sys, retOk ,1)
    if res >= 0 then
        m.sql.connected = sys
    return res
endProcedure sqlConnect

/*--- diconnect from db2 ---------------------------------------------*/
sqlDisconnect: procedure expose m.
parse arg retOk
    m.sql.connected = ''
    return sqlExec("disconnect ", retOk, 1)
endProcedure sqlDisconnect

/*--- connect and/or disconnect to DB2 -------------------------------*/
sqlConDis: procedure expose m.
parse upper arg sys, retOk
    if sys \== '' then
        nop
    else if sysvar(sysnode) == 'RZ1' then
        sys = 'DBAF'
    else
        call err 'no default subsys for' sysvar(sysnode)
    call sqlIni
    if sys == m.sql.connected then
        return 0
    if m.sql.connected \== '' then
        call sqlDisconnect
    if sys = '-' then
        return 0
    return sqlConnect(sys, retOk)
endProcedure sqlConDis
/*--- push and pop currently accepted sqlCodes -----------------------*/
sqlPushRetOk: procedure expose m.
parse arg rr
    nx = m.sqlRetOk.0 + 1
    m.sqlRetOk.0 = nx
    m.sqlRetOk.nx = rr
    m.sqlRetOk    = rr
    return
endProcedure sqlPushRetOk

sqlPopRetOk: procedure expose m.
    nx = m.sqlRetOk.0 - 1
    if nx < 1 then
        call err 'sqlPopRetOk with .0' m.sqlRetOk.0
    m.sqlRetOk    = m.sqlRetOk.nx
    m.sqlRetOk.0 = nx
    return
endProcedure sqlPopRetOk

/*--- issue an sql error message -------------------------------------*/
sqlMsg: /* no procedure, to keep variables sql... */
    ggRes = ''
    if \ dataType(sqlCode, 'n') then do
        ggRes = 'sqlCode' sqlCode 'not numeric\n'sqlMsgCa()
        end
    else do
        signal on syntax name sqlMsgOnSyntax
        if m.sqlMsgCodeT == 1 then
        ggRes = 'sqlCode' sqlCodeT(sqlCode, sqlErrMc, sqlwarn.0':' ,
           || sqlwarn.1||sqlwarn.2||sqlwarn.3||sqlwarn.4||sqlwarn.5',',
           || sqlwarn.6||sqlwarn.7||sqlwarn.8||sqlwarn.9||sqlwarn.10)
        if 0 then
          sqlMsgOnSyntax: do
            ggRes = sqlMsgCa(),
                    '\n<<rexx sqlCodeT not found or syntax>>'
            end
        signal off syntax
        if m.sqlMsgDsnTiar == 1 then do
            ggRes = ggRes || sqlDsntiar()
            ggWa = sqlMsgWarn(sqlWarn)
            if ggWa \= '' then
                ggRes = ggRes'\nwarnings' ggWa
            end
        if m.sqlMsgCa == 1 then
           ggRes = ggRes'\n'sqlMsgCa()
        end
    ggSqlSp = ' ,:+-*/&%?|()¢!'
    ggXX = pos(':', ggSqlStmt)+1
    do ggSqlVx=1 to 12 while ggXX > 1
        ggYY = verify(ggSqlStmt, ggSqlSp, 'm', ggXX)
        if ggYY < 1 then
            ggYY = length(ggSqlStmt) + 1
        ggSqlVa.ggSqlVx = substr(ggSqlStmt, ggXX, ggYY - ggXX)
        do ggQQ = ggXX-2 by -1 to 1 ,
                while substr(ggSqlStmt, ggQQ, 1) == ' '
            end
        do ggRR = ggQQ by -1 to 1 ,
                while pos(substr(ggSqlStmt, ggRR, 1), ggSqlSp) < 1
            end
        if ggRR < ggQQ & ggRR > 0 then
            ggSqlVb.ggSqlVx = substr(ggSqlStmt, ggRR+1, ggQQ-ggRR)
        else
            ggSqlVb.ggSqlVx = ''
        ggXX = pos(':', ggSqlStmt, ggYY+1) + 1
        end
    ggSqlVa.0 = ggSqlVx-1
    if datatype(sqlErrd.5, 'n') & sqlErrd.5 > 0 then do
        ggW2 = translate(word(ggSqlStmt, 2))
        ggW3 = translate(word(ggSqlStmt, 3))
        if ggW2 == 'PREPARE' then
            ggRes = ggRes || sqlMsgSrF('FROM')
        else if ggW2 ggW3 == 'EXECUTE IMMEDIATE' then
            ggRes = ggRes || sqlMsgSrF(1)
        else
            ggRes = ggRes || sqlMsgSrF()
        end
    ggRes = ggRes'\nstmt = ' ggSqlStmt
    ggPref = '\nwith'
    do ggXX=1 to ggSqlVa.0
        ggRes = ggRes || ggPref ggSqlVb.ggXX ':'ggSqlVa.ggXX ,
                      '=' value(ggSqlVa.ggXX)
        ggPref = '\n    '
        end
    if abbrev(ggRes, '\n') then
        return substr(ggRes, 3)
    return  ggRes
endSubroutine sqlMsg

sqlMsgSrF:
parse arg ggF
    if ggF \== '' & \ datatype(ggF, 'n') then do
        do ggSqlVx=1 to ggSqlVa.0
            if translate(ggSqlVb.ggSqlVx) = ggF then
                return sqlMsgSrc(value(ggSqlVa.ggSqlVx), sqlErrd.5)
            end
        end
    if datatype(ggF, 'n') & ggF <= ggSqlVa.0 then
        return sqlMsgSrc(value(ggSqlVa.ggF), sqlErrd.5)
    return sqlMsgSrc(ggSqlStmt  , sqlErrd.5)
endSubroutine sqlMsgSrF

/*--- use dsnTiar to translate sql Info to error text ----------------*/
sqlDsnTiar:
    sqlWarn = sqlWarn.0 || sqlWarn.1 || sqlWarn.2 || sqlWarn.3,
             || sqlWarn.4 || sqlWarn.5 || sqlWarn.6 || sqlWarn.7,
             || sqlWarn.8 || sqlWarn.9 || sqlWarn.10
    if sqlCode = -438 then
        return '\nSQLCODE = -438:',
               'APPLICATION RAISED ERROR WITH sqlState' sqlState,
               'and DIAGNOSTIC TEXT:' sqlErrMc
    if digits() < 10 then
        numeric digits 10
    sqlCa = d2c(sqlCode, 4) ,
             || d2c(max(70, length(sqlErrMc)), 2)left(sqlErrMc, 70) ,
             || left(sqlErrP, 8) ,
             || d2c(sqlErrD.1, 4)d2c(sqlErrD.2, 4)d2c(sqlErrD.3, 4) ,
             || d2c(sqlErrD.4, 4)d2c(sqlErrD.5, 4)d2c(sqlErrD.6, 4) ,
             || sqlWarn || sqlState
    if length(sqlCa) <> 124 then
        call err 'sqlDa length' length(sqlCa) 'not 124' ,
                 '\nsqlCa=' sqlMsgCa()
    return sqlDsnTiarCall(sqlCa)

/*--- call dsnTiar o translate sql Info to error text ----------------*/
sqlDsnTiarCall: procedure expose m.
parse arg ca
    liLe = 78
    msLe = liLe * 10
    if length(ca) <> 124 then
/*      call err 'sqlDa length' length(ca) 'not 124:' ca', hex='c2x(ca)
    ca = 'SQLCA   ' || d2c(136, 4) || ca
*/  msg = d2c(msLe,2) || left('', msLe)
    len = d2c(liLe, 4)
    ADDRESS LINKPGM "DSNTIAR ca msg LEN"
    if rc <> 0 then
        call err 'linkPgm dsnTiar rc' rc 'sqlCa' ca
    res = ''
    do c=3 by liLe to msLe
        if c = 3 then do
            l1 = strip(substr(msg, c+10, 68))
            cx = pos(', ERROR: ', l1)
            if cx > 0 then
                l1 = left(l1, cx-1)':' strip(substr(l1, cx+9))
            res = res'\n'l1
            end
        else if substr(msg, c, 10) = '' then
            res = res'\n    'strip(substr(msg, c+10, 68))
        else
            leave
        end
    return res
endProcedure sqlDsnTiarCall

sqlMsgCa:
    ggWarn = ''
    do ggX=0 to 10
        if sqlWarn.ggX \== ' ' then
            ggWarn = ggWarn ggx'='sqlWarn.ggx
        end
    if ggWarn = '' then
        ggWarn = 'none'
    return 'sqlCode' sqlCode 'sqlState='sqlState,
           '\n    errMC='translate(sqlErrMc, ',', 'ff'x),
           '\n    warnings='ggWarn 'erP='sqlErrP,
           '\n    errD.1='sqlErrD.1 '2='sqlErrD.2 '3='sqlErrD.3,
           '\n    errD.4='sqlErrD.4 '5='sqlErrD.5 '6='sqlErrD.6
endProcedure sqlMsgCa

/*--- make the text for sqlWarnings
           input warn.0..warn.10 as a 11 character string ------------*/
sqlMsgWarn: procedure expose m.
parse arg w0 2 wAll
     if w0 = '' & wAll = '' then
         return ''
     if  length(wAll) \= 10 | ((w0 = '') <> (wAll = '')) then
         return 'bad warn' w0':'wAll
     r = ''
     text =' 1=W var truncated, 1=S scrollable, 1=N nonScrollable,'  ,
            '2=W nulls in aggregate,'                                ,
            '3=W more cols than vars,'                               ,
                             '3=Z more result sets than locators,'   ,
            '4=W no where, 4=D sensitive dynamic, 4=I insensitive,'  ,
                          '4=S sensitive static,'                    ,
            '5=W not valid sql, 5=1 readOnly, 5=2 readDelete,'       ,
                          '5=3 readDeleteUpdate,'                    ,
            '6=W day changed to month range,'                        ,
            '7=W dec digits truncated,'                              ,
            '8=W char substituted,'                                  ,
            '9=W arith excep in count, 9=Z multipe result sets,'     ,
            '10=W char conversion err in ca,'
     do wx = 1 to 10
         w = substr(wAll, wx, 1)
         if w = ' ' then
             iterate
         t = wx'='w
         cx = pos(' 'wx'='w' ', text)
         ex = pos(','         , text, cx + 1)
         if cx < 1 then
             r = r wx'='w '?,'
         else
             r = r substr(text, cx+1, ex-cx)
         end
     return strip(r, 't', ',')
endProcedure sqlMsgWarn

sqlMsgSrc: procedure expose m.
parse arg src, pos, opt
    if 0 then do /* old version, before and after txt */
        tLe = 150
        t1 = space(left(src, pos), 1)
        if length(t1) > tLe then
            t1 = '...'right(t1, tLe-3)
        t2 = space(substr(src, pos+1), 1)
        if length(t2) > tLe then
            t2 = left(t2, tLe-3)'...'
        res = '\nsource' t1 '<<<error>>>' t2
        end
    liLe = 68
    liCn = 3
    afLe = 25
    if translate(word(src, 1)) == 'EXECSQL' then
        src = substr(src, wordIndex(src, 2))
    t1 = space(left(src, pos), 1)
    t2 = left(' ', substr(src, pos, 1) == ' ' ,
                 | substr(src, pos+1, 1) == ' ') ,
         || space(substr(src, pos+1), 1)
    afLe = min(afLe, length(t2))
    if length(t1) + afLe > liLe * liCn then
        t1 = '...'right(t1, liLe * liCn - afLe -3)
    else if length(t1)+length(t2) > liLe then
        t1 = left(' ', (liCn * liLe - length(t1) -afLe) // liLe)||t1
    pL = length(t1) // liLe
    if length(t2) <= liLe-pL then
        tx = t1 || t2
    else
        tx = t1 || left(t2, liLe-pL-3)'...'
    res = '\nsrc' strip(substr(tx, 1, liLe), 't')
    do cx=1+liLe by liLe to length(tx)
        res = res || '\n  +' strip(substr(tx, cx, liLe), 't')
        end
    loc = 'pos' pos 'of' length(src)
    if length(loc)+6 < pL then
        return res'\n  >' right('>>>'loc'>>>', pL)
    else
        return res'\n  >' left('', pL-1)'<<<'loc'<<<'
endProcdedur sqlMsgSrc

/*--- send a command to db2 through the TSO dsn processor ------------*/
sqlDsn: procedure expose m.
parse arg st, sys, cmd, rcOk
    x = outtrap('M.'st'.')
    push 'END'
    push cmd
    address tso 'DSN SYSTEM('sys')'
    rr = rc
    x = outtrap(off)
    if rr = 0 | rcOk = '*' | wordPos(rr, rcOk) > 0 then
        return rr
    fl = max(1, m.st.0 - 10)
    em = 'rc' rr 'for DSN SYSTEM('sys') cmd' cmd,
          '\nOuputlines' fl '-' m.st.0':'
    do lx=fl to m.st.0
        em = em '\n' strip(m.st.lx, 't')
        end
    call err em
endProcedure sqlDsn
/* copy sql    end   **************************************************/
/* copy err begin ******************************************************
    messages, errorhandling,help
***********************************************************************/
errIni: procedure expose m.
    if m.err.ini == 1 then
        return
    call outIni
    m.err.ini     = 1
    m.err.handler = ''
    m.err.cleanup = ';'
    m.err.opt     = ''
    return
endProcedure errIni
/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
    call errIni
    parse arg m.err.opt, m.err.handler
    if pos('I', translate(m.err.opt)) > 0 then
        if errOS() \== 'LINUX' then
            if sysVar('sysISPF') = 'ACTIVE' then
                    call adrIsp 'control errors return'
    return
endSubroutine errReset

/*--- error routine: abend with message ------------------------------*/
err:
    parse arg ggTxt, ggOpt
    call errIni
    drop err handler cleanup opt call return
    if ggOpt == '' & m.err.handler \== '' then do
        if 1 then do /* no detection of recursive err call loop
                        --> will anyway fail by stack overflow */
            interpret m.err.handler
            end
        else do
                     /* avoid recursive err call loop */
            drop call return
            if symbol('m.err.call') \== 'VAR' then
                m.err.call = 1
            else
                m.err.call = m.err.call + 1
            if m.err.call > 10 then do
                say 'errHandler loop:' m.err.handler
                end
            else do
                m.err.return = 1
                call errInterpret m.err.handler
                m.err.call = m.err.call - 1
                if m.err.return then
                    return result
                end
            end
        end
    call outDst
    call errSay ggTxt, 'e'
    call errCleanup
    if ggOpt == '' then
        ggOpt = m.err.opt
    ggOpt = translate(ggOpt)
    if pos('T', ggOpt) > 0  then do
        trace ?r
        say 'trace ?r in err'
        end
    if pos('H', ggOpt) > 0  then do
        call errSay 'divide by zero to show stackHistory', 'e'
        x = 1 / 0
        end
    call errSay 'exit(12)', 'e'
    exit errSetRc(12)
endSubroutine err

/*--- error routine: user message cleanup exit -----------------------*/
errEx:
    parse arg ggTxt
    call errIni
    call outDst
    call errSay ggTxt
    call errCleanup
    exit 8
endProcedure errEx

errAddCleanup: procedure expose m.
parse arg code
    if m.err.ini \== 1 then
        call errIni
        /* concatenate backwards, then it is executed also backwards */
    m.err.cleanup = ';'code || m.err.cleanup
    return
endProcedure errAddCleanup

errRmCleanup: procedure expose m.
parse arg code
    if m.err.ini \== 1 then
        call errIni
    cx = pos(';'code';', m.err.cleanup)
    if cx > 0 then
        m.err.cleanup = left(m.err.cleanup, cx) ,
                     || substr(m.err.cleanup, cx + length(code)+2)
    return
endProcedure errRmCleanup

errCleanup: procedure expose m.
    call errIni
    cl = m.err.cleanup
    if cl = ';' then
        return
    m.err.cleanup = ';'
    say 'err cleanup begin' cl
    call errInterpret cl
    say 'err cleanup end' cl
    return
endProcedure errCleanup

errInterpret: procedure expose m.
parse arg code
    interpret code
    m.err.return = 0
    return
endProcedure errInterpret
/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
    interpret 'assertRes =' arg(1)
    if \ assertRes then
        call err 'assert failed' arg(1)':' arg(2)
    return
endProcedure assert

/*--- output an errorMessage msg with pref pref
           split message in lines at '/n' ---------------------------*/
errSay: procedure expose m.
parse arg msg, pref
    parse source . . ggS3 .                           /* current rexx */
    if pref == 'e' then
        msg = 'fatal error in' ggS3':' msg
    else if pref == 'w' then
        msg = 'warning in' ggS3':' msg
    else if pref \== '' then
        msg = pref':' msg
    return outNl(msg)
endProcedure errSay

/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg, op
    call errSay msg, 'e'
    call help
    call err msg, op
endProcedure errHelp

/*--- return the Operating System we are running on: TSO or LINUX ---*/
errOS: procedure expose m.
    parse source os .
    return os
endProcedure errOS

/*--- set rc for ispf: -------------------------------------------------
    if a cmd is run by ispStart, its RC is ignored,
         but ISPF passes the value of the shared varible 3IspfRc
         back as return code
----------------------------------------------------------------------*/
errSetRc: procedure expose m.
parse arg zIspfRc
    if errOS() \== 'LINUX' then
           if sysVar('sysISPF') = 'ACTIVE' then
            address ispExec vput 'zIspfRc' shared
    return zIspfRc
endProcedure errSetRc

/*--- output a trace message if m.tr is set -----------------------*/
trc: procedure expose m.
parse arg msg
    if m.trace == 1 then
        call out 'trc:' msg
    return
endProcedure trc

debug: procedure expose m.
parse arg msg
    if m.debug == 1 then
        call out 'debug' msg
    return
endProcedure debug

/*--- display the first comment block of the source as help ----------*/
help: procedure expose m.
    parse source . . s3 .
    call out right(' help for rexx' s3, 79, '*')
    do ax=1 to arg()
        say ' ' arg(ax)
        end
    do lx=1 by 1
        if pos('/*', sourceLine(lx)) > 0 then
            leave
        else if lx > 10 then do
            call out 'initial commentblock not found for help'
            return
            end
        end
    do lx=lx+1 by 1
        li = strip(sourceLine(lx), 't', ' ')
        if pos('*/', li) > 0 then
            leave
        call out li
        end
    call out right(' end help for rexx' s3, 79, '*')
    return 4
endProcedure help

/*--- output all lines (separated by '\n') of all args --------------*/
outNl: procedure expose m.
    do ax=1 to max(1, arg())
        msg = arg(ax)
        sx = 0
        bx = -1
        do lx=1 until bx >= length(msg)
                ex = pos('\n', msg, bx+2)
            if ex < 1 then
                ex = length(msg)+1
            call out substr(msg, bx+2, ex-bx-2)
            bx = ex
         end
        end
    return 0
endProcedure outNl
/* copy err end   *****************************************************/
/* copy out begin ******************************************************
    out interface simple with say only
***********************************************************************/
outIni: procedure expose m.
parse arg msg
    return
endProcedure outIni

/*--- output a message to the current destination -------------------*/
out: procedure expose m.
parse arg msg
    say msg
    return 0
endProcedure out

/*--- set a new out destination and return old one ------------------*/
outDst: procedure expose m.
parse arg d
    return ''
endProcedure outDst
      /* return the contents of a string or std input */
inp2str: procedure expose m.
    parse arg rdr, opt
    return rdr
endProcedure inp2str
/* copy out end   *****************************************************/
}¢--- A540769.WK.REXX.O13(CSV) cre=2013-09-23 mod=2013-09-23-10.04.43 A540769 ---
/* copy csv begin *****************************************************/
csvIni: procedure expose m.
    if m.csv.ini == 1 then
        return
    m.csv.ini = 1
    call jIni
    call classNew "n CsvRdr u JRWO, f RDR r", "m",
        , "jReset m.m.rdr = arg",
        , "jOpen call csvRdrOpen m, opt",
        , "jClose call jClose m.m.rdr; call oMutatName m, 'CsvRdr'"
    call classNew "n CsvRdrR u CsvRdr", "m",
        , "jReadO return csvRdrReadO(m)"
    call classNew "n CsvWrt u JRW, f RDR r", "m",
        , "jReset m.m.rdr = arg",
        , "jOpen call csvWrtOpen m, opt",
        , "jClose call jClose m.m.rdr; call oMutatName m, 'CsvWrt'"
    call classNew "n CsvWrtR u CsvWrt", "m",
        , "jRead return csvWrtRead(m, var)"
    return
endProcedure csvIni

/*--- create a new csvRdr --------------------------------------------*/
csvRdr: procedure expose m.
parse arg rdr
    return jReset(oNew('CsvRdr'), rdr)
endProcedure csvRdr

/*--- open csvRdr: read first line and create dataClass --------------*/
csvRdrOpen: procedure expose m.
parse arg m
    call jOpen m.m.rdr, '<'
    if jRead(m.m.rdr, m'.LINE') then do
        ff = 'f' repAll(m.m.line, ',', ' v, f ') 'v'
        m.m.class = classNew("n* CsvF u" ff)
        end
    call oMutatName m, 'CsvRdrR'
    return
endProcedure csvRdrOpen

/*--- read next line and return derived object -----------------------*/
csvRdrReadO: procedure expose m.
parse arg m
    do until m.m.line <> ''

        if \ jRead(m.m.rdr, m'.LINE') then
            return ''
        end
    var = oNew(m.m.class)
    ff = oClaMet(m.m.class, 'oFlds')
    s = m'.SCAN'
    call scanSrc s, m.m.line
    do fx=1
        f1 = substr(m.ff.fx, 2)
        if scanString(s, '"') then
            m.var.f1 = m.s.val
        else do
            call scanUntil s, ','
            m.var.f1 = m.s.tok
            end
        if scanEnd(s) then
            leave
        if \ scanLit(s, ',') then
            call scanErr s, ',' expected
        end
    if fx <> m.ff.0 then
        call scanerr s, 'csv cla' m.ff.0 'fields but' cx 'in line'
    return var
endProcedure csvRdrReadO

/*--- create a new csvRdr --------------------------------------------*/
csvWrt: procedure expose m.
parse arg rdr
    return jReset(oNew('CsvWrt'), rdr)
endProcedure csvWrt

/*--- open csvRdr: read first line and create dataClass --------------*/
csvWrtOpen: procedure expose m.
parse arg m
    call jOpen m.m.rdr, '<'
    m.m.class = ''
    m.m.o1    = ''
    call oMutatName m, 'CsvWrtR'
    return
endProcedure csvWrtOpen

/*--- read next line and return derived object -----------------------*/
csvWrtRead: procedure expose m.
parse arg m, var
    if m.m.o1 == '' then
        i1 = jReadO(m.m.rdr)
    else do
        i1 = m.m.o1
        m.m.o1 = ''
        end
    if i1 == '' then
        return 0
    if m.m.class == '' then do
        m.m.class = objClass(i1)
        m.m.o1 = i1
        t = ''
        ff = oFlds(i1)
        do fx=1 to m.ff.0
            t = t','substr(m.ff.fx, 2)
            end
        m.var = substr(t, 2)
        return 1
        end
    else do
        t = ''
        ff = oFlds(i1)
        do fx=1 to m.ff.0
            f1 = i1 || m.ff.fx
            val = m.f1
            if pos(',', val) > 0 | pos('"', val) > 0 then
                t = t','quote(val, '"')
            else
                t = t','val
            end
        m.var = substr(t, 2)
        return 1
        end
endProcedure csvWrtRead

/* copy csv end   *****************************************************/
}¢--- A540769.WK.REXX.O13(DBACHECK) cre=2009-06-09 mod=2012-11-26-17.12.39 A540769 ---
/* rexx ****************************************************************
synopsis:     DBACHECK                                            v1.0

edit macro to enforce CS defaults for DB2:

    createTablespace          createIndex
      stoGroup GSMS            stoGroup GSMS
      priQty     -1            priQty     -1
      secQty     -1            secQty     -1
      compress  YES            copy       NO
      segSize    64 falls |0                     falls nicht part or LOB
      dssize    16G                              falls partitioniert
      large    entfernen
      lockmax  SYSTEM                            falls 0 oder lockSize
************************************************************************
26.11.2011 w. keller fix add segsize 0 if not segmented (not 64|||)
          end of help */ /*
27.08.2011 w. keller segSize 0 erlauben und nicht ändern
24.06.2011 w. keller lockmax abhängig von lockSize
22.06.2011 w. keller neue copies
 1.09.2010 w. keller support index on auxilary table without columns
 8.06.2010 w. keller dsSize 16GB
11.02.2010 w. keller EX0 für exit 0, damit's keinen macro fehler gibt
18.01.2010 w. keller tentative: allow $ in sql identifiers
08.09.2009 w. keller fix error that dbaMulti flag was ignored
25.08.2009 w. keller Frage für Universal TS, Fehler fuer rotate
12.08.2009 w. keller argument end macht save und end
13.11.2008 w. keller kein Absturz auf leerem input
25.09.2008 w. keller geht auch für CDL und PartitonenAttribute
26.06.2008 w. keller scanner geht über recordGrenzen
26.06.2008 w. keller create auf last Line und  -  1 gehen jetzt
11.12.2007 w. keller dsSize 32G
26.11.2007 w. keller priqty/secQty immer auf -1
24.09.2007 w. keller priqty/secQty < 1 auf -1 übersetzen
13.07.2007 w. keller remove large option in create tablespace
09.02.2007 w. keller remove // dd * lines if first line is not jcl
07.02.2007 w. keller dssize
05.02.2007 w. keller neu erstellt

toDo & Ideas
    load data auf resume no replace umstellen, wegen RTS?
    bekommt edit error, wenn letztes Zeile mit ; --> testCase
***********************************************************************/
parse arg args
    call errReset 'h'
    call jIni
    m.debug = 0          /* debug output */
    if pos('?', args) > 0 then
        exit help()
    call adrIsp 'control errors return'
    if args = '' then
        if adrEdit('macro (args)', '*') <> 0 then
            exit errHelp('please run as edit macro')
    uArgs = translate(args)
    changes = dbaCheck(args)
    if wordPos('END', uArgs) > 0 then do
        if changes > 0 then
            call adrEdit 'save', 0 4
        call adrEdit 'end'
        end
    if wordPos('EX0', uArgs) > 0 | wordPos('END', uArgs) > 0 then
        exit 0
    exit changes

dbaCheck: procedure expose m.
parse upper arg args
    call adrEdit "(cn) = linenum .zl", 4
    if cn < 1 then
        exit 0
    /* call adrEdit 'setUndo on' nützt nicht, initMacro kann
                                 nicht undo't werden ... */
    m.cdl = isCdl()
    call mCut fatal, 0
    call debug 'isCdl' m.cdl
    call overrideTree mapReset(os, 'k')
    if m.debug then
        call overrideTreeShow os
    call scanWinIni
    call editReadIni
    call jReset oMutate(er, 'EditRead'), 1
    es = scanSql(er)
    if m.cdl then
        call scanWinOpts es, 5, 2, 9, 72
    lx = 0
    m.an.0 = 0
                        /* jedes create suchen und analysieren -> an */
    do forever
        lx = seekId(es, lx+1, 'CREATE')
        if lx < 1 then
            leave
        call debug 'seek found CREATE at' lx scanPos(es)
        call analyseCreate es, os, an
        call jClose es
        end
    do forever
        lx = seekId(es, lx+1, 'ROTATE')
        if lx < 1 then
            leave
        say 'never do a rotate|'
        call mAdd fatal, 'fehler: rotate'
        call jClose es
        end
    if m.debug then
        call anaShow an
    m.wr.0 = 0
                        /* overrides und adds bestimmen -> wr */
    call override an, wr
    if m.debug then
        do y=1 to m.wr.0
           w = wr'.'y
           say 'over' m.w.fPos '-' m.w.tPos '=' m.w
           end
    oCnt = m.wr.0
    ddSt = findDDStar(0)
    say oCnt 'overrides and' ddSt '//DD*'
    if (oCnt + ddSt + m.fatal.0) <= 0 then
        return 0
    if args ^= 'DBAMULTI' then do
        call applyOverrides wr          /* apply to edited file */
        if ddSt > 0 then
            call findDDStar 1
        return oCnt + ddSt
        end
    do forever                          /* Benutzer muss entscheiden */
        say 'bitte wählen Sie'
        say '   m = multiClone ohne overrides'
        say '   o = override Werte, save und end'
        say '   e = edit override Werte'
        say '   f = edit ohne override'
        parse upper pull w
        w = left(strip(w), 1)
        if w = 'M' then
            exit 0
        if w == 'O' | w == 'E' then do
            call applyOverrides wr      /* apply to edited file */
            if ddSt > 0 then
                call findDDStar 1
            end
        if w == 'O' then do
            call adrEdit 'SAVE'
            call adrEdit 'END'
            end
        if pos(w, 'OEF') > 0 then
            exit 4
        say 'ungültige Antwort' w
        end
endProcedure dbaCheck

isCdl: procedure expose m.
parse arg lx
    if lx = '' then do
        if isCdl(1) then
            return 1
        if isCdl('CREATE') then
            return 1
        if isCdl('DROP') then
            return 1
        return 0
        end
    if ^ datatype(lx, 'n') then do
         if adrEdit("seek" lx "word first", 4) = 4 then
             return 0
         call adrEdit "(lx) = cursor"
         end
    call adrEdit '(ll) = line' lx
    if left(ll, 8) = 'SQLID' then
        return subword(ll, 2, 2) = 'SET CURRENT'
    if left(ll, 8) = 'CREATE' then
        return wordPos(word(ll, 2), 'CREATE ALTER ADMIN --#SET') > 0
    if left(ll, 8) = 'ALTER' then
        return wordPos(word(ll, 2), 'CREATE ALTER ADMIN --#SET') > 0
    if left(ll, 8) = 'DROP' then
        return wordPos(word(ll, 2), 'DROP ADMIN --#SET') > 0
    return 0
endProcedure isCdl

seekId: procedure expose m.
parse arg es, lx, id
    if ^ m.cdl then
        return scanSqlSeekId(es, lx, id)
    do forever
        lx = scanSqlSeekId(es, lx, id, 'WORD 9 80')
        if lx < 1 then
            return lx
        call debug 'seek found CREATE at' lx scanPos(es)
        call adrEdit '(ll) = line' lx
        if word(left(ll, 8), 1) = 'CREATE' then
            return lx
        call jClose es
        end
endProcedure seekId
/*--- we define the scan structure and overrides
         in a tree ---------------------------------------------------*/
overrideTree: procedure expose m.
parse arg rt
    ts = overrideTreeNd(rt, 'TABLESPACE', 'TS')
    us = overrideTreeNd(ts, 'USING', 'US')
    sg = overrideTreeNd(us, 'STOGROUP', 'SG', 'i GSMS')
    c  = overrideTreeNd(sg, 'PRIQTY', 'PQ', 'n -1')
    c  = overrideTreeNd(sg, 'SECQTY', 'SQ', 'n -1' , PQ)
    c  = overrideTreeNd(ts, 'SEGSIZE', 'SE', 'n 64', '|0')
    c  = overrideTreeNd(ts, 'DSSIZE', 'DS', 'G 16 G')
    c  = overrideTreeNd(ts, 'NUMPARTS', 'PA', 'n')
    c  = overrideTreeNd(ts, 'LOCKMAX', 'LM', 'ni SYSTEM')
    c  = overrideTreeNd(ts, 'LOCKSIZE', 'LS', 'i')
    co = overrideTreeNd(ts, 'COMPRESS', 'CR', 'i YES')
    br = overrideTreeNd(ts, '(', '(')
    c  = overrideTreeNd(br, 'PARTITION', 'PR?', 'n')
    call mapAdd c, 'USING', us
    call mapAdd c, 'COMPRESS', co
    call mapAdd br, 'PART', c
    ix = overrideTreeNd(rt, 'INDEX', 'IX')
    call mapAdd ix, 'USING', us
    c  = overrideTreeNd(ix, 'COPY', 'CY', 'i NO')
    br = overrideTreeNd(ix, '(', '(')
    c  = overrideTreeNd(br, 'PARTITION', 'PR?', 'n')
    call mapAdd c, 'USING', us
    call mapAdd br, 'PART', c
    return
endProcedure overrideTree

/*--- create a node in the overrideTree with
          pa=parent, scan=token, ident,
          over=data type and override value, ty=id of type node ------*/
overrideTreeNd: procedure expose m.
parse arg pa, scan, ident, over, ty
    ch = mapReset(pa'.'ident, 'k')
    call mapAdd pa, scan, ch
    m.ch.id      = ident
    m.ch.att = scan
    m.ch.dataType = word(over, 1)
    m.ch.overVal = subword(over, 2)
    if ty ^== '' then
        m.ch.overType = ty
    else
        m.ch.overType = ident
    return ch
endProcedure overrideTreeNd

/*--- show the override tree -----------------------------------------*/
overrideTreeShow: procedure expose m.
parse arg pa, pr
    ks = mapKeys(pa)
    do kx = 1 to m.ks.0
        ch = mapGet(pa, m.ks.kx)
        say left(pr m.ks.kx, 20) right(ch, 2) ,
             'over' m.ch.overVal 'type' m.ch.overType
        call overrideTreeShow ch, pr'  '
        end
    return
endProcedure overrideTreeShow

/*--- analyse a create statement -------------------------------------*/
analyseCreate: procedure expose m.
parse arg m, os, an
    if m.m.val ^== 'CREATE' then
        call scanErr m, 'analyseCreate but token' m.m.val 'not CREATE'
    fp = scanPos(m)
    if ^ scanSqlId(m) then
        call scanErr m, 'no id'
    subTyp = ''
    do while wordPos(m.m.val, 'LARGE LOB UNIQUE WHERE') > 0
        subTyp = strip(subTyp m.m.val)
        if m.m.val = 'WHERE' then do
            call checkIds m, 'NOT', 'NULL'
            subTyp = subTyp 'NOT NULL'
            end
        if ^ scanSqlId(scanSkip(m)) then
            call scanErr m, 'no id'
        end
    typ = m.m.val
    if ^ mapHasKey(os, typ) then do
        call  scanSqlQuId scanSkip(m)
        call debug 'analyseCreate skipping' subTyp typ 'name' m.m.val
        return
        end
    nP = scanPos(m)
    if ^ scanSqlQuId(scanSkip(m)) then
        call scanErr m, 'name missing for create' subtyp typ
    na = m.m.val
    on = ''
    if typ = 'TABLESPACE' then do
        call checkIds m, 'IN'
        if ^ scanSqlId(scanSkip(m)) then
            call scanErr m 'dbName expected'
        na = m.m.val'.'na
        end
    else if typ = 'INDEX' then do
             /* wir muessen ueber die Column List scannen,
                damit wir sie nicht mit der PartitionListe verwechseln*/
        if ^ (scanSqlId(m) & m.m.val = 'ON') then
            call scanErr m, 'ON expected after index' na
        if ^ scanSqlQuId(scanSkip(m)) then
            call scanErr m, 'table name expected'
        on = 'on' m.m.val
                 /* aux tables haben keine column list ||| */
        if (scanSqlClass(m) & m.m.sqlClass = '(') then
            call scanSqlSkipBrackets m, 1
        end
    say left('analyse', 8) leftl(na, 17) strip(subtyp typ) on
    a = mapReset(mAdd(an, mapGet(os, typ)), 'k')
    m.a.name = na
    m.a.subType = subTyp
    m.a.fPos = fP
    m.a.nPos = nP
    call analyseNode m, a
    call checkFatal a
    tP = scanPos(m)
    if m.m.sqlClass = ';' then
        tP = word(tP, 1) word(tP, 2) - 1
    m.a.tPos = tP
    return
endProcedure analyseCreate

/*--- analyse the substatement at scanner sc,
           according to the description in node nd.1 -----------------*/
analyseNode: procedure expose m.
parse arg sc, nd.1, stopper
    top = 1    /* top of node stack */
    do while scanSqlClass(sc) & pos(m.sc.sqlClass, ';'stopper) < 1
        if m.sc.sqlClass = 'i' then
            att = m.sc.val
        else if pos(m.sc.sqlClass, '()') > 0 then
            att = m.sc.sqlClass
        else
            iterate
        do ox=top by -1 to 1   /* search id in all nodes in stack */
            nd = nd.ox
            os = m.nd
            if mapHasKey(os, att) then
                leave
            end
        if ox < 1 then do
            if att == '(' then
                call scanSqlSkipBrackets sc, 1
            iterate
            end
        osNx = mapGet(os, att)                /* the os node */
        chfPos = scanPos(sc)
        ty = m.osNx.dataType
        if ty ^== '' then do     /* scan the value of the attribute */
            if ty = 'i' then
                res = scanSqlId(sc)
            else if ty = 'n' then
                res = scanSqlNum(sc)
            else if ty = 'G' then
                res = scanSqlNumUnit(sc, 'G M K')
            else if ty = 'ni' then do
                res = scanSqlNum(sc)
                if \ res then
                    res = scanSqlId(sc)
                end
            else
                call err 'overwrite type' ty 'not supported'
            if ^ res then
                call scanErr sc, ty 'value expected after' att
            res = m.sc.val
            end
        chId = m.osNx.id
        if right(chId, 1) = '?' then
            chId = chId || res
        ch = mapReset(nd.ox'.'chId, 'k') /* the new analysis node*/
        m.ch.fPos = chfPos
        m.ch.tPos = scanPos(sc)
        if ty ^== '' then
            m.ch.val = res
        call mapAdd nd.ox, chId, osNx
        if att = '(' then do
            top = ox
            call analyseNode sc, ch, ')'
            if m.sc.sqlClass ^== ')' then
                call scanErr sc, 'closing ) expected'
            iterate
            end
        top = ox+1               /* pop higher nodes and push new one */
        nd.top = ch
        end
    return
endProcedure analyseNode

/*--- show the the root analysises in stem a -------------------------*/
anaShow: procedure expose m.
parse arg a
    do x=1 to m.a.0
        call anaShow1 a'.' || x
        end
    return

/*--- show the analysis node a and its subnodes ----------------------*/
anaShow1: procedure expose m.
parse arg a
    os = m.a
    say a '->' os
    if ^ abbrev(os, 'OS.') then
        return
    say '  val' m.a.val 'fr' m.a.fPos 'to' m.a.tPos
    if wordPos(m.os.id, 'TS IX') > 0 then
        say '  name' m.a.name '@' m.a.nPos
    ks = mapKeys(a)
    do kx = 1 to m.ks.0
        call anaShow1 a'.'m.ks.kx
        end
    return
/*--- show the analysis node a and its subnodes ----------------------*/
checkFatal: procedure expose m.
parse arg a
    if mapHasKey(a, 'PA') & mapHasKey(a, 'SE') then
      if mapGet(a,'SE.VAL') <> 0 then do
        say 'do you really want an universal tablespace' m.a.name,
             'numParts' mapGet(a,'PA.VAL') 'segSize' mapGet(a,'SE.VAL')
        parse upper pull yes
        if \ (abbrev(yes, 'Y') | abbrev(yes, 'J')) then
            call mAdd fatal, 'fehler: universal TS' m.a.name
        end
    return
endProcedure checkFatal

/*--- generate the override for all anaysis root nodes ---------------*/
override: procedure expose m.
parse arg an, wr
    do ax=1 to m.an.0
        call overrideNode an'.'ax, an'.'ax, wr
        end
    return
endProcedure override

/*--- create the necessary overrides for node rt and it's subnodes ---*/
overrideNode: procedure expose m.
parse arg rt, an, wr
    os = m.an
    doOv = m.os.overVal <> '' & m.os.overVal <> m.an.val
    if doOv & abbrev(m.os.overType, '|') then
        doOv = m.an.val <> substr(m.os.overType, 2)
    if doOv & m.os.overType == 'LM' then do
        ls = mapGet(rt, 'LS.VAL', '')
        doOv = m.an.val = 0 & \ abbrev(ls, 'TABL', 1)
        end
    if doOv then
        call overrideAtt rt, an, os, wr
    if m.os.overType = 'TS' then do
        wx = wordPos('LARGE', m.an.subType)
        if wx > 0 then  do
            o = m.an.subType
            n = subWord(o, 1, wx-1) subWord(o, wx+1)
            call overrideOne wr, n 'TABLESPACE', m.an.fPos, m.an.nPos
            call overrideSay 'override', rt, 'subType', n, o
            end
        end
    ids = ''
    keys = mapKeys(an)
    do ax=1 to m.keys.0
        nd = an'.'m.keys.ax
        o1 = m.nd
        ids = ids m.o1.id
        call overrideNode rt, nd, wr
        end
    keys = mapKeys(os)
    do ox=1 to m.keys.0
        nd = mapGet(os, m.keys.ox)
        if wordPos(m.nd.id, ids) < 1 then
            call overrideAdd rt, an, nd, wr
        end
    return
endProcedure overrideNode

/*--- add to wr the override attribute osprefixed by tokens in scPa
          for analysis node an with root rt pre ----------------------*/
overrideAdd: procedure expose m.
parse arg rt, an, os, wr, scPa
    scPa = strip(scPa m.os.att)
    if pos('?', os an) > 0 then
        return
    if m.os.overVal ^== '' then do
        ov = m.os.overVal
        ty = m.os.overType
        jj = m.os.id
        if jj = 'SE' then
            if mapHasKey(rt, 'PA') | pos('LOB', m.rt.subType) > 0 then
                ov = 0
        if ty = 'DS' then
            if ^mapHasKey(rt, 'PA') | pos('LOB', m.rt.subType) > 0 then
                ty = ''
        if ty = 'LM' then do
            ls = mapGet(rt, 'LS.VAL', '')
            if ls == '' | ls == 'ANY' | abbrev(ls, 'TABL', 1) then
                ty = ''
            end
        if ty <> '' then do
            call overrideOne wr, scPa ov,
                      , m.an.tPos, m.an.tPos
            call overrideSay 'add', rt, scPa, ov
            scPa = ''
            end
        else
            call debug 'no overrideAdd' scPa
        end
    keys = mapKeys(os)
    do ox=1 to m.keys.0
        call overrideAdd rt, an, mapGet(os, m.keys.ox), wr, scPa
        end
    return
endProcedure overrideAdd

/*--- override an attribute of cp with overrideNode on ---------------*/
overrideAtt: procedure expose m.
parse arg rt, an, os, wr
    o = overrideOne(wr, m.os.overVal, m.an.fPos, m.an.tPos)
    call overrideSay 'override', rt, m.os.att, m.os.overVal,m.an.val' '
    return 0
endProcedure overrideAtt

/*--- create on override node an add it ------------------------------*/
overrideOne: procedure expose m.
parse arg wr, new, fp, tp
    o = mAdd(wr, new)
    m.o.fPos = fp
    m.o.tPos = tp
    return o
endProcedure overrideOne

/*--- say what we want to override -----------------------------------*/
overrideSay: procedure expose m.
parse arg f, rt, att, new, old
    m = left(f, 8) leftl(m.rt.name, 17) leftl(att, 8) leftl(new, 8)
    if old ^== '' then
        m = m 'from' old
    say m
    return
endProcedure overrideSay

/*--- edit a sequence of overrides into data -------------------------*/
applyOverrides: procedure expose m.
parse arg wr
    call adrEdit "(w) = linenum .zl"
    w = max(w, m.wr.0) + 10
    w = length(w)
    do x=1 to m.wr.0
        m.si.x = right(word(m.wr.x.fPos, 1)+0, w, 0) ,
                 right(word(m.wr.x.fPos, 2)+0, 3, 0) right(x, w)
        end
    m.si.0 = m.wr.0
    call sort si, so

    delta = 0
    cx = 1
    wx = word(m.so.cx, 3)
    do while cx <= m.so.0
        lx = word(m.wr.wx.fPos, 1)
        line = applyGetLine(lx+delta)
        call mAdd mCut(wrk, 0), left(line, word(m.wr.wx.fPos, 2)-1)
        lStX = lx
        wy = wx
        do forever
            call app72 wrk, m.wr.wx
            cx = cx + 1
            if cx > m.so.0 then
                leave
            wx = word(m.so.cx, 3)
            if word(m.wr.wx.fPos, 1) > word(m.wr.wy.tPos, 1) then
                leave
            else if m.wr.wx.tPos == m.wr.wy.tPos ,
                     & (m.wr.wx.fPos == m.wr.wy.fPos ,
                       |m.wr.wx.fPos == m.wr.wx.tPos) then
                nop
            else if word(m.wr.wx.fPos, 1) <> word(m.wr.wy.tPos, 1) then
                call err 'bad sequence in override'
            else if word(m.wr.wx.fPos, 2) <= word(m.wr.wy.tPos, 2) then
            do
                say wy m.wr.wy.tPos
                call err 'overlap in override'
                end
            else do
                if lx <> word(m.wr.wx.fPos, 1) then do
                    lx = word(m.wr.wx.fPos, 1)
                    line = applyGetLine(lx+delta)
                    end
                px = word(m.wr.wy.tPos, 2)
                call app72 wrk, substr(line, px,
                    , word(m.wr.wx.fPos, 2) - px), px
                wy = wx
                end
            end
        if lx <> word(m.wr.wy.tPos, 1) then do
            lx = word(m.wr.wy.tPos, 1)
            line = applyGetLine(lx+delta)
            end
        px = word(m.wr.wy.tPos, 2)
        call app72 wrk, substr(line, px, 72+1-px), px, 1
        do xx = lStx to lx
            call adrEdit 'delete' (lStx+delta)
            end
        delta = delta + lStX - lx - 1
        do xx=1 to m.wrk.0
            if m.cdl then
                li = left(m.applyGetLineMark || m.wrk.xx, 80)
            else
                li = left(m.wrk.xx, 72)m.applyGetLineMark
            call adrEdit "line_after" (lx+delta) "= (li)"
            delta = delta + 1
            end
        end
    do fx=1 to m.fatal.0
         li = copies('CREATE  ', m.cdl) m.fatal.fx
         call adrEdit "line_after 1 = (li)"
         end
    return
endProcedure applyOverrides

/*--- return the sql portion of line lx
          and put the mark field into m.applyGetLineMark -------------*/
applyGetLine: procedure expose m.
parse arg lx
    call adrEdit "(line) = line" (lx)
    if m.cdl then do
        m.applyGetLineMark = left(line, 8)
        if m.applyGetLineMark <> 'CREATE' then
            call err 'bad applyGetLine mark' m.applyGetLineMark ,
                     'in line' lx':' strip(line, 't')
        return substr(line, 9, 72)
        end
    else do
        m.applyGetLineMark = substr(line, 73, 8)
        return left(line, 72)
        end
endProcedure applyGetLine

/*--- append to stem st string val, at position miLe
          if fix=1 exactly at the position else can shift to right ---*/
app72: procedure expose m.
parse arg st, val, miLe, fix
    sx = m.st.0
    li = strip(m.st.sx, 't')
    if miLe ^== '' then do
        vx = verify(val, ' ')
        if vx = 0 then
            miLe = miLe + length(val)
        else
            miLe = miLe + vx - 1
        end
    val = strip(val)
    if fix = 1 then do
        if length(li)+1 >= miLe then do
            sx = sx + 1
            li = ''
            end
        nn = left(li, miLe-1)val
        end
    else do
        if length(li)+1 < miLe then
            nn = left(li, miLe-1)val
        else if length(li val) < 72 then
            nn = li val
        else
            nn = left(li, 80)val
        do while length(nn) >= 72
            m.st.sx = left(nn, 72)
            sx = sx + 1
            nn = substr(nn, 73)
            end
        end
    m.st.sx = nn
    m.st.0 = sx
    return
endProcedure app72

/*--- scan from scanner m the ids arg(2) ... arg(arg()) --------------*/
checkids: procedure expose m.
parse arg m
    do ax=2 to arg()
        if ^ scanSqlId(scanSkip(m)) & m.m.val <> translate(arg(ax)) then
            call scanErr m, 'sqlId' arg(ax) 'expected'
        end
    return
endProcedure checkIds

/*--- find the errously genereate // DD * statements ----------------*/
findDDStar: procedure expose m.
parse arg rem
parse arg m, lx, cmd
    c = 0
    call adrEdit "cursor = 1"
    do while adrEdit("seek '//' 1", 4) = 0 /* find each command */
        call adrEdit "(lx) = cursor"
        call adrEdit "(li) = line" lx
        if lx = 1 then do
            say 'first line looks like jcl, no search for //DD*'
            return 0
            end
        if space(li, 0) ^== '//DD*' then do
            if ^ rem then
                say 'ignoring // line' lx strip(li,'t')
            end
        else do
            c = c + 1
            if rem then do
                call adrEdit 'delete' lx
                call adrEdit "cursor =" (lx-1)
                end
            end
        end
    return c
endProcedure findDDStar

/*--- fill src with spaces to get at least length len ----------------*/
leftl: procedure
parse arg src, len
    if len > length(src) then
        return left(src, len)
    else
        return src
endProcedure leftl
/*--- define reader reading edit data from line lx -------------------*/
editReadIni: procedure expose m.
    call classNew "n EditRead u JRW", "m",
        , "jRead  return editRead(m, var)",
        , "jOpen" ,
        , "jReset m.m.linex = arg - 1"
    return m
endProcedure editReadIni
/*--- read next line from edit data ----------------------------------*/
editRead: procedure expose m.
parse arg m, var
    m.m.lineX = m.m.lineX + 1
    if adrEdit('(ll) = line' m.m.lineX, 12) ^= 0 then
        return 0
    m.var = ll
    return 1
endProcedure editRead

/* copy sort begin ****************************************************/
sort: procedure expose m.
parse arg i, o, cmp
    if cmp == '' then
        m.sort.comparator = "cmp = m.l.l0 <<= m.r.r0"
    else if length(cmp) < 6 then
        m.sort.comparator = "cmp = m.l.l0" cmp "m.r.r0"
    else if pos(';', cmp) < 1 then
        m.sort.comparator = "aLe = l'.'l0; aRi = r'.'r0; cmp =" cmp
    else
        m.sort.comparator = "aLe = l'.'l0; aRi = r'.'r0;" cmp
    call sort1 i, 1, m.i.0, o, 1, sort.work, 1
    m.o.0 = m.i.0
    return
endProcedure sort

sort1: procedure expose m.
parse arg i, i0, le, o, o0, w, w0
    if le <= 3 then do
        if le = 3 then do
            call sortMerge i, i0, i0+1, i, i0+1, i0+2, w, w0
            call sortMerge i, i0+2, i0+3, w, w0, w0+2, o, o0
            end
        else if le = 2 then
            call sortMerge i, i0, i0+1, i, i0+1, i0+2, o, o0
        else if le = 1 then
            m.o.o0 = m.i.i0
        return
        end
    h = (le + 1) % 2
    call sort1 i, i0,   h,    o, o0+le-h, w, w0
    call sort1 i, i0+h, le-h, w, w0,      o, o0
    call sortMerge o, o0+le-h, o0+le, w, w0, w0+le-h, o, o0
    return
endProcedure sort1

sortMerge: procedure expose m.
parse arg l, l0, le, r, r0, re, o, o0
    do while l0 < le & r0 < re
        interpret m.sort.comparator
        if cmp then do
            m.o.o0 = m.l.l0
            l0 = l0 + 1
            end
        else do
            m.o.o0 = m.r.r0
            r0 = r0 + 1
            end
        o0 = o0 + 1
        end
    do while l0 < le
        m.o.o0 = m.l.l0
        l0 = l0 + 1
        o0 = o0 + 1
        end
    do while r0 < re
        m.o.o0 = m.r.r0
        r0 = r0 + 1
        o0 = o0 + 1
        end
    return
endProcedure sortMerge
/* copy sort end   ****************************************************/
/* copy scanSql begin *************************************************/
/*--- initialize with reader inRdr ----------------------------------*/
scanSql: procedure expose m.
parse arg inRdr
    return scanSqlReset(scanWin(inRdr), inRdr)

scanSqlReset: procedure expose m.
parse arg m, r, scanWin
    if scanWin \== 0 then
        call scanWinOpts m, 5, 2, 1, 72
    else
        m.m.rdr = r
    return scanOpts(m, , '0123456789_' , '--')

scanSqlSeekId: procedure expose m.
parse arg m, lx, cmd, opts
    if opts = '' then
        opts = word
    if adrEdit("cursor =" max(trunc(lx), 1), 12) = 12 then
        return -1
    do while adrEdit("seek" cmd opts, 4) = 0 /* find each command*/
        call adrEdit "(fx) = cursor"
        if m.debug then do
            call adrEdit "(LI) = LINE" fx
            call debug 'scanSqlSeekId after' lx 'found' cmd 'at' fx li
            end
        call jReset m.m.rdr, fx
        call jOpen m, '<', fx
        do while word(scanPos(m), 1) <= fx & scanSqlClass(m)
            if m.m.sqlClass = 'i' & m.m.val == cmd then
                return fx
            end
        call jClose m
        end
    return -1
endProcedure scanSqlSeekId
/*--- scan a sql token put class in m.sqlclass:
      'i': ordinary identifier   e.g. Name
      'd': delimited identifier  e.g. "Delimited"
      'q': qualified identifier  e.g. abc."efg"
      'u': integer units         e.g. 8G
      'n': number                e.g. -234 or .2e3
      's': string                e.g. 'abc''ef'
      '' : at end
         : any other character   e.g. ;
      ----------------------------------------------------------------*/
scanSqlClass: procedure expose m.
parse arg m, retSpace
    m.m.val = ''
    if scanSpaceNl(m) & retSpace = 1 then do
        m.m.sqlClass = 'b'
        return 1
        end
    c2 = scanLook(m ,2)
    if scanString(m, "' x' X'") then do
        m.m.sqlClass = 's'
        if \abbrev(m.m.tok, "'") then
            m.m.val = x2c(m.m.val)
        end
    else if scanSqlQuId(m) then do
        if m.m.val.0 > 1 then
            m.m.sqlClass = 'q'
        else if abbrev(m.m.tok, '"') then
            m.m.sqlClass = 'd'
        else
            m.m.sqlClass = 'i'
        end
    else if scanSqlNum(m, 0)  then
        m.m.sqlClass = 'n'
    else if scanChar(m, 1) then
        m.m.sqlClass = m.m.tok
    else if scanAtEnd(m) then do
        m.m.sqlClass = ''
        return 0
        end
    else
        call scanErr m, 'cannot scan sql'
    return 1
endProcedure scanSqlClass

scanSqlSkipBrackets: procedure expose m.
parse arg m, br
    if br \== '' then
        nop
    else if scanLit(m, '(') then
        br = 1
    else
        return 0
    do while scanSqlClass(m) & m.m.sqlClass \== ';'
        if m.m.sqlClass = '('        then br = br + 1
        else if m.m.sqlClass \== ')' then iterate
        else if br > 1              then br = br - 1
        else                             return 1
        end
    call scanErr m, '; or eof, but' br 'closing ) expected'
endProcedure skipBrackets
/*--- scan an ordinary sql identifier e.g. abc, ef_12 ----------------*/
scanSqlId: procedure expose m.
parse arg m
    if \ scanName(m) then
        return 0
    m.m.val = translate(m.m.tok)
    return 1
endProcedure scanSqlId

/*--- scan a delimited or ordinay sql identifier ---------------------*/
scanSqlDeId: procedure expose m.
parse arg m
    if scanSqlId(m) then
        return 1
    if \ scanString(m, '"') then
        return 0
    m.m.val = strip(m.m.val, 't')
    return 1
endProcedure scanSqlDeId

/*--- scan a qualified sql identifier --------------------------------*/
scanSqlQuId: procedure expose m.
parse arg m
    res = ''
    rto = ''
    do qx=1
        if \ scanSqlDeId(m) then do
            if qx <> 1 then
                call scanErr m, 'id expected after .'
            return 0
            end
        m.m.val.qx = m.m.val
        res = res'.'m.m.val
        rto = rto'.'m.m.tok
        if \ scanLit(scanSkip(m), '.') then
            leave
        call scanSpaceNl m
        end
    m.m.val.0 = qx
    m.m.val = substr(res, 2)
    m.m.tok = substr(rto, 2)
    return 1
endProcedure scanSqlQuId

/*--- scan a sql number ----------------------------------------------*/
scanSqlNum: procedure expose m.
parse arg m, checkEnd, noSp
    si = ''
    if noSp == 1 then
        call err 'deimplement noSp, use scanNum instead'
    if scanLit(m, '+', '-') then do
        si = m.m.tok
        call scanSpaceNl m
        ch = scanLook(m, 2)
        if left(ch, 1) == '.' then
            ch = substr(ch, 2)
        if pos(left(ch, 1), '0123456789') < 1 then do
            call scanBack m, si
            m.m.val = ''
            return 0
            end
        end
    res = scanNum(m, checkEnd)
    m.m.val = si || m.m.val
    return res

endProcedure scanSqlNum

/*--- scan a sql number with a unit which may follow without space ---*/
scanSqlNumUnit: procedure expose m.
parse arg m, both, units
    if \ scanSqlNum(m, 0) then
        return 0
    nu = m.m.val
    sp = scanSpaceNl(m)
    if scanSqlId(m) then do
        if units == '' | wordpos(m.m.val, units) > 0 then
            nu = nu m.m.val
        else if both | \ sp then
            call scanErr m, 'scanSqlNumUnit after' nu 'bad unit' m.m.val
        else
            call scanBack m, m.m.tok
        end
    else if both then
        call scanErr m, 'scanSqlNumUnit no unit after' nu
    else if \sp & pos(scanLook(m, 1), m.m.scanNameR) > 0 then
        call scanErr m, 'scanSqlNumUnit bad number end after' nu
    m.m.val = nu
    return 1
endProcedure scanSqlNumUnit

/*--- scan a sql number with a unit which may follow without space ---*/
scanSqlStmt: procedure expose m.
parse arg m, delim
    if delim == '' then
        delim = ';'
    res = ''
    vChrs = strip('''"/'delim || left(m.m.scanComment, 1))
    do forever
        if scanSpaceNl(m) then
            if right(res, 1) \== ' ' then
                res = res' '
        if scanVerify(m, vChrs, 'm') then
            res = res || m.m.tok
        else if scanString(m) then
            res = res || m.m.tok
        else if scanLit(m, delim) then do
            m.m.val = res
            return 1
            end
        else if scanChar(m, 1) then do
            res = res || m.m.tok
            end
        else do
            m.m.val = res
            return res \= ''
            end
        end
endProcedure scanSqlStmt
/* copy scanSql end   *************************************************/
/* copy scanWin begin *************************************************
     scan the the concatenation of the lines of a reader
         any token my be split over several line
         except the end-of-line-comment-token
***********************************************************************/
scanWinIni: procedure expose m.
    if m.scanWin.ini = 1 then
        return
    m.scanWin.ini = 1
    call scanReadIni
    call jIni
    call classNew 'n ScanWin u JRW', 'm',
        , 'jReset call scanWinReset m, arg, arg2, arg3',
        , 'jOpen call scanWinOpen m, arg(3) ',
        , 'jClose call scanWinClose m ',
        , 'scanReadNl return scanWinNl(m, unCond)',
        , 'scanSpaceNl scanWinSpaceNl(m)',
        , 'scanInfo scanWinInfo(m)',
        , 'scanPos  scanWinPos(m)'
    return
endProcedure scanReadIni

/*--- instanciate a new window scanner, open rdr ---------------------*/
scanWin: procedure expose m.
parse arg rdr, wiSz, wiBa, cuPo, cuLe
    return scanWinOpts(oNew('ScanWin', rdr), wiSz, wiBa, cuPo, cuLe)

/*--- set the reader and attributes of window scanner m -------------*/
scanWinReset: procedure expose m.
parse arg m, r, wiSz, wiGa, cuPo, cuLe
    call scanReset m
    m.m.rdr = r
    m.m.atEnd = 'still closed'
    return scanWinOpts(m, wiSz, wiGa, cuPo, cuLe)
endProcedure scanWinReset

/*--- set the attributes of window scanner m ------------------------*/
scanWinOpts: procedure expose m.
parse arg m, wiSz, wiGa, cuPo, cuLe
    wiSz = word(wiSz 5, 1)
    wiGa = word(wiGa 1, 1)
    m.m.cutPos = word(cuPo 1, 1)
    m.m.cutLen = word(cuLe 72, 1)
    m.m.winTot = (wiSz * 2 + wiGa) * m.m.cutLen
    m.m.posLim = (wiSz     + wiGa) * m.m.cutLen
    m.m.posOff =  wiGa * m.m.cutLen
    return m
endProcedure scanWinOpts

/*--- open reader and start scanning --------------------------------*/
scanWinOpen: procedure expose m.
parse arg m, lx
    call scanOpen m
    m.m.atEnd = 0
    if lx = '' then
        m.m.lineX = 1
    else
        m.m.lineX = lx
    m.m.pos = 1
    m.m.src = ''
    call jOpen m.m.rdr, m.j.cRead
    call scanWinRead m
    return m
endProcedure scanWinOpen

scanWinClose: procedure expose m.
parse arg m
    m.m.atEnd = 'still closed'
    call jClose m.m.rdr
    return
endProcedure scanWinClose
/*--- move the source window: cut left side and append at right side
      return number of characters cut at left ------------------------*/
scanWinRead: procedure expose m.
parse arg m
    dlt = 0
    if m.m.atEnd then
        return 0
    if m.m.pos >= m.m.posLim then do     /*  cut left side */
        dlt = m.m.pos - (m.m.pos // m.m.cutLen + m.m.posOff)
        m.m.src = substr(m.m.src, dlt+1)
        m.m.pos = m.m.pos - dlt
        m.m.lineX = m.m.lineX + dlt % m.m.cutLen
        end
    do while length(m.m.src) < m.m.winTot /* read and fill to len */
        if \ jRead(m.m.rdr, m'.'one) then do
            m.m.atEnd = 1
            return dlt
            end
        m.m.src = m.m.src || substr(m.m.one, m.m.cutPos, m.m.cutLen)
        end
    call assert 'length(m.m.src) = m.m.winTot'
    return dlt
endProcedure scanWinRead

/*--- return position of next line start -----------------------------*/
scanWinNLPos: procedure expose m.
parse arg m
    return m.m.pos + m.m.cutLen - ((m.m.pos - 1) // m.m.cutLen)

/*--- scan over spaces and comments ----------------------------------*/
scanWinSpaceNL: procedure expose m.
parse arg m
    res = 0
    do forever
        call scanWinRead m
        if scanVerify(m, ' ') then do
            res = 1
            iterate
            end
        else if scanLit(m, '/*') then do
            ex = pos('*/', m.m.src, m.m.pos+2)
            if ex <= m.m.pos then
                return scanErr(m, '*/ missing after /*')
            m.m.pos = ex+2
            res = 1
            end
        else do
            cl = length(m.m.scanComment)
            np = scanWinNlPos(m)
            if \ ( cl>0 & m.m.pos+cl <= np & m.m.scanComment ,
                    == substr(m.m.src, m.m.pos, cl)) then
                return res
            m.m.pos = np
            res = 1
            end
        end
endProcedure scanWinSpaceNl

/*--- return current position in input ------------------------------*/
scanWinPos: procedure expose m.
parse arg m
    if scanAtEnd(m) then
        return 'E'
    else
        ps = m.m.pos - 1
    return (m.m.lineX + (ps % m.m.cutLen)) (ps // m.m.cutLen + 1)
endProcedure scanWinPos

/*--- return a description of the current scan position --------------*/
scanWinInfo: procedure expose m.
parse arg m
    p = scanWinPos(m)
    if p == 'E' then do
        res = 'atEnd after'
        p = m.m.lineX - 1 + length(m.m.src) % m.m.cutLen
        end
    else do
        res = 'pos' word(p, 2) 'in'
        p = word(p, 1)
        end
    return '\n'res 'line' p':' strip(substr(m.m.src,
          , 1 + (p - m.m.lineX) * m.m.cutLen, m.m.cutLen), 't')
endProcedure scanWinInfo
/* copy scanWin end   *************************************************/
/* copy scanRead begin ************************************************/
scanReadIni: procedure expose m.
    if m.scanRead.ini = 1 then
        return
    m.scanRead.ini = 1
    call scanIni
    call jIni
    ts = classNew('n Scan u f TOK v, f VAL v, f KEY v, f TYPE v')
    call classNew 'n ScanRead u JRW', 'm',
        , 'jReset call scanReadReset m, arg, arg2, arg3',
        , 'jOpen call scanReadOpen m',
        , 'jClose call jClose m.m.rdr',
        , 'jRead call scanType m; call oClaCopy "'ts'", m, var;' ,
            'return m.m.type \== ""',
        , 'scanReadNl return scanReadNlImpl(m, unCond)',
        , 'scanSpaceNl scanReadSpaceNl(m)',
        , 'scanInfo scanReadInfo(m)',
        , 'scanPos scanReadPos(m)'
    return
endProcedure scanReadIni

/*--- begin scanning the lines of a reader ---------------------------*/
scanRead: procedure expose m.
parse arg rdr, n1, np, co
    return scanOpts(oNew('ScanRead', rdr), n1, np, co)

scanReadReset: procedure expose m.
parse arg m, r, n1, np, co
    call scanReset m, n1, np, co
    m.m.rdr = r
    return m
endProcedure scanReadReset

scanReadOpen: procedure expose m.
parse arg m, r, n1, np, co
    call scanOpen m
    m.m.atEnd = 0
    m.m.lineX = 0
    call jOpen m.m.rdr, m.j.cRead
    call scanReadNl m, 1
    return m
endProcedure scanReadOpen

/*--- scan over next newLine
        if unCond \== 1 only if we are already at endOfLine
         return true if we scanned a NL ------------------------------*/
scanReadNl: procedure expose m.
parse arg m, unCond
    interpret objMet(m, 'scanReadNl')
endProcedure scanReadNl

/*--- implementation of scanReadNl ----------------------------------*/
scanReadNLimpl: procedure expose m.
parse arg m, unCond
    if unCond \== 1 then
        if m.m.pos <= length(m.m.src) then
            return 0
    if m.m.atEnd then
        return 0
    m.m.atEnd = \ jRead(m.m.rdr, m'.SRC')
    if m.m.atEnd then do
        m.m.pos = 1 + length(m.m.src)
        end
    else do
        m.m.pos = 1
        m.m.lineX = m.m.lineX + 1
        end
    return \ m.m.atEnd
endProcedure scanReadNLimpl

scanReadSpaceNl: procedure expose m.
parse arg m
    fnd = 0
    do forever
        if scanSpaceCom(m) then
            fnd = 1
        if \ scanReadNl(m) then
             return fnd
        fnd = 1
        end
endProcedure scanReadSpaceNl

scanReadPos: procedure expose m.
parse arg m, msg
    if scanAtEnd(m) then
        return E
    else
        return m.m.lineX m.m.pos
endProcedure scanReadPos

scanReadInfo: procedure expose m.
parse arg m, msg
    if scanAtEnd(m) then
        msg = msg'\natEnd after'
    else
        msg = msg'\npos' m.m.pos 'in'
    return msg 'line' m.m.lineX':' strip(m.m.src, 't')
endProcedure scanReadInfo
/* copy scanRead end **************************************************/
/* copy scan begin ****************************************************
Scan: scan an input:
    scanLine(m,ln) : begin scanning a single line (string)
    scanRead??(m,ln): begin scanning all lines of an opened reader
    scanAtEnd(m)   : returns whether we reached end of input
    scanLit(m,lit) : scan Literal lit if present or return 0
    scanChar(m,n)  : scan next n characters
    scanName(m)    : scan a name
    ScanNat(m)     : scan a natural number (without sign)
    scanString(m,q): scan a String with quote q. (with doubble = 1)
    scanVerify(m,c,o): verify(...,c,o,...)
    scanKeyValue(m): scan a key = value clause (with spaces)
    scanWord(m,u)  : scan a space delimited word or a string,
                          if u=1 then uppercase non-strings
    scanErr(m, txt): error with current scan location

    m is an adress, to store our state
    if a scan function succeeds, the scan posititon is moved

returns: true if scanned, false otherwise
         m.m.tok  ==> last token
         m.m.val  ==> last value for scanString/Word/KeyValue
         m.key    ==> key for scanKeyValue
         m.m.pos ==> scan position
         m.m.src ==> scan source
***********************************************************************/
scanIni: procedure expose m.
    if m.scan.ini == 1 then
        return
    m.scan.ini = 1
    m.scan.alfLC = 'abcdefghijklmnopqrstuvwxyz'
    m.scan.alfUC = translate(m.scan.alfLC)
    m.scan.alfa = m.scan.alfLC || m.scan.alfUC
    m.scan.alfNum = m.scan.alfa || '0123456789'
    return
endProcedure scanIni

scanReset: procedure expose m.
parse arg m, n1, np, co
    m.m.rdr = ''
    m.m.jReading = 0 /* if called without jReset */
    m.m.jWriting = 0
    return scanOpts(m, n1, np, co)
endProcedure scanReset

scanOpts: procedure expose m.
parse arg m, m.m.scanName1, namePlus, m.m.scanComment
    if m.m.scanName1 == '' then
        m.m.scanName1 = m.scan.alfa
    if namePlus == '' then
        m.m.scanNameR = m.m.scanName1 || '0123456789'
    else
        m.m.scanNameR = m.m.scanName1 || namePlus
    return m
endProcedure scanOpts


/*--- begin scanning a single line -----------------------------------*/
scanSrc: procedure expose m.
parse arg m, m.m.src
    return scanOpen(m)
endProcedure scanSrc

scanOpen: procedure expose m.
parse arg m
    m.m.tok = ''
    m.m.val = ''
    m.m.key = ''
    m.m.pos = 1
    m.m.atEnd = m.m.rdr == ''
    m.m.jReading = 1
    return m
endProcedure scanOpen

/*--- return the next len characters ---------------------------------*/
scanLook: procedure expose m.
parse arg m, len
    if len == '' then
        return substr(m.m.src, m.m.pos)
    else
        return substr(m.m.src, m.m.pos,
                     , min(len, 1 + length(m.m.src) - m.m.pos))
endProcedure scanLook

/*--- scan the literal lit ------------------------------------------*/
scanLit: procedure expose m.
parse arg m
    do ax=2 to arg()
        if abbrev(substr(m.m.src, m.m.pos), arg(ax)) then do
            m.m.tok = arg(ax)
            m.m.pos = m.m.pos + length(arg(ax))
            return 1
            end
        end
    m.m.tok = ''
    return 0
endProcedure scanLit

/*--- scan the next len characters -----------------------------------*/
scanChar: procedure expose m.
parse arg m, len
    nx = 1 + length(m.m.src)
    if len \= '' then
        nx = min(m.m.pos + len, nx)
    m.m.tok = substr(m.m.src, m.m.pos, nx - m.m.pos)
    m.m.pos = nx
    return m.m.tok \== ''
endProcedure scanChar

/*--- scan a string with quote char qu -------------------------------*/
scanString: procedure expose m.
parse arg m, prefs
    m.m.tok = ''
    bx = m.m.pos
    if prefs = '' then do
        qu = substr(m.m.src, bx, 1)
        if pos(qu, "'""") < 1 then
            return 0
        ax = bx + 1
        end
    else do
        do px=1 until abbrev(substr(m.m.src, bx), p1)
            p1 = word(prefs, px)
            if p1 = '' then
                return 0
            end
        qu = right(p1, 1)
        ax = bx + length(p1)
        end
    m.m.val = ''
    do forever
        qx = pos(qu, m.m.src, ax)
        if qx < 1 then
            return scanErr(m, 'ending Apostroph('qu') missing')
        m.m.val = m.m.val || substr(m.m.src, ax, qx-ax)
        if qx >= length(m.m.src) then
            leave
        else if substr(m.m.src, qx+1, 1) <> qu then
            leave
        ax = qx+2
        m.m.val = m.m.val || qu
        end
    m.m.tok = substr(m.m.src, bx, qx+1-bx)
    m.m.pos = qx+1
    return 1
endProcedure scanString

/*--- scan a Name, first char in *.scanName1, rest in *.scanNameR ----*/
scanName: procedure expose m.
parse arg m
    if pos(substr(m.m.src, m.m.pos, 1),
                 , m.m.scanName1) <= 0 then do
        m.m.tok = ''
        return 0
        end
    return scanVerify(m, m.m.scanNameR)
endProcedure scanName

/*--- scan with verify, vOpt is passed to verify ---------------------*/
scanVerify: procedure expose m.
parse arg m, alpha, vOpt, onlyIfMatch
    if vOpt == '' then   /* empty string does not take default */
        nx = verify(m.m.src, alpha, , m.m.pos)
    else
        nx = verify(m.m.src, alpha, vOpt, m.m.pos)
    if nx = 0 then
        if onlyIfMatch == 1 then
            nx = m.m.pos
        else
            nx = length(m.m.src) + 1
    m.m.tok = substr(m.m.src, m.m.pos, nx - m.m.pos)
    m.m.pos = nx
    return m.m.tok \== ''
endProcedure scanVerify

/*--- scan a natural number (no sign, decpoint ...) ------------------*/
scanNat: procedure expose m.
parse arg m, chEn
    if \ scanVerify(m, '0123456789') then
        return 0
    if chEn \== 0 then
        if pos(scanLook(m , 1), m.m.scanNameR) > 0 then
            call scanErr m, 'illegal number end after' m.m.tok
    return 1
endProcedure ScanNat

/*--- scan an integer (optional sign, no decpoint ...) ---------------*/
scanInt: procedure expose m.
parse arg m, chEn
    call scanLit m, '+', '-'
    si = m.m.tok
    if \ scanNat(m, chEn) then do
        m.m.pos = m.m.pos - si
        return 0
        end
    m.m.tok = si || m.m.tok
    return 1
endProcedure scanInt

/*--- scan a number (optional sign, decpoint, exponent) ------------*/
scanNum: procedure expose m.
parse arg m, chEn
    sx = m.m.pos
    call scanLit m, '+', '-'
    po = scanLit(m, '.')
    if \ scanNat(m, 0) then do
        m.m.pos = sx
        return 0
        end
    if \ po then
        if scanLit(m, '.') then
            call scanNat m, 0
        if scanLit(m, 'e', 'E') then
            if \ scanInt(m, 0) then
                call scanErr m, 'exponent expected after' ,
                             substr(m.m.src, sx, m.m.pos-sx)
    m.m.tok = substr(m.m.src, sx, m.m.pos-sx)
    m.m.val = translate(m.m.tok)
    if chEn \== 0 then
        if pos(scanLook(m , 1), m.m.scanNameR) > 0 then
            call scanErr m, 'illegal number end after' m.m.tok
    return 1
endProcedure scanNum

/*--- scan a word and put value into *.val
           a word is either delimited by space or stopper
                     or a string (with single or double quotes -------*/
scanWord: procedure expose m.
parse arg m, stopper
    if scanString(m)                   then return 1
    if \scanVerify(m, ' 'stopper, 'm') then return 0
    m.m.val = m.m.tok
    return 1
endProcedure scanWord

scanType: procedure expose m.
parse arg m, opt
    m.m.tok = ''
    if scanName(m) then
        m.m.type = 'n'
    else if scanNum(m) then
        m.m.type = 0
    else if scanString(m) then
        m.m.type = left(m.m.tok, 1)
    else if scanSpaceNl(m) then
        m.m.type = 's'
    else do
        call scanChar m, 1
        m.m.type = m.m.tok
        end
    return m.m.type
endProcedure scanType

scanBack: procedure expose m.
parse arg m, tok
    if m.m.pos <= length(tok) then
        call scanErr sc, 'cannot back "'tok'" length'
    cx = m.m.pos - length(tok)
    if substr(m.m.src, cx, length(tok)) \== tok then
        call scanErr sc, 'cannot back "'tok'" value'
    m.m.pos = cx
    return
endProcedure scanBack

/*--- scan a key = word phrase
          put key into m.key and word into m.m.val -------*/
scanKeyValue: procedure expose m.
parse arg m, def
    if \ scanName(m) then
        return 0
    m.m.key = m.m.tok
    if \ scanLit(scanSkip(m), '=') then do
        m.m.val = def
        m.m.tok = ' no='
        end
    else if \scanWord(scanSkip(m)) then
        return scanErr(m, 'word expected after' m.m.key '=')
    return 1
endProcedure scanKeyValue

/*--- return true/false whether we are at the end of input ----------*/
scanAtEnd: procedure expose m.
parse arg m
    return m.m.atEnd & m.m.pos > length(m.m.src)
endProcedure scanAtEnd

/*--- skip over spaces, nl and comments (if option set) --------------*/
scanSpaceNL: procedure expose m.
parse arg m
    lastTok = m.m.tok
    if m.m.rdr \== '' then
        interpret 'res = ' objMet(m, 'scanSpaceNl')
    else
        res = scanSpaceCom(m)
    m.m.tok = lastTok
    return res
endProcedure scanSpaceNL

scanSpaceCom: procedure expose m.
parse arg m
    res = scanVerify(m, ' ')
    if m.m.scanComment \== '' then
        if abbrev(substr(m.m.src, m.m.pos), m.m.scanComment) then do
            m.m.pos = 1 + length(m.m.src)
            return 1
            end
    return res
endProcedure scanSpaceCom

/*--- skip over space, nl and comments and return m -----------------*/
scanSkip: procedure expose m.
parse arg m
    call scanSpaceNl m
    return m
endProcedure scanSkip

/*--- emit an error with current scan pos ----------------------------*/
scanErr: procedure expose m.
parse arg m, txt
    m.m.err.0 = 0
    call err 'scanErr' txt'\n'scanInfo(m, m'.ERR')
    return 0
endProcedure scanErr

scanPos: procedure expose m.
parse arg m
    if m.m.rdr \== '' then
        interpret 'return' objMet(m, 'scanPos')
    else if scanAtEnd(m) then
        return E
    else
        return 1 m.m.pos
endProcedure scanPos

scanInfo: procedure expose m.
parse arg m
    msg = 'last token' m.m.tok 'scanPosition' ,
          strip(left(substr(m.m.src, m.m.pos), 40), 't')
    if m.m.rdr == '' then
        return msg'\npos' m.m.Pos 'in string' strip(m.m.src, 't')
    else
        interpret 'return msg ||' objMet(m, 'scanInfo')
endProcedure scanInfo
/* copy scan end   ****************************************************/
/* copy j begin *******************************************************
    the j framework
         jReset
         jOpen
         jClose
         jRead
         jWrite
***********************************************************************/
jRead: procedure expose m.
parse arg m, var
    call objMetClaM m, 'jRead'
    if m.m.jReading then
        interpret ggCode
    else
        return err('jRead('m',' var') but not opened r')
endProcedure jRead

jReadO: procedure expose m.
parse arg m
if arg() > 1 then call err '???  old interface'
    call objMetClaM m, 'jReadO'
    if m.m.jReading then
        interpret ggCode
    else
        return err('jReadO('m',' var') but not opened r')
endProcedure jReadO

jWrite: procedure expose m.
parse arg m, line
    call objMetClaM m, 'jWrite'
    if \ m.m.jWriting then
        return err('jWrite('m',' line') but not opened w')
    interpret ggCode
    return
endProcedure jWrite

jWriteO: procedure expose m.
parse arg m, var
    call objMetClaM m, 'jWriteO'
    if \ m.m.jWriting then
        return err('jWriteO('m',' var') but not opened w')
    interpret ggCode
    return
endProcedure jWriteO

jWriteAll: procedure expose m.
parse arg m, rdr
    rdr = o2file(rdr)
    call objMetClaM m, 'jWriteAll'
    if \ m.m.jWriting then
        return err('jWriteAll('m',' rdr') but not opened w')
    interpret ggCode
    return
endProcedure jWriteAll

jWriteNow: procedure expose m.
parse arg m, rdr
    rdr = o2file(rdr)
    interpret objMet(m, 'jWriteNow')
    return
endProcedure jWriteNow

jCat: procedure expose m.
parse arg opt m
    if m = '' then do
        m = opt
        opt = m.j.cWri
        end
    call jOpen m, opt
    do ax=2 to arg()
        call jWriteAll m, arg(ax)
        end
    call jClose m
    return m
endProcedure jCat

jWriteNowImpl: procedure expose m.
parse arg m, rdr
    call jOpen rdr, m.j.cRead
    do while jRead(rdr, line)
        call jWrite m, m.line
        end
    call jClose rdr
    return
endProcedure jWriteNow

jWriteNowImplO: procedure expose m.
parse arg m, rdr
    call jOpen rdr, m.j.cRead
    do while assNN('li', jReadO(rdr))
        call jWriteO m, li
        end
    call jClose rdr
    return
endProcedure jWriteNow

/*--- reset JRW: fail if open, initialise ---------------------------*/
jReset: procedure expose m.
parse arg m, arg, arg2, arg3
    if m.m.jReading == 1 | m.m.jWriting == 1 then
        return err('still open jReset('m',' arg2')') / 3
    m.m.jReading = 0
    m.m.jWriting = 0
    m.m.jUsers = 0
    interpret objMet(m, 'jReset')
    return m
endProcedure jReset

jOpen: procedure expose m.
parse arg m, opt
    call objMetClaM m, 'jOpen'
    oUsers = m.m.jUsers
    if opt = m.j.cRead then do
        if m.m.jReading then
            nop
         else if m.m.jWriting then
            return err('already opened for writing jOpen('m',' opt')')
        else do
            interpret ggCode
            m.m.jReading = 1
            end
        end
    else if \ abbrev('>>', opt, 1) then do
        return err('bad option' opt 'in jOpen('m',' opt')')
        end
    else do
        if m.m.jWriting then
            nop
         else if m.m.jReading then
            return err('already opened for reading jOpen('m',' opt')')
        else do
            interpret ggCode
            m.m.jWriting = 1
            end
        end
    m.m.jUsers = oUsers + 1
    return m
endProcedure jOpen

jClose: procedure expose m.
parse arg m
    call objMetClaM m, 'jClose'
    oUsers = m.m.jUsers
    if oUsers = 1 then do
        interpret ggCode
        m.m.jReading = 0
        m.m.jWriting = 0
        end
    else if oUsers < 1 then
        call err 'jClose' m 'but already closed'
    m.m.jUsers = oUsers - 1
    return m
endProcedure jClose

/*--- cat the lines of the file together, with mid between lines,
                fail if not all lines are strings -------------------*/
jCatLines: procedure expose m.
parse arg m, opt
    call jOpen m, m.j.cRead
    if \ jRead(m, line) then do
        call jClose m
        return ''
        end
    res = jCat1(m.line)
    if \ abbrev(opt, '-', 1) then
        do while jRead(m, line)
            res = res || opt || m.line
            end
    else if opt == '-s' then
        do while jRead(m, line)
            res = res strip(m.line)
            end
    else if opt == '-72' then
        do while jRead(m, line)
            res = res || left(m.line, 72)
            end
    call jClose m
    return res
endProcedure jCatLines

jCat1: procedure expose m.
parse arg v, opt
    if \ abbrev(opt, '-', 1) then
        return v
    if opt == '-s' then
        return strip(v)
    if opt == '-72' then
        return left(v, 72)
    call err 'bad opt' opt 'in jCat1('v',' opt')'
endProcedure jCat1

jIni: procedure expose m.
    if m.j.ini == 1 then
        return
    m.j.ini = 1
    m.j.cRead = '<'
    m.j.cWri = '>'
    m.j.cApp = '>>'
    call oIni
    am = "call err 'call of abstract method"
    call classNew 'n JRW u ORun, f JREADING v, f JWRITING v', 'm',
        , "new call jReset m, arg, arg2, arg3",
        , "jRead"   am "jRead('m',' var')'" ,
        , "jReadO if \ jRead(m, 'J.GGVAR') then return '';",
                "return s2o(m.j.ggVar)" ,
        , "jWrite" am "jWrite('m',' line')'" ,
        , "jWriteO call jWrite(m, o2string(var))" ,
        , "jWriteAll call jWriteNowImpl m, rdr",
        , "jWriteNow call jWriteNowImpl m, rdr",
        , "jReset",
        , "jOpen" am" jOpen('m',' opt')'" ,
        , "jClose" ,
        , "oRun call pipeWriteAll m",
        , "o2String return jCatLines(m, ' ')",
        , "o2File return m"
    call classNew 'n JRWO u JRW', 'm',
        , "jRead res = jReadO(m); if res == '' then return 0;" ,
                "m.var = o2string(res); return 1" ,
        , "jReadO"   am "jReadO('m')'" ,
        , "jWrite  call jWriteO(m, s2o(var))" ,
        , "jWriteO" am "jWriteO('m',' line')'",
        , "jWriteAll call jWriteNowImplO m, rdr",
        , "jWriteNow call jWriteNowImplO m, rdr",

    am = "call err 'call errObject"
    call classNew 'n JRWErr u JRW', 'm',
        , "jWriteAll" er "jWriteAll 'm', rdr'",
        , "jWriteNow" er "jWriteNow 'm', 'rdr'",
        , "jClose" er "jClose 'm'"
    call classNew 'n JRWOut u JRWO', 'm',
        , "jReset m.m.stem = arg;",
               "if arg \== '' & \ dataType(m.arg.0, 'n') then",
                   "m.arg.0 = 0" ,
        , "jWrite if m.m.stem == '' then say line;" ,
                 "else call mAdd m.m.stem, line" ,
        , "jWriteO call classOut , var, 'outO: '",
        , "jOpen if \ abbrev(opt, m.j.cWri) then",
            "call err 'can only write JRWOut.jOpen('m',' opt')';" ,
            "else m.m.jWriting = 1"
    call classNew 'n JRWEof u JRW', 'm',
        , "jRead drop m.var; return 0",
        , "jOpen if pos('>', opt) > 0 then",
            "call err 'can only read JRWEof.jOpen('m',' opt')';" ,
            "else m.m.jReading = 1"
    m.j.in = jOpen(oNew('JRWEof'), m.j.cRead)
    m.j.out = jOpen(oNew('JRWOut'), m.j.cWri)
    call classNew "n JBuf u JRWO, f BUF s r", "m",
        , "jOpen call jBufOpen m, opt",
        , "jReset call jBufReset m, arg",
        , "jRead return jBufRead(m, var)",
        , "jReadO return jBufReadO(m)",
        , "jWrite call jBufWrite m, line",
        , "jWriteO call jBufWriteO m, var"
    call classNew "n JBufTxt u JBuf, f MAXL v ", "m",
        , "jReset call jBufReset m, arg; m.m.maxl = 80",
        , "jWriteO call jBufWrite m, o2Text(var, m.m.maxl)"
    return
endProcedure jIni

in: procedure expose m.
parse arg arg
    return jRead(m.j.in, arg)
endProcedur in

inO: procedure expose m.
    if arg() > 0 then call err '??? old interface'
    return jReadO(m.j.in)
endProcedur in

out: procedure expose m.
parse arg line
    call jWrite m.j.out, line
    return 0
endProcedure out

outO: procedure expose m.
parse arg arg
    call jWriteO m.j.out, arg
    return
endProcedure outO

/*--- jBuf: buffer read or write (supports datataypes) ---------------*/
jBuf: procedure expose m.
    m = oNew('JBuf') /* calls jBufReset */
    do ax=1 to arg()
        m.m.buf.ax = arg(ax)
        end
    m.m.buf.0 = ax-1
    m.m.allV = 1
    return m
endProcedure jBuf
/*--- jBuf: buffer read or write (supports datataypes) ---------------*/
jBufTxt: procedure expose m.
    m = oNew('JBufTxt') /* calls jBufReset */
    do ax=1 to arg()
        m.m.buf.ax = arg(ax)
        end
    m.m.buf.0 = ax-1
    m.m.allV = 1
    return m
endProcedure jBufTxt

jBufReset: procedure expose m.
parse arg m
    m.m.stem = m'.BUF'
    do ax=1 to arg() - 1
        m.m.buf.ax = arg(ax+1)
        end
    m.m.buf.0 = ax-1
    m.m.allV = 1
    return m
endProcedure jBufReset

jBufOpen: procedure expose m.
parse arg m, opt
    if opt == m.j.cRead then do
        m.m.readIx = 0
        m.m.jReading = 1
        return m
        end
    if opt == m.j.cWri then do
        m.m.buf.0 = 0
        m.m.allV = 1
        end
    else if opt \== m.j.cApp then
         call err 'jBufOpen('m',' opt') with bad opt'
    m.m.jWriting = 1
    return m
endProcedure jBufOpen

jBufWrite: procedure expose m.
parse arg m, line
    if m.m.allV then
        call mAdd m'.BUF', line
    else
        call mAdd m'.BUF', s2o(line)
    return
endProcedure jBufWrite

jBufWriteStem: procedure expose m.
parse arg m, st
    ax = m.m.buf.0
    if m.m.allV then do
        do sx=1 to m.st.0
            ax = ax + 1
            m.m.buf.ax = m.st.sx
            end
        end
    else do
        do sx=1 to m.st.0
            ax = ax + 1
            m.m.buf.ax = o2String(m.st.sx)
            end
       end
       m.m.buf.0 = ax
    return m
endProcedure jBufWrite

jBufWriteO: procedure expose m.
parse arg m, ref
    if m.m.allV then do
        cl = objClass(ref)
        if cl = m.class.classV then do
            call mAdd m'.BUF', m.ref
            return
            end
        if cl == m.class.classW then do
            call mAdd m'.BUF', substr(ref, 2)
            return
            end
        m.m.allV = 0
        do ax=1 to m.m.buf.0
            m.m.buf.ax = s2o(m.m.buf.ax)
            end
        end
    call mAdd m'.BUF', ref
    return
endProcedure jBufWriteO

jBufReadO: procedure expose m.
parse arg m
    nx = m.m.readIx + 1
    if nx > m.m.buf.0 then
        return ''
    m.m.readIx = nx
    if m.m.allV then
        return s2o(m.m.buf.nx)
    else
        return m.m.buf.nx
endProcedure jBufReadO

jBufRead: procedure expose m.
parse arg m, var
    nx = m.m.readIx + 1
    if nx > m.m.buf.0 then
        return 0
    m.m.readIx = nx
    if m.m.allV then
        m.var = m.m.buf.nx
    else
        m.var = o2String(m'.BUF.'nx)
    return 1
endProcedure jBufRead

jBufTxtWriteO: procedure expose m.
parse arg m, ref
    if m.m.allV \== 1 then
        call err '1 \== allV' m.m.allV 'in jBufTxtWriteO('m',' ref')'
    cl = objClass(ref, '?')
    if cl = m.class.classV then
        call mAdd m'.BUF', m.ref
    else if cl == m.class.classW then
        call mAdd m'.BUF', substr(ref, 2)
    else if ref == '' then
        call mAdd m'.BUF', '@ null object'
    else if cl == '?' then
        call mAdd m'.BUF', '@'ref 'class=???'
    else do
        l = '@'ref 'class='className(cl)
        ff = cl'.FLDS'
        do fx=1 to m.ff.0 while length(l) < m.m.maxl + 3
            if m.ff.fx == '' then
                 l = l', .='m.ref
            else do
                 f1 = substr(m.ff.fx, 2)
                 l = l',' f1'='m.ref.f1
                 end
            end
        if length(l) > m.m.maxl then
            l = left(l, m.m.maxl-3)'...'
        call mAdd m'.BUF', l
        end
    return
endProcedure jBufTxtWriteO

/* copy j end *********************************************************/
/* copy o begin ******************************************************
    an object has a class which describes fields and methods
    an object has fields (e.g. m.o.fld1)
    an object may call it's methods (dynamic binding)
***********************************************************************/
oIni: procedure expose m.
    if m.o.ini = 1 then
        return
    m.o.ini = 1

    call classIni
    call oAdd1Method m.class.classV, 'o2String return m.m'
    m.class.escW = '!'
    call oAdd1Method m.class.classW, 'o2String return substr(m, 2)'
    or = classNew('n ORun u',
         , 'm oRun call err "call of abstract method oRun"',
         , 'm o2File return oRun2File(m)',
         , 'm o2String return jCatLines(oRun2File(m), " ")')
                /* oRunner does not work yet ||||| */
    rc = classNew('n* ORun u ORun, m oRun call oClassAdded arg(2)')
    call oAddMethod rc'.OMET', rc
    call classAddedRegister oMutate(mNew(), rc)
    return
endProcedure oIni

/*--- when notified about a new class cl, build the redundancies ----*/
oClassAdded: procedure expose m.
parse arg cl
    m.class.o2c.cl = m.class.class
    call oAddMethod cl'.OMET', cl
    new = "m.class.o2c.m =" cl
    if m.cl.flds.0 > 0 | m.cl.stms.0 > 0 then
        new = new"; call oClear m, '"cl"'"
    new = new";" classMet(cl, 'new', '')
    if cl == m.class.class then
        call mAlias 'CLASS', cl
    else  /* object adresses */
        call mNewArea cl, 'O.'substr(cl,7), new
     if m.cl \== 'u' | m.cl.name == '' then
        return
    call mAlias cl, m.cl.name
    new = 'new'
    m.cl.oMet.new = ''
    co = ''                              /* build code for copy */
    do fx=1 to m.cl.flds.0
        nm = m.cl.flds.fx
          if translate(nm) == nm & \ abbrev(nm, 'GG') ,
              & pos('.M.', nm'.') < 1 & pos('.T.', nm'.') < 1 then
               co = co'm.t'nm '= m.m'nm';'
        else
            co = co 'f='quote(substr(nm, 2))';m.t.f = m.m.f;'
        end
    do fx=1 to m.cl.stms.0
        nm = m.cl.stms.fx
        sc = m.cl.stms.fx.class
        if nm == ''then
            co = co "m.t.0=m.m.0;" ,
               "do sx=1 to m.m.0;" ,
                 "call oClaCopy '"sc"',m'.'sx, t'.'sx; end;"
        else
            co = co "st='"substr(nm, 2)"';m.t.st.0=m.m.st.0;",
                "do sx=1 to m.m.st.0;",
                  "call oClaCopy '"sc"',m'.'st'.'sx, t'.'st'.'sx; end;"
        end
    p = cl'.OMET.oCopy'
    if symbol('m.p') \== VAR then
        m.p = co
    return
endProcedure oClassAdded

/*--- add the methods of class cl to the methodtable mt -------------*/
oAddMethod: procedure expose m.
parse arg mt, cl
     if pos(m.cl, 'frsv') > 0 then
         return
     if m.cl = 'm' then do
         nm = m.cl.name
         m.mt.nm = m.cl.met
         return
         end
/*     if m.cl.class \== '' then
         call oAddMethod mt, m.cl.class
*/   do x=1 to m.cl.0
         call oAddMethod mt, m.cl.x
         end
     return
endProcedure oAddMethod

/* add 1 method to a completed class and its subclasses -------------*/
oAdd1Method: procedure expose m.
parse arg clNm, met code
    cl = classAdd1Method(clNm, met code)
    m.cl.omet.met = code
    call oAdd1MethodSubs cl, met code
    return cl
endProcedure oAdd1Method

/* add 1 method code to OMET of all subclasses of cl  -------------*/
oAdd1MethodSubs: procedure expose m.
parse arg cl, met code
    do sx=1 to m.cl.sub.0
        sc = m.cl.sub.sx
        if pos(m.sc, 'nvw') > 0 then do
            do mx=1 to m.sc.0
                ms = m.sc.mx
                if m.ms == 'm' & m.ms.name == met then
                    call err 'method' med 'already in' sc
                end
            m.sc.omet.met = code
            end
        call oAdd1MethodSubs sc, met code
        end
    return cl
endProcedure oAdd1MethodSubs

/*--- create an an object of the class className
        mutate it to class but DO NOT call it's new method ----------*/
oBasicNew: procedure expose m.
parse arg cl
    return oMutate(mBasicNew(cl), cl)

/*--- create an an object of the class className
        and call it's new method ------------------------------------*/
oNew: procedure expose m.
signal labelMNew    /* work is done there |   ???? remove */

/*--- return the class of object obj --------------------------------*/
objClass: procedure expose m.
parse arg obj
    if symbol('m.class.o2c.obj') == 'VAR' then
         return m.class.o2c.obj
    if abbrev(obj, m.class.escW) then
        return m.class.classW
    if abbrev(obj, 'CLASS.CAST.') then
        return substr(obj, 12, pos(':', obj, 12)-12)
    if arg() >= 2 then
        return arg(2)
    return err('objClass no class found for object' obj)
endProcedure objClass

oKindOf: procedure expose m.
parse arg obj, sup
    cl = objClass(obj, '')
    if cl == '' then
        return 0
    return classInheritsOf(cl, class4name(sup))
endProcedure oKindOf

classInheritsOf: procedure expose m.
parse arg cl, sup    /* wkTst optimierung in classAdded */
    if cl == sup then
        return 1
    do while m.cl \== 'n' & m.cl \== 'u'
        if m.cl.class == '' then
            return 0
        cl = m.cl.class
        end
    do cx=1 to m.cl.0
        d = m.cl.cx
        if m.d == 'u' then
            if classInheritsOf(d, sup) then
                return 1
        end
    return 0
endProcedure classInheritsOf

classSetMet: procedure expose m.
parse arg na, me, code
    if symbol('m.class.n2c.na') \== 'VAR' then
        call err 'no class' na 'in classMet('na',' me')'
    cl = m.class.n2c.na
    if symbol('m.cl.oMet.me') \== 'VAR' then
        call err 'no method in classMet('na',' me')'
    m.cl.oMet.me = code
    return cl
endProcedure classSetMet

/*--- return the code of method me of the class with name na --------*/
classMet: procedure expose m.
parse arg na, me
    if symbol('m.class.n2c.na') \== 'VAR' then
        call err 'no class' na 'in classMet('na',' me')'
    cl = m.class.n2c.na
    if symbol('m.cl.oMet.me') == 'VAR' then
        return m.cl.oMet.me
    if arg() >= 3 then
        return arg(3)
    call err 'no method in classMet('na',' me')'
endProcedure classMethod

/*--- set m, ggClass, ggCode to the address, class and code
        of method me of object m ------------------------------------*/
objMetClaM: procedure expose m. m ggClass ggCode
parse arg m, me
    if symbol('m.class.o2c.m') == 'VAR' then
         ggClass =  m.class.o2c.m
    else if abbrev(m, 'CLASS.CAST.') then
        parse var m 'CLASS.CAST.' ggClass ':' m
    else
        return err('no class found for object' m)
    if symbol('m.ggClass.oMet.me') == 'VAR' then
        ggCode = m.ggClass.oMet.me
    else
         call err 'no method' me 'in class' className(ggClass),
              'of object' m
    return
endProcedure objMetClaM

/*--- return the code of method me of object obj --------------------*/
objMet: procedure expose m.
parse arg obj, me
        /* handle the easy and frequent case directly */
    if symbol('m.class.o2c.obj') == 'VAR' then
         c =  m.class.o2c.obj
    else if abbrev(obj, m.class.escW) then
         c = m.class.classW
    else do
        call objMetClaM obj, me
        return 'M="'m'";'ggCode
        end
     if symbol('m.c.oMet.me') == 'VAR' then
         return m.c.oMet.me
    return err('no method' me 'in class' className(c) 'of object' obj)
endProcedure objMet

/*--- return the stem of fieldnames of object m ---------------------*/
oFlds: procedure expose m.
parse arg m
    return objClass(m)'.FLDS'
endProcedure oFlds

/*--- return the contents of field f navigation along path ----*/
oGet: procedure expose m.
parse arg obj, path, clazz
    nullNew = 0
    ret = oAccPath(obj, path, clazz)
    if ret == 1 then
        ret = oAccStr(m, cl)
    if ret == 1 then
        return str
    return err(ret 'in oGet('obj',' path')')
endProcedure oGet

oAccStr: procedure expose m. str
parse arg m, cl
    if cl == m.class.classV then
        str = m.m
    else if m.cl.valueCl == '' then
        return 'no value @' m 'class' className(cl)
    else if m.m == '' then
        return 'null @' m 'class' className(cl)
    else if abbrev(m, m.class.escW) then
        str = substr(m ,2)
    else
        str = o2String(m.m)
    return 1
endProcedure oAccStr

oGetO: procedure expose m.
parse arg obj, path, opt, clazz
    nullNew = pos('n', opt) > 0
    ret = oAccPath(obj, path, clazz)
    if ret == 1 then
        ret = oAccO(m, cl, opt)
    if ret == 1 then
        return ref
    else
        return err(ret 'in oGetO('obj',' path')')
endProcedure oGetO

oAccO: procedure expose m. ref
parse arg m, cl, opt
    if cl == m.class.classV then do
        ref = s2o(m.m)
        end
    else if m.cl \== 'r' then do
        ref = m
        end
    else if m.m == '' then do
        if opt == '-b' then do
            m.m = jBuf()
            end
        else if opt == '-n' then do
            rsn = oRefSetNew(m, cl)
            if rsn \==1 then
               return rsn
            end
        ref = m.m
        end
    else if objClass(m.m, 0) \== 0 then do
        ref = m.m
        end
    else do
        return 'no class for' m.m '@' m 'class' cl
        end
    return 1
endProcedure oAccO

oPut: procedure expose m.
parse arg obj, path, str
    nullNew = 1
    res = oAccPath(obj, path)
    if res == 1 then
        res = ocPut(m, cl, str)
    if res == 1 then
        return str
    return err(res 'in oPut('obj',' path',' str')')
endProceudre oPut

ocPut: procedure expose m.
parse arg m, cl, str
    if m.cl.valueCl == m.class.classV then
        m.m = str
    else if m.cl.valueCl \== '' then
        m.m = s2o(str)
    else
        return 'no value @' m 'class' className(cl)
    return 1
endProcedure ocPut

oPutO: procedure expose m.
parse arg obj, path, ref
    nullNew = 1
    res = oAccPath(obj, path)
    if res == 1 then
        res = ocPutO(m, cl, ref)
    if res == 1 then
        return ref
    return err(ret 'in oPut('obj',' path',' ref')')
endProcedure oPutO

ocPutO: procedure expose m.
parse arg m, cl, ref
    if m.cl.valueCl == m.class.classV then
        m.m = o2string(ref)
    else if m.cl.valueCl \== '' then
        m.m = ref
    else if m.cl.stemCl \== '' then
        return 'implement put to stem'
    else
        return 'no value @' m 'class' className(cl)
    return 1
endProcedure ocPutO

oClear: procedure expose m.
parse arg obj, cl
    if cl == '' then
        cl = objClass(obj)
    do fx=1 to m.cl.flds.0
        f1 = m.cl.flds.fx
        o1 = obj || f1
        if f1 == '' then
            c1 = cl
        else do
            c1 = substr(f1, 2)
            c1 = m.cl.f2c.c1
            end
        if c1 == m.class.classW then
            m.o1 = m.class.escW
        else
            m.o1 = ''
        end
    do sx=1 to m.cl.stms.0
        f1 = obj || m.cl.stms.sx
        m.f1.0 = 0
        end
    return obj
endProcedure oClear

oAccPath: procedure expose m. m cl nullNew
parse arg m, pa, cl
    if cl == '' & m \== '' then do
        cl = objClass(m)
        end
    if pa == '' then
        return 1
    if abbrev(pa, m.class.cRef) ,
            | (\ m.cl.hasFlds & abbrev(pa, m.class.cNav)) then do
        if pa == m.class.cRef & m.cl.valueCl == m.class.classV then do
            cl = m.class.classV
            return 1
            end
        if (m.cl.valueCl == '' | m.cl.valueCl == m.class.classV) ,
              & m.cl \== 'r' then
            return 'no reference @' m 'class' cl
        if m.m = '' then do
            if \ nullNew then
                return 'null @' m 'class' className(cl)
            rsn = oRefSetNew(m, cl)
            if rsn \== 1 then
                return rsn
            end
        return oAccPath(m.m, substr(pa, 2))
        end
    if pos(left(pa, 1), m.class.cPath) > 0 then
        return oAccPath(m, substr(pa, 2), cl)
    px = verify(pa, m.class.cPath, 'm')
    if px < 1 then
        px = length(pa)+1
    fn = left(pa, px-1)
    pa = substr(pa, px)
    if symbol('m.cl.f2c.fn') == 'VAR' then
        return oAccPath(m'.'fn, pa, m.cl.f2c.fn)
    if m.cl.stemCl=='' | fn=='' | verify(fn, '0123456789','n')>0 then
        return 'no field' fn '@' m 'class' className(cl)
    if fn == 0 then
        return oAccPath(m'.0', pa, m.class.classV)
    if abbrev(fn, 0) | verify(m.m.0, '0123456789', 'n') > 0,
            | fn > m.m.0 then
        return 'bad stem index' fn'>'m.m.0 '@' m 'class' className(cl)
    return oAccPath(m'.'fn, pa, m.cl.stemCl)
endProcedure oAccPath

oRefSetNew: procedure expose m.
parse arg m, cl
    cr = m.cl.valueCl
    if m.cr.class = '' then
        return 'no class for null @' m 'class' className(cl)
    if m.cr.class = m.class.classW then
        m.m = o2s()
    else if m.cr \== 'r' then
        return 'class' className(cl) 'not ref'
    else
        m.m = mNew(m.cr.class)
    return 1
endProcedure oRefSetNew


/*--- mutate object m to the class named name -----------------------*/
oMutate: procedure expose m.
parse arg m, name
    m.class.o2c.m = class4Name(name)
    return m
endProcedure oMutate

/*--- return object obj cast'd to class named cl --------------------*/
oCast: procedure expose m.
parse arg obj, cl
     if abbrev(obj, 'CLASS.CAST.') then
         obj = substr(obj, 1 + pos(':', obj, 12))
     return 'CLASS.CAST.'class4Name(cl)':'obj
endProcedure oCast

/*--- copy object m of class c to t ---------------------------------*/
oClaCopy: procedure expose m.
parse arg ggCla, m, t
    if t == '' then do
        if ggCla == m.class.classW then
            return m
        t = mBasicNew(ggCla)
        end
     else if ggCla == m.class.classW then do
         m.t = o2String(m)
         m.class.o2c.t = m.class.classV
         return t
         end
     ggCode = ggCla'.OMET.oCopy'
     interpret m.ggCode
     m.class.o2c.t = ggCla
     return t
endProcedure oClaCopy

/*--- copy object m to t --------------------------------------------*/
oCopy: procedure expose m.
parse arg m, t
    return oClaCopy(objClass(m), m, t)
endProcedure oCopy

/*--- copy object to a newly created object -------------------------*/
oCopyNew: procedure expose m.
parse arg m
     if symbol('m.class.o2c.m') == 'VAR' then
         return oCopy(m, mBasicNew(m.class.o2c.m))
     return oCopy(m, mBasicNew(m.class.classV))
endProcedure oCopyNew

/*--- return a new instance of a subclass of Run
        with code code in method oRun -------------------------------*/
oRunner: procedure expose m.
    if arg() >= 1 then
           r = oNew(classNew('n* ORun u ORun, m oRun' arg(1)))
    else
           r = oNew(classNew('n| ORun u ORun'))
    return r
endProcedure oRunner

/*--- set code for runner -------------------------------------------*/
oRunnerCode: procedure expose m.
parse arg r, code
    call classSetMet objClass(r), 'oRun', code
    return r
endProcedure oRunnerCode

/*--- run method oRun of object m -----------------------------------*/
oRun: procedure expose m.
parse arg m, arg, arg2, arg3
    interpret objMet(m, 'oRun')
    return
endProcedure oRun

/*--- run method oRun and return output in new JBuf ------------------*/
oRun2File: procedure expose m.
parse arg rn
    b = jBuf()
    call pipeBeLa '>' b
    call oRun rn
    call pipeEnd
    return b
endProcedure oRun2File

/*--- cast the object to a file -------------------------------------*/
o2File: procedure expose m.
parse arg m
    interpret objMet(m, 'o2File')
    call err 'o2file did not return'
endProcedure o2File

/*--- cast the object to a String -----------------------------------*/
o2String: procedure expose m.
parse arg m, arg, arg2, arg3
    interpret objMet(m, 'o2String')
    return err('o2String did not return')
endProcedure o2String

/*--- return a short string representation of an object -------------*/
o2Text: procedure expose m.
parse arg m, maxL
    if m == '' then
        return '@ null object'
    if maxL == '' then
        maxL = 80
    cl = objClass(m, '?')
    if cl = m.class.classV then
        l = m.m
    else if cl == m.class.classW then
        l = substr(m, 2)
    else if cl == '?' then
        l = '@'m 'class=???'
    else do
        l = '@'m 'class='className(cl)
        ff = cl'.FLDS'
        do fx=1 to m.ff.0 while length(l) < maxL + 3
            if m.ff.fx == '' then
                 l = l', .='m.m
            else do
                 f1 = substr(m.ff.fx, 2)
                 l = l',' f1'='m.m.f1
                 end
            end
        end
    if length(l) <= maxL then
        return l
    return left(l, maxL-3)'...'
endProcedure o2Text

/*--- cast a String to an object -----------------------------------*/
s2o: procedure expose m.
parse arg str
    return m.class.escW || str
    return r
endProcedure s2o

oIfStr: procedure expose m.
parse arg m
    if length(m) > 200 then
        return m
    cl = objClass(m, '')
    if cl = '' then
        return m
    else if cl = m.class.classV then
        return = m.m
    else if cl == m.class.classW then
        return = substr(m, 2)
    else if arg() >= 2 then
        return arg(2)
    else
        call err m 'of class' className(cl) 'not kind of string'
endProcedure oIfStr

/* copy o end *******************************************************/
/* copy class begin **************************************************
    a class has fields and methods,
    the class module handles only the metadata,
    object handling (instanciation, methodcalls etc.) is in O

    classes are represented by a metadata tree,
        its nodes of class class have diffenrent types:

class subTypes (implemented as choices)
    'u'    = union:    NAME -> name of class if <> '',
                    stem -> references component classes
    'f' = field:      NAME -> fieldName (x.name),
                    CLASSS -> reference to class of fieldValue
    's' = stem:     class -> ref to class at each stem element
    'c' = choice:   NAME -> selection value,
                    CLASS -> ref to class of choice
    'm' = method:    NAME -> methodName,
                    MET -> rexxCode
    'r' = reference CLASS -> ref to type at reference
special classes
    'v'    = Value     String Value
    'w'    = ValueAsA    StringValue packed into an adress (prefix escW)
    'o' = AnyClass    any class with dynamic classLookup on object
formal definition, see classIni

class expression (ce) allow the following syntax
    ce = className | classAdr | 'n'('?','*','|')? name union | union
        | 'f' name ce | 's' ce | 'c' name ce | 'm' name code | r ce?
    union = 'u' (ce (',' ce)*)?

    the modifiers of 'n' means
        none:    create new class, fail if name already defined
        '?':    create new class or return old of that name
        '*':    use an exisiting class of that definition
                or create new class with a unique name
        '|':    create a new class with a unique name
    'm' extends to then end of the ce (line)
    'u' allows several components, in classNew also multiple args
                Achtung, aber NICHT rekursiv|
***********************************************************************/
classIni: procedure expose m.
    if m.class.ini == 1 then
        return
    m.class.ini = 1
    call mapIni
    call mNewArea 'CLASS', 'CLASS'
    call mapReset 'CLASS.N2C'  /* name to class */
        /* to notify other modules (e.g. O) on every new named class */
    m.class.addedSeq.0 = 0
    m.class.addedListeners.0 = 0
    m.class.classV = classBasicNew('u', 'v')
    m.class.classW = classBasicNew('u', 'w')
    m.class.classO = classBasicNew('u', 'o')
    cr = mIterBegin('CLASS')
    do while assNN('cr', mIter(cr))
        call classAddedNotify cr
        end

    m.class.class = classNew('n class u v',
            , 'c u u f NAME v, s r class',
            , 'c f u f NAME v, f CLASS r class',
            , 'c s f CLASS r class' ,
            , 'c c u f NAME v, f CLASS r class',
            , 'c m u f NAME v, f MET  v' ,
            , 'c r f CLASS r class' )
    m.class.cNav = '.'
    m.class.cRef = '|'
    m.class.cDot = '%'
    m.class.cPath = m.class.cNav || m.class.cRef || m.class.cDot
    m.class.classR = classNew('r')
    return
endProcedure classIni


/*--- return the name of a class if it exists otherwise the class ---*/
className: procedure expose m.
parse arg cl
    if m.cl = 'u' & m.cl.name \= '' then
        return m.cl.name
    else
        return cl
endProcedure class4Name

/*--- return class of given name or class ---------------------------*/
class4Name: procedure expose m.
parse arg nm
    if symbol('m.class.n2c.nm') == 'VAR' then
        return m.class.n2c.nm
    if arg() > 1 then
        return arg(2)
    call err 'no class' nm
endProcedure class4Name

classBasicNew: procedure expose m.
parse arg ty, nm, cl, nmTy
    n = mNew('CLASS')
    m.n = ty
    m.n.name = nm
    m.n.nameComp = nm
    if ty == 'u' & nm \== '' then do
        if pos(nmTy, '*|') > 0 then do
            m.n.name = nm || substr(n, 1+lastPos('.', n))
            if nmTy == '*' then
                m.n.nameComp = nm'*'
            else
                m.n.nameComp = m.n.name
            end
        call mapAdd class.n2c, m.n.name, n
        end
    call mapAdd class.n2c, n, n
    m.n.class = ''
    m.n.met = ''
    m.n.0 = 0
    m.n.sub.0 = 0
    m.n.super.0 = 0
    if length(ty) \== 1 | pos(ty, 'ufscrm') < 1 then
        call err 'bad type' ty': classBasicNew('ty',' nm',' cl')'
    else if nm == '' & pos(ty, 'fm') > 0 then
        call err 'empty name: classBasicNew('ty',' nm',' cl')'
    else if nm \== '' & ty \== 'c'  ,
          & ( verify(nm, '0123456789') < 1 ,
            | verify(nm, ' .*|@', 'm') > 0 ) then
        call err 'bad name' nm': classBasicNew('ty',' nm',' cl')'
    else if nm \= '' & pos(ty, 'rs') > 0 then
        call err 'name for type' ty': classBasicNew('ty',' nm',' cl')'
    else if pos(ty, 'fcrs') > 0 then do
        if cl \== '' then
            m.n.class = mapGet(class.n2c, cl)
        else if ty == 'r' then
            m.n.class = m.class.classO
  /*    else say 'cl leer' ty nm nmTy   ???????*/
        end
    else if ty == 'm' then
        m.n.met = cl
    else if cl \== '' then
        call err 'class for type' ty': classBasicNew('ty',' nm',' cl')'
    return n
endProcedure classBasicNew


classNew: procedure expose m.
parse arg clEx 1 ty rest
    if abbrev(ty, 'n') then do
        if wordPos(ty, 'n n? n* n|') < 1 then
            call err 'bad type' ty': classNew('clEx')'
        nmTy = right(ty, 1)
        parse var rest nm ty rest
        if ty \== 'u' then
            call err 'class name' nm 'without u: classNew('clEx')'
        if nmTy == 'n' then do
             if mapHasKey(class.n2c, nm) then
                call err 'class' nm 'already defined: classNew('clEx')'
            end
        else if nmTy == '?' then do
            if mapHasKey(class.n2c, nm) then
                return mapGet(class.n2c, nm)
            end
        else if nmTy == '*' then do
            if arg() \== 1 then
                call err 'arg()='arg() 'for n* : classNew('clEx')'
            if mapHasKey(class.n2c, clEx) then
                return mapGet(class.n2c, clEx)
            end
        n = classBasicNew('u', nm, , nmTy)
        end
    else do
        nmTy = ''
        if arg() \== 1 then
            call err 'arg()='arg() 'without name: classNew('clEx')'
        if mapHasKey(class.n2c, clEx) then
               return mapGet(class.n2c, clEx)
        if length(ty) <> 1 | pos(ty, 'ufscmr') < 1 then
            call err 'bad type' ty': classNew('clEx')'
        nm = ''
        if pos(ty, 'usr') < 1 then
            parse var rest nm rest
        if ty = 'u'  then do
            n = classBasicNew(ty)
            end
        else if    ty = 'm' then do
            n = classBasicNew(ty, nm, rest)
            rest = ''
            end
        else do
            parse var rest t1 rest
            if wordPos(t1, 'u f s c m r') > 0 then do
                n = classBasicNew(ty, nm)
                m.n.class = classNew(t1 rest)
                rest = ''
                end
            else do
                n = classBasicNew(ty, nm, t1)
                end
            end
        end
    if ty \== 'u' then do
        if rest \== '' then
            call err 'rest' rest 'but end of classExp expected:' clEx
        end
    else do
        lx = 0
        do while lx < length(rest)
            cx = pos(',', rest, lx+1)
            if cx <= lx | word(substr(rest, lx+1), 1) == 'm' then
                cx = length(rest)+1
            a = mAdd(n, classNew(strip(substr(rest, lx+1, cx-lx-1))))
            lx=cx
            end
        pref = ''
        do ax=2 to arg()
            if length(arg(ax)) == 1 & arg(ax) \== ' ' then
                pref = arg(ax)' '
            else
                call mAdd n, classNew(pref || arg(ax))
            end
        end
    cr = mIterBegin('CLASS')
    do while assNN('cr', mIter(cr)) & \ classEqual(n, cr)
        end
    isNew = cr == n
    if \ isNew then do
        if mapRemove(class.n2c, n) \== n then
            call err 'mapRemove('n') mismatch'
        if m.n == 'u' & m.n.name \== '' then
            if mapRemove(class.n2c, m.n.name) \== n then
                call err 'mapRemove('m.n.name') mismatch'
        call mFree n
        n = cr
        end
    if nmTy == '' | nmTy == '*' then
        call mapAdd class.n2c, clEx, n
    if isNew then
        call classAddedNotify n
    return n
endProcedure classNew

classAdd1Method: procedure expose m.
parse arg clNm, met code
    cl = class4Name(clNm)
    if pos(m.cl, 'uvw') < 1 then
        call err 'class not nvw but' m.cl,
            'in classAdd1Method('clNm',' met code')'
    do sx = 1 to m.cl.0
        su = m.cl.sx
        if m.cl.sx = 'm' & m.cl.name == met then
            call err 'met' met 'already in' clNm
        end
    call mAdd cl, classNew('m' met code)
    return cl
endProcedure classAdd1Method

/*--- register a listener for newly defined classes
        and call it for all already defined classes -----------------*/
classAddedRegister: procedure expose m.
parse arg li
    call mAdd 'CLASS.ADDEDLISTENERS', li
    do cx = 1 to m.class.addedSeq.0
        call oRun li, m.class.addedSeq.cx
        end
    return
endProcedure classAddedRegister

/*--- to notify all listeners about a newly defined classes --------*/
classAddedNotify: procedure expose m.
parse arg cl
    call mAdd 'CLASS.ADDEDSEQ', cl
    if m.cl == 'u' then
        call classSuperSub cl
    m.cl.flds.0 = 0
    m.cl.stms.0 = 0
    m.cl.stemCl = ''
    m.cl.valueCl = ''
    call classAddFields cl, cl
    m.cl.hasFlds = m.cl.flds.0 > 1 ,
        | (m.cl.flds.0 == 1 & m.cl.flds.1 \== '') | m.cl.stms.0 > 0
    do lx = 1 to m.class.addedListeners.0
        call oRun m.class.addedListeners.lx, cl
        end
    return
endProcedure classAddedNotify

/*--- add supper and sub links for class cl -------------------------*/
classSuperSub: procedure expose m.
parse arg cl
    do ux=1 to m.cl.0
        u1 = m.cl.ux
        if m.u1 == 'u' then do
            if mPos(cl'.SUPER', u1) > 0 then
                call err u1 'is already in' cl'.SUPER.'sx ,
                    || ': classSuperSub('cl')'
            call mAdd cl'.SUPER', u1
            if mPos(cl'.SUB', cl) > 0 then
                call err cl 'is already in' u1'.SUB.'sx ,
                    || ': classSuperSub('cl')'
            call mAdd u1'.SUB', cl
            end
        end
    return
endProcedure classSuperSub

/*--- add the the fields of class cl to stem f ----------------------*/
classAddFields: procedure expose m.
parse arg f, cl, nm
    n1 = substr(nm, 1+abbrev(nm, '.') )
    if symbol('m.f.f2c.n1') \== 'VAR' then
        m.f.f2c.n1 = cl
/*    else if cl == m.f.f2c.n1 then
        return 0 */
    if cl == m.class.classV | cl == m.class.classW | m.cl=='r' then do
        if nm == '' then do
            if m.f.valueCl \== '' then
                return  err('value mistmatch')
            m.f.valueCl = cl
            end
        if nm == '' then do
             call mMove f'.FLDS', 1, 2
             m.f.flds.1 = ''
             end
        else do
            call mAdd f'.FLDS', nm
            end
        return 0
        end
    if m.cl = 's' then do
        if m.cl.class == '' then
            call err 'stem null class'
        a1 = mAdd(f'.STMS', nm)
        m.a1.class = m.cl.class
        if nm == '' then
            m.f.stemCl = m.cl.class
        return 0
        end
    if m.cl = 'f' then
        return classAddFields(f, m.cl.class, nm'.'m.cl.name)
    if m.cl.class \== '' then
        return classAddFields(f, m.cl.class, nm)
    do tx=1 to m.cl.0
        call classAddFields f, m.cl.tx, nm
        end
    return 0
endProcedure classAddFields

/*--- return true iff the two classes are equal -------------------*/
classEqual: procedure expose m.
parse arg l, r
    if m.l \== m.r | m.l.nameComp \== m.r.nameComp ,
            | m.l.class \== m.r.class | m.l.0 \== m.r.0  then
        return 0
    if m.l.met \== m.r.met  then
        return 0
    do sx=1 to m.l.0
        if m.l.sx \== m.r.sx then
            return 0
        end
    return 1
endProcedure classEqual

/*--- print object ---------------------------------------------------*/
objOut: procedure expose m.
parse arg m, pr, p1
   c = objClass(m, '')
   if c == '' then
       call out p1 'no class for' m
   else if c == m.class.classV then
       call out p1 || m.m
   else if c == m.class.classW then
       call out p1 || o2String(m)
   else
       call classOutDone c, m, pr, p1
   return
endProcedure objOut

/*--- recursively output (with out:) the object a with class t -------*/
classOut: procedure expose m.
parse arg t, a, pr, p1
    return classOutDone(if(t=='',m.class.classO, t), a, pr, p1)
endProcedure classOut

/*--- ouput object a with class t and stopper done ------------------*/
classOutDone: procedure expose m. done.
parse arg t, a, pr, p1
    if p1 == '' then
        p1 = pr
    if right(p1, 1) \== ' ' then
        p1 = p1' '
    if done.ini \== 1 then do
        done.ini = 1
        t = class4Name(t, t)
        p1 = p1'@'a' '
        end
    if done.t.a == 1 then
        return out(p1'done :'className(t) '@'a)
    done.t.a = 1
    if t = m.class.classO then do
        if a == '' then
            return out(p1'obj null')
        t = objClass(a, '')
        if t = '' then
            return out(p1'obj has no class @'m.a)
        else
            return classOutDone(t, a, pr, p1'isA')
        end

    if t == m.class.classV then
        return out(p1'=' m.a)
    if t == m.class.classW == 'w' then
        return out(p1'}' substr(a, 2))
    if m.t == 'f' then
        return classOutDone(m.t.class, a'.'m.t.name, pr, p1'.'m.t.name)
    if m.t == 'r' then do
        if m.a == '' then
            return out(p1'refTo :'className(m.t.class) '@null@')
        else
            return classOutDone(m.t.class, m.a, pr,
                    , p1'refTo @'m.a)
        end
    if m.t = 'u' then do
        t1 = m.t.1
        vv = m.t.0 > 0 & m.t.1 == m.class.classV
        call out p1 || if(m.t.name == '', 'union', ':'m.t.name) ,
             || copies(' =' m.a, vv)
        do ux=1+vv to m.t.0
            call classOutDone m.t.ux, a, pr' '
            end
        return 0
        end
    if m.t = 's' then do
        call out p1'stem' m.a.0
        do ux=1 to m.a.0
            call classOutDone m.t.class, a'.'ux, pr' ', pr' .'ux
            end
        return 0
        end
    if m.t = 'c' then do
        if m.t.name = m.a then
            call classOutDone m.t.class, a, pr, p1'choice' m.a
        return 0
        end
    if m.t = 'm' then
        return 0
    return err('bad class type' m.t)
endProcedure classOutDone
/* copy class end   ***************************************************/
/* copy map begin ******************************************************
    a map stores values at keys
    it may also maintain a list of keys
    the basic ideas are similar to the java Interface java.util.Map
    contrary to stems we also handle keys longer then 250 bytes
***********************************************************************/
/*--- initialize the module ------------------------------------------*/
mapIni: procedure expose m.
    if m.map.ini = 1 then
        return
    m.map.ini = 1
    call mIni
    m.map.0 = 0
    m.map.inlineSearch = 1
    call mapReset map.inlineName, map.inline
    return
endProcedure mapIni

mapInline: procedure expose m.
parse arg pName, opt
    if mapHasKey(map.inlineName, pName) then do
        im = mapGet(map.inlineName, pName)
        if pos('l', opt) < 1 & symbol('m.im.0') \== 'VAR' then do
            m.im.0 =  m.im.lEnd - m.im.lBegin - 1
            do ix=1 to m.im.0
                m.im.ix = strip(sourceline(ix+m.im.lBegin), 't')
                end
            end
        return im
        end
    name = '/'
    do lx = m.map.inlineSearch to sourceline()
        if \ abbrev(sourceline(lx), '$') then
            iterate
        li = sourceline(lx)
        s1 = pos('/', li)+ 1
        if s1 < 3 | s1 > 4 then
            iterate
        s2 = pos('/', li, s1)
        if s2 <= s1 then
            iterate
        if s1 == 3 then do
            if name \== substr(li, s1, s2-s1) then
                iterate
            im = 'MAP.INLINE.' || (m.map.inline.0+1)
            call mapAdd map.inlineName, name, im
            m.im.lBegin = lBeg
            m.im.lEnd = lx
            m.im.mark = mrk
            if name == pName then do
                m.map.inlineSearch = lx+1
                return mapInline(pName)
                end
            name = '/'
            end
        else if \ mapHasKey(map.inlineName,
                , substr(li, s1, s2-s1)) then do
            lBeg = lx
            mrk = substr(li, 2, s1-3)
            name = substr(li, s1, s2-s1)
            end
        else do
            name = '/'
            end
        end
    if pos('r', opt) > 0 then
        return ''
    return err('no inline data /'pName'/ found')
endProcedure mapInline

/*--- create a new map ----------------------------------------------*/
mapNew: procedure expose m.
parse arg opt
    m.map.0 = m.map.0 + 1
    return mapReset('MAP.'m.map.0 , opt)
endProcedure mapNew

/*--- make an empty map, if opt <> '' maintain stem of keys
                ('K' in map.keys, '=' in a else in opt) --------------*/
mapReset: procedure expose m.
    parse arg a, opt
    if symbol('m.map.keys.a') == 'VAR' then
        call mapClear a
    if opt = '=' then
        st = a
    else if translate(opt) = 'K' then
        st = 'MAP.KEYS.'a
    else
        st = opt
    m.map.keys.a = st
    if st \== '' then
        m.st.0 = 0
    return a
endProcedure

/*--- add a new key value pair to the map ----------------------------*/
mapAdd: procedure expose m.
parse arg a, ky, val
    vv = mapValAdr(a, ky, 'a')
    m.vv = val
    return val
endProcedure mapAdd

/*--- change the value at a key or add key value ---------------------*/
mapPut: procedure expose m.
parse arg a, ky, val
    vv = mapValAdr(a, ky, 'p')
    m.vv = val
    return val
endProcedure mapPut

/*--- return 1 if key ky exists in map a, 0 otherwise ----------------*/
mapHasKey: procedure expose m.
parse arg a, ky
    return mapValAdr(a, ky) \== ''
endProcedure mapHasKey

/*--- return the value of key ky in map a if it exists,
          else if called with a third argument return third argument
          else issue an error ----------------------------------------*/
mapGet: procedure expose m.
parse arg a, ky
    vv =  mapValAdr(a, ky)
    if vv \== '' then
        return m.vv
    else if arg() > 2 then
        return arg(3)
    else
        return err('missing key in mapGet('a',' ky')')
endProcedure mapGet

/*--- return a stem of all keys --------------------------------------*/
mapKeys: procedure expose m.
parse arg a
    if m.map.keys.a == '' then
        call err 'mapKeys('a') with no keys'
     return m.map.keys.a
endProcedure mapKeys

/*--- remove a key from the map, do nothing if it is missing ---------*/
mapRemove: procedure expose m.
parse arg a, ky
    vv = mapValAdr(a, ky)
    if vv == '' then
        return ''
    if m.map.keys.a \== '' then do
        trace ?R /* not tested yet ???wkTest */
        k = m.map.keys.a
        mx = m.k.0
        do i=1 to mx
            if m.k.i == ky then do
                m.k.i = m.k.mx
                m.k.0 = mx - 1
                return
                end
            end
        end
    val = m.vv
    drop m.a.ky
    return val
endProcedure mapRemove

/*--- remove all entries ---------------------------------------------*/
mapClear: procedure expose m.
parse arg a
    st = mapKeys(a)
    liLe = 243 - length(a)
    do kx=1 to m.st.0
        ky = m.st.kx
        drop m.st.kx
        if length(ky) <= liLe then do
            drop m.a.ky
            end
        else do
            adr = mapValAdr(a, ky)
            if adr \== '' then do
                ha = left(adr, lastPos('.', adr) - 3)
                do i = 1 to m.ha.k.0
                     drop m.ha.k.i m.ha.v.i
                     end
                 drop m.ha.k.0
                 end
            end
        end
    m.st.0 = 0
    return a
endProcedure mapClear

/*--- return the value pointer for a key, '' if non existing
             with fun = 'a' add a key, with 'p' put a key ------------*/
mapValAdr: procedure expose m.
parse arg a, ky, fun
    if length(ky) + length(a) <= 243 then do
        res = a'.'ky
         if symbol('m.res') == 'VAR' then do
            if fun == 'a' then
                call err 'duplicate key' ky 'in map' a
            return res
            end
        else if fun == '' then
            return ''
        end
    else do
        len = 243 - length(a)
        q = len % 4
        ha = a'.'left(ky, len - 2 * q) || substr(ky,
            , (length(ky)-len) % 2 + 2 * q, q) || right(ky, q)
        if symbol('M.ha.k.0') == 'VAR' then do
            do i=1 to m.ha.k.0
                if m.ha.k.i == ky then do
                    if fun == 'a' then
                        call err 'duplicate key' ky ,
                            'map' a 'hash' ha'.K.'i
                    return ha'.V.'i
                    end
                end
            end
        else do
            i = 1
            end
        if fun == '' then
            return ''
        if i > 9 then
            call err 'overflow long key' y 'in map' a 'hash' ha'.K.'i
        m.ha.k.0 = i
        m.ha.k.i = ky
        res = ha'.V.'i
        end
    if m.map.keys.a \== '' then
        call mAdd m.map.Keys.a, ky
    m.res = ''
    return res
endProcedure mapValAdr

/* copy map end *******************************************************/
/* copy m begin ********************************************************
  we use variables as follows
    m. stem m: all global data and object data that must survive
               a procedure call  (m for memory in Memoria of B5000)
        m.<mbr>.** to avoid conflicts: every rexx Module (copy) should
               only allocate addresses m.<mbr>.** with <mbr> the name of
               the rexx module
        we pass parameters around (e.g. a=address, m=memory, st=stem)
            and the called function may use m.a or m.a.subField etc.
    gg*: local variable in subroutines without procedure
    everything else: temporary data within procedure

  every subroutine is declared as procedure expose m.
        (also if no m. variable is used, because e.g. of error handling)
  the few subroutines that cannot use procedure, should use only
        variables starting with gg
***********************************************************************/
/*---make an area -----*/

mNewArea: procedure expose m.
parse arg nm, adr, newCd, freeCd
    m.m.area.0 = m.m.area.0 + 1
    a = 'M.AREA.'m.m.area.0
    if adr == '=' then
        adr = nm
    else if adr == '' then
        adr = 'M.'m.m.area.0
    if symbol('m.m.n2a.adr') == 'VAR' then
        call err 'adr' adr 'for area' nm 'already used'
    m.m.n2a.adr = a
    call mAlias adr, nm
    m.m.p2a.adr = a

    m.a.0 = 0
    m.a.free.0 = 0
    m.a.address = adr
    m.a.newCode = newCd
    m.a.freeCode = freeCd
    return nm
endProcedure mNewArea

mAlias: procedure expose m.
parse arg oldNa, newNa
    if symbol('m.m.n2a.oldNa') \== 'VAR' then
        call err 'area' oldNa 'does not exist'
    if oldNa == newNa then
        return
    if symbol('m.m.n2a.newNa') == 'VAR' then
        call err 'newName' newNa 'for old' oldNa 'already used'
    m.m.n2a.newNa = m.m.n2a.oldNa
    return
endProcedure mAlias

mBasicNew: procedure expose m. ggArea
parse arg name
    if symbol('m.m.n2a.name') \== 'VAR' then
        call err 'area' name 'does not exists'
    ggArea = m.m.n2a.name
    if m.ggArea.free.0 > 0 then do
        fx = m.ggArea.free.0
        m.ggArea.free.0 = fx-1
        m = m.ggArea.free.fx
        end
    else do
        m.ggArea.0 = m.ggArea.0 + 1
        m = m.ggArea.address'.'m.ggArea.0
        end
    return m
endProcedure mBasicNew

mNew: procedure expose m.
labelMNew:
parse arg name, arg, arg2, arg3
    m = mBasicNew(name)
    interpret m.ggArea.newCode
    return m
endProcedure mNew

mReset: procedure expose m.
parse arg a, name
    ggArea = m.m.n2a.name
    m = a
    interpret m.ggArea.newCode
    return m
endProcedure mReset

mFree: procedure expose m.
parse arg m
    p = 'M.P2A.'left(m, lastPos('.', m)-1)
    area = m.p
    if m.area.freeCode \== '' then
        interpret m.area.freeCode
    fx = m.area.free.0 + 1
    m.area.free.0 = fx
    m.area.free.fx = m
    return
endProcedure mFree
/*--- iterate over all allocate elements of an area ------------------*/
mIterBegin: procedure expose m.
parse arg nm
    a = m.m.n2a.nm
    return m.a.address'.0'
endProcedure mIterBegin

mIter: procedure expose m.
parse arg cur
    if cur == '' then
        return ''
    lx = lastPos('.', cur)
    p = 'M.P2A.'left(cur, lx-1)
    a = m.p
    ix = substr(cur, lx+1)
    do ix=ix+1 to m.a.0
        n = m.a.address'.'ix
        do fx=1 to m.a.free.0 while m.a.free \== n
            end
        if fx > m.a.free.0 then
            return n
        end
    return ''
endProcedure mIter

/*--- cut stem a to length len ---------------------------------------*/
mCut: procedure expose m.
parse arg a, len
    m.a.0 = len
    return a
endProcedure mCut

/*--- add one or several arguments to stem m.a -----------------------*/
mAdd: procedure expose m.
parse arg a
    ix = m.a.0
    do ax = 2 to arg()
        ix = ix + 1
        m.a.ix = arg(ax)
        end
    m.a.0 = ix
    return a'.'ix
endProcedure mAdd

/*--- pop last element from stem m.a ---------------------------------*/
mPop: procedure expose m.
parse arg a
    ix = m.a.0
    if ix < 1 then
        call err 'pop from empty stem' a
    m.a.0 = ix-1
    return m.a.ix
endProcedure mPop

/*--- add to m.dst.* a (sub)sequence of m.src.* ----------------------*/
mAddSt: procedure expose m.
    parse arg dst, src
    dx = m.dst.0
    do sx = 1 to m.src.0
        dx = dx + 1
        m.dst.dx = m.src.sx
        end
    m.dst.0 = dx
    return
endProcedure mAddSt

/*--- find position of first occurrence of ele in stem m,
        return 0 if nonemove a part of a stem -----------------------*/
mPos: procedure expose m.
parse arg m, ele, sx
    if sx == '' then
        sx = 1
    do x=sx to m.m.0
        if m.m.x = ele then
            return x
        end
    return 0
endProcedure mPos

/*--- move a part of a stem ------------------------------------------*/
mMove: procedure expose m.
parse arg m, sx, dx
    if dx < sx then do
        y = dx
        do x=sx to m.m.0
            m.m.y = m.m.x
            y = y + 1
            end
        end
    else if dx > sx then do
        y = m.m.0 + dx - sx
        do x=m.m.0 by -1 to sx
            m.m.y = m.m.x
            y = y - 1
            end
        end
    m.m.0 = m.m.0 + dx - sx
    return
endProcedure mMove

/*--- insert a stem into another ------------------------------------*/
mInsert: procedure expose m.
parse arg m, tx, st
    call mMove m, tx, tx+m.st.0
    do sx=1 to m.st.0
        dx = tx-1+sx
            m.m.dx = m.st.sx
            end
    return
endProcedure mInsert

/*--- strip all elements of a stem -----------------------------------*/
mStrip: procedure expose m.
parse arg st, opt
    if opt == '' then
        opt = 'b'
    do x=1 to m.st.0
        m.st.x = strip(m.st.x, opt)
        end
    return st
endProcedure mStrip

/*--- cat all elements of a stem together ----------------------------*/
mCat: procedure expose m.
parse arg st, mid
    if m.st.0 < 1 then
        return ''
    res = m.st.1
    do x=2 to m.st.0
        res = res || mid || m.st.x
        end
    return res
endProcedure mCat

mIni: procedure expose m.
    if m.m.ini = 1 then
        return
    m.m.ini = 1
    m.mAlfLC  = 'abcdefghijklmnopqrstuvwxyz'
    m.mAlfUC  = translate(m.mAlfLC)
    m.mAlfa   = m.mAlfLC || m.mAlfUC
    m.mAlfNum = m.mAlfa || '0123456789'
    m.mAlfDot = m.mAlfNum || '.'
    m.m.area.0 = 0
    call mNewArea
    return
endProcedure mIni
/* copy m end *********************************************************/
/* copy adrIsp begin *************************************************/
/**********************************************************************
    lmd: catalog read
    call sequence: lmdBegin, lmdNext*, lmdEnd
        mit lmd service (mit save in file und read,
                         weil list zu langsam und listcat abstürzt)
        1. arg (grp)     als group dataset für lmd save
                         und dd name für file read
***********************************************************************/
lmdBegin: procedure expose m.
    parse arg grp, lev
    call adrIsp 'lmdinit listid(lmdId) level('lev')'
    res = adrIsp('lmdlist listid(&lmdId) option(save) group('grp')', 4)
    call adrIsp 'lmdfree listid(&lmdId)'
    if res = 0 then do
        call trc timing() 'lmdlist save' grp lev
        call adrTso 'alloc dd('grp') shr dsn('grp'.datasets)'
        end
    else do
        call trc 'no datasets found' timing() 'lmdlist save' grp lev
        call adrTso 'alloc dd('grp') dummy'
        end
    call readDDBegin grp
return /* end lmdBegin */

lmdNext:
    parse arg ggGrp, ggSt, withVolume
    if \ readDD(ggGrp, ggSt) then
         return 0
    if withVolume \== 1 then
        do ggIx=1 to value(ggSt'0')
            x = value(ggSt || ggIx, word(value(ggSt || ggIx), 1))
            end
    return 1
endSubroutin lmdNext

lmdEnd: procedure expose m.
    parse arg grp
    call readDDEnd grp
    call adrTso 'free dd('grp')'
return /* end lmdEnd */

lmd: procedure expose m.
    parse arg lev, withVol
    call lmdBegin gg1, lev
    do while lmdNext(gg1, q., withVol)
        do x=1 to q.0
           call out q.x
           end
        end
    call lmdEnd gg1
    return
endProcedure lmd
/**********************************************************************
    member list of a pds:
        call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmm: procedure expose m.
parse arg dsn
    id = lmmBegin(dsn)
    do ix=1 by 1
        m = lmmNext(id)
        if m = '' then
            leave
        call out m
        end
    call lmmEnd id
    return
endProcedure lmm

lmmBegin: procedure expose m.
parse arg dsn
    mbr = dsnGetMbr(dsn)
    pds = dsnSetMbr(dsn, )
    call adrIsp "LMINIT DATAID(lmmId) DATASET('"pds"') ENQ(SHRW)"
    call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
    res = lmmId
    if mbr <> '' then
        res = res 'pattern('mbr')'
    return res
endProcedure lmmBegin

lmmEnd: procedure expose m.
parse arg lmmId opt
    call adrIsp "LMMLIST DATAID("lmmId") option(free)", 8
    call adrIsp "LMCLOSE DATAID("lmmId")"
    call adrIsp "LMFREE DATAID("lmmId")"
    return
endProcedure lmmEnd

lmmNext: procedure expose m.
parse arg lmmId opt
    if adrIsp("LMMLIST DATAID("lmmid")" ,
               "OPTION(LIST) MEMBER(Mbr)" opt, 4 8) = 0 then
        return strip(mbr)
    else
        return ''
endProcedure lmmNext

lmmRm: procedure expose m.
parse arg dsn, mbrs
    mbrs = dsnGetMbr(dsn) mbrs
    pds = dsnSetMbr(dsn, )
    call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
    call adrIsp "LMOPEN DATAID("lmmId") OPTION(OUTPUT) "
    err = ''
    do wx=1 to words(mbrs)
        m1 = word(mbrs, wx)
        rr = adrIsp("lmmDel dataid("lmmId") member("m1")", 0 8 12)
        if rc = 0 then
            say 'removed' m1 'from' pds
        else if rc = 8 then
            say 'not found' m1 'in' pds
        else do
            err = 'error deleting' m1 'in' pds 'rc' rr strip(zerrlm)
            say err
            leave
            end
        end
    call adrIsp "LMCLOSE DATAID("lmmId")"
    call adrIsp "LMFREE DATAID("lmmId")"
    if err <> '' then
        call err err
    return
endProcedure lmmRm
/*--- address ispf with error checking -------------------------------*/
adrIsp:
    parse arg ggIspCmd, ggRet
    address ispexec ggIspCmd
    if rc = 0 then return 0
    else if ggRet == '*' then return rc
    else if wordPOS(rc, ggRet) > 0 then return rc
    else
        call err 'adr ispExec rc' rc 'in' ggIspCmd':' strip(zerrlm)
endSubroutine adrIsp

/*--- address editor with error checking -----------------------------*/
adrEdit:
    parse arg ggEditCmd, ggRet
    address isrEdit ggEditCmd
    if rc = 0 then return 0
    else if ggRet == '*' then return rc
    else if wordPOS(rc, ggRet) > 0 then return rc
    else
        call err 'adr isrEdit rc' rc 'for' ggEditCmd
endSubroutine adrEdit
/* copy adrIsp end   *************************************************/
/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
    parse arg ggTsoCmd, ggRet
    address tso ggTsoCmd
    if rc == 0                     then return 0
    else if ggRet == '*'           then return rc
    else if wordPos(rc, ggRet) > 0 then return rc
    else
        call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */

/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure expose m.
parse upper arg dsn ., addPrefix
    if left(dsn,1) = "'" then
        return strip(dsn, 'b', "'")
    sp = sysvar('SYSPREF')
    if sp == '' then
        sp = userid()
    cx = pos('~', dsn)
    if cx < 1 & addPrefix == 1 then
        return sp'.'dsn
    do while cx \== 0
        le = left(dsn, cx-1)
        ri = substr(dsn, cx+1)
        if right(le, 1) == '.' | left(ri, 1) == '.' then
            dsn = le || sp || ri
        else
            dsn = le || left('.', le \== '') || sp ,
                     || left('.', ri \== '') || ri
        cx = pos('~', spec, cx)
        end
    return dsn
endProcedure dsn2Jcl

/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure expose m.
parse arg dsn .
    return "'"dsn"'"
endProcedure jcl2dsn

dsnSetMbr: procedure expose m.
parse arg dsn, mbr
     bx = pos('(', dsn)
     if bx > 0 then
         dsn = strip(left(dsn, bx-1))
     if mbr <> '' then
         dsn = dsn'('strip(mbr)')'
     return dsn
endProcedure dsnSetMbr

dsnGetMbr: procedure expose m.
parse arg dsn
     lx = pos('(', dsn)
     rx = pos(')', dsn, lx+1)
     if lx < 1 then
         return ''
     else if lx < rx then
         return substr(dsn, lx+1, rx-lx-1)
     else
         return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
    io: read or write a dataset with the following callsequences:
        read:  readDDBegin, readDD*,  readDDEnd
        write: writeBegin,  writeDD*, writeEnd

        readDD returns true if data read, false at eof
***********************************************************************/

/*--- prepare reading from a DD --------------------------------------*/
readDDBegin: procedure expose m.
    parse upper arg ggDD
    call errAddCleanup 'call readDDEnd' ggDD', "*"'
return /* end readDDBegin */

/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt = '' then
        ggCnt = 100
    call adrTso 'execio' ggCnt 'diskr' ggDD '(stem' ggSt')', 2
    return (value(ggSt'0') > 0)
return /* end readDD */

/*--- finish reading DD  ggDD ----------------------------------------*/
readDDEnd: procedure expose m.
    parse upper arg ggDD, ggRet
    call errRmCleanup 'call readDDEnd' ggDD', "*"'
    return adrTso('execio 0 diskr' ggDD '(finis)', ggRet)
endProcedure readDDEnd

/*--- prepare writing to DD ggDD -------------------------------------*/
writeDDBegin: procedure expose m.
    parse upper arg ggDD
                  /* ensure file is erased, if no records are written */
    call adrTso 'execio' 0 'diskw' ggDD '(open)'
    call errAddCleanup 'call writeDDEnd' ggDD', "*"'
return /* end writeDDBegin */

/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    call adrTso 'execio' ggCnt 'diskw' ggDD '(stem' ggSt')'
    return
endSubroutine writeDD

/*--- end writing to dd ggDD (close) --------------------------------*/
writeDDEnd: procedure expose m.
parse upper arg ggDD, ggRet
    call errRmCleanup 'call writeDDEnd' ggDD', "*"'
    return adrTso('execio 0 diskw' ggDD '(finis)', ggRet)
endProcedure writeDDEnd

/*--- standardise a dsn spec
       word1             dsName or -
       word2             dd     or -
       word3             disp   or -
       word4 to first :  attributes in tso format
       after first :     attributes for new allocation
----------------------------------------------------------------------*/
dsnSpec: procedure expose m.
parse upper arg spec
    rr = ''      /* put leading - in separate words */
    do sx=1 while words(rr) < 3 & wx \= ''
        wx = word(spec, sx)
        do while abbrev(wx, '-') & words(rr) < 3
            wx = substr(wx, 2)
            rr = rr '-'
            end
        rr = rr wx
        end
    spec = rr subWord(spec, sx)
    na = ''
    dd = ''
    di = ''
    if left(spec, 1) = '&' then /* external spec is handled ok */
        spec = strip(substr(spec, 2))
    do wx=1 by 1
        w = word(spec, wx)
        if w = '' | abbrev(w, '.') | abbrev(w, ':') then
            leave
        else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
            di = w
        else if w = 'CATALOG' then
            di = di w
        else if abbrev(w, 'DD(') then
            dd = substr(w, 4, length(w)-4)
        else if abbrev(w, 'DSN(') then
            na = strip(substr(w, 5, length(w)-5))
        else if na == '' then
            na = dsn2jcl(w)
        else if dd == '' then
            dd = w
        else if di == '' then
            di = w
        else
            leave
        end
    if na == '' then
        na = '-'
    else if abbrev(na, "'") then
        na = substr(na, 2, length(na)-2)
    if dd == '' then dd = '-'
    if di == '' then di = '-'
    re = subword(spec, wx)
    if abbrev(re, '.') then
        re = substr(re, 2)
    return na dd di re
endProcedure dsnSpec

/*--- alloc a dsn with dsnAlloc
          if the dsn is inuse wait and retry
          until either the allocation is successfull
          or the timeout occurs --------------------------------------*/
dsnAllocWait: procedure expose m.
parse upper arg spec, pDi, pDD, timeOut
    x = max(1, arg() - 1)
    do rt=0
        m.adrTsoAl.1 = ''
        m.adrTsoAl.2 = ''
        m.adrTsoAl.3 = ''
        call outtrap m.adrTsoAl.
        res = dsnAlloc(spec, pDi, pDD, '*')
        call outtrap off
        if \ abbrev(res, ' ') then
            return res
        msg = m.adrTsoAl.1'\n'm.adrTsoAl.2'\n'm.adrTsoAl.3
        if rt > timeOut & timeOut \== '' then
            return err('timeout allocating' spec time() '\n'msg)
        if pos('DATA SET IS ALLOCATED TO ANOTHER', msg) < 1 then
            return err('allocating' spec'\n'msg)
        say time() 'sleep and retry alloc' spec
        call sleep 1, 0
        end
endProcedure dsnAllocWait

/*--- alloc a dsn or a dd
          spec '-'<ddName>
               datasetName? disposition? '.'? attributes? (':' newAtts)?
          disp default disposition
          dd   default dd name
          retRc   erlaubte ReturnCodes (leer = 0)
          returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, pDi, pDD, retRc
    parse value dsnSpec(spec) with na dd di rest
    if na = '-' then
        m.dsnAlloc.dsn = ''
    else
        m.dsnAlloc.dsn = na
    if na == '-' & dd \== '-' & di == '-' & rest = '' then
        return dd
    if dd == '-' & pDD \== '' then
        dd = pDD
    if dd == '-' then do
        if symbol('m.adrTso.ddNum') = 'VAR' then
            dd = m.adrTso.ddNum + 1
        else
            dd = 1
        m.adrTso.ddNum = dd
        dd = 'DD' || dd
        end
    if di = '-' & pDi \== '' then
        di = pDi
    if di = '-' then
        di = 'SHR'
    else if pos('(', na) < 1 then
        nop
    else if di = 'MOD' then
        call err 'disp mod for' na
    else
        di = 'SHR'
    if pos('/', na) > 0 then
        return csmAlloc(na dd di rest, retRc)
    else
        return tsoAlloc(na dd di rest, retRc)
endProcedure dsnAlloc

tsoAlloc: procedure expose m.
parse arg na dd disp rest ':' nn, retRc
    c = 'alloc dd('dd')' disp
    if na \== '-' then
        c = c "DSN('"na"')"
    else if disp = 'NEW' and nn \== '' then
        c = c dsnCreateAtts(,nn)
    call outtrap m.adrTsoAl.
    alRc = adrTso(c rest, '*')
    call outtrap off
    if alRc =  0 then do
        call errAddCleanup 'call tsoFree' dd', "*"'
        return dd 'call tsoFree' dd';'
        end
    if nn \= '' & wordPos(disp, 'OLD SHR') > 0 ,
          & sysDsn("'"m.dsnAlloc.dsn"'") == 'DATASET NOT FOUND' then do
        say 'tsoAlloc creating' c rest ':'nn
        call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(na, nn)
        call adrTso 'free  dd('dd')'
        return tsoAlloc(na dd disp rest, retRc)
        end
    do ax=1 to m.adrTsoAl.0
        say m.adrTsoal.ax
        end
    if retRc = '*' | wordPos(alRc, retRc) > 0 then
        return ' ' alRc
    call err 'tsoAlloc rc' alRc 'for' c rest
endProcedure tsoAlloc

tsoAtts: procedure expose m.
parse arg dsn
    rc = listDsi("'"dsn"' SMSINFO")
    if rc = 0 then
        mv = ''
    else if rc = 4 & sysReason = 19 then do
        mv = 'UNITCNT(30)'
        say 'multi volume' mv
        end
    else if rc ^= 0 then
        call err 'listDsi rc' rc 'reason' sysReason,
                             sysMsgLvl1 sysMsgLvl2
    al = 'CAT'
    al = ''
    if right(sysDsSms, 7) == 'LIBRARY' ,
        | abbrev(sysDsSms, 'PDS') then
         al = al 'DSNTYPE(LIBRARY)'
    if sysUnits = 'TRACK' then
        sysUnits = 'TRACKS'
    al = al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
        "DATACLAS("sysDataClass")" ,
        "RECFM("translate('1 2 3', ' 'sysREcFM, ' 123')")",
        "LRECL("SYSLRECL")",
        "blksize("sysBLkSIZE")",
        "SPACE("sysPrimary"," sysSeconds")" sysUnits mv
    return al
endProcedure tsoAtts

tsoFree: procedure expose m.
parse arg dd, ggRet
    call adrTso 'free dd('dd')', ggRet
    call errRmCleanup 'call tsoFree' dd', "*"'
    return
endProcedure tsoFree

dsnCreateAtts: procedure expose m.
parse arg dsn, atts, forCsm
    forCsm = forCsm == 1
    aU = ' 'translate(atts)
    if abbrev(atts, ':') then do
        parse var atts a1 atts
        bl = 32760
        rl = substr(a1, 3)
        if abbrev(a1, ':F') then do
            if rl = '' then
                rl = 80
            recfm='f b'
            bl = bl - (bl // rl)
            end
        else do
            if rl = '' then
                rl = bl-4
            recfm = substr(a1, 2, 1) 'b'
            end
        if forCsm then
            atts =  atts "recfm("space(recfm, 0)") lrecl("rl")",
                    "blkSize("bl")"
        else
            atts = atts "recfm("recfm") lrecl("rl") block("bl")"
        end
    if pos('(', dsn) > 0 & pos(' DSNTYPE(', aU) < 1 ,
                         & pos(' DSORG(',   aU) < 1 then
        atts = atts 'dsntype(library) dsorg(po)'
    if pos(' MGMTCLAS(', aU) < 1 then
        atts = atts 'mgmtclas(COM#A091)'
    if pos(' SPACE(', aU) < 1 then
        if forCsm then
            atts = atts 'space(10, 1000) cylinder'
        else
            atts = atts 'space(10, 1000) cyl'
    if dsn == '' then
       return atts
    return "dataset('"dsnSetMbr(dsn)"')" atts
endProcedure dsnCreateAtts

/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
    ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
    call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
    interpret subword(ggAlloc, 2)
    return
endSubroutine readDsn

/*--- write the dataset specified in ggDsnSpec from stem ggSt
          write ggCnt records if not empty otherwise ggst0
          if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
    call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
            '(stem' ggSt 'open finis)'
    interpret subword(ggAlloc, 2)
    if ggSay == 1 | m.debug == 1 then
       say ggCnt 'records written to' ggDsnSpec
    return
endSubroutine writeDsn

copyDSN: procedure expose m.
parse arg frSpec, toSpec, ggSay
    frDD = dsnAlloc(frSpec, 'SHR', 'FRDD')
    toDD = dsnAlloc(toSpec, 'OLD', 'TODD')
    call readDDBegin word(frDD, 1)
    call writeDDBegin word(toDD, 1)
    cnt = 0
    do while readDD(word(frDD, 1), r.)
        call writeDD word(toDD, 1), r.
        cnt = cnt + r.0
        end
    call readDDEnd word(frDD, 1)
    call writeDDEnd word(toDD, 1)
    interpret ';' subword(frDD, 2) '; ; ;' subword(toDD, 2)
    if ggSay == 1 | m.debug == 1 then
       say cnt 'records copied from' frSpec 'to' to toSpec
    return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
/* copy err begin ******************************************************
    messages, errorhandling,help
***********************************************************************/
errIni: procedure expose m.
    if m.err.ini == 1 then
        return
    call outIni
    m.err.ini     = 1
    m.err.handler = ''
    m.err.cleanup = ';'
    m.err.opt     = ''
    return
endProcedure errIni
/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
    call errIni
    parse arg m.err.opt, m.err.handler
    if pos('I', translate(m.err.opt)) > 0 then
        if errOS() \== 'LINUX' then
            if sysVar('sysISPF') = 'ACTIVE' then
                    call adrIsp 'control errors return'
    return
endSubroutine errReset

/*--- error routine: abend with message ------------------------------*/
err:
    parse arg ggTxt, ggOpt
    call errIni
    drop err handler cleanup opt call return
    if ggOpt == '' & m.err.handler \== '' then do
        if 1 then do /* no detection of recursive err call loop
                        --> will anyway fail by stack overflow */
            interpret m.err.handler
            end
        else do
                     /* avoid recursive err call loop */
            drop call return
            if symbol('m.err.call') \== 'VAR' then
                m.err.call = 1
            else
                m.err.call = m.err.call + 1
            if m.err.call > 10 then do
                say 'errHandler loop:' m.err.handler
                end
            else do
                m.err.return = 1
                call errInterpret m.err.handler
                m.err.call = m.err.call - 1
                if m.err.return then
                    return result
                end
            end
        end
    call outPush
    call errSay ggTxt, 'e'
    call errCleanup
    if ggOpt == '' then
        ggOpt = m.err.opt
    ggOpt = translate(ggOpt)
    if pos('T', ggOpt) > 0  then do
        trace ?r
        say 'trace ?r in err'
        end
    if pos('H', ggOpt) > 0  then do
        call errSay 'divide by zero to show stackHistory', 'e'
        x = 1 / 0
        end
    call errSay 'exit(12)', 'e'
    exit errSetRc(12)
endSubroutine err

/*--- error routine: user message cleanup exit -----------------------*/
errEx:
    parse arg ggTxt
    call errIni
    call outPush
    call errSay ggTxt
    call errCleanup
    exit 8
endProcedure errEx

errAddCleanup: procedure expose m.
parse arg code
    if m.err.ini \== 1 then
        call errIni
        /* concatenate backwards, then it is executed also backwards */
    m.err.cleanup = ';'code || m.err.cleanup
    return
endProcedure errAddCleanup

errRmCleanup: procedure expose m.
parse arg code
    if m.err.ini \== 1 then
        call errIni
    cx = pos(';'code';', m.err.cleanup)
    if cx > 0 then
        m.err.cleanup = left(m.err.cleanup, cx) ,
                     || substr(m.err.cleanup, cx + length(code)+2)
    return
endProcedure errRmCleanup

errCleanup: procedure expose m.
    call errIni
    cl = m.err.cleanup
    if cl = ';' then
        return
    m.err.cleanup = ';'
    call out 'err cleanup begin' cl
    call errInterpret cl
    call out 'err cleanup end' cl
    return
endProcedure errCleanup

errInterpret: procedure expose m.
parse arg code
    interpret code
    m.err.return = 0
    return
endProcedure errInterpret
/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
    interpret 'assertRes =' arg(1)
    if \ assertRes then
        call err 'assert failed' arg(1)':' arg(2)
    return
endProcedure assert

/*--- output an errorMessage msg with pref pref
           split message in lines at '/n' ---------------------------*/
errSay: procedure expose m.
parse arg msg, pref
    parse source . . ggS3 .                           /* current rexx */
    if pref == 'e' then
        msg = 'fatal error in' ggS3':' msg
    else if pref == 'w' then
        msg = 'warning in' ggS3':' msg
    else if pref \== '' then
        msg = pref':' msg
    return outNl(msg)
endProcedure errSay

/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg, op
    call errSay msg, 'e'
    call help
    call err msg, op
endProcedure errHelp

/*--- return the Operating System we are running on: TSO or LINUX ---*/
errOS: procedure expose m.
    parse source os .
    return os
endProcedure errOS

/*--- set rc for ispf: -------------------------------------------------
    if a cmd is run by ispStart, its RC is ignored,
         but ISPF passes the value of the shared varible 3IspfRc
         back as return code
----------------------------------------------------------------------*/
errSetRc: procedure expose m.
parse arg zIspfRc
    if errOS() \== 'LINUX' then
           if sysVar('sysISPF') = 'ACTIVE' then
            address ispExec vput 'zIspfRc' shared
    return zIspfRc
endProcedure errSetRc

/*--- output a trace message if m.tr is set -----------------------*/
trc: procedure expose m.
parse arg msg
    if m.trace == 1 then
        call out 'trc:' msg
    return
endProcedure trc

debug: procedure expose m.
parse arg msg
    if m.debug == 1 then
        call out 'debug' msg
    return
endProcedure debug

/*--- display the first comment block of the source as help ----------*/
help: procedure expose m.
    parse source . . s3 .
    call out right(' help for rexx' s3, 79, '*')
    do ax=1 to arg()
        say ' ' arg(ax)
        end
    do lx=1 by 1
        if pos('/*', sourceLine(lx)) > 0 then
            leave
        else if lx > 10 then do
            call out 'initial commentblock not found for help'
            return
            end
        end
    do lx=lx+1 by 1
        li = strip(sourceLine(lx), 't', ' ')
        if pos('*/', li) > 0 then
            leave
        call out li
        end
    call out right(' end help for rexx' s3, 79, '*')
    return 4
endProcedure help

/*--- output all lines (separated by '\n') of all args --------------*/
outNl: procedure expose m.
    do ax=1 to max(1, arg())
        msg = arg(ax)
        sx = 0
        bx = -1
        do lx=1 until bx >= length(msg)
                ex = pos('\n', msg, bx+2)
            if ex < 1 then
                ex = length(msg)+1
            call out substr(msg, bx+2, ex-bx-2)
            bx = ex
         end
        end
    return 0
endProcedure outNl
/* copy err end   *****************************************************/
/* copy out begin ******************************************************
    out interface with simplistic implementation
***********************************************************************/
outIni: procedure expose m.
parse arg msg
    if m.out.ini == 1 then
        return
    m.out.ini = 1
    m.out.dst = ''
    return
endProcedure outIni

/*--- output a message to the current destination -------------------*/
out: procedure expose m.
parse arg msg
    if m.out.ini \== 1 then
        call outIni
    if m.out.dst == '' then do
        say msg
        end
    else do
        st = m.out.dst
        sx = m.st.0 + 1
        m.st.0 = sx
        m.st.sx = msg
        end
    return 0
endProcedure out

/*--- push an out destination ---------------------------------------*/
outPush: procedure expose m.
parse arg m.out.dst
    return
endProcedure outPush
/* copy out end   *****************************************************/
/* copy ut begin  *****************************************************/
/*--- if function  warning all3 arguments get evaluated|
                   e.g if(x=0, 'infinity', 1/0) will fail| -----------*/
if: procedure expose m.
parse arg co, ifTrue, ifFalse
    if co then
        return ifTrue
    else
        return ifFalse
endProcedure if
/*--- embedded ASSignement:
      assign the second argument to the variable with name in first arg
      and return the value assigned ----------------------------------*/
ass:
    call value arg(1), arg(2)
    return arg(2)
/*--- embedded ASSignement only if NotNull:
      assign the second argument to the variable with name in first arg
      if the second arg is not null, return new value ---------------*/
assIf:
    if arg(2) == '' then
        return value(arg(1))
    call value arg(1), arg(2)
    return arg(2)

/*--- return first nonNull argument ---------------------------------*/
nn:
    if arg(1) \== '' then
        return arg(1)
    if arg(2) \== '' then
        return arg(2)
    call err 'nn() both args empty'

/*--- embedded ASSignement return NotNull:
      assign the second argument to the variable with name in first arg
      and return 1 if value not null, 0 if null ----------------------*/
assNN:
    call value arg(1), arg(2)
    return arg(2) \== ''

/*--- return current time and cpu usage ------------------------------*/
timing: procedure expose m.
return return time() 'ela='time('E') 'cpu='sysvar('syscpu'),
            'su='sysvar('syssrv')

timingTest: procedure expose m.
    say 'begin' timing()  sysvar('sysnode')
    do 30000000
       end
    say 'end  ' timing()
return

/*--- sleep several seconds ------------------------------------------*/
sleep: procedure expose m.
parse arg secs, sayIt
    if sayit <> 0 then
        say 'sleeping' secs 'secs' time()
    CALL SYSCALLS 'ON'
    ADDRESS SYSCALL "sleep" secs
    CALL SYSCALLS 'OFF'
    if sayit <> 0 then
        say 'slept' secs 'secs' time()
    return
endProcedure sleep

/*--- quote string txt using quoteChar qu ("""" ==> ") ---------------*/
quote: procedure expose m.
parse arg txt, qu
    if qu = '' then
        qu = '"'
    res = qu
    ix = 1
    do forever
        qx = pos(qu, txt, ix)
        if qx = 0 then
            return res || substr(txt, ix) || qu
        res = res || substr(txt, ix, qx-ix) || qu || qu
        ix = qx + length(qu)
        end
endProcedure quote

/*--- return the count of occurrences of needle in heyStack ----------*/
posCount: procedure expose m.
parse arg needle, hayStack, start, fin
    if start = '' then
        start = 1
    if fin = '' then
        fin = length(hayStack) + 1 - length(needle)
    do cnt = 0 by 1
        start = pos(needle, haystack, start)
        if start < 1 | start > fin then
             return cnt
        start = start + length(needle)
        end
endProcedure posCount

repAll: procedure expose m.
parse arg src, w, new
    res = ''
    cx = 1
    do forever
        nx = pos(w, src, cx)
        if nx < 1 then
            return res || substr(src, cx)
        res = res || substr(src, cx, nx-cx) || new
        cx = nx + length(w)
        end
endProcedure repAll

repAllWords: procedure expose m.
parse arg src, w, new
    res = ''
    wx = 0
    cx = 1
    do forever
        wx = wordPos(w, src, wx+1)
        if wx < 1 then
            return res || substr(src, cx)
        nx = wordindex(src, wx)
        res = res || substr(src, cx, nx-cx) || new
        cx = nx + length(w)
        end
endProcedure repAllWords
/* copy ut end ********************************************************/
}¢--- A540769.WK.REXX.O13(DBADO) cre=2009-11-10 mod=2009-11-10-17.27.57 A540769 ---
call sqlConnect DBOF
$=pds=DSN.DBA.ZUEGEL.NOV.RUN
$=chgs=DSN.DBA.ZUEGEL.NOV.JCL(ALL)
$=run   =  DSN.DBA.ZUEGEL.NOV.RUN
m.run.1 = 'DSN.DBA.ZUEGEL.NOV.RUNDIPRO'
m.run.2 = 'DSN.DBA.DBOF.RUN.JCL'
m.run.0 = 2
$;
$<$chgs
    $@for li $@¢
        parse value $li with aCh aTi aPl .
        call sqlPreAllCl 1, 'select changeid, name, status' ,
                                'from s100447.adbChg',
                                'where name like '''aCh'.%''',
                       , c, ':m.st.sx.ch, :m.st.sx.na, :m.st.sx.st'
        fx = -1
        do cx=1 to m.c.0
            if wordPos(m.c.cx.st, 'COMPLETE CANCEL') > 0 then
                iterate
            if fx > 0 then
                call err 'multiple' aCh':' ,
                          || cx m.c.cx.ch m.c.cx.na m.c.cx.st
            fx = cx
            end
        if fx < 1 then do
            $$- 'ch' aCh 'not found' aPl
            iterate
            end
        else if m.c.fx.st \== 'ANALYZED' then do
            $$- 'ch' aCh':'cx m.c.fx.ch m.c.fx.na m.c.fx.st
            iterate
            end
        mbr = 'E'right(0 + m.c.fx.ch, 7, 0)
        ex = ''
        do rx=1 to m.run.0
            if sysDsn("'"m.run.rx"("mbr")'") = OK then
                ex = ex rx
            end
        if words(ex) = 1 then
            msg = 'once'
        else if words(ex) < 1 then
            msg = 'miss'
        else
            msg = 'dupp'
        $$- 'ch' aCh msg ex':'fx m.c.fx.ch m.c.fx.na m.c.fx.st
        if 1 then do
            job = 'Y'left(aCh, 7)
            ey = word(ex, 1)
            call readDsn m.run.ey'('mbr')', j.
            jx = pos(' JOB ', j.1)
            if jx < 1 | jx > 16 then
                call err 'no jobCard in' aCh':' j.1
            j.1 = '//'job strip(substr(j.1, jx))
            call writeDsn $run'('aCh')', j., , 1
            end
        $!
$#end
$#out                                              20091110 17:17:31
ch SV30003C once  2:1 2441. SV30003C.0.004.IMP ANALYZED
ch SV30004C once  2:1 2501. SV30004C.0-1.008.IMP ANALYZED
ch SV30005C once  1:1 2522. SV30005C.0.004.IMP ANALYZED
ch SV30002W once  1:1 2292. SV30002W.0.003.IMP ANALYZED
ch AV15010C once  2:1 2541. AV15010C.0-6.008.IMP ANALYZED
ch AVIN017C once  1:1 2248. AVIN017C.0.003.IMP ANALYZED
ch DP08004C once  1:1 2316. DP08004C.0-2.009.IMP ANALYZED
ch EX01001C once  1:1 2269. EX01001C.0.003.IMP ANALYZED
ch PC11005C once  1:1 2273. PC11005C.1.003.IMP ANALYZED
ch RB01016C once  1:1 2249. RB01016C.0-1.004.IMP ANALYZED
ch RV01007C once  1:1 2286. RV01007C.0-1.005.IMP ANALYZED
ch SV04001C once  1:1 2275. SV04001C.0.003.IMP ANALYZED
ch SV70005C once  2:1 2462. SV70005C.0-2.011.IMP ANALYZED
ch TN01050C once  1:1 2288. TN01050C.0.003.IMP ANALYZED
ch VDPS441C once  1:1 2582. VDPS441C.0-A.040.IMP ANALYZED
ch VDPS442C once  1:1 2289. VDPS442C.0.004.IMP ANALYZED
ch VDPS443C once  1:1 2318. VDPS443C.0.003.IMP ANALYZED
ch VDPS444C once  1:1 2343. VDPS444C.0-1.007.IMP ANALYZED
ch WI03014C once  1:1 2341. WI03014C.0-1.006.IMP ANALYZED
ch WQ01035C once  2:1 2561. WQ01035C.0.004.IMP ANALYZED
ch YMF01A1C not found JCL
ch NZ01014C once  1:1 2272. NZ01014C.0.003.IMP ANALYZED
ch DG01031C not found ALT
ch ED02001C once  1:1 2268. ED02001C.0.003.IMP ANALYZED
ch ID01010C once  1:1 2270. ID01010C.1-2.009.IMP ANALYZED
ch LC02003C once  1:1 2271. LC02003C.0.003.IMP ANALYZED
ch TN01051C once  1:1 2362. TN01051C.0-1.007.IMP ANALYZED
ch TP01007C once  1:1 2276. TP01007C.0.003.IMP ANALYZED
ch TR03003C once  1:1 2321. TR03003C.0.003.IMP ANALYZED
ch WB01007C not found JCL
ch WB11013C once  1:1 2278. WB11013C.0.003.IMP ANALYZED
ch WB12021C once  1:1 2279. WB12021C.0-1.006.IMP ANALYZED
ch WB12022C once  1:1 2280. WB12022C.0-1.006.IMP ANALYZED
ch WI01002C once  2:1 2581. WI01002C.0.003.IMP ANALYZED
ch WL07002C once  1:1 2342. WL07002C.0-2.009.IMP ANALYZED
ch SN01045C once  1:1 2250. SN01045C.4.006.IMP ANALYZED
ch SN01046C once  1:1 2251. SN01046C.4.006.IMP ANALYZED
ch SN01048C once  1:1 2287. SN01048C.4.006.IMP ANALYZED
ch SN01049C dupp  1 2:1 2361. SN01049C.7.026.IMP ANALYZED
ch WQ01033C once  1:1 2290. WQ01033C.0.003.IMP ANALYZED
}¢--- A540769.WK.REXX.O13(DBAMULTI) cre=2009-09-08 mod=2009-09-08-10.58.02 A540769 ---
/* rexx ****************************************************************
synopsis:     dbaMulti ¢-r¦s¦u¦?! <member>

    start multiClon for <member>

    <member> must end with a W (new) or C (change)
         as a tso command member must be 8 characters long
         as an editmacro mbr defaults to the member being edited
             and a single character overwrites its last character
    dbaCheck applies the CS defaults (if run as editMacro)
    if the member exists already in a WSL
        it is removed, if the user whishes
    the input dataset is overwritten for mbr
    the appropriate mulitCloneJob is started

    options:
        -s silent: remove members without asking
        -u unchecked: do not run dbaCheck
        -? or ?: this help
 ***********************************************************************
 02.06.2008 uses dbx
            */ /* end of help       --- history
 04.12.2007 copies wsl to DSN.DBA.CLON.WSLSRC
 05.01.2007 uses DbaCheck
 20.11.2006 runs also in RZ2, RZ4 RR2 and RR4
 **********************************************************************/
nd = sysvar(sysnode)
libPre = 'DSN.DBA.'
if nd = 'RZ1' then
    libMid = 'DBAF DBBA DBLF DBOC DBTF DBZF DVTB'
else if nd = 'RZ2' | nd = 'RR2' then
    libMid = 'DBOF'
else if nd = 'RZ4' | nd = 'RR4' then
    libMid = 'DBCP DBII DBOL DVBP'
else
    call errHelp 'rz' nd 'is not supported'
libSuf = '.WSL'
multiInp = 'DSN.DBA.MULTI.CLON.INPUT'
multiNew = 'DSN.DBA.MULTI.CLON.NEW.JCL'
multiChg = 'DSN.DBA.MULTI.CLON.CDL.JCL'
multiCopy= 'DSN.DBA.CLON.WSLSRC'

parse arg args
call adrIsp 'control errors return'
mbr = ''
opt = ''
isMacro = 0
if args = '' then
    if adrEdit('macro (args)', 20) == 0 then
         isMacro = 1
if pos('?', args) > 0 then
    return help()
do ax=1 to words(args)
    wo = translate(word(args, ax))
    if left(wo, 1) = '-' then do
        if verify(wo, '-URS') <> 0 then
            call errHelp 'bad option "'wo'" in "'args'"'
        opt = opt substr(wo, 2)
        end
    else if mbr ^== '' then
        call errHelp 'more than one member "'wo'" in "'args'"'
    else
        mbr = wo
    end
if pos('U', opt) < 1 then do
    res = dbaCheck('dbaMulti')
    if res = 4 then
        return
    else if res ^== 0 then
        call err 'dbaCheck returns' res
    end
if length(mbr) <= 1 & isMacro then do
    fnd = 'DSN.DBA. first'
    if adrEdit("seek" fnd, 4) ^= 0 then
        call err 'could not find member, dsn.dba not found'
    call adrEdit "(lx, cx) = cursor"
    call adrEdit "(line) = line" lx
    sx = cx + 8
    do 4
        ex = verify(line, ' .', 'm', sx)
        if ex <= sx then
            ex = 1+length(line)
        em = strip(substr(line, sx, ex-sx))
        if length(em) = 8 then
            leave
        sx = ex+1
        end
    if length(em) <> 8 then
        call errHelp 'no mbr detected in  line' lx':' line
    mbr = overlay(mbr, em, 9 - length(mbr))
    say 'detected qualifier' em 'in edit data yielding member' mbr
    end
if length(mbr) <> 8 then
    call errHelp 'mbr "'mbr'" should have length 8'
else if pos(right(mbr, 1), 'CW') = 0 then
    call errHelp 'mbr "'mbr'" should end with C or W'

doRm = pos('S', opt) > 0
do mx = 1 to words(libMid) while ^doRm
    dsn = jcl2dsn(libPre || word(libMid, mx) || libSuf"("mbr")")
    sd = sysDsn(dsn)
    if sd = 'OK' then do
        if pos('S', opt) < 1 then do
            say 'remove existing mbr' mbr 'in' dsn' (r for remove)?'
            parse upper pull a
            if left(a, 1) ^== 'R' then do
                say 'exiting because answer was' a 'and not r'
                exit
                end
            doRm = 1
            end
        end
    else if sd ^== 'MEMBER NOT FOUND' then do
        call err 'unexpected sysDsn('dsn') =' sd
        end
    end

call dbx cloneWsl '*' mbr doRm

if isMacro & nd = 'RZ1' then do
      call adrEdit '(zl) = lineNum .zl'
      do x=2 to zl+1
          call adrEdit '(li) = line' (x-1)
          li.x = li
          end
      li.1 ='-- Copied by dbamulti for' userid() 'on' date() 'at' time()
      call writeDsn multiCopy'('left(mbr,7)'Q)', li., zl+1
      end
exit

/* copy adrIsp begin *************************************************/
/**********************************************************************
    lmd: catalog read
    call sequence: lmdBegin, lmdNext*, lmdEnd
        mit lmd service (mit save in file und read,
                         weil list zu langsam und listcat abstürzt)
        1. arg (grp)     als group dataset für lmd save
                         und dd name für file read
***********************************************************************/
lmdBegin: procedure
    parse arg grp, lev
    call adrIsp 'lmdinit listid(lmdId) level('lev')'
    res = adrIsp('lmdlist listid(&lmdId) option(save) group('grp')', 4)
    call adrIsp 'lmdfree listid(&lmdId)'
    if res = 0 then do
        call trc timing() 'lmdlist save' grp lev
        call adrTso 'alloc dd('grp') shr dsn('grp'.datasets)'
        end
    else do
        call trc 'no datasets found' timing() 'lmdlist save' grp lev
        call adrTso 'alloc dd('grp') dummy'
        end
    call readDDBegin grp
return /* end lmdBegin */

lmdNext:
    parse arg ggGrp, ggSt, withVolume
    if ^ readDD(ggGrp, ggSt) then
         return 0
    if withVolume ^== 1 then
        do ggIx=1 to value(ggSt'0')
            x = value(ggSt || ggIx, word(value(ggSt || ggIx), 1))
            end
    return 1
endSubroutin lmdNext

lmdEnd: procedure
    parse arg grp
    call readDDEnd grp
    call adrTso 'free dd('grp')'
return /* end lmdEnd */

lmd: procedure expose m.
    parse arg lev, withVol
    call lmdBegin gg1, lev
    do while lmdNext(gg1, q., withVol)
        do x=1 to q.0
           call jOut q.x
           end
        end
    call lmdEnd gg1
    return
endProcedure lmd
/**********************************************************************
    member list of a pds:
        call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmm: procedure expose m.
parse arg dsn
    id = lmmBegin(dsn)
    do ix=1 by 1
        m = lmmNext(id)
        if m = '' then
            leave
        call jOut m
        end
    call lmmEnd id
    return
endProcedure lmm

lmmBegin: procedure
parse arg dsn
    mbr = dsnGetMbr(dsn)
    pds = dsnSetMbr(dsn, )
    call adrIsp "LMINIT DATAID(lmmId) DATASET('"pds"') ENQ(SHRW)"
    call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
    res = lmmId
    if mbr <> '' then
        res = res 'pattern('mbr')'
    return res
endProcedure lmmBegin

lmmEnd: procedure
parse arg lmmId opt
    call adrIsp "LMMLIST DATAID("lmmId") option(free)", 8
    call adrIsp "LMCLOSE DATAID("lmmId")"
    call adrIsp "LMFREE DATAID("lmmId")"
    return
endProcedure lmmEnd

lmmNext: procedure
parse arg lmmId opt
    if adrIsp("LMMLIST DATAID("lmmid")" ,
               "OPTION(LIST) MEMBER(Mbr)" opt, 4 8) = 0 then
        return strip(mbr)
    else
        return ''
endProcedure lmmNext

lmmRm: procedure
parse arg dsn, mbrs
    mbrs = dsnGetMbr(dsn) mbrs
    pds = dsnSetMbr(dsn, )
    call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
    call adrIsp "LMOPEN DATAID("lmmId") OPTION(OUTPUT) "
    err = ''
    do wx=1 to words(mbrs)
        m1 = word(mbrs, wx)
        rr = adrIsp("lmmDel dataid("lmmId") member("m1")", 0 8 12)
        if rc = 0 then
            say 'removed' m1 'from' pds
        else if rc = 8 then
            say 'not found' m1 'in' pds
        else do
            err = 'error deleting' m1 'in' pds 'rc' rr strip(zerrlm)
            say err
            leave
            end
        end
    call adrIsp "LMCLOSE DATAID("lmmId")"
    call adrIsp "LMFREE DATAID("lmmId")"
    if err <> '' then
        call err err
    return
endProcedure lmmRm
/*--- address ispf with error checking -------------------------------*/
adrIsp:
    parse arg ggIspCmd, ggRet
    address ispexec ggIspCmd
    if rc = 0 then return 0
    else if ggRet == '*' then return rc
    else if wordPOS(rc, ggRet) > 0 then return rc
    else
        call err 'adr ispExec rc' rc 'in' ggIspCmd':' strip(zerrlm)
endSubroutine adrIsp

/*--- address editor with error checking -----------------------------*/
adrEdit:
    parse arg ggEditCmd, ggRet
    address isrEdit ggEditCmd
    if rc = 0 then return 0
    else if ggRet == '*' then return rc
    else if wordPOS(rc, ggRet) > 0 then return rc
    else
        call err 'adr isrEdit rc' rc 'for' ggEditCmd
endSubroutine adrEdit
/* copy adrIsp end   *************************************************/
/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
    parse arg ggTsoCmd, ggRet
    address tso ggTsoCmd
    if rc == 0                     then return 0
    else if ggRet == '*'           then return rc
    else if wordPos(rc, ggRet) > 0 then return rc
    else
        call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */

/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure
parse arg dsn ., addPrefix
    if left(dsn,1) = "'" then
        return strip(dsn, 'b', "'")
    sp = sysvar('SYSPREF')
    if sp == '' then
        sp = userid()
    cx = pos('~', dsn)
    if cx < 1 & addPrefix == 1 then
        return sp'.'dsn
    do while cx ^== 0
        le = left(dsn, cx-1)
        ri = substr(dsn, cx+1)
        if right(le, 1) == '.' | left(ri, 1) == '.' then
            dsn = le || sp || ri
        else
            dsn = le || left('.', le ^== '') || sp ,
                     || left('.', ri ^== '') || ri
        cx = pos('~', spec, cx)
        end
    return dsn
endProcedure dsn2Jcl

/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure
parse arg dsn .
    return "'"dsn"'"
endProcedure jcl2dsn

dsnSetMbr: procedure
parse arg dsn, mbr
     bx = pos('(', dsn)
     if bx > 0 then
         dsn = strip(left(dsn, bx-1))
     if mbr <> '' then
         dsn = dsn'('strip(mbr)')'
     return dsn
endProcedure dsnSetMbr

dsnGetMbr: procedure
parse arg dsn
     lx = pos('(', dsn)
     rx = pos(')', dsn, lx+1)
     if lx < 1 then
         return ''
     else if lx < rx then
         return substr(dsn, lx+1, rx-lx-1)
     else
         return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
    io: read or write a dataset with the following callsequences:
        read:  readDDBegin, readDD*,  readDDEnd
        write: writeBegin,  writeDD*, writeEnd

        readDD returns true if data read, false at eof
***********************************************************************/

/*--- prepare reading from a DD --------------------------------------*/
readDDBegin: procedure
return /* end readDDBegin */

/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt = '' then
        ggCnt = 100
    call adrTso 'execio' ggCnt 'diskr' ggDD '(stem' ggSt')', 2
    return (value(ggSt'0') > 0)
return /* end readDD */

/*--- finish reading DD  ggDD ----------------------------------------*/
readDDEnd: procedure
    parse arg ggDD
    call adrTso 'execio 0 diskr' ggDD '(finis)'
return /* end readDDEnd */

/*--- prepare writing to DD ggDD -------------------------------------*/
writeDDBegin: procedure
    parse arg ggDD
                  /* ensure file is erased, if no records are written */
    call adrTso 'execio' 0 'diskw' ggDD '(open)'
return /* end writeDDBegin */

/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    call adrTso 'execio' ggCnt 'diskw' ggDD '(stem' ggSt')'
    return
endSubroutine writeDD

/*--- end writing to dd ggDD (close) --------------------------------*/
writeDDEnd: procedure
    parse arg ggDD
    call adrTso 'execio 0 diskw' ggDD '(finis)'
return /* end writeDDEnd */

/*--- alloc a dsn or a dd
          spec '-'<ddName>
               datasetName? disposition? '.'? attributes? (':' newAtts)?
          disp default disposition
          dd   default dd name
          retRc   erlaubte ReturnCodes (leer = 0)
          returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, disp, dd, retRc
    ds = ''
    m.dsnAlloc.dsn = ds
    if left(spec, 1) = '-' then
        return strip(substr(spec, 2))
    if left(spec, 1) = '&' then /* external spec is handled ok */
        spec = strip(substr(spec, 2))
    do wx=1 by 1
        w = word(spec, wx)
        if w = '' | abbrev(w, '.') | abbrev(w, ':') then
            leave
        else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
            disp = w
        else if w = 'CATALOG' then
            disp = disp w
        else if abbrev(w, 'DD(') then
            dd = substr(w, 4, length(w)-4)
        else if abbrev(w, 'DSN(') then
            ds = strip(substr(w, 5, length(w)-5))
        else if ds = '' then
            ds = dsn2jcl(w)
        else
            leave
        end
    rest = subword(spec, wx)
    if abbrev(rest, '.') then
        rest = substr(rest, 2)
    parse var rest rest ':' nn
    if dd <> '' & ds = '' & rest = '' & ^ abbrev(disp, 'SYSO') then
        call err "'return" dd"' no longer supported please use ="dd
    if dd = '' then do
        if symbol('m.adrTso.ddNum') = 'VAR' then
            dd = m.adrTso.ddNum + 1
        else
            dd = 1
        m.adrTso.ddNum = dd
        dd = 'DD' || dd
        end
    if disp = '' then
        disp = 'SHR'
    else if pos('(', ds) < 1 then
        nop
    else if disp = 'MOD' then
        call err 'disp mod for' ds
    else
        disp = 'SHR'
    m.dsnAlloc.dsn = ds
    if pos('/', ds) > 0 then
        return csmAlloc(dd, disp, ds, rest, nn, retRc)
    else
        return tsoAlloc(dd, disp, ds, rest, nn, retRc)
endProcedure dsnAlloc

tsoAlloc: procedure expose m.
parse arg dd, disp, dsn, rest, nn, retRc
    c = 'alloc dd('dd')' disp
    if dsn <> '' then
        c = c "DSN('"dsn"')"
    if retRc <> '' | nn = '' then do
        alRc = adrTso(c rest, retRc)
        if alRc <> 0 then
            return alRc
        return dd 'call adrTso "free dd('dd')";'
        end
    do retry=0 to 1
        alRc = adrTso(c rest, '*')
        if alRc = 0 then
            return dd 'call adrTso "free dd('dd')";'
        if nn = '' | wordPos(disp, 'OLD SHR') < 1 ,
            | sysDsn("'"m.dsnAlloc.dsn"'") ^== 'DATASET NOT FOUND' then
            leave
        say 'tsoAlloc rc' alRc 'for' c rest '...trying to create'
        call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(dsn, nn)
        call adrTso 'free  dd('dd')'
        end
    call err 'tsoAlloc rc' alRc 'for' c rest
endProcedure tsoAlloc

dsnCreateAtts: procedure expose m.
parse arg dsn, atts
    if abbrev(atts, ':') then do
        rl = substr(atts, 3)
        if abbrev(atts, ':F') then do
            if rl = '' then
                rl = 80
             atts = 'recfm(f b) lrecl('rl')' ,
                       'block(' (32760 - 32760 // rl)')'
            end
        else do
            if rl = '' then
                rl = 32756
            atts = 'recfm('substr(atts, 2, 1) 'b) lrecl('rl')' ,
                   'block(32760)'
            end
        end
    if pos('(', dsn) > 0 then
        atts = atts 'dsntype(library) dsorg(po)' ,
               "dsn('"dsnSetMbr(dsn)"')"
    else
        atts = atts "dsn('"dsn"')"
    return atts 'mgmtclas(s005y000) space(10, 1000) cyl'
endProcedure dsnCreateAtts

/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
    ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
    call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
    interpret subword(ggAlloc, 2)
    return
endSubroutine readDsn

/*--- write the dataset specified in ggDsnSpec from stem ggSt
          write ggCnt records if not empty otherwise ggst0
          if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
    call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
            '(stem' ggSt 'open finis)'
    interpret subword(ggAlloc, 2)
    if ggSay == 1 | m.debug == 1 then
       say ggCnt 'records written to' ggDsnSpec
    return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
/* copy err begin ******************************************************
    messages, errorhandling,help
***********************************************************************/
/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
parse arg oo, ha
    if pos('I', translate(oo)) > 0 then
        call adrIsp 'control errors return'
    m.err.opt = translate(oo, 'h', 'H')
    if ha == '' then
        drop m.err.handler
    else
        m.err.handler = ha
    return
endSubroutine errReset

/*--- error routine: abend with message ------------------------------*/
err:
    parse arg ggTxt, ggOpt
    drop err handler opt
    if ggOpt == '' & symbol('m.err.handler') == 'VAR' then
        interpret m.err.handler
    call errSay ggTxt
    parse source . . ggS3 .                           /* current rexx */
    if ggOpt == '' | ggOpt == '*' then
        ggOpt = translate(value('m.err.opt'), 'ht', 'HT')
    if pos('h', ggOpt) > 0  then do
        say 'fatal error in' ggS3': divide by zero to show stackHistory'
        x = 1 / 0
        end
    say 'fatal error in' ggS3': exit(12)'
    exit errSetRc(12)
endSubroutine err

/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
    interpret 'assertRes =' arg(1)
    if ^ assertRes then
        call err 'assert failed' arg(1)':' arg(2)
    return
endProcedure assert

/*--- say an errorMessage msg with pref pref
           split message in lines at '/n'
           say addition message in stem st ---------------------------*/
errSay: procedure expose m.
parse arg msg, st, pref
    parse source . . ggS3 .                           /* current rexx */
    if pref == 'e' | (pref == '' & st == '') then
        msg = 'fatal error:' msg
    else if pref == 'w' then
        msgf = 'warning:' msg
    else if pref == 0 then
        nop
    else if right(pref, 1) ^== ' ' then
        msg = pref':' msg
    else
        msg = pref || msg
    sx = 0
    bx = -1
    do lx=1 until bx >= length(msg)
        ex = pos('\n', msg, bx+2)
        if ex < 1 then
            ex = length(msg)+1
        if st == '' then do
            say substr(msg, bx+2, ex-bx-2)
            end
        else do
            sx = sx+1
            m.st.sx = substr(msg, bx+2, ex-bx-2)
            m.st.0 = sx
            end
        bx = ex
        end
    return
endProcedure errSay

/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg, op
    say 'fatal error:' msg
    call help
    call err msg, op
endProcedure errHelp

/*--- set rc for ispf: -------------------------------------------------
    if a cmd is run by ispStart, its RC is ignored,
         but ISPF passes the value of the shared varible 3IspfRc
         back as return code
----------------------------------------------------------------------*/
errSetRc: procedure
parse arg zIspfRc
    if sysVar('sysISPF') = 'ACTIVE' then do
        address ispExec vput 'zIspfRc' shared
        end
    return zIspfRc
endProcedure errSetRc

/*--- output a trace message if m.trace is set -----------------------*/
trc: procedure expose m.
parse arg msg
    if m.trace == 1 then
        say 'trc:' msg
    return
endProcedure trc

/*--- quote string txt using quoteChar qu ("""" ==> ") ---------------*/
quote: procedure
parse arg txt, qu
    if qu = '' then
        qu = '"'
    res = qu
    ix = 1
    do forever
        qx = pos(qu, txt, ix)
        if qx = 0 then
            return res || substr(txt, ix) || qu
        res = res || substr(txt, ix, qx-ix) || qu || qu
        ix = qx + length(qu)
        end
endProcedure quote

debug: procedure expose m.
parse arg msg
    if m.debug == 1 then
        say 'debug' msg
    return
endProcedure debug

/*--- return current time and cpu usage ------------------------------*/
timing: procedure
return time() time('E') sysvar('syscpu') /* sysvar('syssrv') */

/--- display the first comment block of the source as help -----------*/
help: procedure
    parse source . . s3 .
    say right(' help for rexx' s3, 79, '*')
    do lx=1 by 1
        if pos('/*', sourceLine(lx)) > 0 then
            leave
        else if lx > 10 then do
            say 'initial commentblock not found for help'
            return
            end
        end
    do lx=lx+1 by 1
        li = strip(sourceLine(lx), 't', ' ')
        if pos('*/', li) > 0 then
            leave
        say li
        end
    say right(' end help for rexx' s3, 79, '*')
    return 4
endProcedure help
/* copy err end   *****************************************************/
}¢--- A540769.WK.REXX.O13(DBARB) cre=2011-09-20 mod=2012-01-19-15.15.49 A540769 ---
/* rexx ****************************************************************
synopsis:     DBARB (-(a¦n¦i)+)? subsys?
                                                  version vom 20.09.2011
edit macro to generate rebinds for a worklist

function:
    search sql DDL statements in currently edited data
    find packages dependent on created/dropped/altered1
        tablespaces, tables, views, indexes, aliases or synonyms,
    append rebind statements for these packages and
    remove existing rebinds at the end of the data
options
    a = alle Packages (default)
    n = only new packages = aktive packages
           = 1bef7: das neueste Package älter 1 Woche und alle jüngeren
    i = info line für jedes package
subsys may be one of the following
    ?     for this help
    empty for deduce subsys from WSLLib, qualifiers or sysnode
    x     for DBxF
    yy    for DByy
    zzzz  for zzzz
** history *************************************************************
19.01.2012 options -ani und neue copies
*************   end of help */ /****************************************
20.09.2011 defaults: RZZ ==> DE0G, RZ8 ==> DD0G
14.12.2006 scan start robuster gemacht gegen ScanErr
20.10.2006 synonym und tablespace eingebaut
19.10.2006 viewDep muss nicht berücksichtigt werden, weil DB2
                mit einem Objekt auch alle abhängigen Views löscht
***********************************************************************/
parse arg args
call errReset 'h'
call scanWinIni
m.debug = 0          /* debug output */
m.cmp = userid() = 'F540769'    /* compare old and new rebinds */
call adrIsp 'control errors return'
isMacro = 0
if word(args, 1) == 'isMacro' then do
    isMacro = 1
    args = subword(args, 2)
    end
else if args = '' then do
    if adrEdit('macro (args)', 20) == 0 then
         isMacro = 1
    end
if ^ isMacro then
    call errHelp 'not started as editMacro'
if pos('?', args) > 0 then
    exit help()

m.types = 'R T V X A S'
m.typNames = 'tablespace table view index alias synonym'
m.cmp.0 = 0
do tyx=1 to words(m.types)
    typ = word(m.types, tyx)
    m.obj.typ.0 = 0
    end
args = translate(strip(args))
m.opt = ''
if abbrev(args, '-') then do
    m.opt = substr(word(args, 1), 2)
    args = subWord(args, 2)
    end
                     /* analyze ddl in data
                        and extract changed db2 objects */
if isMacro then
    call searchObjects
li = ''              /* format and display counts */
do tyx=1 to words(m.types)
    typ = word(m.types, tyx)
    li = li',' m.obj.typ.0 word(m.typNames, tyx)
    end
li = substr(li, 3)
say 'found' li

                     /* find db2 subsystem */
m.subsys = dbSubSys(translate(args))

                     /* show db2 objects in data */
call adrEdit '(origZl) = lineNum .zl'
call appLine '-- generating rebinds in' m.subsys ,
             'at' time('n') date('e') 'for' userid()
call appLine '-- for' li
do tyx=1 to words(m.types)
    typ = word(m.types, tyx)
    tNa = left(word(m.typNames, tyx), 10)
    do x=1 to m.obj.typ.0
        call appLine '--    ' tNa m.obj.typ.x
        end
    end

                     /* search dependent packages in db2 catalog */
sql = genSql()
if sql ^== '' then do
    sp = left('--      rebind old state', 72-39-2)
    say 'connecting to' m.subsys
    call sqlConnect m.subsys
    call sqlPreOpen 1, sql
    cnt = 0
    new = 0
                    /* fetch each package and write rebind */
    do while sqlFetchInto(1, ':coll, :name, :vers, :type, :info, :bef7')
        cnt = cnt + 1
        if bef7 == 0 then
            new = new + 1
        else if pos('N', m.opt) > 0 then
            iterate
        coll = strip(coll)
        name = strip(name)
        vers = strip(vers)
        if type == 'T' then
            call appLine 'REBIND TRIGGER PACKAGE('coll'.'name');'
        else
            call appLine 'REBIND PACKAGE('coll'.'name'.('vers'));'
        if pos('I', m.opt) > 0 then
            call appLine ' --'info 'bef7='bef7
        end

    call  sqlClose 1
    if pos('N', m.opt) > 0 then
        say 'rebind' new 'new of total' cnt 'packages'
    else
        say 'rebind' cnt 'including' new 'new packages'
    end

call deleteRebindsUntil origZl
if m.cmp then
    call cmpPrint
call sqlDisconnect
exit

/--- search db2 objects changed in the ddl ---------------------------*/
searchObjects: procedure expose m.
    sqls = 'CREATE ALTER DROP'
    mr = scanSql(mNew('EditRead', 0))
    do sx =1 to words(sqls) /* for each sql command */
        s1 = word(sqls, sx)
        lx = 0
        do forever
            if lx > 0 then
                call jClose mr
            lx = scanSqlSeekId(mr, lx+1, s1) /* find each command*/
            if lx < 1 then
                leave
            typ = sqlId(mr)
            if wordpos(typ, 'UNIQUE LARGE LOB') > 0 then
                typ = sqlId(mr)
            if typ = '' then
               call scanErr mr, 'object type expected'
            if wordPos(typ, translate(m.typNames)) <= 0 then
                iterate
            tyCh = word(m.types, wordPos(typ, translate(m.typNames)))
            if s1 ^= 'CREATE' then do
                nm = sqlQuId(mr)
                end
            else if typ = 'INDEX' then do
                nm = sqlQuId(mr)
                if sqlId(mr) ^== 'ON' then
                    call scanErr mr, 'ON expected after create index' nm
                call addObj t, sqlQuId(mr)
                end
            else if typ = 'TABLESPACE' then do
                nm = sqlDeId(mr)
                if sqlId(mr) ^== 'IN' then
                    call scanErr mr,
                         , 'IN expected after create tablespace' nm
                nm = sqlDeId(mr)'.'nm
                end
            else if typ = 'SYNONYM' then do
                nm = sqlDeId(mr)
                if sqlId(mr) ^== 'FOR' then
                    call scanErr mr,
                         , 'FOR expected after create synonym' nm
                nm = sqlDeId(mr)'.'nm
                end
            else do
                nm = sqlQuId(mr)
                end
            call addObj tyCh, nm
            end /* each command found */
        end /* each sql command */
    return
endProcedure searchObjects

/*--- add a db2 object nm of type typ to the list,
               if not done already -----------------------------------*/
addObj: procedure expose m.
parse arg typ, nm
    if symbol('m.obj.typ.nm') ^= 'VAR' then do
        nx = m.obj.typ.0 + 1
        m.obj.typ.0 = nx
        m.obj.typ.nx = nm
        m.obj.typ.nm = nx
        end
    return
endProcedure addObj

/*--- return the sql to retrieve the packages
           dependent on db2 objects in out list ----------------------*/
genSql: procedure expose m.
    m.obj.ow.0 = 0
    cntTav = 0
    cntIdx = 0
                       /* build lists of names by qualifier */
    do tyx=1 to words(m.types)
        typ = word(m.types, tyx)
        do ox=1 to m.obj.typ.0
            qu = anaQualIdent(m.obj.typ.ox)
            cntTav = cntTav + 1
            if symbol('m.obj.ow.qu') ^== 'VAR' then do
                call addObj ow, qu
                m.tav.qu = m.ident
                m.idx.qu = ''
                end
            else do
                m.tav.qu = m.tav.qu"," m.ident
                end
           if typ == 'X' then do
                      /* additional list for indexes */
               cntIdx = cntIdx + 1
               if m.idx.qu = '' then
                   m.idx.qu = m.ident
               else
                   m.idx.qu = m.idx.qu"," m.ident
               end
           end
        end
    if cntTav = 0 & cntIdx = 0 then
        return ''
    do y=1 to m.debug * m.obj.ow.0 /* debug lists */
        qu = m.obj.ow.y
        say y 'qual' qu 'tav:' m.tav.qu 'index:' m.idx.qu
        end

                                   /* build sql */
    sql = 'select distinct p.collid, p.Name, p.version, p.type,' ,
                "'vivo=' || p.validate || p.isolation ||" ,
                "p.valid || p.operative ||" ,
                "' con=' || hex(p.contoken) ||" ,
                "' tst=' || char(p.timestamp) ," ,
                " value((select count(*)",
              "from sysibm.syspackage r",
                "where r.location = p.location and r.collid = p.collid",
                 "and r.name = p.name",
                 "and r.timestamp > p.timestamp",
                 "and r.timestamp < current timestamp - 7 days),0)",
            'from sysibm.syspackdep d join sysibm.syspackage p' ,
              'on p.location = d.dLocation and p.collid = d.dCollid' ,
                 'and p.name = d.dName and  p.conToken = d.dConToken' ,
            'where'
    do y=1 to m.obj.ow.0                        /* add each qualifier */
        qu = m.obj.ow.y
        if m.tav.qu ^= '' then
            sql=sql '( bQualifier =' qu 'and bName in ('m.tav.qu')) or'
        end
    if cntIdx <= 0 then do
        sql = left(sql, length(sql) - 3)
        end
    else do                        /* subselect for tables of indexes */
        sql=sql '( (bQualifier, bName) in' ,
                    '( select tbcreator, tbname' ,
                         'from sysibm.sysindexes where'
        do y=1 to m.obj.ow.0
            qu = m.obj.ow.y
            if m.idx.qu ^= '' then
                sql=sql '( creator =' qu 'and name in ('m.idx.qu')) or'
            end
        sql = left(sql, length(sql) - 3) ') )'
        end

    if m.debug then do                         /* debug generated sql */
        l = 60
        c = 1
        do while length(sql) - c > l
            do e = c+l by -1 while substr(sql, e, 1) ^== ' '
                end
            say substr(sql, c, e - c)
            c = e + 1
            end
        say substr(sql, c)
        end
    return sql
endProcedure genSql

/*--- analyze the two parts of a qualified sql identifier ------------*/
anaQualIdent: procedure expose m.
parse arg s
    if left(s, 1) = '"' then do
        dx = pos('"', s, 2)
        m.qual = substr(s, 2, dx - 2)
        dx = dx + 1
        end
    else do
        dx = pos('.', s)
        m.qual = left(s, dx - 1)
        end
    if substr(s, dx+1, 1) = '"' then do
        ex = pos('"', s, dx+2)
        m.ident = substr(s, dx+2, ex - dx - 2)
        end
    else do
        m.ident = substr(s, dx+ 1)
        end
    m.qual = "'"m.qual"'"
    m.ident = "'"m.ident"'"
    return m.qual
endProcedure anaQualIdent

/*--- detect the db2 subsystem ---------------------------------------*/
dbSubSys: procedure expose m.
parse arg a
                      /* subsys may be passed as argument */
    if length(a) = 4 then
        return a
    else if length(a) = 2 then
        return 'DB'a
    else if length(a) = 1 then
        return 'DB'a'F'
    else if length(a) ^= 0 then
        call errHelp 'bad abbreviation for db2 subsystem: "'a'"'
         /* the db admin tool puts the name of the curren WSL library
            in the variable ADBWLDSN in the shared pool,
            however the session might be in a different split screen */
    wslSubSys= ''
    if ADRISP('VGET ADBWLDSN', '*') = 0 then do
        if left(adbwldsn, 9) == "'DSN.DBA." ,
              & substr(adbwldsn, 14) == ".WSL'" then
            wslSubSys = substr(adbwldsn, 10, 4)
         /* say 'db2SubSys' wslSubSys 'deduced from WSLLib' adbwldsn */
        end

         /* can we deduce the db2SubSys from the qualifiers? */
    quaSubSys = ''
    aa = ''
    q = ''
    do tyx=1 to words(m.types)
        typ = word(m.types, tyx)
        do x=1 to m.obj.typ.0
            id = anaQualIdent(m.obj.typ.x)
            upper m.qual
            if pos(m.qual, aa) > 0 then
                iterate
            aa = aa m.qual
            if substr(m.qual, 2, 3) = 'OA1' then
                n = substr(m.qual, 5, 1)
            else if substr(m.qual, 2, 3) = 'GDB' then
                n = 'A'
            else
                iterate
                       /* compare new char with previous */
            if q == '' then
                q = n
            else if q ^== n then
                q = '*'
            end
        end
    nd = sysvar(sysnode)
    if length(q) = 1 & pos(q, 'ATZLP') > 0 then do
        quaSubSys = 'DB'translate(q, 'O', 'P')'F'
        if nd = 'RZ8' & quaSubSys = 'DBOF' then
            quaSubSys = 'DD0G'
        else if nd = 'RZZ' & quaSubSys = 'DBOF' then
            quaSubSys = 'DE0G'
    /*  say 'db2SubSys' quaSubSys 'deduced from qualifiers:' aa */
        end
                                   /* compare what we got */
    if wslSubSys <> '' then
         if wslSubSys == quaSubSys | quaSubSys == '' then
             return wslSubSys
         else
             call errHelp 'specify subsys because' wslSubSys,
             'from WSLLib mismatches' quaSubsys 'from qualifiers ('aa')'
    else if quaSubSys <> '' then
        return quaSubSys

    if nd = 'RZ2' | nd = 'RR2' then
        return 'DBOF'              /* here we have only one subsys | */
    else if nd = 'RZ8' then
        return 'DM0G'              /* here we have only one subsys | */
    else
        call errHelp 'specify subsys.' ,
                     'Neither WSLLib nor qualifiers ('aa') do'
endProcecdure dbSubSys

/*--- delete comments and rebind statements
           backward from given line and position cursor --------------*/
deleteRebindsUntil: procedure expose m.
    parse arg origZl
                      /* scan backward over old rebind statements */
    do lx = origZl by -1 to 1
        call adrEdit '(li) = line' lx
        w = word(li, 1)
        if w = '' | left(w, 2) = '--' then
            nop
        else if translate(left(w, 6)) = 'REBIND' then
            call cmp 'o', li
        else
            leave
        end
                      /* scan forward over comments without rebind */
    do lx = lx+1 by 1 to origZl
        call adrEdit '(li) = line' lx
        if li = '' | (left(word(li, 1), 2) = '--' ,
                   & pos('REBIND', translate(li)) < 1)  then nop
        else
            leave
        end

    if lx < origZl then
        call adrEdit 'delete' lx origZl
                      /* position cursor */
    if lx < 10 then
        lx = 2
    call adrEdit 'locate' (lx-1)
    return
endProcedure deleteRebinds

/*--- append 1 line at the end of the data ---------------------------*/
appLine: procedure expose m.
parse arg line
    call adrEdit 'line_after .zl = (line)'
    if word(line, 1) = 'REBIND' then
        call cmp 'n' , line
    return
endProcedure appLine

/*--- compare rebind statements --------------------------------------*/
cmp: procedure expose m.
parse arg typ, line
    line = strip(line)
    do x=1 to m.cmp.0
        if m.cmp.x = line then do
            m.cmpTyp.x = m.cmpTyp.x || typ
            return
            end
        end
    m.cmp.0 = x
    m.cmp.x = line
    m.cmpTyp.x = typ
    return
endProcedure cmp

/*--- print compare rebind statements --------------------------------*/
cmpPrint: procedure expose m.
parse arg typ, line
    eq = 0
    nw = 0
    od = 0
    un = 0
    do x=1 to m.cmp.0
        if m.cmpTyp.x = 'no' | m.cmpTyp.x = 'on' then do
            m.cmpTyp.x = '='
            eq = eq + 1
            end
        else if m.cmpTyp.x = 'n' then
            nw = nw + 1
        else if m.cmpTyp.x = 'o' then
            od = od + 1
        else
            un = un + 1
        end
    call appLine '---- compare' eq '=,' nw 'new,' od 'old,' ,
                                un 'others, total' m.cmp.0
    do x=1 to m.cmp.0
        call appLine '--'left(m.cmpTyp.x, 5)m.cmp.x
        end
    return
endProcedure cmpPrint

/***********************************************************************
    scanning sql
***********************************************************************/
/*--- scan a qualified sql identifier --------------------------------*/
sqlQuId: procedure expose m.
parse arg mr
    if \ scanSqlQuId(scanSkip(mr)) then
        return ''
    return m.mr.val
endProcedure sqlQualId

/*--- scan a sql identifier e.g. abc or "efg" ------------------------*/
sqlDeId: procedure expose m.
parse arg mr
    if \ scanSqlDeId(scanSkip(mr)) then
        return ''
    return m.mr.val
endProcedure sqlDeId

/*--- scan a name after skipping over space and newLines -------------*/
sqlId: procedure expose m.
parse arg mr
    if \ scanSqlId(scanSkip(mr)) then
        return ''
    return m.mr.val
endProcedure sqlId

/***********************************************************************
    interface to scan - use edit data as scanner input
***********************************************************************/
/*--- error handling -------------------------------------------------*/
/* copy scan begin ****************************************************
Scan: scan an input:
    scanLine(m,ln) : begin scanning a single line (string)
    scanRead??(m,ln): begin scanning all lines of an opened reader
    scanAtEnd(m)   : returns whether we reached end of input
    scanLit(m,lit) : scan Literal lit if present or return 0
    scanChar(m,n)  : scan next n characters
    scanName(m)    : scan a name
    ScanNat(m)     : scan a natural number (without sign)
    scanString(m,q): scan a String with quote q. (with doubble = 1)
    scanVerify(m,c,o): verify(...,c,o,...)
    scanKeyValue(m): scan a key = value clause (with spaces)
    scanWord(m,u)  : scan a space delimited word or a string,
                          if u=1 then uppercase non-strings
    scanErr(m, txt): error with current scan location

    m is an adress, to store our state
    if a scan function succeeds, the scan posititon is moved

returns: true if scanned, false otherwise
         m.m.tok  ==> last token
         m.m.val  ==> last value for scanString/Word/KeyValue
         m.key    ==> key for scanKeyValue
         m.m.pos ==> scan position
         m.m.src ==> scan source
***********************************************************************/
scanIni: procedure expose m.
    if m.scan.ini == 1 then
        return
    m.scan.ini = 1
    m.scan.alfLC = 'abcdefghijklmnopqrstuvwxyz'
    m.scan.alfUC = translate(m.scan.alfLC)
    m.scan.alfa = m.scan.alfLC || m.scan.alfUC
    m.scan.alfNum = m.scan.alfa || '0123456789'
    return
endProcedure scanIni

scanReset: procedure expose m.
parse arg m, n1, np, co
    m.m.rdr = ''
    m.m.jReading = 0 /* if called without jReset */
    m.m.jWriting = 0
    return scanOpts(m, n1, np, co)
endProcedure scanReset

scanOpts: procedure expose m.
parse arg m, m.m.scanName1, namePlus, m.m.scanComment
    if m.m.scanName1 == '' then
        m.m.scanName1 = m.scan.alfa
    if namePlus == '' then
        m.m.scanNameR = m.m.scanName1 || '0123456789'
    else
        m.m.scanNameR = m.m.scanName1 || namePlus
    return m
endProcedure scanOpts


/*--- begin scanning a single line -----------------------------------*/
scanSrc: procedure expose m.
parse arg m, m.m.src
    return scanOpen(m)
endProcedure scanSrc

scanOpen: procedure expose m.
parse arg m
    m.m.tok = ''
    m.m.val = ''
    m.m.key = ''
    m.m.pos = 1
    m.m.atEnd = m.m.rdr == ''
    m.m.jReading = 1
    return m
endProcedure scanOpen

/*--- return the next len characters ---------------------------------*/
scanLook: procedure expose m.
parse arg m, len
    if len == '' then
        return substr(m.m.src, m.m.pos)
    else
        return substr(m.m.src, m.m.pos,
                     , min(len, 1 + length(m.m.src) - m.m.pos))
endProcedure scanLook

/*--- scan the literal lit ------------------------------------------*/
scanLit: procedure expose m.
parse arg m
    do ax=2 to arg()
        if abbrev(substr(m.m.src, m.m.pos), arg(ax)) then do
            m.m.tok = arg(ax)
            m.m.pos = m.m.pos + length(arg(ax))
            return 1
            end
        end
    m.m.tok = ''
    return 0
endProcedure scanLit

/*--- scan the next len characters -----------------------------------*/
scanChar: procedure expose m.
parse arg m, len
    nx = 1 + length(m.m.src)
    if len \= '' then
        nx = min(m.m.pos + len, nx)
    m.m.tok = substr(m.m.src, m.m.pos, nx - m.m.pos)
    m.m.pos = nx
    return m.m.tok \== ''
endProcedure scanChar

/*--- scan a string with quote char qu -------------------------------*/
scanString: procedure expose m.
parse arg m, prefs
    m.m.tok = ''
    bx = m.m.pos
    if prefs = '' then do
        qu = substr(m.m.src, bx, 1)
        if pos(qu, "'""") < 1 then
            return 0
        ax = bx + 1
        end
    else do
        do px=1 until abbrev(substr(m.m.src, bx), p1)
            p1 = word(prefs, px)
            if p1 = '' then
                return 0
            end
        qu = right(p1, 1)
        ax = bx + length(p1)
        end
    m.m.val = ''
    do forever
        qx = pos(qu, m.m.src, ax)
        if qx < 1 then
            return scanErr(m, 'ending Apostroph('qu') missing')
        m.m.val = m.m.val || substr(m.m.src, ax, qx-ax)
        if qx >= length(m.m.src) then
            leave
        else if substr(m.m.src, qx+1, 1) <> qu then
            leave
        ax = qx+2
        m.m.val = m.m.val || qu
        end
    m.m.tok = substr(m.m.src, bx, qx+1-bx)
    m.m.pos = qx+1
    return 1
endProcedure scanString

/*--- scan a Name, first char in *.scanName1, rest in *.scanNameR ----*/
scanName: procedure expose m.
parse arg m
    if pos(substr(m.m.src, m.m.pos, 1),
                 , m.m.scanName1) <= 0 then do
        m.m.tok = ''
        return 0
        end
    return scanVerify(m, m.m.scanNameR)
endProcedure scanName

/*--- scan with verify, vOpt is passed to verify ---------------------*/
scanVerify: procedure expose m.
parse arg m, alpha, vOpt, onlyIfMatch
    if vOpt == '' then   /* empty string does not take default */
        nx = verify(m.m.src, alpha, , m.m.pos)
    else
        nx = verify(m.m.src, alpha, vOpt, m.m.pos)
    if nx = 0 then
        if onlyIfMatch == 1 then
            nx = m.m.pos
        else
            nx = length(m.m.src) + 1
    m.m.tok = substr(m.m.src, m.m.pos, nx - m.m.pos)
    m.m.pos = nx
    return m.m.tok \== ''
endProcedure scanVerify

/*--- scan a natural number (no sign, decpoint ...) ------------------*/
scanNat: procedure expose m.
parse arg m, chEn
    if \ scanVerify(m, '0123456789') then
        return 0
    if chEn \== 0 then
        if pos(scanLook(m , 1), m.m.scanNameR) > 0 then
            call scanErr m, 'illegal number end after' m.m.tok
    return 1
endProcedure ScanNat

/*--- scan an integer (optional sign, no decpoint ...) ---------------*/
scanInt: procedure expose m.
parse arg m, chEn
    call scanLit m, '+', '-'
    si = m.m.tok
    if \ scanNat(m, chEn) then do
        m.m.pos = m.m.pos - si
        return 0
        end
    m.m.tok = si || m.m.tok
    return 1
endProcedure scanInt

/*--- scan a number (optional sign, decpoint, exponent) ------------*/
scanNum: procedure expose m.
parse arg m, chEn
    sx = m.m.pos
    call scanLit m, '+', '-'
    po = scanLit(m, '.')
    if \ scanNat(m, 0) then do
        m.m.pos = sx
        return 0
        end
    if \ po then
        if scanLit(m, '.') then
            call scanNat m, 0
        if scanLit(m, 'e', 'E') then
            if \ scanInt(m, 0) then
                call scanErr m, 'exponent expected after' ,
                             substr(m.m.src, sx, m.m.pos-sx)
    m.m.tok = substr(m.m.src, sx, m.m.pos-sx)
    m.m.val = translate(m.m.tok)
    if chEn \== 0 then
        if pos(scanLook(m , 1), m.m.scanNameR) > 0 then
            call scanErr m, 'illegal number end after' m.m.tok
    return 1
endProcedure scanNum

/*--- scan a word and put value into *.val
           a word is either delimited by space or stopper
                     or a string (with single or double quotes -------*/
scanWord: procedure expose m.
parse arg m, stopper
    if scanString(m)                   then return 1
    if \scanVerify(m, ' 'stopper, 'm') then return 0
    m.m.val = m.m.tok
    return 1
endProcedure scanWord

scanType: procedure expose m.
parse arg m, opt
    m.m.tok = ''
    if scanName(m) then
        m.m.type = 'n'
    else if scanNum(m) then
        m.m.type = 0
    else if scanString(m) then
        m.m.type = left(m.m.tok, 1)
    else if scanSpaceNl(m) then
        m.m.type = 's'
    else do
        call scanChar m, 1
        m.m.type = m.m.tok
        end
    return m.m.type
endProcedure scanType

scanBack: procedure expose m.
parse arg m, tok
    if m.m.pos <= length(tok) then
        call scanErr sc, 'cannot back "'tok'" length'
    cx = m.m.pos - length(tok)
    if substr(m.m.src, cx, length(tok)) \== tok then
        call scanErr sc, 'cannot back "'tok'" value'
    m.m.pos = cx
    return
endProcedure scanBack

/*--- scan a key = word phrase
          put key into m.key and word into m.m.val -------*/
scanKeyValue: procedure expose m.
parse arg m, def
    if \ scanName(m) then
        return 0
    m.m.key = m.m.tok
    if \ scanLit(scanSkip(m), '=') then do
        m.m.val = def
        m.m.tok = ' no='
        end
    else if \scanWord(scanSkip(m)) then
        return scanErr(m, 'word expected after' m.m.key '=')
    return 1
endProcedure scanKeyValue

/*--- return true/false whether we are at the end of input ----------*/
scanAtEnd: procedure expose m.
parse arg m
    return m.m.atEnd & m.m.pos > length(m.m.src)
endProcedure scanAtEnd

/*--- skip over spaces, nl and comments (if option set) --------------*/
scanSpaceNL: procedure expose m.
parse arg m
    lastTok = m.m.tok
    if m.m.rdr \== '' then
        interpret 'res = ' objMet(m, 'scanSpaceNl')
    else
        res = scanSpaceCom(m)
    m.m.tok = lastTok
    return res
endProcedure scanSpaceNL

scanSpaceCom: procedure expose m.
parse arg m
    res = scanVerify(m, ' ')
    if m.m.scanComment \== '' then
        if abbrev(substr(m.m.src, m.m.pos), m.m.scanComment) then do
            m.m.pos = 1 + length(m.m.src)
            return 1
            end
    return res
endProcedure scanSpaceCom

/*--- skip over space, nl and comments and return m -----------------*/
scanSkip: procedure expose m.
parse arg m
    call scanSpaceNl m
    return m
endProcedure scanSkip

/*--- emit an error with current scan pos ----------------------------*/
scanErr: procedure expose m.
parse arg m, txt
    m.m.err.0 = 0
    call err 'scanErr' txt'\n'scanInfo(m, m'.ERR')
    return 0
endProcedure scanErr

scanPos: procedure expose m.
parse arg m
    if m.m.rdr \== '' then
        interpret 'return' objMet(m, 'scanPos')
    else if scanAtEnd(m) then
        return E
    else
        return 1 m.m.pos
endProcedure scanPos

scanInfo: procedure expose m.
parse arg m
    msg = 'last token' m.m.tok 'scanPosition' ,
          strip(left(substr(m.m.src, m.m.pos), 40), 't')
    if m.m.rdr == '' then
        return msg'\npos' m.m.Pos 'in string' strip(m.m.src, 't')
    else
        interpret 'return msg ||' objMet(m, 'scanInfo')
endProcedure scanInfo
/* copy scan end   ****************************************************/
/* copy scanRead begin ************************************************/
scanReadIni: procedure expose m.
    if m.scanRead.ini = 1 then
        return
    m.scanRead.ini = 1
    call scanIni
    call jIni
    ts = classNew('n Scan u f TOK v, f VAL v, f KEY v, f TYPE v')
    call classNew 'n ScanRead u JRW', 'm',
        , 'jReset call scanReadReset m, arg, arg2, arg3',
        , 'jOpen call scanReadOpen m',
        , 'jClose call jClose m.m.rdr',
        , 'jRead call scanType m; call oClaCopy "'ts'", m, var;' ,
            'return m.m.type \== ""',
        , 'scanReadNl return scanReadNlImpl(m, unCond)',
        , 'scanSpaceNl scanReadSpaceNl(m)',
        , 'scanInfo scanReadInfo(m)',
        , 'scanPos scanReadPos(m)'
    call classNew "n EditRead u JRW", "m",
        , "jRead  return editRead(m, var)",
        , "jOpen" ,
        , "jReset m.m.linex = arg - 1"
    return
endProcedure scanReadIni

/*--- begin scanning the lines of a reader ---------------------------*/
scanRead: procedure expose m.
parse arg rdr, n1, np, co
    return scanOpts(oNew('ScanRead', rdr), n1, np, co)

scanReadReset: procedure expose m.
parse arg m, r, n1, np, co
    call scanReset m, n1, np, co
    m.m.rdr = r
    return m
endProcedure scanReadReset

scanReadOpen: procedure expose m.
parse arg m, r, n1, np, co
    call scanOpen m
    m.m.atEnd = 0
    m.m.lineX = 0
    call jOpen m.m.rdr, m.j.cRead
    call scanReadNl m, 1
    return m
endProcedure scanReadOpen

/*--- scan over next newLine
        if unCond \== 1 only if we are already at endOfLine
         return true if we scanned a NL ------------------------------*/
scanReadNl: procedure expose m.
parse arg m, unCond
    interpret objMet(m, 'scanReadNl')
endProcedure scanReadNl

/*--- implementation of scanReadNl ----------------------------------*/
scanReadNLimpl: procedure expose m.
parse arg m, unCond
    if unCond \== 1 then
        if m.m.pos <= length(m.m.src) then
            return 0
    if m.m.atEnd then
        return 0
    m.m.atEnd = \ jRead(m.m.rdr, m'.SRC')
    if m.m.atEnd then do
        m.m.pos = 1 + length(m.m.src)
        end
    else do
        m.m.pos = 1
        m.m.lineX = m.m.lineX + 1
        end
    return \ m.m.atEnd
endProcedure scanReadNLimpl

scanReadSpaceNl: procedure expose m.
parse arg m
    fnd = 0
    do forever
        if scanSpaceCom(m) then
            fnd = 1
        if \ scanReadNl(m) then
             return fnd
        fnd = 1
        end
endProcedure scanReadSpaceNl

scanReadPos: procedure expose m.
parse arg m, msg
    if scanAtEnd(m) then
        return E
    else
        return m.m.lineX m.m.pos
endProcedure scanReadPos

scanReadInfo: procedure expose m.
parse arg m, msg
    if scanAtEnd(m) then
        msg = msg'\natEnd after'
    else
        msg = msg'\npos' m.m.pos 'in'
    return msg 'line' m.m.lineX':' strip(m.m.src, 't')
endProcedure scanReadInfo

/*--- use scan sqlEdit macro --> temporarily here --------------------*/
/*--- read next line from edit data ----------------------------------*/
editRead: procedure expose m.
parse arg m, var
    m.m.lineX = m.m.lineX + 1
    if adrEdit('(ll) = line' m.m.lineX, 12) ^= 0 then
        return 0
    m.var = ll
    return 1
endProcedure editRead
/*--- search loop in edit macro --------------------------------------*/
scanSqlSeekId: procedure expose m.
parse arg m, lx, cmd, opts
    if opts = '' then
        opts = word
                     /* line 1 col 0, otherwise first word is skipped*/
    if adrEdit("cursor =" max(trunc(lx), 1) 0, 12) = 12 then
        return -1
    do while adrEdit("seek" cmd opts, 4) = 0 /* find each command*/
        call adrEdit "(fx) = cursor"
        if m.debug then do
            call adrEdit "(LI) = LINE" fx
            call debug 'scanSqlSeekId after' lx 'found' cmd 'at' fx li
            end
        call jReset m.m.rdr, fx
        call jOpen m, '<'
        m.m.lineX = fx
        do while word(scanPos(m), 1) <= fx & scanSqlClass(m)
            if m.m.sqlClass = 'i' & m.m.val == cmd then
                return fx
            end
        call jClose m
        end
    return -1
endProcedure scanSqlSeekId
/* copy scanRead end **************************************************/
/* copy scanWin begin *************************************************
     scan the the concatenation of the lines of a reader
         any token my be split over several line
         except the end-of-line-comment-token
***********************************************************************/
scanWinIni: procedure expose m.
    if m.scanWin.ini = 1 then
        return
    m.scanWin.ini = 1
    call scanReadIni
    call jIni
    call classNew 'n ScanWin u JRW', 'm',
        , 'jReset call scanWinReset m, arg, arg2, arg3',
        , 'jOpen call scanWinOpen m, arg(3) ',
        , 'jClose call scanWinClose m ',
        , 'scanReadNl return scanWinNl(m, unCond)',
        , 'scanSpaceNl scanWinSpaceNl(m)',
        , 'scanInfo scanWinInfo(m)',
        , 'scanPos  scanWinPos(m)'
    return
endProcedure scanWinIni

/*--- instanciate a new window scanner, open rdr ---------------------*/
scanWin: procedure expose m.
parse arg rdr, wiSz, wiBa, cuPo, cuLe
    return scanWinOpts(oNew('ScanWin', rdr), wiSz, wiBa, cuPo, cuLe)

/*--- set the reader and attributes of window scanner m -------------*/
scanWinReset: procedure expose m.
parse arg m, r, wiSz, wiGa, cuPo, cuLe
    call scanReset m
    m.m.rdr = r
    m.m.atEnd = 'still closed'
    return scanWinOpts(m, wiSz, wiGa, cuPo, cuLe)
endProcedure scanWinReset

/*--- set the attributes of window scanner m ------------------------*/
scanWinOpts: procedure expose m.
parse arg m, wiSz, wiGa, cuPo, cuLe
    wiSz = word(wiSz 5, 1)
    wiGa = word(wiGa 1, 1)
    m.m.cutPos = word(cuPo 1, 1)
    m.m.cutLen = word(cuLe 72, 1)
    m.m.winTot = (wiSz * 2 + wiGa) * m.m.cutLen
    m.m.posLim = (wiSz     + wiGa) * m.m.cutLen
    m.m.posOff =  wiGa * m.m.cutLen
    return m
endProcedure scanWinOpts

/*--- open reader and start scanning --------------------------------*/
scanWinOpen: procedure expose m.
parse arg m, lx
    call scanOpen m
    m.m.atEnd = 0
    if lx = '' then
        m.m.lineX = 1
    else
        m.m.lineX = lx
    m.m.pos = 1
    m.m.src = ''
    call jOpen m.m.rdr, m.j.cRead
    call scanWinRead m
    return m
endProcedure scanWinOpen

scanWinClose: procedure expose m.
parse arg m
    m.m.atEnd = 'still closed'
    call jClose m.m.rdr
    return
endProcedure scanWinClose
/*--- move the source window: cut left side and append at right side
      return number of characters cut at left ------------------------*/
scanWinRead: procedure expose m.
parse arg m
    dlt = 0
    if m.m.atEnd then
        return 0
    if m.m.pos >= m.m.posLim then do     /*  cut left side */
        dlt = m.m.pos - (m.m.pos // m.m.cutLen + m.m.posOff)
        m.m.src = substr(m.m.src, dlt+1)
        m.m.pos = m.m.pos - dlt
        m.m.lineX = m.m.lineX + dlt % m.m.cutLen
        end
    do while length(m.m.src) < m.m.winTot /* read and fill to len */
        if \ jRead(m.m.rdr, m'.'one) then do
            m.m.atEnd = 1
            return dlt
            end
        m.m.src = m.m.src || substr(m.m.one, m.m.cutPos, m.m.cutLen)
        end
    call assert 'length(m.m.src) = m.m.winTot'
    return dlt
endProcedure scanWinRead

/*--- return position of next line start -----------------------------*/
scanWinNLPos: procedure expose m.
parse arg m
    return m.m.pos + m.m.cutLen - ((m.m.pos - 1) // m.m.cutLen)

/*--- scan over spaces and comments ----------------------------------*/
scanWinSpaceNL: procedure expose m.
parse arg m
    res = 0
    do forever
        call scanWinRead m
        if scanVerify(m, ' ') then do
            res = 1
            iterate
            end
        else if scanLit(m, '/*') then do
            ex = pos('*/', m.m.src, m.m.pos+2)
            if ex <= m.m.pos then
                return scanErr(m, '*/ missing after /*')
            m.m.pos = ex+2
            res = 1
            end
        else do
            cl = length(m.m.scanComment)
            np = scanWinNlPos(m)
            if \ ( cl>0 & m.m.pos+cl <= np & m.m.scanComment ,
                    == substr(m.m.src, m.m.pos, cl)) then
                return res
            m.m.pos = np
            res = 1
            end
        end
endProcedure scanWinSpaceNl

/*--- return current position in input ------------------------------*/
scanWinPos: procedure expose m.
parse arg m
    if scanAtEnd(m) then
        return 'E'
    else
        ps = m.m.pos - 1
    return (m.m.lineX + (ps % m.m.cutLen)) (ps // m.m.cutLen + 1)
endProcedure scanWinPos

/*--- return a description of the current scan position --------------*/
scanWinInfo: procedure expose m.
parse arg m
    p = scanWinPos(m)
    if p == 'E' then do
        res = 'atEnd after'
        p = m.m.lineX - 1 + length(m.m.src) % m.m.cutLen
        end
    else do
        res = 'pos' word(p, 2) 'in'
        p = word(p, 1)
        end
    return '\n'res 'line' p':' strip(substr(m.m.src,
          , 1 + (p - m.m.lineX) * m.m.cutLen, m.m.cutLen), 't')
endProcedure scanWinInfo
/* copy scanWin end   *************************************************/
/* copy scanSql begin *************************************************/
/*--- initialize with reader inRdr ----------------------------------*/
scanSql: procedure expose m.
parse arg inRdr
    return scanSqlReset(scanWin(inRdr), inRdr)

scanSqlReset: procedure expose m.
parse arg m, r, scanWin
    if scanWin \== 0 then
        call scanWinOpts m, 5, 2, 1, 72
    m.m.rdr = r
    return scanOpts(m, , '0123456789_' , '--')
endProcedure scanSqlReset

/*--- scan a sql token put class in m.sqlclass:
      'i': ordinary identifier   e.g. Name
      'd': delimited identifier  e.g. "Delimited"
      'q': qualified identifier  e.g. abc."efg"
      'u': integer units         e.g. 8G
      'n': number                e.g. -234 or .2e3
      's': string                e.g. 'abc''ef'
      '' : at end
         : any other character   e.g. ;
      ----------------------------------------------------------------*/
scanSqlClass: procedure expose m.
parse arg m, retSpace
    m.m.val = ''
    if scanSpaceNl(m) & retSpace = 1 then do
        m.m.sqlClass = 'b'
        return 1
        end
    c2 = scanLook(m ,2)
    if scanString(m, "' x' X'") then do
        m.m.sqlClass = 's'
        if \abbrev(m.m.tok, "'") then
            m.m.val = x2c(m.m.val)
        end
    else if scanSqlQuId(m) then do
        if m.m.val.0 > 1 then
            m.m.sqlClass = 'q'
        else if abbrev(m.m.tok, '"') then
            m.m.sqlClass = 'd'
        else
            m.m.sqlClass = 'i'
        end
    else if scanSqlNum(m, 0)  then
        m.m.sqlClass = 'n'
    else if scanChar(m, 1) then
        m.m.sqlClass = m.m.tok
    else if scanAtEnd(m) then do
        m.m.sqlClass = ''
        return 0
        end
    else
        call scanErr m, 'cannot scan sql'
    return 1
endProcedure scanSqlClass

scanSqlSkipBrackets: procedure expose m.
parse arg m, br
    if br \== '' then
        nop
    else if scanLit(m, '(') then
        br = 1
    else
        return 0
    do while scanSqlClass(m) & m.m.sqlClass \== ';'
        if m.m.sqlClass = '('        then br = br + 1
        else if m.m.sqlClass \== ')' then iterate
        else if br > 1              then br = br - 1
        else                             return 1
        end
    call scanErr m, '; or eof, but' br 'closing ) expected'
endProcedure skipBrackets
/*--- scan an ordinary sql identifier e.g. abc, ef_12 ----------------*/
scanSqlId: procedure expose m.
parse arg m
    if \ scanName(m) then
        return 0
    m.m.val = translate(m.m.tok)
    return 1
endProcedure scanSqlId

/*--- scan a delimited or ordinay sql identifier ---------------------*/
scanSqlDeId: procedure expose m.
parse arg m
    if scanSqlId(m) then
        return 1
    if \ scanString(m, '"') then
        return 0
    m.m.val = strip(m.m.val, 't')
    return 1
endProcedure scanSqlDeId

/*--- scan a qualified sql identifier --------------------------------*/
scanSqlQuId: procedure expose m.
parse arg m
    res = ''
    rto = ''
    do qx=1
        if \ scanSqlDeId(m) then do
            if qx <> 1 then
                call scanErr m, 'id expected after .'
            return 0
            end
        m.m.val.qx = m.m.val
        res = res'.'m.m.val
        rto = rto'.'m.m.tok
        if \ scanLit(scanSkip(m), '.') then
            leave
        call scanSpaceNl m
        end
    m.m.val.0 = qx
    m.m.val = substr(res, 2)
    m.m.tok = substr(rto, 2)
    return 1
endProcedure scanSqlQuId

/*--- scan a sql number ----------------------------------------------*/
scanSqlNum: procedure expose m.
parse arg m, checkEnd, noSp
    si = ''
    if noSp == 1 then
        call err 'deimplement noSp, use scanNum instead'
    if scanLit(m, '+', '-') then do
        si = m.m.tok
        call scanSpaceNl m
        ch = scanLook(m, 2)
        if left(ch, 1) == '.' then
            ch = substr(ch, 2)
        if pos(left(ch, 1), '0123456789') < 1 then do
            call scanBack m, si
            m.m.val = ''
            return 0
            end
        end
    res = scanNum(m, checkEnd)
    m.m.val = si || m.m.val
    return res

endProcedure scanSqlNum

/*--- scan a sql number with a unit which may follow without space ---*/
scanSqlNumUnit: procedure expose m.
parse arg m, both, units
    if \ scanSqlNum(m, 0) then
        return 0
    nu = m.m.val
    sp = scanSpaceNl(m)
    if scanSqlId(m) then do
        if units == '' | wordpos(m.m.val, units) > 0 then
            nu = nu m.m.val
        else if both | \ sp then
            call scanErr m, 'scanSqlNumUnit after' nu 'bad unit' m.m.val
        else
            call scanBack m, m.m.tok
        end
    else if both then
        call scanErr m, 'scanSqlNumUnit no unit after' nu
    else if \sp & pos(scanLook(m, 1), m.m.scanNameR) > 0 then
        call scanErr m, 'scanSqlNumUnit bad number end after' nu
    m.m.val = nu
    return 1
endProcedure scanSqlNumUnit

/*--- scan a sql number with a unit which may follow without space ---*/
scanSqlStmt: procedure expose m.
parse arg m, delim
    if delim == '' then
        delim = ';'
    res = ''
    vChrs = strip('''"/'delim || left(m.m.scanComment, 1))
    do forever
        if scanSpaceNl(m) then
            if right(res, 1) \== ' ' then
                res = res' '
        if scanVerify(m, vChrs, 'm') then
            res = res || m.m.tok
        else if scanString(m) then
            res = res || m.m.tok
        else if scanLit(m, delim) then do
            m.m.val = res
            return 1
            end
        else if scanChar(m, 1) then do
            res = res || m.m.tok
            end
        else do
            m.m.val = res
            return res \= ''
            end
        end
endProcedure scanSqlStmt
/* copy scanSql end   *************************************************/
/* copy sql    begin ***************************************************
    sql interface
***********************************************************************/
sqlIni: procedure expose m.
parse arg opt
    if m.sql.ini == 1 & opt \== 1 then
        return
    m.sqlNull = '---'
    m.sqlInd = 'sqlInd'
    m.sqlRetOK.0 = 0
    m.sqlMsgCa = 0
    m.sqlMsgDsntiar = 1
    m.sqlMsgCodeT   = 0
    call sqlPushRetOk
    m.sql.ini = 1
    m.sql.connected = ''
    return
endProcedure sqlIni

/*--- prepare statement 's'cx from sql src into descriptor desc ------*/
sqlPrepare: procedure expose m.
parse arg cx, src, descOut, descInp
     s = ''
     if descOut == 1 then
         s = 'into :M.SQL.'cx'.D'
     res = sqlExec('prepare s'cx s 'from :src')
     if res < 0 then
         return res
     if descInp == 1 | (descInp == '' & pos('?', src) > 0) then
         res = sqlExec('describe input s'cx 'into :M.SQL.'cx'.I')
     else
         m.sql.cx.i.sqlD = 0
     return res
endProcedure

/*--- prepare and declare 'c'cx from sql src -------------------------*/
sqlPreDeclare: procedure expose m.
parse arg cx, src, descOut, descInp
     res = sqlPrepare(cx, src, descOut, descInp)
     if res >= 0 then
         return sqlExec('declare c'cx 'cursor for s'cx)
     return res
endProcedure sqlPreDeclare

/*--- prepare, declare and open 'c'cx from sql src -------------------*/
sqlPreOpen: procedure expose m.
parse arg cx, src, descOut, descInp
     res = sqlPreDeclare(cx, src, descOut, descInp)
     if res >= 0 then
         return sqlOpen(cx)
     return res
endProcedure sqlPreOpen

/*--- open cursor 'c'cx using arguments arg(2), arg(3)... ------------*/
sqlOpen: procedure expose m.
parse arg cx
    do ix=1 to arg()-1
        call sqlDataSet 'SQL.'cx'.I', ix, arg(ix+1)
        end
     return sqlExec('open c'cx 'using descriptor :M.SQL.'cx'.I')
endProcedure sqlOpen

/*--- close cursor 'c'cx ---------------------------------------------*/
sqlClose: procedure expose m.
parse arg cx, src
     return sqlExec('close c'cx)
endProcedure sqlClose

/*--- fetch cursor 'c'cx into variables ggVars -----------------------*/
sqlFetchInto:
parse arg ggCx, ggVars
    if ggVars == '' then
        ggVars = 'descriptor :M.SQL.'ggCX'.D'
                        /* accept sqlCodes > 0 except 100 */
    ggRes = sqlExec('fetch c'ggCx 'into' ggVars, 100 m.sqlRetOk)
    if ggRes == 0 then
        return 1
    if ggRes == 100 then
        return 0
    return ggRes
endProcedure sqlFetchInto

/*--- return sql variable list for stem st and fields the word in vars
          if withInd == 1 then with sqlIndicator variables
        sqlVars('S', 'A B') --> ':S.A, :S.B'
        sqlVars('S', 'A B', 1) --> ':S.A :S.A.SQLIND, :S.B :S.B.SQLIND'
----------------------------------------------------------------------*/
sqlVars: procedure expose m.
parse arg st, vars, withInd
    res = ''
    if st ^== '' then
        st = st'.'
    do ix=1 to words(vars)
        res = res', :'st || word(vars, ix)
        if withInd == 1 then
             res = res ':'st || word(vars, ix)'.sqlInd'
        end
    return substr(res, 3)
endProcedure sqlVars

sqlVarsNull: procedure expose m.
parse arg st, vars
    hasNulls = 0
    do ix = 1 to words(vars)
        fld = word(vars, ix)
        if m.st.fld.sqlInd < 0 then do
            m.st.fld = m.sqlNull
            hasNulls = 1
            end
        end
    return hasNulls
endProcedure sqlVarsNull

/*--- open cursor 'c'cx fetch all into variables vars and close
      st = passed stem, sx = row number
      return number of rows fetched ----------------------------------*/
sqlOpAllCl:
parse arg ggCx, st, ggVars
    do ggAx=4 to arg()
        call sqlDataSet 'SQL.'ggCx'.I', ggAx-3, arg(ggAx)
        end
    ggRes = sqlOpen(ggCx)
    if ggRes < 0 then
        return ggRes
    do sx = 1 until ggRes \== 1
        ggRes = sqlFetchInto(ggCx, ggVars)
        end
    m.st.0 = sx - 1
    call sqlClose ggCx
    if ggRes == 0 then
        return m.st.0
    return ggRes
endProcedure sqlOpAllCl

sqlDataSet: procedure expose m.
parse arg da, ix, val
    m.da.ix.sqlData = val
    m.da.ix.sqlInd = - (arg(ix+2) == m.sqlNull)
    /* data types schienen einmal nicht zu funktionieren .......
    if wordPos(m.da.ix.sqlType, '384 385 388 389 392 393') > 0 then
        m.da.ix.sqlType = 448 + (m.da.ix.sqlType // 2) */
    return
endProcedure sqlDataSet
/*--- prepare, declare open cursor 'c'cx, fetch all and close
      return number of rows fetched ----------------------------------*/
sqlPreAllCl:
parse arg ggCx, ggSrc, st, ggVars
    ggRes = sqlPreDeclare(ggCx, ggSrc)
    if ggRes >= 0 then
        return sqlOpAllCl(ggCx, st, ggVars)
    return ggRes
endProcedure sqlPreAllCl

/*--- execute statement 's'cx using arguments arg(2), arg(3)... ------*/
sqlExecute:
parse arg ggCx ggRetOk  /* no , for ggRetOk, arg(2) is used already| */
    do ggAx=2 to arg()
        call sqlDataSet 'SQL.'ggCx'.I', ggAx-1, arg(ggAx)
        end
     return sqlExec('execute s'ggCx 'using descriptor :M.SQL.'ggCx'.I',
                   , ggRetOk)
endProcedure

/*--- execute immediate the sql src ----------------------------------*/
sqlExImm:
parse arg ggSrc, ggRetOk
     return sqlExec('execute immediate :ggSrc', ggRetOk)
endProcedure sqlExImm

sqlCommit: procedure expose m.
parse arg src
     return sqlExec('commit')
endProcedure sqlCommit

/*--- execute sql thru the dsnRexx interface -------------------------*/
sqlExec: /* no procedure, to keep variables sql... */
    parse arg ggSqlStmt, ggRetOk, ggNo
    if ggNo <> '1' then
        ggSqlStmt = 'execSql' ggSqlStmt
    address dsnRexx ggSqlStmt
    /* say 'sqlCode' sqlCode 'rc' rc 'for' ggSqlStmt ggNo */
    if rc = 0 then
        return 0
    if ggRetOk = '' then
        ggRetOk = m.sqlRetOk
    if wordPos(rc, '1 -1') < 0 then
        call err 'dsnRexx rc' rc sqlmsg()
    else if pos('*', ggRetOk) > 0 | wordPos(sqlCode, ggRetOk) > 0 ,
            then do
        if sqlCode < 0 & pos('say', ggRetOk) > 0 then
            say 'sqlError' sqlmsg()
        return sqlCode
        end
    else if rc < 0 then
        call err sqlmsg()
    else if sqlCode <> 0 | (pos('w',ggRetOk)<1 & sqlWarn.0^==' ') then
        call errSay sqlMsg(), ,'w'
    return sqlCode
endSubroutine sqlExec

/*--- connect to the db2 subsystem sys -----------------------------*/
sqlConnect: procedure expose m.
parse upper arg sys, retOk
    call sqlIni
    address tso "SUBCOM DSNREXX"
    if rc <> 0 then do
       sRc = RXSUBCOM('ADD','DSNREXX','DSNREXX') /* ADD HOST CMD ENV  */
       if sRc <> 0 then
           call err 'rc' sRc 'from RXSUBCOM(ADD, DSNREXX, DSNREXX)'
       end
    if sys = '-' then
        return 0
    res = sqlExec("connect" sys, retOk ,1)
    if res >= 0 then
        m.sql.connected = sys
    return res
endProcedure sqlConnect

/*--- diconnect from db2 ---------------------------------------------*/
sqlDisconnect: procedure expose m.
parse arg retOk
    m.sql.connected = ''
    return sqlExec("disconnect ", retOk, 1)
endProcedure sqlDisconnect

/*--- connect and/or disconnect to DB2 -------------------------------*/
sqlConDis: procedure expose m.
parse upper arg sys, retOk
    if sys \== '' then
        nop
    else if sysvar(sysnode) == 'RZ1' then
        sys = 'DBAF'
    else
        call err 'no default subsys for' sysvar(sysnode)
    call sqlIni
    if sys == m.sql.connected then
        return 0
    if m.sql.connected \== '' then
        call sqlDisconnect
    if sys = '-' then
        return 0
    return sqlConnect(sys, retOk)
endProcedure sqlConDis
/*--- push and pop currently accepted sqlCodes -----------------------*/
sqlPushRetOk: procedure expose m.
parse arg rr
    nx = m.sqlRetOk.0 + 1
    m.sqlRetOk.0 = nx
    m.sqlRetOk.nx = rr
    m.sqlRetOk    = rr
    return
endProcedure sqlPushRetOk

sqlPopRetOk: procedure expose m.
    nx = m.sqlRetOk.0 - 1
    if nx < 1 then
        call err 'sqlPopRetOk with .0' m.sqlRetOk.0
    m.sqlRetOk    = m.sqlRetOk.nx
    m.sqlRetOk.0 = nx
    return
endProcedure sqlPopRetOk

/*--- issue an sql error message -------------------------------------*/
sqlMsg: /* no procedure, to keep variables sql... */
    ggRes = ''
    if \ dataType(sqlCode, 'n') then do
        ggRes = 'sqlCode' sqlCode 'not numeric\n'sqlMsgCa()
        end
    else do
        signal on syntax name sqlMsgOnSyntax
        if m.sqlMsgCodeT == 1 then
        ggRes = 'sqlCode' sqlCodeT(sqlCode, sqlErrMc, sqlwarn.0':' ,
           || sqlwarn.1||sqlwarn.2||sqlwarn.3||sqlwarn.4||sqlwarn.5',',
           || sqlwarn.6||sqlwarn.7||sqlwarn.8||sqlwarn.9||sqlwarn.10)
        if 0 then
          sqlMsgOnSyntax: do
            ggRes = sqlMsgCa(),
                    '\n<<rexx sqlCodeT not found or syntax>>'
            end
        signal off syntax
        if m.sqlMsgDsnTiar == 1 then do
            ggRes = ggRes || sqlDsntiar()
            ggWa = sqlMsgWarn(sqlWarn)
            if ggWa \= '' then
                ggRes = ggRes'\nwarnings' ggWa
            end
        if m.sqlMsgCa == 1 then
           ggRes = ggRes'\n'sqlMsgCa()
        end
    ggSqlSp = ' ,:+-*/&%?|()¢!'
    ggXX = pos(':', ggSqlStmt)+1
    do ggSqlVx=1 to 12 while ggXX > 1
        ggYY = verify(ggSqlStmt, ggSqlSp, 'm', ggXX)
        if ggYY < 1 then
            ggYY = length(ggSqlStmt) + 1
        ggSqlVa.ggSqlVx = substr(ggSqlStmt, ggXX, ggYY - ggXX)
        do ggQQ = ggXX-2 by -1 to 1 ,
                while substr(ggSqlStmt, ggQQ, 1) == ' '
            end
        do ggRR = ggQQ by -1 to 1 ,
                while pos(substr(ggSqlStmt, ggRR, 1), ggSqlSp) < 1
            end
        if ggRR < ggQQ & ggRR > 0 then
            ggSqlVb.ggSqlVx = substr(ggSqlStmt, ggRR+1, ggQQ-ggRR)
        else
            ggSqlVb.ggSqlVx = ''
        ggXX = pos(':', ggSqlStmt, ggYY+1) + 1
        end
    ggSqlVa.0 = ggSqlVx-1
    if datatype(sqlErrd.5, 'n') & sqlErrd.5 > 0 then do
        ggW2 = translate(word(ggSqlStmt, 2))
        ggW3 = translate(word(ggSqlStmt, 3))
        if ggW2 == 'PREPARE' then
            ggRes = ggRes || sqlMsgSrF('FROM')
        else if ggW2 ggW3 == 'EXECUTE IMMEDIATE' then
            ggRes = ggRes || sqlMsgSrF(1)
        else
            ggRes = ggRes || sqlMsgSrF()
        end
    ggRes = ggRes'\nstmt = ' ggSqlStmt
    ggPref = '\nwith'
    do ggXX=1 to ggSqlVa.0
        ggRes = ggRes || ggPref ggSqlVb.ggXX ':'ggSqlVa.ggXX ,
                      '=' value(ggSqlVa.ggXX)
        ggPref = '\n    '
        end
    if abbrev(ggRes, '\n') then
        return substr(ggRes, 3)
    return  ggRes
endSubroutine sqlMsg

sqlMsgSrF:
parse arg ggF
    if ggF \== '' & \ datatype(ggF, 'n') then do
        do ggSqlVx=1 to ggSqlVa.0
            if translate(ggSqlVb.ggSqlVx) = ggF then
                return sqlMsgSrc(value(ggSqlVa.ggSqlVx), sqlErrd.5)
            end
        end
    if datatype(ggF, 'n') & ggF <= ggSqlVa.0 then
        return sqlMsgSrc(value(ggSqlVa.ggF), sqlErrd.5)
    return sqlMsgSrc(ggSqlStmt  , sqlErrd.5)
endSubroutine sqlMsgSrF

/*--- use dsnTiar to translate sql Info to error text ----------------*/
sqlDsnTiar:
    sqlWarn = sqlWarn.0 || sqlWarn.1 || sqlWarn.2 || sqlWarn.3,
             || sqlWarn.4 || sqlWarn.5 || sqlWarn.6 || sqlWarn.7,
             || sqlWarn.8 || sqlWarn.9 || sqlWarn.10
    if sqlCode = -438 then
        return '\nSQLCODE = -438:',
               'APPLICATION RAISED ERROR WITH sqlState' sqlState,
               'and DIAGNOSTIC TEXT:' sqlErrMc
    if digits() < 10 then
        numeric digits 10
    sqlCa = d2c(sqlCode, 4) ,
             || d2c(max(70, length(sqlErrMc)), 2)left(sqlErrMc, 70) ,
             || left(sqlErrP, 8) ,
             || d2c(sqlErrD.1, 4)d2c(sqlErrD.2, 4)d2c(sqlErrD.3, 4) ,
             || d2c(sqlErrD.4, 4)d2c(sqlErrD.5, 4)d2c(sqlErrD.6, 4) ,
             || sqlWarn || sqlState
    if length(sqlCa) <> 124 then
        call err 'sqlDa length' length(sqlCa) 'not 124' ,
                 '\nsqlCa=' sqlMsgCa()
    return sqlDsnTiarCall(sqlCa)

/*--- call dsnTiar o translate sql Info to error text ----------------*/
sqlDsnTiarCall: procedure expose m.
parse arg ca
    liLe = 78
    msLe = liLe * 10
    if length(ca) <> 124 then
        call err 'sqlDa length' length(ca) 'not 124:' ca', hex='c2x(ca)
    ca = 'SQLCA   ' || d2c(136, 4) || ca
    msg = d2c(msLe,2) || left('', msLe)
    len = d2c(liLe, 4)
    ADDRESS LINKPGM "DSNTIAR ca msg LEN"
    if rc <> 0 then
        call err 'linkPgm dsnTiar rc' rc 'sqlCa' ca
    res = ''
    do c=3 by liLe to msLe
        if c = 3 then do
            l1 = strip(substr(msg, c+10, 68))
            cx = pos(', ERROR: ', l1)
            if cx > 0 then
                l1 = left(l1, cx-1)':' strip(substr(l1, cx+9))
            res = res'\n'l1
            end
        else if substr(msg, c, 10) = '' then
            res = res'\n    'strip(substr(msg, c+10, 68))
        else
            leave
        end
    return res
endProcedure sqlDsnTiarCall

sqlMsgCa:
    ggWarn = ''
    do ggX=0 to 10
        if sqlWarn.ggX \== ' ' then
            ggWarn = ggWarn ggx'='sqlWarn.ggx
        end
    if ggWarn = '' then
        ggWarn = 'none'
    return 'sqlCode' sqlCode 'sqlState='sqlState,
           '\n    errMC='translate(sqlErrMc, ',', 'ff'x),
           '\n    warnings='ggWarn 'erP='sqlErrP,
           '\n    errD.1='sqlErrD.1 '2='sqlErrD.2 '3='sqlErrD.3,
           '\n    errD.4='sqlErrD.4 '5='sqlErrD.5 '6='sqlErrD.6
endProcedure sqlMsgCa

/*--- make the text for sqlWarnings
           input warn.0..warn.10 as a 11 character string ------------*/
sqlMsgWarn: procedure expose m.
parse arg w0 2 wAll
     if w0 = '' & wAll = '' then
         return ''
     if  length(wAll) \= 10 | ((w0 = '') <> (wAll = '')) then
         return 'bad warn' w0':'wAll
     r = ''
     text =' 1=W var truncated, 1=S scrollable, 1=N nonScrollable,'  ,
            '2=W nulls in aggregate,'                                ,
            '3=W more cols than vars,'                               ,
                             '3=Z more result sets than locators,'   ,
            '4=W no where, 4=D sensitive dynamic, 4=I insensitive,'  ,
                          '4=S sensitive static,'                    ,
            '5=W not valid sql, 5=1 readOnly, 5=2 readDelete,'       ,
                          '5=3 readDeleteUpdate,'                    ,
            '6=W day changed to month range,'                        ,
            '7=W dec digits truncated,'                              ,
            '8=W char substituted,'                                  ,
            '9=W arith excep in count, 9=Z multipe result sets,'     ,
            '10=W char conversion err in ca,'
     do wx = 1 to 10
         w = substr(wAll, wx, 1)
         if w = ' ' then
             iterate
         t = wx'='w
         cx = pos(' 'wx'='w' ', text)
         ex = pos(','         , text, cx + 1)
         if cx < 1 then
             r = r wx'='w '?,'
         else
             r = r substr(text, cx+1, ex-cx)
         end
     return strip(r, 't', ',')
endProcedure sqlMsgWarn

sqlMsgSrc: procedure expose m.
parse arg src, pos, opt
    if 0 then do /* old version, before and after txt */
        tLe = 150
        t1 = space(left(src, pos), 1)
        if length(t1) > tLe then
            t1 = '...'right(t1, tLe-3)
        t2 = space(substr(src, pos+1), 1)
        if length(t2) > tLe then
            t2 = left(t2, tLe-3)'...'
        res = '\nsource' t1 '<<<error>>>' t2
        end
    liLe = 68
    liCn = 3
    afLe = 25
    if translate(word(src, 1)) == 'EXECSQL' then
        src = substr(src, wordIndex(src, 2))
    t1 = space(left(src, pos), 1)
    t2 = left(' ', substr(src, pos, 1) == ' ' ,
                 | substr(src, pos+1, 1) == ' ') ,
         || space(substr(src, pos+1), 1)
    afLe = min(afLe, length(t2))
    if length(t1) + afLe > liLe * liCn then
        t1 = '...'right(t1, liLe * liCn - afLe -3)
    else if length(t1)+length(t2) > liLe then
        t1 = left(' ', (liCn * liLe - length(t1) -afLe) // liLe)||t1
    pL = length(t1) // liLe
    if length(t2) <= liLe-pL then
        tx = t1 || t2
    else
        tx = t1 || left(t2, liLe-pL-3)'...'
    res = '\nsrc' strip(substr(tx, 1, liLe), 't')
    do cx=1+liLe by liLe to length(tx)
        res = res || '\n  +' strip(substr(tx, cx, liLe), 't')
        end
    loc = 'pos' pos 'of' length(src)
    if length(loc)+6 < pL then
        return res'\n  >' right('>>>'loc'>>>', pL)
    else
        return res'\n  >' left('', pL-1)'<<<'loc'<<<'
endProcdedur sqlMsgSrc

/*--- send a command to db2 through the TSO dsn processor ------------*/
sqlDsn: procedure expose m.
parse arg st, sys, cmd, rcOk
    x = outtrap('M.'st'.')
    push 'END'
    push cmd
    address tso 'DSN SYSTEM('sys')'
    rr = rc
    x = outtrap(off)
    if rr = 0 | rcOk = '*' | wordPos(rr, rcOk) > 0 then
        return rr
    fl = max(1, m.st.0 - 10)
    em = 'rc' rr 'for DSN SYSTEM('sys') cmd' cmd,
          '\nOuputlines' fl '-' m.st.0':'
    do lx=fl to m.st.0
        em = em '\n' strip(m.st.lx, 't')
        end
    call err em
endProcedure sqlDsn
/* copy sql    end   **************************************************/
/* copy j begin *******************************************************
    the j framework
         jReset
         jOpen
         jClose
         jRead
         jWrite
***********************************************************************/
jRead: procedure expose m.
parse arg m, var
    call objMetClaM m, 'jRead'
    if m.m.jReading then
        interpret ggCode
    else
        return err('jRead('m',' var') but not opened r')
endProcedure jRead

jReadO: procedure expose m.
parse arg m
if arg() > 1 then call err '???  old interface'
    call objMetClaM m, 'jReadO'
    if m.m.jReading then
        interpret ggCode
    else
        return err('jReadO('m',' var') but not opened r')
endProcedure jReadO

jWrite: procedure expose m.
parse arg m, line
    call objMetClaM m, 'jWrite'
    if \ m.m.jWriting then
        return err('jWrite('m',' line') but not opened w')
    interpret ggCode
    return
endProcedure jWrite

jWriteO: procedure expose m.
parse arg m, var
    call objMetClaM m, 'jWriteO'
    if \ m.m.jWriting then
        return err('jWriteO('m',' var') but not opened w')
    interpret ggCode
    return
endProcedure jWriteO

jWriteAll: procedure expose m.
parse arg m, rdr
    rdr = o2file(rdr)
    call objMetClaM m, 'jWriteAll'
    if \ m.m.jWriting then
        return err('jWriteAll('m',' rdr') but not opened w')
    interpret ggCode
    return
endProcedure jWriteAll

jWriteNow: procedure expose m.
parse arg m, rdr
    rdr = o2file(rdr)
    interpret objMet(m, 'jWriteNow')
    return
endProcedure jWriteNow

jCat: procedure expose m.
parse arg opt m
    if m = '' then do
        m = opt
        opt = m.j.cWri
        end
    call jOpen m, opt
    do ax=2 to arg()
        call jWriteAll m, arg(ax)
        end
    call jClose m
    return m
endProcedure jCat

jWriteNowImpl: procedure expose m.
parse arg m, rdr
    call jOpen rdr, m.j.cRead
    do while jRead(rdr, line)
        call jWrite m, m.line
        end
    call jClose rdr
    return
endProcedure jWriteNow

jWriteNowImplO: procedure expose m.
parse arg m, rdr
    call jOpen rdr, m.j.cRead
    do while assNN('li', jReadO(rdr))
        call jWriteO m, li
        end
    call jClose rdr
    return
endProcedure jWriteNow

/*--- reset JRW: fail if open, initialise ---------------------------*/
jReset: procedure expose m.
parse arg m, arg, arg2, arg3
    if m.m.jReading == 1 | m.m.jWriting == 1 then
        return err('still open jReset('m',' arg2')') / 3
    m.m.jReading = 0
    m.m.jWriting = 0
    m.m.jUsers = 0
    interpret objMet(m, 'jReset')
    return m
endProcedure jReset

jOpen: procedure expose m.
parse arg m, opt
    call objMetClaM m, 'jOpen'
    oUsers = m.m.jUsers
    if opt = m.j.cRead then do
        if m.m.jReading then
            nop
         else if m.m.jWriting then
            return err('already opened for writing jOpen('m',' opt')')
        else do
            interpret ggCode
            m.m.jReading = 1
            end
        end
    else if \ abbrev('>>', opt, 1) then do
        return err('bad option' opt 'in jOpen('m',' opt')')
        end
    else do
        if m.m.jWriting then
            nop
         else if m.m.jReading then
            return err('already opened for reading jOpen('m',' opt')')
        else do
            interpret ggCode
            m.m.jWriting = 1
            end
        end
    m.m.jUsers = oUsers + 1
    return m
endProcedure jOpen

jClose: procedure expose m.
parse arg m
    call objMetClaM m, 'jClose'
    oUsers = m.m.jUsers
    if oUsers = 1 then do
        interpret ggCode
        m.m.jReading = 0
        m.m.jWriting = 0
        end
    else if oUsers < 1 then
        call err 'jClose' m 'but already closed'
    m.m.jUsers = oUsers - 1
    return m
endProcedure jClose

/*--- cat the lines of the file together, with mid between lines,
                fail if not all lines are strings -------------------*/
jCatLines: procedure expose m.
parse arg m, opt
    call jOpen m, m.j.cRead
    if \ jRead(m, line) then do
        call jClose m
        return ''
        end
    res = jCat1(m.line)
    if \ abbrev(opt, '-', 1) then
        do while jRead(m, line)
            res = res || opt || m.line
            end
    else if opt == '-s' then
        do while jRead(m, line)
            res = res strip(m.line)
            end
    else if opt == '-72' then
        do while jRead(m, line)
            res = res || left(m.line, 72)
            end
    call jClose m
    return res
endProcedure jCatLines

jCat1: procedure expose m.
parse arg v, opt
    if \ abbrev(opt, '-', 1) then
        return v
    if opt == '-s' then
        return strip(v)
    if opt == '-72' then
        return left(v, 72)
    call err 'bad opt' opt 'in jCat1('v',' opt')'
endProcedure jCat1

jIni: procedure expose m.
    if m.j.ini == 1 then
        return
    m.j.ini = 1
    m.j.cRead = '<'
    m.j.cWri = '>'
    m.j.cApp = '>>'
    call oIni
    am = "call err 'call of abstract method"
    call classNew 'n JRW u ORun, f JREADING v, f JWRITING v', 'm',
        , "new call jReset m, arg, arg2, arg3",
        , "jRead"   am "jRead('m',' var')'" ,
        , "jReadO if \ jRead(m, 'J.GGVAR') then return '';",
                "return s2o(m.j.ggVar)" ,
        , "jWrite" am "jWrite('m',' line')'" ,
        , "jWriteO call jWrite(m, o2string(var))" ,
        , "jWriteAll call jWriteNowImpl m, rdr",
        , "jWriteNow call jWriteNowImpl m, rdr",
        , "jReset",
        , "jOpen" am" jOpen('m',' opt')'" ,
        , "jClose" ,
        , "oRun call pipeWriteAll m",
        , "o2String return jCatLines(m, ' ')",
        , "o2File return m"
    call classNew 'n JRWO u JRW', 'm',
        , "jRead res = jReadO(m); if res == '' then return 0;" ,
                "m.var = o2string(res); return 1" ,
        , "jReadO"   am "jReadO('m')'" ,
        , "jWrite  call jWriteO(m, s2o(var))" ,
        , "jWriteO" am "jWriteO('m',' line')'",
        , "jWriteAll call jWriteNowImplO m, rdr",
        , "jWriteNow call jWriteNowImplO m, rdr",

    am = "call err 'call errObject"
    call classNew 'n JRWErr u JRW', 'm',
        , "jWriteAll" er "jWriteAll 'm', rdr'",
        , "jWriteNow" er "jWriteNow 'm', 'rdr'",
        , "jClose" er "jClose 'm'"
    call classNew 'n JRWOut u JRWO', 'm',
        , "jReset m.m.stem = arg;",
               "if arg \== '' & \ dataType(m.arg.0, 'n') then",
                   "m.arg.0 = 0" ,
        , "jWrite if m.m.stem == '' then say line;" ,
                 "else call mAdd m.m.stem, line" ,
        , "jWriteO call classOut , var, 'outO: '",
        , "jOpen if \ abbrev(opt, m.j.cWri) then",
            "call err 'can only write JRWOut.jOpen('m',' opt')';" ,
            "else m.m.jWriting = 1"
    call classNew 'n JRWEof u JRW', 'm',
        , "jRead drop m.var; return 0",
        , "jOpen if pos('>', opt) > 0 then",
            "call err 'can only read JRWEof.jOpen('m',' opt')';" ,
            "else m.m.jReading = 1"
    m.j.in = jOpen(oNew('JRWEof'), m.j.cRead)
    m.j.out = jOpen(oNew('JRWOut'), m.j.cWri)
    call classNew "n JBuf u JRWO, f BUF s r", "m",
        , "jOpen call jBufOpen m, opt",
        , "jReset call jBufReset m, arg",
        , "jRead return jBufRead(m, var)",
        , "jReadO return jBufReadO(m)",
        , "jWrite call jBufWrite m, line",
        , "jWriteO call jBufWriteO m, var"
    call classNew "n JBufTxt u JBuf, f MAXL v ", "m",
        , "jReset call jBufReset m, arg; m.m.maxl = 80",
        , "jWriteO call jBufWrite m, o2Text(var, m.m.maxl)"
    return
endProcedure jIni

in: procedure expose m.
parse arg arg
    return jRead(m.j.in, arg)
endProcedur in

inO: procedure expose m.
    if arg() > 0 then call err '??? old interface'
    return jReadO(m.j.in)
endProcedur in

out: procedure expose m.
parse arg line
    call jWrite m.j.out, line
    return 0
endProcedure out

outO: procedure expose m.
parse arg arg
    call jWriteO m.j.out, arg
    return
endProcedure outO

/*--- jBuf: buffer read or write (supports datataypes) ---------------*/
jBuf: procedure expose m.
    m = oNew('JBuf') /* calls jBufReset */
    do ax=1 to arg()
        m.m.buf.ax = arg(ax)
        end
    m.m.buf.0 = ax-1
    m.m.allV = 1
    return m
endProcedure jBuf
/*--- jBuf: buffer read or write (supports datataypes) ---------------*/
jBufTxt: procedure expose m.
    m = oNew('JBufTxt') /* calls jBufReset */
    do ax=1 to arg()
        m.m.buf.ax = arg(ax)
        end
    m.m.buf.0 = ax-1
    m.m.allV = 1
    return m
endProcedure jBufTxt

jBufReset: procedure expose m.
parse arg m
    m.m.stem = m'.BUF'
    do ax=1 to arg() - 1
        m.m.buf.ax = arg(ax+1)
        end
    m.m.buf.0 = ax-1
    m.m.allV = 1
    return m
endProcedure jBufReset

jBufOpen: procedure expose m.
parse arg m, opt
    if opt == m.j.cRead then do
        m.m.readIx = 0
        m.m.jReading = 1
        return m
        end
    if opt == m.j.cWri then do
        m.m.buf.0 = 0
        m.m.allV = 1
        end
    else if opt \== m.j.cApp then
         call err 'jBufOpen('m',' opt') with bad opt'
    m.m.jWriting = 1
    return m
endProcedure jBufOpen

jBufWrite: procedure expose m.
parse arg m, line
    if m.m.allV then
        call mAdd m'.BUF', line
    else
        call mAdd m'.BUF', s2o(line)
    return
endProcedure jBufWrite

jBufWriteStem: procedure expose m.
parse arg m, st
    ax = m.m.buf.0
    if m.m.allV then do
        do sx=1 to m.st.0
            ax = ax + 1
            m.m.buf.ax = m.st.sx
            end
        end
    else do
        do sx=1 to m.st.0
            ax = ax + 1
            m.m.buf.ax = o2String(m.st.sx)
            end
       end
       m.m.buf.0 = ax
    return m
endProcedure jBufWrite

jBufWriteO: procedure expose m.
parse arg m, ref
    if m.m.allV then do
        cl = objClass(ref)
        if cl = m.class.classV then do
            call mAdd m'.BUF', m.ref
            return
            end
        if cl == m.class.classW then do
            call mAdd m'.BUF', substr(ref, 2)
            return
            end
        m.m.allV = 0
        do ax=1 to m.m.buf.0
            m.m.buf.ax = s2o(m.m.buf.ax)
            end
        end
    call mAdd m'.BUF', ref
    return
endProcedure jBufWriteO

jBufReadO: procedure expose m.
parse arg m
    nx = m.m.readIx + 1
    if nx > m.m.buf.0 then
        return ''
    m.m.readIx = nx
    if m.m.allV then
        return s2o(m.m.buf.nx)
    else
        return m.m.buf.nx
endProcedure jBufReadO

jBufRead: procedure expose m.
parse arg m, var
    nx = m.m.readIx + 1
    if nx > m.m.buf.0 then
        return 0
    m.m.readIx = nx
    if m.m.allV then
        m.var = m.m.buf.nx
    else
        m.var = o2String(m'.BUF.'nx)
    return 1
endProcedure jBufRead

jBufTxtWriteO: procedure expose m.
parse arg m, ref
    if m.m.allV \== 1 then
        call err '1 \== allV' m.m.allV 'in jBufTxtWriteO('m',' ref')'
    cl = objClass(ref, '?')
    if cl = m.class.classV then
        call mAdd m'.BUF', m.ref
    else if cl == m.class.classW then
        call mAdd m'.BUF', substr(ref, 2)
    else if ref == '' then
        call mAdd m'.BUF', '@ null object'
    else if cl == '?' then
        call mAdd m'.BUF', '@'ref 'class=???'
    else do
        l = '@'ref 'class='className(cl)
        ff = cl'.FLDS'
        do fx=1 to m.ff.0 while length(l) < m.m.maxl + 3
            if m.ff.fx == '' then
                 l = l', .='m.ref
            else do
                 f1 = substr(m.ff.fx, 2)
                 l = l',' f1'='m.ref.f1
                 end
            end
        if length(l) > m.m.maxl then
            l = left(l, m.m.maxl-3)'...'
        call mAdd m'.BUF', l
        end
    return
endProcedure jBufTxtWriteO

/* copy j end *********************************************************/
/* copy o begin ******************************************************
    an object has a class which describes fields and methods
    an object has fields (e.g. m.o.fld1)
    an object may call it's methods (dynamic binding)
***********************************************************************/
oIni: procedure expose m.
    if m.o.ini = 1 then
        return
    m.o.ini = 1

    call classIni
    call oAdd1Method m.class.classV, 'o2String return m.m'
    m.class.escW = '!'
    call oAdd1Method m.class.classW, 'o2String return substr(m, 2)'
    or = classNew('n ORun u',
         , 'm oRun call err "call of abstract method oRun"',
         , 'm o2File return oRun2File(m)',
         , 'm o2String return jCatLines(oRun2File(m), " ")')
                /* oRunner does not work yet ||||| */
    rc = classNew('n* ORun u ORun, m oRun call oClassAdded arg(2)')
    call oAddMethod rc'.OMET', rc
    call classAddedRegister oMutate(mNew(), rc)
    return
endProcedure oIni

/*--- when notified about a new class cl, build the redundancies ----*/
oClassAdded: procedure expose m.
parse arg cl
    m.class.o2c.cl = m.class.class
    call oAddMethod cl'.OMET', cl
    new = "m.class.o2c.m =" cl
    if m.cl.flds.0 > 0 | m.cl.stms.0 > 0 then
        new = new"; call oClear m, '"cl"'"
    new = new";" classMet(cl, 'new', '')
    if cl == m.class.class then
        call mAlias 'CLASS', cl
    else  /* object adresses */
        call mNewArea cl, 'O.'substr(cl,7), new
     if m.cl \== 'u' | m.cl.name == '' then
        return
    call mAlias cl, m.cl.name
    new = 'new'
    m.cl.oMet.new = ''
    co = ''                              /* build code for copy */
    do fx=1 to m.cl.flds.0
        nm = m.cl.flds.fx
          if translate(nm) == nm & \ abbrev(nm, 'GG') ,
              & pos('.M.', nm'.') < 1 & pos('.T.', nm'.') < 1 then
               co = co'm.t'nm '= m.m'nm';'
        else
            co = co 'f='quote(substr(nm, 2))';m.t.f = m.m.f;'
        end
    do fx=1 to m.cl.stms.0
        nm = m.cl.stms.fx
        sc = m.cl.stms.fx.class
        if nm == ''then
            co = co "m.t.0=m.m.0;" ,
               "do sx=1 to m.m.0;" ,
                 "call oClaCopy '"sc"',m'.'sx, t'.'sx; end;"
        else
            co = co "st='"substr(nm, 2)"';m.t.st.0=m.m.st.0;",
                "do sx=1 to m.m.st.0;",
                  "call oClaCopy '"sc"',m'.'st'.'sx, t'.'st'.'sx; end;"
        end
    p = cl'.OMET.oCopy'
    if symbol('m.p') \== VAR then
        m.p = co
    return
endProcedure oClassAdded

/*--- add the methods of class cl to the methodtable mt -------------*/
oAddMethod: procedure expose m.
parse arg mt, cl
     if pos(m.cl, 'frsv') > 0 then
         return
     if m.cl = 'm' then do
         nm = m.cl.name
         m.mt.nm = m.cl.met
         return
         end
/*     if m.cl.class \== '' then
         call oAddMethod mt, m.cl.class
*/   do x=1 to m.cl.0
         call oAddMethod mt, m.cl.x
         end
     return
endProcedure oAddMethod

/* add 1 method to a completed class and its subclasses -------------*/
oAdd1Method: procedure expose m.
parse arg clNm, met code
    cl = classAdd1Method(clNm, met code)
    m.cl.omet.met = code
    call oAdd1MethodSubs cl, met code
    return cl
endProcedure oAdd1Method

/* add 1 method code to OMET of all subclasses of cl  -------------*/
oAdd1MethodSubs: procedure expose m.
parse arg cl, met code
    do sx=1 to m.cl.sub.0
        sc = m.cl.sub.sx
        if pos(m.sc, 'nvw') > 0 then do
            do mx=1 to m.sc.0
                ms = m.sc.mx
                if m.ms == 'm' & m.ms.name == met then
                    call err 'method' med 'already in' sc
                end
            m.sc.omet.met = code
            end
        call oAdd1MethodSubs sc, met code
        end
    return cl
endProcedure oAdd1MethodSubs

/*--- create an an object of the class className
        mutate it to class but DO NOT call it's new method ----------*/
oBasicNew: procedure expose m.
parse arg cl
    return oMutate(mBasicNew(cl), cl)

/*--- create an an object of the class className
        and call it's new method ------------------------------------*/
oNew: procedure expose m.
signal labelMNew    /* work is done there |   ???? remove */

/*--- return the class of object obj --------------------------------*/
objClass: procedure expose m.
parse arg obj
    if symbol('m.class.o2c.obj') == 'VAR' then
         return m.class.o2c.obj
    if abbrev(obj, m.class.escW) then
        return m.class.classW
    if abbrev(obj, 'CLASS.CAST.') then
        return substr(obj, 12, pos(':', obj, 12)-12)
    if arg() >= 2 then
        return arg(2)
    return err('objClass no class found for object' obj)
endProcedure objClass

oKindOf: procedure expose m.
parse arg obj, sup
    cl = objClass(obj, '')
    if cl == '' then
        return 0
    return classInheritsOf(cl, class4name(sup))
endProcedure oKindOf

classInheritsOf: procedure expose m.
parse arg cl, sup    /* wkTst optimierung in classAdded */
    if cl == sup then
        return 1
    do while m.cl \== 'n' & m.cl \== 'u'
        if m.cl.class == '' then
            return 0
        cl = m.cl.class
        end
    do cx=1 to m.cl.0
        d = m.cl.cx
        if m.d == 'u' then
            if classInheritsOf(d, sup) then
                return 1
        end
    return 0
endProcedure classInheritsOf

classSetMet: procedure expose m.
parse arg na, me, code
    if symbol('m.class.n2c.na') \== 'VAR' then
        call err 'no class' na 'in classMet('na',' me')'
    cl = m.class.n2c.na
    if symbol('m.cl.oMet.me') \== 'VAR' then
        call err 'no method in classMet('na',' me')'
    m.cl.oMet.me = code
    return cl
endProcedure classSetMet

/*--- return the code of method me of the class with name na --------*/
classMet: procedure expose m.
parse arg na, me
    if symbol('m.class.n2c.na') \== 'VAR' then
        call err 'no class' na 'in classMet('na',' me')'
    cl = m.class.n2c.na
    if symbol('m.cl.oMet.me') == 'VAR' then
        return m.cl.oMet.me
    if arg() >= 3 then
        return arg(3)
    call err 'no method in classMet('na',' me')'
endProcedure classMethod

/*--- set m, ggClass, ggCode to the address, class and code
        of method me of object m ------------------------------------*/
objMetClaM: procedure expose m. m ggClass ggCode
parse arg m, me
    if symbol('m.class.o2c.m') == 'VAR' then
         ggClass =  m.class.o2c.m
    else if abbrev(m, 'CLASS.CAST.') then
        parse var m 'CLASS.CAST.' ggClass ':' m
    else
        return err('no class found for object' m)
    if symbol('m.ggClass.oMet.me') == 'VAR' then
        ggCode = m.ggClass.oMet.me
    else
         call err 'no method' me 'in class' className(ggClass),
              'of object' m
    return
endProcedure objMetClaM

/*--- return the code of method me of object obj --------------------*/
objMet: procedure expose m.
parse arg obj, me
        /* handle the easy and frequent case directly */
    if symbol('m.class.o2c.obj') == 'VAR' then
         c =  m.class.o2c.obj
    else if abbrev(obj, m.class.escW) then
         c = m.class.classW
    else do
        call objMetClaM obj, me
        return 'M="'m'";'ggCode
        end
     if symbol('m.c.oMet.me') == 'VAR' then
         return m.c.oMet.me
    return err('no method' me 'in class' className(c) 'of object' obj)
endProcedure objMet

/*--- return the stem of fieldnames of object m ---------------------*/
oFlds: procedure expose m.
parse arg m
    return objClass(m)'.FLDS'
endProcedure oFlds

/*--- return the contents of field f navigation along path ----*/
oGet: procedure expose m.
parse arg obj, path, clazz
    nullNew = 0
    ret = oAccPath(obj, path, clazz)
    if ret == 1 then
        ret = oAccStr(m, cl)
    if ret == 1 then
        return str
    return err(ret 'in oGet('obj',' path')')
endProcedure oGet

oAccStr: procedure expose m. str
parse arg m, cl
    if cl == m.class.classV then
        str = m.m
    else if m.cl.valueCl == '' then
        return 'no value @' m 'class' className(cl)
    else if m.m == '' then
        return 'null @' m 'class' className(cl)
    else if abbrev(m, m.class.escW) then
        str = substr(m ,2)
    else
        str = o2String(m.m)
    return 1
endProcedure oAccStr

oGetO: procedure expose m.
parse arg obj, path, opt, clazz
    nullNew = pos('n', opt) > 0
    ret = oAccPath(obj, path, clazz)
    if ret == 1 then
        ret = oAccO(m, cl, opt)
    if ret == 1 then
        return ref
    else
        return err(ret 'in oGetO('obj',' path')')
endProcedure oGetO

oAccO: procedure expose m. ref
parse arg m, cl, opt
    if cl == m.class.classV then do
        ref = s2o(m.m)
        end
    else if m.cl \== 'r' then do
        ref = m
        end
    else if m.m == '' then do
        if opt == '-b' then do
            m.m = jBuf()
            end
        else if opt == '-n' then do
            rsn = oRefSetNew(m, cl)
            if rsn \==1 then
               return rsn
            end
        ref = m.m
        end
    else if objClass(m.m, 0) \== 0 then do
        ref = m.m
        end
    else do
        return 'no class for' m.m '@' m 'class' cl
        end
    return 1
endProcedure oAccO

oPut: procedure expose m.
parse arg obj, path, str
    nullNew = 1
    res = oAccPath(obj, path)
    if res == 1 then
        res = ocPut(m, cl, str)
    if res == 1 then
        return str
    return err(res 'in oPut('obj',' path',' str')')
endProceudre oPut

ocPut: procedure expose m.
parse arg m, cl, str
    if m.cl.valueCl == m.class.classV then
        m.m = str
    else if m.cl.valueCl \== '' then
        m.m = s2o(str)
    else
        return 'no value @' m 'class' className(cl)
    return 1
endProcedure ocPut

oPutO: procedure expose m.
parse arg obj, path, ref
    nullNew = 1
    res = oAccPath(obj, path)
    if res == 1 then
        res = ocPutO(m, cl, ref)
    if res == 1 then
        return ref
    return err(ret 'in oPut('obj',' path',' ref')')
endProcedure oPutO

ocPutO: procedure expose m.
parse arg m, cl, ref
    if m.cl.valueCl == m.class.classV then
        m.m = o2string(ref)
    else if m.cl.valueCl \== '' then
        m.m = ref
    else if m.cl.stemCl \== '' then
        return 'implement put to stem'
    else
        return 'no value @' m 'class' className(cl)
    return 1
endProcedure ocPutO

oClear: procedure expose m.
parse arg obj, cl
    if cl == '' then
        cl = objClass(obj)
    do fx=1 to m.cl.flds.0
        f1 = m.cl.flds.fx
        o1 = obj || f1
        if f1 == '' then
            c1 = cl
        else do
            c1 = substr(f1, 2)
            c1 = m.cl.f2c.c1
            end
        if c1 == m.class.classW then
            m.o1 = m.class.escW
        else
            m.o1 = ''
        end
    do sx=1 to m.cl.stms.0
        f1 = obj || m.cl.stms.sx
        m.f1.0 = 0
        end
    return obj
endProcedure oClear

oAccPath: procedure expose m. m cl nullNew
parse arg m, pa, cl
    if cl == '' & m \== '' then do
        cl = objClass(m)
        end
    if pa == '' then
        return 1
    if abbrev(pa, m.class.cRef) ,
            | (\ m.cl.hasFlds & abbrev(pa, m.class.cNav)) then do
        if pa == m.class.cRef & m.cl.valueCl == m.class.classV then do
            cl = m.class.classV
            return 1
            end
        if (m.cl.valueCl == '' | m.cl.valueCl == m.class.classV) ,
              & m.cl \== 'r' then
            return 'no reference @' m 'class' cl
        if m.m = '' then do
            if \ nullNew then
                return 'null @' m 'class' className(cl)
            rsn = oRefSetNew(m, cl)
            if rsn \== 1 then
                return rsn
            end
        return oAccPath(m.m, substr(pa, 2))
        end
    if pos(left(pa, 1), m.class.cPath) > 0 then
        return oAccPath(m, substr(pa, 2), cl)
    px = verify(pa, m.class.cPath, 'm')
    if px < 1 then
        px = length(pa)+1
    fn = left(pa, px-1)
    pa = substr(pa, px)
    if symbol('m.cl.f2c.fn') == 'VAR' then
        return oAccPath(m'.'fn, pa, m.cl.f2c.fn)
    if m.cl.stemCl=='' | fn=='' | verify(fn, '0123456789','n')>0 then
        return 'no field' fn '@' m 'class' className(cl)
    if fn == 0 then
        return oAccPath(m'.0', pa, m.class.classV)
    if abbrev(fn, 0) | verify(m.m.0, '0123456789', 'n') > 0,
            | fn > m.m.0 then
        return 'bad stem index' fn'>'m.m.0 '@' m 'class' className(cl)
    return oAccPath(m'.'fn, pa, m.cl.stemCl)
endProcedure oAccPath

oRefSetNew: procedure expose m.
parse arg m, cl
    cr = m.cl.valueCl
    if m.cr.class = '' then
        return 'no class for null @' m 'class' className(cl)
    if m.cr.class = m.class.classW then
        m.m = o2s()
    else if m.cr \== 'r' then
        return 'class' className(cl) 'not ref'
    else
        m.m = mNew(m.cr.class)
    return 1
endProcedure oRefSetNew


/*--- mutate object m to the class named name -----------------------*/
oMutate: procedure expose m.
parse arg m, name
    m.class.o2c.m = class4Name(name)
    return m
endProcedure oMutate

/*--- return object obj cast'd to class named cl --------------------*/
oCast: procedure expose m.
parse arg obj, cl
     if abbrev(obj, 'CLASS.CAST.') then
         obj = substr(obj, 1 + pos(':', obj, 12))
     return 'CLASS.CAST.'class4Name(cl)':'obj
endProcedure oCast

/*--- copy object m of class c to t ---------------------------------*/
oClaCopy: procedure expose m.
parse arg ggCla, m, t
    if t == '' then do
        if ggCla == m.class.classW then
            return m
        t = mBasicNew(ggCla)
        end
     else if ggCla == m.class.classW then do
         m.t = o2String(m)
         m.class.o2c.t = m.class.classV
         return t
         end
     ggCode = ggCla'.OMET.oCopy'
     interpret m.ggCode
     m.class.o2c.t = ggCla
     return t
endProcedure oClaCopy

/*--- copy object m to t --------------------------------------------*/
oCopy: procedure expose m.
parse arg m, t
    return oClaCopy(objClass(m), m, t)
endProcedure oCopy

/*--- copy object to a newly created object -------------------------*/
oCopyNew: procedure expose m.
parse arg m
     if symbol('m.class.o2c.m') == 'VAR' then
         return oCopy(m, mBasicNew(m.class.o2c.m))
     return oCopy(m, mBasicNew(m.class.classV))
endProcedure oCopyNew

/*--- return a new instance of a subclass of Run
        with code code in method oRun -------------------------------*/
oRunner: procedure expose m.
    if arg() >= 1 then
           r = oNew(classNew('n* ORun u ORun, m oRun' arg(1)))
    else
           r = oNew(classNew('n| ORun u ORun'))
    return r
endProcedure oRunner

/*--- set code for runner -------------------------------------------*/
oRunnerCode: procedure expose m.
parse arg r, code
    call classSetMet objClass(r), 'oRun', code
    return r
endProcedure oRunnerCode

/*--- run method oRun of object m -----------------------------------*/
oRun: procedure expose m.
parse arg m, arg, arg2, arg3
    interpret objMet(m, 'oRun')
    return
endProcedure oRun

/*--- run method oRun and return output in new JBuf ------------------*/
oRun2File: procedure expose m.
parse arg rn
    b = jBuf()
    call pipeBeLa '>' b
    call oRun rn
    call pipeEnd
    return b
endProcedure oRun2File

/*--- cast the object to a file -------------------------------------*/
o2File: procedure expose m.
parse arg m
    interpret objMet(m, 'o2File')
    call err 'o2file did not return'
endProcedure o2File

/*--- cast the object to a String -----------------------------------*/
o2String: procedure expose m.
parse arg m, arg, arg2, arg3
    interpret objMet(m, 'o2String')
    return err('o2String did not return')
endProcedure o2String

/*--- return a short string representation of an object -------------*/
o2Text: procedure expose m.
parse arg m, maxL
    if m == '' then
        return '@ null object'
    if maxL == '' then
        maxL = 80
    cl = objClass(m, '?')
    if cl = m.class.classV then
        l = m.m
    else if cl == m.class.classW then
        l = substr(m, 2)
    else if cl == '?' then
        l = '@'m 'class=???'
    else do
        l = '@'m 'class='className(cl)
        ff = cl'.FLDS'
        do fx=1 to m.ff.0 while length(l) < maxL + 3
            if m.ff.fx == '' then
                 l = l', .='m.m
            else do
                 f1 = substr(m.ff.fx, 2)
                 l = l',' f1'='m.m.f1
                 end
            end
        end
    if length(l) <= maxL then
        return l
    return left(l, maxL-3)'...'
endProcedure o2Text

/*--- cast a String to an object -----------------------------------*/
s2o: procedure expose m.
parse arg str
    return m.class.escW || str
    return r
endProcedure s2o

oIfStr: procedure expose m.
parse arg m
    if length(m) > 200 then
        return m
    cl = objClass(m, '')
    if cl = '' then
        return m
    else if cl = m.class.classV then
        return = m.m
    else if cl == m.class.classW then
        return = substr(m, 2)
    else if arg() >= 2 then
        return arg(2)
    else
        call err m 'of class' className(cl) 'not kind of string'
endProcedure oIfStr

/* copy o end *******************************************************/
/* copy class begin **************************************************
    a class has fields and methods,
    the class module handles only the metadata,
    object handling (instanciation, methodcalls etc.) is in O

    classes are represented by a metadata tree,
        its nodes of class class have diffenrent types:

class subTypes (implemented as choices)
    'u'    = union:    NAME -> name of class if <> '',
                    stem -> references component classes
    'f' = field:      NAME -> fieldName (x.name),
                    CLASSS -> reference to class of fieldValue
    's' = stem:     class -> ref to class at each stem element
    'c' = choice:   NAME -> selection value,
                    CLASS -> ref to class of choice
    'm' = method:    NAME -> methodName,
                    MET -> rexxCode
    'r' = reference CLASS -> ref to type at reference
special classes
    'v'    = Value     String Value
    'w'    = ValueAsA    StringValue packed into an adress (prefix escW)
    'o' = AnyClass    any class with dynamic classLookup on object
formal definition, see classIni

class expression (ce) allow the following syntax
    ce = className | classAdr | 'n'('?','*','|')? name union | union
        | 'f' name ce | 's' ce | 'c' name ce | 'm' name code | r ce?
    union = 'u' (ce (',' ce)*)?

    the modifiers of 'n' means
        none:    create new class, fail if name already defined
        '?':    create new class or return old of that name
        '*':    use an exisiting class of that definition
                or create new class with a unique name
        '|':    create a new class with a unique name
    'm' extends to then end of the ce (line)
    'u' allows several components, in classNew also multiple args
                Achtung, aber NICHT rekursiv|
***********************************************************************/
classIni: procedure expose m.
    if m.class.ini == 1 then
        return
    m.class.ini = 1
    call mapIni
    call mNewArea 'CLASS', 'CLASS'
    call mapReset 'CLASS.N2C'  /* name to class */
        /* to notify other modules (e.g. O) on every new named class */
    m.class.addedSeq.0 = 0
    m.class.addedListeners.0 = 0
    m.class.classV = classBasicNew('u', 'v')
    m.class.classW = classBasicNew('u', 'w')
    m.class.classO = classBasicNew('u', 'o')
    cr = mIterBegin('CLASS')
    do while assNN('cr', mIter(cr))
        call classAddedNotify cr
        end

    m.class.class = classNew('n class u v',
            , 'c u u f NAME v, s r class',
            , 'c f u f NAME v, f CLASS r class',
            , 'c s f CLASS r class' ,
            , 'c c u f NAME v, f CLASS r class',
            , 'c m u f NAME v, f MET  v' ,
            , 'c r f CLASS r class' )
    m.class.cNav = '.'
    m.class.cRef = '|'
    m.class.cDot = '%'
    m.class.cPath = m.class.cNav || m.class.cRef || m.class.cDot
    m.class.classR = classNew('r')
    return
endProcedure classIni


/*--- return the name of a class if it exists otherwise the class ---*/
className: procedure expose m.
parse arg cl
    if m.cl = 'u' & m.cl.name \= '' then
        return m.cl.name
    else
        return cl
endProcedure class4Name

/*--- return class of given name or class ---------------------------*/
class4Name: procedure expose m.
parse arg nm
    if symbol('m.class.n2c.nm') == 'VAR' then
        return m.class.n2c.nm
    if arg() > 1 then
        return arg(2)
    call err 'no class' nm
endProcedure class4Name

classBasicNew: procedure expose m.
parse arg ty, nm, cl, nmTy
    n = mNew('CLASS')
    m.n = ty
    m.n.name = nm
    m.n.nameComp = nm
    if ty == 'u' & nm \== '' then do
        if pos(nmTy, '*|') > 0 then do
            m.n.name = nm || substr(n, 1+lastPos('.', n))
            if nmTy == '*' then
                m.n.nameComp = nm'*'
            else
                m.n.nameComp = m.n.name
            end
        call mapAdd class.n2c, m.n.name, n
        end
    call mapAdd class.n2c, n, n
    m.n.class = ''
    m.n.met = ''
    m.n.0 = 0
    m.n.sub.0 = 0
    m.n.super.0 = 0
    if length(ty) \== 1 | pos(ty, 'ufscrm') < 1 then
        call err 'bad type' ty': classBasicNew('ty',' nm',' cl')'
    else if nm == '' & pos(ty, 'fm') > 0 then
        call err 'empty name: classBasicNew('ty',' nm',' cl')'
    else if nm \== '' & ty \== 'c'  ,
          & ( verify(nm, '0123456789') < 1 ,
            | verify(nm, ' .*|@', 'm') > 0 ) then
        call err 'bad name' nm': classBasicNew('ty',' nm',' cl')'
    else if nm \= '' & pos(ty, 'rs') > 0 then
        call err 'name for type' ty': classBasicNew('ty',' nm',' cl')'
    else if pos(ty, 'fcrs') > 0 then do
        if cl \== '' then
            m.n.class = mapGet(class.n2c, cl)
        else if ty == 'r' then
            m.n.class = m.class.classO
  /*    else say 'cl leer' ty nm nmTy   ???????*/
        end
    else if ty == 'm' then
        m.n.met = cl
    else if cl \== '' then
        call err 'class for type' ty': classBasicNew('ty',' nm',' cl')'
    return n
endProcedure classBasicNew


classNew: procedure expose m.
parse arg clEx 1 ty rest
    if abbrev(ty, 'n') then do
        if wordPos(ty, 'n n? n* n|') < 1 then
            call err 'bad type' ty': classNew('clEx')'
        nmTy = right(ty, 1)
        parse var rest nm ty rest
        if ty \== 'u' then
            call err 'class name' nm 'without u: classNew('clEx')'
        if nmTy == 'n' then do
             if mapHasKey(class.n2c, nm) then
                call err 'class' nm 'already defined: classNew('clEx')'
            end
        else if nmTy == '?' then do
            if mapHasKey(class.n2c, nm) then
                return mapGet(class.n2c, nm)
            end
        else if nmTy == '*' then do
            if arg() \== 1 then
                call err 'arg()='arg() 'for n* : classNew('clEx')'
            if mapHasKey(class.n2c, clEx) then
                return mapGet(class.n2c, clEx)
            end
        n = classBasicNew('u', nm, , nmTy)
        end
    else do
        nmTy = ''
        if arg() \== 1 then
            call err 'arg()='arg() 'without name: classNew('clEx')'
        if mapHasKey(class.n2c, clEx) then
               return mapGet(class.n2c, clEx)
        if length(ty) <> 1 | pos(ty, 'ufscmr') < 1 then
            call err 'bad type' ty': classNew('clEx')'
        nm = ''
        if pos(ty, 'usr') < 1 then
            parse var rest nm rest
        if ty = 'u'  then do
            n = classBasicNew(ty)
            end
        else if    ty = 'm' then do
            n = classBasicNew(ty, nm, rest)
            rest = ''
            end
        else do
            parse var rest t1 rest
            if wordPos(t1, 'u f s c m r') > 0 then do
                n = classBasicNew(ty, nm)
                m.n.class = classNew(t1 rest)
                rest = ''
                end
            else do
                n = classBasicNew(ty, nm, t1)
                end
            end
        end
    if ty \== 'u' then do
        if rest \== '' then
            call err 'rest' rest 'but end of classExp expected:' clEx
        end
    else do
        lx = 0
        do while lx < length(rest)
            cx = pos(',', rest, lx+1)
            if cx <= lx | word(substr(rest, lx+1), 1) == 'm' then
                cx = length(rest)+1
            a = mAdd(n, classNew(strip(substr(rest, lx+1, cx-lx-1))))
            lx=cx
            end
        pref = ''
        do ax=2 to arg()
            if length(arg(ax)) == 1 & arg(ax) \== ' ' then
                pref = arg(ax)' '
            else
                call mAdd n, classNew(pref || arg(ax))
            end
        end
    cr = mIterBegin('CLASS')
    do while assNN('cr', mIter(cr)) & \ classEqual(n, cr)
        end
    isNew = cr == n
    if \ isNew then do
        if mapRemove(class.n2c, n) \== n then
            call err 'mapRemove('n') mismatch'
        if m.n == 'u' & m.n.name \== '' then
            if mapRemove(class.n2c, m.n.name) \== n then
                call err 'mapRemove('m.n.name') mismatch'
        call mFree n
        n = cr
        end
    if nmTy == '' | nmTy == '*' then
        call mapAdd class.n2c, clEx, n
    if isNew then
        call classAddedNotify n
    return n
endProcedure classNew

classAdd1Method: procedure expose m.
parse arg clNm, met code
    cl = class4Name(clNm)
    if pos(m.cl, 'uvw') < 1 then
        call err 'class not nvw but' m.cl,
            'in classAdd1Method('clNm',' met code')'
    do sx = 1 to m.cl.0
        su = m.cl.sx
        if m.cl.sx = 'm' & m.cl.name == met then
            call err 'met' met 'already in' clNm
        end
    call mAdd cl, classNew('m' met code)
    return cl
endProcedure classAdd1Method

/*--- register a listener for newly defined classes
        and call it for all already defined classes -----------------*/
classAddedRegister: procedure expose m.
parse arg li
    call mAdd 'CLASS.ADDEDLISTENERS', li
    do cx = 1 to m.class.addedSeq.0
        call oRun li, m.class.addedSeq.cx
        end
    return
endProcedure classAddedRegister

/*--- to notify all listeners about a newly defined classes --------*/
classAddedNotify: procedure expose m.
parse arg cl
    call mAdd 'CLASS.ADDEDSEQ', cl
    if m.cl == 'u' then
        call classSuperSub cl
    m.cl.flds.0 = 0
    m.cl.stms.0 = 0
    m.cl.stemCl = ''
    m.cl.valueCl = ''
    call classAddFields cl, cl
    m.cl.hasFlds = m.cl.flds.0 > 1 ,
        | (m.cl.flds.0 == 1 & m.cl.flds.1 \== '') | m.cl.stms.0 > 0
    do lx = 1 to m.class.addedListeners.0
        call oRun m.class.addedListeners.lx, cl
        end
    return
endProcedure classAddedNotify

/*--- add supper and sub links for class cl -------------------------*/
classSuperSub: procedure expose m.
parse arg cl
    do ux=1 to m.cl.0
        u1 = m.cl.ux
        if m.u1 == 'u' then do
            if mPos(cl'.SUPER', u1) > 0 then
                call err u1 'is already in' cl'.SUPER.'sx ,
                    || ': classSuperSub('cl')'
            call mAdd cl'.SUPER', u1
            if mPos(cl'.SUB', cl) > 0 then
                call err cl 'is already in' u1'.SUB.'sx ,
                    || ': classSuperSub('cl')'
            call mAdd u1'.SUB', cl
            end
        end
    return
endProcedure classSuperSub

/*--- add the the fields of class cl to stem f ----------------------*/
classAddFields: procedure expose m.
parse arg f, cl, nm
    n1 = substr(nm, 1+abbrev(nm, '.') )
    if symbol('m.f.f2c.n1') \== 'VAR' then
        m.f.f2c.n1 = cl
/*    else if cl == m.f.f2c.n1 then
        return 0 */
    if cl == m.class.classV | cl == m.class.classW | m.cl=='r' then do
        if nm == '' then do
            if m.f.valueCl \== '' then
                return  err('value mistmatch')
            m.f.valueCl = cl
            end
        if nm == '' then do
             call mMove f'.FLDS', 1, 2
             m.f.flds.1 = ''
             end
        else do
            call mAdd f'.FLDS', nm
            end
        return 0
        end
    if m.cl = 's' then do
        if m.cl.class == '' then
            call err 'stem null class'
        a1 = mAdd(f'.STMS', nm)
        m.a1.class = m.cl.class
        if nm == '' then
            m.f.stemCl = m.cl.class
        return 0
        end
    if m.cl = 'f' then
        return classAddFields(f, m.cl.class, nm'.'m.cl.name)
    if m.cl.class \== '' then
        return classAddFields(f, m.cl.class, nm)
    do tx=1 to m.cl.0
        call classAddFields f, m.cl.tx, nm
        end
    return 0
endProcedure classAddFields

/*--- return true iff the two classes are equal -------------------*/
classEqual: procedure expose m.
parse arg l, r
    if m.l \== m.r | m.l.nameComp \== m.r.nameComp ,
            | m.l.class \== m.r.class | m.l.0 \== m.r.0  then
        return 0
    if m.l.met \== m.r.met  then
        return 0
    do sx=1 to m.l.0
        if m.l.sx \== m.r.sx then
            return 0
        end
    return 1
endProcedure classEqual

/*--- print object ---------------------------------------------------*/
objOut: procedure expose m.
parse arg m, pr, p1
   c = objClass(m, '')
   if c == '' then
       call out p1 'no class for' m
   else if c == m.class.classV then
       call out p1 || m.m
   else if c == m.class.classW then
       call out p1 || o2String(m)
   else
       call classOutDone c, m, pr, p1
   return
endProcedure objOut

/*--- recursively output (with out:) the object a with class t -------*/
classOut: procedure expose m.
parse arg t, a, pr, p1
    return classOutDone(if(t=='',m.class.classO, t), a, pr, p1)
endProcedure classOut

/*--- ouput object a with class t and stopper done ------------------*/
classOutDone: procedure expose m. done.
parse arg t, a, pr, p1
    if p1 == '' then
        p1 = pr
    if right(p1, 1) \== ' ' then
        p1 = p1' '
    if done.ini \== 1 then do
        done.ini = 1
        t = class4Name(t, t)
        p1 = p1'@'a' '
        end
    if done.t.a == 1 then
        return out(p1'done :'className(t) '@'a)
    done.t.a = 1
    if t = m.class.classO then do
        if a == '' then
            return out(p1'obj null')
        t = objClass(a, '')
        if t = '' then
            return out(p1'obj has no class @'m.a)
        else
            return classOutDone(t, a, pr, p1'isA')
        end

    if t == m.class.classV then
        return out(p1'=' m.a)
    if t == m.class.classW == 'w' then
        return out(p1'}' substr(a, 2))
    if m.t == 'f' then
        return classOutDone(m.t.class, a'.'m.t.name, pr, p1'.'m.t.name)
    if m.t == 'r' then do
        if m.a == '' then
            return out(p1'refTo :'className(m.t.class) '@null@')
        else
            return classOutDone(m.t.class, m.a, pr,
                    , p1'refTo @'m.a)
        end
    if m.t = 'u' then do
        t1 = m.t.1
        vv = m.t.0 > 0 & m.t.1 == m.class.classV
        call out p1 || if(m.t.name == '', 'union', ':'m.t.name) ,
             || copies(' =' m.a, vv)
        do ux=1+vv to m.t.0
            call classOutDone m.t.ux, a, pr' '
            end
        return 0
        end
    if m.t = 's' then do
        call out p1'stem' m.a.0
        do ux=1 to m.a.0
            call classOutDone m.t.class, a'.'ux, pr' ', pr' .'ux
            end
        return 0
        end
    if m.t = 'c' then do
        if m.t.name = m.a then
            call classOutDone m.t.class, a, pr, p1'choice' m.a
        return 0
        end
    if m.t = 'm' then
        return 0
    return err('bad class type' m.t)
endProcedure classOutDone
/* copy class end   ***************************************************/
/* copy map begin ******************************************************
    a map stores values at keys
    it may also maintain a list of keys
    the basic ideas are similar to the java Interface java.util.Map
    contrary to stems we also handle keys longer then 250 bytes
***********************************************************************/
/*--- initialize the module ------------------------------------------*/
mapIni: procedure expose m.
    if m.map.ini = 1 then
        return
    m.map.ini = 1
    call mIni
    m.map.0 = 0
    m.map.inlineSearch = 1
    call mapReset map.inlineName, map.inline
    return
endProcedure mapIni

mapInline: procedure expose m.
parse arg pName, opt
    if mapHasKey(map.inlineName, pName) then do
        im = mapGet(map.inlineName, pName)
        if pos('l', opt) < 1 & symbol('m.im.0') \== 'VAR' then do
            m.im.0 =  m.im.lEnd - m.im.lBegin - 1
            do ix=1 to m.im.0
                m.im.ix = strip(sourceline(ix+m.im.lBegin), 't')
                end
            end
        return im
        end
    name = '/'
    do lx = m.map.inlineSearch to sourceline()
        if \ abbrev(sourceline(lx), '$') then
            iterate
        li = sourceline(lx)
        s1 = pos('/', li)+ 1
        if s1 < 3 | s1 > 4 then
            iterate
        s2 = pos('/', li, s1)
        if s2 <= s1 then
            iterate
        if s1 == 3 then do
            if name \== substr(li, s1, s2-s1) then
                iterate
            im = 'MAP.INLINE.' || (m.map.inline.0+1)
            call mapAdd map.inlineName, name, im
            m.im.lBegin = lBeg
            m.im.lEnd = lx
            m.im.mark = mrk
            if name == pName then do
                m.map.inlineSearch = lx+1
                return mapInline(pName)
                end
            name = '/'
            end
        else if \ mapHasKey(map.inlineName,
                , substr(li, s1, s2-s1)) then do
            lBeg = lx
            mrk = substr(li, 2, s1-3)
            name = substr(li, s1, s2-s1)
            end
        else do
            name = '/'
            end
        end
    if pos('r', opt) > 0 then
        return ''
    return err('no inline data /'pName'/ found')
endProcedure mapInline

/*--- create a new map ----------------------------------------------*/
mapNew: procedure expose m.
parse arg opt
    m.map.0 = m.map.0 + 1
    return mapReset('MAP.'m.map.0 , opt)
endProcedure mapNew

/*--- make an empty map, if opt <> '' maintain stem of keys
                ('K' in map.keys, '=' in a else in opt) --------------*/
mapReset: procedure expose m.
    parse arg a, opt
    if symbol('m.map.keys.a') == 'VAR' then
        call mapClear a
    if opt = '=' then
        st = a
    else if translate(opt) = 'K' then
        st = 'MAP.KEYS.'a
    else
        st = opt
    m.map.keys.a = st
    if st \== '' then
        m.st.0 = 0
    return a
endProcedure

/*--- add a new key value pair to the map ----------------------------*/
mapAdd: procedure expose m.
parse arg a, ky, val
    vv = mapValAdr(a, ky, 'a')
    m.vv = val
    return val
endProcedure mapAdd

/*--- change the value at a key or add key value ---------------------*/
mapPut: procedure expose m.
parse arg a, ky, val
    vv = mapValAdr(a, ky, 'p')
    m.vv = val
    return val
endProcedure mapPut

/*--- return 1 if key ky exists in map a, 0 otherwise ----------------*/
mapHasKey: procedure expose m.
parse arg a, ky
    return mapValAdr(a, ky) \== ''
endProcedure mapHasKey

/*--- return the value of key ky in map a if it exists,
          else if called with a third argument return third argument
          else issue an error ----------------------------------------*/
mapGet: procedure expose m.
parse arg a, ky
    vv =  mapValAdr(a, ky)
    if vv \== '' then
        return m.vv
    else if arg() > 2 then
        return arg(3)
    else
        return err('missing key in mapGet('a',' ky')')
endProcedure mapGet

/*--- return a stem of all keys --------------------------------------*/
mapKeys: procedure expose m.
parse arg a
    if m.map.keys.a == '' then
        call err 'mapKeys('a') with no keys'
     return m.map.keys.a
endProcedure mapKeys

/*--- remove a key from the map, do nothing if it is missing ---------*/
mapRemove: procedure expose m.
parse arg a, ky
    vv = mapValAdr(a, ky)
    if vv == '' then
        return ''
    if m.map.keys.a \== '' then do
        trace ?R /* not tested yet ???wkTest */
        k = m.map.keys.a
        mx = m.k.0
        do i=1 to mx
            if m.k.i == ky then do
                m.k.i = m.k.mx
                m.k.0 = mx - 1
                return
                end
            end
        end
    val = m.vv
    drop m.a.ky
    return val
endProcedure mapRemove

/*--- remove all entries ---------------------------------------------*/
mapClear: procedure expose m.
parse arg a
    st = mapKeys(a)
    liLe = 243 - length(a)
    do kx=1 to m.st.0
        ky = m.st.kx
        drop m.st.kx
        if length(ky) <= liLe then do
            drop m.a.ky
            end
        else do
            adr = mapValAdr(a, ky)
            if adr \== '' then do
                ha = left(adr, lastPos('.', adr) - 3)
                do i = 1 to m.ha.k.0
                     drop m.ha.k.i m.ha.v.i
                     end
                 drop m.ha.k.0
                 end
            end
        end
    m.st.0 = 0
    return a
endProcedure mapClear

/*--- return the value pointer for a key, '' if non existing
             with fun = 'a' add a key, with 'p' put a key ------------*/
mapValAdr: procedure expose m.
parse arg a, ky, fun
    if length(ky) + length(a) <= 243 then do
        res = a'.'ky
         if symbol('m.res') == 'VAR' then do
            if fun == 'a' then
                call err 'duplicate key' ky 'in map' a
            return res
            end
        else if fun == '' then
            return ''
        end
    else do
        len = 243 - length(a)
        q = len % 4
        ha = a'.'left(ky, len - 2 * q) || substr(ky,
            , (length(ky)-len) % 2 + 2 * q, q) || right(ky, q)
        if symbol('M.ha.k.0') == 'VAR' then do
            do i=1 to m.ha.k.0
                if m.ha.k.i == ky then do
                    if fun == 'a' then
                        call err 'duplicate key' ky ,
                            'map' a 'hash' ha'.K.'i
                    return ha'.V.'i
                    end
                end
            end
        else do
            i = 1
            end
        if fun == '' then
            return ''
        if i > 9 then
            call err 'overflow long key' y 'in map' a 'hash' ha'.K.'i
        m.ha.k.0 = i
        m.ha.k.i = ky
        res = ha'.V.'i
        end
    if m.map.keys.a \== '' then
        call mAdd m.map.Keys.a, ky
    m.res = ''
    return res
endProcedure mapValAdr

/* copy map end *******************************************************/
/* copy m begin ********************************************************
  we use variables as follows
    m. stem m: all global data and object data that must survive
               a procedure call  (m for memory in Memoria of B5000)
        m.<mbr>.** to avoid conflicts: every rexx Module (copy) should
               only allocate addresses m.<mbr>.** with <mbr> the name of
               the rexx module
        we pass parameters around (e.g. a=address, m=memory, st=stem)
            and the called function may use m.a or m.a.subField etc.
    gg*: local variable in subroutines without procedure
    everything else: temporary data within procedure

  every subroutine is declared as procedure expose m.
        (also if no m. variable is used, because e.g. of error handling)
  the few subroutines that cannot use procedure, should use only
        variables starting with gg
***********************************************************************/
/*---make an area -----*/

mNewArea: procedure expose m.
parse arg nm, adr, newCd, freeCd
    m.m.area.0 = m.m.area.0 + 1
    a = 'M.AREA.'m.m.area.0
    if adr == '=' then
        adr = nm
    else if adr == '' then
        adr = 'M.'m.m.area.0
    if symbol('m.m.n2a.adr') == 'VAR' then
        call err 'adr' adr 'for area' nm 'already used'
    m.m.n2a.adr = a
    call mAlias adr, nm
    m.m.p2a.adr = a

    m.a.0 = 0
    m.a.free.0 = 0
    m.a.address = adr
    m.a.newCode = newCd
    m.a.freeCode = freeCd
    return nm
endProcedure mNewArea

mAlias: procedure expose m.
parse arg oldNa, newNa
    if symbol('m.m.n2a.oldNa') \== 'VAR' then
        call err 'area' oldNa 'does not exist'
    if oldNa == newNa then
        return
    if symbol('m.m.n2a.newNa') == 'VAR' then
        call err 'newName' newNa 'for old' oldNa 'already used'
    m.m.n2a.newNa = m.m.n2a.oldNa
    return
endProcedure mAlias

mBasicNew: procedure expose m. ggArea
parse arg name
    if symbol('m.m.n2a.name') \== 'VAR' then
        call err 'area' name 'does not exists'
    ggArea = m.m.n2a.name
    if m.ggArea.free.0 > 0 then do
        fx = m.ggArea.free.0
        m.ggArea.free.0 = fx-1
        m = m.ggArea.free.fx
        end
    else do
        m.ggArea.0 = m.ggArea.0 + 1
        m = m.ggArea.address'.'m.ggArea.0
        end
    return m
endProcedure mBasicNew

mNew: procedure expose m.
labelMNew:
parse arg name, arg, arg2, arg3
    m = mBasicNew(name)
    interpret m.ggArea.newCode
    return m
endProcedure mNew

mReset: procedure expose m.
parse arg a, name
    ggArea = m.m.n2a.name
    m = a
    interpret m.ggArea.newCode
    return m
endProcedure mReset

mFree: procedure expose m.
parse arg m
    p = 'M.P2A.'left(m, lastPos('.', m)-1)
    area = m.p
    if m.area.freeCode \== '' then
        interpret m.area.freeCode
    fx = m.area.free.0 + 1
    m.area.free.0 = fx
    m.area.free.fx = m
    return
endProcedure mFree
/*--- iterate over all allocate elements of an area ------------------*/
mIterBegin: procedure expose m.
parse arg nm
    a = m.m.n2a.nm
    return m.a.address'.0'
endProcedure mIterBegin

mIter: procedure expose m.
parse arg cur
    if cur == '' then
        return ''
    lx = lastPos('.', cur)
    p = 'M.P2A.'left(cur, lx-1)
    a = m.p
    ix = substr(cur, lx+1)
    do ix=ix+1 to m.a.0
        n = m.a.address'.'ix
        do fx=1 to m.a.free.0 while m.a.free \== n
            end
        if fx > m.a.free.0 then
            return n
        end
    return ''
endProcedure mIter

/*--- cut stem a to length len ---------------------------------------*/
mCut: procedure expose m.
parse arg a, len
    m.a.0 = len
    return a
endProcedure mCut

/*--- add one or several arguments to stem m.a -----------------------*/
mAdd: procedure expose m.
parse arg a
    ix = m.a.0
    do ax = 2 to arg()
        ix = ix + 1
        m.a.ix = arg(ax)
        end
    m.a.0 = ix
    return a'.'ix
endProcedure mAdd

/*--- pop last element from stem m.a ---------------------------------*/
mPop: procedure expose m.
parse arg a
    ix = m.a.0
    if ix < 1 then
        call err 'pop from empty stem' a
    m.a.0 = ix-1
    return m.a.ix
endProcedure mPop

/*--- add to m.dst.* a (sub)sequence of m.src.* ----------------------*/
mAddSt: procedure expose m.
    parse arg dst, src
    dx = m.dst.0
    do sx = 1 to m.src.0
        dx = dx + 1
        m.dst.dx = m.src.sx
        end
    m.dst.0 = dx
    return
endProcedure mAddSt

/*--- find position of first occurrence of ele in stem m,
        return 0 if nonemove a part of a stem -----------------------*/
mPos: procedure expose m.
parse arg m, ele, sx
    if sx == '' then
        sx = 1
    do x=sx to m.m.0
        if m.m.x = ele then
            return x
        end
    return 0
endProcedure mPos

/*--- move a part of a stem ------------------------------------------*/
mMove: procedure expose m.
parse arg m, sx, dx
    if dx < sx then do
        y = dx
        do x=sx to m.m.0
            m.m.y = m.m.x
            y = y + 1
            end
        end
    else if dx > sx then do
        y = m.m.0 + dx - sx
        do x=m.m.0 by -1 to sx
            m.m.y = m.m.x
            y = y - 1
            end
        end
    m.m.0 = m.m.0 + dx - sx
    return
endProcedure mMove

/*--- insert a stem into another ------------------------------------*/
mInsert: procedure expose m.
parse arg m, tx, st
    call mMove m, tx, tx+m.st.0
    do sx=1 to m.st.0
        dx = tx-1+sx
            m.m.dx = m.st.sx
            end
    return
endProcedure mInsert

/*--- strip all elements of a stem -----------------------------------*/
mStrip: procedure expose m.
parse arg st, opt
    if opt == '' then
        opt = 'b'
    do x=1 to m.st.0
        m.st.x = strip(m.st.x, opt)
        end
    return st
endProcedure mStrip

/*--- cat all elements of a stem together ----------------------------*/
mCat: procedure expose m.
parse arg st, mid
    if m.st.0 < 1 then
        return ''
    res = m.st.1
    do x=2 to m.st.0
        res = res || mid || m.st.x
        end
    return res
endProcedure mCat

mIni: procedure expose m.
    if m.m.ini = 1 then
        return
    m.m.ini = 1
    m.mAlfLC  = 'abcdefghijklmnopqrstuvwxyz'
    m.mAlfUC  = translate(m.mAlfLC)
    m.mAlfa   = m.mAlfLC || m.mAlfUC
    m.mAlfNum = m.mAlfa || '0123456789'
    m.mAlfDot = m.mAlfNum || '.'
    m.m.area.0 = 0
    call mNewArea
    return
endProcedure mIni
/* copy m end *********************************************************/
/* copy adrIsp begin *************************************************/
/**********************************************************************
    lmd: catalog read
    call sequence: lmdBegin, lmdNext*, lmdEnd
        mit lmd service (mit save in file und read,
                         weil list zu langsam und listcat abstürzt)
        1. arg (grp)     als group dataset für lmd save
                         und dd name für file read
***********************************************************************/
lmdBegin: procedure expose m.
    parse arg grp, lev
    call adrIsp 'lmdinit listid(lmdId) level('lev')'
    res = adrIsp('lmdlist listid(&lmdId) option(save) group('grp')', 4)
    call adrIsp 'lmdfree listid(&lmdId)'
    if res = 0 then do
        call trc timing() 'lmdlist save' grp lev
        call adrTso 'alloc dd('grp') shr dsn('grp'.datasets)'
        end
    else do
        call trc 'no datasets found' timing() 'lmdlist save' grp lev
        call adrTso 'alloc dd('grp') dummy'
        end
    call readDDBegin grp
return /* end lmdBegin */

lmdNext:
    parse arg ggGrp, ggSt, withVolume
    if \ readDD(ggGrp, ggSt) then
         return 0
    if withVolume \== 1 then
        do ggIx=1 to value(ggSt'0')
            x = value(ggSt || ggIx, word(value(ggSt || ggIx), 1))
            end
    return 1
endSubroutin lmdNext

lmdEnd: procedure expose m.
    parse arg grp
    call readDDEnd grp
    call adrTso 'free dd('grp')'
return /* end lmdEnd */

lmd: procedure expose m.
    parse arg lev, withVol
    call lmdBegin gg1, lev
    do while lmdNext(gg1, q., withVol)
        do x=1 to q.0
           call out q.x
           end
        end
    call lmdEnd gg1
    return
endProcedure lmd
/**********************************************************************
    member list of a pds:
        call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmm: procedure expose m.
parse arg dsn
    id = lmmBegin(dsn)
    do ix=1 by 1
        m = lmmNext(id)
        if m = '' then
            leave
        call out m
        end
    call lmmEnd id
    return
endProcedure lmm

lmmBegin: procedure expose m.
parse arg dsn
    mbr = dsnGetMbr(dsn)
    pds = dsnSetMbr(dsn, )
    call adrIsp "LMINIT DATAID(lmmId) DATASET('"pds"') ENQ(SHRW)"
    call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
    res = lmmId
    if mbr <> '' then
        res = res 'pattern('mbr')'
    return res
endProcedure lmmBegin

lmmEnd: procedure expose m.
parse arg lmmId opt
    call adrIsp "LMMLIST DATAID("lmmId") option(free)", 8
    call adrIsp "LMCLOSE DATAID("lmmId")"
    call adrIsp "LMFREE DATAID("lmmId")"
    return
endProcedure lmmEnd

lmmNext: procedure expose m.
parse arg lmmId opt
    if adrIsp("LMMLIST DATAID("lmmid")" ,
               "OPTION(LIST) MEMBER(Mbr)" opt, 4 8) = 0 then
        return strip(mbr)
    else
        return ''
endProcedure lmmNext

lmmRm: procedure expose m.
parse arg dsn, mbrs
    mbrs = dsnGetMbr(dsn) mbrs
    pds = dsnSetMbr(dsn, )
    call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
    call adrIsp "LMOPEN DATAID("lmmId") OPTION(OUTPUT) "
    err = ''
    do wx=1 to words(mbrs)
        m1 = word(mbrs, wx)
        rr = adrIsp("lmmDel dataid("lmmId") member("m1")", 0 8 12)
        if rc = 0 then
            say 'removed' m1 'from' pds
        else if rc = 8 then
            say 'not found' m1 'in' pds
        else do
            err = 'error deleting' m1 'in' pds 'rc' rr strip(zerrlm)
            say err
            leave
            end
        end
    call adrIsp "LMCLOSE DATAID("lmmId")"
    call adrIsp "LMFREE DATAID("lmmId")"
    if err <> '' then
        call err err
    return
endProcedure lmmRm
/*--- address ispf with error checking -------------------------------*/
adrIsp:
    parse arg ggIspCmd, ggRet
    address ispexec ggIspCmd
    if rc = 0 then return 0
    else if ggRet == '*' then return rc
    else if wordPOS(rc, ggRet) > 0 then return rc
    else
        call err 'adr ispExec rc' rc 'in' ggIspCmd':' strip(zerrlm)
endSubroutine adrIsp

/*--- address editor with error checking -----------------------------*/
adrEdit:
    parse arg ggEditCmd, ggRet
    address isrEdit ggEditCmd
    if rc = 0 then return 0
    else if ggRet == '*' then return rc
    else if wordPOS(rc, ggRet) > 0 then return rc
    else
        call err 'adr isrEdit rc' rc 'for' ggEditCmd
endSubroutine adrEdit
/* copy adrIsp end   *************************************************/
/* copy fileTso begin *************************************************/
fileTsoReset: procedure expose m.
parse arg m, sp
    m.m.readIx = 'c'
    if symbol('m.m.defDD') \== 'VAR' then do
        m.fileTso.buf = m.fileTso.buf + 1
        m.m.defDD = 'CAT'm.fileTso.buf
        m.m.buf = 'FILETSO.BUF'm.fileTso.buf
        m.m.spec = sp
        end
    if sp \== '' then do
        m.m.spec = dsnSpec(sp)
        rr = translate(subword(m.m.spec, 4))
        m.m.stripT = \ (pos(':V', rr) > 0 | pos('RECFM(V', rr) > 0)
        end
    return m
endProcedure fileTsoReset

fileTsoOpen: procedure expose m.
parse arg m, opt
    buf = m.m.buf
    if opt == m.j.cRead then do
        aa = dsnAlloc(m.m.spec, 'SHR', m.m.defDD)
        if m.dsnAlloc.dsn <> '' then
            if sysDsn("'"m.dsnAlloc.dsn"'") <> 'OK' then
                call err 'cannot read' m.dsnAlloc.dsn':',
                               sysDsn("'"m.dsnAlloc.dsn"'")
        call readDDBegin word(aa, 1)
        m.m.jReading = 1
        m.buf.0 = -1
        m.m.readIx = 0
        end
    else do
        if opt == m.j.cApp then
            aa = dsnAlloc(m.m.spec, 'MOD', m.m.defDD)
        else if opt == m.j.cWri then
            aa = dsnAlloc(m.m.spec, 'OLD', m.m.defDD)
        else
            call err 'fileTsoOpen('m',' opt') with bad opt'
        call writeDDbegin word(aa, 1)
        m.m.jWriting = 1
        m.buf.0 = 0
        m.m.readIx = 'w'
        end
    m.m.dd = word(aa, 1)
    m.m.free = subword(aa, 2)
    m.m.dsn = m.dsnAlloc.dsn
    return m
endProcedure fileTsoOpen

fileTsoClose: procedure expose m.
parse arg m
    buf = m.m.buf
    if m.m.readIx \== 'c' then do
        if m.m.readIx == 'w' then do
            if m.buf.0 > 0 then
                call writeDD m.m.dd, 'M.'BUF'.'
            call writeDDend m.m.dd
            end
        else do
            call readDDend m.m.dd
            end
        interpret m.m.free
        end
    m.buf.0 = 'closed'
    m.m.readIx = 'c'
    m.m.free  = ''
    m.m.dd    = ''
    return m
endProcedure fileTsoClose

fileTsoRead: procedure expose m.
parse arg m, var
    ix = m.m.readIx + 1
    buf = m.m.buf
    if ix > m.buf.0 then do
        res = readDD(m.m.dd, 'M.'buf'.')
        if \ res then
            return 0
        ix = 1
        end
    m.m.readIx = ix
    m.var = m.buf.ix
    call oMutate var, m.class.classV
    return 1
endProcedure fileTsoRead

fileTsoWrite: procedure expose m.
parse arg m, var
    buf = m.m.buf
    ix = m.buf.0 + 1
    m.buf.0 = ix
    if m.m.stripT then
        m.buf.ix = strip(var, 't')
    else
        m.buf.ix = var
    if ix > 99 then do
        call writeDD m.m.dd, 'M.'buf'.'
        m.buf.0 = 0
        end
    return
endProcedure fileTsoWrite

fileTsoWriteO: procedure expose m.
parse arg m, var
    if objClass(var, m.class.classV) == m.class.classV then do
        call fileTsoWrite m, m.var
        return
        end
    call err 'fileTsoWriteO('m',' var') cannot write objects of class',
                              objClass(var)
endProcedure fileTsoWriteO

fSub: procedure expose m.
    return file('.sysout(T) writer(intRdr)')
endProcedure fSub

fEdit: procedure expose m.
parse arg spec, vw
    if spec == '' then
        spec = 'new ::f'
    else if abbrev(spec, '::') then
        spec = 'new' spec
    else if abbrev(spec, ':') then
        spec = 'new' ':'spec
    f  = mNew('FileEdit', spec)
    m.f.editType = if(abbrev(translate(vw), 'V'), 'view', 'edit')
    return f
endProcedure fEdit

fileTsoEditClose: procedure expose m.
parse arg m
    dsn = m.m.dsn
    if dsn \== '' then do
        call fileTsoClose m
        call adrIsp m.m.editType "dataset('"dsn"')", 4
        return
        end
    fr = m.m.free
    dd = m.m.dd
    m.m.free = ''
    call fileTsoClose m
    call adrIsp "LMINIT DATAID(lmmId) ddName("dd") ENQ(SHRW)"
    eRc = adrIsp(m.m.editType "dataid("lmmId")", '*')
    lRc = adrIsp("LMFree DATAID("lmmId")", '*')
    interpret fr
    if (eRc \== 0 & eRc \== 4) | lRc \== 0 then
        call err m.m.editType 'rc' eRc', lmFree rc' lRc
    return
endProcedure fileTsoEditClose

fileTsoIni: procedure expose m.
    if m.fileTso.ini == 1 then
        return
    m.fileTso.ini = 1
    m.file.sep = '.'
    m.fileTso.buf = 0
    call jIni
    um = "call err 'for tso undefined method'"
    call classNew "n File u JRW", "m",
        , "jOpen  call fileTsoOpen m, opt",
        , "jReset call fileTsoReset m, arg",
        , "jClose call fileTsoClose m",
        , "jRead return fileTsoRead(m, var)",
        , "jWrite call fileTsoWrite m, line",
        , "jWriteO call fileTsoWriteO m, var",
        , "filePath return word(m.m.spec, 1)"           ,
        , "fileIsFile" um "'fileIsFile'"      ,
        , "fileIsDir   return 1"              ,
        , "fileChild   return file(word(m.m.spec, 1)'.'name opt)",
        , "fileRm"     um "'fileRm'"          ,
        , "fileMkDir"  ,
        , "fileRmDir"  um "'fileRmDir'"
 /*     , "filePath return m.m.stream%%qualify",
        , "fileIsFile return sysIsFile(m.m.stream%%qualify)" ,
        , "fileIsDir return sysIsFileDirectory(m.m.stream%%qualify)" ,
        , "fileChild return file(m.m.stream%%qualify'/'name)",
        , "fileRm return adrSh(m.m.spec)",
        , "fileMkDir return adrSh('mkdir' m.m.stream%%qualify)" ,
        , "fileRmDir return fileLinuxRmDir(m, opt)" */
    call classNew "n FileList u JRW", "m",
        , "jReset if arg2 == 'r' then m.m.dsnMask=arg'.**';",
                                "else m.m.dsnMask=arg'.*';",
        , "jOpen  call csiOpen m, m.m.dsnMask",
        , "jClose" ,
        , "jRead return csiNext(m, var)"
    call classNew "n FileEdit u File", "m",
        , "jClose call fileTsoEditClose m"
    return
endProcedure fileTsoIni
/* copy fileTso end   *************************************************/
/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
    parse arg ggTsoCmd, ggRet
    address tso ggTsoCmd
    if rc == 0                     then return 0
    else if ggRet == '*'           then return rc
    else if wordPos(rc, ggRet) > 0 then return rc
    else
        call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */

/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure expose m.
parse upper arg dsn ., addPrefix
    if left(dsn,1) = "'" then
        return strip(dsn, 'b', "'")
    sp = sysvar('SYSPREF')
    if sp == '' then
        sp = userid()
    cx = pos('~', dsn)
    if cx < 1 & addPrefix == 1 then
        return sp'.'dsn
    do while cx \== 0
        le = left(dsn, cx-1)
        ri = substr(dsn, cx+1)
        if right(le, 1) == '.' | left(ri, 1) == '.' then
            dsn = le || sp || ri
        else
            dsn = le || left('.', le \== '') || sp ,
                     || left('.', ri \== '') || ri
        cx = pos('~', spec, cx)
        end
    return dsn
endProcedure dsn2Jcl

/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure expose m.
parse arg dsn .
    return "'"dsn"'"
endProcedure jcl2dsn

dsnSetMbr: procedure expose m.
parse arg dsn, mbr
     bx = pos('(', dsn)
     if bx > 0 then
         dsn = strip(left(dsn, bx-1))
     if mbr <> '' then
         dsn = dsn'('strip(mbr)')'
     return dsn
endProcedure dsnSetMbr

dsnGetMbr: procedure expose m.
parse arg dsn
     lx = pos('(', dsn)
     rx = pos(')', dsn, lx+1)
     if lx < 1 then
         return ''
     else if lx < rx then
         return substr(dsn, lx+1, rx-lx-1)
     else
         return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
    io: read or write a dataset with the following callsequences:
        read:  readDDBegin, readDD*,  readDDEnd
        write: writeBegin,  writeDD*, writeEnd

        readDD returns true if data read, false at eof
***********************************************************************/

/*--- prepare reading from a DD --------------------------------------*/
readDDBegin: procedure expose m.
    parse upper arg ggDD
    call errAddCleanup 'call readDDEnd' ggDD', "*"'
return /* end readDDBegin */

/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt = '' then
        ggCnt = 100
    call adrTso 'execio' ggCnt 'diskr' ggDD '(stem' ggSt')', 2
    return (value(ggSt'0') > 0)
return /* end readDD */

/*--- finish reading DD  ggDD ----------------------------------------*/
readDDEnd: procedure expose m.
    parse upper arg ggDD, ggRet
    call errRmCleanup 'call readDDEnd' ggDD', "*"'
    return adrTso('execio 0 diskr' ggDD '(finis)', ggRet)
endProcedure readDDEnd

/*--- prepare writing to DD ggDD -------------------------------------*/
writeDDBegin: procedure expose m.
    parse upper arg ggDD
                  /* ensure file is erased, if no records are written */
    call adrTso 'execio' 0 'diskw' ggDD '(open)'
    call errAddCleanup 'call writeDDEnd' ggDD', "*"'
return /* end writeDDBegin */

/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    call adrTso 'execio' ggCnt 'diskw' ggDD '(stem' ggSt')'
    return
endSubroutine writeDD

/*--- end writing to dd ggDD (close) --------------------------------*/
writeDDEnd: procedure expose m.
parse upper arg ggDD, ggRet
    call errRmCleanup 'call writeDDEnd' ggDD', "*"'
    return adrTso('execio 0 diskw' ggDD '(finis)', ggRet)
endProcedure writeDDEnd

/*--- readNx: read next line, using buffer ---------------------------*/
/*--- begin: allocate dsnSpec and ini ------------------------ -------*/
readNxBegin: procedure expose m.
    parse arg m, m.m.dsn, m.m.dd, m.m.Cnt
    if m.m.dd = '' then
        m.m.dd = 'DDNX'
    if m.m.cnt = '' then
        m.m.cnt = 1000
    m.m.cx = m.m.cnt + 999
    m.m.buf0x = 0
    m.m.0 = 0
    call dsnAlloc 'dd('m.m.dd')' m.m.dsn
    call readDDBegin m.m.dd
    return m
endProcedure readDDNxBegin

/*--- return the stem of the next line, or '' at end -----------------*/
readNx: procedure expose m.
parse arg m
    ix = m.m.cx + 1
    m.m.cx = ix
    if m.m.cx <= m.m.0 then
        return m'.'ix
    m.m.buf0x = m.m.buf0x + m.m.0
    if \ readDD(m.m.dd, 'M.'m'.', m.m.cnt)then
        return ''
    m.m.cx = 1
    return m'.1'
endProcedure readDDNx

/*--- return the position (line number) of reader
           plus le characters of the current line (default 50) ------*/
readnxPos: procedure expose m.
parse arg m, le
    li = m'.'m.m.cx
    li = strip(m.li, 't')
    if arg() < 2 then
        le = 50
    if le < 1 then
        li = ''
    else if length(li) <= le then
        li = ':' li
    else
        li = ':' left(li, le-3)'...'
    return 'line' (m.m.buf0x + m.m.cx)li
endProcedure readnxPos

/*--- close and deallocate ------------------------------------------*/
readNxEnd: procedure expose m.
parse arg m
    call readDDEnd m.m.dd
    call tsoFree m.m.dd
    return
endProcedure readDDNxEnd

/*--- standardise a dsn spec
       word1             dsName or -
       word2             dd     or -
       word3             disp   or -
       word4 to first :  attributes in tso format
       after first :     attributes for new allocation
----------------------------------------------------------------------*/
dsnSpec: procedure expose m.
parse upper arg spec
    rr = ''      /* put leading - in separate words */
    do sx=1 while words(rr) < 3 & wx \= ''
        wx = word(spec, sx)
        do while abbrev(wx, '-') & words(rr) < 3
            wx = substr(wx, 2)
            rr = rr '-'
            end
        rr = rr wx
        end
    spec = rr subWord(spec, sx)
    na = ''
    dd = ''
    di = ''
    if left(spec, 1) = '&' then /* external spec is handled ok */
        spec = strip(substr(spec, 2))
    do wx=1 by 1
        w = word(spec, wx)
        if w = '' | abbrev(w, '.') | abbrev(w, ':') then
            leave
        else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
            di = w
        else if w = 'CATALOG' then
            di = di w
        else if abbrev(w, 'DD(') then
            dd = substr(w, 4, length(w)-4)
        else if abbrev(w, 'DSN(') then
            na = strip(substr(w, 5, length(w)-5))
        else if na == '' then
            na = dsn2jcl(w)
        else if dd == '' then
            dd = w
        else if di == '' then
            di = w
        else
            leave
        end
    if na == '' then
        na = '-'
    else if abbrev(na, "'") then
        na = substr(na, 2, length(na)-2)
    if dd == '' then dd = '-'
    if di == '' then di = '-'
    re = subword(spec, wx)
    if abbrev(re, '.') then
        re = substr(re, 2)
    return na dd di re
endProcedure dsnSpec

/*--- alloc a dsn with dsnAlloc
          if the dsn is inuse wait and retry
          until either the allocation is successfull
          or the timeout occurs --------------------------------------*/
dsnAllocWait: procedure expose m.
parse upper arg spec, pDi, pDD, timeOut
    x = max(1, arg() - 1)
    do rt=0
        m.adrTsoAl.1 = ''
        m.adrTsoAl.2 = ''
        m.adrTsoAl.3 = ''
        call outtrap m.adrTsoAl.
        res = dsnAlloc(spec, pDi, pDD, '*')
        call outtrap off
        if \ abbrev(res, ' ') then
            return res
        msg = m.adrTsoAl.1'\n'm.adrTsoAl.2'\n'm.adrTsoAl.3
        if rt > timeOut & timeOut \== '' then
            return err('timeout allocating' spec time() '\n'msg)
        if pos('DATA SET IS ALLOCATED TO ANOTHER', msg) < 1 then
            return err('allocating' spec'\n'msg)
        say time() 'sleep and retry alloc' spec
        call sleep 1, 0
        end
endProcedure dsnAllocWait

/*--- alloc a dsn or a dd
          spec '-'<ddName>
               datasetName? disposition? '.'? attributes? (':' newAtts)?
          disp default disposition
          dd   default dd name
          retRc   erlaubte ReturnCodes (leer = 0)
          returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, pDi, pDD, retRc
    parse value dsnSpec(spec) with na dd di rest
    if na = '-' then
        m.dsnAlloc.dsn = ''
    else
        m.dsnAlloc.dsn = na
    if na == '-' & dd \== '-' & di == '-' & rest = '' then
        return dd
    if dd == '-' & pDD \== '' then
        dd = pDD
    if dd == '-' then do
        if symbol('m.adrTso.ddNum') = 'VAR' then
            dd = m.adrTso.ddNum + 1
        else
            dd = 1
        m.adrTso.ddNum = dd
        dd = 'DD' || dd
        end
    if di = '-' & pDi \== '' then
        di = pDi
    if di = '-' then
        di = 'SHR'
    else if pos('(', na) < 1 then
        nop
    else if di = 'MOD' then
        call err 'disp mod for' na
    else
        di = 'SHR'
    if pos('/', na) > 0 then
        return csmAlloc(na dd di rest, retRc)
    else
        return tsoAlloc(na dd di rest, retRc)
endProcedure dsnAlloc

tsoAlloc: procedure expose m.
parse arg na dd disp rest ':' nn, retRc
    c = 'alloc dd('dd')' disp
    if na \== '-' then
        c = c "DSN('"na"')"
    else if disp = 'NEW' and nn \== '' then
        c = c dsnCreateAtts(,nn)
    call outtrap m.adrTsoAl.
    alRc = adrTso(c rest, '*')
    call outtrap off
    if alRc =  0 then do
        call errAddCleanup 'call tsoFree' dd', "*"'
        return dd 'call tsoFree' dd';'
        end
    if nn \= '' & wordPos(disp, 'OLD SHR') > 0 ,
          & sysDsn("'"m.dsnAlloc.dsn"'") == 'DATASET NOT FOUND' then do
        say 'tsoAlloc creating' c rest ':'nn
        call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(na, nn)
        call adrTso 'free  dd('dd')'
        return tsoAlloc(na dd disp rest, retRc)
        end
    do ax=1 to m.adrTsoAl.0
        say m.adrTsoal.ax
        end
    if retRc = '*' | wordPos(alRc, retRc) > 0 then
        return ' ' alRc
    call err 'tsoAlloc rc' alRc 'for' c rest
endProcedure tsoAlloc

tsoAtts: procedure expose m.
parse arg dsn
    rc = listDsi("'"dsn"' SMSINFO")
    if rc = 0 then
        mv = ''
    else if rc = 4 & sysReason = 19 then do
        mv = 'UNITCNT(30)'
        say 'multi volume' mv
        end
    else if rc ^= 0 then
        call err 'listDsi rc' rc 'reason' sysReason,
                             sysMsgLvl1 sysMsgLvl2
    al = 'CAT'
    al = ''
    if right(sysDsSms, 7) == 'LIBRARY' ,
        | abbrev(sysDsSms, 'PDS') then
         al = al 'DSNTYPE(LIBRARY)'
    if sysUnits = 'TRACK' then
        sysUnits = 'TRACKS'
    al = al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
        "DATACLAS("sysDataClass")" ,
        "RECFM("translate('1 2 3', ' 'sysREcFM, ' 123')")",
        "LRECL("SYSLRECL")",
        "blksize("sysBLkSIZE")",
        "SPACE("sysPrimary"," sysSeconds")" sysUnits mv
    return al
endProcedure tsoAtts

tsoFree: procedure expose m.
parse arg dd, ggRet
    call adrTso 'free dd('dd')', ggRet
    call errRmCleanup 'call tsoFree' dd', "*"'
    return
endProcedure tsoFree

dsnCreateAtts: procedure expose m.
parse arg dsn, atts, forCsm
    forCsm = forCsm == 1
    aU = ' 'translate(atts)
    if abbrev(atts, ':') then do
        parse var atts a1 atts
        bl = 32760
        rl = substr(a1, 3)
        if abbrev(a1, ':F') then do
            if rl = '' then
                rl = 80
            recfm='f b'
            bl = bl - (bl // rl)
            end
        else do
            if rl = '' then
                rl = bl-4
            recfm = substr(a1, 2, 1) 'b'
            end
        if forCsm then
            atts =  atts "recfm("space(recfm, 0)") lrecl("rl")",
                    "blkSize("bl")"
        else
            atts = atts "recfm("recfm") lrecl("rl") block("bl")"
        end
    if pos('(', dsn) > 0 & pos(' DSNTYPE(', aU) < 1 ,
                         & pos(' DSORG(',   aU) < 1 then
        atts = atts 'dsntype(library) dsorg(po)'
    if pos(' MGMTCLAS(', aU) < 1 then
        atts = atts 'mgmtclas(COM#A091)'
    if pos(' SPACE(', aU) < 1 then
        if forCsm then
            atts = atts 'space(10, 1000) cylinder'
        else
            atts = atts 'space(10, 1000) cyl'
    if dsn == '' then
       return atts
    return "dataset('"dsnSetMbr(dsn)"')" atts
endProcedure dsnCreateAtts

/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
    ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
    call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
    interpret subword(ggAlloc, 2)
    return
endSubroutine readDsn

/*--- write the dataset specified in ggDsnSpec from stem ggSt
          write ggCnt records if not empty otherwise ggst0
          if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
    call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
            '(stem' ggSt 'open finis)'
    interpret subword(ggAlloc, 2)
    if ggSay == 1 | m.debug == 1 then
       say ggCnt 'records written to' ggDsnSpec
    return
endSubroutine writeDsn

copyDSN: procedure expose m.
parse arg frSpec, toSpec, ggSay
    frDD = dsnAlloc(frSpec, 'SHR', 'FRDD')
    toDD = dsnAlloc(toSpec, 'OLD', 'TODD')
    call readDDBegin word(frDD, 1)
    call writeDDBegin word(toDD, 1)
    cnt = 0
    do while readDD(word(frDD, 1), r.)
        call writeDD word(toDD, 1), r.
        cnt = cnt + r.0
        end
    call readDDEnd word(frDD, 1)
    call writeDDEnd word(toDD, 1)
    interpret ';' subword(frDD, 2) '; ; ;' subword(toDD, 2)
    if ggSay == 1 | m.debug == 1 then
       say cnt 'records copied from' frSpec 'to' to toSpec
    return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
/* copy err begin ******************************************************
    messages, errorhandling,help
***********************************************************************/
errIni: procedure expose m.
    if m.err.ini == 1 then
        return
    call outIni
    m.err.ini     = 1
    m.err.handler = ''
    m.err.cleanup = ';'
    m.err.opt     = ''
    return
endProcedure errIni
/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
    call errIni
    parse arg m.err.opt, m.err.handler
    if pos('I', translate(m.err.opt)) > 0 then
        if errOS() \== 'LINUX' then
            if sysVar('sysISPF') = 'ACTIVE' then
                    call adrIsp 'control errors return'
    return
endSubroutine errReset

/*--- error routine: abend with message ------------------------------*/
err:
    parse arg ggTxt, ggOpt
    call errIni
    drop err handler cleanup opt call return
    if ggOpt == '' & m.err.handler \== '' then do
        if 1 then do /* no detection of recursive err call loop
                        --> will anyway fail by stack overflow */
            interpret m.err.handler
            end
        else do
                     /* avoid recursive err call loop */
            drop call return
            if symbol('m.err.call') \== 'VAR' then
                m.err.call = 1
            else
                m.err.call = m.err.call + 1
            if m.err.call > 10 then do
                say 'errHandler loop:' m.err.handler
                end
            else do
                m.err.return = 1
                call errInterpret m.err.handler
                m.err.call = m.err.call - 1
                if m.err.return then
                    return result
                end
            end
        end
    call outPush
    call errSay ggTxt, 'e'
    call errCleanup
    if ggOpt == '' then
        ggOpt = m.err.opt
    ggOpt = translate(ggOpt)
    if pos('T', ggOpt) > 0  then do
        trace ?r
        say 'trace ?r in err'
        end
    if pos('H', ggOpt) > 0  then do
        call errSay 'divide by zero to show stackHistory', 'e'
        x = 1 / 0
        end
    call errSay 'exit(12)', 'e'
    exit errSetRc(12)
endSubroutine err

/*--- error routine: user message cleanup exit -----------------------*/
errEx:
    parse arg ggTxt
    call errIni
    call outPush
    call errSay ggTxt
    call errCleanup
    exit 8
endProcedure errEx

errAddCleanup: procedure expose m.
parse arg code
    if m.err.ini \== 1 then
        call errIni
        /* concatenate backwards, then it is executed also backwards */
    m.err.cleanup = ';'code || m.err.cleanup
    return
endProcedure errAddCleanup

errRmCleanup: procedure expose m.
parse arg code
    if m.err.ini \== 1 then
        call errIni
    cx = pos(';'code';', m.err.cleanup)
    if cx > 0 then
        m.err.cleanup = left(m.err.cleanup, cx) ,
                     || substr(m.err.cleanup, cx + length(code)+2)
    return
endProcedure errRmCleanup

errCleanup: procedure expose m.
    call errIni
    cl = m.err.cleanup
    if cl = ';' then
        return
    m.err.cleanup = ';'
    call out 'err cleanup begin' cl
    call errInterpret cl
    call out 'err cleanup end' cl
    return
endProcedure errCleanup

errInterpret: procedure expose m.
parse arg code
    interpret code
    m.err.return = 0
    return
endProcedure errInterpret
/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
    interpret 'assertRes =' arg(1)
    if \ assertRes then
        call err 'assert failed' arg(1)':' arg(2)
    return
endProcedure assert

/*--- output an errorMessage msg with pref pref
           split message in lines at '/n' ---------------------------*/
errSay: procedure expose m.
parse arg msg, pref
    parse source . . ggS3 .                           /* current rexx */
    if pref == 'e' then
        msg = 'fatal error in' ggS3':' msg
    else if pref == 'w' then
        msg = 'warning in' ggS3':' msg
    else if pref \== '' then
        msg = pref':' msg
    return outNl(msg)
endProcedure errSay

/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg, op
    call errSay msg, 'e'
    call help
    call err msg, op
endProcedure errHelp

/*--- return the Operating System we are running on: TSO or LINUX ---*/
errOS: procedure expose m.
    parse source os .
    return os
endProcedure errOS

/*--- set rc for ispf: -------------------------------------------------
    if a cmd is run by ispStart, its RC is ignored,
         but ISPF passes the value of the shared varible 3IspfRc
         back as return code
----------------------------------------------------------------------*/
errSetRc: procedure expose m.
parse arg zIspfRc
    if errOS() \== 'LINUX' then
           if sysVar('sysISPF') = 'ACTIVE' then
            address ispExec vput 'zIspfRc' shared
    return zIspfRc
endProcedure errSetRc

/*--- output a trace message if m.tr is set -----------------------*/
trc: procedure expose m.
parse arg msg
    if m.trace == 1 then
        call out 'trc:' msg
    return
endProcedure trc

debug: procedure expose m.
parse arg msg
    if m.debug == 1 then
        call out 'debug' msg
    return
endProcedure debug

/*--- display the first comment block of the source as help ----------*/
help: procedure expose m.
    parse source . . s3 .
    call out right(' help for rexx' s3, 79, '*')
    do ax=1 to arg()
        say ' ' arg(ax)
        end
    do lx=1 by 1
        if pos('/*', sourceLine(lx)) > 0 then
            leave
        else if lx > 10 then do
            call out 'initial commentblock not found for help'
            return
            end
        end
    do lx=lx+1 by 1
        li = strip(sourceLine(lx), 't', ' ')
        if pos('*/', li) > 0 then
            leave
        call out li
        end
    call out right(' end help for rexx' s3, 79, '*')
    return 4
endProcedure help

/*--- output all lines (separated by '\n') of all args --------------*/
outNl: procedure expose m.
    do ax=1 to max(1, arg())
        msg = arg(ax)
        sx = 0
        bx = -1
        do lx=1 until bx >= length(msg)
                ex = pos('\n', msg, bx+2)
            if ex < 1 then
                ex = length(msg)+1
            call out substr(msg, bx+2, ex-bx-2)
            bx = ex
         end
        end
    return 0
endProcedure outNl
/* copy err end   *****************************************************/
/* copy ut begin  *****************************************************/
/*--- if function  warning all3 arguments get evaluated|
                   e.g if(x=0, 'infinity', 1/0) will fail| -----------*/
if: procedure expose m.
parse arg co, ifTrue, ifFalse
    if co then
        return ifTrue
    else
        return ifFalse
endProcedure if
/*--- embedded ASSignement:
      assign the second argument to the variable with name in first arg
      and return the value assigned ----------------------------------*/
ass:
    call value arg(1), arg(2)
    return arg(2)
/*--- embedded ASSignement only if NotNull:
      assign the second argument to the variable with name in first arg
      if the second arg is not null, return new value ---------------*/
assIf:
    if arg(2) == '' then
        return value(arg(1))
    call value arg(1), arg(2)
    return arg(2)

/*--- return first nonNull argument ---------------------------------*/
nn:
    if arg(1) \== '' then
        return arg(1)
    if arg(2) \== '' then
        return arg(2)
    call err 'nn() both args empty'

/*--- embedded ASSignement return NotNull:
      assign the second argument to the variable with name in first arg
      and return 1 if value not null, 0 if null ----------------------*/
assNN:
    call value arg(1), arg(2)
    return arg(2) \== ''

/*--- return current time and cpu usage ------------------------------*/
timing: procedure expose m.
return return time() 'ela='time('E') 'cpu='sysvar('syscpu'),
            'su='sysvar('syssrv')

timingTest: procedure expose m.
    say 'begin' timing()  sysvar('sysnode')
    do 30000000
       end
    say 'end  ' timing()
return

/*--- sleep several seconds ------------------------------------------*/
sleep: procedure expose m.
parse arg secs, sayIt
    if sayit <> 0 then
        say 'sleeping' secs 'secs' time()
    CALL SYSCALLS 'ON'
    ADDRESS SYSCALL "sleep" secs
    CALL SYSCALLS 'OFF'
    if sayit <> 0 then
        say 'slept' secs 'secs' time()
    return
endProcedure sleep

/*--- quote string txt using quoteChar qu ("""" ==> ") ---------------*/
quote: procedure expose m.
parse arg txt, qu
    if qu = '' then
        qu = '"'
    res = qu
    ix = 1
    do forever
        qx = pos(qu, txt, ix)
        if qx = 0 then
            return res || substr(txt, ix) || qu
        res = res || substr(txt, ix, qx-ix) || qu || qu
        ix = qx + length(qu)
        end
endProcedure quote

/*--- return the count of occurrences of needle in heyStack ----------*/
posCount: procedure expose m.
parse arg needle, hayStack, start, fin
    if start = '' then
        start = 1
    if fin = '' then
        fin = length(hayStack) + 1 - length(needle)
    do cnt = 0 by 1
        start = pos(needle, haystack, start)
        if start < 1 | start > fin then
             return cnt
        start = start + length(needle)
        end
endProcedure posCount

repAll: procedure expose m.
parse arg src, w, new
    res = ''
    cx = 1
    do forever
        nx = pos(w, src, cx)
        if nx < 1 then
            return res || substr(src, cx)
        res = res || substr(src, cx, nx-cx) || new
        cx = nx + length(w)
        end
endProcedure repAll

repAllWords: procedure expose m.
parse arg src, w, new
    res = ''
    wx = 0
    cx = 1
    do forever
        wx = wordPos(w, src, wx+1)
        if wx < 1 then
            return res || substr(src, cx)
        nx = wordindex(src, wx)
        res = res || substr(src, cx, nx-cx) || new
        cx = nx + length(w)
        end
endProcedure repAllWords
/* copy ut end ********************************************************/
/* copy out begin ******************************************************
    out interface with simplistic implementation
***********************************************************************/
outIni: procedure expose m.
parse arg msg
    if m.out.ini == 1 then
        return
    m.out.ini = 1
    m.out.dst = ''
    return
endProcedure outIni

/*--- output a message to the current destination -------------------*/
out: procedure expose m.
parse arg msg
    if m.out.ini \== 1 then
        call outIni
    if m.out.dst == '' then do
        say msg
        end
    else do
        st = m.out.dst
        sx = m.st.0 + 1
        m.st.0 = sx
        m.st.sx = msg
        end
    return 0
endProcedure out

/*--- push an out destination ---------------------------------------*/
outPush: procedure expose m.
parse arg m.out.dst
    return
endProcedure outPush
/* copy out end   *****************************************************/
    COMMIT;
    CREATE unique index vdps2.iixdu on VDPS2.DTUNDERFIXCOMQ
    alter         index vdps2.iixduZwei on VDPS2.DTUNDERFIXCOMQ
    create lob tablespace a123 in db123
    create synonym syefgh for own123.taefgh
    CREATE TABLE VDPS2.DTUNDERFIXCOMP
    alter  table  oa1a038.twk003a
    alter  table  gdb9998.twk003a
    commit sdf sdf; CREATE TABLE "VDPS3 "
       . -- sdf sdf
       -- sdf
       "vdps table drei " ; create alias efg.hik
                          -s silent: remove members wi
                             kommentar vorher
-- generating rebinds in DBAF at 14:21:19 20/10/06 for F540769
-- for 1 tablespace, 5 table, 0 view, 2 index, 1 alias, 1 synonym
--     tablespace DB123.A123
--     table      VDPS2.DTUNDERFIXCOMQ
--     table      VDPS2.DTUNDERFIXCOMP
--     table      "VDPS3 "."vdps table drei "
--     table      OA1A038.TWK003A
--     table      GDB9998.TWK003A
--     index      VDPS2.IIXDU
--     index      VDPS2.IIXDUZWEI
--     alias      EFG.HIK
--     synonym    OWN123.SYEFGH
REBIND PACKAGE(DB.DBWK2.(DB2J000003));
  -- vivo=BSNY con=17EF4F701D8D1B72 tst=2006-09-29-14.38.38.590494
REBIND PACKAGE(DB.DBWK2.(DB2J000ABC));
  -- vivo=BSNY con=17EF50AF1ACF23CB tst=2006-09-29-15.58.43.647758
REBIND PACKAGE(DB.DBWK2.(DB2J000XYZ));
  -- vivo=BSNY con=17EF50B10BBC328C tst=2006-09-29-15.58.56.607691
REBIND TRIGGER PACKAGE(DGDB9998.WK003TRIG);
  -- vivo=BSYY con=17ECF6B005DF3C90 tst=2006-09-14-16.52.20.179834
---- compare 4 =, 0 new, 0 old, 0 others, total 4
--=    REBIND PACKAGE(DB.DBWK2.(DB2J000003));
--=    REBIND PACKAGE(DB.DBWK2.(DB2J000ABC));
--=    REBIND PACKAGE(DB.DBWK2.(DB2J000XYZ));
--=    REBIND TRIGGER PACKAGE(DGDB9998.WK003TRIG);
}¢--- A540769.WK.REXX.O13(DBARENA) cre=2009-11-10 mod=2009-11-10-14.36.39 A540769 ---
call sqlConnect DBOF
$=pds=DSN.DBA.ZUEGEL.NOV.RUN
call lmm $pds
$| $@for mbr $@¢
    if \ datatype(substr($mbr, 2), 'n') then do
        say 'ignoring' $mbr
        iterate
        end
    call sqlPreAllCl 1, 'select changeid, name, status' ,
                            'from s100447.adbChg',
                            'where changeid =' substr($mbr, 2),
                       , cc, ':ch, :na, :sta'
    if m.cc.0 = 0 then do
        say $mbr 'not wsl found -> delete'
        call adrTso "delete '"$pds"("$mbr")'"
        end
    else if m.cc.0 \= 1 then do
        call err m.cc.0 'tupels for change' $mbr
        end
    else if sta == 'COMPLETE' then do
        say $mbr 'delete wsl' ch na sta
        call adrTso "delete '"$pds"("$mbr")'"
        end
    else do
         neNa = strip(left(na, 8))
         say $mbr ' renameTo' neNa 'for' ch 'named' na 'status' sta
         call adrTso "rename '"$pds"("$mbr")' ("neNa")"
         job = 'Y'left(neNa, 7)
         call readDsn $pds'('neNa')', j.
         jx = pos(' JOB ', j.1)
         if jx < 1 | jx > 16 then
             call err 'no jobCard in' neNa':' j.1
         j.1 = '//'job strip(substr(j.1, jx))
         call writeDsn $pds'('neNa')', j., , 1
         end
    $!
}¢--- A540769.WK.REXX.O13(DBX) cre=2009-08-12 mod=2013-11-04-16.31.17 A540769 ---
/* rexx ****************************************************************
synopsis:     DBX opt* fun args                                     v2.5
                                                                04.11.13
edit macro fuer CS Nutzung von CA RCM
                 (die a* Funktionen gehen auch mit tso dbx ...)

    ?            diese Hilfe
    aa,aw,ac pr  naechste AuftragsId suchen fuer praefix pr
                 aa: anzueigen, aw, ac entsprechendes Member editieren
    n, nt        neuen Auftrag erstellen (nt = test)
    q dbSy?      query und expandiert Scope Zeilen vom Db2Catalog
                     * fuegt alle bestehenden Objekte ein
                     * UNDO um Expansion rueckgaengig zu machen
                     * mit q, qq, etc. Zeile selekieren, sonst Alle
                     * funktioniert nicht nur in Auftrag
                     * dbSy hier wird gesucht sonst in source
    c op1?       create ddl from source
    i | ia | ie subs nct     changes in Db2Systeme importier(+ana+exe)
                 subs = sub(,sub)*: Liste von Stufen/rzDbSys
                 sub: DBTF, RR2/DBOF (im PTA), RZ8(betr. dbSy)
                      UT, ST, SIT, Q, R, P, X, Y, Z, Abkuerzungen
                      ==> sucht im PromotionPath
                 nct: Nachtrag: leer=noch nicht importiert sonst angegeb
                     8: Nachtrag 8, *: neuster, =: wie letztes Mal
    va vc vd ve vj vq vr vs vt ea ec ed ee ej er es et dbSy? nt?
                 view/edit ana,cdl,ddl,exe,jcl,quality,rec,src/trgddl
    ren dbSy     rename DSNs der Execution der Analyse in DBSystem
    zStat        Zuegelschub Statistik siehe wiki help

    opt*         Optionale Optionen
        -f       force: ignoriere QualitaetsVerletzungen
                 oder dbx c im QualitaetsMember
        -aAuft oder Auft: AuftragsMember oder DSN

Typen fuer scope und dbx q (analog adminTool, grossOderKlein ist egal):
    type                DB TS TB VW AL IX UDT UDF TG SP SQ SY
    1stelliges Kuerzel  D  S  T  V  A  X  E   F   J  O  Q  Y
Optionen im Auftrag: vPT VP*, keeptgt 0, qCheck 0, dbaCheck 0, ddlOnly 1
                     ca, bmc, ibm

Variabeln im Auftrag (expandiert werden $varName imd ${varName})
                      varName ist case sensitive|)
    srcNm        NamensKonvention compare source (z.B. DBAF)
    trgNm        NamensKonvention compare target (z.B. DBAF)
    impNm        NamensKonvention import Ziel (z.B. DBOF)
    subsys       Db2 Subsystem (source, target, import, je nachdem)

wiki help http://chw20025641/host/db2wiki/pmwiki.php?n=Main.CaDDLChg
************************************************************************
 4.§§.2013 Walter    zStat macht nur Warnung wenn ana <> auftrag
               */ /* end of help
25.10.2013 Walter    move rz8 --> rzx
 2.10.2013 Walter    rename Analysis in ZielRz nicht RZ4 wegen Release
27. 9.2013 Walter    move to rz4
26. 9.2013 Walter    promotePaths UT,ST,SIT,x,y,z, nachtrag *
23. 9.2013 Walter    vp0/1/2/3/4/16/17 + vp0=default
16. 9.2013 Walter    Nachtraege in zSTat geflickt
 2. 9.2013 Walter    ueberall class=log (auch PTA|)
30. 8.2013 Walter    vP17 fuer CA Tool Version 17
19. 8.2013 Walter    zstat in rz4
 9. 8.2013 Walter    schenv pro rz in JobCard generiert
19. 7.2013 Walter    qualityCheck fuer VW, kein Check wenn keine Objs
 8. 7.2013 Walter    zStat auch im RR2
28. 6.2013 Walter    fix qualityCheck fuer Db
26. 6.2013 Walter    dbx c in QualitaetsMember fuer Weiterarbeit ohne -f
25. 6.2013 Walter    v2.4: zSta, Namen angepasst auf ca ...
11. 6.2013 W. Keller qualityCheck mit Verglich in RZ2 und vq
14. 5.2013 W. Keller VPT für tool Alias PT
07. 5.2013 W. Keller crLib with primary 1000 cyls (avoid alloc err)
03. 4.2013 W. Keller IA erstellt jetzt exeJcl in dsn.dbx<dbSys>.exe
07. 3.2013 W. Keller in neuem Auftrag: CA und VDPS Warnung
06. 2.2013 W. Keller ca scope fuer Triggers
31. 1.2013 W. Keller integration anaPost und start, variable auf7
24. 1.2013 W. Keller initial edit macro AC fuer CA Analysen
18. 1.2013 W. Keller caDdl->ddl, caGlbChg->glbChg ohne dbxRen.*
 9. 1.2013 W. Keller ddlOnly fuer CA eingebaut
 8.01.2013 W. Keller rename fuer CA eingebaut: dbx ni030121 ren dbaf
13.12.2012 W. Keller Fehler bei  1 stellig import (verwechslung nachtr)
 7.12.2012 W. Keller .stry -> .ana, vy -> va etc.
 5.12.2012 W. Keller ca implementation I
 9.11.2012 W. Keller ey und vy für view/edit strategy
23. 8.2012 W. Keller v1015 für extract
13. 7.2012 W. Keller typo in query scope
18. 5.2012 W. Keller im neuen Auftrag source DX0G target DC0G/DCVG @rz8
                     PromotionPaths angepasst und vereinfacht
 4. 4.2012 W. Keller sqlQuery via csm for dbx q and qualitycheck
 4. 4.2012 W. Keller fix, import submits after last import empty, chroi
14. 2.2012 W. Keller ca  prototype
23.12.2011 W. Keller bmc prototype
13.12.2011 W. Keller RZ0, ToolPrefix, csmCopy
 3.11.2011 W. Keller Zuegeltermine 2012
 6. 9.2011 W. Keller v10 RZ8 DE0G UND DM0G ausgebaut
29.08.2011 W. Keller v10 default mit p8 und p9 alias
24.06.2011 W. Keller v10 und v72
 8.06.2011 W. Keller stored procedures editiert und version=%
26.05.2011 W. Keller qCheck 0 eingefügt
30.03.2011 W. Keller import et, it, .... , DD0G -> it, trg dc0g, i pa
24.12.2010 W. Keller plexZ (mit location CHROI00Z...)
10.12.2010 W. Keller db2 release 915, damit instead of trigger kommen
19.11.2010 W. Keller viewEdit macht jetzt view für v* statt immer edit
14.10.2010 W. Keller dp4g und dp2g in rz4.* bzw rz2.*, Zuegelsch 2012
24. 8.2010 W. Keller zusätzliche Typen für scope und dbx q
23. 8.2010 W. Keller dbzf ausgebaut
 6. 8.2010 W. Keller vc vj vs vt ec ej es et nt? eingebaut
 5. 8.2010 W. Keller stepName recTrg instead of recSrc for target
12. 7.2010 W. Keller sq=sequence für compare (fehlt noch in q)
18. 2.2010 W. Keller class=BS0 für PTA (wegen RR25 und RR26)
11. 2.2010 W. Keller dbaCheck mit ex0
 9. 2.2010 W. Keller sendJob timeout 600 auch in extractScopeVersion
 1.12.2009 W. Keller CSM.RZ1.P0.EXEC statt CMS.DIV...
12.11.2009 W. Keller Qualitätsfehler ohne -f stoppt wieder
25.10.2009 W. Keller DeltaNew überall, -a Optione, batch und do removed
28.09.2009 W. Keller Optionen keepTgt 0 und dbaCheck 0
10.09.2009 W. Keller mask ausschalten falls kein maskFile
07.09.2009 W. Keller fix error with dbaMulti
25.08.2009 W. Keller err statt fehl in line 1001
12.08.2009 W. Keller batch (ohne for) geflickt, ac pr -r: return new mbr
12.08.2009 W. Keller Zuegelschub wird nach Datum ausgesucht
19.05.2009 P. Kuhn   DEFER im Masking ignorieren
05.03.2009 P. Kuhn   Qualitaets-Check "ts not logged" eingebaut
18.12.2008 p. kuhn   neues Delta Merge Verfahren im import fuer DQ0G
18.12.2008 p. kuhn   SW fuer DVBP im RZ2 (frueher im RZ4)
10.12.2008 p. kuhn   Timeout vom Sendjob von 30 auf 600 Sek. erhoeht.
28.11.2008 w. keller v9 Fehler bei leerer Selektion
24.09.2008 p. kuhn   v9 checks
15.09.2008 p. kuhn   beim ersten import wird cdl dbaCheck't und editiert
09.09.2008 w. keller target mit RZ (job holt ddl, version aus RZ), opt =
08.08.2008 w. keller import mit wildcards
24.07.2008 w. keller overwrite ausgebaut +25.7
24.06.2008 w. keller fix spezialFall für DB         +18.7
19.05.2008 w. keller qualitaetsKontolle in c,v und st und -f Option
13.05.2008 w. keller rw, rs, sw, st und do ... for ... eingebaut
25.02.2008 w. keller subSys argument für dbx q
22.11.2007 w. keller fun v für ObjectCompare Verfahren inkl db ddl save
                     dq0g mit eigenen Libraries
12.11.2007 w. keller DSN für neuen Wartungsstand
05.06.2007 w. keller neu
***********************************************************************/
/* Ideen, Wünsche ******************************************************
     AuftragsId aus Prototyp bestimmen
     LCTL
     sämtliche infos aus XLS
     jedesmal Zwischenspeichern mit und restore Funktion
     analyze generieren, falls möglich
     batch Funktionen ganzen Zügelschub importieren usw. ==> mit wsh|
     generierte Runs starten in richtiger Reihenfolge
     mails an Entwickler schicken
     Rückmeldung falls keine changes (leeres cdl)

     Type Tabelle
                       char   type Variabeln
                                   fuer extract
        db             d      DB
        ts             s      TS
        tb/vw/alias    a v t  -    own  name
        ix             x      IX
        userDefinedTy  e      -    sch  udt
        function       f      -    sch  udf
        trigger        j      TG   qual name
        storedProc     o      SP   qual name
        sequence       q      SQ   qual name
        synonym        y      SY   qual name

**** alte Funktion (braucht es nicht mehr) *****************************
    sw rz?       WSL aus RZ rz holen und clonen, ohne rz mulitclone
    rs rz        source ddl und version aus RZ rz holen
    st opt? rz   target ddl und version extrahieren und ins rz schicken

***********************************************************************/
    m.debug = 0
    call errReset hi
    call jIni
    parse upper arg oArgs
    oArg1 = word(oArgs, 1)
    m.auftrag.dataset = 'DSN.DBX.AUFTRAG'
    m.editMacro = 0
    m.editProc  = 0
    if oArgs = '' then do
        if adrEdit('macro (oArgs) NOPROCESS', '*') <> 0 then
            call errHelp('keine Argumente und kein editMacro rc =' rc)
        m.editMacro = 1
        call adrEdit 'caps off'
        call adrEdit '(x) = member'
        m.auftrag.member = x
        m.edit.member = x
        call adrEdit '(x) = dataset'
        m.auftrag.dataset = x
        m.edit.dataset = x
        end
    if oArgs = '' | pos('?', oArgs) > 0 then
        exit help()
    call dbxIni
    m.exitValue = 0
    call work oArgs
    call sqlDisconnect
    exit m.exitValue

/*--- hier wählen wir die wirklich Arbeit aus -----------------------*/
work: procedure expose m.
parse arg wArgs
    parse upper var wArgs fun args
    args = strip(args)
    call mapReset e, 'K'
    call mapPut e, 'dol', '$'
    call stepGroup 1
    m.auftrag.force = 0
    m.e.toolAlias = 'P0'
    do forever
        r = substr(fun, 1 + 2*abbrev(fun, '-'))
        if abbrev(fun, '-A') | length(fun) >= 8 then do
             if verify(r, '.()', 'm') < 1 then do
                  m.auftrag.member = r
                  end
             else do
                 m.auftrag.dataset = dsnSetMbr(r)
                 m.auftrag.member =  dsnGetMbr(r)
                 end
             end
        else if abbrev(fun, '-F') then
             m.auftrag.force = 1
        else if abbrev(fun, '-') then
            call err 'bad opt' fun 'in' wArgs
        else
            leave
        parse var args fun args
        if fun = '' then
            return errHelp('fun missing in args:' wArgs)
        end

    if m.auftrag.dataset = 'A540769.DBX.AUFTRAG' then do
        m.libSkels = 'A540769.wk.skels(dbx'
        m.libPre   = 'A540769.DBX'
        end
    else if m.auftrag.dataset = 'DSN.DBQ.AUFTRAG' then do
        m.libSkels = 'ORG.U0009.B0106.KIDI63.SKELS(dbx'
        m.libPre   = 'DSN.DBQ'
        end
    else do
        m.libPre   = 'DSN.DBX'
        m.libSkels = 'ORG.U0009.B0106.KIDI63.SKELS(dbx'
        end
    if 0 then do   /* ??? testSkels */
        if userid() = 'A540769' then
            m.libSkels = 'A540769.wk.skels(dbx'
        say '??? test skels' m.libSkels '|||'
        end
    m.libSpezial = m.libPre'.spezial'
    call configureRZ sysvar('SYSNODE')
    m.sysRz = m.myRz
    if m.myRZ = RZ1 then
        m.sysSub = DBAF
    else if m.myRZ = RZ4 then
        m.sysSub = DP4G
    else
        m.sysSub = 'noSysSubFor'm.myRz
    call mapPut e, 'rexxLib', 'ORG.U0009.B0106.KIDI63.EXEC'
    call mapPut e, 'libSkels', translate(m.libSkels)
    call mapPut e, 'ovrDD', 'DISP=SHR,DSN='m.libPre'.MASK(OVERRIDE)'
    call mapPut e, 'libPre', m.libPre

    if fun = 'Q' then              /* macht process selber | */
        return queryScope(args)
    if m.editMacro & ^ m.editProc then do
        call adrEdit 'process'
        m.editProc = 1
        end
    if wordPos(fun, 'AA AC AW') > 0 then
        return nextAuftrag(word(args, 1), substr(fun, 2), word(args, 2))
    else if fun = 'C' & m.editMacro,
                      & right(m.edit.dataset, 8) = '.QUALITY' then
        return qualityOk(fun, args)
    else if fun = 'CLONEWSL' then
        return cloneWsl(word(args, 1), word(args, 2), 1==word(args, 3))
    else if fun = 'CPDUM' then
        return cpDum(args)
    else if fun = 'CRLIB' then
        return crLib(args)
    else if fun = 'REN' then
        return renExeDsns(m.auftrag.member, args)
    else if fun = 'ZSTAT' then
        return zStat(args)

    call memberOpt
    if m.sysRz <> 'RZ4' then
        call err 'dbx laeuft nur noch im RZ4'
    if wordPos(fun, 'N NT') > 0 then
        call neuerAuftrag (fun = 'NT'), args, m.auftrag.member
    else if fun = 'C' | fun = 'V' | fun = 'ST' then
        call compare fun, args
    else if wordPos(fun, 'I IA IE') > 0 then
        call import fun, args
    else if fun = 'N' then
        call neuerNachtrag args
    else if fun = 'RS' then
        call receiveSource args
    else if fun = 'RW' then
        call receiveWSL args
    else if fun = 'SW' then
        call sendWSL args
    else if wordPos(fun, 'VA VC VD VE VJ VQ VR VS VT VW' ,
                         'EA EC ED EE EJ    ER ES ET EW') > 0 then
        call viewEdit fun, args
    else
        call errHelp 'bad fun' fun 'in args' args, , ' '
    if m.auftrag.orig = m.auftrag.0 | m.auftrag.0 = '' then do
        end
    else do
        if abbrev(m.auftrag.orig, 'rmQu') then do
                     /* alte | Zeilen loeschen */
            oldOr = word(m.auftrag.orig, 2)
            ox = 0
            do ix = 1 to m.auftrag.0
                if abbrev(word(m.auftrag.ix, 1), '|') & ix <= oldOr then
                    iterate
                ox = ox + 1
                m.auftrag.ox = m.auftrag.ix
                end
            m.auftrag.0 = ox
            m.auftrag.orig = 'rep'
            end
        if m.editMacro & m.auftrag.dataset = m.edit.dataset ,
                            & m.auftrag.member  = m.edit.member then do
            if m.auftrag.orig = 'rep' then do
                call adrEdit 'delete .zf .zl'
                m.auftrag.orig = 0
                end
            do lx = m.auftrag.orig+1 to m.auftrag.0
                li = left(m.auftrag.lx, 72)
                call adrEdit "line_after .zl = (li)"
                end
            call adrEdit 'save', 4
            end
        else do
            call writeDsn dsnSetMbr(m.auftrag.dataset,
                                  ,m.auftrag.member), m.auftrag.,,1
            end
        end
    return
endProcedure work

/*--- ini the CS config ----------------------------------------------*/
dbxIni: procedure expose m.
    m.timeout = 600
    m.uId = strip(userid())
    if m.uId = 'A234579' then
        m.uNa = 'Marc'
    else if m.uId = 'A390880' then
        m.uNa = 'Martin'
    else if m.uId = 'A540769' then
        m.uNa = 'Walter'
    else if m.uId = 'A754048' then
        m.uNa = 'Alessandro'
    else if m.uId = 'A790472' then
        m.uNa = 'Agnes'
    else if m.uId = 'A828386' then
        m.uNa = 'Reni'
    else
        m.uNa = m.uId
    m.e.toolVers = ''
    m.scopeTypes = 'DB TS TB VW AL IX UDT UDF TG SP SQ SY'
    m.scopeType1 = 'D  S  T  V  A  X  E   F   J  O  Q  Y'
    m.nachtragChars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
           /* PromotionPaths neu */
    m.iSchenv = 'DB2  DB2  DB2  DB2  DB2  DB2  DB2  DB2 '
    m.promN   = 'X Y Z Q R P'
    m.promN_A = 'UT ST SI SIT ET IT   PQ PA PR'
    m.promN_T = 'X  Y  Z  Z   X  Y,Z  Q  R  P'
    m.promD.1 = 'RZX/DE0G RZY/DE0G RZ1/DBTF,RZZ/DE0G' ,
                        'RQ2/DBOF,RR2/DBOF RR2/DBOF RZ2/DBOF'
    m.promD.2 = 'RZX/DCVG RZY/DEVG RZ1/DVTB,RZZ/DEVG' ,
                        'RQ2/DVBP,RR2/DVBP RR2/DVBP RZ2/DVBP'
    m.promD.0 = 2
    m.iRZ     = 'RZ1  RZ2  RQ2 RR2  RZ4  RZX  RZY  RZZ'
    m.iSchenv = 'DB2  DB2  DB2 DB2  DB2  DB2  DB2  DB2 '
    m.lastSaidToolV = 'P0'
    return
endProcedure dbxIni

/*--- expand the import target list entered by the user
          to a list or rz/dbSy, sorted by rz, local first ----------*/
promExpan2: procedure expose m.
parse arg i
    o = promExpan2(i)
    say '???' i '>>promExpand>>' o
    return o
promExpand: procedure expose m.
parse upper arg inp
    inp = strip(translate(inp, ' /', ',.'))
    if inp = '' then
        call err 'promExpand empty'
    if words(inp) > 1 then do  /* several words, expand each */
        loc = ''
        rem = ''
        do ix=1 to words(inp)
           ee = promExpand(word(inp, ix))
           do ex=1 to words(ee)
               e1 = word(ee, ex)
               if abbrev(e1, m.sysRz'/') then
                   loc = wordInsAsc(loc, e1)
               else
                   rem = wordInsAsc(rem, e1)
               end
           end
        return strip(loc rem)
        end
    if length(inp) = 8 & pos('/', inp) = 4 then   /* already expanded */
        return inp
    sx = wordPos(inp, m.promN_A)
    if sx > 0 then
        return promExpand(word(m.promN_T, sx))
    ppx = m.promPath
    sx = wordPos(inp, m.promN)
    if sx > 0 then
        return promExpand(word(m.promD.ppx, sx))
    if length(inp) <= 1 then
        call err 'ungueltiges rz/dbSystem:' inp
    cx = pos(inp, m.promD.ppx)
    if cx > 0 then do
        a = translate(m.promD.ppx, ' ', ',')
        return word(substr(a, lastPos(' ', a, cx)+1), 1)
        end
    if length(inp) == 4 then
        return m.sysRz'/'inp
    call err 'no rz/dbsys for' inp
endProcedure promExpand

wordInsAsc: procedure expose m.
parse arg lst, wrds
     do wx=1
        w = word(wrds, wx)
        if w == '' then
            return space(lst, 1)
        do rx=1 to words(lst) while w > word(lst, rx)
            end
        r1 = word(lst, rx)
        if r1 == '' then
            lst = lst w
        else if w < r1 then
            lst = subWord(lst, 1, rx-1) w subWord(lst, rx)
        end
endProcedure wordInsAsc

charInsAsc: procedure expose m.
parse arg lst, chrs
     do wx=1 to length(chrs)
        c = substr(chrs, wx, 1)
        do rx=1 to length(lst) while c > substr(lst, rx, 1)
            end
        r1 = substr(lst, rx, 1)
        if rx > length(lst) then
            lst = lst || c
        else if c < r1 then
            lst = left(lst, rx-1) || c || substr(lst, rx)
        end
    return lst
endProcedure wordInsAsc

/*--- batch funktionen -----------------------------------------------*/
batchOld: procedure expose m.
parse upper arg args
    m.auftrag.dataset = 'DSN.DBX.AUFTRAG'
    wx = 1
    do forever
        w1 = word(args, wx)
        if w1 = '' then
            return 0
        if w1 = 'ADATASET' then do
            m.auftrag.dataset = word(args, wx+1)
            wx = wx+2
            end
        else if w1 = 'DO' then do
            fx = wordPos('FOR', args, wx)
            if fx < 1 then
                 call err 'DO ohne FOR in' args
            cmd = subWord(args, wx+1, fx-wx-1)
            do wx=fx+1
                ww = word(args, wx)
                if ww = '' then
                    leave
                m.auftrag.member = ww
                say 'batch do' cmd 'for' ww '...'
                call work cmd
                end
            end
        else do
            if wordPos(translate(w1), 'A AC AW') > 0 then do
                drop m.auftrag.member
                cmd = subword(args, wx)
                end
            else do
                m.auftrag.member = w1
                cmd = subword(args, wx+1)
                end
            say 'batch do' cmd 'for mbr' m.auftrag.member
            call work cmd
            return 0
            end
        end
    return 0
endProcedure batchOld

/*--- create the necessary dbx libraries locally ---------------------*/
crLib: procedure expose m.
parse arg subs
    rz = sysvar(sysnode)
    call crLibCr 'DSN.DBX.AUFTRAG'
    call crLibRe 'DSN.DBX.DDL',    'DSN.DBX.CADDL'
    call crLibRe 'DSN.DBX.GLBCHG', 'DSN.DBX.CAGLBCHG'
    call crLibCr 'DSN.DBX.JCL'
    if rz = 'RZ1' then
        call crLibCr 'DSN.DBX.RENAMDDL'
    do sx=1 to words(subs)
        s1 = word(subs, sx)
        if length(s1) \= 4 then
            call err 'bad subsys' s1
        call crLibCr 'DSN.DBX's1'.ANA'
        call crLibCr 'DSN.DBX's1'.DDL'
        call crLibCr 'DSN.DBX's1'.EXE'
        call crLibCr 'DSN.DBX's1'.REC'
        end
    return 0
endProcedure crLib
crLibCr: procedure expose m.
parse arg lib
    call writeDsn lib'(DUMMY) dd(l1)' ,
        '::f mgmtClas(COM#A076) space(1000, 1000) cyl' , x., 0
    return 0
endProcedure crLibCr
crLibRe: procedure expose m.
parse arg lib, old
    if sysDsn("'"old"'") <> "OK" then
        return crLibCr(lib)
    call adrTso "rename '"old"' '"lib"'"
    return 0
endProcedure crLibRe
/*--- create the necessary dbx libries in the specified rz -----------*/
cpDum: procedure expose m.
parse arg rz subs
    call cpDum1 rz, 'DSN.DBX.AUFTRAG(DUMMY)'
 /* call cpDum1 rz, 'DSN.DBX.AUTO(DUMMY)'
    call cpDum1 rz, 'DSN.DBX.CDL(DUMMY)'
    call cpDum1 rz, 'DSN.DBX.DBAUTO(DUMMY)'
    call cpDum1 rz, 'DSN.DBX.DBSRCCAT(DUMMY)'
    call cpDum1 rz, 'DSN.DBX.DBSRCDDL(DUMMY)'
    call cpDum1 rz, 'DSN.DBX.DBTRGCAT(DUMMY)'
    call cpDum1 rz, 'DSN.DBX.DBTRGDDL(DUMMY)'
 */
    call cpDum1 rz, 'DSN.DBX.JCL(DUMMY)'
 /* call cpDum1 rz, 'DSN.DBX.MASK(DUMMY)'
    call cpDum1 rz, 'DSN.DBX.OVRCAT(DUMMY)'
    call cpDum1 rz, 'DSN.DBX.SENDCF(DUMMY)'
    call cpDum1 rz, 'DSN.DBX.SPEZIAL(DUMMY)'
    call cpDum1 rz, 'DSN.DBX.SRCCAT(DUMMY)'
    call cpDum1 rz, 'DSN.DBX.SRCDDL(DUMMY)'
    call cpDum1 rz, 'DSN.DBX.TRGCAT(DUMMY)'
    call cpDum1 rz, 'DSN.DBX.TRGDDL(DUMMY)'
  */call cpDum1 rz, 'DSN.DBX.DDL(DUMMY)'
    if rz = 'RZ1' then
        call cpDum1 rz, 'DSN.DBX.RENAMDDL(DUMMY)'
    call cpDum1 rz, 'DSN.DBX.GLBCHG(DUMMY)'
    do sx=1 to words(subs)
        s1 = word(subs, sx)
        if length(s1) \= 4 then
            call err 'bad subsys' s1
        call cpDum1 rz, 'DSN.DBX's1'.ANA(DUMMY)',
                          , 'DSN.DBXDBAF.ANA(DUMMY)'
        call cpDum1 rz, 'DSN.DBX's1'.REC(DUMMY)',
                          , 'DSN.DBXDBAF.REC(DUMMY)'
        call cpDum1 rz, 'DSN.DBX's1'.DDL(DUMMY)',
                          , 'DSN.DBXDBAF.DDL(DUMMY)'
        end
    return 0
 endProcedure cpDum

cpDum1: procedure expose m.
parse arg sys, dsn, fr
if fr == '' then
    fr = dsn
say '???cpDum' sys dsn fr
    if sysDsn("'"fr"'") <> 'OK' then
        call writeDsn fr, x, 0, 1
    call csmCopy fr, sys'/'dsn
    return
endProcedure cpDum1

renExeDsns: procedure expose m.
parse arg ana, dbsy
    if length(ana) <> 8 then
        call errHelp 'bad analysis' ana 'for ren'
    if length(dbsy) <> 4 then
        call err 'bad dbSystem' dbSy 'for ren'
    if ana = m.edit.member then do
         call memberOpt
         call analyseAuftrag
         ana = overlay(m.e.nachtrag, ana, 8)
         end
    msk = 'DSN.?'dbsy'.'ana'.**'
    call csiOpen csi, 'DSN.C'dbsy'.'ana'.**'
    do dx=1 while csiNext(csi, 'CSI.'dx)
     /* say dx m.csi.dx */
        end
    call csiOpen csi, 'DSN.R'dbsy'.'ana'.**'
    do dx=dx while csiNext(csi, 'CSI.'dx)
     /* say dx m.csi.dx */
        end
    dx = dx - 1
    last = 'ff'x
    cA = 0
    do cx=1 to dx
        lx = lastPos('.', m.csi.cx)
        ly = substr(m.csi.cx, lx+1, 1)
        if ly == 'A' then
            cA = cA + 1
        else if ly << last then
            last = ly
      /*say 'y' ly 'l' last 'dsn' m.csi.cx */
        end
    if cA == 0 then
        call err 'keine aktuellen DSNs in' msk'.A*'
    if last == 'ff'x then do
        nxt = 'Z'
        end
    else do
        abc = m.ut.alfUC
        ax  = pos(last, abc)
        if ax < 2 then
            call err 'last' last 'keine rename moeglich'
        nxt = substr(abc, ax-1, 1)
        end
    say 'renaming' ca 'DSNs from' msk'.A* to' msk'.'nxt'*'
    do cx=1 to dx
        lx = lastPos('.', m.csi.cx)
        ly = substr(m.csi.cx, lx+1, 1)
        if ly == 'A' then
            call adrTso 'rename' ,
                "'"m.csi.cx"'" "'"overlay(nxt, m.csi.cx, lx+1)"'"
            end
    return 0
endProcedure renExeDsns
/*--- die Konfiguration pro db2 dbSy -------------------------------*/
configureRZSub: procedure expose m.
    parse arg rz, dbSy
    call configureRZ rz
    call configuredbSy rz, dbSy
    return
endProcedure configureRZSub

configureDbSy: procedure expose m.
    parse arg rz, dbSy
    call mapPut e, 'subsys', dbSy
    if rz = 'RZX' then
        call mapPut e, 'location', 'CHROI00X'dbSy
    else if rz = 'RZY' then
        call mapPut e, 'location', 'CHROI00Y'dbSy
    else if rz = 'RZZ' then
        call mapPut e, 'location', 'CHROI00Z'dbSy
    else
        call mapPut e, 'location', 'CHSKA000'dbSy
    return
endProcedure configureDBSy

/*--- die Konfiguration pro RZ ---------------------------------------*/
configureRZ: procedure expose m.
    parse arg rz, rel px, toolV
    if rz = 'RZ0T' then
        rz = 'RZ0'
    if rz = '' then
        rz = m.myRz
    else
        m.myRz = rz
    m.jobCard = 'jobCa'
    call mapPut e, 'jobCla', 'LOG'
    rx = pos(rz'/', m.promD.1)
    if rx < 1 then
        m.pr1Sub = '?noSubsys?'
    else
        m.pr1Sub = substr(m.promD.1, rx+4, 4)
    xrz = wordPos(rz, m.iRz)
    if xRz < 1 then
        call err 'rz' rz 'not in iRz' m.iRz
    call mapPut e, 'schenv', word(m.iSchenv, xRz)
    call mapPut e, 'rz', rz
    zz = overlay('Z', rz, 2)
    call mapPut e, 'zz', zz
    if rel == '' then
        rel = 1015
    if px == '' then
        px = if(rz\=='RZ0', 'P0', 'PA')
    call mapPut e, 'db2rel', rel
    call mapPut e, 'db2relAl', px
    call mapPut e, 'dsnload', if(rz=='RZ0', 'DSN', 'DB2@') ,
           || '.'zz'.'px'.DSNLOAD'
    if toolV \== '' then
        m.e.toolVers = toolV
    call mapPut e, 'tool', strip(m.e.tool m.e.toolVers)
    call mapPut e, 'toolPreP', 'DSN.TOOLS.'zz'.P0'
    call mapPut e, 'toolPreC', 'DSN.TOOLS.'zz'.C0'
    /* toolV = copies(m.e.toolVers, rz == 'RZ1') */
    toolV = m.e.toolVers
    toolRZAl  = zz'.'if(toolV == '', 'P0', toolV)
    if m.lastSaidToolV \== substr(toolRzAl, 5) then do
        m.lastSaidToolV =  substr(toolRzAl, 5)
        say 'tool version unter Alias' toolRzAl,
            if(substr(toolRzAl, 5) =='P0', '==> v16')
        end
    call mapPut e, 'capref', 'DSN.CADB2.'toolRzAl
    call mapPut e, 'caload', 'DSN.CADB2.'toolRzAl'.CDBALOAD'
    call mapPut e, 'cacr', DBX
    if rz = 'RZ1' then do
        if m.libPre = 'DSN.DBQ' then do
            m.pr1Sub = 'DQ0G'
            m.jobCard = 'jobCQ'
            call mapPut e, 'toolPreP', 'DSN.ADB72.P0'
            call mapPut e, 'toolPreC', 'DSN.ADB72.C0'
            end
        end
    return
endProcedure configureRZ

/*--- Member Namen prüfen und Auftrag lesen---------------------------*/
memberOpt: procedure expose m.
    if m.auftrag.dataset <> m.libPre'.AUFTRAG' then
        call err 'e}dbx sollte' m.libPre'.AUFTRAG editieren, nicht' ,
                    m.auftrag.dataset
    m8 = substr(m.auftrag.member, 8, 1)
    if pos(m8, 'CW')  < 1 then
        call err 'e}Member muss 8 stellig sein und mit C oder W enden',
                       'nicht' m.auftrag.member
    m.optOvr = 0 /* (m8 == 'W') & (m.libPre ^== 'DSN.DBQ') */
    m.optAuto = 1
    call readAuftrag '', m.auftrag.dataset, m.auftrag.member
    return
endProcedure memberOpt

/*--- Auftrag einlesen -----------------------------------------------*/
readAuftrag: procedure expose m.
parse arg sys, pds, mbr
    editingAuftrag = 0
    if sys = '' & m.editMacro then do
        call adrEdit '(em) = member'
        call adrEdit '(ed) = dataset'
        editingAuftrag = ed = pds & em = mbr
        end
    if editingAuftrag then do
        if adrEdit('(zl) = lineNum .zl', 4) = 4 then
            zl = 0
        m.auftrag.0 = zl
        do lx=1 to zl
            call adrEdit "(li) = line" lx
            m.auftrag.lx = li
            end
        end
    else do
        dsn = dsnSetMbr(m.auftrag.dataset, m.auftrag.member)
        if sys = '' then
          if sysDsn("'"dsn"'") <> 'OK' then
            call err 'auftrag' dsn 'existiert nicht:' sysDsn("'"dsn"'")
        call readDsn sys'/'dsn, m.auftrag.
        end
    m.auftrag.orig = m.auftrag.0
    return
endProcedure readAuftrag

/*--- naechste AuftragsNummer suchen ---------------------------------*/
nextAuftrag: procedure expose m.
parse arg pre, make, rz opt
    if abbrev(rz, '-') then do
        opt = rz
        rz = ''
        end
    opt = translate(opt)
    if rz = '' | rz = '*' then
        rz = m.myRz
    if m.myRz <> 'RZ4' then
        if m.myRz = 'RZ1' then
            call err 'dbx wurde ins RZ4 gezuegelt'
        else
            call err 'Auftrag für RZ' rz 'muss aus RZ4 erstellt werden'
    auft = m.libPre'.AUFTRAG'
    call mAdd mCut(na, 0), auft
    max = pre
    do nx=1 to m.na.0
        lmm = lmmBegin(dsnSetMbr(m.na.nx, pre'*'))
        mb = lmmNext(lmm)
        fi = mb
        la = ''
        do cnt=2 by 1 while mb <> ''
            la = mb
            mb = lmmNext(lmm)
            end
        call lmmEnd lmm
        say left(fi, 8) '-' left(la, 8)right(cnt-2, 5) ,
            'member in' dsnSetMbr(m.na.nx, pre'*')
        if la >> max then
            max = la
        end
    nn = left(max, 7, '0')
    do cx=7 by-1 to length(pre)+1,
            while pos(substr(nn, cx, 1), '0123456789') > 0
        end
    if cx >= 7 then
        nn = ''
    else do
        pp = 1 + substr(nn, cx+1)
        if length(pp) > 7-cx then
            nn = ''
        else
            nn = left(nn, cx) || right(pp, 7-cx, 0)
        end
    if length(nn) <> 7 then do
        say 'max Auftrag' max 'kein naechster bestimmbar'
        end
    else if pos(make, 'CW') < 1 then do
        say 'max Auftrag' max 'naechster' nn'?'
        end
    else do
        nn = nn || make
        say 'max Auftrag' max 'naechster' nn
        m.auftrag.0 = 0

        call neuerAuftrag 0, rz, nn
        dsnNN = dsnSetMbr(auft, nn)
        call writeDsn dsnNN, m.auftrag.
        if opt = '-R' then
            nop
        else
            call adrIsp "edit dataset('"dsnNN"')", 4
        end
    m.auftrag.0 = '' /* do not write back the new auftrag | */
    if opt = '-R' then
        m.exitValue = nn
    return 0
endProcedure nextAuftrag

/*--- einen neuen Auftrag initialisieren -----------------------------*/
neuerAuftrag: procedure expose m.
parse arg isTst, rz, auftName
    if  rz = '' then
        rz = m.myRz
    else
        call configureRz rz
    if isTst then do
        ow = m.uid
        maPr = 'T' || left(translate(m.uNa), 3, 'X')
        comMask = m.libPre'.MASK('maPr'PROT)'
        impMask = m.libPre'.MASK('maPr'$subsys)'
        end
    else do
        ow = 'S100447'
        cChgs = 'PROT'if(abbrev(auftName, 'XB'), 'DVBP', 'DBOF')
        iChgs = 'DBOF$impNm'
        end
    if m.auftrag.0 <> 0 then
        call err 'fun n erstellt neuen Auftrag nur in leeres Member'
                             /* wahrscheinlichen Zügelschub bestimmen*/
    zglS = '20130208 20130510 20130809 20131108' ,
           '20140214 20140509 20140808 20141114 2015????'
    zi = date('s')
    zi = overlay(right(substr(zi, 5, 2)+1, 2, 0), zi, 5)
    do wx=1 while zi >> word(zglS, wx)
        end
    zglSchub = if(isTst, 'test', word(zglS, wx) '??:00')

    call mAdd auftrag                                      ,
        , addDateUs('auftrag ' auftName ow)                ,
        , '  Zuegelschub' zglSchub                         ,
        , '  Besteller   pid     name    tel'              ,
        , '  cChgs      ' cChgs                              ,
        , '  iChgs      ' iChgs
    if abbrev(auftName, 'VV') | abbrev(auftName, 'VDPS') then
        call mAdd auftrag                                  ,
        , '    * ---------- Achtung VDPS -------------------------|' ,
        , '    *    nach jeder Aenderung alle anderen aktuellen   |' ,
        , '    *    VDPS Auftraege Comparen (= DDL akutalisieren) |'
    call mAdd auftrag                                      ,
        , 'source RZX/DX0G'                                ,
        , '  ts' left(auftName, 4)'A1P.A%'
    return
endProcedure neuerAuftrag

neuerNachtrag: procedure expose m.
parse upper arg opt
    call analyseAuftrag
    call addNachtrag
    return
endProcedure neuerNachtrag

nextNachtrag: procedure expose m.
    parse arg nt
    nx = pos(nt, m.nachtragChars) + 1
    if nx > length(m.nachtragChars) then
        call err 'kein Nachtrag char mehr nach' nt
    return substr(m.nachtragChars, nx, 1)
    m.e.nachtrag = nt
    return nt
endProcedure nextNachtrag

/*--- compare: Funktionen c, v und st --------------------------------*/
compare: procedure expose m.
parse upper arg fun, sendToRz
    opts = ''
    do forever
        if abbrev(sendToRz, '=') then do
            sendToRz = strip(substr(sendToRz, 2))
            opts = opts'='
            end
        else if abbrev(sendToRz, '-') then do
            opts = opts || substr(word(sendToRz, 1), 2)
            sendToRz = subword(sendToRz, 2)
            end
        else
            leave
        end
    cmpLast = pos('=', opts) > 0
    if fun = 'C' then
        function = 'compare'
    else if fun = 'ST' then do
        if sendToRz = '' | sendToRz = '*' then
            call errHelp 'ST without sendToRz'
        call mapPut e, 'toRz', sendToRz
        function = 'sendTarget' sendToRz
        end
    else if fun = 'V' then
        function = 'version'
    else
        call err 'bad fun' fun
    call analyseAuftrag
    nacLast = m.e.nachtrag
    if nacLast = '?' & cmpLast then
        call err 'c = oder v = ohne vorangaengiges c oder v'
    if nacLast = '?' | m.nacImp then
        m.e.nachtrag = nextNachtrag(nacLast)
    call mapPut e, 'mbrNac', m.e.auf7 || m.e.nachtrag
    if m.e.qCheck == 0 then nop
    else if m.sysRz \== 'RZ1' & m.sysRz \== 'RZ4' then
        say 'no quality check from' m.sysRz
    else do
        qx = m.scopeSrc.rz'/'m.scopeSrc.dbSy
        px = m.promPath
        qy = word(m.promD.px, words(m.promD.px))
        if qualityCheck(qx, qy) then do
            vAns = 'dbx'm.err.screen'QuAn'
            call value vAns, 0
            call adrIsp 'vput' vAns 'shared'
            ddlxP = substr(m.auftrag.member, 8, 1)
            qDsn = m.libPre'.QUALITY('mapGet(e, 'mbrNac')')'
            call adrIsp "view dataset('"qDsn"'),
                    macro(ddlX) parm(ddlxP)",4
            call adrIsp 'vget' vAns 'shared'
            if pos('F', opts) < 1 & \ m.auftrag.force ,
                    & value(vAns) \== 1 then
                return
            else
                say 'Compare trotz Qualitaetsfehlern'
            end
        end
    m.o.0 = 0
    call mapPut e, 'jobName', 'Y'm.e.auf7
    call mapPut e, 'fun', function opts
    call namingConv m.scopeTrg.rz, m.scopeTrg.dbSy, 'trgNm'
    call namingConv m.scopeSrc.rz, m.scopeSrc.dbSy, 'srcNm'
    call mapExpAll e, o, skelStem(m.jobCard)

    call mapPut e, 'mask', shrDummy(mapExp(e, m.e.comMask), 1)
    call mapPut e, 'ignore', shrDummy(mapExp(e, m.e.comIgno))
    call bmcVarsProf 0

    if 0 then   /* db ddl extrahieren ja / nein ???? */
        call extractSrcTrg o, 'DB', cmpLast m.e.auf7 || nacLast
    if m.e.tool == ibm then
        call extractSrcTrg o, '', cmpLast m.e.auf7 || nacLast
    else if m.e.tool == bmc then
        call bmcSrcTrg cmpLast m.e.auftrag
    else if m.e.tool == ca  then do
        call configureDbSy m.scopeSrc.rz, m.scopeSrc.dbSy
        end
    if fun = 'C' then do
        if m.optOvr then do
            call mapPut e, 'ovr', 'OVR'
            call mapExpAll e, o, skelStem('OVR')
            call mapPut e, 'src', 'OVR'
            end
        call mapPut e, 'keepTgtV', copies('KEEPTGT,', m.e.keepTgt)
        if m.e.tool == ca  then
            call caDDL o, scopeSrc, translate(mapExp(e, m.e.cChgs))
        else
            call mapExpAll e, o, skelStem('COMP')
        end
    if fun = 'ST' then
        call mapExpAll e, o, skelStem('ST')
    call writeSub o
    call mAdd auftrag, addDateUs(function ,
                    left('===', 3*cmpLast)m.e.nachtrag,
                    m.scopeSrc.rz'/'m.scopeSrc.dbSy ,
                    mapExp(e, "'${libPre}." ,
                ||  if(m.e.tool=="IBM","srcCat","DDL") ,
                ||  "($mbrNac)'"))
    return
endProcedure compare
/*--- in the qualityMember say dbx c
          to continue processing without option  -f ------------------*/
qualityOk: procedure expose m.
parse arg fun
    vAns = 'dbx'm.err.screen'QuAn'
    call value vAns, 1
    call adrIsp 'vPut' vAns 'shared'
    return 0
endProcedure qualityOk
/*--- find the naming convention for a rz and dbSystem --------------*/
namingConv: procedure expose m.
parse arg rz, dbSy, var
    if rz = '.' then do
        if pos('.', dbSy) > 0 then
            call err 'namingConv old target' dbSy
        if pos('/', dbSy) > 0 then
            parse var dbSy rz '/' dbSy
        else
            rz = m.sysRz
        end
    if strip(rz) = 'RZ1' then
        t = strip(dbSy)
    else
        t = 'DBOF'
    if var ^== '' then
        call mapPut e, var, t
    return t
endProcedure namingConv

skelStem: procedure expose m.
parse upper arg nm
    st = 'SKEL.'nm
    if symbol('m.st.0') \== 'VAR' then
        call readDsn m.libSkels || nm || ')', 'M.'st'.'
return st
endProcedur skelStem

/*--- write jcl and submit it ----------------------------------------*/
writeSub: procedure expose m.
parse arg o, rz, noWri
    userSubmits = 0 /* edit jcl and user submits it */
    if noWri <> 1 then do
        jcl = m.libPre'.JCL('m.e.auftrag')'
        call mStrip o, 't'
        do ox=1 to m.o.0
            if length(m.o.ox) > 70 then
                call debug 'o.'ox 'len' length(m.o.ox)':' m.o.ox
            end
        call writeDsn jcl, m.o., ,1
        if userSubmits then /* edit dataset and user may submit it */
            call adrIsp "edit dataset('"jcl"')", 4
        end
    if (noWri <> 1) & (rz = '' | rz = m.sysRz) then do
         if ^ userSubmits then
            call adrTso "sub '"jcl"'"
         end
    else do  /* submit jcl in another rz */
        sysl = csmSysDsn(rz'/')
        if sysl = '*/' then
            sysl = ''
        call writeDsn sysl 'SYSOUT(T) dd(ir) .WRITER(INTRDR)', m.o.
        end
    return
endProcedure writeSub


/*--- view or edit a member -----------------------------------------*/
viewEdit: procedure expose m.
parse upper arg fun 2 wh, dbSy nac
    if length(dbSy) = 1 then
        parse var dbSy nac dbSy
    if dbSy \== '' & length(dbSy) <> 4 then
        call err 'bad dbSystem' dbSy 'in' fun || wh dbSy nac
    call analyseAuftrag

    if wh = 'D' then
       d = dbSy || '.DDL'
    else if wh = 'A' then
        d = if(dbSy=='', substr(m.imp.last, 5), dbSy)'.ANA'
    else if wh = 'R' then
        d = if(dbSy=='', substr(m.imp.last, 5), dbSy)'.REC'
    else if wh = 'C' then
        d = '.CDL'
    else if wh = 'E' then do
        if dbSy == '' then
            call err 'i}'fun ||'E ohne db2Subsystem'
        d = dbSy'.EXE'
        end
    else if wh = 'J' then
        d = '.JCL'
    else if wh = 'Q' then
        d = '.QUALITY'
    else if wh = 'S' then
        d = '.SRCDDL'
    else if wh = 'T' then
        d = '.TRGDDL'
    else if wh = 'W' then
        d = '.BMCWSL'

    d = m.libPre || d
    if wh = 'J' then
        d = d'('m.e.auftrag')'
    else if nac = '' then
        d = d'('left(m.e.auftrag,7)m.e.nachtrag')'
    else
        d = d'('left(m.e.auftrag,7)right(strip(nac), 1)')'
    if  wh = 'Q' then do
        ddlxParm = substr(m.auftrag.member, 8, 1)
        mac = 'MACRO(DDLX) PARM(DDLXPARM)'
        end
    else if  wh = 'A' then
        mac = 'MACRO(AC)'
    else
        mac = ''
    if fun == 'E' then
        call adrIsp "edit dataset('"d"')" mac, 4
    else
        call adrIsp "view dataset('"d"')" mac, 4
    return
endProcedure viewEdit
/*--- return jcl either dd dummy or dd disp=shr,dsn=... --------------*/
shrDummy: procedure expose m.
parse arg dsn, keepEmpty
    if dsn \= '' then
        return 'DISP=SHR,DSN='translate(dsn)
    else if keepEmpty == 1 then
        return ''
    else
        return 'DUMMY'
endProcedure shrDummy

/*--- funktion i -----------------------------------------------------*/
import: procedure expose m.
parse upper arg fun, rzDbSyList opt .
    call analyseAuftrag
    if m.e.nachtrag = '?' then
        call err 'vor i=import braucht es compare'
    if opt <> '' then
        nop
    else if m.cmpLast then
            call err 'i=import mit c = oder v = muss Nachtraege',
               'explizit angeben, z.B. dbx i' rzDbSyList m.e.nachtrag
    if ^ m.nacImp & m.e.tool = 'IBM' then do
        cdl = cdlDsnCheck(m.e.nachtrag)
        if m.e.dbaCheck \== 0 & m.e.tool == 'IBM' then do
            if m.editMacro then
                dbaParm = 'EX0'
            else
                dbaParm = 'END'
            call adrIsp "edit dataset('"cdl"') macro(dbacheck)",
                         "parm(dbaParm)", 4
            end
        end
    call mapPut e, 'expOpt', if(m.e.keepTgt, 'A', 'X')
    if list = '' then
        call err 'no targets in list "'rzDBSysList'"'
    impCnt = 0
    if fun = 'IA' then
        fu2 = 'Ana'
    else if fun = 'IE' then
        fu2 = 'AnaExe'
    else
        fu2 = ''
    if m.e.tool == 'IBM' & fu2 \== '' then
        call err 'fun' fun 'not implemented for ibm'
    call configureRz m.sysRz
    call mapPut e, 'fun', strip('import'fun fu2 left(rzDbSyList, 30))
    call mapPut e, 'jobName', 'Y'm.e.auf7
    m.jOut.0 = 0
    m.jOut.two.0 = 0
    m.jOut.send.0 = 0
    call setIf jOut
    call setIf jOut'.TWO'
    call mapExpAll e, jOut, skelStem(m.jobCard)    /* Jobcards */
    call configureRZ m.sysRz
    rzLast = ''
    call stepGroup 1
    j0 = m.jOut.0
    list = promExpand(rzDbSyList)
    do lx = 1 to words(list)
        rzDBSys = word(list, lx)
        parse value word(list,lx) with r '/' dbSy
        if opt == '*' then do
            nachAll = m.compares
            end
        else if opt == '=' then do
            if symbol('m.imp.rzDBSys.nachtrag') == 'VAR' then
                nachAll = m.imp.rzDBSys.nachtrag
            else
                nachAll = ''
            end
        else if opt \== '' then do
            nachAll = opt
            end
        else do
            if symbol('m.imp.rzDBSys.nachtrag') \== 'VAR' then
                nachAll = m.compares
            else
                nachAll = substr(m.compares,
                        , 1+pos(m.imp.rzDBSys.nachTop, m.compares))
            end
        if nachAll == '' then
            iterate
        if fun = 'IE' & wordPos(r, 'RZ2 RZ4') > 0 then
            call err 'ie fuer Prod nicht erlaubt:' r'/'dbSy
        if m.e.tool = 'CA' then
            nachAll = right(nachAll, 1)
        trgNm = ''
        do nx=1 to m.nachtrag.0
            if pos(m.nachtrag.nx, nachAll) < 1 then
                iterate
            act = namingConv('.', m.nachtrag.nx.trg)
            if trgNm = '' then
                trgNm = act
            else if trgNm <> act then
                call err 'targetNaming' trgNm 'wechselt zu' act ,
                    'fuer nachtrag' m.nachtrag.nx 'auf' m.nachtrag.nx.trg
            end
        if trgNm = '' then
            call err 'compare not found for nachtrag' nachAll
        m.imp.seq = m.imp.seq + 1
        if length(m.imp.seq) > 3 then
            call err 'import Sequenz Ueberlauf' m.imp.seq
        m.imp.seq = right(m.imp.seq, 3, 0)
        if length(nachAll) = 1 then
            nachVB = nachAll
        else
            nachVB = left(nachAll, 1)'-'right(nachAll, 1)
        chaPre = m.e.auftrag'.'nachVB'.'m.imp.seq
        zs = translate(strip(right(m.e.zuegelSchub, 6)))
        if m.e.tool = 'IBM' then
            call mapPut e, 'change',chaPre'.'zs
        else
            call mapPut e, 'change',m.e.auftrag':'nachAll'/' ,
                        || m.imp.seq'_'zs
        call mapPut e, 'change', chaPre'.'zs
        call mapPut e, 'changeRem', 'zs' m.e.zuegelSchub ,
                           'auf' m.e.auftrag nachAll 'import DBX'
        call mapPut e, 'deltaVers', chaPre'.DLT'
        call namingConv '.', rzDBSys, 'impNm'
        call namingConv m.scopeSrc.rz, m.scopeSrc.dbSy, 'srcNm'
        call mapPut e, 'trgNm', trgNm
        call mapPut e, 'fun', 'import'fu2 rz
        call mapPut e, 'fu2', fu2
        call mapPut e, 'mbrNac', m.e.auf7 || right(nachAll, 1)
        if r <> m.myRz then do
            call importToRZ jOut
            call configureRZ r
            end
        call configureDbSy r, dbSy
        if m.e.tool == 'CA' then
            call caImport jOut, fun, nachAll,
                     , translate(mapExp(e, m.e.iChgs)),
                     , translate(mapExp(e, m.e.iMap)),
                     , translate(mapExp(e, m.e.iRule))
        else
            call ibmImport jOut, fun, r, dbSy, nachAll,
                     , translate(mapExp(e, m.e.impMask)),
                     , translate(mapExp(e, m.e.impIgno))
        call mAdd auftrag,  addDateUs("import" rzDBSys nachAll,
                       mapGet(e, 'change') fu2)
        call stepGroup
        end
    call importToRz jOut
    if m.jOut.0 <= j0 then
        say 'nothing to import'
    else do
        call addJobError jOut
        call writeSub jOut
        end
    return
endProcedure import

importToRZ: procedure expose m.
parse arg o
    toRz = m.myRz
    call mapPut e, 'toRz', toRz
    if m.o.send.0 \== 0 & m.sysRz \== toRz then do
        sAft = ''
        do sx=1 to m.o.send.0
            c1 = m.o.send.sx
            if m.cdlSent.toRz.c1 \== 1 then do
                m.cdlSent.toRz.c1 = 1
                if sAft == '' then do
                    call mapPut e, 'cdl',  dsnSetMbr(c1)
                    call addIf o
                    call mapExpAll e, o, skelStem('sCdl')
                    jx = m.o.0
                    sAft = m.o.jx
                    jx = jx - 1
                    sCx = pos('(', m.o.jx)
                    m.o.jx = left(m.o.jx, sCx) || dsnGetMbr(c1) '-'
                    m.o.0 = jx
                    end
                else do
                    call mAdd o, right(',', sCx) || dsnGetMbr(c1) '-'
                    end
                end
            end
        if sAft \== '' then do
            call mAdd o, right(')', sCx) '-', sAft
            call addIf o, 'end'
            call setIf o, 'CP'toRz
            end
        end
    if m.o.two.0 == 0 then do
        end
    else if m.sysRz == toRz then do
        call addIf o
        call mAddSt o, o'.TWO'
        call addIf o, 'end'
        m.o.ifLine = m.o.two.ifLine
        end
    else do
        call addIf o
        call mapExpAll e, o, skelStem('subRz')
        la = m.o.0
        la = m.o.la
        m.o.0 = m.o.0 - 1
        call mapExpAll e, o, skelStem(m.jobcard)  /*Jobcards*/
        call addJobError o'.TWO'
        call mAddSt o, o'.TWO'
        call mAdd o, la
        call addIf o, 'end'
        call setIf o, 'SUB'toRz
        end
    m.o.two.0 = 0
    call setIf jOut'.TWO'
    m.o.send.0 = 0
    return
endProcedure importToRZ

ibmImport: procedure expose m.
parse arg o, fun, rz, dbSys, nachAll, msk, ign
    call mapPut e, 'ignore', shrDummy(ign)
    call mapPut e, 'mask',   shrDummy(msk, 1)
    if rz <> m.sysRz then do
        do nx=1 to length(nachAll) /* send changes to rz */
            c1 = cdlDsnCheck(substr(nachAll, nx, 1))
            call mAdd o'.SEND', c1
            end
        end
    call mapPut e, 'cType', "''''T''''"
    call mapPut e, 'inDdn', 'DCHG'
    cdlPds = m.libPre'.CDL'
    call mapPut e, 'cdlPds', cdlPds
    call ibmImportExpand o'.TWO', nachAll
    return
endProcedure ibmImport

ibmImportExpand: procedure expose m.
parse arg o, nachAll, deltaNew
    call addIf o
    ic = skelStem('Imp')
    sto = mapExpAllAt(e, o, ic, 1, 1)
    do while sto ^= ''
        parse var sto lx cx
        w = word(substr(m.ic.lx, cx), 1)
        if w == '$@maskDD' then do
            if mapGet(e, 'mask') \= '' then
                call mAdd o, '//MSKDDN1     DD' mapGet(e, 'mask')
            end
        else if w == '$@maskII' then do
            if mapGet(e, 'mask') \= '' then
                call mAdd o, "  MSKDDN='MSKDDN1',",
                           , " MSKOWN='DUMMY',",
                           , "  MSKNAME='DUMMY',"
            end
        else if w == '$@bmcCdl' then do
            le = left('//IMPORTIN', 13)
            do ix=1 to length(nachAll)
                call mAdd o, le || 'DD DISP=SHR,DSN=',
                                || cdlDsnCheck(substr(nachAll, ix, 1))
                le = left('//', 13)
                end
            end
        else if w ^== '$@cdl' then do
            call err 'unbekannte Anweisung' w 'in Zeile' cx m.ic.cx
            end
        else do
            inDdn = mapGet(e, 'inDdn')
            do ix=1 to length(nachAll)
                call mAdd o, left('//'inDdn || right(ix,3,0), 13) ,
                                || 'DD DISP=SHR,DSN=',
                                || cdlDsnCheck(substr(nachAll, ix, 1))
                end
            end
        sto = mapExpAllAt(e, o, ic, lx, cx + length(w))
        end
    call addIf o, 'end'
    call setIf o, 'SUB???'
    return
endProcedure ibmImportExpand

caImport: procedure expose m.
parse arg o, fun, nachAll, iChgs, iMap, iRule
    if length(nachAll) \== 1 then
        call err 'caImport nachAll' nachAll 'not exactly one'
    nact = mapGet(e, 'mbrNac')
    ddlSrc = m.libPre'.DDL('nact')'
    if iRule == '' | iRule = 'EMPTY' | iRule = 'IGNORE' then
        iRule = 'ALL'
    if iChgs = 'EMPTY' then
        iChgs = ''
    if substr(iChgs, 5, 4) == left(iChgs, 4) then
        iChgs = ''
    call mapPut e, 'iMap', iMap
    call mapPut e, 'iRule', iRule
    ddlImp = m.libPre || mapGet(e, 'subsys')'.DDL('nact')'
    if iChgs == '' then
        ddlXX = ddlImp
    else
        ddlXX = m.libPre || mapGet(e, 'subsys')'.XDL('nact')'
    if m.sysRz \== m.myRz | ddlSrc \== ddlXX then
        call copyMbr o, nact, ddlSrc, m.myRz , ddlXX
    if iChgs \== '' then
        call caImpRename o'.TWO', iChgs, nact, ddlXX, ddlImp
    call mapPut e, 'ddlin', ddlImp
    call mapPut e, 'stry', nact
    call addIf o'.TWO'
    call stepGroup
    call mapExpAll e, o'.TWO', skelStem('CImp')
    call addIf o'.TWO', 'end'
    call setIf o'.TWO', 'AUTO'

    if wordPos(fun, 'IA IE') > 0 then do /* analyse step */
        call  stepGroup
        if m.e.tool = ibm then
            call err 'fun' fun 'not implemented for' m.e.tool
        if m.e.aUtil = '' then do
            call mapPut e, 'aUtilNm',  ''
            call mapPut e, 'aUtilCre', ''
            end
        else do
            call mapPut e, 'aUtilNm',  'UPNAME  ' m.e.aUtil' Y'
            call mapPut e, 'aUtilCre', 'UPCRT   ' mapGet(e, 'cacr')
            end
        call addIf o'.TWO'
        call mapExpAll e, o'.TWO', skelStem('CAna')
        call addIf o'.TWO', 'end'
        call setIf o'.TWO', 'ANA', 0 4, 'POST'
        call addIf o'.TWO'
        end
    if fun == 'IA' then do /* copy execute jcl */
        call  stepGroup
        call mapExpAll e, o'.TWO', skelStem(left(m.e.tool, 1)'ECP')
        old = stepGroup(11)
        call mapPut e, 'fun', 'execute'
        call mapExpAll e, o'.TWO', skelStem(m.jobcard)
        call mAdd o'.TWO', '//*    Zuegelschub' m.e.zuegelschub k,
                         , '//*    analyse    ' date(s) time() m.uNa ,
          , '//*    nachtrag   ' m.e.nachtrag m.e.auf7 || m.e.nachtrag,
          , '//*    rename old unloads: TSO DBX' m.e.auf7||m.e.nachtrag,
                       "REN" mapGet(e, 'subsys')
        call mapExpAll e, o'.TWO', skelStem(left(m.e.tool, 1)'Exe')
        call mAdd o'.TWO', '}!'
        call addIf o'.TWO', 'end'
        call stepGroup old
        call setIf o'.TWO', 'EXCP', 0 4
        end
    if fun == 'IE' then do /* add execute steps */
        call mapExpAll e, o'.TWO', skelStem(left(m.e.tool, 1)'Exe')
        call addIf o'.TWO', 'end'
        call setIf o'.TWO', 'EXE', 0 4
        end
    return
endProcedure caImport

caImpRename: procedure expose m.
parse arg o, msk, nact, ddlIn, ddlOut
    call addIf o
    call mapPut e, 'rStry', m.e.auf7'#'
    call mapPut e, 'ddlin', ddlIn
    call mapPut e, 'ddlout', ddlOut
    if m.o.ifLine == ''then
         call mapPut e, 'endIf', '//*      no endIf'
    else
         call mapPut e, 'endIf', '//       ENDIF'
    call mapExpAll e, o, skelStem('CREN')
    call caGlbChg o, msk
    call mAdd o,'//       ENDIF'  /* for if in skel dbxCRen */
    call setIf o, 'RANA', 0 4
    return
endProcedure caImpRename

stepGroup: procedure expose m.
parse arg f
     old = m.e.stepNo
     if f \== '' then
         no = f
     else
         no = old + 1
     m.e.stepNo = right(no, 3, 0)
     m.e.stepGr = 'S'm.e.stepNo
     call mapPut e, 'stp', m.e.stepGr
     return old
endProcedure stepGroup

setIf: procedure expose m.
parse arg o, stp, codes
    if stp == '' | m.e.tool = 'IBM' then
        li = ''
    else do
        li = ''
        do ax=2 by 2 to arg()
            stp = arg(ax)
            codes = arg(ax+1)
            if length(stp) < 5 then
                stp = m.e.stepGr || stp
            li = li 'AND' stp'.RUN AND'
            if codes == '' then
                li = li stp'.RC=0'
            else if words(codes) = 1 then
                li = li stp'.RC='strip(codes)
            else do
                li = li '('stp'.RC='word(codes, 1)
                do cx=2 to words(codes)
                    li = li 'OR' stp'.RC='word(codes,cx)
                    end
                li = li')'
                end
            end
        li = substr(li, 6)
        end

    m.o.ifLine = li
    return
endProcedure setIf

addIf: procedure expose m.
parse arg o, opt, cond
    if m.o.ifLine == '' & opt \== 1 then
        return
    else if opt == 'end' then
        call mAdd o, '//       ENDIF'
    else do
        pr = '//       IF'
        if cond == '' then
            cond = m.o.ifLine
        cond = space(cond, 1)
        do while length(cond) > 53
            ex = lastPos(' ', left(cond, 53))
            call mAdd o, pr left(cond, ex-1)
            cond = substr(cond, ex+1)
            pr = left('//', length(pr))
            end
        call mAdd o, pr cond 'THEN'
        end
    return
endProcedure addIf

addJobError: procedure expose m.
parse arg o
    if m.e.tool == ibm then
        return
    cond = m.o.ifLine
    if cond = '' then
        cond = 'RC=0'
    call addIf o, 1, 'ABEND OR NOT (' cond ')'
    call mAdd o, '//*** jobError: set CC to >= 12 ********************',
               , '//JOBERROR EXEC PGM=IDCAMS ',
               , '//SYSPRINT   DD SYSOUT=*',
               , '//SYSIN      DD *',
               , '   SET MAXCC = 12',
               , '//       ENDIF'
    return
endProcedure addJobError

/*--- DSN für CDL des Nachtrags zurückgeben und auf Existenz prüfen---*/
cdlDsnCheck: procedure expose m.
parse arg nt
    cdl = m.libPre'.'if(m.e.tool=='IBM', 'CDL', 'DDL') ,
        || '('m.e.auf7 || nt')'
    if m.cdlDsnCheck.cdl == 1 then
        return cdl
    rr = sysDsn("'"cdl"'")
    if rr <> 'OK' then
        call err 'cdl fuer' nt'. Nachtrag fehlt:' cdl rr
    m.cdlDsnCheck.cdl = 1
    return cdl
endProcedure cdlDsnCheck

/*--- Date und user rechtsbuendig einfuegen --------------------------*/
addDateUs: procedure expose m.
parse arg le
    return le right(date(s) time() m.uNa, 71-length(le))
endProcedure addDateUs                                      "'"

/*--- den aktuellen Auftrag analysieren ------------------------------*/
analyseAuftrag: procedure expose m.
    m.scopeSrc.0 = 0
    m.scopeSrc.dbSy = m.pr1Sub
    m.scopeSrc.rz     = m.myRz
    m.catSrc.0 = ''
    m.scopeTrg.0 = 0
    m.scopeTrg.dbSy = m.pr1Sub
    m.scopeTrg.rz = m.myRz
    m.catTrg.0 = ''
    m.imp.seq = -1
    m.nacImp = 0
    m.e.cChgs = ''
    m.e.comMask = ''
    m.e.iChgs   = ''
    m.e.impMask = ''
    m.e.iMap    = 'ALLLALLL'
    m.e.iRule   = ''
    m.e.impIgno = ''
    m.e.tool = 'CA'
    m.e.aModel = 'ALL'
    m.e.aUtil  = ''
    m.e.keepTgt = 1
    m.e.ddlOnly = 0
    allImpSubs = ''
    if m.auftrag.0 = 0 then
        call err 'Auftrag ist leer'
    vaWo = 'AUFTRAG'
    varWo =  'ZUEGELSCHUB BESTELLER CCHGS COMMASK COMIGNO' ,
             'ICHGS IMPMASK IMAP IRULE IMPIGNO' ,
             'AMODEL AUTIL VP0 VP1 VP2 VP3 VP4 VPT VP16 VP17' ,
             'KEEPTGT DBACHECK QCHECK CA BMC IBM DDLONLY'
    ignWo = 'SW SENDWSL RECEIVEWSL RECEIVESOURCE'
    ignCh = '*|'
    lev1Wo = 'SCOPE SOURCE TARGET COMPARE VERSION IMPORT SENDTARGET' ,
             varWo 'PROTOTYPERZ'
    do lx=1 to m.auftrag.0
        li = m.auftrag.lx
        parse upper var li w1 w2 w3 .
        if w1 = '' | pos(left(w1, 1), ignCh) > 0 ,
                   | wordPos(w1, ignWo) > 0 then
            iterate
        if wordPos(w1, vaWo) < 1 then
            call err 'operation' w1 ', erwartet' vaWo 'in Zeile' lx li
        w2 = translate(word(li, 2))
        if w1 = 'AUFTRAG' then do
            if w2 ^= m.auftrag.member then
                call err 'auftrag' w2 '<> member' m.auftrag.member
            m.e.auftrag = w2
            m.e.auf7    = left(w2, 7)
            m.e.nachtrag = '?'
            m.nachtrag.0 = 0
            if dataType(left(w3, 1), 'U') & length(w3) <= 8 then
                ow = w3
            else
                ow = 'S100447'
            call mapPut e, 'chgOwn', ow
            vaWo = lev1Wo
            end
        else if abbrev(w1, 'VP') then do
            call configureRZ , , substr(w1, 2)
            end
        else if wordPos(w1, 'CA BMC IBM') > 0 then do
            m.e.tool = w1
            end
        else if wordPos(w1, varWo) > 0 then do
            m.e.w1 = word(li, 2)
            end
        else if w1 = 'PROTOTYPERZ' then do /* alte syntax sep08 ??? */
            m.scopeSrc.rz = word(li, 2)
            end
        else if wordPos(w1, 'SCOPE SOURCE TARGET') > 0 then do
            suSy = ''
            if w1 = 'SOURCE' then do
                scp = 'SCOPESRC'
                suSy = w2
                end
            else if w1 = 'TARGET' then do
                scp = 'SCOPETRG'
                if abbrev('EXPLICIT', w2, 2) then do
                    m.optAuto = 0
                    suSy = w3
                    end
                else do
                    suSy = w2
                    if abbrev('EXPLICIT', w3, 2) then
                        m.optAuto = 0
                    end
                end
            else do /* alte syntax */
                if abbrev('SOURCE', w2) then
                    scp = 'SCOPESRC'
                else if abbrev('TARGET', w2) then
                    scp = 'SCOPETRG'
                else
                    call err 'scope' w2 'nicht abk. von SOURCE TARGET',
                                        'in Zeile' lx li
                end
            if (abbrev(suSy, 'DQ0') | abbrev(suSy, 'RZ1.DQ0')) ,
                                   <> (m.libPre == 'DSN.DBQ') then
                call err 'DBSys' suSy 'mit Auftrag in' m.libPre
            m.scp.0 = 0
            if pos('.', suSy) > 0 then
                parse var suSy suRz '.' suSy
            else if pos('/', suSy) > 0 then
                parse var suSy suRz '/' suSy
            else
                suRZ = ''
            if suSy <> '' then
                m.scp.dbSy = suSy
            if suRz <> '' then
                m.scp.rz = suRz
            vaWo = m.scopeTypes m.scopeType1 lev1Wo
            call debug 'scope' scp m.scp.rz'.'m.scp.dbSy
            end
        else if wordPos(w1, m.scopeTypes m.scopeType1) > 0 then do
            parse value analyseScope(li) with ty nm qu
            if ty = '?' then
                call err nm qu 'in scope line' lx':' strip(li)
            aa = mAdd(scp, 'scope')
            m.aa.type = ty
            m.aa.qual = qu
            m.aa.name = nm
            end
        else if wordPos(w1, 'COMPARE VERSION SENDTARGET') > 0 then do
            if w1 = 'SENDTARGET' then
                w2 = w3
            cmpLast = abbrev(w2, '=')
            w2 = strip(w2, 'l', '=')
            if length(w2) <> 1 | pos(w2, m.nachtragChars) < 1 then
                call err 'nachtrag' w2 'in Zeile' lx li
            if pos(w2, m.nachtragChars) ,
                    < pos(m.e.nachtrag, m.nachtragChars) then
                call err 'nachtrag' w2 '< vorherigem' m.e.nachtrag ,
                        'in Zeile' lx li
            if m.e.nachtrag <> w2 then do
                m.e.nachtrag = w2
                nx = m.nachtrag.0 + 1
                m.nachtrag.0 = nx
                m.nachtrag.nx = w2
                end
            m.nachtrag.nx.fun = ''
            m.nachtrag.nx.last = cmpLast
            if pos(left(w1, 1), 'CV') > 0 then
                m.nachtrag.nx.fun = left(w1, 1)
            if abbrev(w3, "'") | verify(w3, '/.', 'm') < 1 then
                t1 = m.myRz'/'m.pr1Sub
            else
                t1 = translate(w3, '/', '.')
            m.nachtrag.nx.trg = t1
            call debug 'nachtr' nx m.nachtrag.nx 'trg' m.nachtrag.nx.trg
            m.nacImp = (w1 <> 'COMPARE')
            end
        else if w1 = 'IMPORT' then do
            parse upper var li . dbSy nachAll chg .
            dbSy = translate(dbSy, '/', '.')
            if pos('/', dbSy) < 1 then
                dbSy = 'RZ1/'dbSy
            parse var chg chgAuf '.' chgNac '.' chgSeq '.' chgImp
            aa = m.e.auftrag
            if chgAuf = aa then do
                if left(chgNac, 1) <> left(nachAll, 1) then
                    call err 'Nachtrag von mismatch in Zeile' lx li
                if right(chgNac, 1) <> right(nachAll, 1) then
                    call err 'Nachtrag bis mismatch in Zeile' lx li
                end
            else if abbrev(chgAuf, aa) ,
                    & substr(chgAuf, length(aa)+4, 1) == '_' then do
                chgSeq = substr(chgAuf, length(aa)+1, 3)
                end
            else
                call err 'Auftrag mismatch in Zeile' lx li
            if chgSeq <= m.imp.seq then
                call err 'seq' chgSeq 'nicht > letzte' m.imp.seq,
                             'in Zeile' lx li
            m.nacImp = 1
            m.imp.last = dbSy
            m.imp.dbSy.nachtrag = nachAll
            if wordPos(dbSy, allImpSubs) < 1 then do
                allImpSubs = allImpSubs dbSy
                m.imp.dbSy.nachTop = left(nachAll, 1)
                end
            do nx=length(nachAll) by -1 to 1
                if pos(substr(nachAll, nx, 1), m.nachtragChars) ,
                     > pos(m.imp.dbSy.nachTop , m.nachtragChars) then
                    m.imp.dbSy.nachTop = substr(nachAll, nx, 1)
                end
            m.imp.dbSy.change     = chg
            m.imp.seq = chgSeq
            end
        else do
            call err 'ungültiger Operator' w1 'in Zeile' lx':' strip(li)
            end
        end

    m.e.keepTgt = m.e.keepTgt == 1
    m.promPath = abbrev(m.e.auftrag, 'XB') + 1
    if m.e.ddlOnly == '' | m.e.ddlOnly == 1 then
        m.e.ddlOnly = ''
    else
        m.e.ddlOnly = 'UNLOAD'
    if m.e.cChgs == '' then
        m.e.cChgs = dsnGetMbr(m.e.comMask)
    else if m.e.comMask == '' then
        m.e.comMask = m.libPre'.MASK('m.e.cChgs')'
    if m.e.iChgs == '' then
        m.e.iChgs = dsnGetMbr(m.e.impMask)
    else if m.e.impMask == '' then
        m.e.impMask = m.libPre'.MASK('m.e.iChgs')'
    if m.e.iRule == '' then
        m.e.iRule = dsnGetMbr(m.e.impIgno)
    else if m.e.impIgno == '' then
        m.e.impIgno = m.libPre'.MASK('m.e.iRule')'
    call mapPut e, 'aModel', translate(m.e.aModel)
    m.targets = ''
    m.compares = ''
    m.versions = ''
    drop cmpLast
    m.cmpLast = 0
    call mapPut e, 'tool', strip(m.e.tool m.e.toolVers)
    do nx=1 to m.nachtrag.0
        m.cmpLast = m.cmpLast | m.nachtrag.nx.last
        if wordPos(m.nachtrag.nx.trg, m.targets) < 1 then
            m.targets = m.targets m.nachtrag.nx.trg
        if m.nachtrag.nx.fun = 'C' then
            m.compares = m.compares || m.nachtrag.nx
        if m.nachtrag.nx.fun = 'V' then
            m.versions = m.versions || m.nachtrag.nx
        call debug 'nachtrag' nx m.nachtrag.nx 'trg' m.nachtrag.nx.trg,
                 'all' m.targets 'fun' ,
                  m.nachtrag.nx.fun 'com' m.compares 'ver' m.versions,
                  'cmpLast' m.cmpLast
        end
    if 0 & abbrev(m.scopeSrc.dbSy, 'DQ0') then
        call configureRz , '915 P0'
    if 0 then do
        say 'auftrag ' m.e.auftrag m.e.nachtrag mapGet(e, 'chgOwn')
        say '  comMask  ' m.e.comMask
        say '  comIgno  ' m.e.comIgno
        say '  impMask  ' m.e.impMask
        say '  impIgno  ' m.e.impIgno
        scp = 'SCOPESRC'
        drop dbSy
        say '  scope ' m.scp.0 m.scp.dbSy ,
            '  target ' m.scopeTrg.0 m.scopeTrg.dbSy
        do sx=1 to m.scp.0
            say '   ' m.scp.sx.type m.scp.sx.qual'.'m.scp.sx.name
            end
        end
    call bmcVars
    return
endProcedure analyseAuftrag

/*--- eine Scope Zeile analysieren -----------------------------------*/
analyseScope: procedure expose m.
parse arg li
    parse upper var li ty w1 rest
    if wordPos(ty, m.scopeType1) > 0 then
        ty = word(m.scopeTypes, wordPos(ty, m.scopeType1))
    if wordPos(ty, m.scopeTypes) < 1 then
        return '?'
    cx = pos('.', w1)
    if cx < 1 then do
        qu = w1
        end
    else do
        qu =strip(left(w1, cx-1))
        rest = substr(w1, cx) rest
        end
    if qu = '' then
        return '? leerer Qualifier'
    if ty = 'DB' then
        return ty qu
    if left(rest, 1) = '.' then
        rest = substr(rest, 2)
    nm = word(rest, 1)
    if nm = '' then
        return '? leerer Name'
    return ty nm qu
endProcedure analyseScope

/*--- jcl generieren um Src und Trg Version und DDL zu extrahieren ---*/
extractSrcTrg: procedure expose m.
parse arg o, xx, oldSrc mbrLast
    call configureDbSy m.scopeSrc.rz, m.scopeSrc.dbSy
    call mapPut e, 'auto', xx'AUTO'
    call mapPut e, 'src', xx'SRC'
    call mapPut e, 'trg', xx'TRG'
    mbrNac = mapGet(e, 'mbrNac')
    call mapPut e, 'what', xx'SRC'
    if ^ oldSrc then do
        call extractScopeVersion o, xx, 'SRC'
        end
    else if mbrNac <> mbrLast then do
        pr = m.libPre'.'xx'SRC'
        call copyDsn pr'DDL('mbrLast')', pr'DDL('mbrNac')', 1
        call copyDsn pr'CAT('mbrLast')', pr'CAT('mbrNac')', 1
        end
    call configureDbSy m.scopeTrg.rz, m.scopeTrg.dbSy
    call mapPut e, 'what', xx'TRG'
    if m.optAuto then do
        call mapExpAll e, o, skelStem('AutMa')
        if m.sysRz = m.scopeTrg.rz then do
            call mapExpAll e, o, skelStem('AutEx')
            end
        else do
            mbrN = mapGet(e, 'mbrNac')
            mark = mbrN'@'time()
            autD = mapExp(e, '${libPre}.$auto($mbrNac)')
            cf   = mapExp(e, '${libPre}.SENDCF($mbrNac)')
            sndIn = sendJob1(o, m.scopeTrg.rz, 'RECTRG',
                , 'send'    autD                      ,
                , 'job      -ddJob' m.timeout'//??' cf mark       ,
                , 'receive' mapExp(e, '${libPre}.${what}DDL($mbrNac)') ,
                , 'receive' mapExp(e, '${libPre}.${what}CAT($mbrNac)') )
            call mapExpAll e, o, skelStem('AutEx')
            call sendJob2 o, sndIn, cf mark
            end
        end
    else do
        call extractScopeVersion o, xx, 'TRG'
        end
    return
endProcedure extractSrcTrg

/*--- Version + DDL zu extrahieren -----------------------------------*/
extractScopeVersion: procedure expose m.
parse arg o, ty, what
    scp = 'SCOPE'what
    /* say m.scp.rz  'scp' scp */
    if m.sysRz = m.scp.rz then do
        call extractVersionStep o, ty, what
        end
    else do
        mbrN = mapGet(e, 'mbrNac')
        mark = mbrN'@'time()
        cf   = mapExp(e, '${libPre}.SENDCF($mbrNac)')
        sndIn = sendJob1(o, m.scp.rz, 'REC'what,
            , 'job      -ddJob' m.timeout'//??' cf mark       ,
            , 'receive' mapExp(e, '${libPre}.${what}DDL($mbrNac)') ,
            , 'receive' mapExp(e, '${libPre}.${what}CAT($mbrNac)') )
        call extractVersionStep o, ty, what
        call sendJob2 o, sndIn, cf mark
        end
    return
endProcedure extractScopeVersion

/*--- einen Step um Version + DDL zu extrahieren ---------------------*/
extractVersionStep: procedure expose m.
parse arg o, ty, what
    scp = 'SCOPE'what
    call mapPut e, 'what', ty || what
    i = skelStem('ExVe')
    sto = mapExpAllAt(e, o, i, 1, 1)
    do while sto ^== ''
        parse var sto lx cx
        w = word(substr(m.i.lx, cx), 1)
        if w == '$@scope' then do
            if ty == '' then do
                do sx=1 to m.scp.0
                    sn = scp'.'sx
                    if wordPos(m.sn.type, 'UDT UDF') > 0 then do
                        t = "SCH = '"m.sn.qual"', " ,
                            m.sn.type "= '"m.sn.name"';"
                        end
                    else do
                        t = "TYPE = '"m.sn.type"',"
                        if m.sn.type <> 'DB' then
                            t = t "QUAL = '"m.sn.qual"',"
                        t = t "NAME = '"m.sn.name"'"
                        if m.sn.type = 'SP' then
                            t = t", VERSION='%'"
                        t = t';'
                        end
                    if length(t) < 30 then do
                        call mAdd o, ' ' t
                        end
                    else do
                        cx = lastPos(',', t)
                        call mAdd o, ' ' left(t, cx),
                                   , '  ' substr(t, cx+1)
                        end
                    end
                end
            else if ty == 'DB' then do
                c = getDb2Catalog(what)
                do x=1 to m.c.0
                    d1 = m.c.x.db
                    if db.d1 == 1 then
                        iterate
                    db.d1 = 1
                    call mAdd o, "  TYPE = 'DB,' NAME = '"d1"';"
                    end
                end
            else
                call err 'extractVersionStep bad ty' ty
            end
        else do
            call err 'implement stop' sto 'word' w 'in line' lx m.i.lx
            end
        sto = mapExpAllAt(e, o, i, lx, cx + length(w))
        end
    return
endProcedure extractVersionStep

/*--- create jcl to copy one member to rz toRz and library toLib -----*/
copyMbr: procedure expose m.
parse arg o, mbr, frLib, toRz, toLib
    call mapPut e, 'mbr', mbr
    call mapPut e, 'frLib', dsnSetMbr(frLib)
    call mapPut e, 'toRz', toRz
    call mapPut e, 'toLib', dsnSetMbr(toLib)
    call addIf o
    call mapExpAll e, o, skelStem(if(toRz = m.sysRz, 'cMbr', 'sMbr'))
    call addIf o, 'end'
    call setIf o, 'COPY', 0
    return
endProcedure copyMbr
/*--- add jcl to stem o to send a job to rz toRz with stepname step
         and add the remaining arguments as sendJob statements
         afterwards the caller must add the jcl and call sendJob2 ----*/
sendJob1: procedure expose m.
parse arg o, toRz, step
    oldRz = m.myRz
    call configureRz toRz
    call mapPut e, 'step', step
    call mapExpAll e, o, skelStem('SendJ')
    do ax=4 to arg()
        aa = arg(ax)
        call debug 'sendJob1 le' length(aa) aa'|'
        sx = 0
        do forever
            sy = sx
            sx = pos(';', aa, sy+1)
            if sx = 0 then
                leave
            call mAdd o, substr(aa,sy+1, sx-sy-1)
            end
        call mAdd o, substr(aa, sy+1) left('-', (ax < arg()))
        end
    call mAdd o, '//DDJOB     DD *'
    stReX = m.o.0+1
    call mapPut e, 'jobName', 'Y'm.e.auf7
    call mapPut e, 'fun', 'extract data from' toRz
    call mapExpAll e, o, skelStem(m.jobCard)
    return oldRz stReX
endProcedure sendJob1

/*--- add the mark step to the job, translate leading // to ??
          and switch back to original rz -----------------------------*/
sendJob2: procedure expose m.
parse arg o, oldRz stReX, cfMark
    if cfMark ^= '' then do
        call mAdd o, '//         IF NOT ABEND' ,
                      'AND RC >= 0 AND RC <= 4 THEN'
        call mapPut e, 'step', 'MARKOK'
        call mapExpAll e, o, skelStem('SendJ')
        call mAdd o, 'mark' cfMark 'okRc0'
        call mAdd o, '//         ELSE'
        call mapPut e, 'step', 'MARKERR'
        call mapExpAll e, o, skelStem('SendJ')
        call mAdd o, 'mark' cfMark 'badRcOrAbend'
        call mAdd o, '//         ENDIF'
        end
    do ox = stReX to m.o.0
        if abbrev(m.o.ox, '//') then
            m.o.ox = overlay('??', m.o.ox)
        end
    call configureRz oldRz
    return
endProcedure sendJob2

/*--- return Stem fuer die CatalogInfo für Src oder Trg
          falls noetig aus Db2Catalog einlesen -----------------------*/
getDb2Catalog: procedure expose m.
parse arg wh
    st = 'CAT'wh
    if datatype(m.st.0, n) then
        return st
    else if m.st.0 ^== '' then
        call err 'getDb2Catalog('wh') bad value m.'st'.0' m.st.0
    scp = 'SCOPE'wh
    if m.sysRz = m.scp.rz then
        call sqlConnect m.scp.dbSy
    else
        call sqlConnect m.scp.rz'/'m.scp.dbSy
    call queryDb2Catalog st, wh
    m.v9.0 = 0
    call queryDb2V9 st, 'V9'
    return st
endProcedure getDb2Catalog

/*--- Information aus Db2Catalog fuer einen Scope einlesen -----------*/
queryDb2Catalog: procedure expose m.
parse arg st, what
    scp = 'SCOPE'what
    /* m.scopeTypes = 'DB TS TB VW IX AL' */
    ts = ''
    tb = ''
    ix = ''
    unQueried = 0
    do sx=1 to m.scp.0
        sn = scp'.'sx
        t = "  TYPE = '"m.sn.type"',"
        if m.sn.type <> 'DB' then
            t = t "QUAL = '"m.sn.qual"',"
        t = t "NAME = '"m.sn.name"';"
        call debug 'queryDb2Catalog' sx t
        if m.sn.type = 'DB' then
            ts = ts 'or s.dbName' sqlClause(m.sn.name)
        else if m.sn.Type = 'TS' then
            ts = ts 'or (s.dbName' sqlClause(m.sn.qual) ,
                    'and s.name' sqlClause(m.sn.name)')'
        else if m.sn.Type = 'TB' then
            tb = tb 'or (t.creator' sqlClause(m.sn.qual) ,
                    'and t.name' sqlClause(m.sn.name)')'
        else if m.sn.Type = 'IX' then
            ix = ix 'or (x.creator' sqlClause(m.sn.qual) ,
                    'and x.name' sqlClause(m.sn.name)')'
        else
            unQueried = unQueried + 1
        end
    sel = 'select s.dbName db, s.name ts , s.type, ',
                  's.partitions, s.segSize, s.log, ',
                  't.creator cr, t.name tb,' ,
                  't.status tbSta, t.tableStatus tbTbSta',
              'from sysibm.sysTableSpace S, sysibm.sysTables T'
    wh = "where s.dbName = t.dbName and s.name = t.tsName",
               "and t.type = 'T'"
    sql = ''
    if ts <> '' then
        sql = sql 'union' sel wh 'and ('substr(ts, 5)')'
    call debug 'ts sql' sql
    if tb <> '' then
        sql = sql 'union' sel wh 'and ('substr(tb, 5)')'
    call debug 'tb sql' sql
    if ix <> '' then
        sql = sql 'union' sel ', SYSIBM.SYSINDEXES X',
                    wh 'and t.creator=x.tbCreator and t.name=x.tbName',
                       'and ('substr(ix, 5)')'
    call debug 'ix sql' sql
    if sql = '' then do
         m.st.0 = 0
         if unQueried < 1 then
             say 'nothing specified in source scope'
         return 0
         end
    drop db ts cr tb type
    call sql2St substr(sql, 8), st
    if m.debug == 1 then do
        say m.st.0
        do sx = 1 to m.st.0
           say strip(m.st.sx.db)'.'strip(m.st.sx.ts) m.st.sx.type ,
                      m.st.sx.partitions m.st.sx.segSize
           end
        end
    return m.st.0
endProcedure queryDb2Catalog

/*--- haben wir schon DB2 V9 Objekte ? -------------------------------*/
queryDb2V9: procedure expose m.
trace ?r
parse arg sc, vv
    m.vv.0 = 0
    wh =''
    do x = 1 to m.sc.0
        wh = wh "or (cr='"m.sc.x.cr"' and tb='"m.sc.x.tb"')"
        end
    if wh == '' then
        return 0
    return sql2st("select tp,nm,v9",
             "from s100447.db2v9",
             "where V9 <> '' and (" substr(wh, 5) ")",
             "order by cr,tb,cl", vv)
endProcedure queryDb2V9

/*--- Qualitaets Pruefung fuer CatalogInfo Stem c --------------------*/
removeQualityCheck: procedure expose m.
parse arg c
    if m.libPre <> 'DSN.DBQ' then
        call maskIni
    o = 'AUFTRAG'
    m.o.orig = 'rmQu' m.o.orig
    m.spezialFall.done = ''
    aufOld = m.o.0
    do x=1 to m.c.0
        vDb = strip(m.c.x.db)
        n = '|| db' vDb
        if d.n ^== 1 then do
            d.n = 1
            call spezialfall vDb, substr(n, 4)
            end
        n = '|| ts' vDb'.'strip(m.c.x.ts)
        if d.n ^== 1 then do
            d.n = 1
            call spezialfall vDb, substr(n, 4)
            if m.c.x.log <> 'Y' then
                call mAdd o, n 'not logged'
            if m.c.x.partitions > 0 then
                nop
            else if m.c.x.segSize = 0 then
                call mAdd o, n 'simple TS'
            end
        n = '|| tb' strip(m.c.x.cr)'.'strip(m.c.x.tb)
        if d.n ^== 1 then do
            d.n = 1
            call spezialfall vDb, substr(n, 4)
            if m.c.x.tbTbSta = 'L' then
                call mAdd o, n 'auxilary index oder table fehlt'
            else if m.c.x.tbTbSta = 'P' then
                call mAdd o, n 'primary index fehlt'
            else if m.c.x.tbTbSta = 'R' then
                call mAdd o, n 'index auf Row ID fehlt'
            else if m.c.x.tbTbSta = 'U' then
                call mAdd o, n 'index auf unique key fehlt'
            else if m.c.x.tbTbSta = 'V' then
                call mAdd o, n 'Regenerierung interne ViewDarstellung'
            else if m.c.x.tbTbSta ^= '' then
                call mAdd o, n 'TableStatus' m.c.x.tbTbSta 'unbekannt'
            end
        end
    do vx=1 to m.v9.0
        call mAdd o, '|| V9' m.v9.vx.tp left(m.v9.vx.nm, 30) ,
                                        left(m.v9.vx.v9, 30)
        end
    return aufOld < m.o.0
endProcedure removeQualityCheck

/*--- Qualitaets Pruefung mittels ddlCheck ---------------------------*/
qualityCheck: procedure expose m.
parse arg x, y
    m.spezialFall.done = ''
    lst = ''
    scp = 'SCOPESRC'
    o = 'AUFTRAG'
    do sx=1 to m.scp.0
        sn = scp'.'sx
        if m.sn.type = 'DB' then
            f1 = 'db:'m.sn.name
        else if m.sn.Type = 'TS' then
            f1 = 'ts:'m.sn.qual'.'m.sn.name
        else if m.sn.Type = 'TB' then
            f1 = 't:'m.sn.qual'.'m.sn.name
        else if m.sn.Type = 'VW' then
            f1 = 'v:'m.sn.qual'.'m.sn.name
        else if m.sn.Type = 'IX' then
            f1 = 'i:'m.sn.qual'.'m.sn.name
        else
            iterate
        f1 = space(f1, 0)
        if wordPos(f1, lst) > 0 then
            iterate
        lst = lst f1
        end
    m.o.orig = 'rmQu' m.o.orig
    if lst = '' then do
        say 'qualitycheck no objects to check'
        call mAdd o, '|| qualitycheck no objects to check'
        return 0
        end
    qDsn = m.libPre'.QUALITY('mapGet(e, 'mbrNac')')'
    cRes = ddlCheck('CHECK' qDsn x y lst)
    call splitNl cr, cRes, cr
    cr1 = substr(m.cr.1, 4)','
    if pos('\n', cRes) > 0 then
        cr1 = left(cRes, pos('\n', cRes)-1)','
    else
        cr1 = cRes','
    res = pos('q,', cr1) > 0 | pos('*sb,', cr1) > 0 ,
        | pos('*p', cr1) > 0 | pos('*n,', cr1) > 0
    if \ res then do /* add new | lines to auftrag */
        call mAdd o, '|| qualitycheck ok:' substr(m.cr.1, 4)
        end
    else do
        call mAdd o, '|| qualitycheck:' substr(m.cr.1, 4)
        call mAddSt o, cr, 2
        end
    return res
endProcedure qualityCheck

/*--- für jedes Objekt aus Source Scope Eintrage in der
      Spezialfall Library suchen und falls vorhanden anzeigen --------*/
removeSspezialFall: procedure expose m. --> ddlCheck
parse upper arg db, typ qua '.' nam
    if m.libPre = 'DSN.DBQ' then
        return
    pDb = mask2prod('DBNAME', db)
    if (typ = 'DB' | typ = 'TS') & db <> qua then
        call err 'db mismatch spezialFall('db',' typ qua'.'nam')'
    if typ = 'DB' then
        srch = typ pDb'.'
    else if typ = 'TS' then
        srch = typ pDb'.'mask2prod('TSNAME', nam)
    else if typ = 'TB' then
        srch = typ mask2prod('TBOWNER', qua)'.'mask2prod('TBNAME', nam)
    else
        call err 'bad typ' typ
    st = spezialFall'.'pDb
    if symbol('m.st.0') <> 'VAR' then do
        dsn = m.libSpezial"("pDb")"
        sy = sysDsn("'"dsn"'")
        if sy <> 'OK' then do
            m.st.0 = 0
            if sy <> 'MEMBER NOT FOUND' then
                call err 'spezialFall library' dsn':' sy
            end
        else do
           call readDsn dsn, 'M.SPEZIALFALL.'pDB'.'
           end
        end
    if m.st.0 < 1 then
        return
    offs = 999
    found = 0
    do sx = 1 to m.st.0
        fx = verify(m.st.sx, ' ')
        if fx = 0 | fx > 72 then
           iterate
        if substr(m.st.sx, fx, 1) = '*' then
           iterate
        if fx <= offs then do
            offs = fx
            m.st.sx = left(m.st.sx, 72)
            n = ''
            if pos('.', m.st.sx) > 0 then
                parse upper var m.st.sx t q '.' n .
            else
                parse upper var m.st.sx t q .
            if wordPos(t, 'DB TS TB') < 1 then
              call err 'spezialFall' pDb 'line' sx 'ungueltig:' m.st.sx
            found = match(srch, t strip(q)'.'strip(n)) ,
                    & ^ (wordPos(pDb'.'sx, m.spezialFall.done) > 0)
            if found then
                m.spezialFall.done = m.spezialFall.done  pDb'.'sx
            end
        if found then
            call mAdd auftrag, '|-' left(m.st.sx, 78)
        end
    return
endProcedure removeSpezialFall

/*--- mask handling initialise ---------------------------------------*/
removemaskIni: procedure expose m.
    call maskHierarchy
    call maskRead mask.prot, m.libPre'.MASK(PROTDBAF)'
    call maskRead mask.dbof, m.libPre'.MASK(DBAFDBOF)'
    return
endProcedure maskIni

/*--- mask a whole scope  --------------------------------------------*/
removemaskScope: procedure expose m.
parse arg mskDsn, fr, to
    call maskRead masc, mskDsn
    do fx=1 to m.fr.0
        ty = m.fr.fx.type
        m.to.fx.type = ty
        if wordPos(ty, 'DB SG') > 0 then
            m.to.fx.qual = ''
        else if wordPos(ty, 'TS') > 0 then
            m.to.fx.qual = maskTrans(masc, 'DBNAME', m.fr.fx.qual)
        else
            m.to.fx.qual = maskTrans(masc, 'SCHEMA', m.fr.fx.qual)
        if wordPos(ty, 'DB') > 0 then
            m.to.fx.name = maskTrans(masc, 'DBNAME', m.fr.fx.name)
        else if wordPos(ty, 'TB VW AL') > 0 then
            m.to.fx.name = maskTrans(masc, 'TBNAME', m.fr.fx.name)
        else if wordPos(ty, 'SP') > 0 then
            m.to.fx.name = maskTrans(masc, 'STPNAME', m.fr.fx.name)
        else
            m.to.fx.name = maskTrans(masc, ty'NAME', m.fr.fx.name)
        end
    m.to.0 = m.fr.0
    return
endProcedure maskScope

/*--- mask test functions --------------------------------------------*/
removetestMask: procedure expose m.
    call maskIni
    call maskTT OWNER, GDB9998
    call maskTT DBNAME, DGDB9998
    call maskTT DBNAME, DGDB0287
    call maskTT OWNER, GDB0301
    call maskTT TSNAME, AGRFX12A2
    call maskTT OWNER, SYS123EF
    return 0
endProcedure testMask

removeMaskTT: procedure expose m.
parse arg ty, na
    say 'maskTrans(prot,' ty',' na') =' maskTrans(mask.prot, ty, na) ,
        ' -> DBOF' maskTrans(mask.dbof, ty, maskTrans(mask.prot,ty,na))
    return

/*--- translate a prototype object to DBOF naming -------------------*/
removemask2Prod: procedure expose m.
parse arg ty, na
    return translate(strip(,
        maskTrans(mask.dbof, ty, maskTrans(mask.prot,ty,na))))

/*--- translate an object of type ty and name na
           by the masking file in st --------------------------------*/
removemaskTrans: procedure expose m.
parse arg st, ty, na
    if symbol('m.mask.hier.ty') <> 'VAR' then
        call err 'bad type' ty
    types = m.mask.hier.ty
    do sx=1 to m.st.0
        if wordPos(m.st.sx.typ, types) < 1 then
            iterate
        if match(na, m.st.sx.in, vv) then
            return matchTrans(m.st.sx.out, vv)
        end
    return na
endProcedure maskTrans

/*--- read and analyse the masking file dsn into stem st ------------*/
removemaskRead: procedure expose m.
parse arg st, dsn
    maskIgno = 'COMPRESS SEGSIZE DEFER DEFINE PRIQTY SECQTY'
    call readDsn dsn, i.
    j = 0
    do i=1 to i.0
        parse var i.i t ':' s ',' d
        t = strip(t)
        if symbol('m.mask.hier.t') == 'VAR' then
            nop
        else if wordPos(t, maskIgno) > 0 then
            iterate
        else
            call err 'bad typ' t 'in maskline' i':' i.i
        j = j+1
        m.st.j.typ = t
        m.st.j.in = strip(s)
        m.st.j.out = word(d, 1)
        end
    m.st.0 = j
    return
    drop typ in out
    do wx=1 to m.st.0
        say wx m.st.wx.typ':' m.st.wx.in'==>'m.st.wx.out'|'
        end
endProcedure maskRead

/*--- initialise the type hierarchy of masking
           as input use the msgLines of the mask editor --------------*/
removemaskHierarchy: procedure expose m.
                     /* copy der hierarch aus masking template */
    call mAdd mCut('T', 0)                           ,
      , 'COLNAME                                     ' ,
      , 'NAME                                        ' ,
      , '  DBNAME,TSNAME,TBNAME,IXNAME,UDFNAME,      ' ,
      , '  UDTNAME,COLLNAME,PKGNAME,PGMNAME,PLNNAME  ' ,
      , '  DBRMNAME,STPNAME,SFNAME,TGNAME,GRPNAME,   ' ,
      , '  VCATNAME,GBPNAME                          ' ,
      , '  BPNAME                                    ' ,
      , '    TSBPNAME,IXBPNAME                       ' ,
      , '  SGNAME                                    ' ,
      , '    TSSGNAME,IXSGNAME                       ' ,
      , 'AUTHID                                      ' ,
      , '  SQLID,SCHEMA                              ' ,
      , '  OWNER                                     ' ,
      , '    DBOWNER,TSOWNER,TBOWNER,IXOWNER         ' ,
      , '  GRANTID                                   ' ,
      , '    GRANTOR,GRANTEE                         '
    qx = 0
    lOff = -1
    m.mask.hier = ''
    do x=1 to m.t.0
        of = verify(m.t.x, ' ', 'n')
        li = translate(m.t.x, ' ', ',')
        do while qx > 0 & word(q.qx, 1) >= of
            qx = qx -1
            end
        px = qx - 1
        if (qx = 0 | of > word(q.qx, 1))  & words(li) = 1 then do
            px = qx
            qx = qx + 1
            if qx = 1 then
                q.qx = of word(li, 1)
            else
                q.qx = of word(li, 1) subword(q.px, 2)
            end
        do wx=1 to words(li)
            w1 = word(li, wx)
            m.mask.hier = m.mask.hier w1
            if wordPos(w1, subWord(q.qx, 2)) < 1 then
                m.mask.hier.w1 = w1 subWord(q.qx, 2)
            else
                m.mask.hier.w1 = subWord(q.qx, 2)
            end
        end
    return
endProcedure maskHierarchy

/*--- Funktion q: scope Zeilen pruefen -------------------------------*/
queryScope: procedure expose m.
parse arg dbSy
    subs2 = ''
    rf = 1
    isConn = 0
    if adrEdit('(rl) = lineNum .zl', 4) = 4 then
            rl = 0
    if ^ m.editMacro then
        call err 'q nicht als Macro'
    if ^ m.editProc then do
        if adrEdit('PROCESS RANGE Q', 0 4) = 0 then do
            call adrEdit '(rf) = lineNum .zfrange'
            call adrEdit '(rl) = lineNum .zlrange'
            end
        m.editProc = 1
        end
    do rx = rf by 1 while rx <= rl
        call adrEdit '(li) = line' rx
        parse value analyseScope(li) with ty nm qu
        if ty = '?' then do
            if nm <> '' then
                say nm qu 'in line' rx':' strip(li)
            if \ isConn & dbSy == '' then do
                parse upper var li w1 w2 .
                if wordpos(w1, 'SOURCE TARGET') > 0 then do
                    if length(w2) = 4 | ( length(w2) = 8 ,
                          & pos(substr(w2,4,1), './') > 0) then
                    subs2 = translate(w2, '/', '.')
                    end
                end
            iterate
            end
        if \ isConn then do
            isConn = 1
            if dbSy = '' then
                dbSy = if(subs2 == '', m.pr1Sub, subs2)
            dbSy = translate(dbSy, '/', '.')
            if abbrev(dbSy, m.sysRz'/') then
                dbSy = substr(dbSy, 5)
            call sqlConnect dbSy
            dbSy = translate(dbSy, m.ut.alfLC, m.ut.alfUC)
            end
        call expandScope mCut(qq, 0), ty, qu, nm
        do qx=1 to m.qq.0
            neu = m.qq.qx
            if length(neu dbSy) < 70 then
                neu = left(neu, 68 - length(dbSy)) '*'dbSy
            else if length(neu dbSy) < 80 then
                neu = neu '*'dbSy
            liCm = if(qx=1, "line" rx, "line_after" (rx+qx-2))
            if adrEdit(liCm "= (neu)", 4) = 4 then
                say 'truncation line' rx':' neu
            end
        rx = rx + m.qq.0 - 1
        rl = rl + m.qq.0 - 1
        end
    call sqlDisConnect
    return 0
endProcedure queryScope

/*--- einen Scope Ausdruck expandieren -------------------------------*/
expandScope: procedure expose m.
parse arg o, ty, qu, nm
     sql = ''
     dec2s = "strip(case when abs(?) > 9223372036854775807",
                       "then char(real(?)) else char(bigint(?)) end)"
     if ty = 'DB' then
         sql = "select 'db', name, '' from sysibm.sysDatabase",
                    "where name" sqlClause(nm)
     else if ty = 'TS' then
         sql = "select 'ts', strip(dbName) || '.' || strip(tsName)," ,
                    "case when count(*) = 1 then 'tb '" ,
                         "else strip(char(count(*))) || ' tables||| '",
                    "end || min(strip(creator) ||'.'|| strip(name))",
                    "from sysibm.systables" ,
                    "where type = 'T' and dbName" sqlClause(qu),
                                    "and tsName" sqlClause(nm),
                    "group by dbName, tsName"
     else if ty = 'TB' | ty = 'VW' | ty = 'AL' then
         sql = "select case when type = 'T' then 'tb'",
                           "when type = 'V' then 'vw'",
                           "when type = 'A' then 'al'",
                                           "else '?' || type end,",
                    "strip(creator) || '.' || strip(name),",
                    "case when type = 'A' then 'for '",
                              "|| strip(location) || '.'" ,
                              "|| strip(tbCreator)||'.'||strip(tbName)",
                          "else 'ts ' || strip(dbName) ||'.'",
                                      "|| strip(tsName)",
                    "end",
                    "from sysibm.systables" ,
                    "where type =" quote(left(ty, 1), "'"),
                        "and creator" sqlClause(qu),
                        "and name" sqlClause(nm)
     else if ty = 'IX' then
         sql = "select 'ix', strip(creator) || '.' || strip(name),",
                        "'tb ' || strip(tbCreator)||'.'||strip(tbName)",
                    'from sysibm.sysIndexes' ,
                    'where creator' sqlClause(qu),
                           'and name' sqlClause(nm)
     else if ty = 'UDT' then
         sql = "select 'udt', strip(schema) || '.' || strip(name),",
                        "'source ' || strip(sourceSchema)",
                        "|| '.' || strip(sourceType)",
                    "from sysibm.sysDataTypes",
                    'where schema' sqlClause(qu),
                           'and name' sqlClause(nm)
     else if ty = 'UDF' | ty = 'SP' then
         sql = "select case when routineType = 'F' then 'udf'",
                           "when routineType = 'P' then 'sp'",
                           "else '?' || routineType end, ",
                      "strip(schema) || '.' || strip(name),",
                      "'otp=' || origin || function_type" ,
                        "|| strip(char(parm_count))",
                      "|| ' spec=' || strip(specificName)",
                      "|| ' a=' || active || ' vers=' || version",
                    "from sysibm.sysRoutines",
                    'where routineType =' quote(right(ty, 1), "'"),
                         'and schema' sqlClause(qu) ,
                         'and name' sqlClause(nm)
     else if ty = 'TG' then
         sql = "select 'tg', strip(schema) || '.' || strip(name),",
                        "'teg ' || trigTime || trigEvent||granularity",
                        "|| ' tb ' || strip(tbOwner) || '.'",
                        "||           strip(tbName)",
                    "from sysibm.sysTriggers",
                    'where schema' sqlClause(qu),
                         'and name' sqlClause(nm)
     else if ty = 'SQ' then
         sql = "select 'sq', strip(schema) || '.' || strip(name),",
                        "'start ' ||" repAll(dec2s, "?", "start"),
                        "|| ': ' ||" repAll(dec2s, "?", "minValue"),
                        "|| '-' ||" repAll(dec2s, "?", "maxValue"),
                        "|| ' inc ' ||" repAll(dec2s, "?", "increment"),
                    "from sysibm.sysSequences",
                    "where seqType='S' and schema" sqlClause(qu),
                           "and name" sqlClause(nm)
     else if ty = 'SY' then
         sql = "select 'sy', strip(creator) || '.' || strip(name),",
                        "'for ' || strip(tbCreator) || '.'" ,
                               "||strip(tbName)",
                    "from sysibm.sysSynonyms",
                    "where creator" sqlClause(qu),
                         "and name" sqlClause(nm)
     else do
        call mAdd o, ty left(qu'.'nm, 30) '* query nicht implementiert'
        return
        end
     call sqlQuery 1, sql 'order by 2', ,
        , classNew('n* SQL u f FT v, f FN v, f FI v')
     do cx=0 by 1 while sqlFetch(1, d)
             call mAdd o, lefA(m.d.ft, 3) lefA(m.d.fn, 30) m.d.fi
             end
     call  sqlClose 1
     if cx = 0 then
         call mAdd o, lefA(ty, 3) lefA(strip(qu)left('.', qu \== '') ,
                   || strip(nm), 30) '* nicht gefunden'
    return
endProcedure expandScope

/*--- return sql condition (= String oder like String) ---------------*/
sqlClause: procedure expose m.
parse arg val
     val = translate(val, '%_', '*?')
     if verify(val, '%_', 'm') > 0 then
          return 'like' quote(val, "'")
     else
          return '=' quote(val, "'")
endProcedure sqlClause

lefA: procedure expose m.
parse arg s, len
    if length(s) < len then
        return left(s, len)
    else
        return s
endProcedure lefA

/*--- copy srcDdl und srcCat aus anderem rz --------------------------*/
receiveSource: procedure expose m.
parse arg rz
    if rz = '' | rz = '*' | rz = m.myRz then
        call err 'rs receiveSource mit ungueltigem rz' rz
    call readAuftrag rz, m.auftrag.dataset, m.e.auftrag
    call analyseAuftrag
    if m.e.nachtrag = '?' then
        call err 'keine Version in Auftrag' m.e.auftrag 'im' rz
    nacMbr = m.e.auf7 || m.e.nachtrag
    call csmCopy rz'/'m.libPre'.srcDdl('nacMbr')', m.libPre'.'rz'DDL'
    call csmCopy rz'/'m.libPre'.srcCat('nacMbr')', m.libPre'.'rz'Cat'
    call readAuftrag   , m.auftrag.dataset, m.auftrag
    call mAdd auftrag, addDateUs('receiveSource' rz,
                        m.libPre'.'rz'Cat('nacMbr')')
    return
endProcedure receiveSource

/*--- copy wsl aus anderem rz ----------------------------------------*/
receiveWSL: procedure expose m.
parse arg rz
    if rz = m.myRz then
        rz = ''
    call analyseAuftrag
    sWsl = 'dsn.dba.clon.wsl('m.e.auf7'Q)'
    sIff = 'dsn.dba.'m.e.auf7'Q.IFF'
    if rz <> '' then do
        call csmCopy rz'/'sWsl, sWsl
        if adrCsm("dslist SYSTEM("rz") DSNMASK('"sIff"') SHORT", 4) = 0,
               & stemSize = 1 then
            call csmCopy rz'/'sIff, sIff
        else
            say 'iff existiert nicht im' rz
        end
    call cloneWsl '', m.e.auftrag, 1
    call mAdd auftrag, addDateUs('receiveWSL' rz)
    return
endProcedure receiveWSL

/*--- send wsl to the argument rz ------------------------------------*/
sendWSL: procedure expose m.
parse arg rz
    if rz = m.myRz then
        rz = ''
    call analyseAuftrag
    if m.versions = '' | m.compares <> '' then
        call warn 'sendWSL ohne versions oder mit compares'
    sWsl = 'dsn.dba.clon.wsl('m.e.auf7'Q)'
    sIff = 'dsn.dba.'m.e.auf7'Q.IFF'
    if sysDsn("'"sWsl"'") <> 'OK' then
        call err 'source wsl fehlt:' sWsl sysDsn("'"sWsl"'")
    if rz <> '' then do
        call csmCopy sWsl, rz'/'sWsl
        if sysDsn("'"sIff"'") <> 'OK' then
            say 'iff existiert nicht' sIff sysDsn("'"sIff"'")
        else
            call csmCopy sIff, rz'/'sIff
        end
    call cloneWsl rz, m.e.auftrag, 1
    call mAdd auftrag, addDateUs('sendWSL' rz)
    return
endProcedure sendWSL

/*--- clone a wsl mbr in the rz sys,
          if doRemove=1 remove old members first ---------------------*/
cloneWsl: procedure expose m.
parse arg sys, mbr, doRemove
                 /* copy multi clone jcl from target rz */
    jcl = csmSysDsn(sys'/DSN.DBA.MULTI.CLONE'right(mbr, 1)'.JCL', 0)
    CALL READdsn jcl, m.jj.
                                /* modify the jcl */
    do jx=1 to m.jj.0
        if word(m.jj.jx, 2) == '=' then do
            if word(m.jj.jx, 1) = 'SRCWSLST' then
                m.jj.jx = 'SRCWSLST =' left(mbr, 7)'Q'
            else if word(m.jj.jx, 1) = 'CLNWSLST' then
                m.jj.jx = 'CLNWSLST =' mbr
            end
        else if space(subword(m.jj.jx, 1, 2) ,1) ,
                == '//DELMBRIF IF' then do
            m.jj.jx = '//DELMBRIF IF RC =' (7 *(^doRemove)) 'THEN'
            end
        else if word(m.jj.jx, 1) == 'DELETE' then do
            nm = word(m.jj.jx, 2)
            cx = pos('(', nm)
            if right(nm, 1) = ')' & cx > 0 then
                m.jj.jx = '  DELETE' left(nm, cx)mbr')'
            else
                call err 'bad delete' jx m.jj.jx
            end
        end
    call writeSub jj, sys, 1
    return 0
endProcedure cloneWsl

warn:
    say '*** warning:' arg(1)
    return
endSubroutine warn

repAll: procedure expose m.
parse arg src, w, new
    res = ''
    cx = 1
    do forever
        nx = pos(w, src, cx)
        if nx < 1 then
            return res || substr(src, cx)
        res = res || substr(src, cx, nx-cx) || new
        cx = nx + length(w)
        end
endProcedure repAll

/**** ca *************************************************************/
/*--- extract ddl from source system ---------------------------------*/
caDDl: procedure expose m.
parse arg o, scp, GlbChg
    if m.sysRz = m.scp.rz then do
        call caDD1 o, scp, GlbChg
        end
    else do
        mbrN = mapGet(e, 'mbrNac')
        mark = mbrN'@'time()
        cf   = mapExp(e, '${libPre}.SENDCF($mbrNac)')
        sndIn = sendJob1(o, m.scp.rz, 'RECSRC',
            , 'job      -ddJob' m.timeout'//??' cf mark       ,
            , 'receive' mapExp(e, '${libPre}.ddl($mbrNac)'))
        call caDD1 o, scp, GlbChg
        call sendJob2 o, sndIn, cf mark
        end
    return
endProcedure caDDL

/*--- quickMigrate to create ddl -------------------------------------*/
caDD1: procedure expose m.
parse arg o, scp, GlbChg
    call mapPut e, 'user', userid()
    call mapExpAll e, o, skelStem('CCOM')
    do sx=1 to m.scp.0
        sn = scp'.'sx
        if m.sn.type == 'DB' then
            call caEx o, 'DATABASE' '='  m.sn.name, 'db'
        else if m.sn.type == 'IX' then
            call caEx o, 'INDEX' m.sn.qual m.sn.name, 'i'
        else if m.sn.type == 'TB' then
            call caEx o, 'TABLE' m.sn.qual m.sn.name, 't'
        else if m.sn.type == 'TS' then
            call caEx o, 'TABLESPACE' m.sn.qual m.sn.name, 'ts'
        else if m.sn.type == 'TG' then
            call caEx o, 'TRIGGER' m.sn.qual m.sn.name, 'tg'
        else if m.sn.type == 'VW' then
            call caEx o, 'VIEW' m.sn.qual m.sn.name, 'v'
        else if m.sn.type == 'SP' then do
            parse var m.sn.name nm '.' vers
            call caEx o, 'PROCEDUR' m.sn.qual nm vers, 'r'
            end
        else
            call err 'implement type' m.sn.type 'for ca'
        end
    call mapExpAll e, o, skelStem('CCO2')
    call caGlbChg o, glbChg
    return
endProcedure caDD1


caGlbChg: procedure expose m.
parse arg o, gCh
    if gCh == '' then
        return
    upper gCh
    if symbol('m.glbChg.gCh.0') \== 'VAR' then do
        glblDsn = m.libPre".GlbChg("gCh")"
        if sysDsn("'"glblDsn"'") \== 'OK' then
            call err 'mask' gCh':' glblDsn sysDsn("'"glblDsn"'")
        call readDsn glblDsn, 'M.GLBCHG.'gCh'.'
        end
    call mAddSt o, 'GLBCHG.'gCh
    return
endProcedure caGlblChg

/*--- add explode options depending on object type -------------------*/
caEx: procedure expose m.
parse arg o, oLine, ty
    call mAdd o, '' oLine
    call caE1 o, ty, 'e TABLESPACE        db'
    call caE1 o, ty, 'i TABLESPACE              t'
    call caE1 o, ty, 'e TABLE             db ts'
    call caE1 o, ty, 'e INDEX             db ts t'
    call caE1 o, ty, 'e VIEW              db ts t v'
    call caE1 o, ty, 'e SYNONYM           db ts t v'
    call caE1 o, ty, 'e TRIGGER           db ts t v'
    call caE1 o, ty, 'e MQTB_T            db ts t v'
    call caE1 o, ty, 'e MQTB_I            db ts t v'
    call caE1 o, ty, 'e MQTB_V            db ts t v'
    call caE1 o, ty, 'e MQTB_S            db ts t v'
    call caE1 o, ty, 'e MQVW_VW           db ts t v'
    call caE1 o, ty, 'e MQVW_I            db ts t v'
    call caE1 o, ty, 'e MQVW_V            db ts t v'
    call caE1 o, ty, 'e MQVW_S            db ts t v'
    call caE1 o, ty, 'i MQVW_VW                     i'
    return
endProcedure caEx
caE1: procedure expose m.
parse arg o, ty, v1 v2 types
    if v1 == 'e' then
        e = 'EXPLODE'
    else if v1 == 'i' then
        e = 'IMPLODE'
    else
        call err 'bad explode' v1 'in caE1('o',' ty',' v1 v2 types')'
    if wordPos(ty, types) > 0 then
        call mAdd o, ' 'left(e, 11) v2
    return
endProcedure caE1
/**** bmc ************************************************************/
/*--- src und trg profile erstellen ----------------------------------*/
bmcVars: procedure expose m.
    m.e.profSrc = m.e.auftrag'_SRC'
    m.e.profTrg = m.e.auftrag'_TRG'
    m.e.profOwn = 'DBXAUFTR'
    return
endProcedure bmcVars

bmcVarsProf: procedure expose m.
parse arg isImport
    m.e.profChg = bmcMask2Prof(m.e.comMask)
    if isImport then
        m.e.profImp = bmcMask2Prof(m.e.impMask)
    return
endProcedure bmcVarsProf

bmcMask2Prof: procedure expose m.
parse arg mask
    m2 = translate(mapExp(e, mask))
    return word(translate(m2, '   ', '.()'), 2)'.'dsnGetMbr(m2)
endProdecure bmcMask2Prof

/*--- src und trg profile erstellen ----------------------------------*/
bmcSrcTrg: procedure expose m.
parse arg oldSrc prof
    if symbol('m.mask.hier') \== 'VAR' then
        call maskHierarchy
    if m.scopeSrc.rz \== m.sysRz | m.scopeTrg.rz \== m.sysRz then
        call err 'bmc compare on other rz not implemented'
    if m.scopeSrc.dbSy \== m.scopeTrg.dbSy then
        call err 'bmc compare on different dbSystems not implemented'
    call configureDbSy m.scopeSrc.rz, m.scopeSrc.dbSy
    call bmcProfile m.e.profOwn, m.e.profSrc, 'SCOPESRC'
    if m.optAuto then
        call maskScope m.e.comMask, 'SCOPESRC', 'SCOPETRG'
    call bmcProfile m.e.profOwn, m.e.profTrg, 'SCOPETRG'
    return
endProcedure bmcSrcTrg

bmcProfile: procedure expose m.
parse arg ow, prof, scp
    call sqlConnect m.scp.dbSy
    call sqlExec "insert into bmcacma1.CM_BLPROFILE" ,
                    "(BLPOWNER, blpName, type, template)" ,
         "values('"ow"', '"prof"', 'C', '"prof"####')", -803
    call sqlExec "delete from bmcacma1.CM_SCOPE" ,
                   "where scOwner = '"ow"' and scName = '"prof"'", 100
    do sx=1 to m.scp.0
        sn = scp'.'sx
        if m.sn.type = 'DB' then do
            q1 = m.sn.name
            q2 = ''
            end
        else do
            q1 = m.sn.qual
            q2 = m.sn.name
            end
        call sqlExec "insert into bmcacma1.CM_SCOPE" ,
          "(SCOWNER, SCName, Type, ACTION,OBJECT,NAME_PART1,NAME_PART2",
          ",MIGDT, MIGTS, MIGTB, MIGCK, MIGFK, MIGIX, MIGVW, MIGAU",
          ",MIGSY, MIGAL, MIGRO, MIGTR, MIGUC, MIGAX",
         ")values('"ow"', '"prof"', 'B', 'I'" ,
          ", '"m.sn.type"', '"q1"', '"q2"'" ,
          ",'N'  , 'Y',   'Y',  'Y',    'Y',   'Y',   'Y',  'N'",
          ",'Y'  , 'Y',   '',   'Y',    'Y',   'Y')"
        end
     call sqlCommit
     return
endProcedure bmcProfile
/*--- zStat Zuegelschub Statistik ------------------------------------*/
   zstat a? yymm?       - in rz1,  create AyyMM mit AuftragsListe
----------------------------------------------------------------------*/
zStat: procedure expose m.
parse upper arg aArg
parse upper arg fun zgl fr to
    rz = sysvar('sysNode')
    if fun = '' then
        if rz = 'RZ4' then
            fun = 'A'
        else if rz = 'RZ2' | rz = 'RR2'  | rz = 'RZ4' then
            fun = 'S'
    if zgl = '' then
        zgl = substr(date('s'), 3, 4)
    if fr = '' | fr = '-' then
        fr = zgl'01'
    if to = '' | to = '-' then
        to = zgl'21'
    m.lib = m.libPre'.ZGL'
    aDsn = m.lib'(ZSTA'zgl')'
    sDsn = m.lib'(ZSTS'zgl')'
    if fun = 'A' then do
        if  rz <> 'RZ4' then
            call err 'zstat a... only in rz4'
        if sysDsn("'"aDsn"'") == 'OK' then
            call err "e}"aDsn "existiert schon"
        call checkAuftrag m.libPre'.auftrag', '20'fr '20'to, aDsn
        end
    else if fun == 'S' then do
        if  rz <> 'RZ2' & rz <> 'RR2' & rz <> 'RZ4' then
            call err 'zstat s... only in rz2 or rz4'
        if sysDsn("'"aDsn"'") \== 'OK' then
            call err aDsn "existiert nicht"
        call stats zgl, aDsn, sDsn
        end
    else
        call err 'i}bad fun' fun 'in arguments zStat' aArg
    return 0
endProcedure zStat

stats: procedure expose m.
parse arg zgl, aufLst, out
m.mm.verbs = '   CREATE     ALTER      DROP     '
m.mm.verb2 = m.mm.verbs 'REBIND'
m.mm.objs = 'DATABASE TABLESPACE TABLE INDEX VIEW TRIGGER SYNONYM ALIAS'
m.mm.obj2 = m.mm.objs 'UNIQUE'
m.mm.auft = ''
m.mm.count.auft = 0
m.mm.count.list = 0
m.mm.count.nact = 0
m.mm.count.rebind = 0
m.mm.count.load = 0
call readDsn aufLst, m.l.
do lx=1 to m.l.0
    au = word(m.l.lx, 1)
    a7 = left(translate(au), 7)
    if abbrev(a7, '*') | a7 = '' then
        iterate
    m.auft.a7 = au word(m.l.lx, 2)
    m.mm.auft = m.mm.auft a7
    m.mm.count.list = m.mm.count.list + 1
    end
dbSys = ''
rz = sysvar(sysNode)
if rz = 'RZ4' then  do
    dbSys = 'DBOL DP4G'
    end
else do px=1 to m.promD.0
    p1 = translate(m.promD.px, ' ', ',')
    pc = pos(rz'/', p1)
    do while pc > 0
        ps = word(substr(p1, pc+4), 1)
        if wordPos(ps, dbSys) < 1 then
            dbSys = strip(dbSys ps)
        pc = pos(rz'/', p1,  pc+4)
        end
    end
say 'statistics for' dbSys
do ox=1 to words(m.mm.obj2)
    o1 = word(m.mm.obj2, ox)
    do vx=1 to words(m.mm.verbs)
        v1 = word(m.mm.verbs, vx)
        m.mm.count.o1.v1 = 0
        end
    end

do dx=1 to words(dbSys)
    d1 = word(dbSys, dx)
    ana = m.libpre || d1'.ANA'
    if sysDsn("'"ana"'") <> 'OK' then do
        say '---' d1 'sysDsn('ana')' sysDsn("'"ana"'")
        iterate
        end
    say '---' d1
    lmm = lmmBegin(ana)
    laM7 = ''
    laAct = 0
    do forever
        m1 = lmmNext(lmm)
        m7 = left(m1, 7)
        if laM7 \== m7 then do
            if laAct then do
                say '---'laM7 || laTop m.auft.laM7,
                        copies('<><><>', laTop \== word(m.auft.laM7, 2))
                call countNachtrag mm, laM7 || laTop, laSeq
                call countSqls mm, ana'('laM7 || laTop')'
                end
            if m1 == '' then
                leave
            laM7 = m7
            laAct = symbol('m.auft.m7') == 'VAR'
            if laAct then do
                laNac = m.auft.m7
                if words(laNac) < 2 then
                    laSeq = 999
                else
                    laSeq = pos(word(laNac, 2), m.nachtragChars)
                laTop = ''
                end
            end
        if laAct then do
           nac = substr(m1, 8, 1)
           seq = pos(nac, m.nachtragChars)
           if seq < 1 then
               call err 'bad Nachtrag' m1
           if seq > pos(laTop, m.nachtragChars) then
               laTop = nac
            end
        end
    end
total = '--total--'
m.o.0 = 0
call mAdd o, 'Zuegelschub' zgl 'Statistik fuer' dbSys 'in' rz,
  , left('Auftraege in Liste', 19) right(m.mm.count.list, 9),
  , left('Auftraege analys''t', 19) right(m.mm.count.auft, 9),
  , left('Nachtraege', 19) right(m.mm.count.nact - m.mm.count.auft, 9),
  , left('Load', 19) right(m.mm.count.load, 9),
  , left('Rebind Package', 19) right(m.mm.count.rebind, 9),
  , , left('',19) m.mm.verbs
do vx=1 to words(m.mm.verbs)
    v1 = word(m.mm.verbs, vx)
    m.mm.count.total.v1 = 0
    m.mm.count.index.v1 = m.mm.count.index.v1 + m.mm.count.unique.v1
    end
obj3 = m.mm.objs total
do ox=1 to words(obj3)
    o1 = word(obj3, ox)
    t = left(o1, 19)
    do vx=1 to words(m.mm.verbs)
        v1 = word(m.mm.verbs, vx)
        t = t right(m.mm.count.o1.v1, 9)
        m.mm.count.total.v1 = m.mm.count.total.v1 + m.mm.count.o1.v1
        end
    call mAdd o, t
    end
say words(m.mm.auft) 'auftraege in list but not in ana' m.mm.auft
call mAdd o, words(m.mm.auft) 'auftraege in list but not in ana',
      if(length(m.mm.auft) < 35, m.mm.auft, left(m.mm.auft, 32)'...')
call writeDsn out, m.o., , 1
call adrIsp "view dataset('"out"')", 4
return
endProcedure stats

checkAuftrag: procedure expose m.
parse arg lib, von bis, aufLst
    say 'zStat fuer Zuegelschub von' von 'bis' bis
    say '  erstellt Auftragsliste auf' aufLst
    ox = 0
    if bis == '' then
        bis = von
    lmm = lmmBegin(lib)
    ls = 0
    z0 = 0
    do mx=1
        m1 = lmmNext(lmm)
        if m1 == '' then
            leave
        call readDsn lib'('m1')', 'M.I.'
        ls = ls + m.i.0
        if mx // 100 = 0 then
            say m1 'noZgl='z0 'thisZgl='ox 'mbrs='mx 'lines='ls
        if translate(word(m.i.2, 1)) \== 'ZUEGELSCHUB' then do
            z0 = z0 + 1
            iterate
            end
        z1 = word(m.i.2, 2)
        if z1 << von | z1 >> bis then
            iterate
        do ax=m.i.0 by -1 to 2 while translate(word(m.i.ax, 1)) ,
                     \== 'COMPARE'
            end
        ac = if(ax>2, word(m.i.ax, 2))
        ox = ox + 1
        m.o.ox = m1 ac
        end
    say m1 'noZgl='z0 'thisZgl='ox 'mbrs='||(mx-1) 'lines='ls
    call writeDsn aufLst, m.o., ox, 1
    return 0
endProcedure checkAuftrag

countNachtrag: procedure expose m.
parse arg m, mbr, seq
    if mbr == '' then
        return
    mSq = pos(substr(mbr, 8, 1), m.nachtragChars)
    m.m.count.auft = m.m.count.auft + 1
    m.m.count.nact = m.m.count.nact + mSq
    a7 = left(mbr, 7)
    wx = wordPos(a7, m.m.auft)
    if wx > 0 then
        m.m.auft = subword(m.m.auft, 1, wx-1) subword(m.m.auft, wx+1)
    else
        say a7 mbr 'not in list'
    return
endProcedcure countNachtrag

countSqls: procedure expose m.
parse arg m, dsn
    call readNxBegin nx, dsn
    do lx=1
        lp = readNx(nx)
        if lp == '' then
            leave
        li = translate(strip(m.lp))
        if li == '' | abbrev(li, '--') then
            iterate
        if abbrev(li, '.') then do
             if abbrev(li, '.CALL SNAPSHOT') then do
                 sx = lx
                 do until lp == '' | abbrev(m.lp, '.ENDDATA')
                     lx = lx + 1
                     lp = readNx(nx)
                     end
                   if lx - sx > 1200 | lp == '' then
                       say '???snapshot' sx'-'lx 'tooLong/end missing'
                 end
             else if abbrev(li, '.CALL UTIL LOAD ') then do
                 m.m.count.load = m.m.count.load + 1
                 end
             iterate
             end
        if wordPos(word(li, 1), m.m.verb2) < 1 then
            iterate
        v = word(li, 1)
        if v = 'REBIND' then do
            m.m.count.rebind = m.m.count.rebind ,
                + (pos('PACKAGE', li) > 0)
            iterate
            end
        ox = wordPos(word(li, 2), m.m.obj2)
        if ox < 1 & (v == 'DROP' | v == 'ALTER') then
            iterate
        do wx=3 to min(5, words(li)) while ox < 1
            ox = wordPos(word(li, wx), m.m.obj2)
            end
        if ox < 1 then
            call err 'no object' m.m.obj2 'in' lx':'li
        o = word(m.m.obj2, ox)
        if 0 then
            say v o lx':' strip(li, 't')
        if \ datatype(m.m.count.o.v, 'n') ,
         | wordPos(v, m.m.verbs) < 0 then
            say '???' v o '???' li
        m.m.count.o.v = m.m.count.o.v + 1
        end
    call readNxEnd nx
    return
endProcedure countSqls
/* copy csi begin    ***************************************************
     csi interface: see dfs managing catalogs appendix c
         returncode/reason see message IDC3009I
**********************************************************************/
/*--- specify dsn mask and fields to start a csi catalog search --------
      arguments:
          m       objectPointer
          dsnMask specifies the dsns with wildcards:
              %  1 character
              *  0 - n character in one level
              ** 0 - n levels
          fields a (space separated) list of field names -------------*/
csiOpen: procedure expose m.
parse arg m, dsnMask, fields
    m.m.fld.0 = words(fields)
    ffix = d2c(m.m.fld.0, 2)
    do x=1 to m.m.fld.0
        m.m.fld.x = translate(word(fields, x))
        ffix = ffix || left(m.m.fld.x, 8)
        end
    if dsnMask \== '' & pos('*', dsnMask) < 1 then
        dsnMask = dsnMask'.**'
    m.m.filt = left(dsnMask, 149) ,
             || left('Y', 3) ,        /* resume offset 149      */
             || ffix                  /* csiNumEn offset 152    */

    WORKLEN = 1024 * 64
    m.m.work = D2C(WORKLEN,4) || COPIES('00'X,WORKLEN-4)
    m.m.pos = workLen + 1
    return
endProcedure csiOpen

/*--- put the next dsn into m.o and m.o.* (for other fields)
      return 1 if next dsn exists 0 otherwise ------------------------*/
csiNext: procedure expose m.
parse arg m, o
    usedL = C2D(SUBSTR(m.m.work,9,4)) /* GET AMOUNT OF WORK AREA USED */
    px = m.m.pos
    do forever
        if px > usedL then do
            if substr(m.m.filt, 150, 1) \== 'Y' then do
                m.m.pos = px
                m.o = ''
                return 0
                end
            reason = left('', 4)
            ADDRESS LINKPGM 'IGGCSI00  reason m.'m'.filt  m.'m'.work'
            if rc == 0 & substr(reason, 3, 2) == '0000'x then
                nop
            else if rc == 4 & substr(reason, 3, 2) == '0464'x then
                say 'data set entry with error'
            else
                call err 'call csi returns' rc,
                             'rc' c2d(substr(reason, 4,1)),
                             'reason' c2d(substr(reason, 3,1)),
                             'module' substr(reason, 1,2)
            usedL = C2D(SUBSTR(m.m.work,9,4)) /* GET WORK AREA USED */
            numFD = C2D(SUBSTR(m.m.work,13,2)) /* no flds + 1 */
            if numFd <> m.m.fld.0 + 1 then
                call err 'csiNumFd' numFd 'not' m.m.fld.0 '+' 1
            px = 15
            iterate
            end
        eType =  substr(m.m.work, px+1, 1)
        m.o = strip(substr(m.m.work, px+2, 44), 't')
        flag = substr(m.m.work, px, 1)
        /* say 'eType' eType m.o 'flag' c2x(flag) */
        if eType == '0' then do
            if flag \== '00'x & flag \== '40'x then
                call err 'flag' c2x(flag) 'for catalog' m.o
            px = px + 50    /* length of catalog entry  */
            iterate
            end
        else do
            if \ abbrev(x2b(c2x(flag)), '101') then
                call err 'call csi entry flag' x2b(c2x(flag)),
                             'rc' c2d(substr(m.m.work, px+49,1)),
                             'reason' c2d(substr(m.m.work, px+48,1)),
                             'module' substr(m.m.work, px+46, 2),
                             'for entry' m.o,
                             'see qw IDC3009I'
            py = px + 46
            tl = c2d(substr(m.m.work, py, 2))
            pl = py + 4
            pf = py + m.m.fld.0 * 2 + 4
            do fx = 1 to m.m.fld.0
                fi = m.m.fld.fx
                fl = c2d(substr(m.m.work, pl, 2))
                m.o.fi = substr(m.m.work, pf, fl)
                if fi = 'MGMTCLAS' then
                    m.o.fi = substr(m.o.fi, 3, c2d(left(m.o.fi ,2)))
                else if wordPos(fi, 'COMUDSIZ NOBYTTRK') > 0 then
                    m.o.fi = c2d(m.o.fi)
                pf = pf + fl
                pl = pl + 2
                end
            if py + tl <> pf then
                call err 'length mismatch for entry' m.o
            m.m.pos = pf
            return 1
            end
        end
endProcedure csiNext
/*--- if dsn is arcived return 'arcive'
      if dsn is tape return 'tape'
      otherwise return managment class ------------------------------*/
csiArcTape: procedure expose m.
parse arg vo, cl, dt, dsn
        if vo = '' then
            say err '||| no volume for dsn' dsn
        else if vo = 'ARCIVE' then
            res = 'arcive'
        else if cl <> '' then
            res = cl
        else if abbrev(vo, 'SHR') then
            res = 'SHR'
        else
            res = 'tape'
        if   res = 'arcive' then
            return res
      /*if   abbrev(res, 'ar') \= abbrev(dt, '00'x) , */
        if   abbrev(res, 'ta') \= abbrev(c2x(left(dt, 1)), '7') ,
           | (left(res, 1) >= 'A') \= abbrev(dt, '30'x) then
           say '||| mismatch cl' cl 'vo' vo 'dt' c2x(dt) 'dsn' dsn
        return res
endProcedure csiArcTape
/* copy csi end ******************************************************/
/* copy match begin ***************************************************/
/************************************* begin     copy      match ******/
/*--- wildCard matching with the following wildchars:
          * 0-n chars
          ? 1 char
      fill matched expressions instem st if st is non empty
      return 1 if mask matches wert ----------------------------------*/
match: procedure expose m.
parse arg wert, mask, st
    if st == '' then
        return matchRO(wert, mask)
    m.st.0 = -9
    return matchSt(wert, mask, st, 0)
endProcedure match

/*--- return the fixed prefix of maskt -------------------------------*/
matchPref: procedure
arg mask, suff
    ix = verify(mask, '*?', 'm')
    if ix = 0 then
        return mask
    else
        return left(mask, ix-1)suff
endProcedure matchPref

/*--- return true if mask matches wert -------------------------------*/
matchRO: procedure
arg wert, mask
    ix = verify(mask, '*?', 'm')
    if ix < 1 then return (mask == wert)
    if length(wert) < ix-1 then return 0
    if left(mask, ix-1) \== left(wert, ix-1) then return 0
    if substr(mask, ix, 1) == '?' then do
        if length(wert) < ix then return 0
        return matchRO(substr(wert, ix+1), substr(mask, ix+1))
        end
    mask = substr(mask, ix+1)                /* * 0 - n Chars */
    do ex = 1+length(wert) to ix by -1
        if matchRO(substr(wert, ex), mask) then return 1
        end
    return 0
endProcedure matchRO

/*--- wildCard matching: fill matched expressions instem st
      return 1 if mask matches wert ----------------------------------*/
matchSt: procedure expose m.
parse arg wert, mask, st, sx
    ix = verify(mask, '*?', 'm')
    if ix < 1 then do
        if mask \== wert then
            return 0
        m.st.0 = sx
        return 1
        end
    if \ abbrev(wert, left(mask, ix-1)) then
        return 0
    reMa = substr(mask, ix+1)
    sx = sx + 1
    if substr(mask, ix, 1) == '?' then do /* ? 1 Character */
        if length(wert) < ix then
            return 0
        m.st.sx = substr(wert, ix, 1)
        return matchSt(substr(wert, ix+1), reMa, st, sx)
        end
    do lx = 1+length(wert) to ix by -1 /* greedy: from all to empty */
        if matchSt(substr(wert, lx), reMa, st, sx) then do
            m.st.sx = substr(wert, ix, lx-ix)
            return 1
            end
        end
    return 0
endProcedure matchSt

matchTrans: procedure expose m.
parse arg mask, st
    r = ''
    ox = 1
    sx = 0
    ix = verify(mask, '*?', 'm')
    do sx=1 to m.st.0 while ix > 0
        if sx > m.st.0 then
            call err 'matchTrans('mask',' st') has only' ,
                                     m.st.0 'variables'
        r = r || substr(mask, ox, ix-ox)m.st.sx
        ox = ix+1
        ix = verify(mask, '*?', 'm', ox)
        end
    if ix > 0 then
        call err 'matchTrans('mask',' st') has only' ,
                                     m.st.0 'variables'
    return r || substr(mask, ox)
endProcedure matchTrans
/* copy match end *****************************************************/
/* copy csm begin ******************************************************
    interface to csm,
        it is integrate with adrTso, eg. dsnAlloc , 'RZ3/..' uses csm
***********************************************************************/
adrCsm:
    return adrTso('csmExec' arg(1), arg(2))
endProcedure adrCsm

csmCopy: procedure expose m.
parse arg csnFr, csnTo, retOk
    if dsnGetMbr(csnTo) \= '' & dsnGetMbr(csnTo) \= '' then do
        if dsnGetMbr(csnFr) <> dsnGetMbr(csnTo) then
            call err 'member rename' csnFr 'to' csnTo
        csnTo = dsnSetMbr(csnTo)
        end
    parse value csmSysDsn(csnFr) with sysFr '/' dsnFr
    parse value csmSysDsn(csnTo) with sysTo '/' dsnTo
    if sysTo = '*' then do
        old = sysDsn("'"dsnTo"'")
        end
    else if sysFr = '*' then do
        pdsTo = dsnSetMbr(dsnTo)
        al = "SYSTEM("sysTo") DDNAME(COPYTo)",
             "DATASET('"pdsTo"') DISP(SHR)"
        alRes = dsnAlloc(systo'/'pdsTo, ,'COPYTO', '*')
        if datatype(alRes, 'n') then do
                   /* wir müssen es selbst allozieren csmxUtil
                      vergisst management class ||||| */
            say 'could not allocate' al
            say 'trying to create'
            rc = listDsi("'"dsnSetMbr(dsnFr)"' SMSINFO")
            if rc = 0 then
                mv = ''
            else if rc = 4 & sysReason = 19 then do
                mv = 'UCOUNT(30)' /* 7.8.13 corrected attribute */
                say 'creating' dsn 'with multi volume' mv
                end
            else if rc \= 0 then
                call err 'listDsi rc' rc 'reason' sysReason,
                                     sysMsgLvl1 sysMsgLvl2
            al = left(al, length(al)-4)'CAT)'
            if right(sysDsSms, 7) == 'LIBRARY' ,
                | abbrev(sysDsSms, 'PDS') then
                 al = al 'DSNTYPE(LIBRARY)'
            if sysUnits = 'TRACK' then
                sysUnits = 'TRACKS'
            al = al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
                "RECFM("sysREcFM") LRECL("SYSLRECL")",
                "blksize("sysBLkSIZE")",
                "SPACE("sysPrimary"," sysSeconds")" sysUnits mv
            call adrCsm "allocate" al
            end
        call tsoFree word(alRes, 2)
        end
    c = "'COPY" sysFr"/''"dsnFr"'' TO" ,
                        sysTo"/''"dsnSetMbr(dsnTo)"'' REPLACE'"
    csmRc = adrTso("exec 'CSM."sysvar("sysnode")".P0.EXEC(CSRXUTIL)'",
           c , retOk)
    if sysTo = '*' & old <> 'OK' then do
        /* csm normally does not set mgmtclass - avoid delete | */
        call adrTso "ALTER '"dsnTo"' mgmtclas(COM#A091)"
        end
    return csmRc
endProcedure csmCopy

csmAlloc: procedure expose m.
parse arg dsn dd disp rest ':' nn, retRc
    sys = ''
    a2 = ''
    parse value csmSysDsn(dsn) with sys '/' dsn
    if disp = '' then
        disp = 'shr'
    al = "SYSTEM("sys") DDNAME("dd")"
    if dsn <> '' then do
        a2 = "DATASET('"dsnSetMbr(dsn)"')"
        mbr = dsnGetMbr(dsn)
        if mbr <> '' then
            a2 = a2 'MEMBER('mbr')'
        end
    if abbrev(disp, 'SYSOUT(') then
        a2 = a2 disp
    else
        a2 = a2 "DISP("disp")"
    if disp = 'NEW' & nn \== '' then
        a2 = a2 dsnCreateAtts( , nn, 1)
    if retRc <> '' | nn = '' then
        return adrCsm('allocate' al a2 rest, retRc)
    do retry=0 by 1
        alRc = adrCsm('allocate' al a2 rest, '*')
        if alRc = 0 then
            return 0
        if retry > 0 | nn = '' | wordPos(disp, 'OLD SHR') < 1 then
            return err('cmsAlloc rc' alRc 'for' al rest)
        say 'csmAlloc rc' alRc 'for' al a2 rest '...trying to create'
        nn = al 'disp(cat)' dsnCreateAtts(dsn, nn, 1)
        call adrCsm 'allocate' nn
        call adrTso 'free  dd('dd')'
        end
endProcedure csmAlloc

csmSysDsn: procedure expose m.
parse upper arg dsn, withStar
    if pos('/', dsn) < 1 then
        sys = '*'
    else
        parse var dsn sys '/' dsn
    if sys <> '' & sys <> '*' & sys <> sysvar(sysnode) then
        return sys'/'dsn
    else if withStar == 0 then
        return dsn
    else
        return '*/'dsn
endProcedure csmSysDsn

/*--- execute a rexx (under tso) in another rz
           here we use rexx TPSYSIKJ which was written for
           jcl procedure RM@IKJ01
arguments
rz   which rz to run rexx
proc the (remote) procedure library to use
opt  options
cmd  the tso command to execute
----------------------------------------------------------------------*/
/*--- execute a rexx (under tso) in another rz
          directly (without TPSYSIKJ) --------------------------------*/
csmExRx: procedure expose m.
parse arg rz, proc, opt, cmd
    do cx=1 to (length(cmd)-1) % 68
        cmd.cx = substr(cmd, 68*cx-67,68)'-'
        end
    cmd.cx = substr(cmd, 68*cx-67)
    cmd.0 = cx
    timeout = 11
    if 0 then do
        call adrTso  'free ed(rmtSys)'  ,'*'
        call tsoFree tsoDD(rmtsPrt, 'a')
        call adrTso  'free dd(rmtsIn)','*'
        call adrTso  'free dd(sysproc)' ,'*'
        end
    call dsnAlloc rz"/"proc "dd(rmSyPro) rmtDDn(sysProc)"
    call dsnAlloc rz"/tmp.tsin new dd(rmTsIn) rmtDdn(sysTsIn) ::f "
    call tsoOpen rmTsIn, 'w'
    call writeDD rmTsIn, cmd.
    call tsoClose rmtsin
    call dsnAlloc rz"/tmp.prt new dd(rmtsprt) rmtDdn(sysTsPrt)",
                    "::f133"
    call dsnAlloc rz"/tmp.rmt new dd(rmtSys) timeout("timeout")"
    call adrtso "csmappc start pgm(csmexec)" ,
           "parm('select tsocmd(''csmappc allocate plu(*.rmtSys)" ,
                 "tpname(sysikj) dealloc '')')",
           "timeout("timeOut")", '*'
    if rc <> 0 | appc_rc <> 0 then do
        ee = 'csm tso exec rc='rc 'appc_rc='appc_rc
        say ee
        say '  rexx rz='rz 'proc='proc 'opt=opt'
        say '  cmd='cmd
        call csmappcRcSay ggTsoCmd
        call readDD 'rmTsPrt', p.
        call tsoClose rmtsPrt
        say p.0 'tso output lines'
        do px=1 to p.0
            say ' ' strip(p.px, 't')
            end
        call err ee
        end
    call tsoFree rmSyPro rmtsPrt rmtSys rmtsIn
    return
/*--- sys the re and result variables from csmAppcRc -----------------*/
 csmappcRcSay: procedure expose appc_rc appc_reason appc_msg. ,
           appc_state_c appc_state_f
 parse arg cmd
     say 'rc='appc_rc 'reason='appc_reason ,
         'state_c='appc_state_c appc_state_f
     say '  for' cmd
     do ix=1 to appc_msg.0
         say ' ' appc_msg.ix
         end
     return appc_rc
 endProcedure csmappcRcSay
/* copy csm end *******************************************************/
/* copy sqlO   begin ***************************************************
    sql interface  mit  o und j Anbindung
***********************************************************************/
sqlOini: procedure expose m.
    if m.sqlO.ini == 1 then
        return
    call sqlIni
    m.sqlO.ini = 1
    call jIni
    m.sqlO.cursors  = left('', 200)
    call classNew 'n SqlResultRdr u JRWO', 'm',
        , "jReset m.m.cursor = arg; m.m.type = arg2;",
        , "jOpen  call sqlResultRdrOpen m, opt",
        , "jClose call sqlClose m.m.cursor",
        , "jReadO return sqlSelReadO(m)"
    call classNew 'n SqlSel u JRWO', 'm',
        , "jReset m.m.src = arg; m.m.type = arg2;",
        , "jOpen  call sqlSelOpen m, opt",
        , "jClose call sqlSelClose m",
        , "jReadO return sqlSelReadO(m)"
    call classNew 'n SqlDRS u SqlSel', 'm',
        , "jReset m.m.loc = arg; m.m.type = arg2;",
        , "jOpen  call sqlDRSOpen m, opt",
        , "jClose call sqlSelClose m",
        , "jReadO return sqlSelReadO(m)"
    call classNew 'n SqlRxConnection u', 'm',
        , "sqlQuery  return sqlRxQuery(cx, src, retOk, resTy)",
        , "sqlFetch  return sqlRxFetch(cx, dst, retOk)",
        , "sqlClose  return sqlRxClose(cx, retOk)",
        , "sqlUpdate return sqlRxUpdate(cx, src, retOk)",
        , "sqlCall   call err 'implement sqlRxCall"
    call classNew 'n SqlRxStatement u', 'm',
        , "sqlQuery  return sqlRxQuery(m.cx.cursor, src, retOk,resTy)",
        , "sqlFetch  return sqlRxFetch(m.cx.cursor, dst, retOk)",
        , "sqlClose  return sqlRxClose(m.cx.cursor, retOk)",
        , "sqlUpdate return sqlRxUpdate(m.cx.cursor, src, retOk)",
        , "sqlCall   call err 'implement sqlRxCall"
    call classNew 'n SqlCsmConnection u', 'm',
        , "sqlQuery  return sqlCsmQuery(cx, src, retOk, resTy)",
        , "sqlFetch  return sqlCsmFetch(cx, dst)",
        , "sqlClose  return 0",
        , "sqlUpdate call err 'implement sqlCsmUpdate'"   ,
        , "sqlCall   call err 'implement sqlCsmCall'"
    call classNew 'n SqlCsmStatement u', 'm',
        , "sqlQuery  return sqlCsmQuery(m.cx.cursor, src, retOk,resTy)",
        , "sqlFetch  return sqlCsmFetch(m.cx.cursor, dst)",
        , "sqlClose  return 0",
        , "sqlUpdate call err 'implement sqlCsmUpdate'"   ,
        , "sqlCall   call err 'implement sqlCsmCall'"
    return 0
endProcedure sqlOini
/*--- connect and/or disconnect to DB2 -------------------------------*/
sqlConnect: procedure expose m.
parse upper arg sys, retOk
    call sqlOIni
    if pos('/', sys) > 0 then do
        parse value space(sys, 0) with hst '/' sys
        cTy = 'Csm'
        end
    else do
        hst = ''
        cTy = 'Rx'
        end
    if m.sql.conType==cTy & m.sqlHost==hst & m.sqlconDbSYs == sys then
        return 0
    if m.sql.conType \== '' then
        call sqlDisconnect
    res = 0
    if cTy = 'Rx' then
        res = sqlRxConnect(sys, retOk)
    else
        m.sql.conDbSys = sys
    if res < 0 then
        return res
    m.sql.conType = cTy
    m.sql.conhost = hst
    m.sql.connection = oNew('Sql'cTy'Connection')
    return res
endProcedure sqlConnect

sqlDisconnect: procedure expose m.
parse arg retOk
    if m.sql.conType == 'Rx' then
        call sqlRxDisconnect
    m.sql.conType = ''
    m.sql.conDbSys = ''
    return 0
endProcedure sqlDisonnect

/*--- execute a query from sql, with one resultset -------------------*/
sqlQuery: procedure expose m.
parse arg cx, src, retOk, resTy
    if datatype(cx, 'n') then
        interpret objMet(m.sql.connection, 'sqlQuery')
    else
        interpret objMet(cx, 'sqlQuery')
/*--- fetch next row to m.dst.* at end return false ------------------*/
sqlFetch: procedure expose m.
parse arg cx, dst, retOk
    if datatype(cx, 'n') then
        interpret objMet(m.sql.connection, 'sqlFetch')
    else
        interpret objMet(cx, 'sqlFetch')
/*--- close cursor 'c'cx ---------------------------------------------*/
sqlClose: procedure expose m.
parse arg cx, retOk
    if datatype(cx, 'n') then
        interpret objMet(m.sql.connection, 'sqlClose')
    else
        interpret objMet(cx, 'sqlClose')
    return 0
/*-- execute an sql with no resultset, but possibly outParms ---------*/
sqlUpdate: procedure expose m.
parse arg cx, src, retOk
    if cx == '' | datatype(cx, 'n') then
        interpret objMet(m.sql.connection, 'sqlUpdate')
    else
        interpret objMet(cx, 'sqlUpdate')
endProcedue sqlUpdate

/*-- execute an sql call with outParms and multiple resultSets -------*/
sqlCall: procedure expose m.
parse arg cx, src, retOk
    if cx == '' | datatype(cx, 'n') then
        interpret objMet(m.sql.connection, 'sqlCall')
    else
        interpret objMet(cx, 'sqlCall')
endProcedure sqlCall

sqlSel: procedure expose m.
parse arg src, type
     s = oNew('SqlSel', inp2str(src, '-sql'), type)
     call pipeWriteAll s
     return m.s.rowCount
endProcedure sqlSel

/*--- return a free cursor -------------------------------------------*/
sqlGetCursor: procedure expose m.
parse arg rng
    if rng == '' then
        return sqlGetCursorRng(rng, 10, 48)
    else if rng == 'h' then
        return sqlGetCursorRng(rng, 60, 99)
    else if rng == 'a' then
        return sqlGetCursorRng(rng, 110, 199)
    else
        call err 'bad cursor range' rng
endProcedure sqlGetCursor

sqlGetCursorRng: procedure expose m.
parse arg rng, fr, to
    cx = pos(' ', m.sqlO.cursors, fr)
    if cx < fr & cx > to then
        call err "no more '"rng"' cursors between" fr "and" to,
                 ":"m.sqlO.cursors
    m.sqlO.cursors = overlay('u', m.sqlO.cursors, cx)
    return cx
endProcedure sqlGetCursorRNG

/*--- mark a cursor as closed ----------------------------------------*/
sqlFreeCursor: procedure expose m.
parse arg cx
    if substr(m.sqlO.cursors, cx, 1) \== 'u' then
         call err 'sqlFreeCursor('cx') not in use :'m.sqlO.cursors
    m.sqlO.cursors = overlay(' ', m.sqlO.cursors, cx)
    return
endProcedure sqlFreeCursor

sqlStmtsOpt: procedure expose m.
parse arg src, opts
    upper opts
    sub = ''
    o = ''
    retOk = ''
    do wx=1 to words(opts)
        w = word(opts, wx)
        if abbrev(w, '-SQL') then
            o = o'-sql'substr(w, 5)
        else if w == '-O' | w == 'O' then
            o = o'-o'
        else if w = '*' | datatype(w, 'n') then
            retOk = retOk w
        else if length(w) == 4 then
            sub = w
        else
            call err 'bad opt' w 'in opts' opts 'not -sql? -o or subsys'
        end
    call sqlOIni
    if   (sub == '' & m.sql.conDbSys== '') ,
       | (sub \== '' & m.sql.conDbSys \== sub) then
        call sqlConnect sub
    return sqlStmts(src, strip(retOk), strip(o))
endProcedure sqlStmtsOpt

/*** execute sql's in a stream (separated by ;)
       opt: 'o' ==> write objects, otherwise fmtFTab
            'sql72' ==> spufi formatting (window 72) else linebreaks */
sqlStmts: procedure expose m.
parse arg sqlSrc, retOk, opt
   dlm = ';'
   isStr = oStrOrObj(sqlSrc, m.j.in)
   fLen = ''
   if pos('sql', opt) > 0 then
       fLen = word(substr(opt, pos('sql', opt)+3), 1)
   if isStr then do
       m.sqlStmts.rdr = ''
       call scanSrc sqlStmts, ggStr
       end
   else do
       fi = jOpen(o2File(ggObj), '<')
       call jCatSqlReset sqlStmts, , fi, fLen
       end
   do forever
       s1 = jCatSqlNext(sqlStmts, dlm)
       if s1 = '' then
           leave
       if translate(left(s1, 10)) == 'TERMINATOR' then do
            dlm = strip(substr(s1, 11))
            if length(dlm) \== 1 then
                call scanErr sqlStmts, 'bad terminator' dlm
            iterate
            end
       call outSt(splitNl(sqlTmp, sqlStmt(s1, retOk, opt)))
       end
   if \ isStr then
       call jClose fi
   return 0
endProcedure sqlStmts

sqlStmt: procedure expose m.
parse arg src, retOk, opt
    cx = sqlGetCursor()
    r1 = sqlExecute(cx, src, retOK)
    res = m.sql.sqlHaHi || sqlMsgLine(r1, m.sql.cx.updateCount, src)
    if m.sql.cx.resultSet \== '' then do
        rdr = sqlResultRdr(cx)
        if pos('o', opt) > 0 then
            call pipeWriteAll rdr
        else
            call fmtFTab sqlStmtFmt, rdr
        res = sqlMsgLine(m.rdr.rowCount 'rows fetched', , src)
        end
    call sqlFreeCursor cx
    return res
endProcedure sqlStmt

/*--- execute the given sql plus a commit
         until no more rows are updated -----------------------------*/
sqlUpdComLoop: procedure expose m.
parse arg src, retOk, opt
    src = inp2Str(src)
    crs = sqlGetCursor()
    upds = 0
    if retOk == '' then
        retOk = 100
    do coms=0
        cd = sqlExecute(crs, src, retOk)
        if m.sql.crs.updateCount < 1 then
            return sqlMsgLine( , upds, src, coms 'commits')
        upds = upds + m.sql.crs.updateCount
        call sqlCommit
        if coms // 20 = 19 then
            say sqlMsgLine(time(), upds, src, (coms+1) 'commits')
        end
endProcedure sqlUpdComLoop

removeSqlStmt: procedure expose m.
parse arg src, ggRet, opt
    bx = verify(src, '( ')
    if bx < 1 then
        return ''
    fun = translate(word(substr(src, bx), 1))
    w2  = translate(word(substr(src, bx), 2))
    res = ''
    if fun == 'SELECT' | fun = 'WITH' then do
        s = oNew('SqlSel', inp2str(src, '%S%+Q\s'))
        if pos('o', opt) > 0 then
            call pipeWriteAll s
        else
            call fmtFTab sqlStmtFmt, s
        res = m.s.rowCount 'rows fetched'
        end
    else if  fun = 'SET' &  abbrev(w2, ':') then do
        ex = pos('=', w2)
        if ex > 2 then
            var = strip(substr(w2, 2, ex-2))
        else
            var = strip(substr(w2, 2))
        if var = '' then
            var = 'varUnbekannt'
        call sqlExec src, ggRet
        res = 'sqlCode' sqlCode var'='value(var)
        end
    else if fun = 'SET' | (fun = 'DECLARE' & w2 = 'GLOBAL') then do
        call sqlExImm src, ggRet
        res = 'sqlCode' sqlCode
        end
    else if fun = 'CALL' then do
        res = sqlStmtCall(src, ggRet, opt)
        end
    else do
        call sqlExec src, ggRet
        res = 'sqlCode' sqlCode
        if wordPos(fun, 'DELETE INSERT UPDATE') > 0 THEN
            res = res',' sqlErrd.3 'rows' ut2Lc(fun)'d'
        end
    aa = strip(src)
    ll = 75 - length(res)
    if length(aa) > ll then
        aa = space(aa, 1)
    if length(aa) > ll then
        aa = left(aa,  ll-3)'...'
    return res':' aa
endProcedure removeSqlStmt

sqlStmtCall: procedure expose m.
parse arg src, retOk, opt
    s = scanSrc(scanSqlReset(sqlstmtcall, ,0), src)
    if \ scanSqlId(scanSkip(s)) | m.s.val \== 'CALL' then
        call scanErr s, 'not a call'
    if \ scanSqlQuId(scanSkip(s)) then
        call scanErr s, 'qualified id missing after call'
    loc = ''
    if m.s.val.0 = 1 then
        wh = 'name =' quote(m.s.val.1, "'")
    else if m.s.val.0 = 2 then
        wh = "schema = '"strip(m.s.val.1)"'" ,
             "and name = '"strip(m.s.val.2)"'"
    else if m.s.val.0 = 3 then do
        loc = m.s.val.1
        wh = "schema = '"strip(m.s.val.2)"'" ,
             "and name = '"strip(m.s.val.3)"'"
        end
    else
        call scanErr s, 'storedProcedureName' m.s.val ,
               'has' m.s.val.0 'parts, should have 1, 2 or 3'
    pn = m.s.val
    da = sqlStmtCallDa(sqlStmtCall, loc, wh)
    if \ scanLit(scanSkip(s), '(') then
        call scanErr s, '( expected after call' pn
    varChars = f
    do ax=1
        m.da.ax.varName = ''
        isEmpty = 0
        if scanLit(scanSkip(s), ':') then do
             if \ scanVerify(scanSkip(s), m.ut.alfDot) then
                 call scanErr s, 'variable expected after : in call' pn
             m.da.ax.varName = m.s.tok
             if m.da.ax.io == 'i' | m.da.ax.io == 'b' then
                 m.da.ax.sqlData = envGet(m.da.ax.varName)
             end
        else if scanString(s) then
            m.da.ax.sqlData = m.s.val
        else if scanVerify(s, ',):;', 'm') then
            m.da.ax.sqlData = strip(m.s.tok)
        else
            isEmpty = 1
        if scanLit(scanSkip(s), ')') then
            leave
        if \ scanLit(s, ',') then
            call scanErr s, if(isEmpty, 'value, var, ') ,
                         || "',' or ')' expected"
        end
    if ax \= m.da.sqlD then
        if \ (ax=1 & m.da.sqlD = 0 & isEmpty) then
            call scanErr s, 'call with' ax 'parms but' ,
                                pn 'needs' m.da.sqld
    caCo = sqlExec('call' pn 'using descriptor :M.'da, 466)
    call out '--- called' pn', sqlCode' caCo
    do ax=1 to m.da.sqlD
        call Out '  parm' ax m.da.ax.io m.da.ax.parmName,
                 || if(m.da.ax.varName \== '',' $'m.da.ax.varName),
               '=' m.da.ax.sqlData
        if m.da.ax.varName \== '' then
            call envPut m.da.ax.varName, m.da.ax.sqlData
        end
    if caCo = 466 then do
        drop sqlDP
        call sqlExec 'describe procedure :pn into :m.sqlDp'
        if m.sqldp.sqlD < 1 then
             call err 'bad sqldp sqlD='m.sqldp.sqlD 'for sqlCode' caCo
        do dx=1 to m.sqldp.sqlD
            call out '  dynamic result set' dx m.sqldp.dx.sqlName ,
                     'locator='m.sqldp.dx.sqlLocator
            end
        do dx=1 to m.sqldp.sqlD
            drs = 'dynamic result set' dx'='m.sqldp.dx.sqlName 'of' pn
            call out '--- begin of' drs
            rdr = sqlDRS(m.sqldp.dx.sqlLocator)
            if pos('o', opt) > 0 then
                call pipeWriteAll rdr
            else
                call fmtFTab sqlStmtFmt, rdr
            call out '---' m.rdr.rowCount 'rows fetched from' drs
            end
        end
    return 'sqlCode' caCo
endProcedure sqlStmtCall

sqlStmtCallDa: procedure expose m.
parse arg da, loc, wh
    cr = if(loc=='',,loc'.')'sysIbm'
    sql = "select 'SCHEMA=''' || strip(schema) || ''''",
             "|| ' and name='''   || strip(name  ) || ''''",
             "|| ' and specificName=''' || strip(specificName) || ''''",
             "|| ' and routineType =''' || strip(routineType ) || ''''",
             "|| ' and VERSION     =''' || strip(VERSION     ) || ''''",
          "from" cr".SysRoutines ",
          "where" wh "and active = 'Y'"
    if sqlpreAllCl(49, sql, rou, ':m.rou') <> 1 then
        call err m.rou.0 'routines found for' wh
    rdr = jOpen(sqlRdr('select * from' cr'.sysParms where' m.rou,
         'order by ordinal'), '<')
    do ix=1 while assNN('A', jReadO(rdr))
         if m.a.ordinal <>  ix then
             call err 'ix' ix 'mismatch ordinal' m.a.ordinal
         ty = m.a.dataTypeId
         m.da.ix.sqlType = ty
         m.da.ix.sqlLen  = m.a.length
         m.da.ix.sqlLen.sqlPrecision = m.a.length
         m.da.ix.sqlLen.sqlScale     = m.a.scale
         if wordPos(ty, 384 385) > 0 then        /* date */
             m.da.ix.sqlLen  = 10
         else if wordPos(ty, 388 389) > 0 then   /* time */
             m.da.ix.sqlLen  = 8
         else if wordPos(ty, 392 393) > 0 then   /* timestamp */
             m.da.ix.sqlLen  = 26
         m.da.ix.sqlData = ''
         m.da.ix.parmName= m.a.parmName
         m.da.ix.io      = translate(m.a.rowType, 'iob', 'POB')
         m.da.ix.sqlInd  = 1
         end
    m.da.sqlD = ix - 1
    return da
endProcedure sqlStmtCallDa

sqlResultRdr: procedure expose m.
parse arg cx, type
     return oNew('SqlResultRdr', cx, type)
endProcedure sqlRdr

sqlRdr: procedure expose m.
parse arg src, type
     return oNew('SqlSel', inp2str(src, '%S%qn %S'), type)
endProcedure sqlRdr

sqlResultRdrOpen: procedure expose m.
parse arg m, opt
    if opt\== m.j.cRead then
        call err 'opt not' m.j.cRead 'sqlResultRdrOpen('m',' opt')'
    m.m.jReading = 1
    m.m.rowCount = 0
    return m
endProcedure sqlResultRdrOpen

/*--- prepare and open cursor
      generate type and fetchList ------------------------------------*/
sqlSelOpen: procedure expose m.
parse arg m, opt
    m.m.cursor = sqlGetCursor()
    call sqlQuery m.m.cursor, m.m.src, ,m.m.type  /* ????? */
    return sqlResultRdrOpen(m, opt)
endProcedure sqlOpen

/*--- dynamic result sets --------------------------------------------*/
sqlDRS: procedure expose m.
parse arg loc, type
     return oNew('SqlDRS', loc, type)
endProcedure sqlDRS

sqlDRSOpen: procedure expose m.
parse arg m, opt
    if opt\== m.j.cRead then
        call err 'opt not' m.j.cRead 'sqlDRSOpen('m',' opt')'
    crs = sqlGetCursor('a')
    crN = 'C'crs
    m.m.cursor = crs
    call sqlReset crs
    call sqlexec 'allocate C'crs 'cursor for result set :m.m.loc'
    call sqlExec 'describe cursor c'crs 'into :m.sql.'crs'.D'
    m.m.jReading = 1
    m.m.rowCount = 0
    return m
endProcedure sqlDRSOpen

/*--- create the type, fetch vars etc. from the sqlDA ---------------*/
sqlFetchClass: procedure expose m.
parse arg cx
    if m.sql.cx.type = '' then do
        ff = mCat('SQL.'cx'.COL', '%qn v, f %s')
        m.sql.cx.type = classNew('n* SQL u f' ff 'v')
        end
    return m.sql.cx.type
endProcedure sqlFetchClass

/*--- fetch cursor for this sqlSel -----------------------------------*/
sqlSelReadO: procedure expose m.
parse arg m
    cx = m.m.cursor
    v = oNew(sqlFetchClass(cx))
    if \ sqlFetch(cx, v) then
        return ''
    m.m.rowCount = m.m.rowCount + 1
    return v
endProcedure sqlSelReadO

/*--- close sql Cursor -----------------------------------------------*/
sqlSelClose: procedure expose m.
parse arg m, v
    call sqlClose m.m.cursor
    call sqlFreeCursor m.m.cursor
    m.m.cursor = ''
    return m
endProcedure sqlSelClose
/* copy sqlO   end   **************************************************/
/* copy sqlCsm begin **************************************************/
/*--- send an sql to csm an handle sqlCode ---------------------------*/
sqlCsmExe:
parse arg cx, ggSqlStmt, ggRetOk
    sql_HOST =  m.sql.conHost
    SQL_DB2SSID = m.sql.conDbSys
    sql_query = ggSqlStmt
    address tso "CSMAPPC START PGM(CSMASQL)"
    if \ (rc = 0 |  rc = 4) then
        call err 'csmappc rc' rc
    if sqlCode = 0 then
        return 0
    else if pos('*', ggRetOk) > 0 | wordPos(sqlCode, ggRetOk) > 0 ,
            then do
        if sqlCode < 0 & pos('say', ggRetOk) > 0 then
            call errSay ' }'sqlmsg(sqlCA2Rx(sqlCa))
        return sqlCode
        end
    else if sqlCode < 0 then
        call err sqlmsg(sqlCA2rx(sqlCa))
    else if pos('w', ggRetOk) < 1 then
        if sqlCode = 100 then
            call errSay ' }sqlCode +100 row not found\nstmt =' ggSqlStmt
        else
            call errSay 'w}'sqlMsg(sqlCA2rx(sqlCa))
    return sqlCode
endProcedure sqlCsmExe

/*--- execute a query from sql, with one resultset -------------------*/
sqlCsmQuery: procedure expose m.
parse arg cx, sqlSrc, retOk, resTy, src
    res = sqlCsmExe(cx, sqlSrc, 100 retOk)
    if res < 0 then
        return res
    if src == '' then
        src = 'SQL.'cx'.DATA'
    m.sql.cx.data = src
    f = ''
    if resTy \== '' then do
        f = oClaMet(class4Name(resTy), 'oFlds')
        if m.f.0 < sqlD then
            call err 'not enough fields in type'
        end
    do kx=1 to sqlD
        rxNa = SQLDA_REXXNAME.kx
        cn = sqlVarName(f, kx, sqlDa_name.kx)
        m.sql.cx.col.kx = cn
        do rx=1 to sqlRow#
            if substr(sqlIndicator.rx, kx ,1) == 'ff'x then
                m.src.rx.cn = m.sqlNull
            else
                m.src.rx.cn = value(rxNa'.'rx)
            end
        end
    m.src.0 = sqlRow#
    m.sql.cx.col.0 = sqlD
    m.sql.cx.daIx = 0
    return 0
endProcedure sqlCsmQuery

sqlCsmFetch: procedure expose m.
parse arg cx, dst
    src = m.sql.cx.data
    rx = m.sql.cx.daIx + 1
    if rx > m.sql.cx.data.0 then
        return 0
    m.sql.cx.daIx = rx
    do kx = 1 to m.sql.cx.col.0
        c = m.sql.cx.col.kx
        m.dst.c = m.src.rx.c
        end
    return 1
endProcedure sqlCsmFetch
/* copy sqlCsm end   **************************************************/
/* copy sqlRx  begin ***************************************************
       Achtung: inc generiert sql aus sqlRx, Aenderungen nur in sqlRx|
    sql interface
***********************************************************************/
/*--- initialize sqlRx -----------------------------------------------*/
sqlIni: procedure expose m.
    if m.sql.ini == 1 then
        return
    m.sqlNull = '---'
    m.sqlInd = 'sqlInd'
    m.sql.defCurs= 49
    m.sqlCAMsg = 0
    m.sqlSuMsg = 2
    m.sql.ini = 1
    m.sql.conType = ''
    m.sql.conDbSys = ''
    m.sql.conhost = ''
    isInProd = wordPos(sysvar(sysNode), 'RZ2 RZ4') > 0
    m.sqlRetOK = 'dne' copies('rod', \ isInProd)
    return 0
endProcedure sqlIni

/*--- connect to the db2 subsystem sys -----------------------------*/
sqlRxConnect: procedure expose m.
parse upper arg sys, ggRetOk
    call sqlIni
    address tso "SUBCOM DSNREXX"
    if rc <> 0 then do
       sRc = RXSUBCOM('ADD','DSNREXX','DSNREXX') /* ADD HOST CMD ENV  */
       if sRc <> 0 then
           call err 'rc' sRc 'from RXSUBCOM(ADD, DSNREXX, DSNREXX)'
       end
    if sys = '-' then
        return 0
    if sys \== '' then
        nop
    else if sysvar(sysnode) == 'RZ1' then
        sys = 'DBAF'
/*  else if sysvar(sysnode) == 'RZ4' then
        sys = 'DP4G'
*/  else
        call err 'no default subsys for' sysvar(sysnode)
    m.sql.conDbSys = sys
    ggSqlStmt =  'connect' sys
    address dsnRexx ggSqlStmt
    if rc = 0 then
        return 0
    interpret sqlErrorHandler(rc, ggRetOk, ggSqlStmt)
endProcedure sqlRxConnect

/*--- diconnect from db2 ---------------------------------------------*/
sqlRxDisconnect: procedure expose m.
parse arg retOk
    ggSqlStmt =  'disconnect'
    m.sql.conDbSys = ''
    address dsnRexx ggSqlStmt
    if rc = 0 then
        return 0
    interpret sqlErrorHandler(rc, ggRetOk, ggSqlStmt)
endProcedure sqlDisconnect

/*--- execute a query from sql, with one resultset -------------------*/
sqlRxQuery: procedure expose m.
parse arg cx, src, retOk, resTy
     res = sqlPrepare(cx, src, retOk, 1)
     if res < 0 then
         return res
     if resTy \== '' then
        m.sql.cx.type = class4Name(resTy)
     res = sqlExec('declare c'cx 'cursor for s'cx, retOk)
     if res < 0 then
         return res
     res = sqlExec('open c'cx, retOk)
     if res < 0 then
         return res
     call sqlRxFetchVars cx
     m.sql.cx.updateCount = sqlErrd.3
     m.sql.cx.resultSet = cx
     return res
endProcedure sqlRxQuery

/*--- fetch next row to m.dst.* at end return false ------------------*/
sqlRxFetch: procedure expose m.
parse arg cx, dst, retOk
    fetCode = sqlExec('fetch c'cx 'into' sqlRxFetchVars(cx), 100 retOk)
    if fetCode == 100 then
        return 0
    if fetCode < 0 then
        return fetCode
    call sqlSetNull cx, dst
    return 1
endProcedure sqlRxFetch

/*--- return csv header line -----------------------------------------*/
sqlHeaderCSV: procedure expose m.
parse arg cx
    x = sqlRxFetchVars(cx)
    return mCatFT('SQL.'cx'.COL', 1, m.sql.cx.d.sqlD, '%qn,%s')
endProcedure sqlHeaderCSV

/*--- fetch next row return it as csv line, return '' at end ---------*/
sqlFetchCSV: procedure expose m.
parse arg cx, retOk
    dst = 'sql.csvFetch'
    fetCode = sqlExec('fetch c'cx 'into' sqlRxFetchVars(cx), 100 retOk)
    if fetCode == 100 then
        return ''
    if fetCode < 0 then
        return fetCode
    res = ''
    do kx=1 to m.sql.cx.d.sqlD
        cn = m.sql.cx.col.kx
        val = m.dst.cn
        if m.sql.cx.d.kx.sqlType // 2 = 1 & m.dst.col.sqlInd < 0 then
            res = res','m.sqlNull
        else if pos(',', val) > 0 | pos('"', val) > 0 then
            res = res','quote(val, '"')
        else
            res = res','val
        end
    return substr(res, 2)
endProcedure sqlRxFetch

/*--- close cursor 'c'cx ---------------------------------------------*/
sqlRxClose: procedure expose m.
parse arg cx, retOk
     return sqlExec('close c'cx, retOk)
endProcedure sqlRxClose

/*-- execute an sql with no resultset, but possibly outParms ---------*/
sqlRxUpdate: procedure expose m.
parse arg cx, src, retOk
    m.sql.cx.updateCount = ''
    m.sql.cx.resultSet   = ''
    bx = verify(src, '( ')
    if bx > 0 then
        fun = translate(word(substr(src, bx), 1))
    if  fun = 'SET' then do
        w2 = translate(word(substr(src, bx), 2))
        if \ abbrev(w2, ':') then
            return sqlExImm(src, retOk)
        trace ?r
        ex = pos('=', w2)
        if ex = 0 then
            ex = length(w2)+1
        var = strip(substr(w2, 2, ex-2))
        if var = '' then
            call err 'bad hostVar in' src
        m.sql.outVar = var
        src2 = 'set :M.sql.out.'var substr(w, ex) subword(src, 3)
        return sqlExec(src2, retOk)
        end
    if fun == 'DECLARE'  then do
        if 'GLOBAL' == translate(word(substr(src, bx), 2)) then
            return sqlExImm(src, retOk)
        end
    res = sqlExec(src, retOk)
    if wordPos(fun, 'DELETE INSERT UPDATE') > 0 then
        m.sql.cx.updateCount = sqlErrd.3
    return res
endProcedure sqlRxUpdate

/*-- execute a query, update or call ---------------------------------*/
sqlExecute: procedure expose m.
parse arg cx, src, retOk
    src = inp2Str(src, '-sql')
    f = translate(word(substr(src, max(verify(src, '( '), 1)), 1))
    m.sql.cx.fun = f
    if f == 'SELECT' | f == 'WITH' then
        return sqlQuery(cx, src, retOk)
    else if f == 'CALL' then
        call err 'implement sql call for:' src
    else
        return sqlUpdate(cx, src, retOk)
endProcedure sqlExecute

/*-- execute a query, copy result to stem ----------------------------*/
sql2St: procedure expose m.
parse arg src, dst, retOk, type
    cx = m.sql.defCurs
    res = sqlQuery(cx, src, retOk, type)
    if res >= 0 then do
        do sx=1 while sqlFetch(cx, dst'.'sx)
           end
        res = sx-1
        end
    m.dst.0 = res
    call sqlRxClose cx
    return res
endProcedure sql2St

/*-- execute a query and return value of the first column
           if > 1 row fail, if 0 rows return arg(3) or fail ----------*/
sql2One: procedure expose m.
parse arg src, dst
    cx = m.sql.defCurs
    call sqlQuery cx, src
    if \ sqlFetch(cx, dst) then
        if arg() > 2 then
            return arg(3)
        else
            call err 'no row returned for:' src
    if sqlFetch(cx, dst.2) then
        call err '2 or more rows for' src
    c1 = m.sql.cx.col.1
    res = m.dst.c1
    call sqlRxClose cx
    return res
endProcedure sql2One

/*--- reset sql cursor 'c'cx fields ----------------------------------*/
sqlReset: procedure expose m.
parse arg cx
     m.sql.cx.updateCount = ''
     m.sql.cx.resultSet   = ''
     m.sql.cx.needDesc    = 1
     m.sql.cx.d.sqlD = 'noSqlDA'
     m.sql.cx.i.sqlD = 'noDescInp'
     m.sql.cx.fetchVars = ''
     m.sql.cx.type  = ''
     m.sql.cx.col.0 = ''
     m.sql.cx.into = ''
     return
endProcedue sqlReset

/*--- prepare statement 's'cx from sql src into descriptor desc ------*/
sqlPrepare: procedure expose m.
parse arg cx, src, retOk, descOut
     src = inp2str(src, '%qn%s ')
     s = ''
     if descOut == 1 then
         s = 'into :M.SQL.'cx'.D'
     call sqlReset cx
     return sqlExec('prepare s'cx s 'from :src', retOk)
endProcedure sqlPrepare

/*--- open cursor 'c'cx using arguments arg(2), arg(3)... ------------*/
sqlOpen: procedure expose m.
parse arg cx us
    if us == '' then do
        if arg() <=  1 then
            return sqlExec('open c'cx)
        call sqlDescribeInput cx
        do ix=1 to arg()-1
            call sqlDASet cx , 'I', ix, arg(ix+1)
            end
        end
    return sqlExec('open c'cx 'using descriptor :M.SQL.'cx'.I')
endProcedure sqlOpen

/*--- execute a prepared statement with arg(2), arg(3)... ------------*/
sqlExePreSt: procedure expose m.
parse arg cx retOk
    if arg() <=  1 then
        return sqlExec('execute s'cx, retOk)
    call sqlDescribeInput cx
    do ix=1 to arg()-1
        call sqlDASet cx , 'I', ix, arg(ix+1)
        end
    return sqlExec('execute s'cx 'using descriptor :M.SQL.'cx'.I',
                   , retOk)
endProcedure sqlExePreSt
/*--- describe output (if not already done)
         and return size of sqlDa ------------------------------------*/
sqlDescribeOutput: procedure expose m.
parse arg cx, force
    if force == 1 | \ datatype(m.sql.cx.d.sqlD, 'n') then
         call sqlExec 'describe s'cx 'into :M.SQL.'cx'.D', 0
    return m.sql.cx.d.sqlD
endProcedure sqlDescribeOutput

/*--- describe input (if not already done)
         and return size of input sqlDA ------------------------------*/
sqlDescribeInput: procedure expose m.
parse arg cx, force
    if force == 1 | \ datatype(m.sql.cx.i.sqlD, 'n') then
         call sqlExec 'describe input s'cx 'into :M.SQL.'cx'.I'
    return m.sql.cx.i.sqlD
endProcedure sqlDescribeInput

/*--- describe table and return sqlDA --------------------------------*/
sqlDescribeTable: procedure expose m.
parse upper arg tb, force
    if force == 1 | \ datatype(m.sql.table.tb.sqlD, 'n') then
         call sqlExec 'describe table :tb into :M.SQL.TABLE.'tb
    return 'SQL.TABLE.'tb
endProcedure sqlDescribeTable

/*--- return select column list for table tb
      omit Blobs (blobMax < 0) or substr(blob, 1, blobMax) ----------*/
sqlColList: procedure expose m.
parse arg tb al, blobMax
    sd = sqlDescribeTable(tb)
    bs = ''
    lst = ''
    if al \== '' & right(al, 1) \== '.' then
        al = al'.'
    do sx=1 to m.sd.sqld
        if wordPos(m.sd.sx.sqlType, '404 405 408 409 412 413') < 1 then
            lst = lst',' al || m.sd.sx.sqlName
        else do
            bs = bs m.sd.sx.sqlName
            if blobMax >= 0 then
                lst = lst', length('al || m.sd.sx.sqlName')' ,
                                          m.sd.sx.sqlName'Len' ,
                     || ', substr('al  || m.sd.sx.sqlName ,
                     || ', 1,' blobMax')' m.sd.sx.sqlName
            end
        end
    m.sd.colList = substr(lst, 3)
    m.sd.blobs = strip(bs)
    return substr(lst, 3)
endProcedure sqlColList

/*--- put sqlNull in all vars where indicator says so ---------------*/
sqlSetNull: procedure expose m.
    parse arg cx, dst
    do nx=1 to m.sql.cx.sqlNull.0
        col = m.sql.cx.sqlNull.nx
        if m.dst.col.sqlInd < 0 then
            m.dst.col = m.sqlNull
        end
    return
endProcedure sqlSetNull

/*--- use describe output to generate column names,
                fetchVariables and sqlNull names ---------------------*/
sqlRxFetchVars: procedure expose m.
parse arg cx
    if m.sql.cx.fetchVars \== '' then
        return m.sql.cx.fetchVars
    call sqlDescribeOutput cx
    f = m.sql.cx.type
    if f \== '' then do
        f = oClaMet(f, 'oFlds')
        if m.f.0 < m.sql.cx.d.sqlD then
            call err 'not enough column names'
        end
    m.sql.cx.col.0 = m.sql.cx.d.sqlD
    nx = 0
    vars = ''
    do kx=1 to m.sql.cx.d.sqlD
        cn = sqlVarName(f, kx, m.sql.cx.d.kx.sqlName)
        m.sql.cx.col.kx = cn
        m.sql.cx.col2kx.cn = kx
        vars = vars', :m.dst.'cn
        if m.sql.cx.d.kx.sqlType // 2 = 1 then do
            vars = vars' :m.dst.'cn'.sqlInd'
            nx = nx + 1
            m.sql.cx.sqlNull.nx = cn
            end
        end
    m.sql.cx.sqlNull.0 = nx
    m.sql.cx.fetchVars = substr(vars, 3)
    return m.sql.cx.fetchVars
endProcedure sqlRxFetchVars

sqlCol2kx: procedure expose m.
parse arg cx, nm
    call sqlRxFetchVars cx
    if symbol('M.SQL.CX.COL2KX.NM') \== 'VAR' then
        return ''
    kx = m.sql.cx.col2kx.nm
    if m.sql.cx.col.kx == nm then
        return kx
    drop m.sql.cx.col.kx
    return ''
endProcedure sqlCol2kx

sqlVarName: procedure expose m. sqlVarName.
parse arg f, kx, sNa
    if f == '' then do
        cx = verifId(sNa)
        if cx > 0 then /* avoid bad characters for classNew| */
           sNa = left(sNa, cx-1)
        upper sNa
        if sNa == '' | symbol('sqlVarName.sNa') == 'VAR' then
                sNa = 'COL'kx
        sqlVarName.sNa = 1
        return sNa
        end
    else do
        if m.f.kx == '' then
            call err 'implement empty varName'
        return substr(m.f.kx, 2)
        end
endProcedure sqlVarName

/*--- set one value in a DA, handle nulls ----------------------------*/
sqlDASet: procedure expose m.
parse arg cx, da, ix, val
    m.sql.cx.da.ix.sqlData = val
    m.sql.cx.da.ix.sqlInd = - (val == m.sqlNull)
    /* data types schienen einmal nicht zu funktionieren .......
    if wordPos(m.da.ix.sqlType, '384 385 388 389 392 393') > 0 then
        m.da.ix.sqlType = 448 + (m.da.ix.sqlType // 2) */
    return
endProcedure sqlDASet

sqlExImm:
parse arg ggSrc, ggRetOk
     return sqlExec('execute immediate :ggSrc', ggRetOk)
endProcedure sqlExImm

sqlCommit: procedure expose m.
parse arg src
     return sqlExec('commit')
endProcedure sqlCommit

/*--- execute sql thru the dsnRexx interface -------------------------*/
sqlExec: /* no procedure, to keep variables sql... */
    parse arg ggSqlStmt, ggRetOk
    m.sql.sqlHaHi = ''
    address dsnRexx 'execSql' ggSqlStmt
    /* say 'sqlCode' sqlCode 'rc' rc 'for' ggSqlStmt ggNo */
    if rc = 0 then
        return 0
    interpret sqlErrorHandler(rc, ggRetOk, ggSqlStmt)
endProcedure sqlExec

sqlErrorHandler: procedure expose m. ,
                   sqlCode sqlErrMc sqlErrP sqlErrD. sqlWarn. sqlState
parse arg drC, retOk, verb rest
    if drC == 0 then
        return 'return 0'
    if wordPos(drC, '1 -1') < 0 then
        return "call err 'dsnRexx rc" drC"' sqlmsg()"
    if pos('-', retOK) < 1 then
        retOK = retOk m.sqlRetOk
    if pos('*', retOK) > 0 | wordPos(sqlCode, retOK) > 0 then do
        if sqlCode < 0 & pos('say', retOK) > 0 then
            return "call outSt errMsg(' }'sqlMsg()); return" sqlCode
        else
            return "return" sqlCode
        end
    upper verb
    if verb == 'DROP' then do
        if sqlCode == -204 & wordPos('dne', retok) > 0 then
            return 'return' sqlCode
        if sqlCode = -672 & verb=='DROP' ,
               & wordPos('rod', retok) > 1 then do
            hahi = m.sql.sqlHaHi ,
                 || sqlMsgLine(sqlCode, 'tb='sqlErrMc ,verb rest)'\n'
            call sqlExec 'alter table' SqlErrMc ,
                    'drop restrict on drop'
            hahi = hahi || m.sql.sqlHaHi ,
                        || sqlMsgLine(sqlCode, , ggSqlStmt)'\n'
            call sqlExec verb rest
            m.sql.sqlHaHi = hahi
            return 'return' sqlCode
            end
        end
    if drC < 0 then
         return "call err sqlmsg(); return" sqlCode
    if (sqlCode <> 0 | sqlWarn.0 ^==' ') & pos('w',retOK) < 1 then
        return "call outSt errMsg(' }'sqlMsg()); return" sqlCode
    return 'return' sqlCode
endProcedure sqlErrorHandler

sqlMsgLine: procedure expose m. sqlErrD.
parse arg res, cnt, src, plus
    verb = translate(word(src, 1))
    if datatype(res, 'n') then
        res = 'sqlCode' res
    if cnt \== '' then do
        res = res',' cnt
        vx = wordPos(translate(word(src,1)), 'DELETE INSERT UPDATE')
        if datatype(cnt, 'n') then
            if vx > 0 then
               res = res 'rows' word('deleted inserted updated', vx)
            else if cnt <> 0 then
                res = res 'rows updated'
        end
    if plus \== '' then
        res = res',' plus
    if abbrev(res, ', ') then
        res = substr(res, 3)
    if src \== '' then do
        ll = 75 - length(res)
        aa = strip(src)
        if length(aa) > ll then
            aa = space(aa, 1)
        if length(aa) > ll then
           aa = left(aa,  ll-3)'...'
        res = res':' aa
        end
    return res
endProcedure sqlMsgLine

/*--- send a command to db2 through the TSO dsn processor ------------*/
sqlDsn: procedure expose m.
parse arg st, sys, cmd, rcOk
    x = outtrap('M.'st'.')
    push 'END'
    push cmd
    address tso 'DSN SYSTEM('sys')'
    rr = rc
    x = outtrap(off)
    if rr = 0 | rcOk = '*' | wordPos(rr, rcOk) > 0 then
        return rr
    fl = max(1, m.st.0 - 10)
    em = 'rc' rr 'for DSN SYSTEM('sys') cmd' cmd,
          '\nOuputlines' fl '-' m.st.0':'
    do lx=fl to m.st.0
        em = em '\n' strip(m.st.lx, 't')
        end
    call err em
endProcedure sqlDsn
/*--- issue an sql error message -------------------------------------*/
sqlMsg: /* no procedure, to keep variables sql... */
    if \ dataType(sqlCode, 'n') then do
        ggRes = 'sqlCode' sqlCode 'not numeric\n'sqlCaMsg()
        end
    else do
        ggRes = sqlDsntiar(sqlRx2CA())
        ggWa = sqlMsgWarn()
        if ggWa \= '' then
            ggRes = ggRes'\nwarnings' ggWa
        if m.sqlCAMsg == 1 then
           ggRes = ggRes'\n'sqlCaMsg()'\n'sqlCaMsg(sqlCa2Rx(sqlCa))
        end
    ggSt = 'SQL.HOST'
    ggVa = 'SQL.HOST.VAR'
    ggBe = 'SQL.HOST.BEF'
    call sqlHostVars ggSqlStmt, 12, ggSt
    if datatype(sqlErrd.5, 'n') & sqlErrd.5 > 0 then do
        ggW1 = translate(word(ggSqlStmt, 1))
        ggW2 = translate(word(ggSqlStmt, 2))
        if ggW1 == 'PREPARE' then
            ggVV = sqlHostVarFind(ggSt, 'FROM')
        else if ggW1 ggW2 == 'EXECUTE IMMEDIATE' then
            ggVV = sqlHostVarFind(ggSt, 1)
        else
            ggVV = ''
        if ggVV == '' then
            ggRes = ggRes || sqlMsgSrcPos(ggSqlStmt, sqlErrd.5)
        else
            ggRes = ggRes || sqlMsgSrcPos(value(ggVV), sqlErrd.5)
        end

    ggRes = ggRes'\nstmt =' sqlShorten(ggSqlStmt, 2000, sqlErrd.5)
    ggPref = '\nwith'
    do ggXX=1 to m.ggSt.0
        ggRes = ggRes || ggPref m.ggBe.ggXX ':'m.ggVa.ggXX ,
                      '=' value(m.ggVa.ggXX)
        ggPref = '\n    '
        end
    if m.sqlSuMsg == 1 | (m.sqlSuMsg == 2 & m.sql.conHost \== '') then
        ggRes = ggRes'\nsubsys =' m.sql.conDbSys ,
             || ', host =' m.sql.conHost', interfaceType' m.sql.conType
    return  ggRes
endSubroutine sqlMsg

sqlShorten: procedure expose m.
parse arg txt, maxL, pos
    if length(txt) <= maxL then
        return txt
    if \ datatype(pos, 'n') | pos < 1 then
        pos = 1
    ex = pos + min(60, maxL%7)
    if ex <= maxL - 4 then
        return left(txt, maxL-4) '...'
    if ex >= length(txt) then
        return left(txt, 67) '...\n'substr(txt, length(txt)-maxL+72)
    else
        return left(txt, 67) '...\n'substr(txt, ex-maxL+76, maxL-75) ,
                       '...'
endProcedure sqlShorten
/*--- use dsnTiar to translate sql Info to error text ----------------*/
sqlDsnTiar: procedure expose m.
parse arg ca
    if -438  = sqlCa2Rx(ca) then
        return '\nSQLCODE = -438:',
           'APPLICATION RAISED ERROR WITH sqlState' sqlState ,
           'and DIAGNOSTIC TEXT:' sqlErrMc
    liLe = 78
    msLe = liLe * 10
    msg = d2c(msLe,2) || left('', msLe)
    len = d2c(liLe, 4)
    ADDRESS LINKPGM "DSNTIAR ca msg len"
    if rc = 0      then nop
    else if rc = 4 then say 'warn linkPgm dsnTiar rc' rc 'sqlCa' ca
    else                call err 'linkPgm dsnTiar rc' rc 'sqlCa' ca
    res = strip(substr(msg, 13, liLe-10))
    cx = pos(', ERROR: ', res)
    if cx > 0 then
        res = left(res, cx-1)':' strip(substr(res, cx+9))
    do c=3+liLe by liLe to msLe while substr(msg, c, 10) = ''
            res = res'\n    'strip(substr(msg, c+10, liLe-10))
        end
    return res
endProcedure sqlDsnTiar

/*--- format all rexx sqlCa fields into a message --------------------*/
sqlCaMsg:
    return 'sqlCode' sqlCode 'sqlState='sqlState                    ,
           '\n    errMC='translate(sqlErrMc, ',', 'ff'x)            ,
           '\n    warnings='sqlWarnCat('+') 'erP='sqlErrP           ,
           '\n    errD.1='sqlErrD.1 '2='sqlErrD.2 '3='sqlErrD.3     ,
           '\n    errD.4='sqlErrD.4 '5='sqlErrD.5 '6='sqlErrD.6
endProcedure sqlCaMsg

/*--- format the sqlCA into the dsnTiar SQLCA ------------------------*/
sqlRx2Ca: procedure expose m. ,
                   sqlCode sqlErrMc sqlErrP sqlErrD. sqlWarn. sqlState
    if \ (datatype(sqlcode, 'n') & datatype(sqlErrD.1, 'n') ,
                                 & datatype(sqlErrD.3, 'n')) then
        return err('sqlCode etc. not numeric\nsqlCa =' sqlCaMsg())
    if digits() < 10 then
        numeric digits 10
    sqlCa = 'SQLCA   ' || d2c(136, 4) || d2c(sqlCode, 4) ,
            || d2c(min(70, length(sqlErrMc)), 2)left(sqlErrMc, 70) ,
            || left(sqlErrP, 8) ,
            || d2c(sqlErrD.1, 4)d2c(sqlErrD.2, 4)d2c(sqlErrD.3, 4) ,
            || d2c(sqlErrD.4, 4)d2c(sqlErrD.5, 4)d2c(sqlErrD.6, 4) ,
            || sqlWarnCat() || sqlState
    if length(sqlCa) <> 136 then
        call err 'sqlCa length' length(sqlCa) 'not 136' ,
                 '\n'sqlCaMsg() '==>'  ca', hex='c2x(ca)
    return sqlCa
endProcedure sqlRx2Ca

/*--- extract the fields from the SqlCA and put it to rexx vars ------*/
sqlCA2Rx: procedure expose m. ,
       sqlCode sqlErrMc sqlErrP sqlErrD. sqlWarn. sqlState
parse arg ca
    numeric digits 10
    if length(ca) < 136 | c2d(substr(ca, 9, 4), 4) <> 136 then
        call err 'bad sqlCa len' length(ca) 'not 136:' ca', hex='c2x(ca)
    sqlCode  = c2d(substr(ca, 13 ,4), 4)
    sqlErrMC = substr(ca, 19, c2d(substr(ca, 17, 2), 2))
    sqlErrP  = substr(ca, 89, 8)
    do ix=1 to 6
        sqlErrD.ix = c2d(substr(ca, 93 + 4 * ix, 4), 4)
        end
    do ix=0 to 10
        sqlWarn.ix = substr(ca, 121 + ix, 1)
        end
    sqlState = substr(ca, 132, 5)
    return sqlCode
endProcedure sqlCA2Rx

/*--- concat the sql warnings with Separator sep --------------------*/
sqlWarnCat: procedure expose m. sqlWarn.
parse arg sep
    return sqlWarn.0 || sep,
        || sqlWarn.1||sqlWarn.2||sqlWarn.3||sqlWarn.4||sqlWarn.5||sep ,
        || sqlWarn.6||sqlWarn.7||sqlWarn.8||sqlWarn.9||sqlWarn.10||sep
endProcedure sqlWarnCat

/*--- make the text for sqlWarnings ----------------------------------*/
sqlMsgWarn: procedure expose m. sqlWarn.
     r = ''
     text =' 1=W var truncated, 1=S scrollable, 1=N nonScrollable,'  ,
            '2=W nulls in aggregate,'                                ,
            '3=W more cols than vars,'                               ,
                             '3=Z more result sets than locators,'   ,
            '4=W no where, 4=D sensitive dynamic, 4=I insensitive,'  ,
                          '4=S sensitive static,'                    ,
            '5=W not valid sql, 5=1 readOnly, 5=2 readDelete,'       ,
                          '5=3 readDeleteUpdate,'                    ,
            '6=W day changed to month range,'                        ,
            '7=W dec digits truncated,'                              ,
            '8=W char substituted,'                                  ,
            '9=W arith excep in count, 9=Z multipe result sets,'     ,
            '10=W char conversion err in ca,'
     do wx = 1 to 10
         w = sqlWarn.wx
         if w = ' ' then
             iterate
         t = wx'='w
         cx = pos(' 'wx'='w' ', text)
         ex = pos(','         , text, cx + 1)
         if cx > 0 & ex > cx then
             r = r substr(text, cx+1, ex-cx)
         else
             r = r wx'='w '?,'
         end
     r = strip(r, 't', ',')
     if r = '' & sqlwarn.0 <> '' then
        call err 'sqlWarn.0='sqlWarn.0 'but all warns empty'
     return r
endProcedure sqlMsgWarn

/*--- show in the source src the point pos  (where error occured)
          a few lines from src around pos and arrow to pos ----------*/
sqlMsgSrcPos: procedure expose m.
parse arg src, pos
    liLe = 68
    liCn = 3
    afLe = 25
    t1 = space(left(src, pos), 1)
    t2 = left(' ', substr(src, pos, 1) == ' ' ,
                 | substr(src, pos+1, 1) == ' ') ,
         || space(substr(src, pos+1), 1)
    afLe = min(afLe, length(t2))
    if length(t1) + afLe > liLe * liCn then
        t1 = '...'right(t1, liLe * liCn - afLe -3)
    else if length(t1)+length(t2) > liLe then
        t1 = left(' ', (liCn * liLe - length(t1) -afLe) // liLe)||t1
    pL = length(t1) // liLe
    if length(t2) <= liLe-pL then
        tx = t1 || t2
    else
        tx = t1 || left(t2, liLe-pL-3)'...'
    res = '\nsrc' strip(substr(tx, 1, liLe), 't')
    do cx=1+liLe by liLe to length(tx)
        res = res || '\n  +' strip(substr(tx, cx, liLe), 't')
        end
    loc = 'pos' pos 'of' length(src)
    if length(loc)+6 < pL then
        return res'\n  >' right('>>>'loc'>>>', pL)
    else
        return res'\n  >' left('', pL-1)'<<<'loc'<<<'
endProcdedure sqlMsgSrcPos

/*--- get the hostVars in the sql in src and the word before ---------*/
sqlHostVars: procedure expose m.
parse arg src, cnt, st
    cx = 1
    sx = 0
    do cnt
        cx = pos(':', src, cx) + 1
        if cx < 2 then
           leave
        if pos(substr(src, cx, 1), m.ut.alfRexN1) > 0 then
            iterate
        ex = verify(src, m.ut.alfRex, 'n', cx)
        sx = sx + 1
        if ex < 1 then
            m.st.var.sx = substr(src, cx)
        else
            m.st.var.sx = substr(src, cx, ex - cx)
        if m.st.var.sx == '' | length(m.st.var.sx) > 100 then
            iterate
                       /* search word before */
        do bE = cx-2 by -1 to 1 ,
                while substr(src, bE, 1) == ' '
            end
        do bB = bE by -1 to max(1, bE-20),
                while pos(substr(src, bB, 1), m.ut.alfa) > 0
            end
        if bB < bE & bB >= 0 then
            m.st.bef.sx = substr(src, bB+1, bE-bB)
        else
            m.st.bef.sx = ''
        end
    m.st.0 = sx
    return sx
endProcedure sqlHostVars

/*--- find the name of hostvar, by index or by before ----------------*/
sqlHostVarFind: procedure expose m.
parse arg st, fnd
    if datatype(fnd, 'n') & fnd <= m.st.0 then
        return m.st.var.fnd
    do ix=1 to m.st.0
        if translate(m.st.bef.ix) = fnd then
            return m.st.var.ix
        end
    return ''
endSubroutine sqlHostVarFind
/* copy sqlRx  end   **************************************************/
/* copy j begin *******************************************************
    the j framework
         jReset
         jOpen
         jClose
         jRead
         jWrite
***********************************************************************/
jRead: procedure expose m.
parse arg m, var
    met = objMet(m, 'jRead')
    if m.m.jReading then
        interpret met
    else
        return err('jRead('m',' var') but not opened r')
endProcedure jRead

jReadO: procedure expose m.
parse arg m
if arg() > 1 then call err '???  old interface'
    met = objMet(m, 'jReadO')
    if m.m.jReading then
        interpret met
    else
        return err('jReadO('m',' var') but not opened r')
endProcedure jReadO

jWrite: procedure expose m.
parse arg m, line
    met = objMet(m, 'jWrite')
    if \ m.m.jWriting then
        return err('jWrite('m',' line') but not opened w')
    interpret met
    return
endProcedure jWrite

jWriteO: procedure expose m.
parse arg m, var
    met = objMet(m, 'jWriteO')
    if \ m.m.jWriting then
        return err('jWriteO('m',' var') but not opened w')
    interpret met
    return
endProcedure jWriteO

jWriteAll: procedure expose m.
parse arg m, rdr
    rdr = o2file(rdr)
    met = objMet(m, 'jWriteAll')
    if \ m.m.jWriting then
        return err('jWriteAll('m',' rdr') but not opened w')
    interpret met
    return
endProcedure jWriteAll

jWriteNow: procedure expose m.
parse arg m, rdr
    rdr = o2file(rdr)
    interpret objMet(m, 'jWriteNow')
    return
endProcedure jWriteNow

jCat: procedure expose m.
parse arg opt m
    if m = '' then do
        m = opt
        opt = m.j.cWri
        end
    call jOpen m, opt
    do ax=2 to arg()
        call jWriteAll m, arg(ax)
        end
    call jClose m
    return m
endProcedure jCat

jWriteNowImpl: procedure expose m.
parse arg m, rdr
    call jOpen rdr, m.j.cRead
    do while jRead(rdr, line)
        call jWrite m, m.line
        end
    call jClose rdr
    return
endProcedure jWriteNow

jWriteNowImplO: procedure expose m.
parse arg m, rdr
    call jOpen rdr, m.j.cRead
    do while assNN('li', jReadO(rdr))
        call jWriteO m, li
        end
    call jClose rdr
    return
endProcedure jWriteNow

/*--- reset JRW: fail if open, initialise ---------------------------*/
jReset: procedure expose m.
parse arg m, arg, arg2, arg3
    if m.m.jReading == 1 | m.m.jWriting == 1 then
        return err('still open jReset('m',' arg2')')
    m.m.jReading = 0
    m.m.jWriting = 0
    m.m.jUsers = 0
    interpret objMet(m, 'jReset')
    return m
endProcedure jReset

jOpen: procedure expose m.
parse arg m, opt
    met = objMet(m, 'jOpen')
    oUsers = m.m.jUsers
    if opt = m.j.cRead then do
        if m.m.jReading then
            nop
         else if m.m.jWriting then
            return err('already opened for writing jOpen('m',' opt')')
        else do
            interpret met
            m.m.jReading = 1
            end
        end
    else if \ abbrev('>>', opt, 1) then do
        return err('bad option' opt 'in jOpen('m',' opt')')
        end
    else do
        if m.m.jWriting then
            nop
         else if m.m.jReading then
            return err('already opened for reading jOpen('m',' opt')')
        else do
            interpret met
            m.m.jWriting = 1
            end
        end
    m.m.jUsers = oUsers + 1
    return m
endProcedure jOpen

jClose: procedure expose m.
parse arg m
    met = objMet(m, 'jClose')
    oUsers = m.m.jUsers
    if oUsers = 1 then do
        interpret met
        m.m.jReading = 0
        m.m.jWriting = 0
        end
    else if oUsers < 1 then
        call err 'jClose' m 'but already closed'
    m.m.jUsers = oUsers - 1
    return m
endProcedure jClose

/*--- cat the lines of the file together, with mid between lines,
                fail if not all lines are strings -------------------*/
jCatLines: procedure expose m.
parse arg m, fmt
    if abbrev(fmt, '-sql') then
        return jCatSql(m, substr(fmt, 5))
    else
        fmt = '%s%qn %s%qe%q^'fmt
    call jOpen m, m.j.cRead
    if \ jRead(m, line) then do
        call jClose m
        return ''
        end
    res = f(fmt, m.line)
    do while jRead(m, line)
        res = res || f(fmt'%Qn', m.line)
        end
    call jClose m
    return res || f(fmt'%Qe')
endProcedure jCatLines

/*--- cat the line of a file, using comments
               fixline (with token wrapping) or separate lines -------*/
jCatSql: procedure expose m.
parse arg m, fLen
    call jCatSqlReset m'.JCATSQL', , jOpen(m, '<'), fLen
    res = jCatSqlNext(m'.JCATSQL')
    call jClose m
    return res
endProcedure jCatSql

jCatSqlReset: procedure expose m.
parse arg m, aSrc, m.m.rdr, m.m.fLen
    call jCatSqlNL m, aSrc
    return m
endProcedure jCatSqlReset

jCatSqlNL: procedure expose m.
parse arg m
    if m.m.rdr \== '' then
      if jRead(m.m.rdr, m'.SRC') then do
        if m.m.fLen \== '' then
            m.m.src = left(m.m.src, m.m.fLen)
        else if m.m.src == '' then
            m.m.src = ' '
        else if substr(m.m.src, length(m.m.src), 1) \== ' ' then
            m.m.src = m.m.src' '
        m.m.pos = 1
        return 1
        end
    m.m.pos = length(m.m.src)+1
    return 0
endProcedure jCatSqlNl

jCatSqlNext: procedure expose m.
parse arg m, stop
    sta = 'tt'
    res = ''
    do forever
        do while scanSBEnd(m)
            if \ jCatSqlNl(m) then
                return strip(res)
            end
        bx = m.m.pos
        sta = scanSql2Stop(m, sta, stop)
        s1 = left(sta, 1)
        if pos(s1, stop) > 0 then do
            if res <> '' then
                return strip(res)
            end
        else if s1 == '-' | s1 == '/' then
            res = res' '
        else if pos('/', sta) = 0 then
            res = res || substr(m.m.src, bx, m.m.pos - bx)
        end
/*-------- ?????????????????????
jCatSqlNext?: procedure expose m.
parse arg m, stop
    res = ''
    bx = m.m.pos
    do forever
        call scanUntil m, '"''-/'stop
        if scanSBEnd(m) then do
            res = res || substr(m.m.src, bx)
            bx = 0
            end
        else if substr(m.m.src, m.m.pos, 2) = '--' then do
            res = res || substr(m.m.src, bx, m.m.pos-bx)' '
            bx = 0
            end
        else if substr(m.m.src, m.m.pos, 2) = '/*' then do
            res = res || substr(m.m.src, bx, m.m.pos-bx)' '
            do forever
                px = pos('*/', m.m.src, m.m.pos)
                if px > 0 then
                    leave
                if \ jCatSqlNL(m) then
                    return res
                end
            bx = px+2
            m.m.pos = bx
            end
        else if scanLit(m, "'", '"') then do
            c1 = m.m.tok
            do while \ scanStrEnd(m, c1)
                res = res || substr(m.m.src, bx)
                if m.m.fLen \== '' then
                    if jCatSqlNl(m) then do
                        bx = m.m.pos
                        iterate
                        end
                call err 'unclosed' c1 'string:' m.m.src
                end
            end
        else if pos(substr(m.m.src, m.m.pos, 1), stop) > 0 then do
            res = strip(res||substr(m.m.src, bx, m.m.pos-bx), 't')
            call scanChar m, 1
            if res <> '' then
                return strip(res)
            bx = m.m.pos
            end
        else if \ scanLit(m, '-', '/') then do
            call err 'bad char at' substr(m.m.src, m.m.pos) 'in' m.m.src
            end
        if bx = 0 then
            if jCatSqlNl(m) then
                bx = m.m.pos
            else
                return strip(res)
        end
endProcedure jCatSqlNext
??????????????*/
jIni: procedure expose m.
    if m.j.ini == 1 then
        return
    m.j.ini = 1
    m.j.cRead = '<'
    m.j.cWri = '>'
    m.j.cApp = '>>'
    call classIni
    am = "call err 'call of abstract method"
    c1 = classNew('n JRW u ORun, f JREADING v, f JWRITING v', 'm',
        , "new return jReset("m.class.basicNew", arg, arg2, arg3)",
        , "jRead"   am "jRead('m',' var')'" ,
        , "jReadO if \ jRead(m, 'J.GGVAR') then return '';",
                "return s2o(m.j.ggVar)" ,
        , "jWrite" am "jWrite('m',' line')'" ,
        , "jWriteO call jWrite(m, o2string(var))" ,
        , "jWriteAll call jWriteNowImpl m, rdr",
        , "jWriteNow call jWriteNowImpl m, rdr",
        , "jReset",
        , "jOpen" am" jOpen('m',' opt')'" ,
        , "jClose" ,
        , "oRun call pipeWriteAll m",
        , "o2String return jCatLines(m, fmt)",
        , "o2File return m")
    m.class.forceDown.c1 = c1'#new'
    c2 = classNew('n JRWDeleg u JRW', 'm',
        , "new return jReset("m.class.basicNew", arg)",
        , "jRead return jRead(m.m.deleg, var)" ,
        , "jReadO return jReadO(m.m.deleg)" ,
        , "jWrite  call jWrite(m.m.deleg, line)" ,
        , "jWriteO call jWrite(m.m.deleg, var)" ,
        , "jWriteAll call jWriteAll m.m.deleg, rdr",
        , "jWriteNow call jWriteNow m.m.deleg, rdr",
        , "jReset    if arg \== '' then m.m.deleg = arg;",
                                   "else call jReset m.m.deleg;",
        , "jOpen     call jOpen m.m.deleg,' opt; return m" ,
        , "jClose    call jClose m.m.deleg; return m" )
    m.class.forceDown.c2 = c2'#new'
    call classNew 'n JRWO u JRW', 'm',
        , "jRead res = jReadO(m); if res == '' then return 0;" ,
                "m.var = o2string(res); return 1" ,
        , "jReadO"   am "jReadO('m')'" ,
        , "jWrite  call jWriteO(m, s2o(var))" ,
        , "jWriteO" am "jWriteO('m',' line')'",
        , "jWriteAll call jWriteNowImplO m, rdr",
        , "jWriteNow call jWriteNowImplO m, rdr",

    am = "call err 'call errObject"
    call classNew 'n JRWErr u JRW', 'm',
        , "jWriteAll" er "jWriteAll 'm', rdr'",
        , "jWriteNow" er "jWriteNow 'm', 'rdr'",
        , "jClose" er "jClose 'm'"
    call classNew 'n JSay u JRW', 'm',
        , "jWrite say line" ,
        , "jWriteO call classOut , var, 'outO: '",
        , "jOpen if \ abbrev(opt, m.j.cWri) then",
            "call err 'can only write JSay.jOpen('m',' opt')';" ,
            "else m.m.jWriting = 1"
    call classNew 'n JStem u JSay', 'm',
        , "jReset m.m.stem = arg;",
               "if \ dataType(m.arg.0, 'n') then m.arg.0 = 0" ,
        , "jWrite call mAdd m.m.stem, line"
    call classNew 'n JRWEof u JRW', 'm',
        , "jRead drop m.var; return 0",
        , "jOpen if pos('>', opt) > 0 then",
            "call err 'can only read JRWEof.jOpen('m',' opt')';" ,
            "else m.m.jReading = 1"
    m.j.in = jOpen(oNew('JRWEof'), m.j.cRead)
    m.j.errRead  = "return err('jRead('m',' var') but not opened r')"
    m.j.errReadO = "return err('jReadO('m',' var') but not opened r')"
    m.j.errWrite = "return err('jWrite('m',' line') but not opened w')"
    m.j.errWriteO= "return err('jWriteO('m',' var') but not opened w')"
    call classNew "n JBuf u JRWO, f BUF s r", "m",
        , "jOpen call jBufOpen m, opt",
        , "jClose call oMutatName m, 'JBuf'",
        , "jReset call jBufReset m, arg",
        , "jRead" m.j.errRead ,
        , "jReadO" m.j.errReadO ,
        , "jWrite" m.j.errWrite ,
        , "jWriteO" m.j.errWriteO
    call classNew "n JBufOR u JBuf", "m",
        , "jRead return jBufORead(m, var)",
        , "jReadO return jBufOReadO(m)"
    call classNew "n JBufSR u JBuf", "m",
        , "jRead return jBufSRead(m, var)",
        , "jReadO return jBufSReadO(m)"
    call classNew "n JBufOW u JBuf", "m",
        , "jWrite call jBufOWrite m, line",
        , "jWriteO call jBufOWriteO m, var"
    call classNew "n JBufSW u JBuf", "m",
        , "jWrite call jBufSWrite m, line",
        , "jWriteO call jBufSWriteO m, var"
    call classNew "n JBufTxt u JBuf, f MAXL v ", "m",
        , "jReset call jBufReset m, arg; m.m.maxl = 80",
        , "jWriteO call jBufWrite m, o2Text(var, m.m.maxl)"
    return
endProcedure jIni

/*--- return a JRW from rdr or in ------------------------------------*/
j2Rdr: procedure expose m.
    parse arg rdr
    if oStrOrObj(rdr, m.j.in) then
        return jBuf(ggStr)
    else
        return o2file(ggObj)
endProcedure j2Rdr
      /* jstr is part of out interface --> inp2str */
inp2str: procedure expose m.
    parse arg rdr, fmt
    if oStrOrObj(rdr, m.j.in) then
        return ggStr
    else
        return o2String(ggObj, fmt)
endProcedure inp2str

j2Buf: procedure expose m.
    parse arg rdr
    if oStrOrObj(rdr, m.j.in) then
        return jBuf(ggStr)
    if oClaInheritsOf(ggCla, 'JBuf') & m.ggObj.jUsers < 1 then
        return ggObj
    b = jOpen(jBuf(), m.j.cWri)
    call jWriteNow b, o2File(ggObj)
    return jClose(b)
endProcedure j2Buf

in: procedure expose m.
parse arg arg
    return jRead(m.j.in, arg)
endProcedure in

inO: procedure expose m.
    if arg() > 0 then call err '??? old interface'
    return jReadO(m.j.in)
endProcedure in

out: procedure expose m.
parse arg line
    call jWrite m.j.out, line
    return 0
endProcedure out

outO: procedure expose m.
parse arg arg
    call jWriteO m.j.out, arg
    return
endProcedure outO

JRWDeleg: procedure expose m.
parse arg arg
    return oNew('JRWDeleg', arg)
endProcedure JRWDeleg

/*--- jBuf: buffer read or write (supports datataypes) ---------------*/
jBuf: procedure expose m.
    m = oNew('JBuf') /* calls jBufReset */
    do ax=1 to arg()
        m.m.buf.ax = arg(ax)
        end
    m.m.buf.0 = ax-1
    m.m.allS = 1
    return m
endProcedure jBuf
/*--- jBuf: buffer read or write (supports datataypes) ---------------*/
jBufTxt: procedure expose m.
    m = oNew('JBufTxt') /* calls jBufReset */
    do ax=1 to arg()
        m.m.buf.ax = arg(ax)
        end
    m.m.buf.0 = ax-1
    m.m.allS = 1
    return m
endProcedure jBufTxt

jBufReset: procedure expose m.
parse arg m
    m.m.stem = m'.BUF'
    do ax=1 to arg() - 1
        m.m.buf.ax = arg(ax+1)
        end
    m.m.buf.0 = ax-1
    m.m.allS = 1
    return m
endProcedure jBufReset

jBufOpen: procedure expose m.
parse arg m, opt
    if opt == m.j.cRead then do
        m.m.readIx = 0
        if m.m.allS then
            call oMutatName m, 'JBufSR'
        else
            call oMutatName m, 'JBufOR'
        return m
        end
    if opt == m.j.cWri then do
        m.m.buf.0 = 0
        m.m.allS = 1
        end
    else if opt \== m.j.cApp then
         call err 'jBufOpen('m',' opt') with bad opt'
    if m.m.allS then
        call oMutatName m, 'JBufSW'
    else
        call oMutatName m, 'JBufOW'
    return m
endProcedure jBufOpen

jBufOWrite: procedure expose m.
parse arg m, line
    call mAdd m'.BUF', s2o(line)
    return
endProcedure jBufOWrite
jBufSWrite: procedure expose m.
parse arg m, line
    call mAdd m'.BUF', line
    return
endProcedure jBufWrite

jBufWriteStem: procedure expose m.
parse arg m, st
    ax = m.m.buf.0
    if m.m.allS then do
        do sx=1 to m.st.0
            ax = ax + 1
            m.m.buf.ax = m.st.sx
            end
        end
    else do
        do sx=1 to m.st.0
            ax = ax + 1
            m.m.buf.ax = o2String(m.st.sx)
            end
       end
       m.m.buf.0 = ax
    return m
endProcedure jBufWrite

jBufOWriteO: procedure expose m.
parse arg m, ref
    call mAdd m'.BUF', ref
    return
endProcedure jBufOWriteO

jBufSWriteO: procedure expose m.
parse arg m, ref
    cl = objClass(ref)
    if cl = m.class.classV then do
        call mAdd m'.BUF', m.ref
        return
        end
    if cl == m.class.classW then do
        call mAdd m'.BUF', substr(ref, 2)
        return
        end
    do ax=1 to m.m.buf.0
        m.m.buf.ax = s2o(m.m.buf.ax)
        end
    m.m.allS = 0
    call oMutatName m, 'JBufOW'
    call mAdd m'.BUF', ref
    return
endProcedure jBufWriteO

jBufOReadO: procedure expose m.
parse arg m
    nx = m.m.readIx + 1
    if nx > m.m.buf.0 then
        return ''
    m.m.readIx = nx
    return m.m.buf.nx
endProcedure jBufOReadO

jBufSReadO: procedure expose m.
parse arg m
    nx = m.m.readIx + 1
    if nx > m.m.buf.0 then
        return ''
    m.m.readIx = nx
    return s2o(m.m.buf.nx)
endProcedure jBufSReadO

jBufORead: procedure expose m.
parse arg m, var
    nx = m.m.readIx + 1
    if nx > m.m.buf.0 then
        return 0
    m.m.readIx = nx
    m.var = o2String(m'.BUF.'nx)
    return 1
endProcedure jBufORead

jBufSRead: procedure expose m.
parse arg m, var
    nx = m.m.readIx + 1
    if nx > m.m.buf.0 then
        return 0
    m.m.readIx = nx
    m.var = m.m.buf.nx
    return 1
endProcedure jBufRead

jBufTxtWriteO: procedure expose m.
parse arg m, ref
    if m.m.allS \== 1 then
        call err '1 \== allS' m.m.allS 'in jBufTxtWriteO('m',' ref')'
    cl = objClass(ref, '?')
    if cl = m.class.classV then
        call mAdd m'.BUF', m.ref
    else if cl == m.class.classW then
        call mAdd m'.BUF', substr(ref, 2)
    else if ref == '' then
        call mAdd m'.BUF', '@ null object'
    else if cl == '?' then
        call mAdd m'.BUF', '@'ref 'class=???'
    else do
        l = '@'ref 'class='className(cl)
        ff = oFlds(ref)
        do fx=1 to m.ff.0 while length(l) < m.m.maxl + 3
            if m.ff.fx == '' then
                 l = l', .='m.ref
            else do
                 f1 = substr(m.ff.fx, 2)
                 l = l',' f1'='m.ref.f1
                 end
            end
        if length(l) > m.m.maxl then
            l = left(l, m.m.maxl-3)'...'
        call mAdd m'.BUF', l
        end
    return
endProcedure jBufTxtWriteO

/* copy j end *********************************************************/
/* copy o begin ******************************************************
    an object is register for a class in o2c
    a class has a list of parents in cParent
    a class has a methodTable cMet with lazy initialization
        if the parent is class OLazyMet, a methof found there is
             a method generator
        otherwise an existing method is simply copied
***********************************************************************/
oIni: procedure expose m.
    if m.o.ini == 1 then
        return
    m.o.ini = 1
    call mIni
    m.o.escW = '!'
    m.o.lazyGen = 'OLazyMetGen' /* lazy method generator */
    call oAddCla m.o.lazyGen
    return
endProcedure oIni

/*--- return whether cl is a currently defined class ----------------*/
oIsCla: procedure expose m.
parse arg cl
    return symbol('m.o.cParent.cl') == 'VAR'
endProcedure oIsCla

/*--- add class cl with the given parents ---------------------------*/
oAddCla: procedure expose m.
parse arg cl, parents
    if verifId(cl, '.') > 0 | pos('.', cl) <> lastPos('.', cl) then
        call err 'bad class name' cl 'in oAddCla('cl',' parents')'
    if oIsCla(cl) then
        call err 'duplicate class' cl 'in oAddCla('cl',' parents')'
    do px=1 to words(parents)
        if \ oIsCla(word(parents, px)) then
            call err word(parents, px) 'is no class' ,
                    'in oAddCla('cl',' parents')'
        end
    m.o.cParent.cl = parents
    return
endProcedure oAddCla

/*--- add to class cl method met ------------------------------------*/
oAddMet: procedure expose m.
parse arg cl, met, cont
    if \ oIsCla(cl) then
        call err 'undefined class' cl 'in oAddMet('cl',' met',' cont')'
    if symbol('m.o.cMet.cl.met') == 'VAR' then
       call err 'duplicate method' met 'in oAddMet('cl',' met',' cont')'
    m.o.cMet.cl.met = cont
    return
endProcedure oAddMet
/*--- create an an object of the class className
        and call it's new method ------------------------------------*/
oNew: procedure expose m.
parse arg cl, arg, arg2, arg3
    if symbol('m.o.cParent.cl') \== 'VAR' then
        cl = class4name(cl)
    interpret oClaMet(cl, 'new')
endProcedure oNew

/*--- return the class of object obj --------------------------------*/
objClass: procedure expose m.
parse arg m
    if symbol('m.o.o2c.m') == 'VAR' then
         return m.o.o2c.m
    else if abbrev(m, m.o.escW) then
         return m.class.classW
    else if arg() >= 2 then
        return arg(2)
    else
        return err('no class found for object' m)
endProcedure objClass

oKindOf: procedure expose m.
parse arg obj, sup
    cl = objClass(obj, '')
    if cl == '' then
        return 0
    return oClaInheritsOf(cl, sup)
endProcedure oKindOf

oClaInheritsOf: procedure expose m.
parse arg cl, sup    /* wkTst optimierung in classAdded */
    if symbol('m.o.cParent.cl') \== 'VAR' then
         cl = class4name(cl)
    if symbol('m.o.cParent.sup') \== 'VAR' then
         sup = class4name(sup)
    if cl == sup then
        return 1
    do sx=1 to words(m.o.cParent.cl)
        if oClaInheritsOf(word(m.o.cParent.cl, sx), sup) then
            return 1
        end
    return 0
endProcedure oClaInheritsOf
/*--- return the code of method me of object m
         set m to the address and ggClass to the class ---------------*/
objMet: procedure expose m. m ggClass
parse arg m, me
    if symbol('m.o.o2c.m') == 'VAR' then
         ggClass = m.o.o2c.m
    else if abbrev(m, m.o.escW) then
         ggClass = "w"
    else if arg() >= 3 then
        return arg(3)
    else
        return err('no class found for object' m)
    if symbol('m.o.cMet.ggClass.me') == 'VAR' then
       return m.o.cMet.ggClass.me
    code = oClaMet(ggClass, me, '---')
    if code \== '---' then
        return code
    else if arg() >= 3 then
         return arg(3)
    return err('no method' me 'in class' className(ggClass) ,
               'of object' m)
endProcedure objMet

oClaMet: procedure expose m.
parse arg cl, me
    if symbol('m.o.cMet.cl.me') == 'VAR' then
       return m.o.cMet.cl.me
    if \ oIsCla(cl) then do
        c2 = class4Name(cl, '')
        if c2 \== ''  & oIsCla(c2) then do
            cl = c2
            if symbol('m.o.cMet.cl.me') == 'VAR' then
                return m.o.cMet.cl.me
            end
        else do
            if arg() >= 3 then
                return arg(3)
            else
                return err('no class' cl 'in oClaMet('cl',' me')')
            end
        end
    code = oLazyMetGen(m.o.lazyGen, cl, me)
    do px = 1 to words(m.o.cParent.cl) while code == '---'
        code = oClaMet(word(m.o.cParent.cl, px), me, '---')
        end
    if code == '---' then do
        if arg() >= 3 then
            return arg(3)
        else
            return err('no met' me 'in class' cl)
        end
    m.o.cMet.cl.me = code
    return code
endProcedure oClaMet

oLazyMetGen: procedure expose m.
parse arg lg, cl, me
    if symbol('m.o.cMet.lg.me') \== 'VAR' then
        return '---'
    interpret m.o.cMet.lg.me
endProcedure oLazyMetGen

/*--- return the stem of fieldnames of object m ---------------------*/
oFlds: procedure expose m.
parse arg m
    return objMet(m, 'oFlds')
endProcedure oFlds

/*--- return the contents of field f navigation along path ----*/
oGet: procedure expose m.
parse arg obj, path, clazz
    nullNew = 0
    ret = oAccPath(obj, path, clazz)
    if ret == 1 then
        ret = oAccStr(m, cl)
    if ret == 1 then
        return str
    return err(ret 'in oGet('obj',' path')')
endProcedure oGet

oAccStr: procedure expose m. str
parse arg m, cl
    if cl == m.class.classV then
        str = m.m
    else if m.cl.valueCl == '' then
        return 'no value @' m 'class' className(cl)
    else if m.m == '' then
        return 'null @' m 'class' className(cl)
    else if abbrev(m, m.o.escW) then
        str = substr(m ,2)
    else
        str = o2String(m.m)
    return 1
endProcedure oAccStr

oGetO: procedure expose m.
parse arg obj, path, opt, clazz
    nullNew = pos('n', opt) > 0
    ret = oAccPath(obj, path, clazz)
    if ret == 1 then
        ret = oAccO(m, cl, opt)
    if ret == 1 then
        return ref
    else
        return err(ret 'in oGetO('obj',' path')')
endProcedure oGetO

oAccO: procedure expose m. ref
parse arg m, cl, opt
    if cl == m.class.classV then do
        ref = s2o(m.m)
        end
    else if m.cl \== 'r' then do
        ref = m
        end
    else if m.m == '' then do
        if opt == '-b' then do
            m.m = jBuf()
            end
        else if opt == '-n' then do
            rsn = oRefSetNew(m, cl)
            if rsn \==1 then
               return rsn
            end
        ref = m.m
        end
    else if objClass(m.m, 0) \== 0 then do
        ref = m.m
        end
    else do
        return 'no class for' m.m '@' m 'class' cl
        end
    return 1
endProcedure oAccO

oPut: procedure expose m.
parse arg obj, path, str
    nullNew = 1
    res = oAccPath(obj, path)
    if res == 1 then
        res = ocPut(m, cl, str)
    if res == 1 then
        return str
    return err(res 'in oPut('obj',' path',' str')')
endProcedure oPut

ocPut: procedure expose m.
parse arg m, cl, str
    if m.cl.valueCl == m.class.classV then
        m.m = str
    else if m.cl.valueCl \== '' then
        m.m = s2o(str)
    else
        return 'no value @' m 'class' className(cl)
    return 1
endProcedure ocPut

oPutO: procedure expose m.
parse arg obj, path, ref
    nullNew = 1
    res = oAccPath(obj, path)
    if res == 1 then
        res = ocPutO(m, cl, ref)
    if res == 1 then
        return ref
    return err(ret 'in oPut('obj',' path',' ref')')
endProcedure oPutO

ocPutO: procedure expose m.
parse arg m, cl, ref
    if m.cl.valueCl == m.class.classV then
        m.m = o2string(ref)
    else if m.cl.valueCl \== '' then
        m.m = ref
    else if m.cl.stemCl \== '' then
        return 'implement put to stem'
    else
        return 'no value @' m 'class' className(cl)
    return 1
endProcedure ocPutO

oClear: procedure expose m.
parse arg m
    interpret objMet(m, 'oClear')
    return m
endProcedure oClear

oClaClear: procedure expose m.
parse arg cla, m
    interpret "drop cla;" oClaMet(cla, 'oClear')
    return m
endProcedure oClaClear

oAccPath: procedure expose m. m cl nullNew
parse arg m, pa, cl
    if cl == '' & m \== '' then do
        cl = objClass(m)
        end
    if pa == '' then
        return 1
    call oClaMet cl, 'oFlds'
    if abbrev(pa, m.class.cRef) ,
            | (\ m.cl.hasFlds & abbrev(pa, m.class.cNav)) then do
        if pa == m.class.cRef & m.cl.valueCl == m.class.classV then do
            cl = m.class.classV
            return 1
            end
        if (m.cl.valueCl == '' | m.cl.valueCl == m.class.classV) ,
              & m.cl \== 'r' then
            return 'no reference @' m 'class' cl
        if m.m = '' then do
            if \ nullNew then
                return 'null @' m 'class' className(cl)
            rsn = oRefSetNew(m, cl)
            if rsn \== 1 then
                return rsn
            end
        return oAccPath(m.m, substr(pa, 2))
        end
    if pos(left(pa, 1), m.class.cPath) > 0 then
        return oAccPath(m, substr(pa, 2), cl)
    px = verify(pa, m.class.cPath, 'm')
    if px < 1 then
        px = length(pa)+1
    fn = left(pa, px-1)
    pa = substr(pa, px)
    if symbol('m.cl.f2c.fn') == 'VAR' then
        return oAccPath(m'.'fn, pa, m.cl.f2c.fn)
    if m.cl.stemCl=='' | fn=='' | verify(fn, '0123456789','n')>0 then
        return 'no field' fn '@' m 'class' className(cl)
    if fn == 0 then
        return oAccPath(m'.0', pa, m.class.classV)
    if abbrev(fn, 0) | verify(m.m.0, '0123456789', 'n') > 0,
            | fn > m.m.0 then
        return 'bad stem index' fn'>'m.m.0 '@' m 'class' className(cl)
    return oAccPath(m'.'fn, pa, m.cl.stemCl)
endProcedure oAccPath

oRefSetNew: procedure expose m.
parse arg m, cl
    cr = m.cl.valueCl
    if m.cr.class = '' then
        return 'no class for null @' m 'class' className(cl)
    if m.cr.class = m.class.classW then
        m.m = o2s()
    else if m.cr \== 'r' then
        return 'class' className(cl) 'not ref'
    else
        m.m = oNew(m.cr.class)
    return 1
endProcedure oRefSetNew


/*--- mutate object m to the class cl -------------------------------*/
oMutate: procedure expose m.
parse arg m, cl
    m.o.o2c.m = cl
    return m
endProcedure oMutate

/*--- mutate object m to the class named name -----------------------*/
oMutatName: procedure expose m.
parse arg m, nm
    m.o.o2c.m = class4Name(nm)
    return m
endProcedure oMutatName

/*--- copy object m of class cl to t --------------------------------*/
oClaCopy: procedure expose m.
parse arg cl, m, t
    interpret "drop cl;" oClaMet(cl, 'oCopy')
endProcedure oClaCopy

/*--- copy object m to t / create a new object if t=='' -------------*/
oCopy: procedure expose m.
parse arg m, t
    interpret objMet(m, 'oCopy')
endProcedure oCopy

/*--- return a new instance of a subclass of Run
        with code code in method oRun -------------------------------*/
oRunner: procedure expose m.
    if arg() >= 1 then
           r = oNew(classNew('n* ORun u ORun, m oRun' arg(1)))
    else
           r = oNew(classNew('n| ORun u ORun'))
    return r
endProcedure oRunner

/*--- set code for runner -------------------------------------------*/
oRunnerCode: procedure expose m.
parse arg r, code
    call classSetMet objClass(r), 'oRun', code
    return r
endProcedure oRunnerCode

/*--- run method oRun of object m -----------------------------------*/
oRun: procedure expose m.
parse arg m, arg, arg2, arg3
    interpret objMet(m, 'oRun')
    return
endProcedure oRun

/*--- run method oRun and return output in new JBuf ------------------*/
oRun2File: procedure expose m.
parse arg rn
    b = jBuf()
    call pipe '+F' , b
    call oRun rn
    call pipe '-'
    return b
endProcedure oRun2File

/*--- cast the object to a file -------------------------------------*/
o2File: procedure expose m.
parse arg m
    interpret objMet(m, 'o2File')
    call err 'o2file did not return'
endProcedure o2File

/*--- cast the object to a String -----------------------------------*/
o2String: procedure expose m.
parse arg m, fmt
    if opt == '' then
        opt = '-b '
    interpret objMet(m, 'o2String')
    return err('o2String did not return')
endProcedure o2String

/*--- return true if object is kind of String------------------------*/
oStrOrObj: procedure expose m. ggStr ggObj ggCla
parse arg ggObj, def
    if ggObj == '' then
        ggObj = def
    ggCla = objClass(ggObj, '')

    if ggCla == '' then do
        ggStr = ggObj
        ggObj = ''
        return 1
        end
    else if wordPos(ggCla, m.class.classV m.class.classW) > 0 then do
        ggStr = o2String(ggObj)
        ggObj = ''
        return 1
        end
    else do
        ggStr = ''
        return 0
        end
endProcedure oStrOrObj

/*--- return true if object is kind of String ----- ???? -------------*/
oStrOrFile: procedure expose m. ggStr ggObj ggCla
parse arg m, def
    if oStrOrObj(m, def) then
        return 1
    ggObj = o2File(ggObj)
    return 0
endProcedure oStrOrFile

/*--- return a short string representation of an object -------------*/
o2Text: procedure expose m.
parse arg m, maxL
    if m == '' then
        return '@ null object'
    if maxL == '' then
        maxL = 80
    cl = objClass(m, '?')
    if cl = m.class.classV then
        l = m.m
    else if cl == m.class.classW then
        l = substr(m, 2)
    else if cl == '?' then
        l = '@'m 'class=???'
    else do
        l = '@'m 'class='className(cl)
        ff = oFlds(m)
        do fx=1 to m.ff.0 while length(l) < maxL + 3
            if m.ff.fx == '' then
                 l = l', .='m.m
            else do
                 f1 = substr(m.ff.fx, 2)
                 l = l',' f1'='m.m.f1
                 end
            end
        end
    if length(l) <= maxL then
        return l
    return left(l, maxL-3)'...'
endProcedure o2Text

/*--- cast a String to an object -----------------------------------*/
s2o: procedure expose m.
parse arg str
    return m.o.escW || str
    return r
endProcedure s2o

oIfStr: procedure expose m.
parse arg m
    if length(m) > 200 then
        return m
    cl = objClass(m, '')
    if cl = '' then
        return m
    else if cl = m.class.classV then
        return = m.m
    else if cl == m.class.classW then
        return = substr(m, 2)
    else if arg() >= 2 then
        return arg(2)
    else
        call err m 'of class' className(cl) 'not kind of string'
endProcedure oIfStr

/* copy o end *******************************************************/
/* copy class begin **************************************************
    a class has fields and methods,
    the class module handles only the metadata,
    object handling (instanciation, methodcalls etc.) is in O

    classes are represented by a metadata tree,
        its nodes of class class have diffenrent types:

class subTypes (implemented as choices)
    'u'    = union:    NAME -> name of class if <> '',
                    stem -> references component classes
    'f' = field:      NAME -> fieldName (x.name),
                    CLASSS -> reference to class of fieldValue
    's' = stem:     class -> ref to class at each stem element
    'c' = choice:   NAME -> selection value,
                    CLASS -> ref to class of choice
    'm' = method:    NAME -> methodName,
                    MET -> rexxCode
    'r' = reference CLASS -> ref to type at reference
special classes
    'v'    = Value     String Value
    'w'    = ValueAsA  StringValue packed into an address (prefix escW)
    'o' = AnyClass    any class with dynamic classLookup on object
formal definition, see classIni

class expression (ce) allow the following syntax
    ce = className | classAdr | 'n'('?','*','|')? name union | union
        | 'f' name ce | 's' ce | 'c' name ce | 'm' name code | r ce?
    union = 'u' (ce (',' ce)*)?

    the modifiers of 'n' means
        none:    create new class, fail if name already defined
        '?':    create new class or return old of that name
        '*':    use an exisiting class of that definition
                or create new class with a unique name
        '|':    create a new class with a unique name
    'm' extends to then end of the ce (line)
    'u' allows several components, in classNew also multiple args
                Achtung, aber NICHT rekursiv|
***********************************************************************/
classIni: procedure expose m.
    if m.class.ini == 1 then
        return
    m.class.ini = 1
    m.class.in2 = 0
    call oIni
    call mapIni
    call mNewArea 'CLASS', 'CLASS'
    call mapReset 'CLASS.N2C'  /* name to class */
    m.class.classV = classBasicNew('u', 'v')
    m.class.classW = classBasicNew('u', 'w')
    m.class.classO = classBasicNew('u', 'o')

    m.class.class = classNew('n class u v',
            , 'c u u f NAME v, s r class',
            , 'c f u f NAME v, f CLASS r class',
            , 'c s f CLASS r class' ,
            , 'c c u f NAME v, f CLASS r class',
            , 'c m u f NAME v, f MET  v' ,
            , 'c r f CLASS r class' )
    m.class.cNav = '.'
    m.class.cRef = '|'
    m.class.cDot = '%'
    m.class.cPath = m.class.cNav || m.class.cRef || m.class.cDot
    m.class.classR = classNew('r')
    m.class.basicNew = "oMutate(mNew(cl), cl)"
    call oAddMet m.o.lazyGen, 'new', "return classGenNew(cl, me)"
    call oAddMet m.o.lazyGen,'oClear',"return classGenClear(cl, me)"
    call oAddMet m.o.lazyGen,'oFlds',"return classGenFlds(cl, me)"
    call oAddMet m.o.lazyGen, 'oCopy', "return classGenCopy(cl, me)"

    cr = mIterBegin('CLASS')
    do while assNN('cr', mIter(cr))
        call classFinish cr
        call oClaMet cr, 'oFlds' /* generate flds */
        end
    m.class.in2 = 1

    call oAddMet m.class.classV, 'oCopy', "return oCopyV(m, t)"
    call classAddMet m.class.classV, 'o2String return m.m'
    call classAddMet m.class.classW, 'o2String return substr(m, 2)'
    call classNew 'n ORun u',
         , 'm oRun call err "call of abstract method oRun"',
         , 'm o2File return oRun2File(m)',
         , 'm o2String return jCatLines(oRun2File(m), fmt)'

    return
endProcedure classIni


/*--- return the name of a class if it exists otherwise the class ---*/
className: procedure expose m.
parse arg cl
    if m.cl = 'u' & m.cl.name \= '' then
        return m.cl.name
    else
        return cl
endProcedure className

/*--- return class of given name or class ---------------------------*/
class4Name: procedure expose m.
parse arg nm
    if symbol('m.class.n2c.nm') == 'VAR' then
        return m.class.n2c.nm
    if arg() > 1 then
        return arg(2)
    call err 'no class' nm
endProcedure class4Name

classBasicNew: procedure expose m.
parse arg ty, nm, cl, nmTy
    n = mNew('CLASS')
    m.n = ty
    m.n.name = nm
    m.n.nameComp = nm
    if ty == 'u' & nm \== '' then do
        if pos(nmTy, '*|') > 0 then do
            m.n.name = nm || substr(n, 1+lastPos('.', n))
            if nmTy == '*' then
                m.n.nameComp = nm'*'
            else
                m.n.nameComp = m.n.name
            end
        call mapAdd class.n2c, m.n.name, n
        end
    call mapAdd class.n2c, n, n
    m.n.class = ''
    m.n.met = ''
    m.n.0 = 0
    if length(ty) \== 1 | pos(ty, 'ufscrm') < 1 then
        call err 'bad type' ty': classBasicNew('ty',' nm',' cl')'
    else if nm == '' & pos(ty, 'fm') > 0 then
        call err 'empty name: classBasicNew('ty',' nm',' cl')'
    else if nm \== '' & ty \== 'c' & verifId(nm) > 0 then
        call err 'bad name' nm': classBasicNew('ty',' nm',' cl')'
    else if nm \= '' & pos(ty, 'rs') > 0 then
        call err 'name for type' ty': classBasicNew('ty',' nm',' cl')'
    else if pos(ty, 'fcrs') > 0 then do
        if cl \== '' then
            m.n.class = mapGet(class.n2c, cl)
        else if ty == 'r' then
            m.n.class = m.class.classO
  /*    else say 'cl leer' ty nm nmTy   ???????*/
        end
    else if ty == 'm' then
        m.n.met = cl
    else if cl \== '' then
        call err 'class for type' ty': classBasicNew('ty',' nm',' cl')'
    return n
endProcedure classBasicNew


classNew: procedure expose m.
parse arg clEx 1 ty rest
    if abbrev(ty, 'n') then do
        if wordPos(ty, 'n n? n* n|') < 1 then
            call err 'bad type' ty': classNew('clEx')'
        nmTy = right(ty, 1)
        parse var rest nm ty rest
        if ty \== 'u' then
            call err 'class name' nm 'without u: classNew('clEx')'
        if nmTy == 'n' then do
             if mapHasKey(class.n2c, nm) then
                call err 'class' nm 'already defined: classNew('clEx')'
            end
        else if nmTy == '?' then do
            if mapHasKey(class.n2c, nm) then
                return mapGet(class.n2c, nm)
            end
        else if nmTy == '*' then do
            if arg() \== 1 then
                call err 'arg()='arg() 'for n* : classNew('clEx')'
            if mapHasKey(class.n2c, clEx) then
                return mapGet(class.n2c, clEx)
            end
        n = classBasicNew('u', nm, , nmTy)
        end
    else do
        nmTy = ''
        if arg() \== 1 then
            call err 'arg()='arg() 'without name: classNew('clEx')'
        if mapHasKey(class.n2c, clEx) then
               return mapGet(class.n2c, clEx)
        if length(ty) <> 1 | pos(ty, 'ufscmr') < 1 then
            call err 'bad type' ty': classNew('clEx')'
        nm = ''
        if pos(ty, 'usr') < 1 then
            parse var rest nm rest
        if ty = 'u'  then do
            n = classBasicNew(ty)
            end
        else if    ty = 'm' then do
            n = classBasicNew(ty, nm, rest)
            rest = ''
            end
        else do
            parse var rest t1 rest
            if wordPos(t1, 'u f s c m r') > 0 then do
                n = classBasicNew(ty, nm)
                m.n.class = classNew(t1 rest)
                rest = ''
                end
            else do
                n = classBasicNew(ty, nm, t1)
                end
            end
        end
    if ty \== 'u' then do
        if rest \== '' then
            call err 'rest' rest 'but end of classExp expected:' clEx
        end
    else do
        lx = 0
        do while lx < length(rest)
            cx = pos(',', rest, lx+1)
            if cx <= lx | word(substr(rest, lx+1), 1) == 'm' then
                cx = length(rest)+1
            a = mAdd(n, classNew(strip(substr(rest, lx+1, cx-lx-1))))
            lx=cx
            end
        pref = ''
        do ax=2 to arg()
            if length(arg(ax)) == 1 & arg(ax) \== ' ' then
                pref = arg(ax)' '
            else
                call mAdd n, classNew(pref || arg(ax))
            end
        end
    cr = mIterBegin('CLASS')
    do while assNN('cr', mIter(cr)) & \ classEqual(n, cr)
        end
    isNew = cr == n
    if \ isNew then do
        if mapRemove(class.n2c, n) \== n then
            call err 'mapRemove('n') mismatch'
        if m.n == 'u' & m.n.name \== '' then
            if mapRemove(class.n2c, m.n.name) \== n then
                call err 'mapRemove('m.n.name') mismatch'
        call mFree n
        n = cr
        end
    if isNew & m.class.in2 then
        call classFinish n
    if nmTy == '' | nmTy == '*' then
        call mapAdd class.n2c, clEx, n
    return n
endProcedure classNew

/*--- to the finish for new class cl -------------------------------*/
classFinish: procedure expose m.
parse arg cl, force
    call oMutate cl, m.class.class
                        /* find super and sub classes */
    m.cl.sub = ''
    sups = ''
    do ux=1 to m.cl.0
        u1 = m.cl.ux
        if m.u1 \== 'u' then
            iterate
        if wordPos(u1, sups) > 0 then
            call err u1 'already in sups' sups': classSuperSub('cl')'
        sups = sups u1
        if wordPos(m.cl.SUB, cl) > 0 | symbol('m.u1.sub') \== 'VAR' then
            call err cl 'is already in' u1'.sub' u1.SUB  ,
                || ': classSuperSub('cl')'
        m.u1.sub = strip(m.u1.sub cl)
        end
    m.cl.super = sups
                        /* add class to o */
    call oAddCla cl, sups
    if pos(m.cl, 'mfrsv') < 1 then do
        allMets = ''
        forceMets = ''
        do cx=1 to m.cl.0
            ch = m.cl.cx
            if m.ch == 'm' then do
                call oAddMet cl, m.ch.name, m.ch.met
                allMets = allMets m.ch.name
                end
            else if symbol('m.class.forceDown.ch') == 'VAR' then
                forceMets = forceMets m.class.forceDown.ch
            end
        myForce = ''
        do fx=1 to words(forceMets)
            parse value word(forceMets, fx) with fCla '#' fMet
            if wordPos(fMet, allMets) < 1 then do
                call oAddMet cl, fMet, m.o.cMet.fCla.fMet
                myForce = myForce cl'#'fMet
                allMets = allMets fMet
                end
            end
        if myForce \== '' then
            m.class.forceDown.cl = strip(myForce)
        end
    if cl == m.class.class then
        call mAlias 'CLASS', cl
    else  /* object addresses */
        call mNewArea cl, 'O.'substr(cl,7)
    if m.cl \== 'u' | m.cl.name == '' then
        return
    call mAlias cl, m.cl.name
    return
endProcedure classFinish

classAddMet: procedure expose m.
parse arg clNm, met code
    cl = class4Name(clNm)
    if pos(m.cl, 'uvw') < 1 then
        call err 'class not nvw but' m.cl,
            'in classAdd1Method('clNm',' met code')'
    call mAdd cl, classNew('m' met code)
    call oAddMet cl, met, code
    return cl
endProcedure classAddMet
/*--- return true iff the two classes are equal -------------------*/
classEqual: procedure expose m.
parse arg l, r
    if m.l \== m.r | m.l.nameComp \== m.r.nameComp ,
            | m.l.class \== m.r.class | m.l.0 \== m.r.0  then
        return 0
    if m.l.met \== m.r.met  then
        return 0
    do sx=1 to m.l.0
        if m.l.sx \== m.r.sx then
            return 0
        end
    return 1
endProcedure classEqual

classGenNew: procedure expose m.
parse arg cl, met
     return  "m=" m.class.basicNew";" oClaMet(cl, 'oClear') ";" ,
             "return m"
endProcedure classGenNew

classGenFlds: procedure expose m.
parse arg cl, met
    m.cl.flds.0 = 0
    m.cl.stms.0 = 0
    m.cl.stemCl = ''
    m.cl.valueCl = ''
    call classGenFldsAdd cl, cl
    m.cl.hasFlds = m.cl.flds.0 > 1 ,
        | (m.cl.flds.0 == 1 & m.cl.flds.1 \== '') | m.cl.stms.0 > 0
    return cl'.FLDS'
endProcedure classGenFlds

/*--- add the the fields of class cl to stem f ----------------------*/
classGenFldsAdd: procedure expose m.
parse arg f, cl, nm
    n1 = substr(nm, 1+abbrev(nm, '.') )
    if symbol('m.f.f2c.n1') \== 'VAR' then
        m.f.f2c.n1 = cl
    if cl == m.class.classV | cl == m.class.classW | m.cl=='r' then do
        if nm == '' then do
            if m.f.valueCl \== '' then
                return  err('value mistmatch')
            m.f.valueCl = cl
            end
        if nm == '' then do
             call mMove f'.FLDS', 1, 2
             m.f.flds.1 = ''
             end
        else do
            call mAdd f'.FLDS', nm
            end
        return 0
        end
    if m.cl = 's' then do
        if m.cl.class == '' then
            call err 'stem null class'
        a1 = mAdd(f'.STMS', nm)
        m.a1.class = m.cl.class
        if nm == '' then
            m.f.stemCl = m.cl.class
        return 0
        end
    if m.cl = 'f' then
        return classGenFldsAdd(f, m.cl.class, nm'.'m.cl.name)
    if m.cl.class \== '' then
        return classGenFldsAdd(f, m.cl.class, nm)
    do tx=1 to m.cl.0
        call classGenFldsAdd f, m.cl.tx, nm
        end
    return 0
endProcedure classGenFldsAdd

classGenClear: procedure expose m.
parse arg cl, met
    r = ''
    call oClaMet cl, 'oFlds'
    do fx=1 to m.cl.flds.0
        f1 = m.cl.flds.fx
        if f1 == '' then
            c1 = cl
        else do
            c1 = substr(f1, 2)
            c1 = m.cl.f2c.c1
            end
        if c1 == m.class.classW then
            r = r classGenStmt(f1, "m.m~ = '"m.o.escW"';")
        else
            r = r classGenStmt(f1,  "m.m~ = '';")
        end
    do sx=1 to m.cl.stms.0
        r = r classGenStmt(m.cl.stms.sx, "m.m~.0 = 0;")
        end
    return r
endProcedure classGenClear

classGenStmt: procedure expose m.
parse arg f, st, resWo
    isNice = translate(f) == f
    resWo = translate(resWo) 'GGFF M'
    fDod = '.'f'.'
    do wx=1 to words(resWo) while isNice
        isNice = pos('.'word(resWo, wx)'.', fDot) < 1
        end
    if isNice then
        return repAll(st, '~', f)
    else
        return "ggFF = '"substr(f, 2)"';" repAll(st, '~', '.ggFF')
endProceduer classGenAss

classGenCopy: procedure expose m.
parse arg cl, me
    r = repAll("if t == '' then t =" m.class.basicNew ";" ,
               "else call oMutate t, cl;", 'cl', "'"cl"'")
    ff = oClaMet(cl, 'oFlds')            /* build code for copy */
    do fx=1 to m.cl.flds.0
        r = r classGenStmt(m.cl.flds.fx, 'm.t~ = m.m~;', 't')
        end
    do fx=1 to m.cl.stms.0
        nm = m.cl.stms.fx
        sc = m.cl.stms.fx.class
        if nm == '' then
            st = ''
        else do
            r = r "st = '"substr(nm, 2)"';"
            st = '.st'
            end
        r = r "m.t"st".0 = m.m"st".0;" ,
               "do sx=1 to m.m"st".0;" ,
                 "call oClaCopy '"sc"', m"st".sx, t"st".sx; end;"
        end
    return r 'return t;'
endProcedure classGenCopy

/*--- oCopy for classW ----------------------------------------------*/
oCopyW: procedure expose m.
trace ?r
parse arg m, t
    if t == '' then
        return m
    m.t = o2String(m)
    return oMutate(t, m.class.classV)
endProcedure oCopyW
/*--- print object ---------------------------------------------------*/
objOut: procedure expose m.
parse arg m, pr, p1
   c = objClass(m, '')
   if c == '' then
       call out p1 'no class for' m
   else if c == m.class.classV then
       call out p1 || m.m
   else if c == m.class.classW then
       call out p1 || o2String(m)
   else
       call classOutDone c, m, pr, p1
   return
endProcedure objOut

/*--- recursively output (with out:) the object a with class t -------*/
classOut: procedure expose m.
parse arg t, a, pr, p1
    return classOutDone(if(t=='',m.class.classO, t), a, pr, p1)
endProcedure classOut

/*--- ouput object a with class t and stopper done ------------------*/
classOutDone: procedure expose m. done.
parse arg t, a, pr, p1
    if p1 == '' then
        p1 = pr
    if right(p1, 1) \== ' ' then
        p1 = p1' '
    if done.ini \== 1 then do
        done.ini = 1
        t = class4Name(t, t)
        p1 = p1'@'a' '
        end
    if done.t.a == 1 then
        return out(p1'done :'className(t) '@'a)
    done.t.a = 1
    if t = m.class.classO then do
        if a == '' then
            return out(p1'obj null')
        t = objClass(a, '')
        if t = '' then
            return out(p1'obj has no class @'m.a)
        else
            return classOutDone(t, a, pr, p1'isA')
        end

    if t == m.class.classV then
        return out(p1'=' m.a)
    if t == m.class.classW == 'w' then
        return out(p1'}' substr(a, 2))
    if m.t == 'f' then
        return classOutDone(m.t.class, a'.'m.t.name, pr, p1'.'m.t.name)
    if m.t == 'r' then do
        if m.a == '' then
            return out(p1'refTo :'className(m.t.class) '@null@')
        else
            return classOutDone(m.t.class, m.a, pr,
                    , p1'refTo @'m.a)
        end
    if m.t = 'u' then do
        t1 = m.t.1
        vv = m.t.0 > 0 & m.t.1 == m.class.classV
        call out p1 || if(m.t.name == '', 'union', ':'m.t.name) ,
             || copies(' =' m.a, vv)
        do ux=1+vv to m.t.0
            call classOutDone m.t.ux, a, pr' '
            end
        return 0
        end
    if m.t = 's' then do
        call out p1'stem' m.a.0
        do ux=1 to m.a.0
            call classOutDone m.t.class, a'.'ux, pr' ', pr' .'ux
            end
        return 0
        end
    if m.t = 'c' then do
        if m.t.name = m.a then
            call classOutDone m.t.class, a, pr, p1'choice' m.a
        return 0
        end
    if m.t = 'm' then
        return 0
    return err('bad class type' m.t)
endProcedure classOutDone
/* copy class end   ***************************************************/
/* copy map begin ******************************************************
    a map stores values at keys
    it may also maintain a list of keys
    the basic ideas are similar to the java Interface java.util.Map
    contrary to stems we also handle keys longer then 250 bytes
***********************************************************************/
/*--- initialize the module ------------------------------------------*/
mapIni: procedure expose m.
    if m.map.ini = 1 then
        return
    m.map.ini = 1
    call mIni
    m.map.0 = 0
    m.map.inlineSearch = 1
    call mapReset map.inlineName, map.inline
    return
endProcedure mapIni

mapInline: procedure expose m.
parse arg pName, opt
    if mapHasKey(map.inlineName, pName) then do
        im = mapGet(map.inlineName, pName)
        if pos('l', opt) < 1 & symbol('m.im.0') \== 'VAR' then do
            m.im.0 =  m.im.lEnd - m.im.lBegin - 1
            do ix=1 to m.im.0
                m.im.ix = strip(sourceline(ix+m.im.lBegin), 't')
                end
            end
        return im
        end
    name = '/'
    do lx = m.map.inlineSearch to sourceline()
        if \ abbrev(sourceline(lx), '$') then
            iterate
        li = sourceline(lx)
        s1 = pos('/', li)+ 1
        if s1 < 3 | s1 > 4 then
            iterate
        s2 = pos('/', li, s1)
        if s2 <= s1 then
            iterate
        if s1 == 3 then do
            if name \== substr(li, s1, s2-s1) then
                iterate
            im = 'MAP.INLINE.' || (m.map.inline.0+1)
            call mapAdd map.inlineName, name, im
            m.im.lBegin = lBeg
            m.im.lEnd = lx
            m.im.mark = mrk
            if name == pName then do
                m.map.inlineSearch = lx+1
                return mapInline(pName)
                end
            name = '/'
            end
        else if \ mapHasKey(map.inlineName,
                , substr(li, s1, s2-s1)) then do
            lBeg = lx
            mrk = substr(li, 2, s1-3)
            name = substr(li, s1, s2-s1)
            end
        else do
            name = '/'
            end
        end
    if pos('r', opt) > 0 then
        return ''
    return err('no inline data /'pName'/ found')
endProcedure mapInline

/*--- create a new map ----------------------------------------------*/
mapNew: procedure expose m.
parse arg opt
    m.map.0 = m.map.0 + 1
    return mapReset('MAP.'m.map.0 , opt)
endProcedure mapNew

/*--- make an empty map, if opt <> '' maintain stem of keys
                ('K' in map.keys, '=' in a else in opt) --------------*/
mapReset: procedure expose m.
    parse arg a, opt
    if symbol('m.map.keys.a') == 'VAR' then
        call mapClear a
    if opt = '=' then
        st = a
    else if translate(opt) = 'K' then
        st = 'MAP.KEYS.'a
    else
        st = opt
    m.map.keys.a = st
    if st \== '' then
        m.st.0 = 0
    return a
endProcedure

/*--- add a new key value pair to the map ----------------------------*/
mapAdd: procedure expose m.
parse arg a, ky, val
    vv = mapValAdr(a, ky, 'a')
    m.vv = val
    return val
endProcedure mapAdd

/*--- change the value at a key or add key value ---------------------*/
mapPut: procedure expose m.
parse arg a, ky, val
    vv = mapValAdr(a, ky, 'p')
    m.vv = val
    return val
endProcedure mapPut

/*--- return 1 if key ky exists in map a, 0 otherwise ----------------*/
mapHasKey: procedure expose m.
parse arg a, ky
    return mapValAdr(a, ky) \== ''
endProcedure mapHasKey

/*--- return the value of key ky in map a if it exists,
          else if called with a third argument return third argument
          else issue an error ----------------------------------------*/
mapGet: procedure expose m.
parse arg a, ky
    vv =  mapValAdr(a, ky)
    if vv \== '' then
        return m.vv
    else if arg() > 2 then
        return arg(3)
    else
        return err('missing key in mapGet('a',' ky')')
endProcedure mapGet

/*--- return a stem of all keys --------------------------------------*/
mapKeys: procedure expose m.
parse arg a
    if m.map.keys.a == '' then
        call err 'mapKeys('a') with no keys'
     return m.map.keys.a
endProcedure mapKeys

/*--- remove a key from the map, do nothing if it is missing ---------*/
mapRemove: procedure expose m.
parse arg a, ky
    vv = mapValAdr(a, ky)
    if vv == '' then
        return ''
    if m.map.keys.a \== '' then do
        trace ?R /* not tested yet ???wkTest */
        k = m.map.keys.a
        mx = m.k.0
        do i=1 to mx
            if m.k.i == ky then do
                m.k.i = m.k.mx
                m.k.0 = mx - 1
                return
                end
            end
        end
    val = m.vv
    drop m.a.ky
    return val
endProcedure mapRemove

/*--- remove all entries ---------------------------------------------*/
mapClear: procedure expose m.
parse arg a
    st = mapKeys(a)
    liLe = 243 - length(a)
    do kx=1 to m.st.0
        ky = m.st.kx
        drop m.st.kx
        if length(ky) <= liLe then do
            drop m.a.ky
            end
        else do
            adr = mapValAdr(a, ky)
            if adr \== '' then do
                ha = left(adr, lastPos('.', adr) - 3)
                do i = 1 to m.ha.k.0
                     drop m.ha.k.i m.ha.v.i
                     end
                 drop m.ha.k.0
                 end
            end
        end
    m.st.0 = 0
    return a
endProcedure mapClear

/*--- return the value pointer for a key, '' if non existing
             with fun = 'a' add a key, with 'p' put a key ------------*/
mapValAdr: procedure expose m.
parse arg a, ky, fun
    if length(ky) + length(a) <= 243 then do
        res = a'.'ky
         if symbol('m.res') == 'VAR' then do
            if fun == 'a' then
                call err 'duplicate key' ky 'in map' a
            return res
            end
        else if fun == '' then
            return ''
        end
    else do
        len = 243 - length(a)
        q = len % 4
        ha = a'.'left(ky, len - 2 * q) || substr(ky,
            , (length(ky)-len) % 2 + 2 * q, q) || right(ky, q)
        if symbol('M.ha.k.0') == 'VAR' then do
            do i=1 to m.ha.k.0
                if m.ha.k.i == ky then do
                    if fun == 'a' then
                        call err 'duplicate key' ky ,
                            'map' a 'hash' ha'.K.'i
                    return ha'.V.'i
                    end
                end
            end
        else do
            i = 1
            end
        if fun == '' then
            return ''
        if i > 9 then
            call err 'overflow long key' y 'in map' a 'hash' ha'.K.'i
        m.ha.k.0 = i
        m.ha.k.i = ky
        res = ha'.V.'i
        end
    if m.map.keys.a \== '' then
        call mAdd m.map.Keys.a, ky
    m.res = ''
    return res
endProcedure mapValAdr

/* copy map end *******************************************************/
/* copy mapExp begin **************************************************/
mapVia: procedure expose m.
parse arg a, ky
    sx = pos('|', ky)
    if sx < 1 then
        return mapGet(a, ky)
    via = mapGet(a, left(ky, sx-1))
    do while sx <= length(ky)
        fx = sx+1
        sx = pos('|', ky, fx)
        if sx < 1 then
            sx = length(ky) + 1
        if sx = fx then do
            if symbol('m.via') \== 'VAR' then
                call err 'missing m.'via 'at' sx 'in mapVia('a',' ky')'
            via = m.via
            end
        else do
            f = substr(ky, fx, sx - fx)
            if symbol('m.via.f') \== 'VAR' then
                call err 'missing m.'via'.'f ,
                     'at' sx 'in mapVia('a',' ky')'
            via = m.via.f
            end
        end
    return via
endProcedure mapVia

mapExpAt: procedure expose m.
parse arg a, src, sx
    m.map.ExpAt = 0
    cx = pos('$', src, sx)
    if cx < 1 then
        return substr(src, sx)
    res = substr(src, sx, cx-sx)
    do forever
        if substr(src, cx+1, 1) = '{' then do
            ex = pos('}', src, cx+2)
            if ex < 1 then
                call err 'missing } after' substr(src, cx) 'in' src
            res = res || mapVia(a, strip(substr(src, cx+2, ex-cx-2)))
            ex = ex + 1
            end
        else do
            ex = verify(src, m.ut.alfDot, 'n', cx+1)
            if ex < 1 then
                return res || mapVia(a, substr(src, cx+1))
            if ex = cx+1 then do
                m.map.ExpAt = cx
                return res
                end
            res = res || mapVia(a, substr(src, cx+1, ex-cx-1))
            end
        cx = pos('$', src, ex)
        if cx < 1 then
            return res || substr(src, ex)
        res = res || substr(src, ex, cx-ex)
        end
endProcedure mapExpAt

mapExp: procedure expose m.
parse arg a, src
    res = mapExpAt(a, src, 1)
    if m.map.ExpAt \== 0 then
        call err 'mapExp stopped at' substr(src, map.ExpAt) 'in' src
    return res
endProcedure mapExp

mapExpAllAt: procedure expose m.
parse arg a, dst, src, sx, cx
    do while sx <= m.src.0
        li = mapExpAt(a, m.src.sx, cx)
        dx = m.map.ExpAt
        if (cx=1 & dx = 0) | li \= '' then
            call mAdd dst, li
        if dx = 0 then do
            cx = 1
            sx = sx+1
            end
        else do
            return sx dx
            end
        end
    return ''
endProcedure mapExpAllAt

mapExpAll: procedure expose m.
parse arg a, dst, src
    sto = mapExpAllAt(a, dst, src, 1, 1)
    if sto == '' then
         return
    lx = word(sto, 1)
    call err 'mapExpAll stopped at' sto':' m.src.lx
endProcedure mapExpAll
/* copy mapExp end ****************************************************/
/* copy m begin ********************************************************
  we use variables as follows
    m. stem m: all global data and object data that must survive
               a procedure call  (m for memory in Memoria of B5000)
        m.<mbr>.** to avoid conflicts: every rexx Module (copy) should
               only allocate addresses m.<mbr>.** with <mbr> the name of
               the rexx module
        we pass parameters around (e.g. a=address, m=memory, st=stem)
            and the called function may use m.a or m.a.subField etc.
    gg*: local variable in subroutines without procedure
    everything else: temporary data within procedure

  every subroutine is declared as procedure expose m.
        (also if no m. variable is used, because e.g. of error handling)
  the few subroutines that cannot use procedure, should use only
        variables starting with gg
***********************************************************************/
/*---make an area -----*/

mNewArea: procedure expose m.
parse arg nm, adr
    m.m.area.0 = m.m.area.0 + 1
    a = 'M.AREA.'m.m.area.0
    if adr == '=' then
        adr = nm
    else if adr == '' then
        adr = 'M.'m.m.area.0
    if symbol('m.m.n2a.adr') == 'VAR' then
        call err 'adr' adr 'for area' nm 'already used'
    m.m.n2a.adr = a
    call mAlias adr, nm
    m.m.p2a.adr = a

    m.a.0 = 0
    m.a.free.0 = 0
    m.a.address = adr
    return nm
endProcedure mNewArea

mAlias: procedure expose m.
parse arg oldNa, newNa
    if symbol('m.m.n2a.oldNa') \== 'VAR' then
        call err 'area' oldNa 'does not exist'
    if oldNa == newNa then
        return
    if symbol('m.m.n2a.newNa') == 'VAR' then
        call err 'newName' newNa 'for old' oldNa 'already used'
    m.m.n2a.newNa = m.m.n2a.oldNa
    return
endProcedure mAlias

mNew: procedure expose m. ggArea
parse arg name
    if symbol('m.m.n2a.name') \== 'VAR' then
        call err 'area' name 'does not exists'
    ggArea = m.m.n2a.name
    if m.ggArea.free.0 > 0 then do
        fx = m.ggArea.free.0
        m.ggArea.free.0 = fx-1
        m = m.ggArea.free.fx
        end
    else do
        m.ggArea.0 = m.ggArea.0 + 1
        m = m.ggArea.address'.'m.ggArea.0
        end
    return m
endProcedure mNew

mFree: procedure expose m.
parse arg m
    p = 'M.P2A.'left(m, lastPos('.', m)-1)
    area = m.p
    fx = m.area.free.0 + 1
    m.area.free.0 = fx
    m.area.free.fx = m
    return
endProcedure mFree
/*--- iterate over all allocate elements of an area ------------------*/
mIterBegin: procedure expose m.
parse arg nm
    a = m.m.n2a.nm
    return m.a.address'.0'
endProcedure mIterBegin

mIter: procedure expose m.
parse arg cur
    if cur == '' then
        return ''
    lx = lastPos('.', cur)
    p = 'M.P2A.'left(cur, lx-1)
    a = m.p
    ix = substr(cur, lx+1)
    do ix=ix+1 to m.a.0
        n = m.a.address'.'ix
        do fx=1 to m.a.free.0 while m.a.free \== n
            end
        if fx > m.a.free.0 then
            return n
        end
    return ''
endProcedure mIter

/*--- get m.a --------------------------------------------------------*/
mGet: procedure expose m.
parse arg a
    return m.a
endProcedure mGet

/*--- put value v into m.a -------------------------------------------*/
mPut: procedure expose m.
parse arg a, v
    m.a = v
    return
endProcedure mPut

/*--- cut stem a to length len ---------------------------------------*/
mCut: procedure expose m.
parse arg a, len
    m.a.0 = len
    return a
endProcedure mCut

/*--- add one or several arguments to stem m.a -----------------------*/
mAdd: procedure expose m.
parse arg a
    ix = m.a.0
    do ax = 2 to arg()
        ix = ix + 1
        m.a.ix = arg(ax)
        end
    m.a.0 = ix
    return a'.'ix
endProcedure mAdd

/*--- pop last element from stem m.a ---------------------------------*/
mPop: procedure expose m.
parse arg a
    ix = m.a.0
    if ix < 1 then
        call err 'pop from empty stem' a
    m.a.0 = ix-1
    return m.a.ix
endProcedure mPop

/*--- add to m.dst.* a (sub)sequence of m.src.* ----------------------*/
mAddSt: procedure expose m.
    parse arg dst, src, fx , tx
    dx = m.dst.0
    if fx == '' then
        fx = 1
    if tx == '' then
        tx = m.src.0
    do sx = fx to tx
        dx = dx + 1
        m.dst.dx = m.src.sx
        end
    m.dst.0 = dx
    return
endProcedure mAddSt

/*--- find position of first occurrence of ele in stem m,
        return 0 if nonemove a part of a stem -----------------------*/
mPos: procedure expose m.
parse arg m, ele, sx
    if sx == '' then
        sx = 1
    do x=sx to m.m.0
        if m.m.x = ele then
            return x
        end
    return 0
endProcedure mPos

/*--- move a part of a stem ------------------------------------------*/
mMove: procedure expose m.
parse arg m, sx, dx
    if dx < sx then do
        y = dx
        do x=sx to m.m.0
            m.m.y = m.m.x
            y = y + 1
            end
        end
    else if dx > sx then do
        y = m.m.0 + dx - sx
        do x=m.m.0 by -1 to sx
            m.m.y = m.m.x
            y = y - 1
            end
        end
    m.m.0 = m.m.0 + dx - sx
    return
endProcedure mMove

/*--- insert a stem into another ------------------------------------*/
mInsert: procedure expose m.
parse arg m, tx, st
    call mMove m, tx, tx+m.st.0
    do sx=1 to m.st.0
        dx = tx-1+sx
            m.m.dx = m.st.sx
            end
    return
endProcedure mInsert

/*--- strip all elements of a stem -----------------------------------*/
mStrip: procedure expose m.
parse arg st, opt
    if opt == '' then
        opt = 'b'
    do x=1 to m.st.0
        m.st.x = strip(m.st.x, opt)
        end
    return st
endProcedure mStrip


/* cat the lines of a stem, possibly repeated --------------------------
       args: stem, fmt see fGen: -------------------------------------*/
mCat: procedure expose m.
parse arg st, fmt
    return mCatFT(st, 1, m.st.0, fmt)

mCatFT: procedure expose m.
parse arg st, fx, tx, fmt
    if tx < fx then
        return ''
    fmt = '%s%qn%s%qe%q^'fmt
    res = f(fmt, m.st.fx)
    do sx=fx+1 to tx
        res = res || f(fmt'%Qn', m.st.sx)
        end
    return res || f(fmt'%Qe')
endProcedure mCatFT

mIni: procedure expose m.
    if m.m.ini == 1 then
        return
    m.m.ini = 1
    call utIni
    m.mBase64 = m.ut.alfUC || m.ut.alfLc || m.ut.digits'+-'
    m.m.area.0 = 0
    call mNewArea
    return
endProcedure mIni

/* copy m end *********************************************************/
/* copy adrIsp begin *************************************************/
/**********************************************************************
    lmd: catalog read
    call sequence: lmdBegin, lmdNext*, lmdEnd
        mit lmd service (mit save in file und read,
                         weil list zu langsam und listcat abstürzt)
        1. arg (grp)     als group dataset für lmd save
                         und dd name für file read
***********************************************************************/
lmdBegin: procedure expose m.
    parse arg grp, lev
    call adrIsp 'lmdinit listid(lmdId) level('lev')'
    res = adrIsp('lmdlist listid(&lmdId) option(save) group('grp')', 4)
    call adrIsp 'lmdfree listid(&lmdId)'
    if res = 0 then do
        call trc timing() 'lmdlist save' grp lev
        call adrTso 'alloc dd('grp') shr dsn('grp'.datasets)'
        end
    else do
        call trc 'no datasets found' timing() 'lmdlist save' grp lev
        call adrTso 'alloc dd('grp') dummy'
        end
    call tsoOpen grp, 'R'
return /* end lmdBegin */

lmdNext:
    parse arg ggGrp, ggSt, withVolume
    if \ readDD(ggGrp, ggSt) then
         return 0
    if withVolume \== 1 then
        do ggIx=1 to value(ggSt'0')
            x = value(ggSt || ggIx, word(value(ggSt || ggIx), 1))
            end
    return 1
endSubroutin lmdNext

lmdEnd: procedure expose m.
    parse arg grp
    call tsoClose grp
    call adrTso 'free dd('grp')'
return /* end lmdEnd */

lmd: procedure expose m.
    parse arg lev, withVol
    call lmdBegin gg1, lev
    do while lmdNext(gg1, q., withVol)
        do x=1 to q.0
           call out q.x
           end
        end
    call lmdEnd gg1
    return
endProcedure lmd
/**********************************************************************
    member list of a pds:
        call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmm: procedure expose m.
parse arg dsn
    id = lmmBegin(dsn)
    do ix=1 by 1
        m = lmmNext(id)
        if m = '' then
            leave
        call out m
        end
    call lmmEnd id
    return
endProcedure lmm

lmmBegin: procedure expose m.
parse arg dsn
    mbr = dsnGetMbr(dsn)
    pds = dsnSetMbr(dsn, )
    call adrIsp "LMINIT DATAID(lmmId) DATASET('"pds"') ENQ(SHRW)"
    call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
    res = lmmId
    if mbr <> '' then
        res = res 'pattern('mbr')'
    return res
endProcedure lmmBegin

lmmEnd: procedure expose m.
parse arg lmmId opt
    call adrIsp "LMMLIST DATAID("lmmId") option(free)", 8
    call adrIsp "LMCLOSE DATAID("lmmId")"
    call adrIsp "LMFREE DATAID("lmmId")"
    return
endProcedure lmmEnd

lmmNext: procedure expose m.
parse arg lmmId opt
    if adrIsp("LMMLIST DATAID("lmmid")" ,
               "OPTION(LIST) MEMBER(Mbr)" opt, 4 8) = 0 then
        return strip(mbr)
    else
        return ''
endProcedure lmmNext

lmmRm: procedure expose m.
parse arg dsn, mbrs
    mbrs = dsnGetMbr(dsn) mbrs
    pds = dsnSetMbr(dsn, )
    call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
    call adrIsp "LMOPEN DATAID("lmmId") OPTION(OUTPUT) "
    err = ''
    do wx=1 to words(mbrs)
        m1 = word(mbrs, wx)
        rr = adrIsp("lmmDel dataid("lmmId") member("m1")", 0 8 12)
        if rc = 0 then
            say 'removed' m1 'from' pds
        else if rc = 8 then
            say 'not found' m1 'in' pds
        else do
            err = 'error deleting' m1 'in' pds 'rc' rr strip(zerrlm)
            say err
            leave
            end
        end
    call adrIsp "LMCLOSE DATAID("lmmId")"
    call adrIsp "LMFREE DATAID("lmmId")"
    if err <> '' then
        call err err
    return
endProcedure lmmRm
/*--- address ispf with error checking -------------------------------*/
adrIsp:
    parse arg ggIspCmd, ggRet
    address ispexec ggIspCmd
    if rc = 0 then return 0
    else if ggRet == '*' then return rc
    else if wordPOS(rc, ggRet) > 0 then return rc
    else
        call err 'adr ispExec rc' rc 'in' ggIspCmd':' strip(zerrlm)
endSubroutine adrIsp

/*--- address editor with error checking -----------------------------*/
adrEdit:
    parse arg ggEditCmd, ggRet
    address isrEdit ggEditCmd
    if rc = 0 then return 0
    else if ggRet == '*' then return rc
    else if wordPOS(rc, ggRet) > 0 then return rc
    else
        call err 'adr isrEdit rc' rc 'for' ggEditCmd
endSubroutine adrEdit
/* copy adrIsp end   *************************************************/
/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
    parse arg ggTsoCmd, ggRet
    address tso ggTsoCmd
    if rc == 0                     then return 0
    else if ggRet == '*'           then return rc
    else if wordPos(rc, ggRet) > 0 then return rc
    else
        call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */

/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure expose m.
parse upper arg dsn ., addPrefix
    if left(dsn,1) = "'" then
        return strip(dsn, 'b', "'")
    sp = sysvar('SYSPREF')
    if sp == '' then
        sp = userid()
    cx = pos('~', dsn)
    if cx < 1 & addPrefix == 1 then
        return sp'.'dsn
    do while cx \== 0
        le = left(dsn, cx-1)
        ri = substr(dsn, cx+1)
        if right(le, 1) == '.' | left(ri, 1) == '.' then
            dsn = le || sp || ri
        else
            dsn = le || left('.', le \== '') || sp ,
                     || left('.', ri \== '') || ri
        cx = pos('~', spec, cx)
        end
    return dsn
endProcedure dsn2Jcl

/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure expose m.
parse arg dsn .
    return "'"dsn"'"
endProcedure jcl2dsn

dsnSetMbr: procedure expose m.
parse arg dsn, mbr
     bx = pos('(', dsn)
     if bx > 0 then
         dsn = strip(left(dsn, bx-1))
     if mbr <> '' then
         dsn = dsn'('strip(mbr)')'
     return dsn
endProcedure dsnSetMbr

dsnGetMbr: procedure expose m.
parse arg dsn
     lx = pos('(', dsn)
     rx = pos(')', dsn, lx+1)
     if lx < 1 then
         return ''
     else if lx < rx then
         return substr(dsn, lx+1, rx-lx-1)
     else
         return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
    io: read or write a dataset with the following callsequences:
        read:  tsoOpen...'R', readDD*,  tsoClose
        write: tsoOpen...'W', writeDD*, tsoClose

        readDD returns true if data read, false at eof
        do not forget that open is mandatory to write empty file|
***********************************************************************/

/*--- open dd for read (rw='R') or write (rw='W') --------------------*/
tsoOpen: procedure expose m.
parse upper arg dd, rw
    return adrTso('execio' 0 'disk'RW tsoDD(dd, 'o') '(open)')
return /* end tsoOpen */

/*--- close dd -----------------------------------------------------*/
tsoClose: procedure expose m.
    parse upper arg dd
    return adrTso('execio 0 diskW' dd '(finis)')
endProcedure tsoClose

/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt = '' then
        ggCnt = 100
    call adrTso 'execio' ggCnt 'diskR' ggDD '(stem' ggSt')', 2
    return (value(ggSt'0') > 0)
return /* end readDD */

/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    call adrTso 'execio' ggCnt 'diskW' ggDD '(stem' ggSt')'
    return
endSubroutine writeDD

/*--- readNx: read next line, using buffer ---------------------------*/
/*--- begin: allocate dsnSpec and ini ------------------------ -------*/
readNxBegin: procedure expose m.
    parse arg m, m.m.dsn, m.m.dd, m.m.Cnt
    if m.m.dd = '' then
        m.m.dd = 'DDNX*'
    if m.m.cnt = '' then
        m.m.cnt = 1000
    m.m.cx = m.m.cnt + 999
    m.m.buf0x = 0
    m.m.0 = 0
    parse value dsnAlloc('dd('m.m.dd')' m.m.dsn) with m.m.dd m.m.free
    call tsoOpen m.m.dd, 'R'
    return m
endProcedure readDDNxBegin

/*--- return the stem of the next line, or '' at end -----------------*/
readNx: procedure expose m.
parse arg m
    m.m.cx = m.m.cx + 1
    if m.m.cx <= m.m.0 then
        return m'.'m.m.cx
    m.m.buf0x = m.m.buf0x + m.m.0
    if \ readDD(m.m.dd, 'M.'m'.', m.m.cnt)then
        return ''
    m.m.cx = 1
    return m'.1'
endProcedure readDDNx
/*--- return the stem of the curr line, '' at end --------------------*/
readNxCur: procedure expose m.
parse arg m
    if m.m.cx <= m.m.0 then
        return m'.'m.m.cx
    else
        return ''
endProcedure readNxCur

/*--- return the position (line number) of reader
           plus le characters of the current line (default 50) ------*/
readnxPos: procedure expose m.
parse arg m, le
    li = m'.'m.m.cx
    li = strip(m.li, 't')
    if arg() < 2 then
        le = 50
    if le < 1 then
        li = ''
    else if length(li) <= le then
        li = ':' li
    else
        li = ':' left(li, le-3)'...'
    return 'line' (m.m.buf0x + m.m.cx)li
endProcedure readnxPos

/*--- close and deallocate ------------------------------------------*/
readNxEnd: procedure expose m.
parse arg m
    call tsoClose m.m.dd
    call tsoFree m.m.free
    return
endProcedure readDDNxEnd

/*--- standardise a dsn spec
       word1             dsName or -
       word2             dd     or -
       word3             disp   or -
       word4 to first :  attributes in tso format
       after first :     attributes for new allocation
----------------------------------------------------------------------*/
dsnSpec: procedure expose m.
parse upper arg spec
    rr = ''      /* put leading - in separate words */
    do sx=1 while words(rr) < 3 & wx \= ''
        wx = word(spec, sx)
        do while abbrev(wx, '-') & words(rr) < 3
            wx = substr(wx, 2)
            rr = rr '-'
            end
        rr = rr wx
        end
    spec = rr subWord(spec, sx)
    na = ''
    dd = ''
    di = ''
    if left(spec, 1) = '&' then /* external spec is handled ok */
        spec = strip(substr(spec, 2))
    do wx=1 by 1
        w = word(spec, wx)
        if w = '' | abbrev(w, '.') | abbrev(w, ':') then
            leave
        else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
            di = w
        else if w = 'CATALOG' then
            di = di w
        else if abbrev(w, 'DD(') then
            dd = substr(w, 4, length(w)-4)
        else if abbrev(w, 'DSN(') then
            na = strip(substr(w, 5, length(w)-5))
        else if na == '' then
            na = dsn2jcl(w)
        else if dd == '' then
            dd = w
        else if di == '' then
            di = w
        else
            leave
        end
    if na == '' then
        na = '-'
    else if abbrev(na, "'") then
        na = substr(na, 2, length(na)-2)
    if dd == '' then dd = '-'
    if di == '' then di = '-'
    re = subword(spec, wx)
    if abbrev(re, '.') then
        re = substr(re, 2)
    return na dd di re
endProcedure dsnSpec

/*--- alloc a dsn with dsnAlloc
          if the dsn is inuse wait and retry
          until either the allocation is successfull
          or the timeout occurs --------------------------------------*/
dsnAllocWait: procedure expose m.
parse upper arg spec, pDi, pDD, timeOut
    x = max(1, arg() - 1)
    do rt=0
        m.adrTsoAl.1 = ''
        m.adrTsoAl.2 = ''
        m.adrTsoAl.3 = ''
        call outtrap m.adrTsoAl.
        res = dsnAlloc(spec, pDi, pDD, '*')
        call outtrap off
        if \ datatype(res, 'n') then
            return res
        msg = m.adrTsoAl.1'\n'm.adrTsoAl.2'\n'm.adrTsoAl.3
        if rt > timeOut & timeOut \== '' then
            return err('timeout allocating' spec time() '\n'msg)
        if pos('DATA SET IS ALLOCATED TO ANOTHER', msg) < 1 then
            return err('allocating' spec'\n'msg)
        say time() 'sleep and retry alloc' spec
        call sleep 1, 0
        end
endProcedure dsnAllocWait

/*--- alloc a dsn or a dd
          spec '-'<ddName>
               datasetName? disposition? '.'? attributes? (':' newAtts)?
          disp default disposition
          dd   default dd name
          retRc   erlaubte ReturnCodes (leer = 0)
          returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, pDi, pDD, retRc
    parse value dsnSpec(spec) with na dd di rest
    if na = '-' then
        m.dsnAlloc.dsn = ''
    else
        m.dsnAlloc.dsn = na
    if dd == '-' & pDD \== '' then
        dd = pDD
    if dd == '-' then
        dd = 'DD*'
    dd = tsoDD(dd, 'a')
    if na == '-' & di == '-' & rest = '' then
        return dd
    if di = '-' then
        if pDi == '' then
            di = 'SHR'
        else
            di = pDi
    if pos('(', na) < 1 then
        nop
    else if di = 'MOD' then
        call err 'disp mod for' na
    else
        di = 'SHR'
    if pos('/', na) > 0 then
        rx = csmAlloc(na dd di rest, retRc)
    else
        rx = tsoAlloc(na dd di rest, retRc)
    if rx = 0 then
        return dd dd
    else
        return rx
endProcedure dsnAlloc

/*--- find a free dd with prefix dd ----------------------------------*/
tsoDD: procedure expose m.
parse arg dd, f
    if symbol('m.tso.ddAlloc') \== 'VAR' then do
        call errIni
        m.tso.ddAlloc = ''
        m.tso.ddOpen  = ''
        end
    if m.err.ispf then
        address ispExec 'vget wshTsoDD shared'
    else
        wshTsoDD = m.tso.ddAlloc
    if f == '-' then do
        ax = wordPos(dd, m.tso.ddAlloc)
        if ax > 0 then
            m.tso.ddAlloc = delWord(m.tso.ddAlloc, ax, 1)
        ox = wordPos(dd, m.tso.ddOpen)
        if ox > 0 then
            m.tso.ddOpen  = delWord(m.tso.ddOpen , ox, 1)
        if ax < 1 & ox < 1 then
            call err 'tsoDD dd' dd 'not used' m.tso.ddAlloc m.tso.ddOpen
        sx = wordPos(dd, wshTsoDD)
        if sx > 0 then
            wshTsoDD  = delWord(wshTsoDD , sx, 1)
        end
    else if f == 'o' then do
        if wordPos(dd, m.tso.ddOpen m.tso.ddAlloc) < 1 then
            m.tso.ddOpen = strip(m.tso.ddOpen dd)
        end
    else if f <> 'a' then do
        call err 'tsoDD bad fun' f
        end
    else do
        if right(dd, 1) = '*' then do
            dd = left(dd, length(dd)-1) || m.err.screen
            cx = lastPos(' 'dd, ' 'm.tso.ddAlloc)
            if cx > 0 then do
                old = word(substr(m.tso.ddAlloc, cx), 1)
                if old = dd then
                    dd = dd'1'
                else if datatype(substr(old, length(dd)+1), 'n') then
                    dd = dd || (substr(old, length(dd)+1) + 1)
                else
                    call err 'tsoDD old' old 'suffix not numeric dd' dd
                end
            end
        if wordPos(dd, m.tso.ddAlloc) < 1 then
            m.tso.ddAlloc = strip(m.tso.ddAlloc dd)
        if wordPos(dd, wshTsoDD) < 1 then
            wshTsoDD = strip(wshTsoDD dd)
        end
    if m.err.ispf then
        address ispExec 'vPut wshTsoDD shared'
    return dd
endProcedure tsoDD

tsoAlloc: procedure expose m.
parse arg na dd disp rest ':' nn, retRc
    c = 'alloc dd('dd')' disp
    if na \== '-' then
        c = c "DSN('"na"')"
    else if disp = 'NEW' and nn \== '' then
        c = c dsnCreateAtts(,nn)
    call outtrap m.adrTsoAl.
    alRc = adrTso(c rest, '*')
    call outtrap off
    if alRc =  0 then
        return 0
    if nn \= '' & wordPos(disp, 'OLD SHR') > 0 ,
          & sysDsn("'"m.dsnAlloc.dsn"'") == 'DATASET NOT FOUND' then do
        say 'tsoAlloc creating' c rest ':'nn
        call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(na, nn)
        call adrTso 'free  dd('dd')'
        return tsoAlloc(na dd disp rest, retRc)
        end
    say 'rc='alRc 'for' c rest
    call saySt adrTsoal
    if retRc = '*' | wordPos(alRc, retRc) > 0 then
        return alRc
    call err 'tsoAlloc rc' alRc 'for' c rest
endProcedure tsoAlloc

tsoAtts: procedure expose m.
parse arg dsn
    rc = listDsi("'"dsn"' SMSINFO")
    if rc = 0 then
        mv = ''
    else if rc = 4 & sysReason = 19 then do
        mv = 'UNITCNT(30)'
        say 'multi volume' mv
        end
    else if rc ^= 0 then
        call err 'listDsi rc' rc 'reason' sysReason,
                             sysMsgLvl1 sysMsgLvl2
    al = 'CAT'
    al = ''
    if right(sysDsSms, 7) == 'LIBRARY' ,
        | abbrev(sysDsSms, 'PDS') then
         al = al 'DSNTYPE(LIBRARY)'
    if sysUnits = 'TRACK' then
        sysUnits = 'TRACKS'
    return al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
        "DATACLAS("sysDataClass")" ,
        "RECFM("translate('1 2 3', ' 'sysREcFM, ' 123')")",
        "LRECL("SYSLRECL")",
        "SPACE("sysPrimary"," sysSeconds")" sysUnits mv
    /*  "blksize("sysBLkSIZE")" removed 3.4.13: let sms do the magic */
endProcedure tsoAtts

tsoFree: procedure expose m.
parse arg ddList, ggRet
    do dx=1 to words(ddList)
        dd = word(ddList, dx)
        call adrTso 'free dd('dd')', ggRet
        call tsoDD dd, '-'
        end
    return
endProcedure tsoFree

tsoFreeAll: procedure expose m.
    all = m.tso.ddAlloc m.tso.ddOpen
    do ax = 1 to words(all)
        call adrTso 'execio 0 diskW' word(all, ax) '(finis)', '*'
        end
    m.tso.ddOpen = ''
    call tsoFree m.tso.ddAlloc, '*'
    return
endProcedure tsoFreeAll

dsnCreateAtts: procedure expose m.
parse arg dsn, atts, forCsm
    forCsm = forCsm == 1
    aU = ' 'translate(atts)
    res = ''
    if dsn \== '' then
        res = "dataset('"dsnSetMbr(dsn)"')"
    if abbrev(atts, '~') then
        return res tsoAtts(substr(atts, 2))
    if abbrev(atts, ':') then do
        parse var atts a1 atts
        rl = substr(a1, 3)
        if abbrev(a1, ':F') then do
            if rl = '' then
                rl = 80
            recfm='f b'
            end
        else do
            if rl = '' then
                rl = 32756
            recfm = substr(a1, 2, 1) 'b'
            end
        res =  res "recfm("space(recfm, 1-forCsm)") lrecl("rl")"
        end
    if pos('(', dsn) > 0 & pos(' DSNTYPE(', aU) < 1 ,
                         & pos(' DSORG(',   aU) < 1 then
        res = res 'dsntype(library) dsorg(po)'
    if pos(' MGMTCLAS(', aU) < 1 then
        res = res 'mgmtclas(COM#A091)'
    if pos(' SPACE(', aU) < 1 then
        res = res 'space(10, 1000) cyl' || copies('inder', forCsm)
    return res atts
endProcedure dsnCreateAtts
/*--- check if a dataset is archive ------------------------------------
          returns 'ok'                    if dataset on disk
                  'not'                   if dataset is not catalogued
                  'arc'                   if dataset archived
                  listDsi errorMsg        otherwise ------------------*/
dsnArc: procedure expose m.
parse upper arg dsn
    lc = listDsi("'"strip(dsn)"' noRecall")
    if lc = 0 then
        return 'ok'
    else if lc=4 & sysReason = 19 then  /* multiple volumes */
        return 'ok'
    else if lc=16 & sysReason = 5 then
        return 'notCat'
    else if lc=16 & sysReason = 9 then
        return 'arc'
    else
        return 'listDsi cc='lc', sysReason='sysReason ,
                          'm2='sysMsgLvl2', m1='sysMsgLvl1
endProcedure dsnArc
/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
    ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
    call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
    call tsoFree word(ggAlloc, 2)
    return
endSubroutine readDsn

/*--- write the dataset specified in ggDsnSpec from stem ggSt
          write ggCnt records if not empty otherwise ggst0
          if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
    call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
            '(stem' ggSt 'open finis)'
    call tsoFree word(ggAlloc, 2)
    if ggSay == 1 | m.debug == 1 then
       say ggCnt 'records written to' ggDsnSpec
    return
endSubroutine writeDsn

copyDSN: procedure expose m.
parse arg frSpec, toSpec, ggSay
    parse value dsnAlloc(frSpec, 'SHR', 'FRDD') with frDD frFr
    parse value dsnAlloc(toSpec, 'OLD', 'TODD') with toDD toFr
    call tsoOpen frDD, 'R'
    call tsoOpen toDD, 'W'
    cnt = 0
    do while readDD(frDD, r.)
        call writeDD toDD, r.
        cnt = cnt + r.0
        end
    call tsoClose frDD
    call tsoClose toDD
    call tsoFree frFr toFr
    if ggSay == 1 | m.debug == 1 then
       say cnt 'records copied from' frSpec 'to' to toSpec
    return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
/* copy err begin *** errorhandling, messages, help    ****************/
errIni: procedure expose m.
    if m.err.ini == 1 then
        return
    call utIni
    m.err.ini     = 1
    m.err.handler = ''
    m.err.cleanup = ';'
    m.err.opt     = ''
    parse source m.err.os .
    m.err.ispf    = 0
    m.err.screen  = 0
    if m.err.os \== 'LINUX' then
        if sysVar('sysISPF') = 'ACTIVE' then do
            m.err.ispf = 1
            address ispExec 'vget zScreen shared'
            m.err.screen = zScreen
            end
    return
endProcedure errIni

/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
    call errIni
    parse arg m.err.opt, m.err.handler
    if pos('I', translate(m.err.opt)) > 0 & m.err.ispf then
        address ispExec 'control errors return'
    return
endSubroutine errReset

/*--- error routine: abend with message ------------------------------*/
err:
    parse arg ggTxt, ggOpt
    call errIni
    drop err handler cleanup opt call return
    if ggOpt == '' & m.err.handler \== '' then
        interpret m.err.handler
    call errSay 'f}'ggTxt
    call errCleanup
    if ggOpt == '' then
        ggOpt = m.err.opt
    upper ggOpt
    if pos('T', ggOpt) > 0  then do
        trace ?r
        say 'trace ?r in err'
        end
    if pos('H', ggOpt) > 0 & m.err.eCat == 'f' then do
        call errSay ' }errorhandler exiting with divide by zero' ,
                                   'to show stackHistory'
        x = 1 / 0
        end
    call errSay ' }errorhandler exiting with exit(12)'
    exit errSetRc(12)
endSubroutine err

/*--- set rc for ispf: -------------------------------------------------
    if a cmd is run by ispStart, its RC is ignored,
         but ISPF passes the value of the shared variable zIspfRc
         back as return code
----------------------------------------------------------------------*/
errSetRc: procedure expose m.
parse arg zIspfRc
    if m.err.ispf then
        address ispExec vput 'zIspfRc' shared
    return zIspfRc
endProcedure errSetRc

/*--- error routine: user message cleanup exit -----------------------*/
errAddCleanup: procedure expose m.
parse arg code
    call errIni
        /* concatenate backwards, then it is executed also backwards */
    m.err.cleanup = ';'code || m.err.cleanup
    return
endProcedure errAddCleanup

errRmCleanup: procedure expose m.
parse arg code
    call errIni
    cx = pos(';'code';', m.err.cleanup)
    if cx > 0 then
        m.err.cleanup = left(m.err.cleanup, cx) ,
                     || substr(m.err.cleanup, cx + length(code)+2)
    return
endProcedure errRmCleanup

errCleanup: procedure expose m.
    call errIni
    errCleanup = m.err.cleanup
    if errCleanup <> ';' then do
        m.err.cleanup = ';'
        say 'err cleanup begin' errCleanup
        interpret errCleanup
        say 'err cleanup end' errCleanup
        end
    if symbol('m.tso.ddAlloc') == 'VAR' then
        call tsoFreeAll
    return
endProcedure errCleanup

/*--- say an errorMessage msg with pref and linesplits --------------*/
errSay: procedure expose m.
parse arg msg
    return saySt(errMsg(msg))

/*--- prefix an errormessage with pref,
          split it into lines at \n to stem m.err -------------------*/
errMsg: procedure expose m.
parse arg msg
    m.err.eCat = 'f'
    do while substr(msg, 2, 1) == '}'
        parse var msg m.err.eCat '}' msg
        end
    res = msg
    if m.err.eCat <> '' then do
       pTxt = ',error,fatal error,input error,s-}scanErr,warning,'
 /*    pTxt = ',error,fatal error,input error,syntax error,warning,' */
       px = pos(','m.err.eCat, pTxt)
       if px < 1 then do
           m.err.eCat = 'f'
           px = pos(','m.err.eCat, pTxt)
           end
       res = substr(pTxt, px+1, pos(',', pTxt, px+2)-px-1)
       if substr(res, 3, 1) == '}' then
           parse var res 2 opt 3 br 4 res
       if opt == '-' then
           res = res msg
       else do
           parse source . . s3 .              /* current rexx */
           res = res 'in' s3':' msg
           end
       end
    return splitNl(err, res)           /* split lines at \n */
endProcedure errMsg

splitNL: procedure expose m.
parse arg st, msg
    bx = 1
    do lx=1 to 20
        ex = pos('\n', msg, bx)
        if ex < bx then
            leave
        m.st.lx = substr(msg, bx, ex-bx)
        bx = ex+2
        end
    m.st.lx = substr(msg, bx)
    m.st.0 = lx
    return st
endProcedure splitNL

/*--- say (part of) the lines of a stem ----------------------------*/
saySt: procedure expose m.
parse arg st, fx, tx
    do lx=word(fx 1, 1) to word(tx m.st.0, 1)
        say m.st.lx
        end
    return st
endProcedure saySt

/*--- out (part of) the lines of a stem ----------------------------*/
outSt: procedure expose m.
parse arg st, fx, tx
    do lx=word(fx 1, 1) to word(tx m.st.0, 1)
        call out m.st.lx
        end
    return st
endProcedure outSt

/*--- say a trace message if m.trace is set --------------------------*/
debug: procedure expose m.
parse arg msg
    if m.debug == 1 then
        say 'debug:' msg
    return
endProcedure debug

/*--- output a trace if m.trace is set -------------------------------*/
trc: procedure expose m.
parse arg msg
    if m.trace == 1 then
        call out 'trc:' msg
    return
endProcedure trc

/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
    interpret 'assertRes =' arg(1)
    if assertRes \==1 then
        call err 'assert failed' arg(1) '==>' assertRes':' arg(2)
    return
endProcedure assert

/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg
    call errSay 'i}'msg
    call help 0
    call err 'i}'msg
endProcedure errHelp

/*--- display the first comment block of the source as help ----------*/
help: procedure expose m.
parse arg doClear
    if doClear \== 0 then
        address tso 'clear'
    parse source . . s3 .
    say right(' help for rexx' s3, 72, '*')
    do lx=1 while pos('/*', sourceLine(lx)) < 1
        if lx > 10 then
            return err('initial commentblock not found for help')
        end
    doInc = 1
    ho = m.err.helpOpt
    do lx=lx+1 to sourceline() while pos('*/', sourceline(lx)) = 0
        li = strip(sourceLine(lx), 't')
        cx = lastPos('{', li)
        if cx > 0 then do
            if length(ho) = 1 then
                doInc = cx = length(li) | pos(ho, li, cx+1) > 0
            li = left(li, cx-1)
            end
        if doInc then
            say li
        end
    say right(' end help for rexx' s3, 72, '*')
    return 4
endProcedure help

/* copy err end   *****************************************************/
/* copy ut begin  *****************************************************/
utIni: procedure expose m.
    if m.ut.ini == 1 then
        return
    m.ut.ini = 1
    m.ut.digits = '0123456789'
    m.ut.alfLC  = 'abcdefghijklmnopqrstuvwxyz'
    m.ut.alfUC  = translate(m.ut.alfLc)
    m.ut.Alfa   = m.ut.alfLc || m.ut.alfUC
    m.ut.alfNum = m.ut.alfa || m.ut.digits
    m.ut.alfDot = m.ut.alfNum || '.'
    m.ut.alfId  = m.ut.alfNum'_' /* avoid rexx allowed @ # $ ¬ . | ? */
    m.ut.alfIdN1 = m.ut.digits    /* not as first character */
    m.ut.alfRex  = m.ut.Alfa'.0123456789@#$?' /* charset puff mit ¬*/
    m.ut.alfRexN1= '.0123456789'
    m.ut.alfPrint = m.ut.alfNum'+-*/=()¢!{}<> .:,;?|''"%&#@$£\_'
    return
endProcedure utIni
/*--- if function  warning all3 arguments get evaluated|
                   e.g if(x=0, 'infinity', 1/0) will fail| -----------*/
if: procedure expose m.
parse arg co, ifTrue, ifFalse
    if co then
        return ifTrue
    else
        return ifFalse
endProcedure if
/*--- embedded ASSignement:
      assign the second argument to the variable with name in first arg
      and return the value assigned ----------------------------------*/
ass:
    call value arg(1), arg(2)
    return arg(2)
/*--- embedded ASSignement return NotNull:
      assign the second argument to the variable with name in first arg
      and return 1 if value not null, 0 if null ----------------------*/
assNN:
    call value arg(1), arg(2)
    return arg(2) \== ''

/*--- return current time and cpu usage ------------------------------*/
utTime: procedure expose m.
    return time() 'ela='time('E') 'cpu='sysvar('syscpu'),
            'su='sysvar('syssrv')

tstUtTime: procedure expose m.
    say 'begin' utTime()  sysvar('sysnode')
    do 3000000
       end
    say 'end  ' utTime()
return

/*--- sleep several seconds ------------------------------------------*/
sleep: procedure expose m.
parse arg secs, sayIt
    if sayit <> 0 then
        say 'sleeping' secs 'secs' time()
    CALL SYSCALLS 'ON'
    ADDRESS SYSCALL "sleep" secs
    CALL SYSCALLS 'OFF'
    if sayit <> 0 then
        say 'slept' secs 'secs' time()
    return
endProcedure sleep

/*--- left without truncation ----------------------------------------*/
lefPad: procedure expose m
parse arg s, len
    if length(s) >= len then
        return s
    return left(s, len)
endProcedure lefPad

/*--- right without truncation ---------------------------------------*/
rigPad: procedure expose m
parse arg s, len
    if length(s) >= len then
        return s
    return right(s, len)
endProcedure rigPad

/*--- quote string txt using quoteChar qu ("" ==> ") -----------------*/
quote: procedure expose m.
parse arg txt, qu
    if qu = '' then
        qu = '"'
    res = qu
    ix = 1
    do forever
        qx = pos(qu, txt, ix)
        if qx = 0 then
            return res || substr(txt, ix) || qu
        res = res || substr(txt, ix, qx-ix) || qu || qu
        ix = qx + length(qu)
        end
endProcedure quote

/*--- translate to lowercase -----------------------------------------*/
ut2lc: procedure expose m.
parse arg s
    return translate(s, m.ut.alfLc, m.ut.alfUc)

/*--- verify an id ---------------------------------------------------*/
verifId: procedure expose m.
    parse arg src, extra
    if pos(left(src, 1), m.ut.alfIdN1) > 0 then
        return 1
    else
        return verify(src, m.ut.alfId || extra, 'n')

/*--- return the count of occurrences of needle in heyStack ----------*/
posCount: procedure expose m.
parse arg needle, hayStack, start, fin
    if start = '' then
        start = 1
    if fin = '' then
        fin = length(hayStack) + 1 - length(needle)
    do cnt = 0 by 1
        start = pos(needle, haystack, start)
        if start < 1 | start > fin then
             return cnt
        start = start + length(needle)
        end
endProcedure posCount

repAll: procedure expose m.
parse arg src
    do ax = 2 by 2 to arg()
        src = repAl2(src, src, arg(ax), arg(ax+1))
        end
    return src
endProcedure repAll

repAl2: procedure expose m.
parse arg src, sPos, old, new
    res = ''
    cx = 1
    do forever
        nx = pos(old, sPos, cx)
        if nx < 1 then
            return res || substr(src, cx)
        res = res || substr(src, cx, nx-cx) || new
        cx = nx + length(old)
        end
endProcedure repAl2

repAllWords: procedure expose m.
parse arg src, w, new
    res = ''
    wx = 0
    cx = 1
    do forever
        wx = wordPos(w, src, wx+1)
        if wx < 1 then
            return res || substr(src, cx)
        nx = wordindex(src, wx)
        res = res || substr(src, cx, nx-cx) || new
        cx = nx + length(w)
        end
endProcedure repAllWords
tstUtc2d: procedure expose m.
numeric digits 33
say c2d('ffffff'x)
say utc2d('ffffff'x)
say utc2d('01000000'x)    256*256*256
say utc2d('01000001'x)
say utc2d('020000FF'x)    256*256*256*2+255
say utc2d('03020000EF'x)    256*256*256*770+239
return
endProcedure tstUtc2d
utc2d: procedure expose m.
parse arg ch
    cx = length(ch) // 3
    if cx = 0 then
        cx = 3
    res = c2d(left(ch, cx))
    do cx=cx+1 by 3 to length(ch)
        res = res * 16777216 + c2d(substr(ch, cx, 3))
        end
    return res
/* copy ut end ********************************************************/
}¢--- A540769.WK.REXX.O13(DBXCMP) cre=2010-07-30 mod=2010-08-05-18.16.26 A540769 ---
$=di=DSN.DBX.SRCCAT(ZZCMP020)
$=do=DSN.DBX.SRCCAT(ZZCMP02Z)
ic = 0
oc = 0
call dsnAlloc 'dd(ddi)' $di
call dsnAlloc 'dd(ddo)' $do
do while readDD(ddi, i.)
    ox = 0
    do ix=1 to i.0
        ic = ic + 1
        if substr(i.ix, 3, 20) \= 'F332163' then do
            oc = oc + 1
            ox = ox + 1
            if ox \= ix then
               i.ox = i.ix
            end
        end
    i.0 = ox
    call writeDD ddo, i.
    end
    call readDDEnd ddI
    call writeDDEnd ddO
    call adrTso 'free dd(ddi ddo)'
$$- 'in' ic 'out' oc
$#out                                              20100805 16:39:01
in 89255 out 89184
$#out                                              20100730 18:01:06
in 89255 out 89184
$#out                                              20100730 17:52:02
in 89255 out 89184
$#out                                              20100730 17:49:49
$#out
$#out                                              20100730 17:49:32
}¢--- A540769.WK.REXX.O13(DBXREN) cre=2013-01-08 mod=2013-01-08-12.42.57 A540769 ---
parse arg dbsy ana
if dbSy == '' then
    parse value 'DBAF WK40300F' with dbsy ana
say 'dbsy' dbsy 'ana' ana
msk = 'DSN.?'dbsy'.'ana'.**'
call csiOpen csi, 'DSN.C'dbsy'.'ana'.**'
do dx=1 while csiNext(csi, 'CSI.'dx)
    say dx m.csi.dx
    end
call csiOpen csi, 'DSN.R'dbsy'.'ana'.**'
do dx=dx while csiNext(csi, 'CSI.'dx)
    say dx m.csi.dx
    end
dx = dx - 1
last = 'ff'x
cA = 0
do cx=1 to dx
    lx = lastPos('.', m.csi.cx)
    ly = substr(m.csi.cx, lx+1, 1)
    if ly == 'A' then
        cA = cA + 1
    else if ly << last then
        last = ly
    say 'y' ly 'l' last 'dsn' m.csi.cx
    end
if cA == 0 then
    call err 'keine aktuellen DSNs in' msk'.A*'
if last == 'ff'x then do
    nxt = 'Z'
    end
else do
    abc = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    ax  = pos(last, abc)
    if ax < 2 then
        call err 'last' last 'keine rename moeglich'
    nxt = substr(abc, ax-1, 1)
    end
say 'renaming' ca 'DSNs from' msk'.A* to' msk'.'nxt'*'
do cx=1 to dx
    lx = lastPos('.', m.csi.cx)
    ly = substr(m.csi.cx, lx+1, 1)
    if ly == 'A' then
        call adrTso 'rename' ,
            "'"m.csi.cx"'" "'"overlay(nxt, m.csi.cx, lx+1)"'"
        end
exit
/* copy csi begin    ***************************************************
     csi interface: see dfs managing catalogs appendix c
         returncode/reason see message IDC3009I
**********************************************************************/
/*--- specify dsn mask and fields to start a csi catalog search --------
      arguments:
          m       objectPointer
          dsnMask specifies the dsns with wildcards:
              %  1 character
              *  0 - n character in one level
              ** 0 - n levels
          fields a (space separated) list of field names -------------*/
csiOpen: procedure expose m.
parse arg m, dsnMask, fields
    m.m.fld.0 = words(fields)
    ffix = d2c(m.m.fld.0, 2)
    do x=1 to m.m.fld.0
        m.m.fld.x = translate(word(fields, x))
        ffix = ffix || left(m.m.fld.x, 8)
        end
    if dsnMask \== '' & pos('*', dsnMask) < 1 then
        dsnMask = dsnMask'.**'
    m.m.filt = left(dsnMask, 149) ,
             || left('Y', 3) ,        /* resume offset 149      */
             || ffix                  /* csiNumEn offset 152    */

    WORKLEN = 1024 * 64
    m.m.work = D2C(WORKLEN,4) || COPIES('00'X,WORKLEN-4)
    m.m.pos = workLen + 1
    return
endProcedure csiOpen

/*--- put the next dsn into m.o and m.o.* (for other fields)
      return 1 if next dsn exists 0 otherwise ------------------------*/
csiNext: procedure expose m.
parse arg m, o
    usedL = C2D(SUBSTR(m.m.work,9,4)) /* GET AMOUNT OF WORK AREA USED */
    px = m.m.pos
    do forever
        if px > usedL then do
            if substr(m.m.filt, 150, 1) \== 'Y' then do
                m.m.pos = px
                m.o = ''
                return 0
                end
            reason = left('', 4)
            ADDRESS LINKPGM 'IGGCSI00  reason m.'m'.filt  m.'m'.work'
            if rc == 0 & substr(reason, 3, 2) == '0000'x then
                nop
            else if rc == 4 & substr(reason, 3, 2) == '0464'x then
                say 'data set entry with error'
            else
                call err 'call csi returns' rc,
                             'rc' c2d(substr(reason, 4,1)),
                             'reason' c2d(substr(reason, 3,1)),
                             'module' substr(reason, 1,2)
            usedL = C2D(SUBSTR(m.m.work,9,4)) /* GET WORK AREA USED */
            numFD = C2D(SUBSTR(m.m.work,13,2)) /* no flds + 1 */
            if numFd <> m.m.fld.0 + 1 then
                call err 'csiNumFd' numFd 'not' m.m.fld.0 '+' 1
            px = 15
            iterate
            end
        eType =  substr(m.m.work, px+1, 1)
        m.o = strip(substr(m.m.work, px+2, 44), 't')
        flag = substr(m.m.work, px, 1)
        /* say 'eType' eType m.o 'flag' c2x(flag) */
        if eType == '0' then do
            if flag \== '00'x & flag \== '40'x then
                call err 'flag' c2x(flag) 'for catalog' m.o
            px = px + 50    /* length of catalog entry  */
            iterate
            end
        else do
            if \ abbrev(x2b(c2x(flag)), '101') then
                call err 'call csi entry flag' x2b(c2x(flag)),
                             'rc' c2d(substr(m.m.work, px+49,1)),
                             'reason' c2d(substr(m.m.work, px+48,1)),
                             'module' substr(m.m.work, px+46, 2),
                             'for entry' m.o,
                             'see qw IDC3009I'
            py = px + 46
            tl = c2d(substr(m.m.work, py, 2))
            pl = py + 4
            pf = py + m.m.fld.0 * 2 + 4
            do fx = 1 to m.m.fld.0
                fi = m.m.fld.fx
                fl = c2d(substr(m.m.work, pl, 2))
                m.o.fi = substr(m.m.work, pf, fl)
                if fi = 'MGMTCLAS' then
                    m.o.fi = substr(m.o.fi, 3, c2d(left(m.o.fi ,2)))
                else if wordPos(fi, 'COMUDSIZ NOBYTTRK') > 0 then
                    m.o.fi = c2d(m.o.fi)
                pf = pf + fl
                pl = pl + 2
                end
            if py + tl <> pf then
                call err 'length mismatch for entry' m.o
            m.m.pos = pf
            return 1
            end
        end
endProcedure csiNext
/*--- if dsn is arcived return 'arcive'
      if dsn is tape return 'tape'
      otherwise return managment class ------------------------------*/
csiArcTape: procedure expose m.
parse arg vo, cl, dt, dsn
        if vo = '' then
            say err '||| no volume for dsn' dsn
        else if vo = 'ARCIVE' then
            res = 'arcive'
        else if cl <> '' then
            res = cl
        else if abbrev(vo, 'SHR') then
            res = 'SHR'
        else
            res = 'tape'
        if   res = 'arcive' then
            return res
      /*if   abbrev(res, 'ar') \= abbrev(dt, '00'x) , */
        if   abbrev(res, 'ta') \= abbrev(c2x(left(dt, 1)), '7') ,
           | (left(res, 1) >= 'A') \= abbrev(dt, '30'x) then
           say '||| mismatch cl' cl 'vo' vo 'dt' c2x(dt) 'dsn' dsn
        return res
endProcedure csiArcTape
/* copy csi end ******************************************************/
/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
    parse arg ggTsoCmd, ggRet
    address tso ggTsoCmd
    if rc == 0                     then return 0
    else if ggRet == '*'           then return rc
    else if wordPos(rc, ggRet) > 0 then return rc
    else
        call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */

/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure expose m.
parse upper arg dsn ., addPrefix
    if left(dsn,1) = "'" then
        return strip(dsn, 'b', "'")
    sp = sysvar('SYSPREF')
    if sp == '' then
        sp = userid()
    cx = pos('~', dsn)
    if cx < 1 & addPrefix == 1 then
        return sp'.'dsn
    do while cx \== 0
        le = left(dsn, cx-1)
        ri = substr(dsn, cx+1)
        if right(le, 1) == '.' | left(ri, 1) == '.' then
            dsn = le || sp || ri
        else
            dsn = le || left('.', le \== '') || sp ,
                     || left('.', ri \== '') || ri
        cx = pos('~', spec, cx)
        end
    return dsn
endProcedure dsn2Jcl

/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure expose m.
parse arg dsn .
    return "'"dsn"'"
endProcedure jcl2dsn

dsnSetMbr: procedure expose m.
parse arg dsn, mbr
     bx = pos('(', dsn)
     if bx > 0 then
         dsn = strip(left(dsn, bx-1))
     if mbr <> '' then
         dsn = dsn'('strip(mbr)')'
     return dsn
endProcedure dsnSetMbr

dsnGetMbr: procedure expose m.
parse arg dsn
     lx = pos('(', dsn)
     rx = pos(')', dsn, lx+1)
     if lx < 1 then
         return ''
     else if lx < rx then
         return substr(dsn, lx+1, rx-lx-1)
     else
         return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
    io: read or write a dataset with the following callsequences:
        read:  readDDBegin, readDD*,  readDDEnd
        write: writeBegin,  writeDD*, writeEnd

        readDD returns true if data read, false at eof
***********************************************************************/

/*--- prepare reading from a DD --------------------------------------*/
readDDBegin: procedure expose m.
    parse upper arg ggDD
    call errAddCleanup 'call readDDEnd' ggDD', "*"'
return /* end readDDBegin */

/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt = '' then
        ggCnt = 100
    call adrTso 'execio' ggCnt 'diskr' ggDD '(stem' ggSt')', 2
    return (value(ggSt'0') > 0)
return /* end readDD */

/*--- finish reading DD  ggDD ----------------------------------------*/
readDDEnd: procedure expose m.
    parse upper arg ggDD, ggRet
    call errRmCleanup 'call readDDEnd' ggDD', "*"'
    return adrTso('execio 0 diskr' ggDD '(finis)', ggRet)
endProcedure readDDEnd

/*--- prepare writing to DD ggDD -------------------------------------*/
writeDDBegin: procedure expose m.
    parse upper arg ggDD
                  /* ensure file is erased, if no records are written */
    call adrTso 'execio' 0 'diskw' ggDD '(open)'
    call errAddCleanup 'call writeDDEnd' ggDD', "*"'
return /* end writeDDBegin */

/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    call adrTso 'execio' ggCnt 'diskw' ggDD '(stem' ggSt')'
    return
endSubroutine writeDD

/*--- end writing to dd ggDD (close) --------------------------------*/
writeDDEnd: procedure expose m.
parse upper arg ggDD, ggRet
    call errRmCleanup 'call writeDDEnd' ggDD', "*"'
    return adrTso('execio 0 diskw' ggDD '(finis)', ggRet)
endProcedure writeDDEnd

/*--- readNx: read next line, using buffer ---------------------------*/
/*--- begin: allocate dsnSpec and ini ------------------------ -------*/
readNxBegin: procedure expose m.
    parse arg m, m.m.dsn, m.m.dd, m.m.Cnt
    if m.m.dd = '' then
        m.m.dd = 'DDNX'
    if m.m.cnt = '' then
        m.m.cnt = 1000
    m.m.cx = m.m.cnt + 999
    m.m.buf0x = 0
    m.m.0 = 0
    m.m.free = subword(dsnAlloc('dd('m.m.dd')' m.m.dsn), 2)
    call readDDBegin m.m.dd
    return m
endProcedure readDDNxBegin

/*--- return the stem of the next line, or '' at end -----------------*/
readNx: procedure expose m.
parse arg m
    m.m.cx = m.m.cx + 1
    if m.m.cx <= m.m.0 then
        return m'.'m.m.cx
    m.m.buf0x = m.m.buf0x + m.m.0
    if \ readDD(m.m.dd, 'M.'m'.', m.m.cnt)then
        return ''
    m.m.cx = 1
    return m'.1'
endProcedure readDDNx
/*--- return the stem of the curr line, '' at end --------------------*/
readNxCur: procedure expose m.
parse arg m
    if m.m.cx <= m.m.0 then
        return m'.'m.m.cx
    else
        return ''
endProcedure readNxCur

/*--- return the position (line number) of reader
           plus le characters of the current line (default 50) ------*/
readnxPos: procedure expose m.
parse arg m, le
    li = m'.'m.m.cx
    li = strip(m.li, 't')
    if arg() < 2 then
        le = 50
    if le < 1 then
        li = ''
    else if length(li) <= le then
        li = ':' li
    else
        li = ':' left(li, le-3)'...'
    return 'line' (m.m.buf0x + m.m.cx)li
endProcedure readnxPos

/*--- close and deallocate ------------------------------------------*/
readNxEnd: procedure expose m.
parse arg m
    call readDDEnd m.m.dd
    interpret m.m.free
    return
endProcedure readDDNxEnd

/*--- standardise a dsn spec
       word1             dsName or -
       word2             dd     or -
       word3             disp   or -
       word4 to first :  attributes in tso format
       after first :     attributes for new allocation
----------------------------------------------------------------------*/
dsnSpec: procedure expose m.
parse upper arg spec
    rr = ''      /* put leading - in separate words */
    do sx=1 while words(rr) < 3 & wx \= ''
        wx = word(spec, sx)
        do while abbrev(wx, '-') & words(rr) < 3
            wx = substr(wx, 2)
            rr = rr '-'
            end
        rr = rr wx
        end
    spec = rr subWord(spec, sx)
    na = ''
    dd = ''
    di = ''
    if left(spec, 1) = '&' then /* external spec is handled ok */
        spec = strip(substr(spec, 2))
    do wx=1 by 1
        w = word(spec, wx)
        if w = '' | abbrev(w, '.') | abbrev(w, ':') then
            leave
        else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
            di = w
        else if w = 'CATALOG' then
            di = di w
        else if abbrev(w, 'DD(') then
            dd = substr(w, 4, length(w)-4)
        else if abbrev(w, 'DSN(') then
            na = strip(substr(w, 5, length(w)-5))
        else if na == '' then
            na = dsn2jcl(w)
        else if dd == '' then
            dd = w
        else if di == '' then
            di = w
        else
            leave
        end
    if na == '' then
        na = '-'
    else if abbrev(na, "'") then
        na = substr(na, 2, length(na)-2)
    if dd == '' then dd = '-'
    if di == '' then di = '-'
    re = subword(spec, wx)
    if abbrev(re, '.') then
        re = substr(re, 2)
    return na dd di re
endProcedure dsnSpec

/*--- alloc a dsn with dsnAlloc
          if the dsn is inuse wait and retry
          until either the allocation is successfull
          or the timeout occurs --------------------------------------*/
dsnAllocWait: procedure expose m.
parse upper arg spec, pDi, pDD, timeOut
    x = max(1, arg() - 1)
    do rt=0
        m.adrTsoAl.1 = ''
        m.adrTsoAl.2 = ''
        m.adrTsoAl.3 = ''
        call outtrap m.adrTsoAl.
        res = dsnAlloc(spec, pDi, pDD, '*')
        call outtrap off
        if \ abbrev(res, ' ') then
            return res
        msg = m.adrTsoAl.1'\n'm.adrTsoAl.2'\n'm.adrTsoAl.3
        if rt > timeOut & timeOut \== '' then
            return err('timeout allocating' spec time() '\n'msg)
        if pos('DATA SET IS ALLOCATED TO ANOTHER', msg) < 1 then
            return err('allocating' spec'\n'msg)
        say time() 'sleep and retry alloc' spec
        call sleep 1, 0
        end
endProcedure dsnAllocWait

/*--- alloc a dsn or a dd
          spec '-'<ddName>
               datasetName? disposition? '.'? attributes? (':' newAtts)?
          disp default disposition
          dd   default dd name
          retRc   erlaubte ReturnCodes (leer = 0)
          returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, pDi, pDD, retRc
    parse value dsnSpec(spec) with na dd di rest
    if na = '-' then
        m.dsnAlloc.dsn = ''
    else
        m.dsnAlloc.dsn = na
    if na == '-' & dd \== '-' & di == '-' & rest = '' then
        return dd
    if dd == '-' & pDD \== '' then
        dd = pDD
    if dd == '-' then do
        if symbol('m.adrTso.ddNum') = 'VAR' then
            dd = m.adrTso.ddNum + 1
        else
            dd = 1
        m.adrTso.ddNum = dd
        dd = 'DD' || dd
        end
    if di = '-' & pDi \== '' then
        di = pDi
    if di = '-' then
        di = 'SHR'
    else if pos('(', na) < 1 then
        nop
    else if di = 'MOD' then
        call err 'disp mod for' na
    else
        di = 'SHR'
    if pos('/', na) > 0 then
        return csmAlloc(na dd di rest, retRc)
    else
        return tsoAlloc(na dd di rest, retRc)
endProcedure dsnAlloc

tsoAlloc: procedure expose m.
parse arg na dd disp rest ':' nn, retRc
    c = 'alloc dd('dd')' disp
    if na \== '-' then
        c = c "DSN('"na"')"
    else if disp = 'NEW' and nn \== '' then
        c = c dsnCreateAtts(,nn)
    call outtrap m.adrTsoAl.
    alRc = adrTso(c rest, '*')
    call outtrap off
    if alRc =  0 then do
        call errAddCleanup 'call tsoFree' dd', "*"'
        return dd 'call tsoFree' dd';'
        end
    if nn \= '' & wordPos(disp, 'OLD SHR') > 0 ,
          & sysDsn("'"m.dsnAlloc.dsn"'") == 'DATASET NOT FOUND' then do
        say 'tsoAlloc creating' c rest ':'nn
        call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(na, nn)
        call adrTso 'free  dd('dd')'
        return tsoAlloc(na dd disp rest, retRc)
        end
    do ax=1 to m.adrTsoAl.0
        say m.adrTsoal.ax
        end
    if retRc = '*' | wordPos(alRc, retRc) > 0 then
        return ' ' alRc
    call err 'tsoAlloc rc' alRc 'for' c rest
endProcedure tsoAlloc

tsoAtts: procedure expose m.
parse arg dsn
    rc = listDsi("'"dsn"' SMSINFO")
    if rc = 0 then
        mv = ''
    else if rc = 4 & sysReason = 19 then do
        mv = 'UNITCNT(30)'
        say 'multi volume' mv
        end
    else if rc ^= 0 then
        call err 'listDsi rc' rc 'reason' sysReason,
                             sysMsgLvl1 sysMsgLvl2
    al = 'CAT'
    al = ''
    if right(sysDsSms, 7) == 'LIBRARY' ,
        | abbrev(sysDsSms, 'PDS') then
         al = al 'DSNTYPE(LIBRARY)'
    if sysUnits = 'TRACK' then
        sysUnits = 'TRACKS'
    al = al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
        "DATACLAS("sysDataClass")" ,
        "RECFM("translate('1 2 3', ' 'sysREcFM, ' 123')")",
        "LRECL("SYSLRECL")",
        "blksize("sysBLkSIZE")",
        "SPACE("sysPrimary"," sysSeconds")" sysUnits mv
    return al
endProcedure tsoAtts

tsoFree: procedure expose m.
parse arg dd, ggRet
    call adrTso 'free dd('dd')', ggRet
    call errRmCleanup 'call tsoFree' dd', "*"'
    return
endProcedure tsoFree

dsnCreateAtts: procedure expose m.
parse arg dsn, atts, forCsm
    forCsm = forCsm == 1
    aU = ' 'translate(atts)
    if abbrev(atts, ':') then do
        parse var atts a1 atts
        bl = 32760
        rl = substr(a1, 3)
        if abbrev(a1, ':F') then do
            if rl = '' then
                rl = 80
            recfm='f b'
            bl = bl - (bl // rl)
            end
        else do
            if rl = '' then
                rl = bl-4
            recfm = substr(a1, 2, 1) 'b'
            end
        if forCsm then
            atts =  atts "recfm("space(recfm, 0)") lrecl("rl")",
                    "blkSize("bl")"
        else
            atts = atts "recfm("recfm") lrecl("rl") block("bl")"
        end
    if pos('(', dsn) > 0 & pos(' DSNTYPE(', aU) < 1 ,
                         & pos(' DSORG(',   aU) < 1 then
        atts = atts 'dsntype(library) dsorg(po)'
    if pos(' MGMTCLAS(', aU) < 1 then
        atts = atts 'mgmtclas(COM#A091)'
    if pos(' SPACE(', aU) < 1 then
        if forCsm then
            atts = atts 'space(10, 1000) cylinder'
        else
            atts = atts 'space(10, 1000) cyl'
    if dsn == '' then
       return atts
    return "dataset('"dsnSetMbr(dsn)"')" atts
endProcedure dsnCreateAtts

/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
    ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
    call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
    interpret subword(ggAlloc, 2)
    return
endSubroutine readDsn

/*--- write the dataset specified in ggDsnSpec from stem ggSt
          write ggCnt records if not empty otherwise ggst0
          if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
    call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
            '(stem' ggSt 'open finis)'
    interpret subword(ggAlloc, 2)
    if ggSay == 1 | m.debug == 1 then
       say ggCnt 'records written to' ggDsnSpec
    return
endSubroutine writeDsn

copyDSN: procedure expose m.
parse arg frSpec, toSpec, ggSay
    frDD = dsnAlloc(frSpec, 'SHR', 'FRDD')
    toDD = dsnAlloc(toSpec, 'OLD', 'TODD')
    call readDDBegin word(frDD, 1)
    call writeDDBegin word(toDD, 1)
    cnt = 0
    do while readDD(word(frDD, 1), r.)
        call writeDD word(toDD, 1), r.
        cnt = cnt + r.0
        end
    call readDDEnd word(frDD, 1)
    call writeDDEnd word(toDD, 1)
    interpret ';' subword(frDD, 2) '; ; ;' subword(toDD, 2)
    if ggSay == 1 | m.debug == 1 then
       say cnt 'records copied from' frSpec 'to' to toSpec
    return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
/* copy err begin ******************************************************
    messages, errorhandling,help
***********************************************************************/
errIni: procedure expose m.
    if m.err.ini == 1 then
        return
    call outIni
    m.err.ini     = 1
    m.err.handler = ''
    m.err.cleanup = ';'
    m.err.opt     = ''
    return
endProcedure errIni
/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
    call errIni
    parse arg m.err.opt, m.err.handler
    if pos('I', translate(m.err.opt)) > 0 then
        if errOS() \== 'LINUX' then
            if sysVar('sysISPF') = 'ACTIVE' then
                    call adrIsp 'control errors return'
    return
endSubroutine errReset

/*--- error routine: abend with message ------------------------------*/
err:
    parse arg ggTxt, ggOpt
    call errIni
    drop err handler cleanup opt call return
    if ggOpt == '' & m.err.handler \== '' then do
        if 1 then do /* no detection of recursive err call loop
                        --> will anyway fail by stack overflow */
            interpret m.err.handler
            end
        else do
                     /* avoid recursive err call loop */
            drop call return
            if symbol('m.err.call') \== 'VAR' then
                m.err.call = 1
            else
                m.err.call = m.err.call + 1
            if m.err.call > 10 then do
                say 'errHandler loop:' m.err.handler
                end
            else do
                m.err.return = 1
                call errInterpret m.err.handler
                m.err.call = m.err.call - 1
                if m.err.return then
                    return result
                end
            end
        end
    call outDst
    call errSay ggTxt, 'e'
    call errCleanup
    if ggOpt == '' then
        ggOpt = m.err.opt
    ggOpt = translate(ggOpt)
    if pos('T', ggOpt) > 0  then do
        trace ?r
        say 'trace ?r in err'
        end
    if pos('H', ggOpt) > 0  then do
        call errSay 'divide by zero to show stackHistory', 'e'
        x = 1 / 0
        end
    call errSay 'exit(12)', 'e'
    exit errSetRc(12)
endSubroutine err

/*--- error routine: user message cleanup exit -----------------------*/
errEx:
    parse arg ggTxt
    call errIni
    call outDst
    call errSay ggTxt
    call errCleanup
    exit 8
endProcedure errEx

errAddCleanup: procedure expose m.
parse arg code
    if m.err.ini \== 1 then
        call errIni
        /* concatenate backwards, then it is executed also backwards */
    m.err.cleanup = ';'code || m.err.cleanup
    return
endProcedure errAddCleanup

errRmCleanup: procedure expose m.
parse arg code
    if m.err.ini \== 1 then
        call errIni
    cx = pos(';'code';', m.err.cleanup)
    if cx > 0 then
        m.err.cleanup = left(m.err.cleanup, cx) ,
                     || substr(m.err.cleanup, cx + length(code)+2)
    return
endProcedure errRmCleanup

errCleanup: procedure expose m.
    call errIni
    cl = m.err.cleanup
    if cl = ';' then
        return
    m.err.cleanup = ';'
    say 'err cleanup begin' cl
    call errInterpret cl
    say 'err cleanup end' cl
    return
endProcedure errCleanup

errInterpret: procedure expose m.
parse arg code
    interpret code
    m.err.return = 0
    return
endProcedure errInterpret
/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
    interpret 'assertRes =' arg(1)
    if \ assertRes then
        call err 'assert failed' arg(1)':' arg(2)
    return
endProcedure assert

/*--- output an errorMessage msg with pref pref
           split message in lines at '/n' ---------------------------*/
errSay: procedure expose m.
parse arg msg, pref
    parse source . . ggS3 .                           /* current rexx */
    if pref == 'e' then
        msg = 'fatal error in' ggS3':' msg
    else if pref == 'w' then
        msg = 'warning in' ggS3':' msg
    else if pref \== '' then
        msg = pref':' msg
    return outNl(msg)
endProcedure errSay

/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg, op
    call errSay msg, 'e'
    call help
    call err msg, op
endProcedure errHelp

/*--- return the Operating System we are running on: TSO or LINUX ---*/
errOS: procedure expose m.
    parse source os .
    return os
endProcedure errOS

/*--- set rc for ispf: -------------------------------------------------
    if a cmd is run by ispStart, its RC is ignored,
         but ISPF passes the value of the shared varible 3IspfRc
         back as return code
----------------------------------------------------------------------*/
errSetRc: procedure expose m.
parse arg zIspfRc
    if errOS() \== 'LINUX' then
           if sysVar('sysISPF') = 'ACTIVE' then
            address ispExec vput 'zIspfRc' shared
    return zIspfRc
endProcedure errSetRc

/*--- output a trace message if m.tr is set -----------------------*/
trc: procedure expose m.
parse arg msg
    if m.trace == 1 then
        call out 'trc:' msg
    return
endProcedure trc

debug: procedure expose m.
parse arg msg
    if m.debug == 1 then
        call out 'debug' msg
    return
endProcedure debug

/*--- display the first comment block of the source as help ----------*/
help: procedure expose m.
    parse source . . s3 .
    call out right(' help for rexx' s3, 79, '*')
    do ax=1 to arg()
        say ' ' arg(ax)
        end
    do lx=1 by 1
        if pos('/*', sourceLine(lx)) > 0 then
            leave
        else if lx > 10 then do
            call out 'initial commentblock not found for help'
            return
            end
        end
    do lx=lx+1 by 1
        li = strip(sourceLine(lx), 't', ' ')
        if pos('*/', li) > 0 then
            leave
        call out li
        end
    call out right(' end help for rexx' s3, 79, '*')
    return 4
endProcedure help

/*--- output all lines (separated by '\n') of all args --------------*/
outNl: procedure expose m.
    do ax=1 to max(1, arg())
        msg = arg(ax)
        sx = 0
        bx = -1
        do lx=1 until bx >= length(msg)
                ex = pos('\n', msg, bx+2)
            if ex < 1 then
                ex = length(msg)+1
            call out substr(msg, bx+2, ex-bx-2)
            bx = ex
         end
        end
    return 0
endProcedure outNl
/* copy err end   *****************************************************/
/* copy out begin ******************************************************
    out interface simple with say only
***********************************************************************/
outIni: procedure expose m.
parse arg msg
    return
endProcedure outIni

/*--- output a message to the current destination -------------------*/
out: procedure expose m.
parse arg msg
    say msg
    return 0
endProcedure out

/*--- set a new out destination and return old one ------------------*/
outDst: procedure expose m.
parse arg d
    return ''
endProcedure outDst
      /* return the contents of a string or std input */
inp2str: procedure expose m.
    parse arg rdr, opt
    return rdr
endProcedure inp2str
/* copy out end   *****************************************************/
/* copy ut begin  *****************************************************/
/*--- if function  warning all3 arguments get evaluated|
                   e.g if(x=0, 'infinity', 1/0) will fail| -----------*/
if: procedure expose m.
parse arg co, ifTrue, ifFalse
    if co then
        return ifTrue
    else
        return ifFalse
endProcedure if
/*--- embedded ASSignement:
      assign the second argument to the variable with name in first arg
      and return the value assigned ----------------------------------*/
ass:
    call value arg(1), arg(2)
    return arg(2)
/*--- embedded ASSignement only if NotNull:
      assign the second argument to the variable with name in first arg
      if the second arg is not null, return new value ---------------*/
assIf:
    if arg(2) == '' then
        return value(arg(1))
    call value arg(1), arg(2)
    return arg(2)

/*--- return first nonNull argument ---------------------------------*/
nn:
    if arg(1) \== '' then
        return arg(1)
    if arg(2) \== '' then
        return arg(2)
    call err 'nn() both args empty'

/*--- embedded ASSignement return NotNull:
      assign the second argument to the variable with name in first arg
      and return 1 if value not null, 0 if null ----------------------*/
assNN:
    call value arg(1), arg(2)
    return arg(2) \== ''

/*--- return current time and cpu usage ------------------------------*/
timing: procedure expose m.
return return time() 'ela='time('E') 'cpu='sysvar('syscpu'),
            'su='sysvar('syssrv')

timingTest: procedure expose m.
    say 'begin' timing()  sysvar('sysnode')
    do 30000000
       end
    say 'end  ' timing()
return

/*--- sleep several seconds ------------------------------------------*/
sleep: procedure expose m.
parse arg secs, sayIt
    if sayit <> 0 then
        say 'sleeping' secs 'secs' time()
    CALL SYSCALLS 'ON'
    ADDRESS SYSCALL "sleep" secs
    CALL SYSCALLS 'OFF'
    if sayit <> 0 then
        say 'slept' secs 'secs' time()
    return
endProcedure sleep

/*--- elongate inp with spaces up to given len -----------------------*/
elong: procedure expose m.
parse arg inp, len
    if length(inp) >= len then
        return inp
    return left(inp, len)
endProcedure elong

/*--- quote string txt using quoteChar qu ("""" ==> ") ---------------*/
quote: procedure expose m.
parse arg txt, qu
    if qu = '' then
        qu = '"'
    res = qu
    ix = 1
    do forever
        qx = pos(qu, txt, ix)
        if qx = 0 then
            return res || substr(txt, ix) || qu
        res = res || substr(txt, ix, qx-ix) || qu || qu
        ix = qx + length(qu)
        end
endProcedure quote

/*--- return the count of occurrences of needle in heyStack ----------*/
posCount: procedure expose m.
parse arg needle, hayStack, start, fin
    if start = '' then
        start = 1
    if fin = '' then
        fin = length(hayStack) + 1 - length(needle)
    do cnt = 0 by 1
        start = pos(needle, haystack, start)
        if start < 1 | start > fin then
             return cnt
        start = start + length(needle)
        end
endProcedure posCount

repAll: procedure expose m.
parse arg src, w, new
    res = ''
    cx = 1
    do forever
        nx = pos(w, src, cx)
        if nx < 1 then
            return res || substr(src, cx)
        res = res || substr(src, cx, nx-cx) || new
        cx = nx + length(w)
        end
endProcedure repAll

repAllWords: procedure expose m.
parse arg src, w, new
    res = ''
    wx = 0
    cx = 1
    do forever
        wx = wordPos(w, src, wx+1)
        if wx < 1 then
            return res || substr(src, cx)
        nx = wordindex(src, wx)
        res = res || substr(src, cx, nx-cx) || new
        cx = nx + length(w)
        end
endProcedure repAllWords
/* copy ut end ********************************************************/
}¢--- A540769.WK.REXX.O13(DBXSRCH) cre=2012-08-23 mod=2012-08-24-11.04.46 A540769 ---
$<#¢
AC04002W
AX01001W
BV01002W
CD01004C
CD02014W
CD03020W
CD03021C
CZMIX02W
DGMIX01C
DG01049W
DG01050C
DG02008W
DG02009W
DI01001W
DI05009W
DP08012C
DW10004C
ER01033W
ER01034C
EU04002W
EU99001W
FI04052C
FI04053W
GM01008C
KB01004C
KC01009W
MARTIN0W
MARTIN1C
MARTIN2C
MF03003W
MI01019C
NITRIG1C
NI02174C
NI02175C
NI03003W
NI04003C
NI10034C
NI10035W
NI10036C
OS03005C
OZ01009C
PC01032C
RA01001W
RENI001D
RV01009W
SU10001W
SV10016C
TG01012C
TT01002W
TT01003C
TV01001W
UU02011C
VV21005W
VV24001C
WA01038C
WB20003C
WF01024C
WI02033C
WI02034W
WI02035C
WK09901C
WK99101C
WK99501C
WU10010W
WU36001W
WU40018C
WU40019C
WU91001W
WY40001C
XB03051W
XB03052C
XR01023W
XR01024C
YN01003W
$!
$@for w $@¢
w = strip(left($w, 7))
call lmm 'dsn.dbx.cdl('w'*)'
$!
$| $@¢
qq=''
$@for w $@¢
    qq = qq','strip($w)
    if length(qq) > 50 then $@¢
        $$- 'SELECT' substr(qq, 2)
        qq=''
        $!
    $!
$$- 'SELECT' substr(qq, 2)
$!
$#out                                              20120824 11:04:22
SELECT AC040020,AX010010,BV010020,CD010040,CD010041,CD020140
SELECT CD020141,CD020142,CD030200,CD030210,CZMIX020,DGMIX010
SELECT DG010490,DG010500,DG020080,DG020090,DI010010,DI050090
SELECT DP080120,DP080121,DP080122,DW100040,ER010330,ER010340
SELECT ER010341,EU040020,EU040021,EU990010,FI040520,FI040530
SELECT GM010080,KB010040,KC010090,KC010091,MARTIN00,MARTIN01
SELECT MARTIN10,MARTIN20,MF030030,MF030031,MF030032,MI010190
SELECT MI010191,MI010192,MI010193,NITRIG10,NI021740,NI021741
SELECT NI021750,NI021751,NI030030,NI030031,NI040030,NI040031
SELECT NI100340,NI100341,NI100342,NI100343,NI100344,NI100345
SELECT NI100346,NI100347,NI100348,NI100350,NI100351,NI100352
SELECT NI100353,NI100354,NI100360,OS030050,OZ010090,PC010320
SELECT RA01001A,RA01001B,RA01001C,RA010010,RA010011,RA010012
SELECT RA010013,RA010014,RA010015,RA010016,RA010017,RA010018
SELECT RA010019,RENI0010,RENI0011,RV010090,SU100010,SV100160
SELECT SV100161,TG010120,TG010121,TT010020,TT010021,TT010030
SELECT TT010031,TV010010,TV010011,UU020110,VV210050,VV240010
SELECT WA010380,WA010381,WB200030,WF010240,WI020330,WI020340
SELECT WI020350,WK099010,WK099011,WK099012,WK991012,WK991013
SELECT WK995010,WU100100,WU100101,WU100102,WU360010,WU360011
SELECT WU400180,WU400181,WU400182,WU400183,WU400190,WU400191
SELECT WU910010,WY400010,XB030510,XB030520,XR010230,XR010240
SELECT YN010030,YN010031,YN010032
$#out                                              20120823 15:40:05
SELECT AC040020,AX010010,BV010020,CD010040,CD020140,CD020141
SELECT CD020142,CD030200,CD030210,DGMIX010,DG010490,DG010500
SELECT DG020080,DG020090,DI010010,DI050090,DP080120,DP080121
SELECT DP080122,DW100040,ER010330,ER010340,ER010341,EU040020
SELECT EU040021,EU990010,FI040520,FI040530,GM010080,KC010090
SELECT KC010091,MARTIN00,MARTIN01,MARTIN10,MARTIN20,MF030030
SELECT MF030031,MF030032,NITRIG10,NI021740,NI021741,NI021750
SELECT NI030030,NI030031,NI040030,NI040031,NI100340,NI100341
SELECT NI100342,NI100343,NI100344,NI100345,NI100346,NI100347
SELECT NI100348,NI100350,NI100351,NI100352,NI100353,NI100354
SELECT NI100360,OS030050,OZ010090,PC010320,RENI0010,RENI0011
SELECT SU100010,SV100160,SV100161,TG010120,TG010121,TT010020
SELECT TT010021,TT010030,TT010031,TV010010,TV010011,UU020110
SELECT VV210050,VV240010,WA010380,WA010381,WB200030,WF010240
SELECT WI020330,WI020340,WI020350,WK099010,WK099011,WK099012
SELECT WK991012,WK991013,WK995010,WU100100,WU100101,WU100102
SELECT WU360010,WU360011,WU400180,WU400181,WU400182,WU400190
SELECT WU400191,WU910010,WY400010,XB030510,XB030520,XR010230
SELECT XR010240,YN010030,YN010031,YN010032
$#out                                              20120823 15:39:36
*** compile error ***
scanErr ending $! expected after ¢
last token  scanPosition
atEnd after line 85: $$- 'SELECT' substr(qq, 2)
$#out                                              20120823 15:35:33
}¢--- A540769.WK.REXX.O13(DBXWSH) cre=2009-10-05 mod=2009-10-05-16.01.14 A540769 ---
$=auft=DSN.DBX.AUFTRAG
$=auCo=DSN.DBA.ZUEGEL.AUFTRAG.DIRPRO
$=auCo=A540769.TMP.AUFTCOPY
$;
$<=/wsls/
   WK90001C 01
$*(   WK90002C 0
   WK90003C 0
   WK90001C 01
   WK90002C 0
   WK90001C 01
   WK90002C 0
   WK90003C 0
   WK90001C 01
   WK90002C 0
$*)   WK90003C 0
$/wsls/
$@for ii $@/doOne/
     parse value $ii with mbr opt
     c = '-a'mbr 'i rr2.DBoF' strip(opt)
     result = 'fail'
     res = adrTso('%DBX' c, '*')
     say 'res' res 'for dbx' c
     trace ?r
     call readDsn $auft'('mbr')', 'I.'
     call writeDsn $auCo'('mbr') ::f', 'I.', , 1
$/doOne/
$***out            20091005 15:49:00
$***out            20091005 15:43:34
$***out            20091005 15:41:51
$***out            20091005 15:40:43
$***out            20091005 15:40:26
$***out            20091005 15:40:03
$***out            20091005 15:38:07
$***out            20091005 15:23:10
$***out            20091005 15:22:56
$***out            20091005 15:22:39
$***out            20091005 14:43:13
$***out            20091005 14:42:09
$***out            20091005 14:41:34
$***out            20091005 14:40:07
$***out            20091005 14:38:05
$***out            20091005 14:37:31
$***out            20091005 14:36:09
$***out            20091005 14:33:33
$***out            20091005 14:30:05
-aWK90001C i DBZF
-aWK90002C i DBZF 23
-aWK90003C i DBZF
$***out
}¢--- A540769.WK.REXX.O13(DBX0823) cre=2012-11-26 mod=2012-11-26-16.21.23 A540769 ---
/* rexx ****************************************************************
synopsis:     DBX fun args                                       v1.4

edit macro fuer CS Nutzung von DB2 AdminTool 10.1
           (die a* Funktionen gehen auch mit tso dbx ...)

    ?            diese Hilfe
    a,aw,ac pr   naechste AuftragsId suchen fuer praefix pr
                 a: anzueigen, aw, ac entsprechendes Member editieren
    n, nt        neuen Auftrag erstellen (nt = test)
    q subSys?    query und expandiert Scope Zeilen vom Db2Catalog
                     * fuegt alle bestehenden Objekte ein
                     * ergaenzt scope Zeile mit infos, z.B tb -> ts
                     * UNDO um Expansion rueckgaengig zu machen
                     * mit q, qq, etc. Zeile selekieren,
                               sonst werden alle expandiert
                     * funktioniert nicht nur in Auftrag
                 falls SubSys angegeben wird da gesucht sonst DBAF/DBOF
    c opt?       compare source gegen target
    i subs nct changes in Db2Subsystem subSys importieren
                 subs = sub(,sub)*: Liste von Subsystemen/Umgebungen
                 sub: DBAF (lokal), RR2/DBOF (im PTA), RZ8(betr. Subsys)
                      ET, IT, PA (pta), PR (prod), pq(pta+rq2)
                          ==> Rz/Subsys des PromotionPaths
                 nct: Nachtraege:
                     leer: noch nicht in dieses SubSys importierte
                     =   : vom letzten import plus neue
                     89A : Nachtraege 8, 9 und A
    v opt?       version files erstellen für altes Verfahren
    vc vj vs vt ec ej es et nt?   : view or edit cdl,jcl,srcDdl,trgDdl
    sw rz?       WSL ins RZ rz schicken und clonen, ohne rz multiclone
    do cmd for auftraege: batchfunktion cmd fuer jeden auftrag

    opt?         Optionale Optionen =, -f, -=f etc. (fuer c, v, st)
        =        statt aktuelle source aus Db2 extrahieren
                       letzte extrahierte Version als Source brauchen
        -f       force: ignoriere QualitaetsVerletzungen

    cloneWsl     dbaMulti Funktionalitaet ist hier implementiert

Typen fuer scope und dbx q (analog adminTool, grossOderKlein ist egal):
    type                DB TS TB VW AL IX UDT UDF TG SP SQ SY
    1stelliges Kuerzel  D  S  T  V  A  X  E   F   J  O  Q  Y
Optionen im Auftrag: v10, v72, keeptgt 0, qCheck 0, dbaCheck 0
Variabeln im Auftrag (expandiert werden $varName imd ${varName})
                      varName ist case sensitive|)
    srcNm        NamensKonvention compare source (z.B. DBAF)
    trgNm        NamensKonvention compare target (z.B. DBAF)
    impNm        NamensKonvention import Ziel (z.B. DBOF)
    subsys       Db2 Subsystem (source, target, import, je nachdem)
     Optionen:   ca, bmc, ibm
   Funktionen:   ia (imp+ana), ie (ia+exe), ee,ve (exejcl), ew,vw (wsl)
************************************************************************
23. 8.2012 W. Keller v1015 für extract
               */ /* end of help
13. 7.2012 W. Keller typo in query scope
18. 5.2012 W. Keller im neuen Auftrag source DX0G target DC0G/DCVG @rz8
                     PromotionPaths angepasst und vereinfacht
 4. 4.2012 W. Keller sqlQuery via csm for dbx q and qualitycheck
 4. 4.2012 W. Keller fix, import submits after last import empty, chroi
14. 2.2012 W. Keller ca  prototype
23.12.2011 W. Keller bmc prototype
13.12.2011 W. Keller RZ0, ToolPrefix, csmCopy
 3.11.2011 W. Keller Zuegeltermine 2012
 6. 9.2011 W. Keller v10 RZ8 DE0G UND DM0G ausgebaut
29.08.2011 W. Keller v10 default mit p8 und p9 alias
24.06.2011 W. Keller v10 und v72
 8.06.2011 W. Keller stored procedures editiert und version=%
26.05.2011 W. Keller qCheck 0 eingefügt
30.03.2011 W. Keller import et, it, .... , DD0G -> it, trg dc0g, i pa
24.12.2010 W. Keller plexZ (mit location CHROI00Z...)
10.12.2010 W. Keller db2 release 915, damit instead of trigger kommen
19.11.2010 W. Keller viewEdit macht jetzt view für v* statt immer edit
14.10.2010 W. Keller dp4g und dp2g in rz4.* bzw rz2.*, Zuegelsch 2012
24. 8.2010 W. Keller zusätzliche Typen für scope und dbx q
23. 8.2010 W. Keller dbzf ausgebaut
 6. 8.2010 W. Keller vc vj vs vt ec ej es et nt? eingebaut
 5. 8.2010 W. Keller stepName recTrg instead of recSrc for target
12. 7.2010 W. Keller sq=sequence für compare (fehlt noch in q)
18. 2.2010 W. Keller class=BS0 für PTA (wegen RR25 und RR26)
11. 2.2010 W. Keller dbaCheck mit ex0
 9. 2.2010 W. Keller sendJob timeout 600 auch in extractScopeVersion
 1.12.2009 W. Keller CSM.RZ1.P0.EXEC statt CMS.DIV...
12.11.2009 W. Keller Qualitätsfehler ohne -f stoppt wieder
25.10.2009 W. Keller DeltaNew überall, -a Optione, batch und do removed
28.09.2009 W. Keller Optionen keepTgt 0 und dbaCheck 0
10.09.2009 W. Keller mask ausschalten falls kein maskFile
07.09.2009 W. Keller fix error with dbaMulti
25.08.2009 W. Keller err statt fehl in line 1001
12.08.2009 W. Keller batch (ohne for) geflickt, ac pr -r: return new mbr
12.08.2009 W. Keller Zuegelschub wird nach Datum ausgesucht
19.05.2009 P. Kuhn   DEFER im Masking ignorieren
05.03.2009 P. Kuhn   Qualitaets-Check "ts not logged" eingebaut
18.12.2008 p. kuhn   neues Delta Merge Verfahren im import fuer DQ0G
18.12.2008 p. kuhn   SW fuer DVBP im RZ2 (frueher im RZ4)
10.12.2008 p. kuhn   Timeout vom Sendjob von 30 auf 600 Sek. erhoeht.
28.11.2008 w. keller v9 Fehler bei leerer Selektion
24.09.2008 p. kuhn   v9 checks
15.09.2008 p. kuhn   beim ersten import wird cdl dbaCheck't und editiert
09.09.2008 w. keller target mit RZ (job holt ddl, version aus RZ), opt =
08.08.2008 w. keller import mit wildcards
24.07.2008 w. keller overwrite ausgebaut +25.7
24.06.2008 w. keller fix spezialFall für DB         +18.7
19.05.2008 w. keller qualitaetsKontolle in c,v und st und -f Option
13.05.2008 w. keller rw, rs, sw, st und do ... for ... eingebaut
25.02.2008 w. keller subSys argument für dbx q
22.11.2007 w. keller fun v für ObjectCompare Verfahren inkl db ddl save
                     dq0g mit eigenen Libraries
12.11.2007 w. keller DSN für neuen Wartungsstand
05.06.2007 w. keller neu
***********************************************************************/
/* Ideen, Wünsche ******************************************************
     AuftragsId aus Prototyp bestimmen
     LCTL
     sämtliche infos aus XLS
     jedesmal Zwischenspeichern mit und restore Funktion
     analyze generieren, falls möglich
     batch Funktionen ganzen Zügelschub importieren usw. ==> mit wsh|
     generierte Runs starten in richtiger Reihenfolge
     mails an Entwickler schicken
     Rückmeldung falls keine changes (leeres cdl)

     Type Tabelle
                       char   type Variabeln
                                   fuer extract
        db             d      DB
        ts             s      TS
        tb/vw/alias    a v t  -    own  name
        ix             x      IX
        userDefinedTy  e      -    sch  udt
        function       f      -    sch  udf
        trigger        j      TG   qual name
        storedProc     o      SP   qual name
        sequence       q      SQ   qual name
        synonym        y      SY   qual name

**** alte Funktion (braucht es nicht mehr) *****************************
    sw rz?       WSL aus RZ rz holen und clonen, ohne rz mulitclone
    rs rz        source ddl und version aus RZ rz holen
    st opt? rz   target ddl und version extrahieren und ins rz schicken

***********************************************************************/
    m.debug = 0
    call errReset h
    if sysvar(sysispf) = 'ACTIVE' then
        call adrIsp 'Control errors return'
    call jIni
    parse upper arg oArgs
    oArg1 = word(oArgs, 1)
    m.auftrag.dataset = 'DSN.DBX.AUFTRAG'
    m.editMacro = 0
    m.editProc  = 0
    if oArgs = '' then do
        if adrEdit('macro (oArgs) NOPROCESS', '*') <> 0 then
            call errHelp('keine Argumente und kein editMacro rc =' rc)
        m.editMacro = 1
        call adrEdit 'caps off'
        call adrEdit '(x) = member'
        m.auftrag.member = x
        m.edit.member = x
        call adrEdit '(x) = dataset'
        m.auftrag.dataset = x
        m.edit.dataset = x
        end
    if oArgs = '' | pos('?', oArgs) > 0 then
        exit help()
    call dbxIni
    m.exitValue = 0
    call work oArgs
    call sqlDisconnect
    exit m.exitValue

/*--- hier wählen wir die wirklich Arbeit aus -----------------------*/
work: procedure expose m.
parse arg wArgs
    parse upper var wArgs fun args
    args = strip(args)
    call mapReset e, 'K'
    call mapPut e, 'dol', '$'
    m.auftrag.force = 0
    do while abbrev(fun, '-')
        r = substr(fun, 3)
        if abbrev(fun, '-A') then do
             if verify(r, '.()', 'm') < 1 then do
                  m.auftrag.member = r
                  end
             else do
                 m.auftrag.dataset = dsnSetMbr(r)
                 m.auftrag.member =  dsnGetMbr(r)
                 end
             end
        else if abbrev(fun, '-F') then do
             m.auftrag.force = 1
             end
        else do
            call err 'bad opt' fun 'in' wArgs
            end
        parse var args fun args
        if fun = '' then
            return errHelp('fun missing in args:' wArgs)
        end

    if m.auftrag.dataset = 'A540769.DBX.AUFTRAG' then do
        m.libSkels = 'A540769.wk.skels(dbx'
        m.libPre   = 'A540769.DBX'
        end
    else if m.auftrag.dataset = 'DSN.DBQ.AUFTRAG' then do
        m.libSkels = 'ORG.U0009.B0106.KIDI63.SKELS(dbx'
        m.libPre   = 'DSN.DBQ'
        end
    else do
        m.libPre   = 'DSN.DBX'
        m.libSkels = 'ORG.U0009.B0106.KIDI63.SKELS(dbx'
        end
    if 0 then do   /* ??? testSkels */
        if userid() = 'A540769' then
            m.libSkels = 'A540769.wk.skels(dbx'
        say '??? test skels' m.libSkels '|||'
        end
    m.libSpezial = m.libPre'.spezial'
    call configureRZ sysvar('SYSNODE')
    m.sysRz = m.myRz
    call mapPut e, 'rexxLib', 'ORG.U0009.B0106.KIDI63.EXEC'
    call mapPut e, 'ovrDD', 'DISP=SHR,DSN='m.libPre'.MASK(OVERRIDE)'
    call mapPut e, 'libPre', m.libPre

    if fun = 'Q' then              /* macht process selber | */
        return queryScope(args)
    if m.editMacro & ^ m.editProc then do
        call adrEdit 'process'
        m.editProc = 1
        end
    if wordPos(fun, 'A AC AW') > 0 then
        return nextAuftrag(word(args, 1), substr(fun, 2), word(args, 2))
    else if fun = 'COPYDUMMY' then
        return copyDummy(args)
    else if fun = 'CLONEWSL' then
        return cloneWsl(word(args, 1), word(args, 2), 1==word(args, 3))

    call memberOpt
    if wordPos(fun, 'N NT') > 0 then
        call neuerAuftrag (fun = 'NT'), args, m.auftrag.member
    else if fun = 'C' | fun = 'V' | fun = 'ST' then
        call compare fun, args
    else if wordPos(fun, 'I IA IE') > 0 then
        call import fun, args
    else if fun = 'N' then
        call neuerNachtrag args
    else if fun = 'RS' then
        call receiveSource args
    else if fun = 'RW' then
        call receiveWSL args
    else if fun = 'SW' then
        call sendWSL args
    else if wordPos(fun, 'VC VE VJ VS VT VW EC EE EJ ES ET EW') > 0 then
        call viewEdit fun, args
    else
        call errHelp 'bad fun' fun 'in args' args, , ' '
    if m.auftrag.orig = m.auftrag.0 | m.auftrag.0 = '' then do
        end
    else do
        if abbrev(m.auftrag.orig, 'rmQu') then do
                     /* alte | Zeilen loeschen */
            oldOr = word(m.auftrag.orig, 2)
            ox = 0
            do ix = 1 to m.auftrag.0
                if abbrev(word(m.auftrag.ix, 1), '|') & ix <= oldOr then
                    iterate
                ox = ox + 1
                m.auftrag.ox = m.auftrag.ix
                end
            m.auftrag.0 = ox
            m.auftrag.orig = 'rep'
            end
        if m.editMacro & m.auftrag.dataset = m.edit.dataset ,
                            & m.auftrag.member  = m.edit.member then do
            if m.auftrag.orig = 'rep' then do
                call adrEdit 'delete .zf .zl'
                m.auftrag.orig = 0
                end
            do lx = m.auftrag.orig+1 to m.auftrag.0
                li = left(m.auftrag.lx, 72)
                call adrEdit "line_after .zl = (li)"
                end
            call adrEdit 'save', 4
            end
        else do
            call writeDsn dsnSetMbr(m.auftrag.dataset,
                                  ,m.auftrag.member), m.auftrag.,,1
            end
        end
    return
endProcedure work

/*--- ini the CS config ----------------------------------------------*/
dbxIni: procedure expose m.
    m.timeout = 600
    m.uId = strip(userid())
    if m.uId = 'A234579' then
        m.uNa = 'Marc'
    else if m.uId = 'A390880' then
        m.uNa = 'Martin'
    else if m.uId = 'A540769' then
        m.uNa = 'Walter'
    else if m.uId = 'A666308' then
        m.uNa = 'Frank'
    else if m.uId = 'A754048' then
        m.uNa = 'Alessandro'
    else if m.uId = 'A790472' then
        m.uNa = 'Agnes'
    else if m.uId = 'A828386' then
        m.uNa = 'Reni'
    else if m.uId = 'A914227' then
        m.uNa = 'Gerrit'
    else
        m.uNa = m.uId
    m.scopeTypes = 'DB TS TB VW AL IX UDT UDF TG SP SQ SY'
    m.scopeType1 = 'D  S  T  V  A  X  E   F   J  O  Q  Y'
    m.nachtragChars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
           /* PromotionPaths */
    m.iProm.1 = 'ET IT PQ PA PR'
    m.iProm.2 = 'RZ1/DBAF,RZ8/DC0G RZ1/DBTF,RZ8/DD0G,RZZ/DE0G' ,
                        'RQ2/DBOF,RR2/DBOF RR2/DBOF RZ2/DBOF'
    m.iProm.3 = 'RZ1/DBBA,RZ8/DCVG RZ1/DVTB,RZ8/DDVG,RZZ/DEVG' ,
                        'RQ2/DVBP,RR2/DVBP RR2/DVBP RZ2/DVBP'
    m.iProm.0 = 3
    return
endProcedure dbxIni

/*--- expand the import target list entered by the user
          to a list or rz/subsys, with mySub first and the rest sorted*/
iListExpand: procedure expose m.
parse upper arg srcList
    tl = iPromExpand(translate(space(srcList, 0), '/ ', '.,'))
    local = ''
    remote = ''
    do tx=1 to words(tl)
       t1 = word(tl, tx)
       if abbrev(t1, m.myRz'/') then
           local = wordInsAsc(local, t1)
       else
           remote = wordInsAsc(remote, t1)
       end
    return local remote
endProcedure iListExpand

/*--- expand a target using iProm infos to a list of rz/subsys -------*/
iPromExpand: procedure expose m.
parse arg inp
    if words(inp) <> 1 then do   /* several words, expand each */
        out = ''
        do wx=1 to words(inp)
           out = out iPromExpand(word(inp, wx))
           end
        return out
        end
    if pos('/', inp) > 0 then   /* already expanded */
        return inp
    if inp == '?*?' then do /* find current promotionPath */
        tg = m.scopeTrg.rz'/'m.scopeTrg.subSys
        do tx=2 to m.iProm.0
            if pos(tg, m.iProm.tx) > 0 then
                return m.iprom.tx
            end
        call err 'target' tg 'not in any PromotionPath'
        end
    px = wordPos(inp, m.iProm.1) /* one promotion environment */
    if px > 0 then
        return translate(word(iPromExpand('?*?'), px), ' ', ',')
    if length(inp) = 4 then     /* prepend rz to subsys */
        return m.myRz'/'inp
          /* all subsys that match something */
    alOr = iPromExpand('?*?')
    all = translate(alOr, ' ', ',')
    out = ''
    do ax = 1 to words(all)
        if pos(inp, word(all, ax)) > 0 then
            if wordPos(word(all, ax), out) < 1 then
                out = out word(all, ax)
        end
    if out \== '' then
        return out
    call err 'inp' inp ' not found in promotionPath' alOr
endProcedure iPromExpand

wordInsAsc: procedure expose m.
parse arg lst, wrds
     do wx=1
        w = word(wrds, wx)
        if w == '' then
            return space(lst, 1)
        do rx=1 to words(lst) while w > word(lst, rx)
            end
        r1 = word(lst, rx)
        if r1 == '' then
            lst = lst w
        else if w < r1 then
            lst = subWord(lst, 1, rx-1) w subWord(lst, rx)
        end
endProcedure wordInsAsc

charInsAsc: procedure expose m.
parse arg lst, chrs
     do wx=1 to length(chrs)
        c = substr(chrs, wx, 1)
        do rx=1 to length(lst) while c > substr(lst, rx, 1)
            end
        r1 = substr(lst, rx, 1)
        if rx > length(lst) then
            lst = lst || c
        else if c < r1 then
            lst = left(lst, rx-1) || c || substr(lst, rx)
        end
    return lst
endProcedure wordInsAsc

/*--- batch funktionen -----------------------------------------------*/
batchOld: procedure expose m.
parse upper arg args
    m.auftrag.dataset = 'DSN.DBX.AUFTRAG'
    wx = 1
    do forever
        w1 = word(args, wx)
        if w1 = '' then
            return 0
        if w1 = 'ADATASET' then do
            m.auftrag.dataset = word(args, wx+1)
            wx = wx+2
            end
        else if w1 = 'DO' then do
            fx = wordPos('FOR', args, wx)
            if fx < 1 then
                 call err 'DO ohne FOR in' args
            cmd = subWord(args, wx+1, fx-wx-1)
            do wx=fx+1
                ww = word(args, wx)
                if ww = '' then
                    leave
                m.auftrag.member = ww
                say 'batch do' cmd 'for' ww '...'
                call work cmd
                end
            end
        else do
            if wordPos(translate(w1), 'A AC AW') > 0 then do
                drop m.auftrag.member
                cmd = subword(args, wx)
                end
            else do
                m.auftrag.member = w1
                cmd = subword(args, wx+1)
                end
            say 'batch do' cmd 'for mbr' m.auftrag.member
            call work cmd
            return 0
            end
        end
    return 0
endProcedure batchOld

/*--- create the necessary dbx libries in the specified rz -----------*/
copyDummy: procedure expose m.
parse arg rz
    call copyDummy1 rz, 'DSN.DBX.AUFTRAG(DUMMY)'
    call copyDummy1 rz, 'DSN.DBX.AUTO(DUMMY)'
    call copyDummy1 rz, 'DSN.DBX.CDL(DUMMY)'
 /* call copyDummy1 rz, 'DSN.DBX.DBAUTO(DUMMY)'
    call copyDummy1 rz, 'DSN.DBX.DBSRCCAT(DUMMY)'
    call copyDummy1 rz, 'DSN.DBX.DBSRCDDL(DUMMY)'
    call copyDummy1 rz, 'DSN.DBX.DBTRGCAT(DUMMY)'
    call copyDummy1 rz, 'DSN.DBX.DBTRGDDL(DUMMY)'
 */
    call copyDummy1 rz, 'DSN.DBX.JCL(DUMMY)'
    call copyDummy1 rz, 'DSN.DBX.MASK'
 /* call copyDummy1 rz, 'DSN.DBX.OVRCAT(DUMMY)' */
    call copyDummy1 rz, 'DSN.DBX.SENDCF(DUMMY)'
    call copyDummy1 rz, 'DSN.DBX.SPEZIAL(DUMMY)'
    call copyDummy1 rz, 'DSN.DBX.SRCCAT(DUMMY)'
    call copyDummy1 rz, 'DSN.DBX.SRCDDL(DUMMY)'
    call copyDummy1 rz, 'DSN.DBX.TRGCAT(DUMMY)'
    call copyDummy1 rz, 'DSN.DBX.TRGDDL(DUMMY)'
    return 0
 endProcedure copyDummy

copyDummy1: procedure expose m.
parse arg sys, dsn
    if sysDsn("'"dsn"'") <> 'OK' then
        call writeDsn dsn, x, 0, 1
    call csmCopy dsn, sys'/'dsn
    return

/*--- die Konfiguration pro db2 Subsys -------------------------------*/
configureSubsys: procedure expose m.
    parse arg rz, subsys
    call mapPut e, 'subsys', subsys
    if rz = 'RZ8' then
        call mapPut e, 'location', 'CHROI000'subsys
    else if rz = 'RZZ' then
        call mapPut e, 'location', 'CHROI00Z'subsys
    else
        call mapPut e, 'location', 'CHSKA000'subsys
    return
endProcedure configureSubsys

/*--- die Konfiguration pro RZ ---------------------------------------*/
configureRZ: procedure expose m.
    parse arg rz, rel px, toolV
    if rz = 'RZ0T' then
        rz = 'RZ0'
    if rz = '' then
        rz = m.myRz
    else
        m.myRz = rz
    m.jobCard = 'jobCa'
    call mapPut e, 'jobCla', 'LOG'
    rx = pos(rz'/', m.iProm.2)
    if rx < 1 then
        m.mySub = '?noSubsys?'
    else
        m.mySub = substr(m.iProm.2, rx+4, 4)
    call mapPut e, 'rz', rz
    zz = overlay('Z', rz, 2)
    call mapPut e, 'zz', zz
    if rel == '' then
        rel = 1015
    if px == '' then
        px = if(rz\=='RZ0', 'P0', 'PA')
    call mapPut e, 'db2rel', rel
    call mapPut e, 'db2relAl', px
    call mapPut e, 'dsnload', if(rz=='RZ0', 'DSN', 'DB2@') ,
           || '.'zz'.'px'.DSNLOAD'
    if toolV \== '' then do
        say 'v72 nicht mehr untertstuetzt, v10 wird benutzt'
        toolV = mapGet(e, 'toolVers', 10)
        toolV = ''
        end
    call mapPut e, 'toolVers', toolV
 /* if toolV == 10 then do  */
        call mapPut e, 'toolPreP', 'DSN.TOOLS.'zz'.P0'
        call mapPut e, 'toolPreC', 'DSN.TOOLS.'zz'.C0'
 /*     end
    else if toolV == 72 then do
        call mapPut e, 'toolPreP', 'DSN.TOOLS.'zz'.P8'
        call mapPut e, 'toolPreC', 'DSN.TOOLS.'zz'.C8'
        end
    else
        call err 'bad toolVersion' toolV
 */ if rz = 'RZ1' then do
        if m.libPre = 'DSN.DBQ' then do
            m.mySub  = 'DQ0G'
            m.jobCard = 'jobCQ'
            call mapPut e, 'toolPreP', 'DSN.ADB72.P0'
            call mapPut e, 'toolPreC', 'DSN.ADB72.C0'
            end
        end
    else if rz = 'RR2' then do
        call mapPut e, 'jobCla', 'BS0'
        end
    return
endProcedure configureRZ

/*--- Member Namen prüfen und Auftrag lesen---------------------------*/
memberOpt: procedure expose m.
    if m.auftrag.dataset <> m.libPre'.AUFTRAG' then
        call err 'dbx sollte' m.libPre'.AUFTRAG editieren, nicht' ,
                    m.auftrag.dataset
    m8 = substr(m.auftrag.member, 8, 1)
    if pos(m8, 'CW')  < 1 then
        call err 'Member muss 8 stellig sein und mit C oder W enden',
                       'nicht' m.auftrag.member
    m.optOvr = 0 /* (m8 == 'W') & (m.libPre ^== 'DSN.DBQ') */
    m.optAuto = 1
    call readAuftrag '', m.auftrag.dataset, m.auftrag.member
    return
endProcedure memberOpt

/*--- Auftrag einlesen -----------------------------------------------*/
readAuftrag: procedure expose m.
parse arg sys, pds, mbr
    editingAuftrag = 0
    if sys = '' & m.editMacro then do
        call adrEdit '(em) = member'
        call adrEdit '(ed) = dataset'
        editingAuftrag = ed = pds & em = mbr
        end
    if editingAuftrag then do
        if adrEdit('(zl) = lineNum .zl', 4) = 4 then
            zl = 0
        m.auftrag.0 = zl
        do lx=1 to zl
            call adrEdit "(li) = line" lx
            m.auftrag.lx = li
            end
        end
    else do
        dsn = dsnSetMbr(m.auftrag.dataset, m.auftrag.member)
        if sys = '' then
          if sysDsn("'"dsn"'") <> 'OK' then
            call err 'auftrag' dsn 'existiert nicht:' sysDsn("'"dsn"'")
        call readDsn sys'/'dsn, m.auftrag.
        end
    m.auftrag.orig = m.auftrag.0
    return
endProcedure readAuftrag

/*--- naechste AuftragsNummer suchen ---------------------------------*/
nextAuftrag: procedure expose m.
parse arg pre, make, rz opt
    if abbrev(rz, '-') then do
        opt = rz
        rz = ''
        end
    opt = translate(opt)
    if rz = '' | rz = '*' then
        rz = m.myRz
    if m.myRz <> 'RZ1' then
        call err 'Auftrag für RZ' rz 'muss aus RZ1 erstellt werden'
    auft = m.libPre'.AUFTRAG'
    call mAdd mCut(na, 0), auft, 'DSN.DBA.CLON.WSL'
    max = pre
    do nx=1 to m.na.0
        lmm = lmmBegin(dsnSetMbr(m.na.nx, pre'*'))
        mb = lmmNext(lmm)
        fi = mb
        la = ''
        do cnt=2 by 1 while mb <> ''
            la = mb
            mb = lmmNext(lmm)
            end
        call lmmEnd lmm
        say left(fi, 8) '-' left(la, 8)right(cnt-2, 5) ,
            'member in' dsnSetMbr(m.na.nx, pre'*')
        if la >> max then
            max = la
        end
    nn = left(max, 7, '0')
    do cx=7 by-1 to length(pre)+1,
            while pos(substr(nn, cx, 1), '0123456789') > 0
        end
    if cx >= 7 then
        nn = ''
    else do
        pp = 1 + substr(nn, cx+1)
        if length(pp) > 7-cx then
            nn = ''
        else
            nn = left(nn, cx) || right(pp, 7-cx, 0)
        end
    if length(nn) <> 7 then do
        say 'max Auftrag' max 'kein naechster bestimmbar'
        end
    else if make = '' then do
        say 'max Auftrag' max 'naechster' nn'?'
        end
    else do
        nn = nn || make
        say 'max Auftrag' max 'naechster' nn
        m.auftrag.0 = 0

        call neuerAuftrag 0, rz, nn
        dsnNN = dsnSetMbr(auft, nn)
        call writeDsn dsnNN, m.auftrag.
        if opt = '-R' then
            nop
        else if rz = 'RZ1' then
            call adrIsp "edit dataset('"dsnNN"')", 4
        else
            call writeDsn rz'/'dsnNN, m.auftrag.
        end
    m.auftrag.0 = '' /* do not write back the new auftrag | */
    if opt = '-R' then
        m.exitValue = nn
    return 0
endProcedure nextAuftrag

/*--- einen neuen Auftrag initialisieren -----------------------------*/
neuerAuftrag: procedure expose m.
parse arg isTst, rz, auftName
    if  rz = '' then
        rz = m.myRz
    else
        call configureRz rz
    if isTst then do
        ow = m.uid
        maPr = 'T' || left(translate(m.uNa), 3, 'X')
        comMask = m.libPre'.MASK('maPr'PROT)'
        impMask = m.libPre'.MASK('maPr'$subsys)'
        end
    else do
        ow = 'S100447'
        comMask = m.libPre'.MASK(PROT$trgNm)'
        impMask = m.libPre'.MASK($trgNm$impNm)'
        end
    comIgno = m.libPre'.MASK(IGNORE)'
    impIgno = ''
    if m.auftrag.0 <> 0 then
        call err 'fun n erstellt neuen Auftrag nur in leeres Member'
                             /* wahrscheinlichen Zügelschub bestimmen*/
    zglS = '20120210 20120511 20120810 20121109 2013???? 2014????'
    zi = date('s')
    zi = overlay(right(substr(zi, 5, 2)+1, 2, 0), zi, 5)
    do wx=1 while zi >> word(zglS, wx)
        end
    zglSchub = if(isTst, 'test', word(zglS, wx) '??:00')

    call mAdd auftrag                                      ,
        , addDateUs('auftrag ' auftName ow)                ,
        , '  Zuegelschub' zglSchub                         ,
        , '  Besteller   pid     name    tel'              ,
        , '  comMask    ' comMask                          ,
        , '  comIgno    ' comIgno                          ,
        , '  impMask    ' impMask                          ,
        , '  impIgno    ' impIgno                          ,
        , 'source RZ8.DX0G'                                ,
        , '  ts' left(auftName, 4)'A1P.A%'                 ,
        , 'target RZ8.'if(left(auftName, 2) == 'XB', 'DCVG', 'DC0G')
    return
endProcedure neuerAuftrag

neuerNachtrag: procedure expose m.
parse upper arg opt
    call analyseAuftrag
    call addNachtrag
    return
endProcedure neuerNachtrag

nextNachtrag: procedure expose m.
    parse arg nt
    nx = pos(nt, m.nachtragChars) + 1
    if nx > length(m.nachtragChars) then
        call err 'kein Nachtrag char mehr nach' nt
    return substr(m.nachtragChars, nx, 1)
    m.e.nachtrag = nt
    return nt
endProcedure nextNachtrag

/*--- compare: Funktionen c, v und st --------------------------------*/
compare: procedure expose m.
parse upper arg fun, sendToRz
    opts = ''
    do forever
        if abbrev(sendToRz, '=') then do
            sendToRz = strip(substr(sendToRz, 2))
            opts = opts'='
            end
        else if abbrev(sendToRz, '-') then do
            opts = opts || substr(word(sendToRz, 1), 2)
            sendToRz = subword(sendToRz, 2)
            end
        else
            leave
        end
    cmpLast = pos('=', opts) > 0
    if fun = 'C' then
        function = 'compare'
    else if fun = 'ST' then do
        if sendToRz = '' | sendToRz = '*' then
            call errHelp 'ST without sendToRz'
        call mapPut e, 'toRz', sendToRz
        function = 'sendTarget' sendToRz
        end
    else if fun = 'V' then
        function = 'version'
    else
        call err 'bad fun' fun
    call analyseAuftrag
    if (m.scopeSrc.rz = m.sysRz ,
       | (wordPos(m.scopeSrc.rz, 'RZ8 RZZ') > 0 & m.sysRZ = 'RZ1') ,
       ) & m.e.qCheck \== 0 then do
        if qualityCheck(getDb2Catalog('SRC')) then
            if pos('F', opts) < 1 & \ m.auftrag.force then
                return
            else
                say 'wegen Option -f Verarbeitung',
                      'trotz Qualitaetsfehlern'
        end
    nacLast = m.e.nachtrag
    if nacLast = '?' & cmpLast then
        call err 'c = oder v = ohne vorangaengiges c oder v'
    if nacLast = '?' | m.nacImp then
        m.e.nachtrag = nextNachtrag(nacLast)
    call mapPut e, 'mbrNac', left(m.e.auftrag, 7)m.e.nachtrag
    m.o.0 = 0
    call readDsn m.libSkels || m.jobCard')', m.i.
    call mapPut e, 'jobName', 'Y'left(m.e.auftrag, 7)
    call mapPut e, 'fun', function opts
    call namingConv m.scopeTrg.rz, m.scopeTrg.subsys, 'trgNm'
    call namingConv m.scopeSrc.rz, m.scopeSrc.subsys, 'srcNm'
    call mapExpAll e, o, i

    call mapPut e, 'mask', shrDummy(mapExp(e, m.e.comMask), 1)
    call mapPut e, 'ignore', shrDummy(mapExp(e, m.e.comIgno))
    call bmcVarsProf 0

    if 0 then   /* db ddl extrahieren ja / nein ???? */
        call extractSrcTrg o, 'DB', cmpLast left(m.e.auftrag, 7)nacLast
    if m.e.tool == ibm then
        call extractSrcTrg o, '', cmpLast left(m.e.auftrag, 7)nacLast
    else if m.e.tool == bmc then
        call bmcSrcTrg cmpLast m.e.auftrag
    else if m.e.tool == ca  then do
        call configureSubsys m.scopeSrc.rz, m.scopeSrc.subsys
        end
    if fun = 'C' then do
        if m.optOvr then do
            call mapPut e, 'ovr', 'OVR'
            call readDsn m.libSkels'Ovr)', m.ovr.
            call mapExpAll e, o, ovr
            call mapPut e, 'src', 'OVR'
            end
        if m.e.keepTgt == 0 then
            call mapPut e, 'keepTgt', ''
        else
            call mapPut e, 'keepTgt', 'KEEPTGT,'
        call readDsn m.libSkels ,
                || if(m.e.tool=='IBM', 'comp', left(m.e.tool, 1)'Com'),
                || ')', m.cmp.
        call mapExpAll e, o, cmp
        if m.e.tool == ca  then
            call caDDL o, scopeSrc, dsnGetMbr(mapGet(e, 'mask'))
        end
    if fun = 'ST' then do
        call readDsn m.libSkels'ST)', m.st.
        call mapExpAll e, o, st
        end
    call writeSub o
    call mAdd auftrag, addDateUs(function ,
                    left('===', 3*cmpLast)m.e.nachtrag,
                    m.scopeTrg.rz'.'m.scopeTrg.subSys ,
                    mapExp(e, "'${libPre}." ,
                ||  if(m.e.tool=="IBM","srcCat",m.e.tool"Cdl") ,
                ||  "($mbrNac)'"))
    return
endProcedure compare

/*--- find the naming convention for a rz and subsystem --------------*/
namingConv: procedure expose m.
parse arg rz, subsys, var
    if rz = '.' then do
        if pos('.', subSys) > 0 then
            call err 'namingConv old target' subsys
        if pos('/', subSys) > 0 then
            parse var subsys rz '/' subsys
        else
            rz = m.sysRz
        end
    if strip(rz) = 'RZ1' then
        t = strip(subsys)
    else
        t = 'DBOF'
    if var ^== '' then
        call mapPut e, var, t
    return t
endProcedure namingConv

/*--- write jcl and submit it ----------------------------------------*/
writeSub: procedure expose m.
parse arg o, rz, noWri
    userSubmits = 0 /* edit jcl and user submits it */
    if noWri <> 1 then do
        jcl = m.libPre'.JCL('m.e.auftrag')'
        call mStrip o, 't'
        do ox=1 to m.o.0
            if length(m.o.ox) > 70 then
                call debug 'o.'ox 'len' length(m.o.ox)':' m.o.ox
            end
        call writeDsn jcl, m.o., ,1
        if userSubmits then /* edit dataset and user may submit it */
            call adrIsp "edit dataset('"jcl"')", 4
        end
    if (noWri <> 1) & (rz = '' | rz = m.sysRz) then do
         if ^ userSubmits then
            call adrTso "sub '"jcl"'"
         end
    else do  /* submit jcl in another rz */
        sysl = csmSysDsn(rz'/')
        if sysl = '*/' then
            sysl = ''
        iral = dsnAlloc(sysl 'SYSOUT(T) dd(ir) .WRITER(INTRDR)')
        call writeDDBegin ir
        call writeDD ir, m.o.
        call writeDDend 'IR'
        interpret subword(irAl, 2)
        end
    return
endProcedure writeSub


/*--- view or edit a member -----------------------------------------*/
viewEdit: procedure expose m.
parse upper arg fun 2 wh, nac
    call analyseAuftrag
    if wh = 'C' then
        d = copies(m.e.tool, m.e.tool \== 'IBM')'CDL'
    else if wh = 'E' then
        d = 'EXEJCL'
    else if wh = 'J' then
        d = 'JCL'
    else if wh = 'S' then
        d = 'SRCDDL'
    else if wh = 'T' then
        d = 'TRGDDL'
    else if wh = 'W' then
        d = 'BMCWSL'
    if nac == '' then
        nac = m.e.nachtrag
    if wh == 'J' then
        d = m.libPre'.'d'('m.e.auftrag')'
    else
        d = m.libPre'.'d'('left(m.e.auftrag,7)nac')'
    if fun == 'E' then
        call adrIsp "edit dataset('"d"')", 4
    else
        call adrIsp "view dataset('"d"')", 4
    return
endProcedure viewEdit
/*--- return jcl either dd dummy or dd disp=shr,dsn=... --------------*/
shrDummy: procedure expose m.
parse arg dsn, keepEmpty
    if dsn \= '' then
        return 'DISP=SHR,DSN='translate(dsn)
    else if keepEmpty == 1 then
        return ''
    else
        return 'DUMMY'
endProcedure shrDummy

/*--- funktion i -----------------------------------------------------*/
import: procedure expose m.
parse upper arg fun, rzSubSysList opt .
    call analyseAuftrag
    if m.e.nachtrag = '?' then
        call err 'vor i=import braucht es compare'
    if opt <> '' then
        nop
    else if words(m.targets) > 1 then
            call err 'i=import mit mehreren targets muss Nachtraege',
               'explizit angeben, z.B. dbx i' rzSubSysList m.e.nachtrag
    else if m.cmpLast then
            call err 'i=import mit c = oder v = muss Nachtraege',
               'explizit angeben, z.B. dbx i' rzSubSysList m.e.nachtrag
    if ^ m.nacImp then do
        cdl = cdlDsnCheck(m.e.nachtrag)
        if m.e.dbaCheck == 0 then nop
        else if m.e.tool \== 'IBM' then
            say 'dbaCheck for' m.e.tool 'not implemented'
        else do
            if m.editMacro then
                dbaParm = 'EX0'
            else
                dbaParm = 'END'
            call adrIsp "edit dataset('"cdl"') macro(dbacheck)",
                         "parm(dbaParm)", 4
            end
        end
    call readDsn m.libSkels || m.jobCard')', m.jc.
    call readDsn m.libSkels || left(m.e.tool, m.e.tool\=='IBM')'Imp)',
        , m.ic.
    list = iListExpand(rzSubSysList, 0)
    if list = '' then
        call err 'no targets in list "'rzSubSysList'"'
    impCnt = 0
    call configureRz m.sysRz
    if fun = 'IA' then
        fu2 = 'Ana'
    else if fun = 'IE' then
        fu2 = 'AnaExe'
    else
        fu2 = ''
    call mapPut e, 'fun', strip('import'fu2 left(rzSubSysList, 30))
    call mapPut e, 'jobName', 'Y'left(m.e.auftrag, 7)
    fu2 = fun fu2
    m.jOut.0 = 0
    call mapExpAll e, jOut, jc  /* Jobcard expandieren */
    j0 = m.jOut.0
    rz = '?'
    do lx = 1
        r1 = word(list, lx)
        parse var r1 r '/' subsys
        if r <> rz | subsys = '' then do
            if impCnt <> 0 then do
                if rz <> m.sysRz then do
                    if symbol('m.sCdl.0') \== 'VAR' then do
                        call readDsn m.libSkels'sCdl)', m.sCdl.
                        call readDsn m.libSkels'subRz)', m.subRz.
                        end
                    if m.impMbrs == '' then
                        call err 'int no impMbrs'
                    call mapPut e, 'mbrNac',
                            , left(m.e.auftrag, 7)left(m.impMbrs, 1)
                    call mapPut e, 'toRz', m.myRz
                    call mapExpAll e, jOut, sCdl
                    jy = m.jOut.0
                    jx = jy-1
                    m.jOut.0 = jx
                    jla = m.jOut.jy
                    cx = pos(')-', m.jOut.jx)
                    if cx < 1 | substr(m.jout.jx, cx+2) \= '' then
                        call err 'bad sCdl line' jx':'m.jOut.jx
                    m.jOut.jx = left(m.jOut.jx,cx-1) '-'
                    do mx=2 to length(m.impMbrs)
                        call mAdd jOut, left('', cx-10)',' ,
                                || left(m.e.auftrag,7) ,
                                || substr(m.impMbrs, mx,1) '-'
                        end
                    call mAdd jOut, left('', cx-10)') -'
                    call mAdd jOut, jLa
                    call mapExpAll e, jOut, subRz
                    jy = m.jOut.0
                    jla = m.jOut.jy
                    m.jOut.0 = jy-1
                    call mAddSt jOut, jAft
                    call mAdd jOut, jLa
                    end
                end
            if subsys = '' then do
                if m.jout.0 > j0 then
                    call writeSub jOut
                return
                end
            rz = r
            if rz = m.sysRz then do
                job = jOut
                m.jAft.0 = 'noUse'
                end
            else do
                job = jAft
                m.jAft.0 = 0
                end
            m.impMbrs = ''
            call configureRz rz
            impCnt = 0
            call mapPut e, 'fun', 'import'fu2 rz
            call mapPut e, 'fu2', fun
            call configureSubsys rz
            end
        if length(subsys) <> 4 then
            call err 'ungueltiges db2SubSys' subsys 'im import' rz
        call configureSubsys rz, subsys
        if rz = m.sysRz then
            impCnt = impCnt + importAdd(job, subsys,      opt, ic, fu2)
        else if m.sysRz == 'RZ1' then
            impCnt = impCnt + importAdd(job, rz'/'subsys, opt, ic, fu2)
        else
            call err 'cannot import into' rz 'from' m.sysRz
        end
endProcedure import

/*--- add a single import to jcl in o --------------------------------*/
importAdd: procedure expose m.
parse upper arg o, rzSubSys, opt, ic, fun fu2
    /* Uebergang altes auf neue Delta Merge Verfahren ++++++++ begin */
    deltaNew = 1 /* abbrev(rzSubSys,'RZ1.'),
            | (pos('.',rzSubSys) < 1 & m.sysRz = 'RZ1') */
    if deltaNew then do   /* neues delta merge verfahren */
        inDdn = 'DCHG'
        call mapPut e, 'cType', "''''T''''"
        end
    else do               /* altes delta merge verfahren */
        inDdn = 'SRCDDN2'
        call mapPut e, 'cType', "''''C''''"
        end
    call mapPut e, 'inDdn', inDdn
    /* Uebergang altes auf neue Delta Merge Verfahren ++++++++ end   */
    if opt ^= '' & opt ^= '=' then do
        nachAll = opt
        end
    else if symbol('m.imp.rzSubSys.nachtrag') ^== 'VAR' then do
        nachAll = m.compares
        end
    else do
        if opt = '=' then
            la = left(m.imp.rzSubSys.nachtrag, 1)
        else
            la = right(m.imp.rzSubSys.nachtrag, 1)
        cx = pos(la, m.compares)
        if cx < 1 then
            call err 'nachtrag' la 'von' rzSubSys m.rzSubSys.change ,
                     'nicht in Compare Liste' m.compares
        nachAll = substr(m.compares, cx + (opt ^= '='))
        end
    if nachAll = ' ' then do
        say  'alle Nachtraege schon importiert fuer' rzSubSys
        return 0
        end
    call mapPut e, 'mbrChg', left(m.e.auftrag, 7)right(nachAll, 1)
    if length(nachAll) = 1 then
        nachVB = nachAll
    else
        nachVB = left(nachAll, 1)'-'right(nachAll, 1)
    trgNm = ''
    do nx=1 to m.nachtrag.0
        if pos(m.nachtrag.nx, nachAll) < 1 then
            iterate
        act = namingConv('.', m.nachtrag.nx.trg)
        if trgNm = '' then
            trgNm = act
        else if trgNm <> act then
            call err 'targetNaming' trgNm 'wechselt zu' act ,
                'fuer nachtrag' m.nachtrag.nx 'auf' m.nachtrag.nx.trg
        end
    m.imp.seq = m.imp.seq + 1
    if length(m.imp.seq) > 3 then
        call err 'import Sequenz Ueberlauf' m.imp.seq
    m.imp.seq = right(m.imp.seq, 3, 0)
    chaPre = m.e.auftrag'.'nachVB'.'m.imp.seq
    zs = translate(strip(right(m.e.zuegelSchub, 6)))
    if m.e.tool = 'IBM' then
        call mapPut e, 'change',chaPre'.'zs/*'.V'mapGet(e,'toolVers')*/
    else
        call mapPut e, 'change',m.e.auftrag || m.imp.seq'_'zs
    call mapPut e, 'changeRem', 'zs' m.e.zuegelSchub ,
                                'auf' m.e.auftrag nachAll 'import DBX'
    call mapPut e, 'deltaVers', chaPre'.DLT'
    call namingConv '.', rzSubSys, 'impNm'
    call namingConv m.scopeSrc.rz, m.scopeSrc.subsys, 'srcNm'
    call mapPut e, 'trgNm', trgNm
    call mapPut e, 'mask',   shrDummy(mapExp(e, m.e.impMask), 1)
    call mapPut e, 'ignore', shrDummy(mapExp(e, m.e.impIgno))
    cdlPds = m.libPre'.CDL'
    call mapPut e, 'cdlPds', cdlPds
    call bmcVarsProf 1
    if m.impMbrs = '' & m.myRz \== m.sysRz then
        call mapExpAll e, o, jc  /* Jobcard expandieren */
    m.impMbrs = charInsAsc(m.impMbrs, nachAll)
    if m.e.tool = 'CA' then do
        call mapPut e, 'mbrNac', left(m.e.auftrag, 7)right(nachAll, 1)
        call mapPut e, 'impMaskMbr', dsnGetMbr(mapExp(e, m.e.impMask))
        call mapPut e, 'comIgnoMbr', dsnGetMbr(mapExp(e, m.e.comIgno))
        call mapPut e, 'bpid', m.libPre'.CASTRAT-'mapGet(e, 'mbrNac') ,
                                            || '-'m.imp.seq
        end
    sto = mapExpAllAt(e, o, ic, 1, 1)
    do while sto ^= ''
        parse var sto lx cx
        w = word(substr(m.ic.lx, cx), 1)
        if w == '$@maskDD' then do
            if mapGet(e, 'mask') \= '' then
                call mAdd o, '//MSKDDN1     DD' mapGet(e, 'mask')
            end
        else if w == '$@maskII' then do
            if mapGet(e, 'mask') \= '' then
                call mAdd o, "  MSKDDN='MSKDDN1',",
                           , " MSKOWN='DUMMY',",
                           , "  MSKNAME='DUMMY',"
            end
        else if w == '$@bmcCdl' then do
            le = left('//IMPORTIN', 13)
            do ix=1 to length(nachAll)
                call mAdd o, le || 'DD DISP=SHR,DSN=',
                                || cdlDsnCheck(substr(nachAll, ix, 1))
                le = left('//', 13)
                end
            end
        else if w ^== '$@cdl' then do
            call err 'unbekannte Anweisung' w 'in Zeile' cx m.ic.cx
            end
        else if deltaNew then do
            do ix=1 to length(nachAll)
                call mAdd o, left('//'inDdn || right(ix,3,0), 13) ,
                                || 'DD DISP=SHR,DSN=',
                                || cdlDsnCheck(substr(nachAll, ix, 1))
                end
            end
        else do
            le = left('//'inDdn, 13)
            do ix=1 to length(nachAll)
                call mAdd o, le || 'DD DISP=SHR,DSN=',
                                || cdlDsnCheck(substr(nachAll, ix, 1))
                le = left('//', 13)
                end
            end
        sto = mapExpAllAt(e, o, ic, lx, cx + length(w))
        end
    if wordPos(fun, 'IA IE') > 0 then do /* analyse step */
        if m.e.tool = ibm then
            call err 'fun' fun 'not implemented for' m.e.tool
        call readDsn m.libSkels || left(m.e.tool, 1)'Ana)', m.ia.
        call mapExpAll e, o, ia
        end
    if wordPos(fun, 'IE') > 0 then do /* analyse step */
        call readDsn m.libSkels || left(m.e.tool, 1)'Exe)', m.ie.
        call mapExpAll e, o, ie
        ej = mapExp(e, "'${libPre}.EXEJCL($mbrChg)'")
        j.1 = 'exeJcl for' m.e.auftrag 'noch nicht generiert'
        call writeDsn ej, j., 1, 1
        end
    call mAdd auftrag,
         ,  addDateUs("import" rzSubsys nachAll mapGet(e, 'change') fu2)
    return 1
endProcedure importAdd

/*--- DSN für CDL des Nachtrags zurückgeben und auf Existenz prüfen---*/
cdlDsnCheck: procedure expose m.
parse arg nt
    cdl = m.libPre'.'copies(m.e.tool, m.e.tool\=='IBM') ,
        || 'CDL('left(m.e.auftrag, 7) || nt')'
    rr = sysDsn("'"cdl"'")
    if rr <> 'OK' then
        call err 'cdl fuer' nt'. Nachtrag fehlt:' cdl rr
    return cdl
endProcedure cdlDsnCheck

/*--- Date und user rechtsbuendig einfuegen --------------------------*/
addDateUs: procedure expose m.
parse arg le
    return le right(date(s) time() m.uNa, 71-length(le))
endProcedure addDateUs                                      "'"

/*--- den aktuellen Auftrag analysieren ------------------------------*/
analyseAuftrag: procedure expose m.
    m.scopeSrc.0 = 0
    m.scopeSrc.subSys = m.mySub
    m.scopeSrc.rz     = m.myRz
    m.catSrc.0 = ''
    m.scopeTrg.0 = 0
    m.scopeTrg.subSys = m.mySub
    m.scopeTrg.rz = m.myRz
    m.catTrg.0 = ''
    m.imp.seq = -1
    m.nacImp = 0
    m.e.impMask = ''
    m.e.comMask = ''
    m.e.tool = 'IBM'
    if m.auftrag.0 = 0 then
        call err 'Auftrag ist leer'
    vaWo = 'AUFTRAG'
    varWo =  'ZUEGELSCHUB BESTELLER COMMASK COMIGNO IMPMASK IMPIGNO' ,
             'KEEPTGT DBACHECK QCHECK V72 V10 CA BMC IBM'
    ignWo = 'SW SENDWSL RECEIVEWSL RECEIVESOURCE'
    ignCh = '*|'
    lev1Wo = 'SCOPE SOURCE TARGET COMPARE VERSION IMPORT SENDTARGET' ,
             varWo 'PROTOTYPERZ'
    do lx=1 to m.auftrag.0
        li = m.auftrag.lx
        parse upper var li w1 w2 w3 .
        if w1 = '' | pos(left(w1, 1), ignCh) > 0 ,
                   | wordPos(w1, ignWo) > 0 then
            iterate
        if wordPos(w1, vaWo) < 1 then
            call err 'operation' w1 ', erwartet' vaWo 'in Zeile' lx li
        w2 = translate(word(li, 2))
        if w1 = 'AUFTRAG' then do
            if w2 ^= m.auftrag.member then
                call err 'auftrag' w2 '<> member' m.auftrag.member
            m.e.auftrag = w2
            m.e.nachtrag = '?'
            m.nachtrag.0 = 0
            if dataType(left(w3, 1), 'U') & length(w3) <= 8 then
                ow = w3
            else
                ow = 'S100447'
            call mapPut e, 'chgOwn', ow
            vaWo = lev1Wo
            end
        else if wordPos(w1, 'V72 V10') > 0 then do
            call configureRZ , , substr(w1, 2)
            end
        else if wordPos(w1, 'CA BMC IBM') > 0 then do
            m.e.tool = w1
            end
        else if wordPos(w1, varWo) > 0 then do
            m.e.w1 = word(li, 2)
            end
        else if w1 = 'PROTOTYPERZ' then do /* alte syntax sep08 ??? */
            m.scopeSrc.rz = word(li, 2)
            end
        else if wordPos(w1, 'SCOPE SOURCE TARGET') > 0 then do
            suSy = ''
            if w1 = 'SOURCE' then do
                scp = 'SCOPESRC'
                suSy = w2
                end
            else if w1 = 'TARGET' then do
                scp = 'SCOPETRG'
                if abbrev('EXPLICIT', w2, 2) then do
                    m.optAuto = 0
                    suSy = w3
                    end
                else do
                    suSy = w2
                    if abbrev('EXPLICIT', w3, 2) then
                        m.optAuto = 0
                    end
                end
            else do /* alte syntax */
                if abbrev('SOURCE', w2) then
                    scp = 'SCOPESRC'
                else if abbrev('TARGET', w2) then
                    scp = 'SCOPETRG'
                else
                    call err 'scope' w2 'nicht abk. von SOURCE TARGET',
                                        'in Zeile' lx li
                end
            if (abbrev(suSy, 'DQ0') | abbrev(suSy, 'RZ1.DQ0')) ,
                                   <> (m.libPre == 'DSN.DBQ') then
                call err 'subSys' suSy 'mit Auftrag in' m.libPre
            m.scp.0 = 0
            if pos('.', suSy) > 0 then
                parse var suSy suRz '.' suSy
            else if pos('/', suSy) > 0 then
                parse var suSy suRz '/' suSy
            else
                suRZ = ''
            if suSy <> '' then
                m.scp.subsys = suSy
            if suRz <> '' then
                m.scp.rz = suRz
            vaWo = m.scopeTypes m.scopeType1 lev1Wo
            call debug 'scope' scp m.scp.rz'.'m.scp.subsys
            end
        else if wordPos(w1, m.scopeTypes m.scopeType1) > 0 then do
            parse value analyseScope(li) with ty nm qu
            if ty = '?' then
                call err nm qu 'in scope line' lx':' strip(li)
            aa = mAdd(scp, 'scope')
            m.aa.type = ty
            m.aa.qual = qu
            m.aa.name = nm
            end
        else if wordPos(w1, 'COMPARE VERSION SENDTARGET') > 0 then do
            if w1 = 'SENDTARGET' then
                w2 = w3
            cmpLast = abbrev(w2, '=')
            w2 = strip(w2, 'l', '=')
            if length(w2) <> 1 | pos(w2, m.nachtragChars) < 1 then
                call err 'nachtrag' w2 'in Zeile' lx li
            if pos(w2, m.nachtragChars) ,
                    < pos(m.e.nachtrag, m.nachtragChars) then
                call err 'nachtrag' w2 '< vorherigem' m.e.nachtrag ,
                        'in Zeile' lx li
            if m.e.nachtrag <> w2 then do
                m.e.nachtrag = w2
                nx = m.nachtrag.0 + 1
                m.nachtrag.0 = nx
                m.nachtrag.nx = w2
                end
            m.nachtrag.nx.fun = ''
            m.nachtrag.nx.last = cmpLast
            if pos(left(w1, 1), 'CV') > 0 then
                m.nachtrag.nx.fun = left(w1, 1)
            if abbrev(w3, "'") | verify(w3, '/.', 'm') < 1 then
                t1 = m.myRz'/'m.mySub
            else
                t1 = translate(w3, '/', '.')
            m.nachtrag.nx.trg = t1
            call debug 'nachtr' nx m.nachtrag.nx 'trg' m.nachtrag.nx.trg
            m.nacImp = (w1 <> 'COMPARE')
            end
        else if w1 = 'IMPORT' then do
            parse upper var li . subsys nachAll chg .
            subsys = translate(subsys, '/', '.')
            if chgAuf <> m.e.auftrag then
            if right(nachAll, 1) <> m.e.nachtrag then
                call err 'aktueller Nachtrag' m.e.nachtrag ,
                         'aber import' nachAll 'in Zeile' lx li
            parse var chg chgAuf '.' chgNac '.' chgSeq '.' chgImp
            aa = m.e.auftrag
            if chgAuf = aa then do
                if left(chgNac, 1) <> left(nachAll, 1) then
                    call err 'Nachtrag von mismatch in Zeile' lx li
                if right(chgNac, 1) <> right(nachAll, 1) then
                    call err 'Nachtrag bis mismatch in Zeile' lx li
                end
            else if abbrev(chgAuf, aa) ,
                    & substr(chgAuf, length(aa)+4, 1) == '_' then do
                chgSeq = substr(chgAuf, length(aa)+1, 3)
                end
            else
                call err 'Auftrag mismatch in Zeile' lx li
            if chgSeq <= m.imp.seq then
                call err 'seq' chgSeq 'nicht > letzte' m.imp.seq,
                             'in Zeile' lx li
            m.nacImp = 1
            m.imp.subSys.nachtrag = nachAll
            m.imp.subSys.change   = chg
            m.imp.seq = chgSeq
            end
        else do
            call err 'ungültiger Operator' w1 'in Zeile' lx':' strip(li)
            end
        end
                               /* nachtrae durchgehen und kumulieren */
    m.targets = ''
    m.compares = ''
    m.versions = ''
    drop cmpLast
    m.cmpLast = 0
    do nx=1 to m.nachtrag.0
        m.cmpLast = m.cmpLast | m.nachtrag.nx.last
        if wordPos(m.nachtrag.nx.trg, m.targets) < 1 then
            m.targets = m.targets m.nachtrag.nx.trg
        if m.nachtrag.nx.fun = 'C' then
            m.compares = m.compares || m.nachtrag.nx
        if m.nachtrag.nx.fun = 'V' then
            m.versions = m.versions || m.nachtrag.nx
        call debug 'nachtrag' nx m.nachtrag.nx 'trg' m.nachtrag.nx.trg,
                 'all' m.targets 'fun' ,
                  m.nachtrag.nx.fun 'com' m.compares 'ver' m.versions,
                  'cmpLast' m.cmpLast
        end
    if 0 & abbrev(m.scopeSrc.subSys, 'DQ0') then
        call configureRz , '915 P0'
    if 0 then do
        say 'auftrag ' m.e.auftrag m.e.nachtrag mapGet(e, 'chgOwn')
        say '  comMask  ' m.e.comMask
        say '  comIgno  ' m.e.comIgno
        say '  impMask  ' m.e.impMask
        say '  impIgno  ' m.e.impIgno
        scp = 'SCOPESRC'
        drop subsys
        say '  scope ' m.scp.0 m.scp.subsys ,
            '  target ' m.scopeTrg.0 m.scopeTrg.subsys
        do sx=1 to m.scp.0
            say '   ' m.scp.sx.type m.scp.sx.qual'.'m.scp.sx.name
            end
        end
    call bmcVars
    return
endProcedure analyseAuftrag

/*--- eine Scope Zeile analysieren -----------------------------------*/
analyseScope: procedure expose m.
parse arg li
    parse upper var li ty w1 rest
    if wordPos(ty, m.scopeType1) > 0 then
        ty = word(m.scopeTypes, wordPos(ty, m.scopeType1))
    if wordPos(ty, m.scopeTypes) < 1 then
        return '?'
    cx = pos('.', w1)
    if cx < 1 then do
        qu = w1
        end
    else do
        qu =strip(left(w1, cx-1))
        rest = substr(w1, cx) rest
        end
    if qu = '' then
        return '? leerer Qualifier'
    if ty = 'DB' then
        return ty qu
    if left(rest, 1) = '.' then
        rest = substr(rest, 2)
    nm = word(rest, 1)
    if nm = '' then
        return '? leerer Name'
    return ty nm qu
endProcedure analyseScope

/*--- jcl generieren um Src und Trg Version und DDL zu extrahieren ---*/
extractSrcTrg: procedure expose m.
parse arg o, xx, oldSrc mbrLast
    call readDsn m.libSkels'ExVe)', m.exVe.
    call configureSubsys m.scopeSrc.rz, m.scopeSrc.subsys
    call mapPut e, 'auto', xx'AUTO'
    call mapPut e, 'src', xx'SRC'
    call mapPut e, 'trg', xx'TRG'
    mbrNac = mapGet(e, 'mbrNac')
    call mapPut e, 'what', xx'SRC'
    if ^ oldSrc then do
        call extractScopeVersion o, exVe, xx, 'SRC'
        end
    else if mbrNac <> mbrLast then do
        pr = m.libPre'.'xx'SRC'
        call copyDsn pr'DDL('mbrLast')', pr'DDL('mbrNac')', 1
        call copyDsn pr'CAT('mbrLast')', pr'CAT('mbrNac')', 1
        end
    call configureSubsys m.scopeTrg.rz, m.scopeTrg.subsys
    call mapPut e, 'what', xx'TRG'
    if m.optAuto then do
        call readDsn m.libSkels'AutMa)', m.autoMap.
        call readDsn m.libSkels'AutEx)', m.autoExt.
        call mapExpAll e, o, autoMap
        if m.sysRz = m.scopeTrg.rz then do
            call mapExpAll e, o, autoExt
            end
        else do
            mbrN = mapGet(e, 'mbrNac')
            mark = mbrN'@'time()
            autD = mapExp(e, '${libPre}.$auto($mbrNac)')
            cf   = mapExp(e, '${libPre}.SENDCF($mbrNac)')
            sndIn = sendJob1(o, m.scopeTrg.rz, 'RECTRG',
                , 'send'    autD                      ,
                , 'job      -ddJob' m.timeout'//??' cf mark       ,
                , 'receive' mapExp(e, '${libPre}.${what}DDL($mbrNac)') ,
                , 'receive' mapExp(e, '${libPre}.${what}CAT($mbrNac)') )
            call mapExpAll e, o, autoExt
            call sendJob2 o, sndIn, cf mark
            end
        end
    else do
        call extractScopeVersion o, exVe, xx, 'TRG'
        end
    return
endProcedure extractSrcTrg

/*--- Version + DDL zu extrahieren -----------------------------------*/
extractScopeVersion: procedure expose m.
parse arg o, i, ty, what
    scp = 'SCOPE'what
    /* say m.scp.rz  'scp' scp */
    if m.sysRz = m.scp.rz then do
        call extractVersionStep o, i, ty, what
        end
    else do
        mbrN = mapGet(e, 'mbrNac')
        mark = mbrN'@'time()
        cf   = mapExp(e, '${libPre}.SENDCF($mbrNac)')
        sndIn = sendJob1(o, m.scp.rz, 'REC'what,
            , 'job      -ddJob' m.timeout'//??' cf mark       ,
            , 'receive' mapExp(e, '${libPre}.${what}DDL($mbrNac)') ,
            , 'receive' mapExp(e, '${libPre}.${what}CAT($mbrNac)') )
        call extractVersionStep o, i, ty, what
        call sendJob2 o, sndIn, cf mark
        end
    return
endProcedure extractScopeVersion

/*--- einen Step um Version + DDL zu extrahieren ---------------------*/
extractVersionStep: procedure expose m.
parse arg o, i, ty, what
    scp = 'SCOPE'what
    call mapPut e, 'what', ty || what
    sto = mapExpAllAt(e, o, i, 1, 1)
    do while sto ^== ''
        parse var sto lx cx
        w = word(substr(m.i.lx, cx), 1)
        if w == '$@scope' then do
            if ty == '' then do
                do sx=1 to m.scp.0
                    sn = scp'.'sx
                    if wordPos(m.sn.type, 'UDT UDF') > 0 then do
                        t = "SCH = '"m.sn.qual"', " ,
                            m.sn.type "= '"m.sn.name"';"
                        end
                    else do
                        t = "TYPE = '"m.sn.type"',"
                        if m.sn.type <> 'DB' then
                            t = t "QUAL = '"m.sn.qual"',"
                        t = t "NAME = '"m.sn.name"'"
                        if m.sn.type = 'SP' then
                            t = t", VERSION='%'"
                        t = t';'
                        end
                    if length(t) < 30 then do
                        call mAdd o, ' ' t
                        end
                    else do
                        cx = lastPos(',', t)
                        call mAdd o, ' ' left(t, cx),
                                   , '  ' substr(t, cx+1)
                        end
                    end
                end
            else if ty == 'DB' then do
                c = getDb2Catalog(what)
                do x=1 to m.c.0
                    d1 = m.c.x.db
                    if db.d1 == 1 then
                        iterate
                    db.d1 = 1
                    call mAdd o, "  TYPE = 'DB,' NAME = '"d1"';"
                    end
                end
            else
                call err 'extractVersionStep bad ty' ty
            end
        else do
            call err 'implement stop' sto 'word' w 'in line' lx m.i.lx
            end
        sto = mapExpAllAt(e, o, i, lx, cx + length(w))
        end
    return
endProcedure extractVersionStep

/*--- add jcl to stem o to send a job to rz toRz with stepname step
         and add the remaining arguments as sendJob statements
         afterwards the caller must add the jcl and call sendJob2 ----*/
sendJob1: procedure expose m.
parse arg o, toRz, step
    oldRz = m.myRz
    call configureRz toRz
    call readDsn m.libSkels'SendJ)', m.sendJob.
    call mapPut e, 'step', step
    call mapExpAll e, o, sendJob
    do ax=4 to arg()
        call debug 'sendJob1 le' length(arg(ax)) arg(ax)'|'
        call mAdd o, arg(ax) left('-', (ax < arg()))
        end
    call mAdd o, '//DDJOB     DD *'
    stReX = m.o.0+1
    call readDsn m.libSkels || m.jobCard')', m.i.
    call mapPut e, 'jobName', 'Y'left(m.e.auftrag, 7)
    call mapPut e, 'fun', 'extract data from' toRz
    call mapExpAll e, o, i
    return oldRz stReX
endProcedure sendJob1

/*--- add the mark step to the job, translate leading // to ??
          and switch back to original rz -----------------------------*/
sendJob2: procedure expose m.
parse arg o, oldRz stReX, cfMark
    if cfMark ^= '' then do
        call mAdd o, '//         IF NOT ABEND' ,
                      'AND RC >= 0 AND RC <= 4 THEN'
        call mapPut e, 'step', 'MARKOK'
        call mapExpAll e, o, sendJob
        call mAdd o, 'mark' cfMark 'okRc0'
        call mAdd o, '//         ELSE'
        call mapPut e, 'step', 'MARKERR'
        call mapExpAll e, o, sendJob
        call mAdd o, 'mark' cfMark 'badRcOrAbend'
        call mAdd o, '//         ENDIF'
        end
    do ox = stReX to m.o.0
        if abbrev(m.o.ox, '//') then
            m.o.ox = overlay('??', m.o.ox)
        end
    call configureRz oldRz
    return
endProcedure sendJob2

/*--- return Stem fuer die CatalogInfo für Src oder Trg
          falls noetig aus Db2Catalog einlesen -----------------------*/
getDb2Catalog: procedure expose m.
parse arg wh
    st = 'CAT'wh
    if datatype(m.st.0, n) then
        return st
    else if m.st.0 ^== '' then
        call err 'getDb2Catalog('wh') bad value m.'st'.0' m.st.0
    scp = 'SCOPE'wh
    if m.sysRz = m.scp.rz then
        call sqlOConnect m.scp.subSys
    else
        call sqlOConnect m.scp.rz'/'m.scp.subSys
    call queryDb2Catalog st, wh
    m.v9.0 = 0
    call queryDb2V9 st, 'V9'
    return st
endProcedure getDb2Catalog

/*--- Information aus Db2Catalog fuer einen Scope einlesen -----------*/
queryDb2Catalog: procedure expose m.
parse arg st, what
    scp = 'SCOPE'what
    /* m.scopeTypes = 'DB TS TB VW IX AL' */
    ts = ''
    tb = ''
    ix = ''
    unQueried = 0
    do sx=1 to m.scp.0
        sn = scp'.'sx
        t = "  TYPE = '"m.sn.type"',"
        if m.sn.type <> 'DB' then
            t = t "QUAL = '"m.sn.qual"',"
        t = t "NAME = '"m.sn.name"';"
        call debug 'queryDb2Catalog' sx t
        if m.sn.type = 'DB' then
            ts = ts 'or s.dbName' sqlClause(m.sn.name)
        else if m.sn.Type = 'TS' then
            ts = ts 'or (s.dbName' sqlClause(m.sn.qual) ,
                    'and s.name' sqlClause(m.sn.name)')'
        else if m.sn.Type = 'TB' then
            tb = tb 'or (t.creator' sqlClause(m.sn.qual) ,
                    'and t.name' sqlClause(m.sn.name)')'
        else if m.sn.Type = 'IX' then
            ix = ix 'or (x.creator' sqlClause(m.sn.qual) ,
                    'and x.name' sqlClause(m.sn.name)')'
        else
            unQueried = unQueried + 1
        end
    sel = 'select s.dbName db, s.name ts , s.type, ',
                  's.partitions, s.segSize, s.log, ',
                  't.creator cr, t.name tb,' ,
                  't.status tbSta, t.tableStatus tbTbSta',
              'from sysibm.sysTableSpace S, sysibm.sysTables T'
    wh = "where s.dbName = t.dbName and s.name = t.tsName",
               "and t.type = 'T'"
    sql = ''
    if ts <> '' then
        sql = sql 'union' sel wh 'and ('substr(ts, 5)')'
    call debug 'ts sql' sql
    if tb <> '' then
        sql = sql 'union' sel wh 'and ('substr(tb, 5)')'
    call debug 'tb sql' sql
    if ix <> '' then
        sql = sql 'union' sel ', SYSIBM.SYSINDEXES X',
                    wh 'and t.creator=x.tbCreator and t.name=x.tbName',
                       'and ('substr(ix, 5)')'
    call debug 'ix sql' sql
    if sql = '' then do
         m.st.0 = 0
         if unQueried < 1 then
             say 'nothing specified in source scope'
         return 0
         end
    drop db ts cr tb type
    call sql2St substr(sql, 8), st
    if m.debug == 1 then do
        say m.st.0
        do sx = 1 to m.st.0
           say strip(m.st.sx.db)'.'strip(m.st.sx.ts) m.st.sx.type ,
                      m.st.sx.partitions m.st.sx.segSize
           end
        end
    return m.st.0
endProcedure queryDb2Catalog

/*--- haben wir schon DB2 V9 Objekte ? -------------------------------*/
queryDb2V9: procedure expose m.
parse arg sc, vv
    m.vv.0 = 0
    wh =''
    do x = 1 to m.sc.0
        wh = wh "or (cr='"m.sc.x.cr"' and tb='"m.sc.x.tb"')"
        end
    if wh == '' then
        return 0
    return sql2st("select tp,nm,v9",
             "from s100447.db2v9",
             "where V9 <> '' and (" substr(wh, 5) ")",
             "order by cr,tb,cl", vv)
endProcedure queryDb2V9

/*--- Qualitaets Pruefung fuer CatalogInfo Stem c --------------------*/
qualityCheck: procedure expose m.
parse arg c
    if m.libPre <> 'DSN.DBQ' then
        call maskIni
    o = 'AUFTRAG'
    m.o.orig = 'rmQu' m.o.orig
    m.spezialFall.done = ''
    aufOld = m.o.0
    do x=1 to m.c.0
        vDb = strip(m.c.x.db)
        n = '|| db' vDb
        if d.n ^== 1 then do
            d.n = 1
            call spezialfall vDb, substr(n, 4)
            end
        n = '|| ts' vDb'.'strip(m.c.x.ts)
        if d.n ^== 1 then do
            d.n = 1
            call spezialfall vDb, substr(n, 4)
            if m.c.x.log <> 'Y' then
                call mAdd o, n 'not logged'
            if m.c.x.partitions > 0 then
                nop
            else if m.c.x.segSize = 0 then
                call mAdd o, n 'simple TS'
            end
        n = '|| tb' strip(m.c.x.cr)'.'strip(m.c.x.tb)
        if d.n ^== 1 then do
            d.n = 1
            call spezialfall vDb, substr(n, 4)
            if m.c.x.tbTbSta = 'L' then
                call mAdd o, n 'auxilary index oder table fehlt'
            else if m.c.x.tbTbSta = 'P' then
                call mAdd o, n 'primary index fehlt'
            else if m.c.x.tbTbSta = 'R' then
                call mAdd o, n 'index auf Row ID fehlt'
            else if m.c.x.tbTbSta = 'U' then
                call mAdd o, n 'index auf unique key fehlt'
            else if m.c.x.tbTbSta = 'V' then
                call mAdd o, n 'Regenerierung interne ViewDarstellung'
            else if m.c.x.tbTbSta ^= '' then
                call mAdd o, n 'TableStatus' m.c.x.tbTbSta 'unbekannt'
            end
        end
    do vx=1 to m.v9.0
        call mAdd o, '|| V9' m.v9.vx.tp left(m.v9.vx.nm, 30) ,
                                        left(m.v9.vx.v9, 30)
        end
    return aufOld < m.o.0
endProcedure qualityCheck

/*--- für jedes Objekt aus Source Scope Eintrage in der
      Spezialfall Library suchen und falls vorhanden anzeigen --------*/
spezialFall: procedure expose m.
parse upper arg db, typ qua '.' nam
    if m.libPre = 'DSN.DBQ' then
        return
    pDb = mask2prod('DBNAME', db)
    if (typ = 'DB' | typ = 'TS') & db <> qua then
        call err 'db mismatch spezialFall('db',' typ qua'.'nam')'
    if typ = 'DB' then
        srch = typ pDb'.'
    else if typ = 'TS' then
        srch = typ pDb'.'mask2prod('TSNAME', nam)
    else if typ = 'TB' then
        srch = typ mask2prod('TBOWNER', qua)'.'mask2prod('TBNAME', nam)
    else
        call err 'bad typ' typ
    st = spezialFall'.'pDb
    if symbol('m.st.0') <> 'VAR' then do
        dsn = m.libSpezial"("pDb")"
        sy = sysDsn("'"dsn"'")
        if sy <> 'OK' then do
            m.st.0 = 0
            if sy <> 'MEMBER NOT FOUND' then
                call err 'spezialFall library' dsn':' sy
            end
        else do
           call readDsn dsn, 'M.SPEZIALFALL.'pDB'.'
           end
        end
    if m.st.0 < 1 then
        return
    offs = 999
    found = 0
    do sx = 1 to m.st.0
        fx = verify(m.st.sx, ' ')
        if fx = 0 | fx > 72 then
           iterate
        if substr(m.st.sx, fx, 1) = '*' then
           iterate
        if fx <= offs then do
            offs = fx
            m.st.sx = left(m.st.sx, 72)
            n = ''
            if pos('.', m.st.sx) > 0 then
                parse upper var m.st.sx t q '.' n .
            else
                parse upper var m.st.sx t q .
            if wordPos(t, 'DB TS TB') < 1 then
              call err 'spezialFall' pDb 'line' sx 'ungueltig:' m.st.sx
            found = match(srch, t strip(q)'.'strip(n)) ,
                    & ^ (wordPos(pDb'.'sx, m.spezialFall.done) > 0)
            if found then
                m.spezialFall.done = m.spezialFall.done  pDb'.'sx
            end
        if found then
            call mAdd auftrag, '|-'left(m.st.sx, 78)
        end
    return
endProcedure spezialFall

/*--- mask handling initialise ---------------------------------------*/
maskIni: procedure expose m.
    call maskHierarchy
    call maskRead mask.prot, m.libPre'.MASK(PROTDBAF)'
    call maskRead mask.dbof, m.libPre'.MASK(DBAFDBOF)'
    return
endProcedure maskIni

/*--- mask a whole scope  --------------------------------------------*/
maskScope: procedure expose m.
parse arg mskDsn, fr, to
    call maskRead masc, mskDsn
    do fx=1 to m.fr.0
        ty = m.fr.fx.type
        m.to.fx.type = ty
        if wordPos(ty, 'DB SG') > 0 then
            m.to.fx.qual = ''
        else if wordPos(ty, 'TS') > 0 then
            m.to.fx.qual = maskTrans(masc, 'DBNAME', m.fr.fx.qual)
        else
            m.to.fx.qual = maskTrans(masc, 'SCHEMA', m.fr.fx.qual)
        if wordPos(ty, 'DB') > 0 then
            m.to.fx.name = maskTrans(masc, 'DBNAME', m.fr.fx.name)
        else if wordPos(ty, 'TB VW AL') > 0 then
            m.to.fx.name = maskTrans(masc, 'TBNAME', m.fr.fx.name)
        else if wordPos(ty, 'SP') > 0 then
            m.to.fx.name = maskTrans(masc, 'STPNAME', m.fr.fx.name)
        else
            m.to.fx.name = maskTrans(masc, ty'NAME', m.fr.fx.name)
        end
    m.to.0 = m.fr.0
    return
endProcedure maskScope

/*--- mask test functions --------------------------------------------*/
testMask: procedure expose m.
    call maskIni
    call maskTT OWNER, GDB9998
    call maskTT DBNAME, DGDB9998
    call maskTT DBNAME, DGDB0287
    call maskTT OWNER, GDB0301
    call maskTT TSNAME, AGRFX12A2
    call maskTT OWNER, SYS123EF
    return 0
endProcedure testMask

maskTT: procedure expose m.
parse arg ty, na
    say 'maskTrans(prot,' ty',' na') =' maskTrans(mask.prot, ty, na) ,
        ' -> DBOF' maskTrans(mask.dbof, ty, maskTrans(mask.prot,ty,na))
    return

/*--- translate a prototype object to DBOF naming -------------------*/
mask2Prod: procedure expose m.
parse arg ty, na
    return translate(strip(,
        maskTrans(mask.dbof, ty, maskTrans(mask.prot,ty,na))))

/*--- translate an object of type ty and name na
           by the masking file in st --------------------------------*/
maskTrans: procedure expose m.
parse arg st, ty, na
    if symbol('m.mask.hier.ty') <> 'VAR' then
        call err 'bad type' ty
    types = m.mask.hier.ty
    do sx=1 to m.st.0
        if wordPos(m.st.sx.typ, types) < 1 then
            iterate
        if match(na, m.st.sx.in, vv) then
            return matchTrans(m.st.sx.out, vv)
        end
    return na
endProcedure maskTrans

/*--- read and analyse the masking file dsn into stem st ------------*/
maskRead: procedure expose m.
parse arg st, dsn
    maskIgno = 'COMPRESS SEGSIZE DEFER DEFINE PRIQTY SECQTY'
    call readDsn dsn, i.
    j = 0
    do i=1 to i.0
        parse var i.i t ':' s ',' d
        t = strip(t)
        if symbol('m.mask.hier.t') == 'VAR' then
            nop
        else if wordPos(t, maskIgno) > 0 then
            iterate
        else
            call err 'bad typ' t 'in maskline' i':' i.i
        j = j+1
        m.st.j.typ = t
        m.st.j.in = strip(s)
        m.st.j.out = word(d, 1)
        end
    m.st.0 = j
    return
    drop typ in out
    do wx=1 to m.st.0
        say wx m.st.wx.typ':' m.st.wx.in'==>'m.st.wx.out'|'
        end
endProcedure maskRead

/*--- initialise the type hierarchy of masking
           as input use the msgLines of the mask editor --------------*/
maskHierarchy: procedure expose m.
                     /* copy der hierarch aus masking template */
    call mAdd mCut('T', 0)                           ,
      , 'COLNAME                                     ' ,
      , 'NAME                                        ' ,
      , '  DBNAME,TSNAME,TBNAME,IXNAME,UDFNAME,      ' ,
      , '  UDTNAME,COLLNAME,PKGNAME,PGMNAME,PLNNAME  ' ,
      , '  DBRMNAME,STPNAME,SFNAME,TGNAME,GRPNAME,   ' ,
      , '  VCATNAME,GBPNAME                          ' ,
      , '  BPNAME                                    ' ,
      , '    TSBPNAME,IXBPNAME                       ' ,
      , '  SGNAME                                    ' ,
      , '    TSSGNAME,IXSGNAME                       ' ,
      , 'AUTHID                                      ' ,
      , '  SQLID,SCHEMA                              ' ,
      , '  OWNER                                     ' ,
      , '    DBOWNER,TSOWNER,TBOWNER,IXOWNER         ' ,
      , '  GRANTID                                   ' ,
      , '    GRANTOR,GRANTEE                         '
    qx = 0
    lOff = -1
    m.mask.hier = ''
    do x=1 to m.t.0
        of = verify(m.t.x, ' ', 'n')
        li = translate(m.t.x, ' ', ',')
        do while qx > 0 & word(q.qx, 1) >= of
            qx = qx -1
            end
        px = qx - 1
        if (qx = 0 | of > word(q.qx, 1))  & words(li) = 1 then do
            px = qx
            qx = qx + 1
            if qx = 1 then
                q.qx = of word(li, 1)
            else
                q.qx = of word(li, 1) subword(q.px, 2)
            end
        do wx=1 to words(li)
            w1 = word(li, wx)
            m.mask.hier = m.mask.hier w1
            if wordPos(w1, subWord(q.qx, 2)) < 1 then
                m.mask.hier.w1 = w1 subWord(q.qx, 2)
            else
                m.mask.hier.w1 = subWord(q.qx, 2)
            end
        end
    return
endProcedure maskHierarchy

/*--- Funktion q: scope Zeilen pruefen -------------------------------*/
queryScope: procedure expose m.
parse arg subSys
    subs2 = ''
    rf = 1
    isConn = 0
    if adrEdit('(rl) = lineNum .zl', 4) = 4 then
            rl = 0
    if ^ m.editMacro then
        call err 'q nicht als Macro'
    if ^ m.editProc then do
        if adrEdit('PROCESS RANGE Q', 0 4) = 0 then do
            call adrEdit '(rf) = lineNum .zfrange'
            call adrEdit '(rl) = lineNum .zlrange'
            end
        m.editProc = 1
        end
    do rx = rf by 1 while rx <= rl
        call adrEdit '(li) = line' rx
        parse value analyseScope(li) with ty nm qu
        if ty = '?' then do
            if nm <> '' then
                say nm qu 'in line' rx':' strip(li)
            if \ isConn & subsys == '' then do
                parse upper var li w1 w2 .
                if wordpos(w1, 'SOURCE TARGET') > 0 then do
                    if length(w2) = 4 | ( length(w2) = 8 ,
                          & pos(substr(w2,4,1), './') > 0) then
                    subs2 = translate(w2, '/', '.')
                    end
                end
            iterate
            end
        if \ isConn then do
            isConn = 1
            if subSys = '' then
                subSys = if(subs2 == '', m.mySub, subs2)
            subsys = translate(subsys, '/', '.')
            call sqlConnect subSys
            subsys = translate(subsys, m.mAlfLC, m.mAlfUC)
            end
        call expandScope mCut(qq, 0), ty, qu, nm
        do qx=1 to m.qq.0
            neu = m.qq.qx
            if length(neu subSys) < 70 then
                neu = left(neu, 68 - length(subSys)) '*'subSys
            else if length(neu subSys) < 80 then
                neu = neu '*'subSys
            liCm = if(qx=1, "line" rx, "line_after" (rx+qx-2))
            if adrEdit(liCm "= (neu)", 4) = 4 then
                say 'truncation line' rx':' neu
            end
        rx = rx + m.qq.0 - 1
        rl = rl + m.qq.0 - 1
        end
    call sqlDisConnect
    return 0
endProcedure queryScope

/*--- einen Scope Ausdruck expandieren -------------------------------*/
expandScope: procedure expose m.
parse arg o, ty, qu, nm
     sql = ''
     dec2s = "strip(case when abs(?) > 9223372036854775807",
                       "then char(real(?)) else char(bigint(?)) end)"
     if ty = 'DB' then
         sql = "select 'db', name, '' from sysibm.sysDatabase",
                    "where name" sqlClause(nm)
     else if ty = 'TS' then
         sql = "select 'ts', strip(dbName) || '.' || strip(tsName)," ,
                    "case when count(*) = 1 then 'tb '" ,
                         "else strip(char(count(*))) || ' tables||| '",
                    "end || min(strip(creator) ||'.'|| strip(name))",
                    "from sysibm.systables" ,
                    "where type = 'T' and dbName" sqlClause(qu),
                                    "and tsName" sqlClause(nm),
                    "group by dbName, tsName"
     else if ty = 'TB' | ty = 'VW' | ty = 'AL' then
         sql = "select case when type = 'T' then 'tb'",
                           "when type = 'V' then 'vw'",
                           "when type = 'A' then 'al'",
                                           "else '?' || type end,",
                    "strip(creator) || '.' || strip(name),",
                    "case when type = 'A' then 'for '",
                              "|| strip(location) || '.'" ,
                              "|| strip(tbCreator)||'.'||strip(tbName)",
                          "else 'ts ' || strip(dbName) ||'.'",
                                      "|| strip(tsName)",
                    "end",
                    "from sysibm.systables" ,
                    "where type =" quote(left(ty, 1), "'"),
                        "and creator" sqlClause(qu),
                        "and name" sqlClause(nm)
     else if ty = 'IX' then
         sql = "select 'ix', strip(creator) || '.' || strip(name),",
                        "'tb ' || strip(tbCreator)||'.'||strip(tbName)",
                    'from sysibm.sysIndexes' ,
                    'where creator' sqlClause(qu),
                           'and name' sqlClause(nm)
     else if ty = 'UDT' then
         sql = "select 'udt', strip(schema) || '.' || strip(name),",
                        "'source ' || strip(sourceSchema)",
                        "|| '.' || strip(sourceType)",
                    "from sysibm.sysDataTypes",
                    'where schema' sqlClause(qu),
                           'and name' sqlClause(nm)
     else if ty = 'UDF' | ty = 'SP' then
         sql = "select case when routineType = 'F' then 'udf'",
                           "when routineType = 'P' then 'sp'",
                           "else '?' || routineType end, ",
                      "strip(schema) || '.' || strip(name),",
                      "'otp=' || origin || function_type" ,
                        "|| strip(char(parm_count))",
                      "|| ' spec=' || strip(specificName)",
                      "|| ' a=' || active || ' vers=' || version",
                    "from sysibm.sysRoutines",
                    'where routineType =' quote(right(ty, 1), "'"),
                         'and schema' sqlClause(qu) ,
                         'and name' sqlClause(nm)
     else if ty = 'TG' then
         sql = "select 'tg', strip(schema) || '.' || strip(name),",
                        "'teg ' || trigTime || trigEvent||granularity",
                        "|| ' tb ' || strip(tbOwner) || '.'",
                        "||           strip(tbName)",
                    "from sysibm.sysTriggers",
                    'where seqNo=1 and schema' sqlClause(qu),
                           'and name' sqlClause(nm)
     else if ty = 'SQ' then
         sql = "select 'sq', strip(schema) || '.' || strip(name),",
                        "'start ' ||" repAll(dec2s, "?", "start"),
                        "|| ': ' ||" repAll(dec2s, "?", "minValue"),
                        "|| '-' ||" repAll(dec2s, "?", "maxValue"),
                        "|| ' inc ' ||" repAll(dec2s, "?", "increment"),
                    "from sysibm.sysSequences",
                    "where seqType='S' and schema" sqlClause(qu),
                           "and name" sqlClause(nm)
     else if ty = 'SY' then
         sql = "select 'sy', strip(creator) || '.' || strip(name),",
                        "'for ' || strip(tbCreator) || '.'" ,
                               "||strip(tbName)",
                    "from sysibm.sysSynonyms",
                    "where creator" sqlClause(qu),
                         "and name" sqlClause(nm)
     else do
        call mAdd o, ty left(qu'.'nm, 30) '* query nicht implementiert'
        return
        end
     call sqlQuery 1, sql 'order by 2', ,
        , classNew('n* SQL u f FT v, f FN v, f FI v')
     do cx=0 by 1 while sqlFetch(1, d)
             call mAdd o, lefA(m.d.ft, 3) lefA(m.d.fn, 30) m.d.fi
             end
     call  sqlClose 1
     if cx = 0 then
         call mAdd o, lefA(ty, 3) lefA(strip(qu)left('.', qu \== '') ,
                   || strip(nm), 30) '* nicht gefunden'
    return
endProcedure expandScope

/*--- return sql condition (= String oder like String) ---------------*/
sqlClause: procedure expose m.
parse arg val
     val = translate(val, '%_', '*?')
     if verify(val, '%_', 'm') > 0 then
          return 'like' quote(val, "'")
     else
          return '=' quote(val, "'")
endProcedure sqlClause

lefA: procedure expose m.
parse arg s, len
    if length(s) < len then
        return left(s, len)
    else
        return s
endProcedure lefA

/*--- copy srcDdl und srcCat aus anderem rz --------------------------*/
receiveSource: procedure expose m.
parse arg rz
    if rz = '' | rz = '*' | rz = m.myRz then
        call err 'rs receiveSource mit ungueltigem rz' rz
    call readAuftrag rz, m.auftrag.dataset, m.e.auftrag
    call analyseAuftrag
    if m.e.nachtrag = '?' then
        call err 'keine Version in Auftrag' m.e.auftrag 'im' rz
    nacMbr = left(m.e.auftrag, 7) || m.e.nachtrag
    call csmCopy rz'/'m.libPre'.srcDdl('nacMbr')', m.libPre'.'rz'DDL'
    call csmCopy rz'/'m.libPre'.srcCat('nacMbr')', m.libPre'.'rz'Cat'
    call readAuftrag   , m.auftrag.dataset, m.auftrag
    call mAdd auftrag, addDateUs('receiveSource' rz,
                        m.libPre'.'rz'Cat('nacMbr')')
    return
endProcedure receiveSource

/*--- copy wsl aus anderem rz ----------------------------------------*/
receiveWSL: procedure expose m.
parse arg rz
    if rz = m.myRz then
        rz = ''
    call analyseAuftrag
    sWsl = 'dsn.dba.clon.wsl('left(m.e.auftrag, 7)'Q)'
    sIff = 'dsn.dba.'left(m.e.auftrag, 7)'Q.IFF'
    if rz <> '' then do
        call csmCopy rz'/'sWsl, sWsl
        if adrCsm("dslist SYSTEM("rz") DSNMASK('"sIff"') SHORT", 4) = 0,
               & stemSize = 1 then
            call csmCopy rz'/'sIff, sIff
        else
            say 'iff existiert nicht im' rz
        end
    call cloneWsl '', m.e.auftrag, 1
    call mAdd auftrag, addDateUs('receiveWSL' rz)
    return
endProcedure receiveWSL

/*--- send wsl to the argument rz ------------------------------------*/
sendWSL: procedure expose m.
parse arg rz
    if rz = m.myRz then
        rz = ''
    call analyseAuftrag
    if m.versions = '' | m.compares <> '' then
        call warn 'sendWSL ohne versions oder mit compares'
    sWsl = 'dsn.dba.clon.wsl('left(m.e.auftrag, 7)'Q)'
    sIff = 'dsn.dba.'left(m.e.auftrag, 7)'Q.IFF'
    if sysDsn("'"sWsl"'") <> 'OK' then
        call err 'source wsl fehlt:' sWsl sysDsn("'"sWsl"'")
    if rz <> '' then do
        call csmCopy sWsl, rz'/'sWsl
        if sysDsn("'"sIff"'") <> 'OK' then
            say 'iff existiert nicht' sIff sysDsn("'"sIff"'")
        else
            call csmCopy sIff, rz'/'sIff
        end
    call cloneWsl rz, m.e.auftrag, 1
    call mAdd auftrag, addDateUs('sendWSL' rz)
    return
endProcedure sendWSL

/*--- clone a wsl mbr in the rz sys,
          if doRemove=1 remove old members first ---------------------*/
cloneWsl: procedure expose m.
parse arg sys, mbr, doRemove
                 /* copy multi clone jcl from target rz */
    jcl = csmSysDsn(sys'/DSN.DBA.MULTI.CLONE'right(mbr, 1)'.JCL', 0)
    CALL READdsn jcl, m.jj.
                                /* modify the jcl */
    do jx=1 to m.jj.0
        if word(m.jj.jx, 2) == '=' then do
            if word(m.jj.jx, 1) = 'SRCWSLST' then
                m.jj.jx = 'SRCWSLST =' left(mbr, 7)'Q'
            else if word(m.jj.jx, 1) = 'CLNWSLST' then
                m.jj.jx = 'CLNWSLST =' mbr
            end
        else if space(subword(m.jj.jx, 1, 2) ,1) ,
                == '//DELMBRIF IF' then do
            m.jj.jx = '//DELMBRIF IF RC =' (7 *(^doRemove)) 'THEN'
            end
        else if word(m.jj.jx, 1) == 'DELETE' then do
            nm = word(m.jj.jx, 2)
            cx = pos('(', nm)
            if right(nm, 1) = ')' & cx > 0 then
                m.jj.jx = '  DELETE' left(nm, cx)mbr')'
            else
                call err 'bad delete' jx m.jj.jx
            end
        end
    call writeSub jj, sys, 1
    return 0
endProcedure cloneWsl

warn:
    say '*** warning:' arg(1)
    return
endSubroutine warn

repAll: procedure expose m.
parse arg src, w, new
    res = ''
    cx = 1
    do forever
        nx = pos(w, src, cx)
        if nx < 1 then
            return res || substr(src, cx)
        res = res || substr(src, cx, nx-cx) || new
        cx = nx + length(w)
        end
endProcedure repAll

/**** ca *************************************************************/
caDDl: procedure expose m.
parse arg o, scp, glblCh
    do sx=1 to m.scp.0
        sn = scp'.'sx
        if m.sn.type == 'TS' then do
            call mAdd o, ' TABLESPACE' m.sn.qual m.sn.name
            call caExplode o, TABLE INDEX VIEW SYNONYM TRIGGER ,
                              MQTB_T MQTB_I MQTB_V MQTB_S ,
                              MQVW_VW MQVW_I MQVW_V MQVW_S
            end
        else if m.sn.type == 'VW' then do
            call mAdd o, ' VIEW      ' m.sn.qual m.sn.name
            end
        else
            call err 'implement type' m.sn.type 'for ca'
        end
    call readDsn m.libSkels'CCO2)', m.cco2.
    call mapExpAll e, o, cco2
    call mAdd o, ' GLBLNAME  ' glblCh                  ,
               , ' GLBLCRTR   DBX'
    glblDsn = m.libPre".caGlblCh("glblCh")"
    if sysDsn("'"glblDsn"'") \== 'OK' then
        call err 'mask' glblCh':' glblDsn sysDsn("'"glblDsn"'")
    call readDsn glblDsn, 'M.GLBL.'
    call mAddSt o, glbl
    return
endProcedure caDDL

caExplode: procedure expose m.
parse arg o, expl
    do wx=1
        e1 = word(expl, wx)
        if e1 == '' then
            return
        call mAdd o, '  EXPLODE' e1
        end
endProcedure caExplode
/**** bmc ************************************************************/
/*--- src und trg profile erstellen ----------------------------------*/
bmcVars: procedure expose m.
    m.e.profSrc = m.e.auftrag'_SRC'
    m.e.profTrg = m.e.auftrag'_TRG'
    m.e.profOwn = 'DBXAUFTR'
    return
endProcedure bmcVars

bmcVarsProf: procedure expose m.
parse arg isImport
    m.e.profChg = bmcMask2Prof(m.e.comMask)
    if isImport then
        m.e.profImp = bmcMask2Prof(m.e.impMask)
    return
endProcedure bmcVarsProf

bmcMask2Prof: procedure expose m.
parse arg mask
    m2 = translate(mapExp(e, mask))
    return word(translate(m2, '   ', '.()'), 2)'.'dsnGetMbr(m2)
endProdecure bmcMask2Prof

/*--- src und trg profile erstellen ----------------------------------*/
bmcSrcTrg: procedure expose m.
parse arg oldSrc prof
    if symbol('m.mask.hier') \== 'VAR' then
        call maskHierarchy
    if m.scopeSrc.rz \== m.sysRz | m.scopeTrg.rz \== m.sysRz then
        call err 'bmc compare on other rz not implemented'
    if m.scopeSrc.subsys \== m.scopeTrg.subsys then
        call err 'bmc compare on different subsystems not implemented'
    call configureSubsys m.scopeSrc.rz, m.scopeSrc.subsys
    call bmcProfile m.e.profOwn, m.e.profSrc, 'SCOPESRC'
    if m.optAuto then
        call maskScope m.e.comMask, 'SCOPESRC', 'SCOPETRG'
    call bmcProfile m.e.profOwn, m.e.profTrg, 'SCOPETRG'
    return
endProcedure bmcSrcTrg

bmcProfile: procedure expose m.
parse arg ow, prof, scp
    call sqlOConnect m.scp.subSys
    call sqlExec "insert into bmcacma1.CM_BLPROFILE" ,
                    "(BLPOWNER, blpName, type, template)" ,
         "values('"ow"', '"prof"', 'C', '"prof"####')", -803
    call sqlExec "delete from bmcacma1.CM_SCOPE" ,
                   "where scOwner = '"ow"' and scName = '"prof"'", 100
    do sx=1 to m.scp.0
        sn = scp'.'sx
        if m.sn.type = 'DB' then do
            q1 = m.sn.name
            q2 = ''
            end
        else do
            q1 = m.sn.qual
            q2 = m.sn.name
            end
        call sqlExec "insert into bmcacma1.CM_SCOPE" ,
          "(SCOWNER, SCName, Type, ACTION,OBJECT,NAME_PART1,NAME_PART2",
          ",MIGDT, MIGTS, MIGTB, MIGCK, MIGFK, MIGIX, MIGVW, MIGAU",
          ",MIGSY, MIGAL, MIGRO, MIGTR, MIGUC, MIGAX",
         ")values('"ow"', '"prof"', 'B', 'I'" ,
          ", '"m.sn.type"', '"q1"', '"q2"'" ,
          ",'N'  , 'Y',   'Y',  'Y',    'Y',   'Y',   'Y',  'N'",
          ",'Y'  , 'Y',   '',   'Y',    'Y',   'Y')"
        end
     call sqlCommit
     return
endProcedure bmcProfile
/* copy match begin ***************************************************/
/************************************* begin     copy      match ******/
/*--- wildCard matching with the following wildchars:
          * 0-n chars
          ? 1 char
      fill matched expressions instem st if st is non empty
      return 1 if mask matches wert ----------------------------------*/
match: procedure expose m.
parse arg wert, mask, st
    if st == '' then
        return matchRO(wert, mask)
    m.st.0 = -9
    return matchSt(wert, mask, st, 0)
endProcedure match

/*--- return the fixed prefix of maskt -------------------------------*/
matchPref: procedure
arg mask, suff
    ix = verify(mask, '*?', 'm')
    if ix = 0 then
        return mask
    else
        return left(mask, ix-1)suff
endProcedure matchPref

/*--- return true if mask matches wert -------------------------------*/
matchRO: procedure
arg wert, mask
    ix = verify(mask, '*?', 'm')
    if ix < 1 then return (mask == wert)
    if length(wert) < ix-1 then return 0
    if left(mask, ix-1) \== left(wert, ix-1) then return 0
    if substr(mask, ix, 1) == '?' then do
        if length(wert) < ix then return 0
        return matchRO(substr(wert, ix+1), substr(mask, ix+1))
        end
    mask = substr(mask, ix+1)                /* * 0 - n Chars */
    do ex = 1+length(wert) to ix by -1
        if matchRO(substr(wert, ex), mask) then return 1
        end
    return 0
endProcedure matchRO

/*--- wildCard matching: fill matched expressions instem st
      return 1 if mask matches wert ----------------------------------*/
matchSt: procedure expose m.
parse arg wert, mask, st, sx
    ix = verify(mask, '*?', 'm')
    if ix < 1 then do
        if mask \== wert then
            return 0
        m.st.0 = sx
        return 1
        end
    if \ abbrev(wert, left(mask, ix-1)) then
        return 0
    reMa = substr(mask, ix+1)
    sx = sx + 1
    if substr(mask, ix, 1) == '?' then do /* ? 1 Character */
        if length(wert) < ix then
            return 0
        m.st.sx = substr(wert, ix, 1)
        return matchSt(substr(wert, ix+1), reMa, st, sx)
        end
    do lx = 1+length(wert) to ix by -1 /* greedy: from all to empty */
        if matchSt(substr(wert, lx), reMa, st, sx) then do
            m.st.sx = substr(wert, ix, lx-ix)
            return 1
            end
        end
    return 0
endProcedure matchSt

matchTrans: procedure expose m.
parse arg mask, st
    r = ''
    ox = 1
    sx = 0
    ix = verify(mask, '*?', 'm')
    do sx=1 to m.st.0 while ix > 0
        if sx > m.st.0 then
            call err 'matchTrans('mask',' st') has only' ,
                                     m.st.0 'variables'
        r = r || substr(mask, ox, ix-ox)m.st.sx
        ox = ix+1
        ix = verify(mask, '*?', 'm', ox)
        end
    if ix > 0 then
        call err 'matchTrans('mask',' st') has only' ,
                                     m.st.0 'variables'
    return r || substr(mask, ox)
endProcedure matchTrans
/* copy match end *****************************************************/
/* copy csm begin ******************************************************
    interface to csm,
        it is integrate with adrTso, eg. dsnAlloc , 'RZ3/..' uses csm
***********************************************************************/
adrCsm:
    return adrTso('csmExec' arg(1), arg(2))
endProcedure adrCsm

csmCopy: procedure expose m.
parse arg csnFr, csnTo, ggRet
    if dsnGetMbr(csnTo) \= '' ,
         & dsnGetMbr(csnFr) <> dsnGetMbr(csnTo) then
        call err 'member rename' csnFr 'to' csnTo
    parse value csmSysDsn(csnFr) with sysFr '/' dsnFr
    parse value csmSysDsn(csnTo) with sysTo '/' dsnTo
    if sysFr = '*' & sysTo <> '*' then do
        pdsTo = dsnSetMbr(dsnTo)
        al = "SYSTEM("sysTo") DDNAME(COPYTo)",
             "DATASET('"pdsTo"') DISP(SHR)"
        alRes = dsnAlloc(systo'/'pdsTo, ,'COPYTO', '*')
        if datatype(alRes, 'n') then do
                   /* wir müssen es selbst allozieren csmxUtil
                      vergisst management class ||||| */
            say 'could not allocate' al
            say 'trying to create'
            rc = listDsi("'"dsnSetMbr(dsnFr)"' SMSINFO")
            if rc = 0 then
                mv = ''
            else if rc = 4 & sysReason = 19 then do
                mv = 'UNITCNT(30)'
                say 'multi volume' mv
                end
            else if rc \= 0 then
                call err 'listDsi rc' rc 'reason' sysReason,
                                     sysMsgLvl1 sysMsgLvl2
            al = left(al, length(al)-4)'CAT)'
            if right(sysDsSms, 7) == 'LIBRARY' ,
                | abbrev(sysDsSms, 'PDS') then
                 al = al 'DSNTYPE(LIBRARY)'
            if sysUnits = 'TRACK' then
                sysUnits = 'TRACKS'
            al = al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
                "RECFM("sysREcFM") LRECL("SYSLRECL")",
                "blksize("sysBLkSIZE")",
                "SPACE("sysPrimary"," sysSeconds")" sysUnits mv
            call adrCsm "allocate" al
            end
        call adrTso 'free dd(copyTo)'
        end
    c = "'COPY" sysFr"/''"dsnFr"'' TO" ,
                        sysTo"/''"dsnSetMbr(dsnTo)"'' REPLACE'"
    return adrTso("exec 'CSM.RZ1.P0.EXEC(CSRXUTIL)'" c , ggRet)
    return
endProcedure csmCopy

csmAlloc: procedure expose m.
parse arg dsn dd disp rest ':' nn, retRc
    sys = ''
    a2 = ''
    parse value csmSysDsn(dsn) with sys '/' dsn
    if disp = '' then
        disp = 'shr'
    al = "SYSTEM("sys") DDNAME("dd")"
    if dsn <> '' then do
        a2 = "DATASET('"dsnSetMbr(dsn)"')"
        mbr = dsnGetMbr(dsn)
        if mbr <> '' then
            a2 = a2 'MEMBER('mbr')'
        end
    if abbrev(disp, 'SYSOUT(') then
        a2 = a2 disp
    else
        a2 = a2 "DISP("disp")"
    if retRc <> '' | nn = '' then do
        alRc = adrCsm('allocate' al a2 rest, retRc)
        if alRc <> 0 then
            return alRc
        return dd 'call adrTso "free dd('dd')";'
        end
    do retry=0 by 1
        alRc = adrCsm('allocate' al a2 rest, '*')
        if alRc = 0 then
            return dd 'call adrTso "free dd('dd')";'
        if retry > 0 | nn = '' | wordPos(disp, 'OLD SHR') < 1 then
            return err('cmsAlloc rc' alRc 'for' al rest)
        say 'csmAlloc rc' alRc 'for' al a2 rest '...trying to create'
        nn = al 'disp(cat)' dsnCreateAtts(dsn, nn, 1)
        call adrCsm 'allocate' nn
        call adrTso 'free  dd('dd')'
        end
endProcedure csmAlloc

csmSysDsn: procedure expose m.
parse upper arg dsn, withStar
    if pos('/', dsn) < 1 then
        sys = '*'
    else
        parse var dsn sys '/' dsn
    if sys <> '' & sys <> '*' & sys <> sysvar(sysnode) then
        return sys'/'dsn
    else if withStar == 0 then
        return dsn
    else
        return '*/'dsn
endProcedure csmSysDsn
/* copy csm end********************************************************/
/* copy sqlO   begin ***************************************************
    sql interface  mit  o und j Anbindung
***********************************************************************/
sqlOini: procedure expose m.
    if m.sqlO.ini == 1 then
        return
    call sqlIni
    m.sqlO.ini = 1
    m.sqlO.cursors  = left('', 200)
    call jIni
    call classNew 'n SqlResultRdr u JRWO', 'm',
        , "jReset m.m.cursor = arg; m.m.type = arg2;",
        , "jOpen  call sqlResultRdrOpen m, opt",
        , "jClose call sqlClose m.m.cursor",
        , "jReadO return sqlSelReadO(m)"
    call classNew 'n SqlSel u JRWO', 'm',
        , "jReset m.m.src = arg; m.m.type = arg2;",
        , "jOpen  call sqlSelOpen m, opt",
        , "jClose call sqlSelClose m",
        , "jReadO return sqlSelReadO(m)"
    call classNew 'n SqlDRS u SqlSel', 'm',
        , "jReset m.m.loc = arg; m.m.type = arg2;",
        , "jOpen  call sqlDRSOpen m, opt",
        , "jClose call sqlSelClose m",
        , "jReadO return sqlSelReadO(m)"
    call classNew 'n SqlRxConnection u', 'm',
        , "sqlQuery  return sqlRxQuery(cx, src, retOk)",
        , "sqlFetch  return sqlRxFetch(cx, dst, retOk)",
        , "sqlClose  return sqlRxClose(cx, retOk)",
        , "sqlUpdate return sqlRxUpdate(cx, src, retOk)",
        , "sqlCall   call err 'implement sqlRxCall"
    call classNew 'n SqlRxStatement u', 'm',
        , "sqlQuery  return sqlRxQuery(m.cx.cursor, src, retOk)",
        , "sqlFetch  return sqlRxFetch(m.cx.cursor, dst, retOk)",
        , "sqlClose  return sqlRxClose(m.cx.cursor, retOk)",
        , "sqlUpdate return sqlRxUpdate(m.cx.cursor, src, retOk)",
        , "sqlCall   call err 'implement sqlRxCall"
    call classNew 'n SqlCsmConnection u', 'm',
        , "sqlQuery  return sqlCsmQuery(cx, src, retOk)",
        , "sqlFetch  return sqlCsmFetch(cx, dst)",
        , "sqlClose  return 0",
        , "sqlUpdate call err 'implement sqlCsmUpdate'"   ,
        , "sqlCall   call err 'implement sqlCsmCall'"
    call classNew 'n SqlCsmStatement u', 'm',
        , "sqlQuery  return sqlCsmQuery(m.cx.cursor, src, retOk)",
        , "sqlFetch  return sqlCsmFetch(m.cx.cursor, dst)",
        , "sqlClose  return 0",
        , "sqlUpdate call err 'implement sqlCsmUpdate'"   ,
        , "sqlCall   call err 'implement sqlCsmCall'"
    return 0
endProcedure sqlOini
/*--- execute a query from sql, with one resultset -------------------*/
sqlQuery: procedure expose m.
parse arg cx, src, retOk, m.sql.cx.type
    if m.sql.cx.type \== '' then
        m.sql.cx.type = class4Name(m.sql.cx.type)
    if datatype(cx, 'n') then
        interpret objMet(m.sql.connection, 'sqlQuery')
    else
        interpret objMet(cx, 'sqlQuery')
/*--- fetch next row to m.dst.* at end return false ------------------*/
sqlFetch: procedure expose m.
parse arg cx, dst, retOk
    if datatype(cx, 'n') then
        interpret objMet(m.sql.connection, 'sqlFetch')
    else
        interpret objMet(cx, 'sqlFetch')
/*--- close cursor 'c'cx ---------------------------------------------*/
sqlClose: procedure expose m.
parse arg cx, retOk
    if datatype(cx, 'n') then
        interpret objMet(m.sql.connection, 'sqlClose')
    else
        interpret objMet(cx, 'sqlClose')
    return 0
/*-- execute an sql with no resultset, but possibly outParms ---------*/
sqlUpdate: procedure expose m.
parse arg cx, src, retOk
    if cx == '' | datatype(cx, 'n') then
        interpret objMet(m.sql.connection, 'sqlUpdate')
    else
        interpret objMet(cx, 'sqlUpdate')
    return sqlCsmUpdate(cx, src, retOk)
/*-- execute an sql call with outParms and multiple resultSets -------*/
sqlCall: procedure expose m.
parse arg cx, src, retOk
    if cx == '' | datatype(cx, 'n') then
        interpret objMet(m.sql.connection, 'sqlCall')
    else
        interpret objMet(cx, 'sqlCall')
    return sqlCsmUpdate(cx, src, retOk)
/*--- connect to the db2 subsystem sys -----------------------------*/
sqlOConnect: procedure expose m.
parse arg sys, retCon
    call sqlOIni
    return sqlConnect(sys, retCon)
endProcedure sqlOConnect

sqlSel: procedure expose m.
parse arg src, type
     s = oNew('SqlSel', inp2str(src, '-sql'), type)
     call pipeWriteAll s
     return m.s.rowCount
endProcedure sqlSel

sqlStmtsOpt: procedure expose m.
parse arg src, opts
    upper opts
    sub = ''
    o = ''
    ggRet = ''
    do wx=1 to words(opts)
        w = word(opts, wx)
        if abbrev(w, '-SQL') then
            o = o'-sql'substr(w, 5)
        else if w == '-O' | w == 'O' then
            o = o'-o'
        else if w = '*' | datatype(w, 'n') then
            ggRet = ggRet w
        else if length(w) == 4 then
            sub = w
        else
            call err 'bad opt' w 'in opts' opts 'not -sql? -o or subsys'
        end
    call sqlOIni
    if sub == '' then
        call sqlOConnect
    else if sub \== m.sql.connected then
        call sqlConnect sub
    return sqlStmts(src, strip(ggRet), strip(o))
endProcedure sqlStmtsOpt

/*** execute sql's in a stream (separated by ;)
       opt: 'o' ==> write objects, otherwise fmtFTab
            's' ==> spufi formatting (window 72) otherwise linebreak */
sqlStmts: procedure expose m.
parse arg src, ggRet, opt
   dlm = ';'
   isStr = oStrOrObj(src, m.j.in)
   fLen = ''
   if pos('sql', opt) > 0 then
       fLen = word(substr(opt, pos('sql', opt)+3), 1)
   if isStr then do
       m.sqlStmts.rdr = ''
       call sbSrc sqlStmts, ggStr
       end
   else do
       fi = jOpen(o2File(ggObj), '<')
       call jCatSqlReset sqlStmts, , fi, fLen
       end
   do forever
       s1 = jCatSqlNext(sqlStmts, dlm)
       if s1 = '' then
           leave
       w1 = translate(word(s1, 1))
       if w1 == 'TERMINATOR' then do
            dlm = strip(substr(m.s.val, 12))
            if length(dlm) \== 1 then
                call scanErr s, 'bad terminator' dlm 'in' strip(m.s.val)
            iterate
            end
       call out sqlStmt(s1, ggRet, opt)
       end
   if \ isStr then
       call jClose fi
   return 0
endProcedure sqlStmts

sqlStmt: procedure expose m.
parse arg src, retOk, opt
    cx = sqlGetCursor()
    r1 = sqlExecute(cx, src, retOK)
    res = 'sqlCode' r1
    if wordPos(m.sql.cx.fun, 'DELETE INSERT UPDATE') > 0 then
        res = res',' m.sql.cx.updateCount 'rows' ,
              translate(fun, m.mAlfLC, m.mAlfUC)'d'
    else if m.sql.cx.updateCount\=='' & m.sql.cx.updateCount\=0 then
        res = res',' m.sql.cx.updateCount 'rows updated'
    aa = strip(src)
    if m.sql.cx.resultSet \== '' then do
        rdr = sqlResultRdr(cx)
        if pos('o', opt) > 0 then
            call pipeWriteAll rdr
        else
            call fmtFTab sqlStmtFmt, rdr
        res = m.rdr.rowCount 'rows fetched'
        end
    ll = 75 - length(res)
    if length(aa) > ll then
        aa = space(aa, 1)
    if length(aa) > ll then
        aa = left(aa,  ll-3)'...'
    call sqlFreeCursor cx
    return res':' aa
endProceduire sqlStmt

removeSqlStmt: procedure expose m.
parse arg src, ggRet, opt
    bx = verify(src, '( ')
    if bx < 1 then
        return ''
    fun = translate(word(substr(src, bx), 1))
    w2  = translate(word(substr(src, bx), 2))
    res = ''
    if fun == 'SELECT' | fun = 'WITH' then do
        s = oNew('SqlSel', inp2str(src, '%S%+Q\s'))
        if pos('o', opt) > 0 then
            call pipeWriteAll s
        else
            call fmtFTab sqlStmtFmt, s
        res = m.s.rowCount 'rows fetched'
        end
    else if  fun = 'SET' &  abbrev(w2, ':') then do
        ex = pos('=', w2)
        if ex > 2 then
            var = strip(substr(w2, 2, ex-2))
        else
            var = strip(substr(w2, 2))
        if var = '' then
            var = 'varUnbekannt'
        call sqlExec src, ggRet
        res = 'sqlCode' sqlCode var'='value(var)
        end
    else if fun = 'SET' | (fun = 'DECLARE' & w2 = 'GLOBAL') then do
        call sqlExImm src, ggRet
        res = 'sqlCode' sqlCode
        end
    else if fun = 'CALL' then do
        res = sqlStmtCall(src, ggRet, opt)
        end
    else do
        if pos('-', ggRet) < 1 & fun = 'DROP' then
            ggRet = -204 ggRet
        call sqlExec src, ggRet
        res = 'sqlCode' sqlCode
        if wordPos(fun, 'DELETE INSERT UPDATE') > 0 THEN
            res = res',' sqlErrd.3 'rows' ,
                  translate(fun, m.mAlfLC, m.mAlfUC)'d'
        end
    aa = strip(src)
    ll = 75 - length(res)
    if length(aa) > ll then
        aa = space(aa, 1)
    if length(aa) > ll then
        aa = left(aa,  ll-3)'...'
    return res':' aa
endProcedure removeSqlStmt

sqlStmtCall: procedure expose m.
parse arg src, ggRet, opt
    s = scanSrc(scanSqlReset(sqlstmtcall, ,0), src)
    if \ scanSqlId(scanSkip(s)) | m.s.val \== 'CALL' then
        call scanErr s, 'not a call'
    if \ scanSqlQuId(scanSkip(s)) then
        call scanErr s, 'qualified id missing after call'
    loc = ''
    if m.s.val.0 = 1 then
        wh = 'name =' quote(m.s.val.1, "'")
    else if m.s.val.0 = 2 then
        wh = "schema = '"strip(m.s.val.1)"'" ,
             "and name = '"strip(m.s.val.2)"'"
    else if m.s.val.0 = 3 then do
        loc = m.s.val.1
        wh = "schema = '"strip(m.s.val.2)"'" ,
             "and name = '"strip(m.s.val.3)"'"
        end
    else
        call scanErr s, 'storedProcedureName' m.s.val ,
               'has' m.s.val.0 'parts, should have 1, 2 or 3'
    pn = m.s.val
    da = sqlStmtCallDa(sqlStmtCall, loc, wh)
    if \ scanLit(scanSkip(s), '(') then
        call scanErr s, '( expected after call' pn
    varChars = f
    do ax=1
        m.da.ax.varName = ''
        isEmpty = 0
        if scanLit(scanSkip(s), ':') then do
             if \ scanVerify(scanSkip(s), m.mAlfDot) then
                 call scanErr s, 'variable expected after : in call' pn
             m.da.ax.varName = m.s.tok
             if m.da.ax.io == 'i' | m.da.ax.io == 'b' then
                 m.da.ax.sqlData = envGet(m.da.ax.varName)
             end
        else if scanString(s) then
            m.da.ax.sqlData = m.s.val
        else if scanVerify(s, ',):;', 'm') then
            m.da.ax.sqlData = strip(m.s.tok)
        else
            isEmpty = 1
        if scanLit(scanSkip(s), ')') then
            leave
        if \ scanLit(s, ',') then
            call scanErr s, if(isEmpty, 'value, var, ') ,
                         || "',' or ')' expected"
        end
    if ax \= m.da.sqlD then
        if \ (ax=1 & m.da.sqlD = 0 & isEmpty) then
            call scanErr s, 'call with' ax 'parms but' ,
                                pn 'needs' m.da.sqld
    caCo = sqlExec('call' pn 'using descriptor :M.'da, 466)
    call out '--- called' pn', sqlCode' caCo
    do ax=1 to m.da.sqlD
        call Out '  parm' ax m.da.ax.io m.da.ax.parmName,
                 || if(m.da.ax.varName \== '',' $'m.da.ax.varName),
               '=' m.da.ax.sqlData
        if m.da.ax.varName \== '' then
            call envPut m.da.ax.varName, m.da.ax.sqlData
        end
    if caCo = 466 then do
        drop sqlDP
        call sqlExec 'describe procedure :pn into :m.sqlDp'
        if m.sqldp.sqlD < 1 then
             call err 'bad sqldp sqlD='m.sqldp.sqlD 'for sqlCode' caCo
        do dx=1 to m.sqldp.sqlD
            call out '  dynamic result set' dx m.sqldp.dx.sqlName ,
                     'locator='m.sqldp.dx.sqlLocator
            end
        do dx=1 to m.sqldp.sqlD
            drs = 'dynamic result set' dx'='m.sqldp.dx.sqlName 'of' pn
            call out '--- begin of' drs
            rdr = sqlDRS(m.sqldp.dx.sqlLocator)
            if pos('o', opt) > 0 then
                call pipeWriteAll rdr
            else
                call fmtFTab sqlStmtFmt, rdr
            call out '---' m.rdr.rowCount 'rows fetched from' drs
            end
        end
    return 'sqlCode' caCo
endProcedure sqlStmtCall

sqlStmtCallDa: procedure expose m.
parse arg da, loc, wh
    cr = if(loc=='',,loc'.')'sysIbm'
    sql = "select 'SCHEMA=''' || strip(schema) || ''''",
             "|| ' and name='''   || strip(name  ) || ''''",
             "|| ' and specificName=''' || strip(specificName) || ''''",
             "|| ' and routineType =''' || strip(routineType ) || ''''",
             "|| ' and VERSION     =''' || strip(VERSION     ) || ''''",
          "from" cr".SysRoutines ",
          "where" wh "and active = 'Y'"
    if sqlpreAllCl(49, sql, rou, ':m.rou') <> 1 then
        call err m.rou.0 'routines found for' wh
    rdr = jOpen(sqlRdr('select * from' cr'.sysParms where' m.rou,
         'order by ordinal'), '<')
    do ix=1 while assNN('A', jReadO(rdr))
         if m.a.ordinal <>  ix then
             call err 'ix' ix 'mismatch ordinal' m.a.ordinal
         ty = m.a.dataTypeId
         m.da.ix.sqlType = ty
         m.da.ix.sqlLen  = m.a.length
         m.da.ix.sqlLen.sqlPrecision = m.a.length
         m.da.ix.sqlLen.sqlScale     = m.a.scale
         if wordPos(ty, 384 385) > 0 then        /* date */
             m.da.ix.sqlLen  = 10
         else if wordPos(ty, 388 389) > 0 then   /* time */
             m.da.ix.sqlLen  = 8
         else if wordPos(ty, 392 393) > 0 then   /* timestamp */
             m.da.ix.sqlLen  = 26
         m.da.ix.sqlData = ''
         m.da.ix.parmName= m.a.parmName
         m.da.ix.io      = translate(m.a.rowType, 'iob', 'POB')
         m.da.ix.sqlInd  = 1
         end
    m.da.sqlD = ix - 1
    return da
endProcedure sqlStmtCallDa

sqlResultRdr: procedure expose m.
parse arg cx, type
     return oNew('SqlResultRdr', cx, type)
endProcedure sqlRdr

sqlRdr: procedure expose m.
parse arg src, type
     return oNew('SqlSel', inp2str(src, '%S%+Q\s'), type)
endProcedure sqlRdr

sqlResultRdrOpen: procedure expose m.
parse arg m, opt
    if opt\== m.j.cRead then
        call err 'opt not' m.j.cRead 'sqlResultRdrOpen('m',' opt')'
    m.m.jReading = 1
    m.m.rowCount = 0
    return m
endProcedure sqlResultRdrOpen

/*--- prepare and open cursor
      generate type and fetchList ------------------------------------*/
sqlSelOpen: procedure expose m.
parse arg m, opt
    m.m.cursor = sqlGetCursor()
    call sqlQuery m.m.cursor, m.m.src, ,m.m.type  /* ????? */
    return sqlResultRdrOpen(m, opt)
endProcedure sqlOpen

/*--- dynamic result sets --------------------------------------------*/
sqlDRS: procedure expose m.
parse arg loc, type
     return oNew('SqlDRS', loc, type)
endProcedure sqlDRS

sqlDRSOpen: procedure expose m.
parse arg m, opt
    if opt\== m.j.cRead then
        call err 'opt not' m.j.cRead 'sqlDRSOpen('m',' opt')'
    crs = sqlGetCursor('a')
    crN = 'C'crs
    m.m.cursor = crs
    call sqlexec 'allocate C'crs 'cursor for result set :m.m.loc'
    call sqlExec('describe cursor :crN into :M.SQL.'crs'.D')
    m.m.jReading = 1
    m.m.rowCount = 0
    return m
endProcedure sqlDRSOpen

/*--- return a free cursor -------------------------------------------*/
sqlGetCursor: procedure expose m.
parse arg rng
    if rng == '' then
        return sqlGetCursorRng(rng, 10, 49)
    else if rng == 'h' then
        return sqlGetCursorRng(rng, 60, 99)
    else if rng == 'a' then
        return sqlGetCursorRng(rng, 110, 199)
    else
        call err 'bad cursor range' rng
endProcedure sqlGetCursor

sqlGetCursorRng: procedure expose m.
parse arg rng, fr, to
    cx = pos(' ', m.sqlO.cursors, fr)
    if cx < fr & cx > to then
        call err "no more '"rng"' cursors between" fr "and" to,
                 ":"m.sqlO.cursors
    m.sqlO.cursors = overlay('u', m.sqlO.cursors, cx)
    return cx
endProcedure sqlGetCursorRNG

/*--- mark a cursor as closed ----------------------------------------*/
sqlFreeCursor: procedure expose m.
parse arg cx
    if substr(m.sqlo.cursors, cx, 1) \== 'u' then
         call err 'sqlFreeCursor('cx') not in use :'m.sqlo.cursors
    m.sqlO.cursors = overlay(' ', m.sqlO.cursors, cx)
    return
endProcedure sqlFreeCursor
/*--- create the type, fetch vars etc. from the sqlDA ---------------*/
sqlFetchClass: procedure expose m.
parse arg cx
    if m.sql.cx.type = '' then do
        ff = mCat('SQL.'cx'.COL', '%+Q v, f ')
        m.sql.cx.type = classNew('n* SQL u f' ff 'v')
        end
    return m.sql.cx.type
endProcedure sqlFetchClass

/*--- fetch cursor for this sqlSel -----------------------------------*/
sqlSelReadO: procedure expose m.
parse arg m
    cx = m.m.cursor
    v = mNew(sqlFetchClass(cx))
    if \ sqlFetch(cx, v) then
        return ''
    m.m.rowCount = m.m.rowCount + 1
    return v
endProcedure sqlSelReadO

/*--- close sql Cursor -----------------------------------------------*/
sqlSelClose: procedure expose m.
parse arg m, v
    call sqlClose m.m.cursor
    call sqlFreeCursor m.m.cursor
    m.m.cursor = ''
    return m
endProcedure sqlSelClose
/*--- generate the format ff for a sql cx as specified in sp
          use the information from the sqlDa -------------------------*/
deleteSqlGenFmt: procedure expose m.
parse arg ff, cx, sp
    if abbrev(sp, '=') then
        return substr(sp, 2)
    if sp = '' then
        sp = '*st'
    m.ff.0 = m.sql.cx.d.sqlD
    m.ff.flds = oFlds(sqlType(cx))
    if abbrev(sp, '*') then do
        do ix=1 to m.ff.0
            m.ff.ix = substr(sp, 2)
            end
        return ff
        end
    if abbrev(fmts, '=') then
        m.Sql.cx.FMT = substr(fmts, 2)
    defs = 'ir7 fr9 sl12 Tl26' sp
    do wx = 1 to words(defs)
        parse value word(defs, wx) with ty 2 fo
        select
            when ty = 'd' then      t.384 = fo
            when ty = 'f' then      t.480 = fo'/f'
            when ty = 'i' then      t.496 = fo'/i'
            when ty = 'n' then      t.484 = fo'/n'
            when ty = 's' then      t.448 = fo
            when ty = 't' then      t.388 = fo
            when ty = 'T' then      t.392 = fo
            otherwise          call err 'bad type' ty 'for format' fo
            end
        end
    if symbol('t.496') == 'VAR' then
        t.500 = t.496
    if symbol('t.448') == 'VAR' then do
        t.452 = t.448
        t.456 = t.448
        t.464 = t.448
        end
    do wx = 1 to m.ff.0
        ty = m.sql.cx.d.wx.sqlType
        le = m.sql.cx.d.wx.sqlLen
        withNulls = ty // 2
        ty = ty - withNulls
        if symbol('t.ty') <> 'VAR' then
            call err 'sqlType' ty 'not supported'
        parse var t.ty fo 2 fl '/' op
        if op = 'i' then
             if le = 2 then le = 6
             else           le = 12
        else if op <> '' then
            call err 'length for sqlType' ty 'op' op 'not implemented'
        if fl = '=' then
            fl = le
        else if abbrev(fl, '<') then
            fl = min(le, substr(fl, 2))
        m.ff.wx = fo || fl
        end
    return ff
endProcedure sqlGenFmt
/* copy sqlO   end   **************************************************/
/* copy sqlCsm begin **************************************************/
/*--- send an sql to csm an handle sqlCode ---------------------------*/
sqlCsmExe:
parse arg cx, ggSqlStmt, ggRetOk
    sql_HOST =  m.sql.conHost
    SQL_DB2SSID = m.sql.conSSID
    sql_query = ggSqlStmt
    address tso "CSMAPPC START PGM(CSMASQL)"
    if \ (rc = 0 |  rc = 4) then
        call err 'csmappc rc' rc
    if sqlCode = 0 then
        return 0
    else if pos('*', ggRetOk) > 0 | wordPos(sqlCode, ggRetOk) > 0 ,
            then do
        if sqlCode < 0 & pos('say', ggRetOk) > 0 then
            call errSay sqlmsg(sqlCA2Rx(sqlCa))
        return sqlCode
        end
    else if sqlCode < 0 then
        call err sqlmsg(sqlCA2rx(sqlCa))
    else if pos('w', ggRetOk) < 1 then
        if sqlCode = 100 then
            call errSay 'sqlCode +100 row not found\nstmt =' ggSqlStmt
        else
            call errSay sqlMsg(sqlCA2rx(sqlCa)), ,'w'
    return sqlCode
endProcedure sqlCsmExe

/*--- execute a query from sql, with one resultset -------------------*/
sqlCsmQuery: procedure expose m.
parse arg cx, sqlSrc, retOk, src
    res = sqlCsmExe(cx, sqlSrc, 100 retOk)
    if res < 0 then
        return res
    f = m.sql.cx.type
    if src == '' then
        src = 'SQL.'cx'.DATA'
    m.sql.cx.data = src
    if f \== '' then do
        f = f'.FLDS'
        if m.f.0 < sqlD then
            call err 'not enough fields in type'
        end
    do kx=1 to sqlD
        rxNa = SQLDA_REXXNAME.kx
        cn = sqlVarName(f, kx, sqlDa_name.kx)
        m.sql.cx.col.kx = cn
        do rx=1 to sqlRow#
            if substr(sqlIndicator.rx, kx ,1) == 'ff'x then
                m.src.rx.cn = m.sqlNull
            else
                m.src.rx.cn = value(rxNa'.'rx)
            end
        end
    m.src.0 = sqlRow#
    m.sql.cx.col.0 = sqlD
    m.sql.cx.daIx = 0
    return 0
endProcedure sqlCsmQuery

sqlCsmFetch: procedure expose m.
parse arg cx, dst
    src = m.sql.cx.data
    rx = m.sql.cx.daIx + 1
    if rx > m.sql.cx.data.0 then
        return 0
    m.sql.cx.daIx = rx
    do kx = 1 to m.sql.cx.col.0
        c = m.sql.cx.col.kx
        m.dst.c = m.src.rx.c
        end
    return 1
endProcedure sqlCsmFetch
/* copy sqlCsm end   **************************************************/
/* copy sql    begin ***************************************************
    sql interface
***********************************************************************/
/*--- initialize sqlRx (belongs to sqlQ, but currently only one|) ----*/
sqlIni: procedure expose m.
    if m.sql.ini == 1 then
        return
    m.sqlNull = '---'
    m.sqlInd = 'sqlInd'
    m.sqlRetOK.0 = 0
    m.sqlCAMsg = 0
    m.sqlSuMsg = 2
    call sqlPushRetOk
    m.sql.ini = 1
    m.sql.conType = ''
    return 0
endProcedure sqlIni

/*--- connect and/or disconnect to DB2 -------------------------------*/
sqlConnect: procedure expose m.
parse upper arg sys, retOk
    if sys \== '' then
        nop
    else if sysvar(sysnode) == 'RZ1' then
        sys = 'DBAF'
    else
        call err 'no default subsys for' sysvar(sysnode)
    call sqlOIni
    hst = ''
    if pos('/', sys) > 0 then do
        parse value space(sys, 0) with hst '/' sys
        cTy = 'Csm'
        end
    else do
        cTy = 'Rx'
        end
    if m.sql.conType == cTy & m.sqlHost==hst & m.sqlConSSID == sys then
        return 0
    if m.sql.conType \== '' then
        call sqlDisconnect
    res = 0
    if cTy = 'Rx' then
        res = sqlRxConnect(sys, retOk)
    if res < 0 then
        return res
    m.sql.conType = cTy
    m.sql.conhost = hst
    m.sql.conSSID = sys
    m.sql.connection = oNew('Sql'cTy'Connection')
    return res
endProcedure sqlConnect

sqlDisconnect: procedure expose m.
parse arg retOk
    if m.sql.conType == 'Rx' then
        call sqlRxDisconnect
    m.sql.conType = ''
    m.sql.conhost = ''
    m.sql.conSSID = ''
    return 0
endProcedure sqlDisonnect

/*--- execute a query from sql, with one resultset -------------------*/
sqlRxQuery: procedure expose m.
parse arg cx, src, retOk
     m.sql.cx.updateCount = ''
     m.sql.cx.resultSet   = ''
     m.sql.cx.needDesc    = 1
     res = sqlPrepare(cx, src, retOk, 1)
     if res < 0 then
         return res
     res = sqlExec('declare c'cx 'cursor for s'cx, retOk)
     if res < 0 then
         return res
     res = sqlExec('open c'cx, retOk)
     if res < 0 then
         return res
     call sqlRxFetchVars cx
     m.sql.cx.updateCount = sqlErrd.3
     m.sql.cx.resultSet = cx
     return res
endProcedure sqlRxQuery

/*--- fetch next row to m.dst.* at end return false ------------------*/
sqlRxFetch: procedure expose m.
parse arg cx, dst, retOk
    if retOk == '' then
        retOk = 100 m.sqlRetOk
    fetCode = sqlExec('fetch c'cx 'into' sqlRxFetchVars(cx), retOk)
    if fetCode == 100 then
        return 0
    if fetCode < 0 then
        return fetCode
    call sqlSetNull cx, dst
    return 1
endProcedure sqlRxFetch

/*--- close cursor 'c'cx ---------------------------------------------*/
sqlRxClose: procedure expose m.
parse arg cx, retOk
     return sqlExec('close c'cx, retOk)
endProcedure sqlRxClose

/*-- execute an sql with no resultset, but possibly outParms ---------*/
sqlRxUpdate: procedure expose m.
parse arg cx, src, retOk
    m.sql.cx.updateCount = ''
    m.sql.cx.resultSet   = ''
    bx = verify(src, '( ')
    if bx > 0 then
        fun = translate(word(substr(src, bx), 1))
    if  fun = 'SET' then do
        w2 = translate(word(substr(src, bx), 2))
        if \ abbrev(w2, ':') then
            return sqlExImm(src, ggRet)
        trace ?r
        ex = pos('=', w2)
        if ex = 0 then
            ex = length(w2)+1
        var = strip(substr(w2, 2, ex-2))
        if var = '' then
            call err 'bad hostVar in' src
        m.sql.outVar = var
        src2 = 'set :M.sql.out.'var substr(w, ex) subword(src, 3)
        return sqlExec(src2, ggRet)
        end
    if fun == 'DECLARE'  then do
        if 'GLOBAL' == translate(word(substr(src, bx), 2)) then
            return sqlExImm(src, ggRet)
        end
    res = sqlExec(src, ggRet)
    if wordPos(fun, 'DELETE INSERT UPDATE') > 0 then
        m.sql.cx.updateCount = sqlErrd.3
    return res
endProcedure sqlRxUpdate

/*-- execute a query, update or call ---------------------------------*/
sqlExecute: procedure expose m.
parse arg cx, src, retOk
    src = inp2Str(src, '-sql')
    f = translate(word(substr(src, max(verify(src, '( '), 1)), 1))
    m.sql.cx.fun = f
    if f == 'SELECT' | fun == 'WITH' then
        return sqlQuery(cx, src, retOk)
    else if f == 'CALL' then
        call err 'implement sql call for:' src
    else
        return sqlUpdate(cx, src, retOk)
endProcedure sqlExecute

/*-- execute a query, copy result to stem ----------------------------*/
sql2St: procedure expose m.
parse arg src, dst, retOk, type
    cx = sqlGetCursor()
    res = sqlQuery(cx, src, retOk, type)
    if res >= 0 then do
        do sx=1 while sqlFetch(cx, dst'.'sx)
           end
        res = sx-1
        end
    m.dst.0 = res
    call sqlClose cx
    call sqlFreeCursor cx
    return res
endProcedure sql2St

/*-- execute a query and return value of the first column
           if > 1 row fail, if 0 rows return arg(3) or fail ----------*/
sql2One: procedure expose m.
parse arg src, dst
    cx = sqlGetCursor()
    call sqlQuery cx, src
    if \ sqlFetch(cx, dst) then
        if arg() > 2 then
            return arg(3)
        else
            call err 'no row returned for:' src
    if sqlFetch(cx, dst.2) then
        call err '2 or more rows for' src
    c1 = m.sql.cx.col.1
    res = m.dst.c1
    call sqlClose cx
    call sqlFreeCursor cx
    return res
endProcedure sql2One

/*--- prepare statement 's'cx from sql src into descriptor desc ------*/
sqlPrepare: procedure expose m.
parse arg cx, src, ggRetOk, descOut
     s = ''
     src = inp2str(src, '%+Q\s')
     m.sql.cx.d.sqlD = 'noSqlDA'
     m.sql.cx.i.sqlD = 'noDescInp'
     m.sql.cx.fetchVars = ''
     m.sql.cx.col.0 = ''
     m.sql.cx.into = ''
     if descOut == 1 then
         s = 'into :M.SQL.'cx'.D'
     return sqlExec('prepare s'cx s 'from :src', ggRetOk)
endProcedure sqlPrepare

/*--- open cursor 'c'cx using arguments arg(2), arg(3)... ------------*/
sqlOpen: procedure expose m.
parse arg cx
    if arg() <=  1 then
        return sqlExec('open c'cx)
    call sqlDescribeInput cx
    do ix=1 to arg()-1
        call sqlDASet cx , 'I', ix, arg(ix+1)
        end
    return sqlExec('open c'cx 'using descriptor :M.SQL.'cx'.I')
endProcedure sqlOpen

/*--- describe output (if not already done)
         and return size of sqlDa ------------------------------------*/
sqlDescribeOutput: procedure expose m.
parse arg cx, force
    if force == 1 | \ datatype(m.sql.cx.d.sqlD, 'n') then
         call sqlExec 'describe s'cx 'into :M.SQL.'cx'.D', 0
    return m.sql.cx.d.sqlD
endProcedure sqlDescribeOutput

/*--- describe input (if not already done)
         and return size of input sqlDA ------------------------------*/
sqlDescribeInput: procedure expose m.
parse arg cx, force
    if force == 1 | \ datatype(m.sql.cx.i.sqlD, 'n') then
         call sqlExec 'describe input s'cx 'into :M.SQL.'cx'.I'
    return m.sql.cx.i.sqlD
endProcedure sqlDescribeInput

/*--- put sqlNull in all vars where indicator says so ---------------*/
sqlSetNull: procedure expose m.
    parse arg cx, dst
    do nx=1 to m.sql.cx.sqlNull.0
        col = m.sql.cx.sqlNull.nx
        if m.dst.col.sqlInd < 0 then
            m.dst.col = m.sqlNull
        end
    return
endProcedure sqlSetNull

/*--- use describe output to generate column names,
                fetchVariables and sqlNull names ---------------------*/
sqlRxFetchVars: procedure expose m.
parse arg cx
    if m.sql.cx.fetchVars \== '' then
        return m.sql.cx.fetchVars
    call sqlDescribeOutput cx
    f = m.sql.cx.type
    if f \== '' then do
        f = f'.FLDS'
        if m.f.0 < m.sql.cx.d.sqlD then
            call err 'not enough column names'
        end
    m.sql.cx.col.0 = m.sql.cx.d.sqlD
    nx = 0
    vars = ''
    do kx=1 to m.sql.cx.d.sqlD
        cn = sqlVarName(f, kx, m.sql.cx.d.kx.sqlName)
        m.sql.cx.col.kx = cn
        vars = vars', :m.dst.'cn
        if m.sql.cx.d.kx.sqlType // 2 = 1 then do
            vars = vars' :m.dst.'cn'.sqlInd'
            nx = nx + 1
            m.sql.cx.sqlNull.nx = cn
            end
        end
    m.sql.cx.sqlNull.0 = nx
    m.sql.cx.fetchVars = substr(vars, 3)
    return m.sql.cx.fetchVars
endProcedure sqlRxFetchVars

sqlVarName: procedure expose m. sqlVarName.
parse arg f, kx, sNa
    if f == '' then do
        cn = translate(word(sNa, 1))
        if cn == '' | symbol('sqlVarName.cn') == 'VAR' then
                cn = 'COL'kx
        sqlVarName.cn = 1
        return cn
        end
    else do
        if m.f.kx == '' then
            call err 'implement empty varName'
        return substr(m.f.kx, 2)
        end
endProcedure sqlVarName
/*--- set one value in a DA, handle nulls ----------------------------*/
sqlDASet: procedure expose m.
parse arg cx, da, ix, val
    m.sql.cx.da.ix.sqlData = val
    m.sql.cx.da.ix.sqlInd = - (val == m.sqlNull)
    /* data types schienen einmal nicht zu funktionieren .......
    if wordPos(m.da.ix.sqlType, '384 385 388 389 392 393') > 0 then
        m.da.ix.sqlType = 448 + (m.da.ix.sqlType // 2) */
    return
endProcedure sqlDASet

sqlExImm:
parse arg ggSrc, ggRetOk
     return sqlExec('execute immediate :ggSrc', ggRetOk)
endProcedure sqlExImm

sqlCommit: procedure expose m.
parse arg src
     return sqlExec('commit')
endProcedure sqlCommit

/*--- execute sql thru the dsnRexx interface -------------------------*/
sqlExec: /* no procedure, to keep variables sql... */
    parse arg ggSqlStmt, ggRetOk
    address dsnRexx 'execSql' ggSqlStmt
    /* say 'sqlCode' sqlCode 'rc' rc 'for' ggSqlStmt ggNo */
sqlHandleRCSqlCode:
    if rc = 0 then
        return 0
    if ggRetOk = '' then
        ggRetOk = m.sqlRetOk
    if wordPos(rc, '1 -1') < 0 then
        call err 'dsnRexx rc' rc sqlmsg()
    else if pos('*', ggRetOk) > 0 | wordPos(sqlCode, ggRetOk) > 0 ,
            then do
        if sqlCode < 0 & pos('say', ggRetOk) > 0 then
            say 'sqlError' sqlmsg()
        return sqlCode
        end
    else if rc < 0 then
        call err sqlmsg()
/*???lse if sqlCode <> 0 | (pos('w',ggRetOk)<1 & sqlWarn.0^==' ') then*/
    else if (sqlCode <> 0 | sqlWarn.0^==' ') & pos('w',ggRetOk)<1 then
        call errSay sqlMsg(), ,'w'
    return sqlCode
endSubroutine sqlExec

/*--- connect to the db2 subsystem sys -----------------------------*/
sqlRxConnect: procedure expose m.
parse upper arg sys, ggRetOk
    call sqlIni
    address tso "SUBCOM DSNREXX"
    if rc <> 0 then do
       sRc = RXSUBCOM('ADD','DSNREXX','DSNREXX') /* ADD HOST CMD ENV  */
       if sRc <> 0 then
           call err 'rc' sRc 'from RXSUBCOM(ADD, DSNREXX, DSNREXX)'
       end
    if sys = '-' then
        return 0
    ggSqlStmt =  'connect' sys
    address dsnRexx ggSqlStmt
    return sqlHandleRcSqlCode()
endProcedure sqlRxConnect

/*--- diconnect from db2 ---------------------------------------------*/
sqlRxDisconnect: procedure expose m.
parse arg retOk
    ggSqlStmt =  'disconnect'
    address dsnRexx ggSqlStmt
    return sqlHandleRcSqlCode()
endProcedure sqlDisconnect

/*--- send a command to db2 through the TSO dsn processor ------------*/
sqlDsn: procedure expose m.
parse arg st, sys, cmd, rcOk
    x = outtrap('M.'st'.')
    push 'END'
    push cmd
    address tso 'DSN SYSTEM('sys')'
    rr = rc
    x = outtrap(off)
    if rr = 0 | rcOk = '*' | wordPos(rr, rcOk) > 0 then
        return rr
    fl = max(1, m.st.0 - 10)
    em = 'rc' rr 'for DSN SYSTEM('sys') cmd' cmd,
          '\nOuputlines' fl '-' m.st.0':'
    do lx=fl to m.st.0
        em = em '\n' strip(m.st.lx, 't')
        end
    call err em
endProcedure sqlDsn
/*--- push and pop currently accepted sqlCodes -----------------------*/
sqlPushRetOk: procedure expose m.
parse arg rr
    nx = m.sqlRetOk.0 + 1
    m.sqlRetOk.0 = nx
    m.sqlRetOk.nx = rr
    m.sqlRetOk    = rr
    return
endProcedure sqlPushRetOk

sqlPopRetOk: procedure expose m.
    nx = m.sqlRetOk.0 - 1
    if nx < 1 then
        call err 'sqlPopRetOk with .0' m.sqlRetOk.0
    m.sqlRetOk    = m.sqlRetOk.nx
    m.sqlRetOk.0 = nx
    return
endProcedure sqlPopRetOk

/*--- issue an sql error message -------------------------------------*/
sqlMsg: /* no procedure, to keep variables sql... */
    if \ dataType(sqlCode, 'n') then do
        ggRes = 'sqlCode' sqlCode 'not numeric\n'sqlCaMsg()
        end
    else do
        ggRes = sqlDsntiar(sqlRx2CA())
        ggWa = sqlMsgWarn()
        if ggWa \= '' then
            ggRes = ggRes'\nwarnings' ggWa
        if m.sqlCAMsg == 1 then
           ggRes = ggRes'\n'sqlCaMsg()'\n'sqlCaMsg(sqlCa2Rx(sqlCa))
        end
    ggSt = 'SQL.HOST'
    ggVa = 'SQL.HOST.VAR'
    ggBe = 'SQL.HOST.BEF'
    call sqlHostVars ggSqlStmt, 12, ggSt
    if datatype(sqlErrd.5, 'n') & sqlErrd.5 > 0 then do
        ggW1 = translate(word(ggSqlStmt, 1))
        ggW2 = translate(word(ggSqlStmt, 2))
        if ggW1 == 'PREPARE' then
            ggVV = sqlHostVarFind(ggSt, 'FROM')
        else if ggW1 ggW2 == 'EXECUTE IMMEDIATE' then
            ggVV = sqlHostVarFind(ggSt, 1)
        else
            ggVV = ''
        if ggVV == '' then
            ggRes = ggRes || sqlMsgSrcPos(ggSqlStmt, sqlErrd.5)
        else
            ggRes = ggRes || sqlMsgSrcPos(value(ggVV), sqlErrd.5)
        end
    ggRes = ggRes'\nstmt =' ggSqlStmt
    ggPref = '\nwith'
    do ggXX=1 to m.ggSt.0
        ggRes = ggRes || ggPref m.ggBe.ggXX ':'m.ggVa.ggXX ,
                      '=' value(m.ggVa.ggXX)
        ggPref = '\n    '
        end
    if m.sqlSuMsg == 1 | (m.sqlSuMsg == 2 & m.sql.conHost \== '') then
        ggRes = ggRes'\nsubsys =' ,
                if(m.sql.conHost=='',,m.sql.conHost'/'),
                || m.sql.conSSID', interfaceType' m.sql.conType
    return  ggRes
endSubroutine sqlMsg

/*--- use dsnTiar to translate sql Info to error text ----------------*/
sqlDsnTiar: procedure expose m.
parse arg ca
    if -438  = sqlCa2Rx(ca) then
        return '\nSQLCODE = -438:',
           'APPLICATION RAISED ERROR WITH sqlState' sqlState ,
           'and DIAGNOSTIC TEXT:' sqlErrMc
    liLe = 78
    msLe = liLe * 10
    msg = d2c(msLe,2) || left('', msLe)
    len = d2c(liLe, 4)
    ADDRESS LINKPGM "DSNTIAR ca msg len"
    if rc <> 0 then
        call err 'linkPgm dsnTiar rc' rc 'sqlCa' ca
    res = strip(substr(msg, 13, liLe-10))
    cx = pos(', ERROR: ', res)
    if cx > 0 then
        res = left(res, cx-1)':' strip(substr(res, cx+9))
    do c=3+liLe by liLe to msLe while substr(msg, c, 10) = ''
            res = res'\n    'strip(substr(msg, c+10, liLe-10))
        end
    return res
endProcedure sqlDsnTiar

/*--- format all rexx sqlCa fields into a message --------------------*/
sqlCaMsg:
    return 'sqlCode' sqlCode 'sqlState='sqlState                    ,
           '\n    errMC='translate(sqlErrMc, ',', 'ff'x)            ,
           '\n    warnings='sqlWarnCat('+') 'erP='sqlErrP           ,
           '\n    errD.1='sqlErrD.1 '2='sqlErrD.2 '3='sqlErrD.3     ,
           '\n    errD.4='sqlErrD.4 '5='sqlErrD.5 '6='sqlErrD.6
endProcedure sqlCaMsg

/*--- format the sqlCA into the dsnTiar SQLCA ------------------------*/
sqlRx2Ca:
    if \ (datatype(sqlcode, 'n') & datatype(sqlErrD.1, 'n') ,
                                 & datatype(sqlErrD.3, 'n')) then
        return err('sqlCode etc. not numeric\nsqlCa =' sqlCaMsg())
    if digits() < 10 then
        numeric digits 10
    sqlCa = 'SQLCA   ' || d2c(136, 4) || d2c(sqlCode, 4) ,
            || d2c(min(70, length(sqlErrMc)), 2)left(sqlErrMc, 70) ,
            || left(sqlErrP, 8) ,
            || d2c(sqlErrD.1, 4)d2c(sqlErrD.2, 4)d2c(sqlErrD.3, 4) ,
            || d2c(sqlErrD.4, 4)d2c(sqlErrD.5, 4)d2c(sqlErrD.6, 4) ,
            || sqlWarnCat() || sqlState
    if length(sqlCa) <> 136 then
        call err 'sqlCa length' length(sqlCa) 'not 136' ,
                 '\n'sqlCaMsg() '==>'  ca', hex='c2x(ca)
    return sqlCa
endProcedure sqlRx2Ca

/*--- extract the fields from the SqlCA and put it to rexx vars ------*/
sqlCA2Rx: procedure expose m. ,
       sqlCode sqlErrMc sqlErrP sqlErrD. sqlWarn. sqlState
parse arg ca
    numeric digits 10
    if length(ca) < 136 | c2d(substr(ca, 9, 4), 4) <> 136 then
        call err 'bad sqlCa len' length(ca) 'not 136:' ca', hex='c2x(ca)
    sqlCode  = c2d(substr(ca, 13 ,4), 4)
    sqlErrMC = substr(ca, 19, c2d(substr(ca, 17, 2), 2))
    sqlErrP  = substr(ca, 89, 8)
    do ix=1 to 6
        sqlErrD.ix = c2d(substr(ca, 93 + 4 * ix, 4), 4)
        end
    do ix=0 to 10
        sqlWarn.ix = substr(ca, 121 + ix, 1)
        end
    sqlState = substr(ca, 132, 5)
    return sqlCode
endProcedure sqlCA2Rx

/*--- concat the sql warnings with Separator sep --------------------*/
sqlWarnCat: procedure expose m. sqlWarn.
parse arg sep
    return sqlWarn.0 || sep,
        || sqlWarn.1||sqlWarn.2||sqlWarn.3||sqlWarn.4||sqlWarn.5||sep ,
        || sqlWarn.6||sqlWarn.7||sqlWarn.8||sqlWarn.9||sqlWarn.10||sep
endProcedure sqlWarnCat

/*--- make the text for sqlWarnings ----------------------------------*/
sqlMsgWarn: procedure expose m. sqlWarn.
     r = ''
     text =' 1=W var truncated, 1=S scrollable, 1=N nonScrollable,'  ,
            '2=W nulls in aggregate,'                                ,
            '3=W more cols than vars,'                               ,
                             '3=Z more result sets than locators,'   ,
            '4=W no where, 4=D sensitive dynamic, 4=I insensitive,'  ,
                          '4=S sensitive static,'                    ,
            '5=W not valid sql, 5=1 readOnly, 5=2 readDelete,'       ,
                          '5=3 readDeleteUpdate,'                    ,
            '6=W day changed to month range,'                        ,
            '7=W dec digits truncated,'                              ,
            '8=W char substituted,'                                  ,
            '9=W arith excep in count, 9=Z multipe result sets,'     ,
            '10=W char conversion err in ca,'
     do wx = 1 to 10
         w = sqlWarn.wx
         if w = ' ' then
             iterate
         t = wx'='w
         cx = pos(' 'wx'='w' ', text)
         ex = pos(','         , text, cx + 1)
         if cx > 0 & ex > cx then
             r = r substr(text, cx+1, ex-cx)
         else
             r = r wx'='w '?,'
         end
     r = strip(r, 't', ',')
     if r = '' & sqlwarn.0 <> '' then
        call err 'sqlWarn.0='sqlWarn.0 'but all warns empty'
     return r
endProcedure sqlMsgWarn

/*--- show in the source src the point pos  (where error occured)
          a few lines from src around pos and arrow to pos ----------*/
sqlMsgSrcPos: procedure expose m.
parse arg src, pos
    liLe = 68
    liCn = 3
    afLe = 25
    t1 = space(left(src, pos), 1)
    t2 = left(' ', substr(src, pos, 1) == ' ' ,
                 | substr(src, pos+1, 1) == ' ') ,
         || space(substr(src, pos+1), 1)
    afLe = min(afLe, length(t2))
    if length(t1) + afLe > liLe * liCn then
        t1 = '...'right(t1, liLe * liCn - afLe -3)
    else if length(t1)+length(t2) > liLe then
        t1 = left(' ', (liCn * liLe - length(t1) -afLe) // liLe)||t1
    pL = length(t1) // liLe
    if length(t2) <= liLe-pL then
        tx = t1 || t2
    else
        tx = t1 || left(t2, liLe-pL-3)'...'
    res = '\nsrc' strip(substr(tx, 1, liLe), 't')
    do cx=1+liLe by liLe to length(tx)
        res = res || '\n  +' strip(substr(tx, cx, liLe), 't')
        end
    loc = 'pos' pos 'of' length(src)
    if length(loc)+6 < pL then
        return res'\n  >' right('>>>'loc'>>>', pL)
    else
        return res'\n  >' left('', pL-1)'<<<'loc'<<<'
endProcdedure sqlMsgSrcPos

/*--- get the hostVars in the sql in src and the word before ---------*/
sqlHostVars: procedure expose m.
parse arg src, cnt, st
    cx = 1
    sx = 0
    do cnt
        cx = pos(':', src, cx) + 1
        if cx < 2 then
           leave
        if pos(substr(src, cx, 1), m.mAlfRex1) < 1 then
            iterate
        ex = verify(src, m.mAlfRexR, 'n', cx)
        if ex - cx > 100 then
            iterate
        sx = sx + 1
        if ex < 1 then
            m.st.var.sx = substr(src, cx)
        else
            m.st.var.sx = substr(src, cx, ex - cx)
                       /* search word before */
        do bE = cx-2 by -1 to 1 ,
                while substr(src, bE, 1) == ' '
            end
        do bB = bE by -1 to max(1, bE-20),
                while pos(substr(src, bB, 1), m.mAlfa) > 0
            end
        if bB < bE & bB >= 0 then
            m.st.bef.sx = substr(src, bB+1, bE-bB)
        else
            m.st.bef.sx = ''
        end
    m.st.0 = sx
    return sx
endProcedure sqlHostVars

/*--- find the name of hostvar, by index or by before ----------------*/
sqlHostVarFind: procedure expose m.
parse arg st, fnd
    if datatype(fnd, 'n') & fnd <= m.st.0 then
        return m.st.var.fnd
    do ix=1 to m.st.0
        if translate(m.st.bef.ix) = fnd then
            return m.st.var.ix
        end
    return ''
endSubroutine sqlHostVarFind
/* copy sql    end   **************************************************/
/* copy j begin *******************************************************
    the j framework
         jReset
         jOpen
         jClose
         jRead
         jWrite
***********************************************************************/
jRead: procedure expose m.
parse arg m, var
    call objMetClaM m, 'jRead'
    if m.m.jReading then
        interpret ggCode
    else
        return err('jRead('m',' var') but not opened r')
endProcedure jRead

jReadO: procedure expose m.
parse arg m
if arg() > 1 then call err '???  old interface'
    call objMetClaM m, 'jReadO'
    if m.m.jReading then
        interpret ggCode
    else
        return err('jReadO('m',' var') but not opened r')
endProcedure jReadO

jWrite: procedure expose m.
parse arg m, line
    call objMetClaM m, 'jWrite'
    if \ m.m.jWriting then
        return err('jWrite('m',' line') but not opened w')
    interpret ggCode
    return
endProcedure jWrite

jWriteO: procedure expose m.
parse arg m, var
    call objMetClaM m, 'jWriteO'
    if \ m.m.jWriting then
        return err('jWriteO('m',' var') but not opened w')
    interpret ggCode
    return
endProcedure jWriteO

jWriteAll: procedure expose m.
parse arg m, rdr
    rdr = o2file(rdr)
    call objMetClaM m, 'jWriteAll'
    if \ m.m.jWriting then
        return err('jWriteAll('m',' rdr') but not opened w')
    interpret ggCode
    return
endProcedure jWriteAll

jWriteNow: procedure expose m.
parse arg m, rdr
    rdr = o2file(rdr)
    interpret objMet(m, 'jWriteNow')
    return
endProcedure jWriteNow

jCat: procedure expose m.
parse arg opt m
    if m = '' then do
        m = opt
        opt = m.j.cWri
        end
    call jOpen m, opt
    do ax=2 to arg()
        call jWriteAll m, arg(ax)
        end
    call jClose m
    return m
endProcedure jCat

jWriteNowImpl: procedure expose m.
parse arg m, rdr
    call jOpen rdr, m.j.cRead
    do while jRead(rdr, line)
        call jWrite m, m.line
        end
    call jClose rdr
    return
endProcedure jWriteNow

jWriteNowImplO: procedure expose m.
parse arg m, rdr
    call jOpen rdr, m.j.cRead
    do while assNN('li', jReadO(rdr))
        call jWriteO m, li
        end
    call jClose rdr
    return
endProcedure jWriteNow

/*--- reset JRW: fail if open, initialise ---------------------------*/
jReset: procedure expose m.
parse arg m, arg, arg2, arg3
    if m.m.jReading == 1 | m.m.jWriting == 1 then
        return err('still open jReset('m',' arg2')') / 3
    m.m.jReading = 0
    m.m.jWriting = 0
    m.m.jUsers = 0
    interpret objMet(m, 'jReset')
    return m
endProcedure jReset

jOpen: procedure expose m.
parse arg m, opt
    call objMetClaM m, 'jOpen'
    oUsers = m.m.jUsers
    if opt = m.j.cRead then do
        if m.m.jReading then
            nop
         else if m.m.jWriting then
            return err('already opened for writing jOpen('m',' opt')')
        else do
            interpret ggCode
            m.m.jReading = 1
            end
        end
    else if \ abbrev('>>', opt, 1) then do
        return err('bad option' opt 'in jOpen('m',' opt')')
        end
    else do
        if m.m.jWriting then
            nop
         else if m.m.jReading then
            return err('already opened for reading jOpen('m',' opt')')
        else do
            interpret ggCode
            m.m.jWriting = 1
            end
        end
    m.m.jUsers = oUsers + 1
    return m
endProcedure jOpen

jClose: procedure expose m.
parse arg m
    call objMetClaM m, 'jClose'
    oUsers = m.m.jUsers
    if oUsers = 1 then do
        interpret ggCode
        m.m.jReading = 0
        m.m.jWriting = 0
        end
    else if oUsers < 1 then
        call err 'jClose' m 'but already closed'
    m.m.jUsers = oUsers - 1
    return m
endProcedure jClose

/*--- cat the lines of the file together, with mid between lines,
                fail if not all lines are strings -------------------*/
jCatLines: procedure expose m.
parse arg m, fmt
    if abbrev(fmt, '-sql') then
        return jCatSql(m, substr(fmt, 5))
    if fmt == '' then
        fmt = '%+Q\s'
    call jOpen m, m.j.cRead
    if \ jRead(m, line) then do
        call jClose m
        return ''
        end
    res = f(fmt, m.line)
    do while jRead(m, line)
        res = res || f(fmt'%-Qnxt', m.line)
        end
    call jClose m
    fEnd = 'F.FORMAT.'fmt'%-Qend'
    return res || m.fEnd
endProcedure jCatLines

/*--- cat the line of a file, using comments
               fixline (with token wrapping) or separate lines -------*/
jCatSql: procedure expose m.
parse arg m, fLen
    call jCatSqlReset m'.JCATSQL', , jOpen(m, '<'), fLen
    res = jCatSqlNext(m'.JCATSQL')
    call jClose m
    return res
endProcedure jCatSql

jCatSqlReset: procedure expose m.
parse arg m, aSrc, m.m.rdr, m.m.fLen
    call jCatSqlNL m, aSrc
    return m
endProcedure jCatSqlReset

jCatSqlNL: procedure expose m.
parse arg m
    if m.m.rdr \== '' then
      if jRead(m.m.rdr, m'.SRC') then do
        if m.m.fLen \== '' then
            m.m.src = left(m.m.src, m.m.fLen)
        else if substr(m.m.src, length(m.m.src), 1) \== ' ' then
            m.m.src = m.m.src' '
        m.m.pos = 1
        return 1
        end
    m.m.pos = length(m.m.src)+1
    return 0
endProcedure jCatSqlNl

jCatSqlNext: procedure expose m.
parse arg m, stop
    res = ''
    st = ''
    bx = m.m.pos
    do forever
        call sbUntil m, '"''-/'stop
        if sbEnd(m) then do
            res = res || substr(m.m.src, bx)
            bx = 0
            end
        else if substr(m.m.src, m.m.pos, 2) = '--' then do
            res = res || substr(m.m.src, bx, m.m.pos-bx)' '
            bx = 0
            end
        else if substr(m.m.src, m.m.pos, 2) = '/*' then do
            res = res || substr(m.m.src, bx, m.m.pos-bx)' '
            do forever
                px = pos('*/', m.m.src, m.m.pos)
                if px > 0 then
                    leave
                if \ jCatSqlNL(m) then
                    return res
                end
            bx = px+2
            m.m.pos = bx
            end
        else if sbLit(m, ''' "') then do
            c1 = sbPrev(m)
            do while \ sbStrEnd(m, c1)
                res = res || substr(m.m.src, bx)
                if m.m.fLen \== '' then
                    if jCatSqlNl(m) then do
                        bx = m.m.pos
                        iterate
                        end
                call err 'unclosed' c1 'string:' m.m.src
                end
            end
        else if pos(substr(m.m.src, m.m.pos, 1), stop) > 0 then do
            res = strip(res||substr(m.m.src, bx, m.m.pos-bx), 't')
            call sbChar m, 1
            if res <> '' then
                return res
            bx = m.m.pos
            end
        if bx = 0 then
            if jCatSqlNl(m) then
                bx = m.m.pos
            else
                return res
        end
endProcedure jCatSqlNext

jIni: procedure expose m.
    if m.j.ini == 1 then
        return
    m.j.ini = 1
    m.j.cRead = '<'
    m.j.cWri = '>'
    m.j.cApp = '>>'
    call oIni
    am = "call err 'call of abstract method"
    call classNew 'n JRW u ORun, f JREADING v, f JWRITING v', 'm',
        , "new call jReset m, arg, arg2, arg3",
        , "jRead"   am "jRead('m',' var')'" ,
        , "jReadO if \ jRead(m, 'J.GGVAR') then return '';",
                "return s2o(m.j.ggVar)" ,
        , "jWrite" am "jWrite('m',' line')'" ,
        , "jWriteO call jWrite(m, o2string(var))" ,
        , "jWriteAll call jWriteNowImpl m, rdr",
        , "jWriteNow call jWriteNowImpl m, rdr",
        , "jReset",
        , "jOpen" am" jOpen('m',' opt')'" ,
        , "jClose" ,
        , "oRun call pipeWriteAll m",
        , "o2String return jCatLines(m, fmt)",
        , "o2File return m"
    call classNew 'n JRWO u JRW', 'm',
        , "jRead res = jReadO(m); if res == '' then return 0;" ,
                "m.var = o2string(res); return 1" ,
        , "jReadO"   am "jReadO('m')'" ,
        , "jWrite  call jWriteO(m, s2o(var))" ,
        , "jWriteO" am "jWriteO('m',' line')'",
        , "jWriteAll call jWriteNowImplO m, rdr",
        , "jWriteNow call jWriteNowImplO m, rdr",

    am = "call err 'call errObject"
    call classNew 'n JRWErr u JRW', 'm',
        , "jWriteAll" er "jWriteAll 'm', rdr'",
        , "jWriteNow" er "jWriteNow 'm', 'rdr'",
        , "jClose" er "jClose 'm'"
    call classNew 'n JSay u JRW', 'm',
        , "jWrite say line" ,
        , "jWriteO call classOut , var, 'outO: '",
        , "jOpen if \ abbrev(opt, m.j.cWri) then",
            "call err 'can only write JSay.jOpen('m',' opt')';" ,
            "else m.m.jWriting = 1"
    call classNew 'n JStem u JSay', 'm',
        , "jReset m.m.stem = arg;",
               "if \ dataType(m.arg.0, 'n') then m.arg.0 = 0" ,
        , "jWrite call mAdd m.m.stem, line"
    call classNew 'n JRWEof u JRW', 'm',
        , "jRead drop m.var; return 0",
        , "jOpen if pos('>', opt) > 0 then",
            "call err 'can only read JRWEof.jOpen('m',' opt')';" ,
            "else m.m.jReading = 1"
    m.j.in = jOpen(oNew('JRWEof'), m.j.cRead)
    call outDst
    call classNew "n JBuf u JRWO, f BUF s r", "m",
        , "jOpen call jBufOpen m, opt",
        , "jReset call jBufReset m, arg",
        , "jRead return jBufRead(m, var)",
        , "jReadO return jBufReadO(m)",
        , "jWrite call jBufWrite m, line",
        , "jWriteO call jBufWriteO m, var"
    call classNew "n JBufTxt u JBuf, f MAXL v ", "m",
        , "jReset call jBufReset m, arg; m.m.maxl = 80",
        , "jWriteO call jBufWrite m, o2Text(var, m.m.maxl)"
    return
endProcedure jIni

/*--- out interface of j --------------------------------------------*/
outIni: procedure expose m.
    call jIni
    return
endProcedure outIni

outDst: procedure expose m.
parse arg wrt
    oldOut = m.j.out
    if wrt == '' then
        wrt = jOpen(oNew('JSay'), '>')
    m.j.out = wrt
    return oldOut
endProcedure outDst

/*--- return a JRW from rdr or in ------------------------------------*/
j2Rdr: procedure expose m.
    parse arg rdr
    if oStrOrObj(rdr, m.j.in) then
        return jBuf(ggStr)
    else
        return o2file(ggObj)
endProcedure j2Rdr
      /* jstr is part of out interface --> inp2str */
inp2str: procedure expose m.
    parse arg rdr, fmt
    if oStrOrObj(rdr, m.j.in) then
        return ggStr
    else
        return o2String(ggObj, fmt)
endProcedure inp2str

j2Buf: procedure expose m.
    parse arg rdr
    if oStrOrObj(rdr, m.j.in) then
        return jBuf(ggStr)
    if classInheritsOf(ggCla, class4Name('JBuf')) ,
            & m.ggObj.jUsers < 1 then
        return ggObj
    b = jOpen(jBuf(), m.j.cWri)
    call jWriteNow b, o2File(ggObj)
    return jClose(b)
endProcedure j2Buf

in: procedure expose m.
parse arg arg
    return jRead(m.j.in, arg)
endProcedure in

inO: procedure expose m.
    if arg() > 0 then call err '??? old interface'
    return jReadO(m.j.in)
endProcedure in

out: procedure expose m.
parse arg line
    call jWrite m.j.out, line
    return 0
endProcedure out

outO: procedure expose m.
parse arg arg
    call jWriteO m.j.out, arg
    return
endProcedure outO

/*--- jBuf: buffer read or write (supports datataypes) ---------------*/
jBuf: procedure expose m.
    m = oNew('JBuf') /* calls jBufReset */
    do ax=1 to arg()
        m.m.buf.ax = arg(ax)
        end
    m.m.buf.0 = ax-1
    m.m.allV = 1
    return m
endProcedure jBuf
/*--- jBuf: buffer read or write (supports datataypes) ---------------*/
jBufTxt: procedure expose m.
    m = oNew('JBufTxt') /* calls jBufReset */
    do ax=1 to arg()
        m.m.buf.ax = arg(ax)
        end
    m.m.buf.0 = ax-1
    m.m.allV = 1
    return m
endProcedure jBufTxt

jBufReset: procedure expose m.
parse arg m
    m.m.stem = m'.BUF'
    do ax=1 to arg() - 1
        m.m.buf.ax = arg(ax+1)
        end
    m.m.buf.0 = ax-1
    m.m.allV = 1
    return m
endProcedure jBufReset

jBufOpen: procedure expose m.
parse arg m, opt
    if opt == m.j.cRead then do
        m.m.readIx = 0
        m.m.jReading = 1
        return m
        end
    if opt == m.j.cWri then do
        m.m.buf.0 = 0
        m.m.allV = 1
        end
    else if opt \== m.j.cApp then
         call err 'jBufOpen('m',' opt') with bad opt'
    m.m.jWriting = 1
    return m
endProcedure jBufOpen

jBufWrite: procedure expose m.
parse arg m, line
    if m.m.allV then
        call mAdd m'.BUF', line
    else
        call mAdd m'.BUF', s2o(line)
    return
endProcedure jBufWrite

jBufWriteStem: procedure expose m.
parse arg m, st
    ax = m.m.buf.0
    if m.m.allV then do
        do sx=1 to m.st.0
            ax = ax + 1
            m.m.buf.ax = m.st.sx
            end
        end
    else do
        do sx=1 to m.st.0
            ax = ax + 1
            m.m.buf.ax = o2String(m.st.sx)
            end
       end
       m.m.buf.0 = ax
    return m
endProcedure jBufWrite

jBufWriteO: procedure expose m.
parse arg m, ref
    if m.m.allV then do
        cl = objClass(ref)
        if cl = m.class.classV then do
            call mAdd m'.BUF', m.ref
            return
            end
        if cl == m.class.classW then do
            call mAdd m'.BUF', substr(ref, 2)
            return
            end
        m.m.allV = 0
        do ax=1 to m.m.buf.0
            m.m.buf.ax = s2o(m.m.buf.ax)
            end
        end
    call mAdd m'.BUF', ref
    return
endProcedure jBufWriteO

jBufReadO: procedure expose m.
parse arg m
    nx = m.m.readIx + 1
    if nx > m.m.buf.0 then
        return ''
    m.m.readIx = nx
    if m.m.allV then
        return s2o(m.m.buf.nx)
    else
        return m.m.buf.nx
endProcedure jBufReadO

jBufRead: procedure expose m.
parse arg m, var
    nx = m.m.readIx + 1
    if nx > m.m.buf.0 then
        return 0
    m.m.readIx = nx
    if m.m.allV then
        m.var = m.m.buf.nx
    else
        m.var = o2String(m'.BUF.'nx)
    return 1
endProcedure jBufRead

jBufTxtWriteO: procedure expose m.
parse arg m, ref
    if m.m.allV \== 1 then
        call err '1 \== allV' m.m.allV 'in jBufTxtWriteO('m',' ref')'
    cl = objClass(ref, '?')
    if cl = m.class.classV then
        call mAdd m'.BUF', m.ref
    else if cl == m.class.classW then
        call mAdd m'.BUF', substr(ref, 2)
    else if ref == '' then
        call mAdd m'.BUF', '@ null object'
    else if cl == '?' then
        call mAdd m'.BUF', '@'ref 'class=???'
    else do
        l = '@'ref 'class='className(cl)
        ff = cl'.FLDS'
        do fx=1 to m.ff.0 while length(l) < m.m.maxl + 3
            if m.ff.fx == '' then
                 l = l', .='m.ref
            else do
                 f1 = substr(m.ff.fx, 2)
                 l = l',' f1'='m.ref.f1
                 end
            end
        if length(l) > m.m.maxl then
            l = left(l, m.m.maxl-3)'...'
        call mAdd m'.BUF', l
        end
    return
endProcedure jBufTxtWriteO

/* copy j end *********************************************************/
/* copy o begin ******************************************************
    an object has a class which describes fields and methods
    an object has fields (e.g. m.o.fld1)
    an object may call it's methods (dynamic binding)
***********************************************************************/
oIni: procedure expose m.
    if m.o.ini = 1 then
        return
    m.o.ini = 1

    call classIni
    call oAdd1Method m.class.classV, 'o2String return m.m'
    m.class.escW = '!'
    call oAdd1Method m.class.classW, 'o2String return substr(m, 2)'
    or = classNew('n ORun u',
         , 'm oRun call err "call of abstract method oRun"',
         , 'm o2File return oRun2File(m)',
         , 'm o2String return jCatLines(oRun2File(m), fmt)')
                /* oRunner does not work yet ||||| */
    rc = classNew('n* ORun u ORun, m oRun call oClassAdded arg(2)')
    call oAddMethod rc'.OMET', rc
    call classAddedRegister oMutate(mNew(), rc)
    return
endProcedure oIni

/*--- when notified about a new class cl, build the redundancies ----*/
oClassAdded: procedure expose m.
parse arg cl
    m.class.o2c.cl = m.class.class
    call oAddMethod cl'.OMET', cl
    new = "m.class.o2c.m =" cl
    if m.cl.flds.0 > 0 | m.cl.stms.0 > 0 then
        new = new"; call oClear m, '"cl"'"
    new = new";" classMet(cl, 'new', '')
    if cl == m.class.class then
        call mAlias 'CLASS', cl
    else  /* object adresses */
        call mNewArea cl, 'O.'substr(cl,7), new
     if m.cl \== 'u' | m.cl.name == '' then
        return
    call mAlias cl, m.cl.name
    new = 'new'
    m.cl.oMet.new = ''
    co = ''                              /* build code for copy */
    do fx=1 to m.cl.flds.0
        nm = m.cl.flds.fx
          if translate(nm) == nm & \ abbrev(nm, 'GG') ,
              & pos('.M.', nm'.') < 1 & pos('.T.', nm'.') < 1 then
               co = co'm.t'nm '= m.m'nm';'
        else
            co = co 'f='quote(substr(nm, 2))';m.t.f = m.m.f;'
        end
    do fx=1 to m.cl.stms.0
        nm = m.cl.stms.fx
        sc = m.cl.stms.fx.class
        if nm == ''then
            co = co "m.t.0=m.m.0;" ,
               "do sx=1 to m.m.0;" ,
                 "call oClaCopy '"sc"',m'.'sx, t'.'sx; end;"
        else
            co = co "st='"substr(nm, 2)"';m.t.st.0=m.m.st.0;",
                "do sx=1 to m.m.st.0;",
                  "call oClaCopy '"sc"',m'.'st'.'sx, t'.'st'.'sx; end;"
        end
    p = cl'.OMET.oCopy'
    if symbol('m.p') \== VAR then
        m.p = co
    return
endProcedure oClassAdded

/*--- add the methods of class cl to the methodtable mt -------------*/
oAddMethod: procedure expose m.
parse arg mt, cl
     if pos(m.cl, 'frsv') > 0 then
         return
     if m.cl = 'm' then do
         nm = m.cl.name
         m.mt.nm = m.cl.met
         return
         end
/*     if m.cl.class \== '' then
         call oAddMethod mt, m.cl.class
*/   do x=1 to m.cl.0
         call oAddMethod mt, m.cl.x
         end
     return
endProcedure oAddMethod

/* add 1 method to a completed class and its subclasses -------------*/
oAdd1Method: procedure expose m.
parse arg clNm, met code
    cl = classAdd1Method(clNm, met code)
    m.cl.omet.met = code
    call oAdd1MethodSubs cl, met code
    return cl
endProcedure oAdd1Method

/* add 1 method code to OMET of all subclasses of cl  -------------*/
oAdd1MethodSubs: procedure expose m.
parse arg cl, met code
    do sx=1 to m.cl.sub.0
        sc = m.cl.sub.sx
        if pos(m.sc, 'nvw') > 0 then do
            do mx=1 to m.sc.0
                ms = m.sc.mx
                if m.ms == 'm' & m.ms.name == met then
                    call err 'method' med 'already in' sc
                end
            m.sc.omet.met = code
            end
        call oAdd1MethodSubs sc, met code
        end
    return cl
endProcedure oAdd1MethodSubs

/*--- create an an object of the class className
        mutate it to class but DO NOT call it's new method ----------*/
oBasicNew: procedure expose m.
parse arg cl
    return oMutate(mBasicNew(cl), cl)

/*--- create an an object of the class className
        and call it's new method ------------------------------------*/
oNew: procedure expose m.
signal labelMNew    /* work is done there |   ???? remove */

/*--- return the class of object obj --------------------------------*/
objClass: procedure expose m.
parse arg obj
    if symbol('m.class.o2c.obj') == 'VAR' then
         return m.class.o2c.obj
    if abbrev(obj, m.class.escW) then
        return m.class.classW
    if abbrev(obj, 'CLASS.CAST.') then
        return substr(obj, 12, pos(':', obj, 12)-12)
    if arg() >= 2 then
        return arg(2)
    return err('objClass no class found for object' obj)
endProcedure objClass

oKindOf: procedure expose m.
parse arg obj, sup
    cl = objClass(obj, '')
    if cl == '' then
        return 0
    return classInheritsOf(cl, class4name(sup))
endProcedure oKindOf

classInheritsOf: procedure expose m.
parse arg cl, sup    /* wkTst optimierung in classAdded */
    if cl == sup then
        return 1
    do while m.cl \== 'n' & m.cl \== 'u'
        if m.cl.class == '' then
            return 0
        cl = m.cl.class
        end
    do cx=1 to m.cl.0
        d = m.cl.cx
        if m.d == 'u' then
            if classInheritsOf(d, sup) then
                return 1
        end
    return 0
endProcedure classInheritsOf

classSetMet: procedure expose m.
parse arg na, me, code
    if symbol('m.class.n2c.na') \== 'VAR' then
        call err 'no class' na 'in classMet('na',' me')'
    cl = m.class.n2c.na
    if symbol('m.cl.oMet.me') \== 'VAR' then
        call err 'no method in classMet('na',' me')'
    m.cl.oMet.me = code
    return cl
endProcedure classSetMet

/*--- return the code of method me of the class with name na --------*/
classMet: procedure expose m.
parse arg na, me
    if symbol('m.class.n2c.na') \== 'VAR' then
        call err 'no class' na 'in classMet('na',' me')'
    cl = m.class.n2c.na
    if symbol('m.cl.oMet.me') == 'VAR' then
        return m.cl.oMet.me
    if arg() >= 3 then
        return arg(3)
    call err 'no method in classMet('na',' me')'
endProcedure classMethod

/*--- set m, ggClass, ggCode to the address, class and code
        of method me of object m ------------------------------------*/
objMetClaM: procedure expose m. m ggClass ggCode
parse arg m, me
    if symbol('m.class.o2c.m') == 'VAR' then
         ggClass =  m.class.o2c.m
    else if abbrev(m, 'CLASS.CAST.') then
        parse var m 'CLASS.CAST.' ggClass ':' m
    else
        return err('no class found for object' m)
    if symbol('m.ggClass.oMet.me') == 'VAR' then
        ggCode = m.ggClass.oMet.me
    else
         call err 'no method' me 'in class' className(ggClass),
              'of object' m
    return
endProcedure objMetClaM

/*--- return the code of method me of object obj --------------------*/
objMet: procedure expose m.
parse arg obj, me
        /* handle the easy and frequent case directly */
    if symbol('m.class.o2c.obj') == 'VAR' then
         c =  m.class.o2c.obj
    else if abbrev(obj, m.class.escW) then
         c = m.class.classW
    else do
        call objMetClaM obj, me
        return 'M="'m'";'ggCode
        end
     if symbol('m.c.oMet.me') == 'VAR' then
         return m.c.oMet.me
    return err('no method' me 'in class' className(c) 'of object' obj)
endProcedure objMet

/*--- return the stem of fieldnames of object m ---------------------*/
oFlds: procedure expose m.
parse arg m
    return objClass(m)'.FLDS'
endProcedure oFlds

/*--- return the contents of field f navigation along path ----*/
oGet: procedure expose m.
parse arg obj, path, clazz
    nullNew = 0
    ret = oAccPath(obj, path, clazz)
    if ret == 1 then
        ret = oAccStr(m, cl)
    if ret == 1 then
        return str
    return err(ret 'in oGet('obj',' path')')
endProcedure oGet

oAccStr: procedure expose m. str
parse arg m, cl
    if cl == m.class.classV then
        str = m.m
    else if m.cl.valueCl == '' then
        return 'no value @' m 'class' className(cl)
    else if m.m == '' then
        return 'null @' m 'class' className(cl)
    else if abbrev(m, m.class.escW) then
        str = substr(m ,2)
    else
        str = o2String(m.m)
    return 1
endProcedure oAccStr

oGetO: procedure expose m.
parse arg obj, path, opt, clazz
    nullNew = pos('n', opt) > 0
    ret = oAccPath(obj, path, clazz)
    if ret == 1 then
        ret = oAccO(m, cl, opt)
    if ret == 1 then
        return ref
    else
        return err(ret 'in oGetO('obj',' path')')
endProcedure oGetO

oAccO: procedure expose m. ref
parse arg m, cl, opt
    if cl == m.class.classV then do
        ref = s2o(m.m)
        end
    else if m.cl \== 'r' then do
        ref = m
        end
    else if m.m == '' then do
        if opt == '-b' then do
            m.m = jBuf()
            end
        else if opt == '-n' then do
            rsn = oRefSetNew(m, cl)
            if rsn \==1 then
               return rsn
            end
        ref = m.m
        end
    else if objClass(m.m, 0) \== 0 then do
        ref = m.m
        end
    else do
        return 'no class for' m.m '@' m 'class' cl
        end
    return 1
endProcedure oAccO

oPut: procedure expose m.
parse arg obj, path, str
    nullNew = 1
    res = oAccPath(obj, path)
    if res == 1 then
        res = ocPut(m, cl, str)
    if res == 1 then
        return str
    return err(res 'in oPut('obj',' path',' str')')
endProceudre oPut

ocPut: procedure expose m.
parse arg m, cl, str
    if m.cl.valueCl == m.class.classV then
        m.m = str
    else if m.cl.valueCl \== '' then
        m.m = s2o(str)
    else
        return 'no value @' m 'class' className(cl)
    return 1
endProcedure ocPut

oPutO: procedure expose m.
parse arg obj, path, ref
    nullNew = 1
    res = oAccPath(obj, path)
    if res == 1 then
        res = ocPutO(m, cl, ref)
    if res == 1 then
        return ref
    return err(ret 'in oPut('obj',' path',' ref')')
endProcedure oPutO

ocPutO: procedure expose m.
parse arg m, cl, ref
    if m.cl.valueCl == m.class.classV then
        m.m = o2string(ref)
    else if m.cl.valueCl \== '' then
        m.m = ref
    else if m.cl.stemCl \== '' then
        return 'implement put to stem'
    else
        return 'no value @' m 'class' className(cl)
    return 1
endProcedure ocPutO

oClear: procedure expose m.
parse arg obj, cl
    if cl == '' then
        cl = objClass(obj)
    do fx=1 to m.cl.flds.0
        f1 = m.cl.flds.fx
        o1 = obj || f1
        if f1 == '' then
            c1 = cl
        else do
            c1 = substr(f1, 2)
            c1 = m.cl.f2c.c1
            end
        if c1 == m.class.classW then
            m.o1 = m.class.escW
        else
            m.o1 = ''
        end
    do sx=1 to m.cl.stms.0
        f1 = obj || m.cl.stms.sx
        m.f1.0 = 0
        end
    return obj
endProcedure oClear

oAccPath: procedure expose m. m cl nullNew
parse arg m, pa, cl
    if cl == '' & m \== '' then do
        cl = objClass(m)
        end
    if pa == '' then
        return 1
    if abbrev(pa, m.class.cRef) ,
            | (\ m.cl.hasFlds & abbrev(pa, m.class.cNav)) then do
        if pa == m.class.cRef & m.cl.valueCl == m.class.classV then do
            cl = m.class.classV
            return 1
            end
        if (m.cl.valueCl == '' | m.cl.valueCl == m.class.classV) ,
              & m.cl \== 'r' then
            return 'no reference @' m 'class' cl
        if m.m = '' then do
            if \ nullNew then
                return 'null @' m 'class' className(cl)
            rsn = oRefSetNew(m, cl)
            if rsn \== 1 then
                return rsn
            end
        return oAccPath(m.m, substr(pa, 2))
        end
    if pos(left(pa, 1), m.class.cPath) > 0 then
        return oAccPath(m, substr(pa, 2), cl)
    px = verify(pa, m.class.cPath, 'm')
    if px < 1 then
        px = length(pa)+1
    fn = left(pa, px-1)
    pa = substr(pa, px)
    if symbol('m.cl.f2c.fn') == 'VAR' then
        return oAccPath(m'.'fn, pa, m.cl.f2c.fn)
    if m.cl.stemCl=='' | fn=='' | verify(fn, '0123456789','n')>0 then
        return 'no field' fn '@' m 'class' className(cl)
    if fn == 0 then
        return oAccPath(m'.0', pa, m.class.classV)
    if abbrev(fn, 0) | verify(m.m.0, '0123456789', 'n') > 0,
            | fn > m.m.0 then
        return 'bad stem index' fn'>'m.m.0 '@' m 'class' className(cl)
    return oAccPath(m'.'fn, pa, m.cl.stemCl)
endProcedure oAccPath

oRefSetNew: procedure expose m.
parse arg m, cl
    cr = m.cl.valueCl
    if m.cr.class = '' then
        return 'no class for null @' m 'class' className(cl)
    if m.cr.class = m.class.classW then
        m.m = o2s()
    else if m.cr \== 'r' then
        return 'class' className(cl) 'not ref'
    else
        m.m = mNew(m.cr.class)
    return 1
endProcedure oRefSetNew


/*--- mutate object m to the class named name -----------------------*/
oMutate: procedure expose m.
parse arg m, name
    m.class.o2c.m = class4Name(name)
    return m
endProcedure oMutate

/*--- return object obj cast'd to class named cl --------------------*/
oCast: procedure expose m.
parse arg obj, cl
     if abbrev(obj, 'CLASS.CAST.') then
         obj = substr(obj, 1 + pos(':', obj, 12))
     return 'CLASS.CAST.'class4Name(cl)':'obj
endProcedure oCast

/*--- copy object m of class c to t ---------------------------------*/
oClaCopy: procedure expose m.
parse arg ggCla, m, t
    if t == '' then do
        if ggCla == m.class.classW then
            return m
        t = mBasicNew(ggCla)
        end
     else if ggCla == m.class.classW then do
         m.t = o2String(m)
         m.class.o2c.t = m.class.classV
         return t
         end
     ggCode = ggCla'.OMET.oCopy'
     interpret m.ggCode
     m.class.o2c.t = ggCla
     return t
endProcedure oClaCopy

/*--- copy object m to t --------------------------------------------*/
oCopy: procedure expose m.
parse arg m, t
    return oClaCopy(objClass(m), m, t)
endProcedure oCopy

/*--- copy object to a newly created object -------------------------*/
oCopyNew: procedure expose m.
parse arg m
     if symbol('m.class.o2c.m') == 'VAR' then
         return oCopy(m, mBasicNew(m.class.o2c.m))
     return oCopy(m, mBasicNew(m.class.classV))
endProcedure oCopyNew

/*--- return a new instance of a subclass of Run
        with code code in method oRun -------------------------------*/
oRunner: procedure expose m.
    if arg() >= 1 then
           r = oNew(classNew('n* ORun u ORun, m oRun' arg(1)))
    else
           r = oNew(classNew('n| ORun u ORun'))
    return r
endProcedure oRunner

/*--- set code for runner -------------------------------------------*/
oRunnerCode: procedure expose m.
parse arg r, code
    call classSetMet objClass(r), 'oRun', code
    return r
endProcedure oRunnerCode

/*--- run method oRun of object m -----------------------------------*/
oRun: procedure expose m.
parse arg m, arg, arg2, arg3
    interpret objMet(m, 'oRun')
    return
endProcedure oRun

/*--- run method oRun and return output in new JBuf ------------------*/
oRun2File: procedure expose m.
parse arg rn
    b = jBuf()
    call pipeBeLa '>' b
    call oRun rn
    call pipeEnd
    return b
endProcedure oRun2File

/*--- cast the object to a file -------------------------------------*/
o2File: procedure expose m.
parse arg m
    interpret objMet(m, 'o2File')
    call err 'o2file did not return'
endProcedure o2File

/*--- cast the object to a String -----------------------------------*/
o2String: procedure expose m.
parse arg m, fmt
    if opt == '' then
        opt = '-b '
    interpret objMet(m, 'o2String')
    return err('o2String did not return')
endProcedure o2String

/*--- return true if object is kind of String------------------------*/
oStrOrObj: procedure expose m. ggStr ggObj ggCla
parse arg ggObj, def
    if ggObj == '' then
        ggObj = def
    ggCla = objClass(ggObj, '')

    if ggCla == '' then do
        ggStr = ggObj
        ggObj = ''
        return 1
        end
    else if wordPos(ggCla, m.class.classV m.class.classW) > 0 then do
        ggStr = o2String(ggObj)
        ggObj = ''
        return 1
        end
    else do
        ggStr = ''
        return 0
        end
endProcedure oStrOrObj

/*--- return true if object is kind of String ----- ???? -------------*/
oStrOrFile: procedure expose m. ggStr ggObj ggCla
parse arg m, def
    if oStrOrObj(m, def) then
        return 1
    ggObj = o2File(ggObj)
    return 0
endProcedure oStrOrFile

/*--- return a short string representation of an object -------------*/
o2Text: procedure expose m.
parse arg m, maxL
    if m == '' then
        return '@ null object'
    if maxL == '' then
        maxL = 80
    cl = objClass(m, '?')
    if cl = m.class.classV then
        l = m.m
    else if cl == m.class.classW then
        l = substr(m, 2)
    else if cl == '?' then
        l = '@'m 'class=???'
    else do
        l = '@'m 'class='className(cl)
        ff = cl'.FLDS'
        do fx=1 to m.ff.0 while length(l) < maxL + 3
            if m.ff.fx == '' then
                 l = l', .='m.m
            else do
                 f1 = substr(m.ff.fx, 2)
                 l = l',' f1'='m.m.f1
                 end
            end
        end
    if length(l) <= maxL then
        return l
    return left(l, maxL-3)'...'
endProcedure o2Text

/*--- cast a String to an object -----------------------------------*/
s2o: procedure expose m.
parse arg str
    return m.class.escW || str
    return r
endProcedure s2o

oIfStr: procedure expose m.
parse arg m
    if length(m) > 200 then
        return m
    cl = objClass(m, '')
    if cl = '' then
        return m
    else if cl = m.class.classV then
        return = m.m
    else if cl == m.class.classW then
        return = substr(m, 2)
    else if arg() >= 2 then
        return arg(2)
    else
        call err m 'of class' className(cl) 'not kind of string'
endProcedure oIfStr

/* copy o end *******************************************************/
/* copy class begin **************************************************
    a class has fields and methods,
    the class module handles only the metadata,
    object handling (instanciation, methodcalls etc.) is in O

    classes are represented by a metadata tree,
        its nodes of class class have diffenrent types:

class subTypes (implemented as choices)
    'u'    = union:    NAME -> name of class if <> '',
                    stem -> references component classes
    'f' = field:      NAME -> fieldName (x.name),
                    CLASSS -> reference to class of fieldValue
    's' = stem:     class -> ref to class at each stem element
    'c' = choice:   NAME -> selection value,
                    CLASS -> ref to class of choice
    'm' = method:    NAME -> methodName,
                    MET -> rexxCode
    'r' = reference CLASS -> ref to type at reference
special classes
    'v'    = Value     String Value
    'w'    = ValueAsA    StringValue packed into an adress (prefix escW)
    'o' = AnyClass    any class with dynamic classLookup on object
formal definition, see classIni

class expression (ce) allow the following syntax
    ce = className | classAdr | 'n'('?','*','|')? name union | union
        | 'f' name ce | 's' ce | 'c' name ce | 'm' name code | r ce?
    union = 'u' (ce (',' ce)*)?

    the modifiers of 'n' means
        none:    create new class, fail if name already defined
        '?':    create new class or return old of that name
        '*':    use an exisiting class of that definition
                or create new class with a unique name
        '|':    create a new class with a unique name
    'm' extends to then end of the ce (line)
    'u' allows several components, in classNew also multiple args
                Achtung, aber NICHT rekursiv|
***********************************************************************/
classIni: procedure expose m.
    if m.class.ini == 1 then
        return
    m.class.ini = 1
    call mapIni
    call mNewArea 'CLASS', 'CLASS'
    call mapReset 'CLASS.N2C'  /* name to class */
        /* to notify other modules (e.g. O) on every new named class */
    m.class.addedSeq.0 = 0
    m.class.addedListeners.0 = 0
    m.class.classV = classBasicNew('u', 'v')
    m.class.classW = classBasicNew('u', 'w')
    m.class.classO = classBasicNew('u', 'o')
    cr = mIterBegin('CLASS')
    do while assNN('cr', mIter(cr))
        call classAddedNotify cr
        end

    m.class.class = classNew('n class u v',
            , 'c u u f NAME v, s r class',
            , 'c f u f NAME v, f CLASS r class',
            , 'c s f CLASS r class' ,
            , 'c c u f NAME v, f CLASS r class',
            , 'c m u f NAME v, f MET  v' ,
            , 'c r f CLASS r class' )
    m.class.cNav = '.'
    m.class.cRef = '|'
    m.class.cDot = '%'
    m.class.cPath = m.class.cNav || m.class.cRef || m.class.cDot
    m.class.classR = classNew('r')
    return
endProcedure classIni


/*--- return the name of a class if it exists otherwise the class ---*/
className: procedure expose m.
parse arg cl
    if m.cl = 'u' & m.cl.name \= '' then
        return m.cl.name
    else
        return cl
endProcedure class4Name

/*--- return class of given name or class ---------------------------*/
class4Name: procedure expose m.
parse arg nm
    if symbol('m.class.n2c.nm') == 'VAR' then
        return m.class.n2c.nm
    if arg() > 1 then
        return arg(2)
    call err 'no class' nm
endProcedure class4Name

classBasicNew: procedure expose m.
parse arg ty, nm, cl, nmTy
    n = mNew('CLASS')
    m.n = ty
    m.n.name = nm
    m.n.nameComp = nm
    if ty == 'u' & nm \== '' then do
        if pos(nmTy, '*|') > 0 then do
            m.n.name = nm || substr(n, 1+lastPos('.', n))
            if nmTy == '*' then
                m.n.nameComp = nm'*'
            else
                m.n.nameComp = m.n.name
            end
        call mapAdd class.n2c, m.n.name, n
        end
    call mapAdd class.n2c, n, n
    m.n.class = ''
    m.n.met = ''
    m.n.0 = 0
    m.n.sub.0 = 0
    m.n.super.0 = 0
    if length(ty) \== 1 | pos(ty, 'ufscrm') < 1 then
        call err 'bad type' ty': classBasicNew('ty',' nm',' cl')'
    else if nm == '' & pos(ty, 'fm') > 0 then
        call err 'empty name: classBasicNew('ty',' nm',' cl')'
    else if nm \== '' & ty \== 'c'  ,
          & ( verify(nm, '0123456789') < 1 ,
            | verify(nm, ' .*|@', 'm') > 0 ) then
        call err 'bad name' nm': classBasicNew('ty',' nm',' cl')'
    else if nm \= '' & pos(ty, 'rs') > 0 then
        call err 'name for type' ty': classBasicNew('ty',' nm',' cl')'
    else if pos(ty, 'fcrs') > 0 then do
        if cl \== '' then
            m.n.class = mapGet(class.n2c, cl)
        else if ty == 'r' then
            m.n.class = m.class.classO
  /*    else say 'cl leer' ty nm nmTy   ???????*/
        end
    else if ty == 'm' then
        m.n.met = cl
    else if cl \== '' then
        call err 'class for type' ty': classBasicNew('ty',' nm',' cl')'
    return n
endProcedure classBasicNew


classNew: procedure expose m.
parse arg clEx 1 ty rest
    if abbrev(ty, 'n') then do
        if wordPos(ty, 'n n? n* n|') < 1 then
            call err 'bad type' ty': classNew('clEx')'
        nmTy = right(ty, 1)
        parse var rest nm ty rest
        if ty \== 'u' then
            call err 'class name' nm 'without u: classNew('clEx')'
        if nmTy == 'n' then do
             if mapHasKey(class.n2c, nm) then
                call err 'class' nm 'already defined: classNew('clEx')'
            end
        else if nmTy == '?' then do
            if mapHasKey(class.n2c, nm) then
                return mapGet(class.n2c, nm)
            end
        else if nmTy == '*' then do
            if arg() \== 1 then
                call err 'arg()='arg() 'for n* : classNew('clEx')'
            if mapHasKey(class.n2c, clEx) then
                return mapGet(class.n2c, clEx)
            end
        n = classBasicNew('u', nm, , nmTy)
        end
    else do
        nmTy = ''
        if arg() \== 1 then
            call err 'arg()='arg() 'without name: classNew('clEx')'
        if mapHasKey(class.n2c, clEx) then
               return mapGet(class.n2c, clEx)
        if length(ty) <> 1 | pos(ty, 'ufscmr') < 1 then
            call err 'bad type' ty': classNew('clEx')'
        nm = ''
        if pos(ty, 'usr') < 1 then
            parse var rest nm rest
        if ty = 'u'  then do
            n = classBasicNew(ty)
            end
        else if    ty = 'm' then do
            n = classBasicNew(ty, nm, rest)
            rest = ''
            end
        else do
            parse var rest t1 rest
            if wordPos(t1, 'u f s c m r') > 0 then do
                n = classBasicNew(ty, nm)
                m.n.class = classNew(t1 rest)
                rest = ''
                end
            else do
                n = classBasicNew(ty, nm, t1)
                end
            end
        end
    if ty \== 'u' then do
        if rest \== '' then
            call err 'rest' rest 'but end of classExp expected:' clEx
        end
    else do
        lx = 0
        do while lx < length(rest)
            cx = pos(',', rest, lx+1)
            if cx <= lx | word(substr(rest, lx+1), 1) == 'm' then
                cx = length(rest)+1
            a = mAdd(n, classNew(strip(substr(rest, lx+1, cx-lx-1))))
            lx=cx
            end
        pref = ''
        do ax=2 to arg()
            if length(arg(ax)) == 1 & arg(ax) \== ' ' then
                pref = arg(ax)' '
            else
                call mAdd n, classNew(pref || arg(ax))
            end
        end
    cr = mIterBegin('CLASS')
    do while assNN('cr', mIter(cr)) & \ classEqual(n, cr)
        end
    isNew = cr == n
    if \ isNew then do
        if mapRemove(class.n2c, n) \== n then
            call err 'mapRemove('n') mismatch'
        if m.n == 'u' & m.n.name \== '' then
            if mapRemove(class.n2c, m.n.name) \== n then
                call err 'mapRemove('m.n.name') mismatch'
        call mFree n
        n = cr
        end
    if nmTy == '' | nmTy == '*' then
        call mapAdd class.n2c, clEx, n
    if isNew then
        call classAddedNotify n
    return n
endProcedure classNew

classAdd1Method: procedure expose m.
parse arg clNm, met code
    cl = class4Name(clNm)
    if pos(m.cl, 'uvw') < 1 then
        call err 'class not nvw but' m.cl,
            'in classAdd1Method('clNm',' met code')'
    do sx = 1 to m.cl.0
        su = m.cl.sx
        if m.cl.sx = 'm' & m.cl.name == met then
            call err 'met' met 'already in' clNm
        end
    call mAdd cl, classNew('m' met code)
    return cl
endProcedure classAdd1Method

/*--- register a listener for newly defined classes
        and call it for all already defined classes -----------------*/
classAddedRegister: procedure expose m.
parse arg li
    call mAdd 'CLASS.ADDEDLISTENERS', li
    do cx = 1 to m.class.addedSeq.0
        call oRun li, m.class.addedSeq.cx
        end
    return
endProcedure classAddedRegister

/*--- to notify all listeners about a newly defined classes --------*/
classAddedNotify: procedure expose m.
parse arg cl
    call mAdd 'CLASS.ADDEDSEQ', cl
    if m.cl == 'u' then
        call classSuperSub cl
    m.cl.flds.0 = 0
    m.cl.stms.0 = 0
    m.cl.stemCl = ''
    m.cl.valueCl = ''
    call classAddFields cl, cl
    m.cl.hasFlds = m.cl.flds.0 > 1 ,
        | (m.cl.flds.0 == 1 & m.cl.flds.1 \== '') | m.cl.stms.0 > 0
    do lx = 1 to m.class.addedListeners.0
        call oRun m.class.addedListeners.lx, cl
        end
    return
endProcedure classAddedNotify

/*--- add supper and sub links for class cl -------------------------*/
classSuperSub: procedure expose m.
parse arg cl
    do ux=1 to m.cl.0
        u1 = m.cl.ux
        if m.u1 == 'u' then do
            if mPos(cl'.SUPER', u1) > 0 then
                call err u1 'is already in' cl'.SUPER.'sx ,
                    || ': classSuperSub('cl')'
            call mAdd cl'.SUPER', u1
            if mPos(cl'.SUB', cl) > 0 then
                call err cl 'is already in' u1'.SUB.'sx ,
                    || ': classSuperSub('cl')'
            call mAdd u1'.SUB', cl
            end
        end
    return
endProcedure classSuperSub

/*--- add the the fields of class cl to stem f ----------------------*/
classAddFields: procedure expose m.
parse arg f, cl, nm
    n1 = substr(nm, 1+abbrev(nm, '.') )
    if symbol('m.f.f2c.n1') \== 'VAR' then
        m.f.f2c.n1 = cl
/*    else if cl == m.f.f2c.n1 then
        return 0 */
    if cl == m.class.classV | cl == m.class.classW | m.cl=='r' then do
        if nm == '' then do
            if m.f.valueCl \== '' then
                return  err('value mistmatch')
            m.f.valueCl = cl
            end
        if nm == '' then do
             call mMove f'.FLDS', 1, 2
             m.f.flds.1 = ''
             end
        else do
            call mAdd f'.FLDS', nm
            end
        return 0
        end
    if m.cl = 's' then do
        if m.cl.class == '' then
            call err 'stem null class'
        a1 = mAdd(f'.STMS', nm)
        m.a1.class = m.cl.class
        if nm == '' then
            m.f.stemCl = m.cl.class
        return 0
        end
    if m.cl = 'f' then
        return classAddFields(f, m.cl.class, nm'.'m.cl.name)
    if m.cl.class \== '' then
        return classAddFields(f, m.cl.class, nm)
    do tx=1 to m.cl.0
        call classAddFields f, m.cl.tx, nm
        end
    return 0
endProcedure classAddFields

/*--- return true iff the two classes are equal -------------------*/
classEqual: procedure expose m.
parse arg l, r
    if m.l \== m.r | m.l.nameComp \== m.r.nameComp ,
            | m.l.class \== m.r.class | m.l.0 \== m.r.0  then
        return 0
    if m.l.met \== m.r.met  then
        return 0
    do sx=1 to m.l.0
        if m.l.sx \== m.r.sx then
            return 0
        end
    return 1
endProcedure classEqual

/*--- print object ---------------------------------------------------*/
objOut: procedure expose m.
parse arg m, pr, p1
   c = objClass(m, '')
   if c == '' then
       call out p1 'no class for' m
   else if c == m.class.classV then
       call out p1 || m.m
   else if c == m.class.classW then
       call out p1 || o2String(m)
   else
       call classOutDone c, m, pr, p1
   return
endProcedure objOut

/*--- recursively output (with out:) the object a with class t -------*/
classOut: procedure expose m.
parse arg t, a, pr, p1
    return classOutDone(if(t=='',m.class.classO, t), a, pr, p1)
endProcedure classOut

/*--- ouput object a with class t and stopper done ------------------*/
classOutDone: procedure expose m. done.
parse arg t, a, pr, p1
    if p1 == '' then
        p1 = pr
    if right(p1, 1) \== ' ' then
        p1 = p1' '
    if done.ini \== 1 then do
        done.ini = 1
        t = class4Name(t, t)
        p1 = p1'@'a' '
        end
    if done.t.a == 1 then
        return out(p1'done :'className(t) '@'a)
    done.t.a = 1
    if t = m.class.classO then do
        if a == '' then
            return out(p1'obj null')
        t = objClass(a, '')
        if t = '' then
            return out(p1'obj has no class @'m.a)
        else
            return classOutDone(t, a, pr, p1'isA')
        end

    if t == m.class.classV then
        return out(p1'=' m.a)
    if t == m.class.classW == 'w' then
        return out(p1'}' substr(a, 2))
    if m.t == 'f' then
        return classOutDone(m.t.class, a'.'m.t.name, pr, p1'.'m.t.name)
    if m.t == 'r' then do
        if m.a == '' then
            return out(p1'refTo :'className(m.t.class) '@null@')
        else
            return classOutDone(m.t.class, m.a, pr,
                    , p1'refTo @'m.a)
        end
    if m.t = 'u' then do
        t1 = m.t.1
        vv = m.t.0 > 0 & m.t.1 == m.class.classV
        call out p1 || if(m.t.name == '', 'union', ':'m.t.name) ,
             || copies(' =' m.a, vv)
        do ux=1+vv to m.t.0
            call classOutDone m.t.ux, a, pr' '
            end
        return 0
        end
    if m.t = 's' then do
        call out p1'stem' m.a.0
        do ux=1 to m.a.0
            call classOutDone m.t.class, a'.'ux, pr' ', pr' .'ux
            end
        return 0
        end
    if m.t = 'c' then do
        if m.t.name = m.a then
            call classOutDone m.t.class, a, pr, p1'choice' m.a
        return 0
        end
    if m.t = 'm' then
        return 0
    return err('bad class type' m.t)
endProcedure classOutDone
/* copy class end   ***************************************************/
/* copy map begin ******************************************************
    a map stores values at keys
    it may also maintain a list of keys
    the basic ideas are similar to the java Interface java.util.Map
    contrary to stems we also handle keys longer then 250 bytes
***********************************************************************/
/*--- initialize the module ------------------------------------------*/
mapIni: procedure expose m.
    if m.map.ini = 1 then
        return
    m.map.ini = 1
    call mIni
    m.map.0 = 0
    m.map.inlineSearch = 1
    call mapReset map.inlineName, map.inline
    return
endProcedure mapIni

mapInline: procedure expose m.
parse arg pName, opt
    if mapHasKey(map.inlineName, pName) then do
        im = mapGet(map.inlineName, pName)
        if pos('l', opt) < 1 & symbol('m.im.0') \== 'VAR' then do
            m.im.0 =  m.im.lEnd - m.im.lBegin - 1
            do ix=1 to m.im.0
                m.im.ix = strip(sourceline(ix+m.im.lBegin), 't')
                end
            end
        return im
        end
    name = '/'
    do lx = m.map.inlineSearch to sourceline()
        if \ abbrev(sourceline(lx), '$') then
            iterate
        li = sourceline(lx)
        s1 = pos('/', li)+ 1
        if s1 < 3 | s1 > 4 then
            iterate
        s2 = pos('/', li, s1)
        if s2 <= s1 then
            iterate
        if s1 == 3 then do
            if name \== substr(li, s1, s2-s1) then
                iterate
            im = 'MAP.INLINE.' || (m.map.inline.0+1)
            call mapAdd map.inlineName, name, im
            m.im.lBegin = lBeg
            m.im.lEnd = lx
            m.im.mark = mrk
            if name == pName then do
                m.map.inlineSearch = lx+1
                return mapInline(pName)
                end
            name = '/'
            end
        else if \ mapHasKey(map.inlineName,
                , substr(li, s1, s2-s1)) then do
            lBeg = lx
            mrk = substr(li, 2, s1-3)
            name = substr(li, s1, s2-s1)
            end
        else do
            name = '/'
            end
        end
    if pos('r', opt) > 0 then
        return ''
    return err('no inline data /'pName'/ found')
endProcedure mapInline

/*--- create a new map ----------------------------------------------*/
mapNew: procedure expose m.
parse arg opt
    m.map.0 = m.map.0 + 1
    return mapReset('MAP.'m.map.0 , opt)
endProcedure mapNew

/*--- make an empty map, if opt <> '' maintain stem of keys
                ('K' in map.keys, '=' in a else in opt) --------------*/
mapReset: procedure expose m.
    parse arg a, opt
    if symbol('m.map.keys.a') == 'VAR' then
        call mapClear a
    if opt = '=' then
        st = a
    else if translate(opt) = 'K' then
        st = 'MAP.KEYS.'a
    else
        st = opt
    m.map.keys.a = st
    if st \== '' then
        m.st.0 = 0
    return a
endProcedure

/*--- add a new key value pair to the map ----------------------------*/
mapAdd: procedure expose m.
parse arg a, ky, val
    vv = mapValAdr(a, ky, 'a')
    m.vv = val
    return val
endProcedure mapAdd

/*--- change the value at a key or add key value ---------------------*/
mapPut: procedure expose m.
parse arg a, ky, val
    vv = mapValAdr(a, ky, 'p')
    m.vv = val
    return val
endProcedure mapPut

/*--- return 1 if key ky exists in map a, 0 otherwise ----------------*/
mapHasKey: procedure expose m.
parse arg a, ky
    return mapValAdr(a, ky) \== ''
endProcedure mapHasKey

/*--- return the value of key ky in map a if it exists,
          else if called with a third argument return third argument
          else issue an error ----------------------------------------*/
mapGet: procedure expose m.
parse arg a, ky
    vv =  mapValAdr(a, ky)
    if vv \== '' then
        return m.vv
    else if arg() > 2 then
        return arg(3)
    else
        return err('missing key in mapGet('a',' ky')')
endProcedure mapGet

/*--- return a stem of all keys --------------------------------------*/
mapKeys: procedure expose m.
parse arg a
    if m.map.keys.a == '' then
        call err 'mapKeys('a') with no keys'
     return m.map.keys.a
endProcedure mapKeys

/*--- remove a key from the map, do nothing if it is missing ---------*/
mapRemove: procedure expose m.
parse arg a, ky
    vv = mapValAdr(a, ky)
    if vv == '' then
        return ''
    if m.map.keys.a \== '' then do
        trace ?R /* not tested yet ???wkTest */
        k = m.map.keys.a
        mx = m.k.0
        do i=1 to mx
            if m.k.i == ky then do
                m.k.i = m.k.mx
                m.k.0 = mx - 1
                return
                end
            end
        end
    val = m.vv
    drop m.a.ky
    return val
endProcedure mapRemove

/*--- remove all entries ---------------------------------------------*/
mapClear: procedure expose m.
parse arg a
    st = mapKeys(a)
    liLe = 243 - length(a)
    do kx=1 to m.st.0
        ky = m.st.kx
        drop m.st.kx
        if length(ky) <= liLe then do
            drop m.a.ky
            end
        else do
            adr = mapValAdr(a, ky)
            if adr \== '' then do
                ha = left(adr, lastPos('.', adr) - 3)
                do i = 1 to m.ha.k.0
                     drop m.ha.k.i m.ha.v.i
                     end
                 drop m.ha.k.0
                 end
            end
        end
    m.st.0 = 0
    return a
endProcedure mapClear

/*--- return the value pointer for a key, '' if non existing
             with fun = 'a' add a key, with 'p' put a key ------------*/
mapValAdr: procedure expose m.
parse arg a, ky, fun
    if length(ky) + length(a) <= 243 then do
        res = a'.'ky
         if symbol('m.res') == 'VAR' then do
            if fun == 'a' then
                call err 'duplicate key' ky 'in map' a
            return res
            end
        else if fun == '' then
            return ''
        end
    else do
        len = 243 - length(a)
        q = len % 4
        ha = a'.'left(ky, len - 2 * q) || substr(ky,
            , (length(ky)-len) % 2 + 2 * q, q) || right(ky, q)
        if symbol('M.ha.k.0') == 'VAR' then do
            do i=1 to m.ha.k.0
                if m.ha.k.i == ky then do
                    if fun == 'a' then
                        call err 'duplicate key' ky ,
                            'map' a 'hash' ha'.K.'i
                    return ha'.V.'i
                    end
                end
            end
        else do
            i = 1
            end
        if fun == '' then
            return ''
        if i > 9 then
            call err 'overflow long key' y 'in map' a 'hash' ha'.K.'i
        m.ha.k.0 = i
        m.ha.k.i = ky
        res = ha'.V.'i
        end
    if m.map.keys.a \== '' then
        call mAdd m.map.Keys.a, ky
    m.res = ''
    return res
endProcedure mapValAdr

/* copy map end *******************************************************/
/* copy mapExp begin **************************************************/
mapVia: procedure expose m.
parse arg a, ky
    sx = pos('|', ky)
    if sx < 1 then
        return mapGet(a, ky)
    via = mapGet(a, left(ky, sx-1))
    do while sx <= length(ky)
        fx = sx+1
        sx = pos('|', ky, fx)
        if sx < 1 then
            sx = length(ky) + 1
        if sx = fx then do
            if symbol('m.via') \== 'VAR' then
                call err 'missing m.'via 'at' sx 'in mapVia('a',' ky')'
            via = m.via
            end
        else do
            f = substr(ky, fx, sx - fx)
            if symbol('m.via.f') \== 'VAR' then
                call err 'missing m.'via'.'f ,
                     'at' sx 'in mapVia('a',' ky')'
            via = m.via.f
            end
        end
    return via
endProcedure mapVia

mapExpAt: procedure expose m.
parse arg a, src, sx
    m.map.ExpAt = 0
    cx = pos('$', src, sx)
    if cx < 1 then
        return substr(src, sx)
    res = substr(src, sx, cx-sx)
    do forever
        if substr(src, cx+1, 1) = '{' then do
            ex = pos('}', src, cx+2)
            if ex < 1 then
                call err 'missing } after' substr(src, cx) 'in' src
            res = res || mapVia(a, strip(substr(src, cx+2, ex-cx-2)))
            ex = ex + 1
            end
        else do
            ex = verify(src, m.mAlfDot, 'n', cx+1)
            if ex < 1 then
                return res || mapVia(a, substr(src, cx+1))
            if ex = cx+1 then do
                m.map.ExpAt = cx
                return res
                end
            res = res || mapVia(a, substr(src, cx+1, ex-cx-1))
            end
        cx = pos('$', src, ex)
        if cx < 1 then
            return res || substr(src, ex)
        res = res || substr(src, ex, cx-ex)
        end
endProcedure mapExpAt

mapExp: procedure expose m.
parse arg a, src
    res = mapExpAt(a, src, 1)
    if m.map.ExpAt \== 0 then
        call err 'mapExp stopped at' substr(src, map.ExpAt) 'in' src
    return res
endProcedure mapExp

mapExpAllAt: procedure expose m.
parse arg a, dst, src, sx, cx
    do while sx <= m.src.0
        li = mapExpAt(a, m.src.sx, cx)
        dx = m.map.ExpAt
        if (cx=1 & dx = 0) | li \= '' then
            call mAdd dst, li
        if dx = 0 then do
            cx = 1
            sx = sx+1
            end
        else do
            return sx dx
            end
        end
    return ''
endProcedure mapExpAllAt

mapExpAll: procedure expose m.
parse arg a, dst, src
    sto = mapExpAllAt(a, dst, src, 1, 1)
    if sto == '' then
         return
    lx = word(sto, 1)
    call err 'mapExpAll stopped at' sto':' m.src.lx
endProcedure mapExpAll
/* copy mapExp end ****************************************************/
/* copy m begin ********************************************************
  we use variables as follows
    m. stem m: all global data and object data that must survive
               a procedure call  (m for memory in Memoria of B5000)
        m.<mbr>.** to avoid conflicts: every rexx Module (copy) should
               only allocate addresses m.<mbr>.** with <mbr> the name of
               the rexx module
        we pass parameters around (e.g. a=address, m=memory, st=stem)
            and the called function may use m.a or m.a.subField etc.
    gg*: local variable in subroutines without procedure
    everything else: temporary data within procedure

  every subroutine is declared as procedure expose m.
        (also if no m. variable is used, because e.g. of error handling)
  the few subroutines that cannot use procedure, should use only
        variables starting with gg
***********************************************************************/
/*---make an area -----*/

mNewArea: procedure expose m.
parse arg nm, adr, newCd, freeCd
    m.m.area.0 = m.m.area.0 + 1
    a = 'M.AREA.'m.m.area.0
    if adr == '=' then
        adr = nm
    else if adr == '' then
        adr = 'M.'m.m.area.0
    if symbol('m.m.n2a.adr') == 'VAR' then
        call err 'adr' adr 'for area' nm 'already used'
    m.m.n2a.adr = a
    call mAlias adr, nm
    m.m.p2a.adr = a

    m.a.0 = 0
    m.a.free.0 = 0
    m.a.address = adr
    m.a.newCode = newCd
    m.a.freeCode = freeCd
    return nm
endProcedure mNewArea

mAlias: procedure expose m.
parse arg oldNa, newNa
    if symbol('m.m.n2a.oldNa') \== 'VAR' then
        call err 'area' oldNa 'does not exist'
    if oldNa == newNa then
        return
    if symbol('m.m.n2a.newNa') == 'VAR' then
        call err 'newName' newNa 'for old' oldNa 'already used'
    m.m.n2a.newNa = m.m.n2a.oldNa
    return
endProcedure mAlias

mBasicNew: procedure expose m. ggArea
parse arg name
    if symbol('m.m.n2a.name') \== 'VAR' then
        call err 'area' name 'does not exists'
    ggArea = m.m.n2a.name
    if m.ggArea.free.0 > 0 then do
        fx = m.ggArea.free.0
        m.ggArea.free.0 = fx-1
        m = m.ggArea.free.fx
        end
    else do
        m.ggArea.0 = m.ggArea.0 + 1
        m = m.ggArea.address'.'m.ggArea.0
        end
    return m
endProcedure mBasicNew

mNew: procedure expose m.
labelMNew:
parse arg name, arg, arg2, arg3
    m = mBasicNew(name)
    interpret m.ggArea.newCode
    return m
endProcedure mNew

mReset: procedure expose m.
parse arg a, name
    ggArea = m.m.n2a.name
    m = a
    interpret m.ggArea.newCode
    return m
endProcedure mReset

mFree: procedure expose m.
parse arg m
    p = 'M.P2A.'left(m, lastPos('.', m)-1)
    area = m.p
    if m.area.freeCode \== '' then
        interpret m.area.freeCode
    fx = m.area.free.0 + 1
    m.area.free.0 = fx
    m.area.free.fx = m
    return
endProcedure mFree
/*--- iterate over all allocate elements of an area ------------------*/
mIterBegin: procedure expose m.
parse arg nm
    a = m.m.n2a.nm
    return m.a.address'.0'
endProcedure mIterBegin

mIter: procedure expose m.
parse arg cur
    if cur == '' then
        return ''
    lx = lastPos('.', cur)
    p = 'M.P2A.'left(cur, lx-1)
    a = m.p
    ix = substr(cur, lx+1)
    do ix=ix+1 to m.a.0
        n = m.a.address'.'ix
        do fx=1 to m.a.free.0 while m.a.free \== n
            end
        if fx > m.a.free.0 then
            return n
        end
    return ''
endProcedure mIter

/*--- cut stem a to length len ---------------------------------------*/
mCut: procedure expose m.
parse arg a, len
    m.a.0 = len
    return a
endProcedure mCut

/*--- add one or several arguments to stem m.a -----------------------*/
mAdd: procedure expose m.
parse arg a
    ix = m.a.0
    do ax = 2 to arg()
        ix = ix + 1
        m.a.ix = arg(ax)
        end
    m.a.0 = ix
    return a'.'ix
endProcedure mAdd

/*--- pop last element from stem m.a ---------------------------------*/
mPop: procedure expose m.
parse arg a
    ix = m.a.0
    if ix < 1 then
        call err 'pop from empty stem' a
    m.a.0 = ix-1
    return m.a.ix
endProcedure mPop

/*--- add to m.dst.* a (sub)sequence of m.src.* ----------------------*/
mAddSt: procedure expose m.
    parse arg dst, src
    dx = m.dst.0
    do sx = 1 to m.src.0
        dx = dx + 1
        m.dst.dx = m.src.sx
        end
    m.dst.0 = dx
    return
endProcedure mAddSt

/*--- find position of first occurrence of ele in stem m,
        return 0 if nonemove a part of a stem -----------------------*/
mPos: procedure expose m.
parse arg m, ele, sx
    if sx == '' then
        sx = 1
    do x=sx to m.m.0
        if m.m.x = ele then
            return x
        end
    return 0
endProcedure mPos

/*--- move a part of a stem ------------------------------------------*/
mMove: procedure expose m.
parse arg m, sx, dx
    if dx < sx then do
        y = dx
        do x=sx to m.m.0
            m.m.y = m.m.x
            y = y + 1
            end
        end
    else if dx > sx then do
        y = m.m.0 + dx - sx
        do x=m.m.0 by -1 to sx
            m.m.y = m.m.x
            y = y - 1
            end
        end
    m.m.0 = m.m.0 + dx - sx
    return
endProcedure mMove

/*--- insert a stem into another ------------------------------------*/
mInsert: procedure expose m.
parse arg m, tx, st
    call mMove m, tx, tx+m.st.0
    do sx=1 to m.st.0
        dx = tx-1+sx
            m.m.dx = m.st.sx
            end
    return
endProcedure mInsert

/*--- strip all elements of a stem -----------------------------------*/
mStrip: procedure expose m.
parse arg st, opt
    if opt == '' then
        opt = 'b'
    do x=1 to m.st.0
        m.st.x = strip(m.st.x, opt)
        end
    return st
endProcedure mStrip


/* cat the lines of a stem, possibly repeated --------------------------
       args: stem, fmt see fGen: -------------------------------------*/
mCat: procedure expose m.
parse arg st, fmt
    if m.st.0 < 1 then
        return ''
    res = f(fmt, m.st.1)
    do sx=2 to m.st.0
        res = res || fPlus(fmt 'nxt', m.st.sx)
        end
    return res || fFld(fmt 'end')
endProcedure mCat

mIni: procedure expose m.
    if m.m.ini = 1 then
        return
    m.m.ini = 1
    m.mAlfLC  = 'abcdefghijklmnopqrstuvwxyz'
    m.mAlfUC  = translate(m.mAlfLC)
    m.mAlfa   = m.mAlfLC || m.mAlfUC
    m.mAlfNum = m.mAlfa || '0123456789'
    m.mAlfDot = m.mAlfNum || '.'
    m.mAlfRex1 = m.mAlfa'@#$?'  /* charset problem with ¬|  */
    m.mAlfRexR = m.mAlfRex1'.0123456789'
    m.m.area.0 = 0
    call mNewArea
    return
endProcedure mIni
/* copy m end *********************************************************/
/* copy adrIsp begin *************************************************/
/**********************************************************************
    lmd: catalog read
    call sequence: lmdBegin, lmdNext*, lmdEnd
        mit lmd service (mit save in file und read,
                         weil list zu langsam und listcat abstürzt)
        1. arg (grp)     als group dataset für lmd save
                         und dd name für file read
***********************************************************************/
lmdBegin: procedure expose m.
    parse arg grp, lev
    call adrIsp 'lmdinit listid(lmdId) level('lev')'
    res = adrIsp('lmdlist listid(&lmdId) option(save) group('grp')', 4)
    call adrIsp 'lmdfree listid(&lmdId)'
    if res = 0 then do
        call trc timing() 'lmdlist save' grp lev
        call adrTso 'alloc dd('grp') shr dsn('grp'.datasets)'
        end
    else do
        call trc 'no datasets found' timing() 'lmdlist save' grp lev
        call adrTso 'alloc dd('grp') dummy'
        end
    call readDDBegin grp
return /* end lmdBegin */

lmdNext:
    parse arg ggGrp, ggSt, withVolume
    if \ readDD(ggGrp, ggSt) then
         return 0
    if withVolume \== 1 then
        do ggIx=1 to value(ggSt'0')
            x = value(ggSt || ggIx, word(value(ggSt || ggIx), 1))
            end
    return 1
endSubroutin lmdNext

lmdEnd: procedure expose m.
    parse arg grp
    call readDDEnd grp
    call adrTso 'free dd('grp')'
return /* end lmdEnd */

lmd: procedure expose m.
    parse arg lev, withVol
    call lmdBegin gg1, lev
    do while lmdNext(gg1, q., withVol)
        do x=1 to q.0
           call out q.x
           end
        end
    call lmdEnd gg1
    return
endProcedure lmd
/**********************************************************************
    member list of a pds:
        call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmm: procedure expose m.
parse arg dsn
    id = lmmBegin(dsn)
    do ix=1 by 1
        m = lmmNext(id)
        if m = '' then
            leave
        call out m
        end
    call lmmEnd id
    return
endProcedure lmm

lmmBegin: procedure expose m.
parse arg dsn
    mbr = dsnGetMbr(dsn)
    pds = dsnSetMbr(dsn, )
    call adrIsp "LMINIT DATAID(lmmId) DATASET('"pds"') ENQ(SHRW)"
    call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
    res = lmmId
    if mbr <> '' then
        res = res 'pattern('mbr')'
    return res
endProcedure lmmBegin

lmmEnd: procedure expose m.
parse arg lmmId opt
    call adrIsp "LMMLIST DATAID("lmmId") option(free)", 8
    call adrIsp "LMCLOSE DATAID("lmmId")"
    call adrIsp "LMFREE DATAID("lmmId")"
    return
endProcedure lmmEnd

lmmNext: procedure expose m.
parse arg lmmId opt
    if adrIsp("LMMLIST DATAID("lmmid")" ,
               "OPTION(LIST) MEMBER(Mbr)" opt, 4 8) = 0 then
        return strip(mbr)
    else
        return ''
endProcedure lmmNext

lmmRm: procedure expose m.
parse arg dsn, mbrs
    mbrs = dsnGetMbr(dsn) mbrs
    pds = dsnSetMbr(dsn, )
    call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
    call adrIsp "LMOPEN DATAID("lmmId") OPTION(OUTPUT) "
    err = ''
    do wx=1 to words(mbrs)
        m1 = word(mbrs, wx)
        rr = adrIsp("lmmDel dataid("lmmId") member("m1")", 0 8 12)
        if rc = 0 then
            say 'removed' m1 'from' pds
        else if rc = 8 then
            say 'not found' m1 'in' pds
        else do
            err = 'error deleting' m1 'in' pds 'rc' rr strip(zerrlm)
            say err
            leave
            end
        end
    call adrIsp "LMCLOSE DATAID("lmmId")"
    call adrIsp "LMFREE DATAID("lmmId")"
    if err <> '' then
        call err err
    return
endProcedure lmmRm
/*--- address ispf with error checking -------------------------------*/
adrIsp:
    parse arg ggIspCmd, ggRet
    address ispexec ggIspCmd
    if rc = 0 then return 0
    else if ggRet == '*' then return rc
    else if wordPOS(rc, ggRet) > 0 then return rc
    else
        call err 'adr ispExec rc' rc 'in' ggIspCmd':' strip(zerrlm)
endSubroutine adrIsp

/*--- address editor with error checking -----------------------------*/
adrEdit:
    parse arg ggEditCmd, ggRet
    address isrEdit ggEditCmd
    if rc = 0 then return 0
    else if ggRet == '*' then return rc
    else if wordPOS(rc, ggRet) > 0 then return rc
    else
        call err 'adr isrEdit rc' rc 'for' ggEditCmd
endSubroutine adrEdit
/* copy adrIsp end   *************************************************/
/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
    parse arg ggTsoCmd, ggRet
    address tso ggTsoCmd
    if rc == 0                     then return 0
    else if ggRet == '*'           then return rc
    else if wordPos(rc, ggRet) > 0 then return rc
    else
        call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */

/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure expose m.
parse upper arg dsn ., addPrefix
    if left(dsn,1) = "'" then
        return strip(dsn, 'b', "'")
    sp = sysvar('SYSPREF')
    if sp == '' then
        sp = userid()
    cx = pos('~', dsn)
    if cx < 1 & addPrefix == 1 then
        return sp'.'dsn
    do while cx \== 0
        le = left(dsn, cx-1)
        ri = substr(dsn, cx+1)
        if right(le, 1) == '.' | left(ri, 1) == '.' then
            dsn = le || sp || ri
        else
            dsn = le || left('.', le \== '') || sp ,
                     || left('.', ri \== '') || ri
        cx = pos('~', spec, cx)
        end
    return dsn
endProcedure dsn2Jcl

/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure expose m.
parse arg dsn .
    return "'"dsn"'"
endProcedure jcl2dsn

dsnSetMbr: procedure expose m.
parse arg dsn, mbr
     bx = pos('(', dsn)
     if bx > 0 then
         dsn = strip(left(dsn, bx-1))
     if mbr <> '' then
         dsn = dsn'('strip(mbr)')'
     return dsn
endProcedure dsnSetMbr

dsnGetMbr: procedure expose m.
parse arg dsn
     lx = pos('(', dsn)
     rx = pos(')', dsn, lx+1)
     if lx < 1 then
         return ''
     else if lx < rx then
         return substr(dsn, lx+1, rx-lx-1)
     else
         return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
    io: read or write a dataset with the following callsequences:
        read:  readDDBegin, readDD*,  readDDEnd
        write: writeBegin,  writeDD*, writeEnd

        readDD returns true if data read, false at eof
***********************************************************************/

/*--- prepare reading from a DD --------------------------------------*/
readDDBegin: procedure expose m.
    parse upper arg ggDD
    call errAddCleanup 'call readDDEnd' ggDD', "*"'
return /* end readDDBegin */

/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt = '' then
        ggCnt = 100
    call adrTso 'execio' ggCnt 'diskr' ggDD '(stem' ggSt')', 2
    return (value(ggSt'0') > 0)
return /* end readDD */

/*--- finish reading DD  ggDD ----------------------------------------*/
readDDEnd: procedure expose m.
    parse upper arg ggDD, ggRet
    call errRmCleanup 'call readDDEnd' ggDD', "*"'
    return adrTso('execio 0 diskr' ggDD '(finis)', ggRet)
endProcedure readDDEnd

/*--- prepare writing to DD ggDD -------------------------------------*/
writeDDBegin: procedure expose m.
    parse upper arg ggDD
                  /* ensure file is erased, if no records are written */
    call adrTso 'execio' 0 'diskw' ggDD '(open)'
    call errAddCleanup 'call writeDDEnd' ggDD', "*"'
return /* end writeDDBegin */

/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    call adrTso 'execio' ggCnt 'diskw' ggDD '(stem' ggSt')'
    return
endSubroutine writeDD

/*--- end writing to dd ggDD (close) --------------------------------*/
writeDDEnd: procedure expose m.
parse upper arg ggDD, ggRet
    call errRmCleanup 'call writeDDEnd' ggDD', "*"'
    return adrTso('execio 0 diskw' ggDD '(finis)', ggRet)
endProcedure writeDDEnd

/*--- readNx: read next line, using buffer ---------------------------*/
/*--- begin: allocate dsnSpec and ini ------------------------ -------*/
readNxBegin: procedure expose m.
    parse arg m, m.m.dsn, m.m.dd, m.m.Cnt
    if m.m.dd = '' then
        m.m.dd = 'DDNX'
    if m.m.cnt = '' then
        m.m.cnt = 1000
    m.m.cx = m.m.cnt + 999
    m.m.buf0x = 0
    m.m.0 = 0
    call dsnAlloc 'dd('m.m.dd')' m.m.dsn
    call readDDBegin m.m.dd
    return m
endProcedure readDDNxBegin

/*--- return the stem of the next line, or '' at end -----------------*/
readNx: procedure expose m.
parse arg m
    ix = m.m.cx + 1
    m.m.cx = ix
    if m.m.cx <= m.m.0 then
        return m'.'ix
    m.m.buf0x = m.m.buf0x + m.m.0
    if \ readDD(m.m.dd, 'M.'m'.', m.m.cnt)then
        return ''
    m.m.cx = 1
    return m'.1'
endProcedure readDDNx

/*--- return the position (line number) of reader
           plus le characters of the current line (default 50) ------*/
readnxPos: procedure expose m.
parse arg m, le
    li = m'.'m.m.cx
    li = strip(m.li, 't')
    if arg() < 2 then
        le = 50
    if le < 1 then
        li = ''
    else if length(li) <= le then
        li = ':' li
    else
        li = ':' left(li, le-3)'...'
    return 'line' (m.m.buf0x + m.m.cx)li
endProcedure readnxPos

/*--- close and deallocate ------------------------------------------*/
readNxEnd: procedure expose m.
parse arg m
    call readDDEnd m.m.dd
    call tsoFree m.m.dd
    return
endProcedure readDDNxEnd

/*--- standardise a dsn spec
       word1             dsName or -
       word2             dd     or -
       word3             disp   or -
       word4 to first :  attributes in tso format
       after first :     attributes for new allocation
----------------------------------------------------------------------*/
dsnSpec: procedure expose m.
parse upper arg spec
    rr = ''      /* put leading - in separate words */
    do sx=1 while words(rr) < 3 & wx \= ''
        wx = word(spec, sx)
        do while abbrev(wx, '-') & words(rr) < 3
            wx = substr(wx, 2)
            rr = rr '-'
            end
        rr = rr wx
        end
    spec = rr subWord(spec, sx)
    na = ''
    dd = ''
    di = ''
    if left(spec, 1) = '&' then /* external spec is handled ok */
        spec = strip(substr(spec, 2))
    do wx=1 by 1
        w = word(spec, wx)
        if w = '' | abbrev(w, '.') | abbrev(w, ':') then
            leave
        else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
            di = w
        else if w = 'CATALOG' then
            di = di w
        else if abbrev(w, 'DD(') then
            dd = substr(w, 4, length(w)-4)
        else if abbrev(w, 'DSN(') then
            na = strip(substr(w, 5, length(w)-5))
        else if na == '' then
            na = dsn2jcl(w)
        else if dd == '' then
            dd = w
        else if di == '' then
            di = w
        else
            leave
        end
    if na == '' then
        na = '-'
    else if abbrev(na, "'") then
        na = substr(na, 2, length(na)-2)
    if dd == '' then dd = '-'
    if di == '' then di = '-'
    re = subword(spec, wx)
    if abbrev(re, '.') then
        re = substr(re, 2)
    return na dd di re
endProcedure dsnSpec

/*--- alloc a dsn with dsnAlloc
          if the dsn is inuse wait and retry
          until either the allocation is successfull
          or the timeout occurs --------------------------------------*/
dsnAllocWait: procedure expose m.
parse upper arg spec, pDi, pDD, timeOut
    x = max(1, arg() - 1)
    do rt=0
        m.adrTsoAl.1 = ''
        m.adrTsoAl.2 = ''
        m.adrTsoAl.3 = ''
        call outtrap m.adrTsoAl.
        res = dsnAlloc(spec, pDi, pDD, '*')
        call outtrap off
        if \ abbrev(res, ' ') then
            return res
        msg = m.adrTsoAl.1'\n'm.adrTsoAl.2'\n'm.adrTsoAl.3
        if rt > timeOut & timeOut \== '' then
            return err('timeout allocating' spec time() '\n'msg)
        if pos('DATA SET IS ALLOCATED TO ANOTHER', msg) < 1 then
            return err('allocating' spec'\n'msg)
        say time() 'sleep and retry alloc' spec
        call sleep 1, 0
        end
endProcedure dsnAllocWait

/*--- alloc a dsn or a dd
          spec '-'<ddName>
               datasetName? disposition? '.'? attributes? (':' newAtts)?
          disp default disposition
          dd   default dd name
          retRc   erlaubte ReturnCodes (leer = 0)
          returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, pDi, pDD, retRc
    parse value dsnSpec(spec) with na dd di rest
    if na = '-' then
        m.dsnAlloc.dsn = ''
    else
        m.dsnAlloc.dsn = na
    if na == '-' & dd \== '-' & di == '-' & rest = '' then
        return dd
    if dd == '-' & pDD \== '' then
        dd = pDD
    if dd == '-' then do
        if symbol('m.adrTso.ddNum') = 'VAR' then
            dd = m.adrTso.ddNum + 1
        else
            dd = 1
        m.adrTso.ddNum = dd
        dd = 'DD' || dd
        end
    if di = '-' & pDi \== '' then
        di = pDi
    if di = '-' then
        di = 'SHR'
    else if pos('(', na) < 1 then
        nop
    else if di = 'MOD' then
        call err 'disp mod for' na
    else
        di = 'SHR'
    if pos('/', na) > 0 then
        return csmAlloc(na dd di rest, retRc)
    else
        return tsoAlloc(na dd di rest, retRc)
endProcedure dsnAlloc

tsoAlloc: procedure expose m.
parse arg na dd disp rest ':' nn, retRc
    c = 'alloc dd('dd')' disp
    if na \== '-' then
        c = c "DSN('"na"')"
    else if disp = 'NEW' and nn \== '' then
        c = c dsnCreateAtts(,nn)
    call outtrap m.adrTsoAl.
    alRc = adrTso(c rest, '*')
    call outtrap off
    if alRc =  0 then do
        call errAddCleanup 'call tsoFree' dd', "*"'
        return dd 'call tsoFree' dd';'
        end
    if nn \= '' & wordPos(disp, 'OLD SHR') > 0 ,
          & sysDsn("'"m.dsnAlloc.dsn"'") == 'DATASET NOT FOUND' then do
        say 'tsoAlloc creating' c rest ':'nn
        call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(na, nn)
        call adrTso 'free  dd('dd')'
        return tsoAlloc(na dd disp rest, retRc)
        end
    do ax=1 to m.adrTsoAl.0
        say m.adrTsoal.ax
        end
    if retRc = '*' | wordPos(alRc, retRc) > 0 then
        return ' ' alRc
    call err 'tsoAlloc rc' alRc 'for' c rest
endProcedure tsoAlloc

tsoAtts: procedure expose m.
parse arg dsn
    rc = listDsi("'"dsn"' SMSINFO")
    if rc = 0 then
        mv = ''
    else if rc = 4 & sysReason = 19 then do
        mv = 'UNITCNT(30)'
        say 'multi volume' mv
        end
    else if rc ^= 0 then
        call err 'listDsi rc' rc 'reason' sysReason,
                             sysMsgLvl1 sysMsgLvl2
    al = 'CAT'
    al = ''
    if right(sysDsSms, 7) == 'LIBRARY' ,
        | abbrev(sysDsSms, 'PDS') then
         al = al 'DSNTYPE(LIBRARY)'
    if sysUnits = 'TRACK' then
        sysUnits = 'TRACKS'
    al = al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
        "DATACLAS("sysDataClass")" ,
        "RECFM("translate('1 2 3', ' 'sysREcFM, ' 123')")",
        "LRECL("SYSLRECL")",
        "blksize("sysBLkSIZE")",
        "SPACE("sysPrimary"," sysSeconds")" sysUnits mv
    return al
endProcedure tsoAtts

tsoFree: procedure expose m.
parse arg dd, ggRet
    call adrTso 'free dd('dd')', ggRet
    call errRmCleanup 'call tsoFree' dd', "*"'
    return
endProcedure tsoFree

dsnCreateAtts: procedure expose m.
parse arg dsn, atts, forCsm
    forCsm = forCsm == 1
    aU = ' 'translate(atts)
    if abbrev(atts, ':') then do
        parse var atts a1 atts
        bl = 32760
        rl = substr(a1, 3)
        if abbrev(a1, ':F') then do
            if rl = '' then
                rl = 80
            recfm='f b'
            bl = bl - (bl // rl)
            end
        else do
            if rl = '' then
                rl = bl-4
            recfm = substr(a1, 2, 1) 'b'
            end
        if forCsm then
            atts =  atts "recfm("space(recfm, 0)") lrecl("rl")",
                    "blkSize("bl")"
        else
            atts = atts "recfm("recfm") lrecl("rl") block("bl")"
        end
    if pos('(', dsn) > 0 & pos(' DSNTYPE(', aU) < 1 ,
                         & pos(' DSORG(',   aU) < 1 then
        atts = atts 'dsntype(library) dsorg(po)'
    if pos(' MGMTCLAS(', aU) < 1 then
        atts = atts 'mgmtclas(COM#A091)'
    if pos(' SPACE(', aU) < 1 then
        if forCsm then
            atts = atts 'space(10, 1000) cylinder'
        else
            atts = atts 'space(10, 1000) cyl'
    if dsn == '' then
       return atts
    return "dataset('"dsnSetMbr(dsn)"')" atts
endProcedure dsnCreateAtts

/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
    ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
    call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
    interpret subword(ggAlloc, 2)
    return
endSubroutine readDsn

/*--- write the dataset specified in ggDsnSpec from stem ggSt
          write ggCnt records if not empty otherwise ggst0
          if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
    call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
            '(stem' ggSt 'open finis)'
    interpret subword(ggAlloc, 2)
    if ggSay == 1 | m.debug == 1 then
       say ggCnt 'records written to' ggDsnSpec
    return
endSubroutine writeDsn

copyDSN: procedure expose m.
parse arg frSpec, toSpec, ggSay
    frDD = dsnAlloc(frSpec, 'SHR', 'FRDD')
    toDD = dsnAlloc(toSpec, 'OLD', 'TODD')
    call readDDBegin word(frDD, 1)
    call writeDDBegin word(toDD, 1)
    cnt = 0
    do while readDD(word(frDD, 1), r.)
        call writeDD word(toDD, 1), r.
        cnt = cnt + r.0
        end
    call readDDEnd word(frDD, 1)
    call writeDDEnd word(toDD, 1)
    interpret ';' subword(frDD, 2) '; ; ;' subword(toDD, 2)
    if ggSay == 1 | m.debug == 1 then
       say cnt 'records copied from' frSpec 'to' to toSpec
    return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
/* copy err begin ******************************************************
    messages, errorhandling,help
***********************************************************************/
errIni: procedure expose m.
    if m.err.ini == 1 then
        return
    call outIni
    m.err.ini     = 1
    m.err.handler = ''
    m.err.cleanup = ';'
    m.err.opt     = ''
    return
endProcedure errIni
/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
    call errIni
    parse arg m.err.opt, m.err.handler
    if pos('I', translate(m.err.opt)) > 0 then
        if errOS() \== 'LINUX' then
            if sysVar('sysISPF') = 'ACTIVE' then
                    call adrIsp 'control errors return'
    return
endSubroutine errReset

/*--- error routine: abend with message ------------------------------*/
err:
    parse arg ggTxt, ggOpt
    call errIni
    drop err handler cleanup opt call return
    if ggOpt == '' & m.err.handler \== '' then do
        if 1 then do /* no detection of recursive err call loop
                        --> will anyway fail by stack overflow */
            interpret m.err.handler
            end
        else do
                     /* avoid recursive err call loop */
            drop call return
            if symbol('m.err.call') \== 'VAR' then
                m.err.call = 1
            else
                m.err.call = m.err.call + 1
            if m.err.call > 10 then do
                say 'errHandler loop:' m.err.handler
                end
            else do
                m.err.return = 1
                call errInterpret m.err.handler
                m.err.call = m.err.call - 1
                if m.err.return then
                    return result
                end
            end
        end
    call outDst
    call errSay ggTxt, 'e'
    call errCleanup
    if ggOpt == '' then
        ggOpt = m.err.opt
    ggOpt = translate(ggOpt)
    if pos('T', ggOpt) > 0  then do
        trace ?r
        say 'trace ?r in err'
        end
    if pos('H', ggOpt) > 0  then do
        call errSay 'divide by zero to show stackHistory', 'e'
        x = 1 / 0
        end
    call errSay 'exit(12)', 'e'
    exit errSetRc(12)
endSubroutine err

/*--- error routine: user message cleanup exit -----------------------*/
errEx:
    parse arg ggTxt
    call errIni
    call outDst
    call errSay ggTxt
    call errCleanup
    exit 8
endProcedure errEx

errAddCleanup: procedure expose m.
parse arg code
    if m.err.ini \== 1 then
        call errIni
        /* concatenate backwards, then it is executed also backwards */
    m.err.cleanup = ';'code || m.err.cleanup
    return
endProcedure errAddCleanup

errRmCleanup: procedure expose m.
parse arg code
    if m.err.ini \== 1 then
        call errIni
    cx = pos(';'code';', m.err.cleanup)
    if cx > 0 then
        m.err.cleanup = left(m.err.cleanup, cx) ,
                     || substr(m.err.cleanup, cx + length(code)+2)
    return
endProcedure errRmCleanup

errCleanup: procedure expose m.
    call errIni
    cl = m.err.cleanup
    if cl = ';' then
        return
    m.err.cleanup = ';'
    say 'err cleanup begin' cl
    call errInterpret cl
    say 'err cleanup end' cl
    return
endProcedure errCleanup

errInterpret: procedure expose m.
parse arg code
    interpret code
    m.err.return = 0
    return
endProcedure errInterpret
/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
    interpret 'assertRes =' arg(1)
    if \ assertRes then
        call err 'assert failed' arg(1)':' arg(2)
    return
endProcedure assert

/*--- output an errorMessage msg with pref pref
           split message in lines at '/n' ---------------------------*/
errSay: procedure expose m.
parse arg msg, pref
    parse source . . ggS3 .                           /* current rexx */
    if pref == 'e' then
        msg = 'fatal error in' ggS3':' msg
    else if pref == 'w' then
        msg = 'warning in' ggS3':' msg
    else if pref \== '' then
        msg = pref':' msg
    return outNl(msg)
endProcedure errSay

/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg, op
    call errSay msg, 'e'
    call help
    call err msg, op
endProcedure errHelp

/*--- return the Operating System we are running on: TSO or LINUX ---*/
errOS: procedure expose m.
    parse source os .
    return os
endProcedure errOS

/*--- set rc for ispf: -------------------------------------------------
    if a cmd is run by ispStart, its RC is ignored,
         but ISPF passes the value of the shared varible 3IspfRc
         back as return code
----------------------------------------------------------------------*/
errSetRc: procedure expose m.
parse arg zIspfRc
    if errOS() \== 'LINUX' then
           if sysVar('sysISPF') = 'ACTIVE' then
            address ispExec vput 'zIspfRc' shared
    return zIspfRc
endProcedure errSetRc

/*--- output a trace message if m.tr is set -----------------------*/
trc: procedure expose m.
parse arg msg
    if m.trace == 1 then
        call out 'trc:' msg
    return
endProcedure trc

debug: procedure expose m.
parse arg msg
    if m.debug == 1 then
        call out 'debug' msg
    return
endProcedure debug

/*--- display the first comment block of the source as help ----------*/
help: procedure expose m.
    parse source . . s3 .
    call out right(' help for rexx' s3, 79, '*')
    do ax=1 to arg()
        say ' ' arg(ax)
        end
    do lx=1 by 1
        if pos('/*', sourceLine(lx)) > 0 then
            leave
        else if lx > 10 then do
            call out 'initial commentblock not found for help'
            return
            end
        end
    do lx=lx+1 by 1
        li = strip(sourceLine(lx), 't', ' ')
        if pos('*/', li) > 0 then
            leave
        call out li
        end
    call out right(' end help for rexx' s3, 79, '*')
    return 4
endProcedure help

/*--- output all lines (separated by '\n') of all args --------------*/
outNl: procedure expose m.
    do ax=1 to max(1, arg())
        msg = arg(ax)
        sx = 0
        bx = -1
        do lx=1 until bx >= length(msg)
                ex = pos('\n', msg, bx+2)
            if ex < 1 then
                ex = length(msg)+1
            call out substr(msg, bx+2, ex-bx-2)
            bx = ex
         end
        end
    return 0
endProcedure outNl
/* copy err end   *****************************************************/
/* copy ut begin  *****************************************************/
/*--- if function  warning all3 arguments get evaluated|
                   e.g if(x=0, 'infinity', 1/0) will fail| -----------*/
if: procedure expose m.
parse arg co, ifTrue, ifFalse
    if co then
        return ifTrue
    else
        return ifFalse
endProcedure if
/*--- embedded ASSignement:
      assign the second argument to the variable with name in first arg
      and return the value assigned ----------------------------------*/
ass:
    call value arg(1), arg(2)
    return arg(2)
/*--- embedded ASSignement only if NotNull:
      assign the second argument to the variable with name in first arg
      if the second arg is not null, return new value ---------------*/
assIf:
    if arg(2) == '' then
        return value(arg(1))
    call value arg(1), arg(2)
    return arg(2)

/*--- return first nonNull argument ---------------------------------*/
nn:
    if arg(1) \== '' then
        return arg(1)
    if arg(2) \== '' then
        return arg(2)
    call err 'nn() both args empty'

/*--- embedded ASSignement return NotNull:
      assign the second argument to the variable with name in first arg
      and return 1 if value not null, 0 if null ----------------------*/
assNN:
    call value arg(1), arg(2)
    return arg(2) \== ''

/*--- return current time and cpu usage ------------------------------*/
timing: procedure expose m.
return return time() 'ela='time('E') 'cpu='sysvar('syscpu'),
            'su='sysvar('syssrv')

timingTest: procedure expose m.
    say 'begin' timing()  sysvar('sysnode')
    do 30000000
       end
    say 'end  ' timing()
return

/*--- sleep several seconds ------------------------------------------*/
sleep: procedure expose m.
parse arg secs, sayIt
    if sayit <> 0 then
        say 'sleeping' secs 'secs' time()
    CALL SYSCALLS 'ON'
    ADDRESS SYSCALL "sleep" secs
    CALL SYSCALLS 'OFF'
    if sayit <> 0 then
        say 'slept' secs 'secs' time()
    return
endProcedure sleep

/*--- elongate inp with spaces up to given len -----------------------*/
elong: procedure expose m.
parse arg inp, len
    if length(inp) >= len then
        return inp
    return left(inp, len)
endProcedure elong

/*--- quote string txt using quoteChar qu ("""" ==> ") ---------------*/
quote: procedure expose m.
parse arg txt, qu
    if qu = '' then
        qu = '"'
    res = qu
    ix = 1
    do forever
        qx = pos(qu, txt, ix)
        if qx = 0 then
            return res || substr(txt, ix) || qu
        res = res || substr(txt, ix, qx-ix) || qu || qu
        ix = qx + length(qu)
        end
endProcedure quote

/*--- return the count of occurrences of needle in heyStack ----------*/
posCount: procedure expose m.
parse arg needle, hayStack, start, fin
    if start = '' then
        start = 1
    if fin = '' then
        fin = length(hayStack) + 1 - length(needle)
    do cnt = 0 by 1
        start = pos(needle, haystack, start)
        if start < 1 | start > fin then
             return cnt
        start = start + length(needle)
        end
endProcedure posCount

repAll: procedure expose m.
parse arg src, w, new
    res = ''
    cx = 1
    do forever
        nx = pos(w, src, cx)
        if nx < 1 then
            return res || substr(src, cx)
        res = res || substr(src, cx, nx-cx) || new
        cx = nx + length(w)
        end
endProcedure repAll

repAllWords: procedure expose m.
parse arg src, w, new
    res = ''
    wx = 0
    cx = 1
    do forever
        wx = wordPos(w, src, wx+1)
        if wx < 1 then
            return res || substr(src, cx)
        nx = wordindex(src, wx)
        res = res || substr(src, cx, nx-cx) || new
        cx = nx + length(w)
        end
endProcedure repAllWords
/* copy ut end ********************************************************/
}¢--- A540769.WK.REXX.O13(DBX1123) cre=2012-11-26 mod=2012-11-26-16.20.26 A540769 ---
/* rexx ****************************************************************
synopsis:     DBX fun args                                       v1.4

edit macro fuer CS Nutzung von DB2 AdminTool 10.1
           (die a* Funktionen gehen auch mit tso dbx ...)

    ?            diese Hilfe
    aa,aw,ac pr  naechste AuftragsId suchen fuer praefix pr
                 aa: anzueigen, aw, ac entsprechendes Member editieren
    n, nt        neuen Auftrag erstellen (nt = test)
    q subSys?    query und expandiert Scope Zeilen vom Db2Catalog
                     * fuegt alle bestehenden Objekte ein
                     * ergaenzt scope Zeile mit infos, z.B tb -> ts
                     * UNDO um Expansion rueckgaengig zu machen
                     * mit q, qq, etc. Zeile selekieren,
                               sonst werden alle expandiert
                     * funktioniert nicht nur in Auftrag
                 falls SubSys angegeben wird da gesucht sonst DBAF/DBOF
    c opt?       compare source gegen target
    i subs nct   changes in Db2Subsystem subSys importieren
                 subs = sub(,sub)*: Liste von Subsystemen/Umgebungen
                 sub: DBAF (lokal), RR2/DBOF (im PTA), RZ8(betr. Subsys)
                      ET, IT, PA (pta), PR (prod), pq(pta+rq2)
                          ==> Rz/Subsys des PromotionPaths
                 nct: Nachtraege:
                     leer: noch nicht in dieses SubSys importierte
                     =   : vom letzten import plus neue
                     89A : Nachtraege 8, 9 und A
    v opt?       version files erstellen für altes Verfahren
    vc vj vs vt vy ec ej es et ey subsys? nt?
                 view or edit cdl, jcl, srcDdl, trgDdl, strategY
    sw rz?       WSL ins RZ rz schicken und clonen, ohne rz multiclone

    opt?         Optionale Optionen =, -f, -=f etc. (fuer c, v, st)
        =        statt aktuelle source aus Db2 extrahieren
                       letzte extrahierte Version als Source brauchen
        -f       force: ignoriere QualitaetsVerletzungen

    cloneWsl     dbaMulti Funktionalitaet ist hier implementiert

Typen fuer scope und dbx q (analog adminTool, grossOderKlein ist egal):
    type                DB TS TB VW AL IX UDT UDF TG SP SQ SY
    1stelliges Kuerzel  D  S  T  V  A  X  E   F   J  O  Q  Y
Optionen im Auftrag: v10, v72, keeptgt 0, qCheck 0, dbaCheck 0
Variabeln im Auftrag (expandiert werden $varName imd ${varName})
                      varName ist case sensitive|)
    srcNm        NamensKonvention compare source (z.B. DBAF)
    trgNm        NamensKonvention compare target (z.B. DBAF)
    impNm        NamensKonvention import Ziel (z.B. DBOF)
    subsys       Db2 Subsystem (source, target, import, je nachdem)
     Optionen:   ca, bmc, ibm
   Funktionen:   ia (imp+ana), ie (ia+exe), ee,ve (exejcl), ew,vw (wsl)
************************************************************************
 9.11.2012 W. Keller ey und vy für view/edit strategy
               */ /* end of help
23. 8.2012 W. Keller v1015 für extract
13. 7.2012 W. Keller typo in query scope
18. 5.2012 W. Keller im neuen Auftrag source DX0G target DC0G/DCVG @rz8
                     PromotionPaths angepasst und vereinfacht
 4. 4.2012 W. Keller sqlQuery via csm for dbx q and qualitycheck
 4. 4.2012 W. Keller fix, import submits after last import empty, chroi
14. 2.2012 W. Keller ca  prototype
23.12.2011 W. Keller bmc prototype
13.12.2011 W. Keller RZ0, ToolPrefix, csmCopy
 3.11.2011 W. Keller Zuegeltermine 2012
 6. 9.2011 W. Keller v10 RZ8 DE0G UND DM0G ausgebaut
29.08.2011 W. Keller v10 default mit p8 und p9 alias
24.06.2011 W. Keller v10 und v72
 8.06.2011 W. Keller stored procedures editiert und version=%
26.05.2011 W. Keller qCheck 0 eingefügt
30.03.2011 W. Keller import et, it, .... , DD0G -> it, trg dc0g, i pa
24.12.2010 W. Keller plexZ (mit location CHROI00Z...)
10.12.2010 W. Keller db2 release 915, damit instead of trigger kommen
19.11.2010 W. Keller viewEdit macht jetzt view für v* statt immer edit
14.10.2010 W. Keller dp4g und dp2g in rz4.* bzw rz2.*, Zuegelsch 2012
24. 8.2010 W. Keller zusätzliche Typen für scope und dbx q
23. 8.2010 W. Keller dbzf ausgebaut
 6. 8.2010 W. Keller vc vj vs vt ec ej es et nt? eingebaut
 5. 8.2010 W. Keller stepName recTrg instead of recSrc for target
12. 7.2010 W. Keller sq=sequence für compare (fehlt noch in q)
18. 2.2010 W. Keller class=BS0 für PTA (wegen RR25 und RR26)
11. 2.2010 W. Keller dbaCheck mit ex0
 9. 2.2010 W. Keller sendJob timeout 600 auch in extractScopeVersion
 1.12.2009 W. Keller CSM.RZ1.P0.EXEC statt CMS.DIV...
12.11.2009 W. Keller Qualitätsfehler ohne -f stoppt wieder
25.10.2009 W. Keller DeltaNew überall, -a Optione, batch und do removed
28.09.2009 W. Keller Optionen keepTgt 0 und dbaCheck 0
10.09.2009 W. Keller mask ausschalten falls kein maskFile
07.09.2009 W. Keller fix error with dbaMulti
25.08.2009 W. Keller err statt fehl in line 1001
12.08.2009 W. Keller batch (ohne for) geflickt, ac pr -r: return new mbr
12.08.2009 W. Keller Zuegelschub wird nach Datum ausgesucht
19.05.2009 P. Kuhn   DEFER im Masking ignorieren
05.03.2009 P. Kuhn   Qualitaets-Check "ts not logged" eingebaut
18.12.2008 p. kuhn   neues Delta Merge Verfahren im import fuer DQ0G
18.12.2008 p. kuhn   SW fuer DVBP im RZ2 (frueher im RZ4)
10.12.2008 p. kuhn   Timeout vom Sendjob von 30 auf 600 Sek. erhoeht.
28.11.2008 w. keller v9 Fehler bei leerer Selektion
24.09.2008 p. kuhn   v9 checks
15.09.2008 p. kuhn   beim ersten import wird cdl dbaCheck't und editiert
09.09.2008 w. keller target mit RZ (job holt ddl, version aus RZ), opt =
08.08.2008 w. keller import mit wildcards
24.07.2008 w. keller overwrite ausgebaut +25.7
24.06.2008 w. keller fix spezialFall für DB         +18.7
19.05.2008 w. keller qualitaetsKontolle in c,v und st und -f Option
13.05.2008 w. keller rw, rs, sw, st und do ... for ... eingebaut
25.02.2008 w. keller subSys argument für dbx q
22.11.2007 w. keller fun v für ObjectCompare Verfahren inkl db ddl save
                     dq0g mit eigenen Libraries
12.11.2007 w. keller DSN für neuen Wartungsstand
05.06.2007 w. keller neu
***********************************************************************/
/* Ideen, Wünsche ******************************************************
     AuftragsId aus Prototyp bestimmen
     LCTL
     sämtliche infos aus XLS
     jedesmal Zwischenspeichern mit und restore Funktion
     analyze generieren, falls möglich
     batch Funktionen ganzen Zügelschub importieren usw. ==> mit wsh|
     generierte Runs starten in richtiger Reihenfolge
     mails an Entwickler schicken
     Rückmeldung falls keine changes (leeres cdl)

     Type Tabelle
                       char   type Variabeln
                                   fuer extract
        db             d      DB
        ts             s      TS
        tb/vw/alias    a v t  -    own  name
        ix             x      IX
        userDefinedTy  e      -    sch  udt
        function       f      -    sch  udf
        trigger        j      TG   qual name
        storedProc     o      SP   qual name
        sequence       q      SQ   qual name
        synonym        y      SY   qual name

**** alte Funktion (braucht es nicht mehr) *****************************
    sw rz?       WSL aus RZ rz holen und clonen, ohne rz mulitclone
    rs rz        source ddl und version aus RZ rz holen
    st opt? rz   target ddl und version extrahieren und ins rz schicken

***********************************************************************/
    m.debug = 0
    call errReset h
    if sysvar(sysispf) = 'ACTIVE' then
        call adrIsp 'Control errors return'
    call jIni
    parse upper arg oArgs
    oArg1 = word(oArgs, 1)
    m.auftrag.dataset = 'DSN.DBX.AUFTRAG'
    m.editMacro = 0
    m.editProc  = 0
    if oArgs = '' then do
        if adrEdit('macro (oArgs) NOPROCESS', '*') <> 0 then
            call errHelp('keine Argumente und kein editMacro rc =' rc)
        m.editMacro = 1
        call adrEdit 'caps off'
        call adrEdit '(x) = member'
        m.auftrag.member = x
        m.edit.member = x
        call adrEdit '(x) = dataset'
        m.auftrag.dataset = x
        m.edit.dataset = x
        end
    if oArgs = '' | pos('?', oArgs) > 0 then
        exit help()
    call dbxIni
    m.exitValue = 0
    call work oArgs
    call sqlDisconnect
    exit m.exitValue

/*--- hier wählen wir die wirklich Arbeit aus -----------------------*/
work: procedure expose m.
parse arg wArgs
    parse upper var wArgs fun args
    args = strip(args)
    call mapReset e, 'K'
    call mapPut e, 'dol', '$'
    call setIf
    call stepGroup 1
    m.auftrag.force = 0
    do while abbrev(fun, '-')
        r = substr(fun, 3)
        if abbrev(fun, '-A') then do
             if verify(r, '.()', 'm') < 1 then do
                  m.auftrag.member = r
                  end
             else do
                 m.auftrag.dataset = dsnSetMbr(r)
                 m.auftrag.member =  dsnGetMbr(r)
                 end
             end
        else if abbrev(fun, '-F') then do
             m.auftrag.force = 1
             end
        else do
            call err 'bad opt' fun 'in' wArgs
            end
        parse var args fun args
        if fun = '' then
            return errHelp('fun missing in args:' wArgs)
        end

    if m.auftrag.dataset = 'A540769.DBX.AUFTRAG' then do
        m.libSkels = 'A540769.wk.skels(dbx'
        m.libPre   = 'A540769.DBX'
        end
    else if m.auftrag.dataset = 'DSN.DBQ.AUFTRAG' then do
        m.libSkels = 'ORG.U0009.B0106.KIDI63.SKELS(dbx'
        m.libPre   = 'DSN.DBQ'
        end
    else do
        m.libPre   = 'DSN.DBX'
        m.libSkels = 'ORG.U0009.B0106.KIDI63.SKELS(dbx'
        end
    if 1 then do   /* ??? testSkels */
        if userid() = 'A540769' then
            m.libSkels = 'A540769.wk.skels(dbx'
        say '??? test skels' m.libSkels '|||'
        end
    m.libSpezial = m.libPre'.spezial'
    call configureRZ sysvar('SYSNODE')
    m.sysRz = m.myRz
    call mapPut e, 'rexxLib', 'ORG.U0009.B0106.KIDI63.EXEC'
    call mapPut e, 'libSkels', translate(m.libSkels)
    call mapPut e, 'ovrDD', 'DISP=SHR,DSN='m.libPre'.MASK(OVERRIDE)'
    call mapPut e, 'libPre', m.libPre

    if fun = 'Q' then              /* macht process selber | */
        return queryScope(args)
    if m.editMacro & ^ m.editProc then do
        call adrEdit 'process'
        m.editProc = 1
        end
    if wordPos(fun, 'AA AC AW') > 0 then
        return nextAuftrag(word(args, 1), substr(fun, 2), word(args, 2))
    else if fun = 'COPYDUMMY' then
        return copyDummy(args)
    else if fun = 'CLONEWSL' then
        return cloneWsl(word(args, 1), word(args, 2), 1==word(args, 3))

    call memberOpt
    if wordPos(fun, 'N NT') > 0 then
        call neuerAuftrag (fun = 'NT'), args, m.auftrag.member
    else if fun = 'C' | fun = 'V' | fun = 'ST' then
        call compare fun, args
    else if wordPos(fun, 'I IA IE') > 0 then
        call import fun, args
    else if fun = 'N' then
        call neuerNachtrag args
    else if fun = 'RS' then
        call receiveSource args
    else if fun = 'RW' then
        call receiveWSL args
    else if fun = 'SW' then
        call sendWSL args
    else if wordPos(fun, 'VC VE VJ VS VT VW VY EC EE EJ ES ET EW EY') ,
            > 0 then
        call viewEdit fun, args
    else
        call errHelp 'bad fun' fun 'in args' args, , ' '
    if m.auftrag.orig = m.auftrag.0 | m.auftrag.0 = '' then do
        end
    else do
        if abbrev(m.auftrag.orig, 'rmQu') then do
                     /* alte | Zeilen loeschen */
            oldOr = word(m.auftrag.orig, 2)
            ox = 0
            do ix = 1 to m.auftrag.0
                if abbrev(word(m.auftrag.ix, 1), '|') & ix <= oldOr then
                    iterate
                ox = ox + 1
                m.auftrag.ox = m.auftrag.ix
                end
            m.auftrag.0 = ox
            m.auftrag.orig = 'rep'
            end
        if m.editMacro & m.auftrag.dataset = m.edit.dataset ,
                            & m.auftrag.member  = m.edit.member then do
            if m.auftrag.orig = 'rep' then do
                call adrEdit 'delete .zf .zl'
                m.auftrag.orig = 0
                end
            do lx = m.auftrag.orig+1 to m.auftrag.0
                li = left(m.auftrag.lx, 72)
                call adrEdit "line_after .zl = (li)"
                end
            call adrEdit 'save', 4
            end
        else do
            call writeDsn dsnSetMbr(m.auftrag.dataset,
                                  ,m.auftrag.member), m.auftrag.,,1
            end
        end
    return
endProcedure work

/*--- ini the CS config ----------------------------------------------*/
dbxIni: procedure expose m.
    m.timeout = 600
    m.uId = strip(userid())
    if m.uId = 'A234579' then
        m.uNa = 'Marc'
    else if m.uId = 'A390880' then
        m.uNa = 'Martin'
    else if m.uId = 'A540769' then
        m.uNa = 'Walter'
    else if m.uId = 'A666308' then
        m.uNa = 'Frank'
    else if m.uId = 'A754048' then
        m.uNa = 'Alessandro'
    else if m.uId = 'A790472' then
        m.uNa = 'Agnes'
    else if m.uId = 'A828386' then
        m.uNa = 'Reni'
    else
        m.uNa = m.uId
    m.scopeTypes = 'DB TS TB VW AL IX UDT UDF TG SP SQ SY'
    m.scopeType1 = 'D  S  T  V  A  X  E   F   J  O  Q  Y'
    m.nachtragChars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
           /* PromotionPaths */
    m.iProm.1 = 'ET IT PQ PA PR'
    m.iProm.2 = 'RZ1/DBAF,RZ8/DC0G RZ1/DBTF,RZ8/DD0G,RZZ/DE0G' ,
                        'RQ2/DBOF,RR2/DBOF RR2/DBOF RZ2/DBOF'
    m.iProm.3 = 'RZ1/DBBA,RZ8/DCVG RZ1/DVTB,RZ8/DDVG,RZZ/DEVG' ,
                        'RQ2/DVBP,RR2/DVBP RR2/DVBP RZ2/DVBP'
    m.iProm.0 = 3
    return
endProcedure dbxIni

/*--- expand the import target list entered by the user
          to a list or rz/subsys, with mySub first and the rest sorted*/
iListExpand: procedure expose m.
parse upper arg srcList
    tl = iPromExpand(translate(space(srcList, 0), '/ ', '.,'))
    local = ''
    remote = ''
    do tx=1 to words(tl)
       t1 = word(tl, tx)
       if abbrev(t1, m.myRz'/') then
           local = wordInsAsc(local, t1)
       else
           remote = wordInsAsc(remote, t1)
       end
    return local remote
endProcedure iListExpand

/*--- expand a target using iProm infos to a list of rz/subsys -------*/
iPromExpand: procedure expose m.
parse arg inp
    if words(inp) <> 1 then do   /* several words, expand each */
        out = ''
        do wx=1 to words(inp)
           out = out iPromExpand(word(inp, wx))
           end
        return out
        end
    if pos('/', inp) > 0 then   /* already expanded */
        return inp
    if inp == '?*?' then do /* find current promotionPath */
        tg = m.scopeTrg.rz'/'m.scopeTrg.subSys
        do tx=2 to m.iProm.0
            if pos(tg, m.iProm.tx) > 0 then
                return m.iprom.tx
            end
        call err 'target' tg 'not in any PromotionPath'
        end
    px = wordPos(inp, m.iProm.1) /* one promotion environment */
    if px > 0 then
        return translate(word(iPromExpand('?*?'), px), ' ', ',')
    if length(inp) = 4 then     /* prepend rz to subsys */
        return m.myRz'/'inp
          /* all subsys that match something */
    alOr = iPromExpand('?*?')
    all = translate(alOr, ' ', ',')
    out = ''
    do ax = 1 to words(all)
        if pos(inp, word(all, ax)) > 0 then
            if wordPos(word(all, ax), out) < 1 then
                out = out word(all, ax)
        end
    if out \== '' then
        return out
    call err 'inp' inp ' not found in promotionPath' alOr
endProcedure iPromExpand

wordInsAsc: procedure expose m.
parse arg lst, wrds
     do wx=1
        w = word(wrds, wx)
        if w == '' then
            return space(lst, 1)
        do rx=1 to words(lst) while w > word(lst, rx)
            end
        r1 = word(lst, rx)
        if r1 == '' then
            lst = lst w
        else if w < r1 then
            lst = subWord(lst, 1, rx-1) w subWord(lst, rx)
        end
endProcedure wordInsAsc

charInsAsc: procedure expose m.
parse arg lst, chrs
     do wx=1 to length(chrs)
        c = substr(chrs, wx, 1)
        do rx=1 to length(lst) while c > substr(lst, rx, 1)
            end
        r1 = substr(lst, rx, 1)
        if rx > length(lst) then
            lst = lst || c
        else if c < r1 then
            lst = left(lst, rx-1) || c || substr(lst, rx)
        end
    return lst
endProcedure wordInsAsc

/*--- batch funktionen -----------------------------------------------*/
batchOld: procedure expose m.
parse upper arg args
    m.auftrag.dataset = 'DSN.DBX.AUFTRAG'
    wx = 1
    do forever
        w1 = word(args, wx)
        if w1 = '' then
            return 0
        if w1 = 'ADATASET' then do
            m.auftrag.dataset = word(args, wx+1)
            wx = wx+2
            end
        else if w1 = 'DO' then do
            fx = wordPos('FOR', args, wx)
            if fx < 1 then
                 call err 'DO ohne FOR in' args
            cmd = subWord(args, wx+1, fx-wx-1)
            do wx=fx+1
                ww = word(args, wx)
                if ww = '' then
                    leave
                m.auftrag.member = ww
                say 'batch do' cmd 'for' ww '...'
                call work cmd
                end
            end
        else do
            if wordPos(translate(w1), 'A AC AW') > 0 then do
                drop m.auftrag.member
                cmd = subword(args, wx)
                end
            else do
                m.auftrag.member = w1
                cmd = subword(args, wx+1)
                end
            say 'batch do' cmd 'for mbr' m.auftrag.member
            call work cmd
            return 0
            end
        end
    return 0
endProcedure batchOld

/*--- create the necessary dbx libries in the specified rz -----------*/
copyDummy: procedure expose m.
parse arg rz
    call copyDummy1 rz, 'DSN.DBX.AUFTRAG(DUMMY)'
    call copyDummy1 rz, 'DSN.DBX.AUTO(DUMMY)'
    call copyDummy1 rz, 'DSN.DBX.CDL(DUMMY)'
 /* call copyDummy1 rz, 'DSN.DBX.DBAUTO(DUMMY)'
    call copyDummy1 rz, 'DSN.DBX.DBSRCCAT(DUMMY)'
    call copyDummy1 rz, 'DSN.DBX.DBSRCDDL(DUMMY)'
    call copyDummy1 rz, 'DSN.DBX.DBTRGCAT(DUMMY)'
    call copyDummy1 rz, 'DSN.DBX.DBTRGDDL(DUMMY)'
 */
    call copyDummy1 rz, 'DSN.DBX.JCL(DUMMY)'
    call copyDummy1 rz, 'DSN.DBX.MASK'
 /* call copyDummy1 rz, 'DSN.DBX.OVRCAT(DUMMY)' */
    call copyDummy1 rz, 'DSN.DBX.SENDCF(DUMMY)'
    call copyDummy1 rz, 'DSN.DBX.SPEZIAL(DUMMY)'
    call copyDummy1 rz, 'DSN.DBX.SRCCAT(DUMMY)'
    call copyDummy1 rz, 'DSN.DBX.SRCDDL(DUMMY)'
    call copyDummy1 rz, 'DSN.DBX.TRGCAT(DUMMY)'
    call copyDummy1 rz, 'DSN.DBX.TRGDDL(DUMMY)'
    return 0
 endProcedure copyDummy

copyDummy1: procedure expose m.
parse arg sys, dsn
    if sysDsn("'"dsn"'") <> 'OK' then
        call writeDsn dsn, x, 0, 1
    call csmCopy dsn, sys'/'dsn
    return

/*--- die Konfiguration pro db2 Subsys -------------------------------*/
configureSubsys: procedure expose m.
    parse arg rz, subsys
    call mapPut e, 'subsys', subsys
    if rz = 'RZ8' then
        call mapPut e, 'location', 'CHROI000'subsys
    else if rz = 'RZZ' then
        call mapPut e, 'location', 'CHROI00Z'subsys
    else
        call mapPut e, 'location', 'CHSKA000'subsys
    return
endProcedure configureSubsys

/*--- die Konfiguration pro RZ ---------------------------------------*/
configureRZ: procedure expose m.
    parse arg rz, rel px, toolV
    if rz = 'RZ0T' then
        rz = 'RZ0'
    if rz = '' then
        rz = m.myRz
    else
        m.myRz = rz
    m.jobCard = 'jobCa'
    call mapPut e, 'jobCla', 'LOG0'
    rx = pos(rz'/', m.iProm.2)
    if rx < 1 then
        m.mySub = '?noSubsys?'
    else
        m.mySub = substr(m.iProm.2, rx+4, 4)
    call mapPut e, 'rz', rz
    zz = overlay('Z', rz, 2)
    call mapPut e, 'zz', zz
    if rel == '' then
        rel = 1015
    if px == '' then
        px = if(rz\=='RZ0', 'P0', 'PA')
    call mapPut e, 'db2rel', rel
    call mapPut e, 'db2relAl', px
    call mapPut e, 'dsnload', if(rz=='RZ0', 'DSN', 'DB2@') ,
           || '.'zz'.'px'.DSNLOAD'
    call mapPut e, 'capref', 'DSN.CADB2.'zz'.P0'
    call mapPut e, 'caload', 'DSN.CADB2.'zz'.P0.CDBALOAD'
    call mapPut e, 'cacr', DBX
    if toolV \== '' then do
        say 'v72 nicht mehr untertstuetzt, v10 wird benutzt'
        toolV = mapGet(e, 'toolVers', 10)
        toolV = ''
        end
    call mapPut e, 'toolVers', toolV
 /* if toolV == 10 then do  */
        call mapPut e, 'toolPreP', 'DSN.TOOLS.'zz'.P0'
        call mapPut e, 'toolPreC', 'DSN.TOOLS.'zz'.C0'
 /*     end
    else if toolV == 72 then do
        call mapPut e, 'toolPreP', 'DSN.TOOLS.'zz'.P8'
        call mapPut e, 'toolPreC', 'DSN.TOOLS.'zz'.C8'
        end
    else
        call err 'bad toolVersion' toolV
 */ if rz = 'RZ1' then do
        if m.libPre = 'DSN.DBQ' then do
            m.mySub  = 'DQ0G'
            m.jobCard = 'jobCQ'
            call mapPut e, 'toolPreP', 'DSN.ADB72.P0'
            call mapPut e, 'toolPreC', 'DSN.ADB72.C0'
            end
        end
    else if rz = 'RR2' then do
        call mapPut e, 'jobCla', 'BS0'
        end
    return
endProcedure configureRZ

/*--- Member Namen prüfen und Auftrag lesen---------------------------*/
memberOpt: procedure expose m.
    if m.auftrag.dataset <> m.libPre'.AUFTRAG' then
        call err 'dbx sollte' m.libPre'.AUFTRAG editieren, nicht' ,
                    m.auftrag.dataset
    m8 = substr(m.auftrag.member, 8, 1)
    if pos(m8, 'CW')  < 1 then
        call err 'Member muss 8 stellig sein und mit C oder W enden',
                       'nicht' m.auftrag.member
    m.optOvr = 0 /* (m8 == 'W') & (m.libPre ^== 'DSN.DBQ') */
    m.optAuto = 1
    call readAuftrag '', m.auftrag.dataset, m.auftrag.member
    return
endProcedure memberOpt

/*--- Auftrag einlesen -----------------------------------------------*/
readAuftrag: procedure expose m.
parse arg sys, pds, mbr
    editingAuftrag = 0
    if sys = '' & m.editMacro then do
        call adrEdit '(em) = member'
        call adrEdit '(ed) = dataset'
        editingAuftrag = ed = pds & em = mbr
        end
    if editingAuftrag then do
        if adrEdit('(zl) = lineNum .zl', 4) = 4 then
            zl = 0
        m.auftrag.0 = zl
        do lx=1 to zl
            call adrEdit "(li) = line" lx
            m.auftrag.lx = li
            end
        end
    else do
        dsn = dsnSetMbr(m.auftrag.dataset, m.auftrag.member)
        if sys = '' then
          if sysDsn("'"dsn"'") <> 'OK' then
            call err 'auftrag' dsn 'existiert nicht:' sysDsn("'"dsn"'")
        call readDsn sys'/'dsn, m.auftrag.
        end
    m.auftrag.orig = m.auftrag.0
    return
endProcedure readAuftrag

/*--- naechste AuftragsNummer suchen ---------------------------------*/
nextAuftrag: procedure expose m.
parse arg pre, make, rz opt
    if abbrev(rz, '-') then do
        opt = rz
        rz = ''
        end
    opt = translate(opt)
    if rz = '' | rz = '*' then
        rz = m.myRz
    if m.myRz <> 'RZ1' then
        call err 'Auftrag für RZ' rz 'muss aus RZ1 erstellt werden'
    auft = m.libPre'.AUFTRAG'
    call mAdd mCut(na, 0), auft, 'DSN.DBA.CLON.WSL'
    max = pre
    do nx=1 to m.na.0
        lmm = lmmBegin(dsnSetMbr(m.na.nx, pre'*'))
        mb = lmmNext(lmm)
        fi = mb
        la = ''
        do cnt=2 by 1 while mb <> ''
            la = mb
            mb = lmmNext(lmm)
            end
        call lmmEnd lmm
        say left(fi, 8) '-' left(la, 8)right(cnt-2, 5) ,
            'member in' dsnSetMbr(m.na.nx, pre'*')
        if la >> max then
            max = la
        end
    nn = left(max, 7, '0')
    do cx=7 by-1 to length(pre)+1,
            while pos(substr(nn, cx, 1), '0123456789') > 0
        end
    if cx >= 7 then
        nn = ''
    else do
        pp = 1 + substr(nn, cx+1)
        if length(pp) > 7-cx then
            nn = ''
        else
            nn = left(nn, cx) || right(pp, 7-cx, 0)
        end
    if length(nn) <> 7 then do
        say 'max Auftrag' max 'kein naechster bestimmbar'
        end
    else if pos(make, 'CW') < 1 then do
        say 'max Auftrag' max 'naechster' nn'?'
        end
    else do
        nn = nn || make
        say 'max Auftrag' max 'naechster' nn
        m.auftrag.0 = 0

        call neuerAuftrag 0, rz, nn
        dsnNN = dsnSetMbr(auft, nn)
        call writeDsn dsnNN, m.auftrag.
        if opt = '-R' then
            nop
        else if rz = 'RZ1' then
            call adrIsp "edit dataset('"dsnNN"')", 4
        else
            call writeDsn rz'/'dsnNN, m.auftrag.
        end
    m.auftrag.0 = '' /* do not write back the new auftrag | */
    if opt = '-R' then
        m.exitValue = nn
    return 0
endProcedure nextAuftrag

/*--- einen neuen Auftrag initialisieren -----------------------------*/
neuerAuftrag: procedure expose m.
parse arg isTst, rz, auftName
    if  rz = '' then
        rz = m.myRz
    else
        call configureRz rz
    if isTst then do
        ow = m.uid
        maPr = 'T' || left(translate(m.uNa), 3, 'X')
        comMask = m.libPre'.MASK('maPr'PROT)'
        impMask = m.libPre'.MASK('maPr'$subsys)'
        end
    else do
        ow = 'S100447'
        comMask = m.libPre'.MASK(PROT$trgNm)'
        impMask = m.libPre'.MASK($trgNm$impNm)'
        end
    comIgno = m.libPre'.MASK(IGNORE)'
    impIgno = ''
    if m.auftrag.0 <> 0 then
        call err 'fun n erstellt neuen Auftrag nur in leeres Member'
                             /* wahrscheinlichen Zügelschub bestimmen*/
    zglS = '20130208 20130510 20130809 20131108 2014???? 2015????'
    zi = date('s')
    zi = overlay(right(substr(zi, 5, 2)+1, 2, 0), zi, 5)
    do wx=1 while zi >> word(zglS, wx)
        end
    zglSchub = if(isTst, 'test', word(zglS, wx) '??:00')

    call mAdd auftrag                                      ,
        , addDateUs('auftrag ' auftName ow)                ,
        , '  Zuegelschub' zglSchub                         ,
        , '  Besteller   pid     name    tel'              ,
        , '  comMask    ' comMask                          ,
        , '  comIgno    ' comIgno                          ,
        , '  impMask    ' impMask                          ,
        , '  impIgno    ' impIgno                          ,
        , 'source RZ8.DX0G'                                ,
        , '  ts' left(auftName, 4)'A1P.A%'                 ,
        , 'target RZ8.'if(left(auftName, 2) == 'XB', 'DCVG', 'DC0G')
    return
endProcedure neuerAuftrag

neuerNachtrag: procedure expose m.
parse upper arg opt
    call analyseAuftrag
    call addNachtrag
    return
endProcedure neuerNachtrag

nextNachtrag: procedure expose m.
    parse arg nt
    nx = pos(nt, m.nachtragChars) + 1
    if nx > length(m.nachtragChars) then
        call err 'kein Nachtrag char mehr nach' nt
    return substr(m.nachtragChars, nx, 1)
    m.e.nachtrag = nt
    return nt
endProcedure nextNachtrag

/*--- compare: Funktionen c, v und st --------------------------------*/
compare: procedure expose m.
parse upper arg fun, sendToRz
    opts = ''
    do forever
        if abbrev(sendToRz, '=') then do
            sendToRz = strip(substr(sendToRz, 2))
            opts = opts'='
            end
        else if abbrev(sendToRz, '-') then do
            opts = opts || substr(word(sendToRz, 1), 2)
            sendToRz = subword(sendToRz, 2)
            end
        else
            leave
        end
    cmpLast = pos('=', opts) > 0
    if fun = 'C' then
        function = 'compare'
    else if fun = 'ST' then do
        if sendToRz = '' | sendToRz = '*' then
            call errHelp 'ST without sendToRz'
        call mapPut e, 'toRz', sendToRz
        function = 'sendTarget' sendToRz
        end
    else if fun = 'V' then
        function = 'version'
    else
        call err 'bad fun' fun
    call analyseAuftrag
    if (m.scopeSrc.rz = m.sysRz ,
       | (wordPos(m.scopeSrc.rz, 'RZ8 RZZ') > 0 & m.sysRZ = 'RZ1') ,
       ) & m.e.qCheck \== 0 then do
        if qualityCheck(getDb2Catalog('SRC')) then
            if pos('F', opts) < 1 & \ m.auftrag.force then
                return
            else
                say 'wegen Option -f Verarbeitung',
                      'trotz Qualitaetsfehlern'
        end
    nacLast = m.e.nachtrag
    if nacLast = '?' & cmpLast then
        call err 'c = oder v = ohne vorangaengiges c oder v'
    if nacLast = '?' | m.nacImp then
        m.e.nachtrag = nextNachtrag(nacLast)
    call mapPut e, 'mbrNac', left(m.e.auftrag, 7)m.e.nachtrag
    m.o.0 = 0
    call readDsn m.libSkels || m.jobCard')', m.i.
    call mapPut e, 'jobName', 'Y'left(m.e.auftrag, 7)
    call mapPut e, 'fun', function opts
    call namingConv m.scopeTrg.rz, m.scopeTrg.subsys, 'trgNm'
    call namingConv m.scopeSrc.rz, m.scopeSrc.subsys, 'srcNm'
    call mapExpAll e, o, i

    call mapPut e, 'mask', shrDummy(mapExp(e, m.e.comMask), 1)
    call mapPut e, 'ignore', shrDummy(mapExp(e, m.e.comIgno))
    call bmcVarsProf 0

    if 0 then   /* db ddl extrahieren ja / nein ???? */
        call extractSrcTrg o, 'DB', cmpLast left(m.e.auftrag, 7)nacLast
    if m.e.tool == ibm then
        call extractSrcTrg o, '', cmpLast left(m.e.auftrag, 7)nacLast
    else if m.e.tool == bmc then
        call bmcSrcTrg cmpLast m.e.auftrag
    else if m.e.tool == ca  then do
        call configureSubsys m.scopeSrc.rz, m.scopeSrc.subsys
        end
    if fun = 'C' then do
        if m.optOvr then do
            call mapPut e, 'ovr', 'OVR'
            call readDsn m.libSkels'Ovr)', m.ovr.
            call mapExpAll e, o, ovr
            call mapPut e, 'src', 'OVR'
            end
        if m.e.keepTgt == 0 then
            call mapPut e, 'keepTgt', ''
        else
            call mapPut e, 'keepTgt', 'KEEPTGT,'
        call readDsn m.libSkels ,
                || if(m.e.tool=='IBM', 'comp', left(m.e.tool, 1)'Com'),
                || ')', m.cmp.
        if m.e.tool == ca  then
            call caDDL o, cmp, scopeSrc, dsnGetMbr(mapGet(e, 'mask'))
        else
            call mapExpAll e, o, cmp
        end
    if fun = 'ST' then do
        call readDsn m.libSkels'ST)', m.st.
        call mapExpAll e, o, st
        end
    call writeSub o
    call mAdd auftrag, addDateUs(function ,
                    left('===', 3*cmpLast)m.e.nachtrag,
                    m.scopeTrg.rz'.'m.scopeTrg.subSys ,
                    mapExp(e, "'${libPre}." ,
                ||  if(m.e.tool=="IBM","srcCat",m.e.tool"Cdl") ,
                ||  "($mbrNac)'"))
    return
endProcedure compare

/*--- find the naming convention for a rz and subsystem --------------*/
namingConv: procedure expose m.
parse arg rz, subsys, var
    if rz = '.' then do
        if pos('.', subSys) > 0 then
            call err 'namingConv old target' subsys
        if pos('/', subSys) > 0 then
            parse var subsys rz '/' subsys
        else
            rz = m.sysRz
        end
    if strip(rz) = 'RZ1' then
        t = strip(subsys)
    else
        t = 'DBOF'
    if var ^== '' then
        call mapPut e, var, t
    return t
endProcedure namingConv

/*--- write jcl and submit it ----------------------------------------*/
writeSub: procedure expose m.
parse arg o, rz, noWri
    userSubmits = 0 /* edit jcl and user submits it */
    if noWri <> 1 then do
        jcl = m.libPre'.JCL('m.e.auftrag')'
        call mStrip o, 't'
        do ox=1 to m.o.0
            if length(m.o.ox) > 70 then
                call debug 'o.'ox 'len' length(m.o.ox)':' m.o.ox
            end
        call writeDsn jcl, m.o., ,1
        if userSubmits then /* edit dataset and user may submit it */
            call adrIsp "edit dataset('"jcl"')", 4
        end
    if (noWri <> 1) & (rz = '' | rz = m.sysRz) then do
         if ^ userSubmits then
            call adrTso "sub '"jcl"'"
         end
    else do  /* submit jcl in another rz */
        sysl = csmSysDsn(rz'/')
        if sysl = '*/' then
            sysl = ''
        iral = dsnAlloc(sysl 'SYSOUT(T) dd(ir) .WRITER(INTRDR)')
        call writeDDBegin ir
        call writeDD ir, m.o.
        call writeDDend 'IR'
        interpret subword(irAl, 2)
        end
    return
endProcedure writeSub


/*--- view or edit a member -----------------------------------------*/
viewEdit: procedure expose m.
parse upper arg fun 2 wh, nac
    call analyseAuftrag
    if wh = 'Y' then do
        if length(word(nac, 1)) == 4 then
            d = word(nac, 1)
        else
            d = m.imp.last
        n1 = right(m.imp.d.nachtrag, 1)
        if nac <> '' then
            if length(word(nac, words(nac))) == 1 then
                n1 = word(nac, words(nac))
        d = m.libPre || d'.STRY('left(m.e.auftrag,7)n1')'
        end
    else do
        if wh = 'C' then
            d = copies(m.e.tool, m.e.tool \== 'IBM')'CDL'
        else if wh = 'E' then
            d = 'EXEJCL'
        else if wh = 'J' then
            d = 'JCL'
        else if wh = 'S' then
            d = 'SRCDDL'
        else if wh = 'T' then
            d = 'TRGDDL'
        else if wh = 'W' then
            d = 'BMCWSL'
        if nac == '' then
            nac = m.e.nachtrag
        if wh == 'J' then
            d = m.libPre'.'d'('m.e.auftrag')'
        else
            d = m.libPre'.'d'('left(m.e.auftrag,7)nac')'
        end
    if fun == 'E' then
        call adrIsp "edit dataset('"d"')", 4
    else
        call adrIsp "view dataset('"d"')", 4
    return
endProcedure viewEdit
/*--- return jcl either dd dummy or dd disp=shr,dsn=... --------------*/
shrDummy: procedure expose m.
parse arg dsn, keepEmpty
    if dsn \= '' then
        return 'DISP=SHR,DSN='translate(dsn)
    else if keepEmpty == 1 then
        return ''
    else
        return 'DUMMY'
endProcedure shrDummy

/*--- funktion i -----------------------------------------------------*/
import: procedure expose m.
parse upper arg fun, rzSubSysList opt .
    call analyseAuftrag
    if m.e.nachtrag = '?' then
        call err 'vor i=import braucht es compare'
    if opt <> '' then
        nop
    else if words(m.targets) > 1 then
            call err 'i=import mit mehreren targets muss Nachtraege',
               'explizit angeben, z.B. dbx i' rzSubSysList m.e.nachtrag
    else if m.cmpLast then
            call err 'i=import mit c = oder v = muss Nachtraege',
               'explizit angeben, z.B. dbx i' rzSubSysList m.e.nachtrag
    if ^ m.nacImp then do
        cdl = cdlDsnCheck(m.e.nachtrag)
        if m.e.dbaCheck == 0 then nop
        else if m.e.tool \== 'IBM' then
            say 'dbaCheck for' m.e.tool 'not implemented'
        else do
            if m.editMacro then
                dbaParm = 'EX0'
            else
                dbaParm = 'END'
            call adrIsp "edit dataset('"cdl"') macro(dbacheck)",
                         "parm(dbaParm)", 4
            end
        end
    call mapPut e, 'expOpt', if(m.e.keepTgt, 'A', 'X')
    call readDsn m.libSkels || m.jobCard')', m.jc.
    call readDsn m.libSkels || left(m.e.tool, m.e.tool\=='IBM')'Imp)',
        , m.ic.
    list = iListExpand(rzSubSysList, 0)
    if list = '' then
        call err 'no targets in list "'rzSubSysList'"'
    impCnt = 0
    call configureRz m.sysRz
    if fun = 'IA' then
        fu2 = 'Ana'
    else if fun = 'IE' then
        fu2 = 'AnaExe'
    else
        fu2 = ''
    call mapPut e, 'fun', strip('import'fu2 left(rzSubSysList, 30))
    call mapPut e, 'jobName', 'Y'left(m.e.auftrag, 7)
    m.e.impMasks = ''
    fu2 = fun fu2
    m.jOut.0 = 0
    call mapExpAll e, jOut, jc  /* Jobcard expandieren */
    call stepGroup 1
    j0 = m.jOut.0
    rz = '?'
    do lx = 1
        r1 = word(list, lx)
        parse var r1 r '/' subsys
        if r <> rz | subsys = '' then do
            if impCnt <> 0 then do
                if rz <> m.sysRz then do
                    if symbol('m.sCdl.0') \== 'VAR' then do
                        call readDsn m.libSkels'sCdl)', m.sCdl.
                        call readDsn m.libSkels'subRz)', m.subRz.
                        end
                    if m.impMbrs == '' then
                        call err 'int no impMbrs'
                    call mapPut e, 'mbrNac',
                            , left(m.e.auftrag, 7)left(m.impMbrs, 1)
                    call mapPut e, 'toRz', m.myRz
                    call mapExpAll e, jOut, sCdl
                    jy = m.jOut.0
                    jx = jy-1
                    m.jOut.0 = jx
                    jla = m.jOut.jy
                    cx = pos(')-', m.jOut.jx)
                    if cx < 1 | substr(m.jout.jx, cx+2) \= '' then
                        call err 'bad sCdl line' jx':'m.jOut.jx
                    m.jOut.jx = left(m.jOut.jx,cx-1) '-'
                    do mx=2 to length(m.impMbrs)
                        call mAdd jOut, left('', cx-10)',' ,
                                || left(m.e.auftrag,7) ,
                                || substr(m.impMbrs, mx,1) '-'
                        end
                    call mAdd jOut, left('', cx-10)') -'
                    call mAdd jOut, jLa
                    call mapExpAll e, jOut, subRz
                    jy = m.jOut.0
                    jla = m.jOut.jy
                    m.jOut.0 = jy-1
                    call mAddSt jOut, jAft
                    call mAdd jOut, jLa
                    end
                end
            if subsys = '' then do
                if m.jout.0 > j0 then
                    call writeSub jOut
                return
                end
            rz = r
            if rz = m.sysRz then do
                job = jOut
                m.jAft.0 = 'noUse'
                end
            else do
                job = jAft
                m.jAft.0 = 0
                end
            m.impMbrs = ''
            call configureRz rz
            impCnt = 0
            call mapPut e, 'fun', 'import'fu2 rz
            call mapPut e, 'fu2', fun
            call configureSubsys rz
            end
        if length(subsys) <> 4 then
            call err 'ungueltiges db2SubSys' subsys 'im import' rz
        call configureSubsys rz, subsys
        if rz = m.sysRz then
            impCnt = impCnt + importAdd(job, subsys,      opt, ic, fu2)
        else if m.sysRz == 'RZ1' then
            impCnt = impCnt + importAdd(job, rz'/'subsys, opt, ic, fu2)
        else
            call err 'cannot import into' rz 'from' m.sysRz
        end
endProcedure import

/*--- add a single import to jcl in o --------------------------------*/
importAdd: procedure expose m.
parse upper arg o, rzSubSys, opt, ic, fun fu2
    /* Uebergang altes auf neue Delta Merge Verfahren ++++++++ begin */
    deltaNew = 1 /* abbrev(rzSubSys,'RZ1.'),
            | (pos('.',rzSubSys) < 1 & m.sysRz = 'RZ1') */
    if deltaNew then do   /* neues delta merge verfahren */
        inDdn = 'DCHG'
        call mapPut e, 'cType', "''''T''''"
        end
    else do               /* altes delta merge verfahren */
        inDdn = 'SRCDDN2'
        call mapPut e, 'cType', "''''C''''"
        end
    call mapPut e, 'inDdn', inDdn
    /* Uebergang altes auf neue Delta Merge Verfahren ++++++++ end   */
    if opt ^= '' & opt ^= '=' then do
        nachAll = opt
        end
    else if symbol('m.imp.rzSubSys.nachtrag') ^== 'VAR' then do
        nachAll = m.compares
        end
    else do
        if opt = '=' then
            la = left(m.imp.rzSubSys.nachtrag, 1)
        else
            la = right(m.imp.rzSubSys.nachtrag, 1)
        cx = pos(la, m.compares)
        if cx < 1 then
            call err 'nachtrag' la 'von' rzSubSys m.rzSubSys.change ,
                     'nicht in Compare Liste' m.compares
        nachAll = substr(m.compares, cx + (opt ^= '='))
        end
    if nachAll = ' ' then do
        say  'alle Nachtraege schon importiert fuer' rzSubSys
        return 0
        end
    call mapPut e, 'mbrChg', left(m.e.auftrag, 7)right(nachAll, 1)
    if length(nachAll) = 1 then
        nachVB = nachAll
    else
        nachVB = left(nachAll, 1)'-'right(nachAll, 1)
    trgNm = ''
    do nx=1 to m.nachtrag.0
        if pos(m.nachtrag.nx, nachAll) < 1 then
            iterate
        act = namingConv('.', m.nachtrag.nx.trg)
        if trgNm = '' then
            trgNm = act
        else if trgNm <> act then
            call err 'targetNaming' trgNm 'wechselt zu' act ,
                'fuer nachtrag' m.nachtrag.nx 'auf' m.nachtrag.nx.trg
        end
    m.imp.seq = m.imp.seq + 1
    if length(m.imp.seq) > 3 then
        call err 'import Sequenz Ueberlauf' m.imp.seq
    m.imp.seq = right(m.imp.seq, 3, 0)
    chaPre = m.e.auftrag'.'nachVB'.'m.imp.seq
    zs = translate(strip(right(m.e.zuegelSchub, 6)))
    if m.e.tool = 'IBM' then
        call mapPut e, 'change',chaPre'.'zs/*'.V'mapGet(e,'toolVers')*/
    else
        call mapPut e, 'change',m.e.auftrag || m.imp.seq'_'zs
    call mapPut e, 'changeRem', 'zs' m.e.zuegelSchub ,
                                'auf' m.e.auftrag nachAll 'import DBX'
    call mapPut e, 'deltaVers', chaPre'.DLT'
    call namingConv '.', rzSubSys, 'impNm'
    call namingConv m.scopeSrc.rz, m.scopeSrc.subsys, 'srcNm'
    call mapPut e, 'trgNm', trgNm
    call mapPut e, 'ignore', shrDummy(mapExp(e, m.e.impIgno))
    cdlPds = m.libPre'.CDL'
    call mapPut e, 'cdlPds', cdlPds
    call bmcVarsProf 1
    if m.impMbrs = '' & m.myRz \== m.sysRz then
        call mapExpAll e, o, jc  /* Jobcard expandieren */
    m.impMbrs = charInsAsc(m.impMbrs, nachAll)
    if m.e.tool = 'CA' then do
        call mapPut e, 'mbrNac', left(m.e.auftrag, 7)right(nachAll, 1)
        call mapPut e, 'stry', mapGet(e, 'mbrNac')
        call mapPut e, 'impMaskMbr', dsnGetMbr(mapExp(e, m.e.impMask))
        call mapPut e, 'comIgnoMbr', dsnGetMbr(mapExp(e, m.e.comIgno))
        call mapPut e, 'ddlin', m.libPre'.CACDL('mapGet(e, 'mbrNac')')'
        call mapPut e, 'bpid', m.libPre'.CASTRAT-'mapGet(e, 'mbrNac') ,
                                            || '-'m.imp.seq
        end
    impM = translate(mapExp(e, m.e.impMask))
    m.e.impMbr = dsnGetMbr(impM)
    call mapPut e, 'mask',   shrDummy(impM, 1)
    if m.e.impMbr = '' | m.e.tool \== 'CA' then do
        end
    else do
        mapCdl = m.libPre'MAP.'m.e.impMbr'('mapGet(e, 'mbrNac')')'
        call mapPut e, 'ddlout', mapCdl
        if wordPos(m.e.impMbr, m.e.impMasks) < 1 then do
            call importMapping o, m.e.impMbr, ic, nachAll, deltaNew,
                   , mapCdl
            call stepGroup
            m.e.impMasks = m.e.impMasks m.e.impMbr
            end
        call mapPut e, 'ddlin', mapCdl
        call mapPut e, 'impMaskMbr', ''
        end
    call importExpand o, ic, nachAll, deltaNew
    if wordPos(fun, 'IA IE') > 0 then do /* analyse step */
        if m.e.tool = ibm then
            call err 'fun' fun 'not implemented for' m.e.tool
        call addIf o
        call readDsn m.libSkels || left(m.e.tool, 1)'Ana)', m.ia.
        call mapExpAll e, o, ia
        call caGlbChg o, dsnGetMbr(mapGet(e, 'mask'))
        call addIf o, 'end'
        call setIf 'ANA', 0 4
        end
    if wordPos(fun, 'IE') > 0 then do /* execute step */
        call readDsn m.libSkels || left(m.e.tool, 1)'Exe)', m.ie.
        call addIf o
        call mapExpAll e, o, ie
        ej = mapExp(e, "'${libPre}.EXEJCL($mbrChg)'")
        call addIf o, 'end'
        call setIf 'RUN'
        j.1 = 'exeJcl for' m.e.auftrag 'noch nicht generiert'
        call writeDsn ej, j., 1, 1
        end
   if m.e.tool <> ibm then
       ifl2 = overlay('  ', m.ifLine, pos('IF', m.ifLine))
       ifl2 = overlay(') THEN', ifl2, pos('THEN', ifl2))
       call mAdd o, '//        IF ABEND OR NOT (', ifl2,
                  , '//PERROR   EXEC PGM=IDCAMS ',
                  , '//SYSPRINT   DD SYSOUT=*',
                  , '//SYSIN      DD *',
                  , '   SET MAXCC = 12',
                  , '//        ENDIF'
    call mAdd auftrag,
         ,  addDateUs("import" rzSubsys nachAll mapGet(e, 'change') fu2)
    call stepGroup
    return 1
endProcedure importAdd

stepGroup: procedure expose m.
parse arg f
     if f == 1 then
         no = 1
     else
         no = m.e.stepNo + 1
     m.e.stepNo = right(no, 3, 0)
     m.e.stepGr = 'S'm.e.stepNo
     call mapPut e, 'stp', m.e.stepGr
     return
endProcedure stepGroup

setIf: procedure expose m.
parse arg stp, codes
    if stp == '' then
        li = ''
    else do
        if length(stp) < 5 then
            stp = m.e.stepGr || stp
        li = '//        IF' stp'.RUN AND'
        pr = '('
        if codes == '' then
            codes = 0
        do cx=1 to words(codes)
            li = li pr stp'.RC='word(codes,cx)
            pr = 'OR'
            end
        li = li ') THEN'
        end
    if length(li) > 72 then
        call err 'if too long' li

    m.ifLine = li
    if li == '' then
         call mapPut e, 'endIf', '//*       no endIf'
    else
         call mapPut e, 'endIf', '//        ENDIF'
    return
endProcedure setIf

addIf: procedure expose m.
parse arg o, opt
    if m.ifLine == '' then
        return
    else if opt == 'end' then
        call mAdd o, '//        ENDIF'
    else
        call mAdd o, m.ifLine
    return
endProcedure addIf

importExpand: procedure expose m.
parse arg o, ic, nachAll, deltaNew
    call addIf o
    if m.e.tool = 'CA' then
        call mapPut e, 'impMaskMbr', 'DBXEQ'
    sto = mapExpAllAt(e, o, ic, 1, 1)
    do while sto ^= ''
        parse var sto lx cx
        w = word(substr(m.ic.lx, cx), 1)
        if w == '$@maskDD' then do
            if mapGet(e, 'mask') \= '' then
                call mAdd o, '//MSKDDN1     DD' mapGet(e, 'mask')
            end
        else if w == '$@maskII' then do
            if mapGet(e, 'mask') \= '' then
                call mAdd o, "  MSKDDN='MSKDDN1',",
                           , " MSKOWN='DUMMY',",
                           , "  MSKNAME='DUMMY',"
            end
        else if w == '$@bmcCdl' then do
            le = left('//IMPORTIN', 13)
            do ix=1 to length(nachAll)
                call mAdd o, le || 'DD DISP=SHR,DSN=',
                                || cdlDsnCheck(substr(nachAll, ix, 1))
                le = left('//', 13)
                end
            end
        else if w ^== '$@cdl' then do
            call err 'unbekannte Anweisung' w 'in Zeile' cx m.ic.cx
            end
        else if deltaNew then do
            do ix=1 to length(nachAll)
                call mAdd o, left('//'inDdn || right(ix,3,0), 13) ,
                                || 'DD DISP=SHR,DSN=',
                                || cdlDsnCheck(substr(nachAll, ix, 1))
                end
            end
        else do
            le = left('//'inDdn, 13)
            do ix=1 to length(nachAll)
                call mAdd o, le || 'DD DISP=SHR,DSN=',
                                || cdlDsnCheck(substr(nachAll, ix, 1))
                le = left('//', 13)
                end
            end
        sto = mapExpAllAt(e, o, ic, lx, cx + length(w))
        end
    if m.e.tool = 'CA' & mapGet(e, 'impMaskMbr') == '' then
        m.o.0 = m.o.0 -2 /* die beiden maskZeilen entfernen */
    call addIf o, 'end'
    call setIf 'AUTO'
    return
endProcedure importExpand

importMapping: procedure expose m.
parse arg o, msk, ic, nachAll, deltaNew, mapCdl
    say '???adding impMbr' msk
    call addIf o
    mStry = left(m.e.auftrag, 7)'#'
    call mapPut e, 'mStry', mStry
    interpret subword(dsnAlloc(mapCdl '::F'), 2)
    call mAdd o,'//****** importMasking' mask 'begin ???????'
    call readDsn m.libSkels'CMAP)', m.im.
    call mapExpAll e, o, im
    call mapPut e, 'ddlout', mapCdl
    call caGlbChg o, mapGet(e, 'impMaskMbr')
    call mAdd o,'//****** importMasking' mask 'end   ???????'
    call setIf 'MANA', 0
    call addIf o, 'end'
    return
endProcedure importMapping

/*--- DSN für CDL des Nachtrags zurückgeben und auf Existenz prüfen---*/
cdlDsnCheck: procedure expose m.
parse arg nt
    cdl = m.libPre'.'copies(m.e.tool, m.e.tool\=='IBM') ,
        || 'CDL('left(m.e.auftrag, 7) || nt')'
    rr = sysDsn("'"cdl"'")
    if rr <> 'OK' then
        call err 'cdl fuer' nt'. Nachtrag fehlt:' cdl rr
    return cdl
endProcedure cdlDsnCheck

/*--- Date und user rechtsbuendig einfuegen --------------------------*/
addDateUs: procedure expose m.
parse arg le
    return le right(date(s) time() m.uNa, 71-length(le))
endProcedure addDateUs                                      "'"

/*--- den aktuellen Auftrag analysieren ------------------------------*/
analyseAuftrag: procedure expose m.
    m.scopeSrc.0 = 0
    m.scopeSrc.subSys = m.mySub
    m.scopeSrc.rz     = m.myRz
    m.catSrc.0 = ''
    m.scopeTrg.0 = 0
    m.scopeTrg.subSys = m.mySub
    m.scopeTrg.rz = m.myRz
    m.catTrg.0 = ''
    m.imp.seq = -1
    m.nacImp = 0
    m.e.impMask = ''
    m.e.comMask = ''
    m.e.tool = 'IBM'
    if m.auftrag.0 = 0 then
        call err 'Auftrag ist leer'
    vaWo = 'AUFTRAG'
    varWo =  'ZUEGELSCHUB BESTELLER COMMASK COMIGNO IMPMASK IMPIGNO' ,
             'KEEPTGT DBACHECK QCHECK V72 V10 CA BMC IBM'
    ignWo = 'SW SENDWSL RECEIVEWSL RECEIVESOURCE'
    ignCh = '*|'
    lev1Wo = 'SCOPE SOURCE TARGET COMPARE VERSION IMPORT SENDTARGET' ,
             varWo 'PROTOTYPERZ'
    do lx=1 to m.auftrag.0
        li = m.auftrag.lx
        parse upper var li w1 w2 w3 .
        if w1 = '' | pos(left(w1, 1), ignCh) > 0 ,
                   | wordPos(w1, ignWo) > 0 then
            iterate
        if wordPos(w1, vaWo) < 1 then
            call err 'operation' w1 ', erwartet' vaWo 'in Zeile' lx li
        w2 = translate(word(li, 2))
        if w1 = 'AUFTRAG' then do
            if w2 ^= m.auftrag.member then
                call err 'auftrag' w2 '<> member' m.auftrag.member
            m.e.auftrag = w2
            m.e.nachtrag = '?'
            m.nachtrag.0 = 0
            if dataType(left(w3, 1), 'U') & length(w3) <= 8 then
                ow = w3
            else
                ow = 'S100447'
            call mapPut e, 'chgOwn', ow
            vaWo = lev1Wo
            end
        else if wordPos(w1, 'V72 V10') > 0 then do
            call configureRZ , , substr(w1, 2)
            end
        else if wordPos(w1, 'CA BMC IBM') > 0 then do
            m.e.tool = w1
            end
        else if wordPos(w1, varWo) > 0 then do
            m.e.w1 = word(li, 2)
            end
        else if w1 = 'PROTOTYPERZ' then do /* alte syntax sep08 ??? */
            m.scopeSrc.rz = word(li, 2)
            end
        else if wordPos(w1, 'SCOPE SOURCE TARGET') > 0 then do
            suSy = ''
            if w1 = 'SOURCE' then do
                scp = 'SCOPESRC'
                suSy = w2
                end
            else if w1 = 'TARGET' then do
                scp = 'SCOPETRG'
                if abbrev('EXPLICIT', w2, 2) then do
                    m.optAuto = 0
                    suSy = w3
                    end
                else do
                    suSy = w2
                    if abbrev('EXPLICIT', w3, 2) then
                        m.optAuto = 0
                    end
                end
            else do /* alte syntax */
                if abbrev('SOURCE', w2) then
                    scp = 'SCOPESRC'
                else if abbrev('TARGET', w2) then
                    scp = 'SCOPETRG'
                else
                    call err 'scope' w2 'nicht abk. von SOURCE TARGET',
                                        'in Zeile' lx li
                end
            if (abbrev(suSy, 'DQ0') | abbrev(suSy, 'RZ1.DQ0')) ,
                                   <> (m.libPre == 'DSN.DBQ') then
                call err 'subSys' suSy 'mit Auftrag in' m.libPre
            m.scp.0 = 0
            if pos('.', suSy) > 0 then
                parse var suSy suRz '.' suSy
            else if pos('/', suSy) > 0 then
                parse var suSy suRz '/' suSy
            else
                suRZ = ''
            if suSy <> '' then
                m.scp.subsys = suSy
            if suRz <> '' then
                m.scp.rz = suRz
            vaWo = m.scopeTypes m.scopeType1 lev1Wo
            call debug 'scope' scp m.scp.rz'.'m.scp.subsys
            end
        else if wordPos(w1, m.scopeTypes m.scopeType1) > 0 then do
            parse value analyseScope(li) with ty nm qu
            if ty = '?' then
                call err nm qu 'in scope line' lx':' strip(li)
            aa = mAdd(scp, 'scope')
            m.aa.type = ty
            m.aa.qual = qu
            m.aa.name = nm
            end
        else if wordPos(w1, 'COMPARE VERSION SENDTARGET') > 0 then do
            if w1 = 'SENDTARGET' then
                w2 = w3
            cmpLast = abbrev(w2, '=')
            w2 = strip(w2, 'l', '=')
            if length(w2) <> 1 | pos(w2, m.nachtragChars) < 1 then
                call err 'nachtrag' w2 'in Zeile' lx li
            if pos(w2, m.nachtragChars) ,
                    < pos(m.e.nachtrag, m.nachtragChars) then
                call err 'nachtrag' w2 '< vorherigem' m.e.nachtrag ,
                        'in Zeile' lx li
            if m.e.nachtrag <> w2 then do
                m.e.nachtrag = w2
                nx = m.nachtrag.0 + 1
                m.nachtrag.0 = nx
                m.nachtrag.nx = w2
                end
            m.nachtrag.nx.fun = ''
            m.nachtrag.nx.last = cmpLast
            if pos(left(w1, 1), 'CV') > 0 then
                m.nachtrag.nx.fun = left(w1, 1)
            if abbrev(w3, "'") | verify(w3, '/.', 'm') < 1 then
                t1 = m.myRz'/'m.mySub
            else
                t1 = translate(w3, '/', '.')
            m.nachtrag.nx.trg = t1
            call debug 'nachtr' nx m.nachtrag.nx 'trg' m.nachtrag.nx.trg
            m.nacImp = (w1 <> 'COMPARE')
            end
        else if w1 = 'IMPORT' then do
            parse upper var li . subsys nachAll chg .
            subsys = translate(subsys, '/', '.')
            parse var chg chgAuf '.' chgNac '.' chgSeq '.' chgImp
            aa = m.e.auftrag
            if chgAuf = aa then do
                if left(chgNac, 1) <> left(nachAll, 1) then
                    call err 'Nachtrag von mismatch in Zeile' lx li
                if right(chgNac, 1) <> right(nachAll, 1) then
                    call err 'Nachtrag bis mismatch in Zeile' lx li
                end
            else if abbrev(chgAuf, aa) ,
                    & substr(chgAuf, length(aa)+4, 1) == '_' then do
                chgSeq = substr(chgAuf, length(aa)+1, 3)
                end
            else
                call err 'Auftrag mismatch in Zeile' lx li
            if chgSeq <= m.imp.seq then
                call err 'seq' chgSeq 'nicht > letzte' m.imp.seq,
                             'in Zeile' lx li
            m.nacImp = 1
            m.imp.last = subSys
            m.imp.subSys.nachtrag = nachAll
            m.imp.subSys.change   = chg
            m.imp.seq = chgSeq
            end
        else do
            call err 'ungültiger Operator' w1 'in Zeile' lx':' strip(li)
            end
        end
                               /* nachtrae durchgehen und kumulieren */
    m.targets = ''
    m.compares = ''
    m.versions = ''
    drop cmpLast
    m.cmpLast = 0
    do nx=1 to m.nachtrag.0
        m.cmpLast = m.cmpLast | m.nachtrag.nx.last
        if wordPos(m.nachtrag.nx.trg, m.targets) < 1 then
            m.targets = m.targets m.nachtrag.nx.trg
        if m.nachtrag.nx.fun = 'C' then
            m.compares = m.compares || m.nachtrag.nx
        if m.nachtrag.nx.fun = 'V' then
            m.versions = m.versions || m.nachtrag.nx
        call debug 'nachtrag' nx m.nachtrag.nx 'trg' m.nachtrag.nx.trg,
                 'all' m.targets 'fun' ,
                  m.nachtrag.nx.fun 'com' m.compares 'ver' m.versions,
                  'cmpLast' m.cmpLast
        end
    if 0 & abbrev(m.scopeSrc.subSys, 'DQ0') then
        call configureRz , '915 P0'
    if 0 then do
        say 'auftrag ' m.e.auftrag m.e.nachtrag mapGet(e, 'chgOwn')
        say '  comMask  ' m.e.comMask
        say '  comIgno  ' m.e.comIgno
        say '  impMask  ' m.e.impMask
        say '  impIgno  ' m.e.impIgno
        scp = 'SCOPESRC'
        drop subsys
        say '  scope ' m.scp.0 m.scp.subsys ,
            '  target ' m.scopeTrg.0 m.scopeTrg.subsys
        do sx=1 to m.scp.0
            say '   ' m.scp.sx.type m.scp.sx.qual'.'m.scp.sx.name
            end
        end
    call bmcVars
    return
endProcedure analyseAuftrag

/*--- eine Scope Zeile analysieren -----------------------------------*/
analyseScope: procedure expose m.
parse arg li
    parse upper var li ty w1 rest
    if wordPos(ty, m.scopeType1) > 0 then
        ty = word(m.scopeTypes, wordPos(ty, m.scopeType1))
    if wordPos(ty, m.scopeTypes) < 1 then
        return '?'
    cx = pos('.', w1)
    if cx < 1 then do
        qu = w1
        end
    else do
        qu =strip(left(w1, cx-1))
        rest = substr(w1, cx) rest
        end
    if qu = '' then
        return '? leerer Qualifier'
    if ty = 'DB' then
        return ty qu
    if left(rest, 1) = '.' then
        rest = substr(rest, 2)
    nm = word(rest, 1)
    if nm = '' then
        return '? leerer Name'
    return ty nm qu
endProcedure analyseScope

/*--- jcl generieren um Src und Trg Version und DDL zu extrahieren ---*/
extractSrcTrg: procedure expose m.
parse arg o, xx, oldSrc mbrLast
    call readDsn m.libSkels'ExVe)', m.exVe.
    call configureSubsys m.scopeSrc.rz, m.scopeSrc.subsys
    call mapPut e, 'auto', xx'AUTO'
    call mapPut e, 'src', xx'SRC'
    call mapPut e, 'trg', xx'TRG'
    mbrNac = mapGet(e, 'mbrNac')
    call mapPut e, 'what', xx'SRC'
    if ^ oldSrc then do
        call extractScopeVersion o, exVe, xx, 'SRC'
        end
    else if mbrNac <> mbrLast then do
        pr = m.libPre'.'xx'SRC'
        call copyDsn pr'DDL('mbrLast')', pr'DDL('mbrNac')', 1
        call copyDsn pr'CAT('mbrLast')', pr'CAT('mbrNac')', 1
        end
    call configureSubsys m.scopeTrg.rz, m.scopeTrg.subsys
    call mapPut e, 'what', xx'TRG'
    if m.optAuto then do
        call readDsn m.libSkels'AutMa)', m.autoMap.
        call readDsn m.libSkels'AutEx)', m.autoExt.
        call mapExpAll e, o, autoMap
        if m.sysRz = m.scopeTrg.rz then do
            call mapExpAll e, o, autoExt
            end
        else do
            mbrN = mapGet(e, 'mbrNac')
            mark = mbrN'@'time()
            autD = mapExp(e, '${libPre}.$auto($mbrNac)')
            cf   = mapExp(e, '${libPre}.SENDCF($mbrNac)')
            sndIn = sendJob1(o, m.scopeTrg.rz, 'RECTRG',
                , 'send'    autD                      ,
                , 'job      -ddJob' m.timeout'//??' cf mark       ,
                , 'receive' mapExp(e, '${libPre}.${what}DDL($mbrNac)') ,
                , 'receive' mapExp(e, '${libPre}.${what}CAT($mbrNac)') )
            call mapExpAll e, o, autoExt
            call sendJob2 o, sndIn, cf mark
            end
        end
    else do
        call extractScopeVersion o, exVe, xx, 'TRG'
        end
    return
endProcedure extractSrcTrg

/*--- Version + DDL zu extrahieren -----------------------------------*/
extractScopeVersion: procedure expose m.
parse arg o, i, ty, what
    scp = 'SCOPE'what
    /* say m.scp.rz  'scp' scp */
    if m.sysRz = m.scp.rz then do
        call extractVersionStep o, i, ty, what
        end
    else do
        mbrN = mapGet(e, 'mbrNac')
        mark = mbrN'@'time()
        cf   = mapExp(e, '${libPre}.SENDCF($mbrNac)')
        sndIn = sendJob1(o, m.scp.rz, 'REC'what,
            , 'job      -ddJob' m.timeout'//??' cf mark       ,
            , 'receive' mapExp(e, '${libPre}.${what}DDL($mbrNac)') ,
            , 'receive' mapExp(e, '${libPre}.${what}CAT($mbrNac)') )
        call extractVersionStep o, i, ty, what
        call sendJob2 o, sndIn, cf mark
        end
    return
endProcedure extractScopeVersion

/*--- einen Step um Version + DDL zu extrahieren ---------------------*/
extractVersionStep: procedure expose m.
parse arg o, i, ty, what
    scp = 'SCOPE'what
    call mapPut e, 'what', ty || what
    sto = mapExpAllAt(e, o, i, 1, 1)
    do while sto ^== ''
        parse var sto lx cx
        w = word(substr(m.i.lx, cx), 1)
        if w == '$@scope' then do
            if ty == '' then do
                do sx=1 to m.scp.0
                    sn = scp'.'sx
                    if wordPos(m.sn.type, 'UDT UDF') > 0 then do
                        t = "SCH = '"m.sn.qual"', " ,
                            m.sn.type "= '"m.sn.name"';"
                        end
                    else do
                        t = "TYPE = '"m.sn.type"',"
                        if m.sn.type <> 'DB' then
                            t = t "QUAL = '"m.sn.qual"',"
                        t = t "NAME = '"m.sn.name"'"
                        if m.sn.type = 'SP' then
                            t = t", VERSION='%'"
                        t = t';'
                        end
                    if length(t) < 30 then do
                        call mAdd o, ' ' t
                        end
                    else do
                        cx = lastPos(',', t)
                        call mAdd o, ' ' left(t, cx),
                                   , '  ' substr(t, cx+1)
                        end
                    end
                end
            else if ty == 'DB' then do
                c = getDb2Catalog(what)
                do x=1 to m.c.0
                    d1 = m.c.x.db
                    if db.d1 == 1 then
                        iterate
                    db.d1 = 1
                    call mAdd o, "  TYPE = 'DB,' NAME = '"d1"';"
                    end
                end
            else
                call err 'extractVersionStep bad ty' ty
            end
        else do
            call err 'implement stop' sto 'word' w 'in line' lx m.i.lx
            end
        sto = mapExpAllAt(e, o, i, lx, cx + length(w))
        end
    return
endProcedure extractVersionStep

/*--- add jcl to stem o to send a job to rz toRz with stepname step
         and add the remaining arguments as sendJob statements
         afterwards the caller must add the jcl and call sendJob2 ----*/
sendJob1: procedure expose m.
parse arg o, toRz, step
    oldRz = m.myRz
    call configureRz toRz
    call readDsn m.libSkels'SendJ)', m.sendJob.
    call mapPut e, 'step', step
    call mapExpAll e, o, sendJob
    do ax=4 to arg()
        call debug 'sendJob1 le' length(arg(ax)) arg(ax)'|'
        call mAdd o, arg(ax) left('-', (ax < arg()))
        end
    call mAdd o, '//DDJOB     DD *'
    stReX = m.o.0+1
    call readDsn m.libSkels || m.jobCard')', m.i.
    call mapPut e, 'jobName', 'Y'left(m.e.auftrag, 7)
    call mapPut e, 'fun', 'extract data from' toRz
    call mapExpAll e, o, i
    return oldRz stReX
endProcedure sendJob1

/*--- add the mark step to the job, translate leading // to ??
          and switch back to original rz -----------------------------*/
sendJob2: procedure expose m.
parse arg o, oldRz stReX, cfMark
    if cfMark ^= '' then do
        call mAdd o, '//         IF NOT ABEND' ,
                      'AND RC >= 0 AND RC <= 4 THEN'
        call mapPut e, 'step', 'MARKOK'
        call mapExpAll e, o, sendJob
        call mAdd o, 'mark' cfMark 'okRc0'
        call mAdd o, '//         ELSE'
        call mapPut e, 'step', 'MARKERR'
        call mapExpAll e, o, sendJob
        call mAdd o, 'mark' cfMark 'badRcOrAbend'
        call mAdd o, '//         ENDIF'
        end
    do ox = stReX to m.o.0
        if abbrev(m.o.ox, '//') then
            m.o.ox = overlay('??', m.o.ox)
        end
    call configureRz oldRz
    return
endProcedure sendJob2

/*--- return Stem fuer die CatalogInfo für Src oder Trg
          falls noetig aus Db2Catalog einlesen -----------------------*/
getDb2Catalog: procedure expose m.
parse arg wh
    st = 'CAT'wh
    if datatype(m.st.0, n) then
        return st
    else if m.st.0 ^== '' then
        call err 'getDb2Catalog('wh') bad value m.'st'.0' m.st.0
    scp = 'SCOPE'wh
    if m.sysRz = m.scp.rz then
        call sqlOConnect m.scp.subSys
    else
        call sqlOConnect m.scp.rz'/'m.scp.subSys
    call queryDb2Catalog st, wh
    m.v9.0 = 0
    call queryDb2V9 st, 'V9'
    return st
endProcedure getDb2Catalog

/*--- Information aus Db2Catalog fuer einen Scope einlesen -----------*/
queryDb2Catalog: procedure expose m.
parse arg st, what
    scp = 'SCOPE'what
    /* m.scopeTypes = 'DB TS TB VW IX AL' */
    ts = ''
    tb = ''
    ix = ''
    unQueried = 0
    do sx=1 to m.scp.0
        sn = scp'.'sx
        t = "  TYPE = '"m.sn.type"',"
        if m.sn.type <> 'DB' then
            t = t "QUAL = '"m.sn.qual"',"
        t = t "NAME = '"m.sn.name"';"
        call debug 'queryDb2Catalog' sx t
        if m.sn.type = 'DB' then
            ts = ts 'or s.dbName' sqlClause(m.sn.name)
        else if m.sn.Type = 'TS' then
            ts = ts 'or (s.dbName' sqlClause(m.sn.qual) ,
                    'and s.name' sqlClause(m.sn.name)')'
        else if m.sn.Type = 'TB' then
            tb = tb 'or (t.creator' sqlClause(m.sn.qual) ,
                    'and t.name' sqlClause(m.sn.name)')'
        else if m.sn.Type = 'IX' then
            ix = ix 'or (x.creator' sqlClause(m.sn.qual) ,
                    'and x.name' sqlClause(m.sn.name)')'
        else
            unQueried = unQueried + 1
        end
    sel = 'select s.dbName db, s.name ts , s.type, ',
                  's.partitions, s.segSize, s.log, ',
                  't.creator cr, t.name tb,' ,
                  't.status tbSta, t.tableStatus tbTbSta',
              'from sysibm.sysTableSpace S, sysibm.sysTables T'
    wh = "where s.dbName = t.dbName and s.name = t.tsName",
               "and t.type = 'T'"
    sql = ''
    if ts <> '' then
        sql = sql 'union' sel wh 'and ('substr(ts, 5)')'
    call debug 'ts sql' sql
    if tb <> '' then
        sql = sql 'union' sel wh 'and ('substr(tb, 5)')'
    call debug 'tb sql' sql
    if ix <> '' then
        sql = sql 'union' sel ', SYSIBM.SYSINDEXES X',
                    wh 'and t.creator=x.tbCreator and t.name=x.tbName',
                       'and ('substr(ix, 5)')'
    call debug 'ix sql' sql
    if sql = '' then do
         m.st.0 = 0
         if unQueried < 1 then
             say 'nothing specified in source scope'
         return 0
         end
    drop db ts cr tb type
    call sql2St substr(sql, 8), st
    if m.debug == 1 then do
        say m.st.0
        do sx = 1 to m.st.0
           say strip(m.st.sx.db)'.'strip(m.st.sx.ts) m.st.sx.type ,
                      m.st.sx.partitions m.st.sx.segSize
           end
        end
    return m.st.0
endProcedure queryDb2Catalog

/*--- haben wir schon DB2 V9 Objekte ? -------------------------------*/
queryDb2V9: procedure expose m.
parse arg sc, vv
    m.vv.0 = 0
    wh =''
    do x = 1 to m.sc.0
        wh = wh "or (cr='"m.sc.x.cr"' and tb='"m.sc.x.tb"')"
        end
    if wh == '' then
        return 0
    return sql2st("select tp,nm,v9",
             "from s100447.db2v9",
             "where V9 <> '' and (" substr(wh, 5) ")",
             "order by cr,tb,cl", vv)
endProcedure queryDb2V9

/*--- Qualitaets Pruefung fuer CatalogInfo Stem c --------------------*/
qualityCheck: procedure expose m.
parse arg c
    if m.libPre <> 'DSN.DBQ' then
        call maskIni
    o = 'AUFTRAG'
    m.o.orig = 'rmQu' m.o.orig
    m.spezialFall.done = ''
    aufOld = m.o.0
    do x=1 to m.c.0
        vDb = strip(m.c.x.db)
        n = '|| db' vDb
        if d.n ^== 1 then do
            d.n = 1
            call spezialfall vDb, substr(n, 4)
            end
        n = '|| ts' vDb'.'strip(m.c.x.ts)
        if d.n ^== 1 then do
            d.n = 1
            call spezialfall vDb, substr(n, 4)
            if m.c.x.log <> 'Y' then
                call mAdd o, n 'not logged'
            if m.c.x.partitions > 0 then
                nop
            else if m.c.x.segSize = 0 then
                call mAdd o, n 'simple TS'
            end
        n = '|| tb' strip(m.c.x.cr)'.'strip(m.c.x.tb)
        if d.n ^== 1 then do
            d.n = 1
            call spezialfall vDb, substr(n, 4)
            if m.c.x.tbTbSta = 'L' then
                call mAdd o, n 'auxilary index oder table fehlt'
            else if m.c.x.tbTbSta = 'P' then
                call mAdd o, n 'primary index fehlt'
            else if m.c.x.tbTbSta = 'R' then
                call mAdd o, n 'index auf Row ID fehlt'
            else if m.c.x.tbTbSta = 'U' then
                call mAdd o, n 'index auf unique key fehlt'
            else if m.c.x.tbTbSta = 'V' then
                call mAdd o, n 'Regenerierung interne ViewDarstellung'
            else if m.c.x.tbTbSta ^= '' then
                call mAdd o, n 'TableStatus' m.c.x.tbTbSta 'unbekannt'
            end
        end
    do vx=1 to m.v9.0
        call mAdd o, '|| V9' m.v9.vx.tp left(m.v9.vx.nm, 30) ,
                                        left(m.v9.vx.v9, 30)
        end
    return aufOld < m.o.0
endProcedure qualityCheck

/*--- für jedes Objekt aus Source Scope Eintrage in der
      Spezialfall Library suchen und falls vorhanden anzeigen --------*/
spezialFall: procedure expose m.
parse upper arg db, typ qua '.' nam
    if m.libPre = 'DSN.DBQ' then
        return
    pDb = mask2prod('DBNAME', db)
    if (typ = 'DB' | typ = 'TS') & db <> qua then
        call err 'db mismatch spezialFall('db',' typ qua'.'nam')'
    if typ = 'DB' then
        srch = typ pDb'.'
    else if typ = 'TS' then
        srch = typ pDb'.'mask2prod('TSNAME', nam)
    else if typ = 'TB' then
        srch = typ mask2prod('TBOWNER', qua)'.'mask2prod('TBNAME', nam)
    else
        call err 'bad typ' typ
    st = spezialFall'.'pDb
    if symbol('m.st.0') <> 'VAR' then do
        dsn = m.libSpezial"("pDb")"
        sy = sysDsn("'"dsn"'")
        if sy <> 'OK' then do
            m.st.0 = 0
            if sy <> 'MEMBER NOT FOUND' then
                call err 'spezialFall library' dsn':' sy
            end
        else do
           call readDsn dsn, 'M.SPEZIALFALL.'pDB'.'
           end
        end
    if m.st.0 < 1 then
        return
    offs = 999
    found = 0
    do sx = 1 to m.st.0
        fx = verify(m.st.sx, ' ')
        if fx = 0 | fx > 72 then
           iterate
        if substr(m.st.sx, fx, 1) = '*' then
           iterate
        if fx <= offs then do
            offs = fx
            m.st.sx = left(m.st.sx, 72)
            n = ''
            if pos('.', m.st.sx) > 0 then
                parse upper var m.st.sx t q '.' n .
            else
                parse upper var m.st.sx t q .
            if wordPos(t, 'DB TS TB') < 1 then
              call err 'spezialFall' pDb 'line' sx 'ungueltig:' m.st.sx
            found = match(srch, t strip(q)'.'strip(n)) ,
                    & ^ (wordPos(pDb'.'sx, m.spezialFall.done) > 0)
            if found then
                m.spezialFall.done = m.spezialFall.done  pDb'.'sx
            end
        if found then
            call mAdd auftrag, '|-'left(m.st.sx, 78)
        end
    return
endProcedure spezialFall

/*--- mask handling initialise ---------------------------------------*/
maskIni: procedure expose m.
    call maskHierarchy
    call maskRead mask.prot, m.libPre'.MASK(PROTDBAF)'
    call maskRead mask.dbof, m.libPre'.MASK(DBAFDBOF)'
    return
endProcedure maskIni

/*--- mask a whole scope  --------------------------------------------*/
maskScope: procedure expose m.
parse arg mskDsn, fr, to
    call maskRead masc, mskDsn
    do fx=1 to m.fr.0
        ty = m.fr.fx.type
        m.to.fx.type = ty
        if wordPos(ty, 'DB SG') > 0 then
            m.to.fx.qual = ''
        else if wordPos(ty, 'TS') > 0 then
            m.to.fx.qual = maskTrans(masc, 'DBNAME', m.fr.fx.qual)
        else
            m.to.fx.qual = maskTrans(masc, 'SCHEMA', m.fr.fx.qual)
        if wordPos(ty, 'DB') > 0 then
            m.to.fx.name = maskTrans(masc, 'DBNAME', m.fr.fx.name)
        else if wordPos(ty, 'TB VW AL') > 0 then
            m.to.fx.name = maskTrans(masc, 'TBNAME', m.fr.fx.name)
        else if wordPos(ty, 'SP') > 0 then
            m.to.fx.name = maskTrans(masc, 'STPNAME', m.fr.fx.name)
        else
            m.to.fx.name = maskTrans(masc, ty'NAME', m.fr.fx.name)
        end
    m.to.0 = m.fr.0
    return
endProcedure maskScope

/*--- mask test functions --------------------------------------------*/
testMask: procedure expose m.
    call maskIni
    call maskTT OWNER, GDB9998
    call maskTT DBNAME, DGDB9998
    call maskTT DBNAME, DGDB0287
    call maskTT OWNER, GDB0301
    call maskTT TSNAME, AGRFX12A2
    call maskTT OWNER, SYS123EF
    return 0
endProcedure testMask

maskTT: procedure expose m.
parse arg ty, na
    say 'maskTrans(prot,' ty',' na') =' maskTrans(mask.prot, ty, na) ,
        ' -> DBOF' maskTrans(mask.dbof, ty, maskTrans(mask.prot,ty,na))
    return

/*--- translate a prototype object to DBOF naming -------------------*/
mask2Prod: procedure expose m.
parse arg ty, na
    return translate(strip(,
        maskTrans(mask.dbof, ty, maskTrans(mask.prot,ty,na))))

/*--- translate an object of type ty and name na
           by the masking file in st --------------------------------*/
maskTrans: procedure expose m.
parse arg st, ty, na
    if symbol('m.mask.hier.ty') <> 'VAR' then
        call err 'bad type' ty
    types = m.mask.hier.ty
    do sx=1 to m.st.0
        if wordPos(m.st.sx.typ, types) < 1 then
            iterate
        if match(na, m.st.sx.in, vv) then
            return matchTrans(m.st.sx.out, vv)
        end
    return na
endProcedure maskTrans

/*--- read and analyse the masking file dsn into stem st ------------*/
maskRead: procedure expose m.
parse arg st, dsn
    maskIgno = 'COMPRESS SEGSIZE DEFER DEFINE PRIQTY SECQTY'
    call readDsn dsn, i.
    j = 0
    do i=1 to i.0
        parse var i.i t ':' s ',' d
        t = strip(t)
        if symbol('m.mask.hier.t') == 'VAR' then
            nop
        else if wordPos(t, maskIgno) > 0 then
            iterate
        else
            call err 'bad typ' t 'in maskline' i':' i.i
        j = j+1
        m.st.j.typ = t
        m.st.j.in = strip(s)
        m.st.j.out = word(d, 1)
        end
    m.st.0 = j
    return
    drop typ in out
    do wx=1 to m.st.0
        say wx m.st.wx.typ':' m.st.wx.in'==>'m.st.wx.out'|'
        end
endProcedure maskRead

/*--- initialise the type hierarchy of masking
           as input use the msgLines of the mask editor --------------*/
maskHierarchy: procedure expose m.
                     /* copy der hierarch aus masking template */
    call mAdd mCut('T', 0)                           ,
      , 'COLNAME                                     ' ,
      , 'NAME                                        ' ,
      , '  DBNAME,TSNAME,TBNAME,IXNAME,UDFNAME,      ' ,
      , '  UDTNAME,COLLNAME,PKGNAME,PGMNAME,PLNNAME  ' ,
      , '  DBRMNAME,STPNAME,SFNAME,TGNAME,GRPNAME,   ' ,
      , '  VCATNAME,GBPNAME                          ' ,
      , '  BPNAME                                    ' ,
      , '    TSBPNAME,IXBPNAME                       ' ,
      , '  SGNAME                                    ' ,
      , '    TSSGNAME,IXSGNAME                       ' ,
      , 'AUTHID                                      ' ,
      , '  SQLID,SCHEMA                              ' ,
      , '  OWNER                                     ' ,
      , '    DBOWNER,TSOWNER,TBOWNER,IXOWNER         ' ,
      , '  GRANTID                                   ' ,
      , '    GRANTOR,GRANTEE                         '
    qx = 0
    lOff = -1
    m.mask.hier = ''
    do x=1 to m.t.0
        of = verify(m.t.x, ' ', 'n')
        li = translate(m.t.x, ' ', ',')
        do while qx > 0 & word(q.qx, 1) >= of
            qx = qx -1
            end
        px = qx - 1
        if (qx = 0 | of > word(q.qx, 1))  & words(li) = 1 then do
            px = qx
            qx = qx + 1
            if qx = 1 then
                q.qx = of word(li, 1)
            else
                q.qx = of word(li, 1) subword(q.px, 2)
            end
        do wx=1 to words(li)
            w1 = word(li, wx)
            m.mask.hier = m.mask.hier w1
            if wordPos(w1, subWord(q.qx, 2)) < 1 then
                m.mask.hier.w1 = w1 subWord(q.qx, 2)
            else
                m.mask.hier.w1 = subWord(q.qx, 2)
            end
        end
    return
endProcedure maskHierarchy

/*--- Funktion q: scope Zeilen pruefen -------------------------------*/
queryScope: procedure expose m.
parse arg subSys
    subs2 = ''
    rf = 1
    isConn = 0
    if adrEdit('(rl) = lineNum .zl', 4) = 4 then
            rl = 0
    if ^ m.editMacro then
        call err 'q nicht als Macro'
    if ^ m.editProc then do
        if adrEdit('PROCESS RANGE Q', 0 4) = 0 then do
            call adrEdit '(rf) = lineNum .zfrange'
            call adrEdit '(rl) = lineNum .zlrange'
            end
        m.editProc = 1
        end
    do rx = rf by 1 while rx <= rl
        call adrEdit '(li) = line' rx
        parse value analyseScope(li) with ty nm qu
        if ty = '?' then do
            if nm <> '' then
                say nm qu 'in line' rx':' strip(li)
            if \ isConn & subsys == '' then do
                parse upper var li w1 w2 .
                if wordpos(w1, 'SOURCE TARGET') > 0 then do
                    if length(w2) = 4 | ( length(w2) = 8 ,
                          & pos(substr(w2,4,1), './') > 0) then
                    subs2 = translate(w2, '/', '.')
                    end
                end
            iterate
            end
        if \ isConn then do
            isConn = 1
            if subSys = '' then
                subSys = if(subs2 == '', m.mySub, subs2)
            subsys = translate(subsys, '/', '.')
            call sqlConnect subSys
            subsys = translate(subsys, m.mAlfLC, m.mAlfUC)
            end
        call expandScope mCut(qq, 0), ty, qu, nm
        do qx=1 to m.qq.0
            neu = m.qq.qx
            if length(neu subSys) < 70 then
                neu = left(neu, 68 - length(subSys)) '*'subSys
            else if length(neu subSys) < 80 then
                neu = neu '*'subSys
            liCm = if(qx=1, "line" rx, "line_after" (rx+qx-2))
            if adrEdit(liCm "= (neu)", 4) = 4 then
                say 'truncation line' rx':' neu
            end
        rx = rx + m.qq.0 - 1
        rl = rl + m.qq.0 - 1
        end
    call sqlDisConnect
    return 0
endProcedure queryScope

/*--- einen Scope Ausdruck expandieren -------------------------------*/
expandScope: procedure expose m.
parse arg o, ty, qu, nm
     sql = ''
     dec2s = "strip(case when abs(?) > 9223372036854775807",
                       "then char(real(?)) else char(bigint(?)) end)"
     if ty = 'DB' then
         sql = "select 'db', name, '' from sysibm.sysDatabase",
                    "where name" sqlClause(nm)
     else if ty = 'TS' then
         sql = "select 'ts', strip(dbName) || '.' || strip(tsName)," ,
                    "case when count(*) = 1 then 'tb '" ,
                         "else strip(char(count(*))) || ' tables||| '",
                    "end || min(strip(creator) ||'.'|| strip(name))",
                    "from sysibm.systables" ,
                    "where type = 'T' and dbName" sqlClause(qu),
                                    "and tsName" sqlClause(nm),
                    "group by dbName, tsName"
     else if ty = 'TB' | ty = 'VW' | ty = 'AL' then
         sql = "select case when type = 'T' then 'tb'",
                           "when type = 'V' then 'vw'",
                           "when type = 'A' then 'al'",
                                           "else '?' || type end,",
                    "strip(creator) || '.' || strip(name),",
                    "case when type = 'A' then 'for '",
                              "|| strip(location) || '.'" ,
                              "|| strip(tbCreator)||'.'||strip(tbName)",
                          "else 'ts ' || strip(dbName) ||'.'",
                                      "|| strip(tsName)",
                    "end",
                    "from sysibm.systables" ,
                    "where type =" quote(left(ty, 1), "'"),
                        "and creator" sqlClause(qu),
                        "and name" sqlClause(nm)
     else if ty = 'IX' then
         sql = "select 'ix', strip(creator) || '.' || strip(name),",
                        "'tb ' || strip(tbCreator)||'.'||strip(tbName)",
                    'from sysibm.sysIndexes' ,
                    'where creator' sqlClause(qu),
                           'and name' sqlClause(nm)
     else if ty = 'UDT' then
         sql = "select 'udt', strip(schema) || '.' || strip(name),",
                        "'source ' || strip(sourceSchema)",
                        "|| '.' || strip(sourceType)",
                    "from sysibm.sysDataTypes",
                    'where schema' sqlClause(qu),
                           'and name' sqlClause(nm)
     else if ty = 'UDF' | ty = 'SP' then
         sql = "select case when routineType = 'F' then 'udf'",
                           "when routineType = 'P' then 'sp'",
                           "else '?' || routineType end, ",
                      "strip(schema) || '.' || strip(name),",
                      "'otp=' || origin || function_type" ,
                        "|| strip(char(parm_count))",
                      "|| ' spec=' || strip(specificName)",
                      "|| ' a=' || active || ' vers=' || version",
                    "from sysibm.sysRoutines",
                    'where routineType =' quote(right(ty, 1), "'"),
                         'and schema' sqlClause(qu) ,
                         'and name' sqlClause(nm)
     else if ty = 'TG' then
         sql = "select 'tg', strip(schema) || '.' || strip(name),",
                        "'teg ' || trigTime || trigEvent||granularity",
                        "|| ' tb ' || strip(tbOwner) || '.'",
                        "||           strip(tbName)",
                    "from sysibm.sysTriggers",
                    'where seqNo=1 and schema' sqlClause(qu),
                           'and name' sqlClause(nm)
     else if ty = 'SQ' then
         sql = "select 'sq', strip(schema) || '.' || strip(name),",
                        "'start ' ||" repAll(dec2s, "?", "start"),
                        "|| ': ' ||" repAll(dec2s, "?", "minValue"),
                        "|| '-' ||" repAll(dec2s, "?", "maxValue"),
                        "|| ' inc ' ||" repAll(dec2s, "?", "increment"),
                    "from sysibm.sysSequences",
                    "where seqType='S' and schema" sqlClause(qu),
                           "and name" sqlClause(nm)
     else if ty = 'SY' then
         sql = "select 'sy', strip(creator) || '.' || strip(name),",
                        "'for ' || strip(tbCreator) || '.'" ,
                               "||strip(tbName)",
                    "from sysibm.sysSynonyms",
                    "where creator" sqlClause(qu),
                         "and name" sqlClause(nm)
     else do
        call mAdd o, ty left(qu'.'nm, 30) '* query nicht implementiert'
        return
        end
     call sqlQuery 1, sql 'order by 2', ,
        , classNew('n* SQL u f FT v, f FN v, f FI v')
     do cx=0 by 1 while sqlFetch(1, d)
             call mAdd o, lefA(m.d.ft, 3) lefA(m.d.fn, 30) m.d.fi
             end
     call  sqlClose 1
     if cx = 0 then
         call mAdd o, lefA(ty, 3) lefA(strip(qu)left('.', qu \== '') ,
                   || strip(nm), 30) '* nicht gefunden'
    return
endProcedure expandScope

/*--- return sql condition (= String oder like String) ---------------*/
sqlClause: procedure expose m.
parse arg val
     val = translate(val, '%_', '*?')
     if verify(val, '%_', 'm') > 0 then
          return 'like' quote(val, "'")
     else
          return '=' quote(val, "'")
endProcedure sqlClause

lefA: procedure expose m.
parse arg s, len
    if length(s) < len then
        return left(s, len)
    else
        return s
endProcedure lefA

/*--- copy srcDdl und srcCat aus anderem rz --------------------------*/
receiveSource: procedure expose m.
parse arg rz
    if rz = '' | rz = '*' | rz = m.myRz then
        call err 'rs receiveSource mit ungueltigem rz' rz
    call readAuftrag rz, m.auftrag.dataset, m.e.auftrag
    call analyseAuftrag
    if m.e.nachtrag = '?' then
        call err 'keine Version in Auftrag' m.e.auftrag 'im' rz
    nacMbr = left(m.e.auftrag, 7) || m.e.nachtrag
    call csmCopy rz'/'m.libPre'.srcDdl('nacMbr')', m.libPre'.'rz'DDL'
    call csmCopy rz'/'m.libPre'.srcCat('nacMbr')', m.libPre'.'rz'Cat'
    call readAuftrag   , m.auftrag.dataset, m.auftrag
    call mAdd auftrag, addDateUs('receiveSource' rz,
                        m.libPre'.'rz'Cat('nacMbr')')
    return
endProcedure receiveSource

/*--- copy wsl aus anderem rz ----------------------------------------*/
receiveWSL: procedure expose m.
parse arg rz
    if rz = m.myRz then
        rz = ''
    call analyseAuftrag
    sWsl = 'dsn.dba.clon.wsl('left(m.e.auftrag, 7)'Q)'
    sIff = 'dsn.dba.'left(m.e.auftrag, 7)'Q.IFF'
    if rz <> '' then do
        call csmCopy rz'/'sWsl, sWsl
        if adrCsm("dslist SYSTEM("rz") DSNMASK('"sIff"') SHORT", 4) = 0,
               & stemSize = 1 then
            call csmCopy rz'/'sIff, sIff
        else
            say 'iff existiert nicht im' rz
        end
    call cloneWsl '', m.e.auftrag, 1
    call mAdd auftrag, addDateUs('receiveWSL' rz)
    return
endProcedure receiveWSL

/*--- send wsl to the argument rz ------------------------------------*/
sendWSL: procedure expose m.
parse arg rz
    if rz = m.myRz then
        rz = ''
    call analyseAuftrag
    if m.versions = '' | m.compares <> '' then
        call warn 'sendWSL ohne versions oder mit compares'
    sWsl = 'dsn.dba.clon.wsl('left(m.e.auftrag, 7)'Q)'
    sIff = 'dsn.dba.'left(m.e.auftrag, 7)'Q.IFF'
    if sysDsn("'"sWsl"'") <> 'OK' then
        call err 'source wsl fehlt:' sWsl sysDsn("'"sWsl"'")
    if rz <> '' then do
        call csmCopy sWsl, rz'/'sWsl
        if sysDsn("'"sIff"'") <> 'OK' then
            say 'iff existiert nicht' sIff sysDsn("'"sIff"'")
        else
            call csmCopy sIff, rz'/'sIff
        end
    call cloneWsl rz, m.e.auftrag, 1
    call mAdd auftrag, addDateUs('sendWSL' rz)
    return
endProcedure sendWSL

/*--- clone a wsl mbr in the rz sys,
          if doRemove=1 remove old members first ---------------------*/
cloneWsl: procedure expose m.
parse arg sys, mbr, doRemove
                 /* copy multi clone jcl from target rz */
    jcl = csmSysDsn(sys'/DSN.DBA.MULTI.CLONE'right(mbr, 1)'.JCL', 0)
    CALL READdsn jcl, m.jj.
                                /* modify the jcl */
    do jx=1 to m.jj.0
        if word(m.jj.jx, 2) == '=' then do
            if word(m.jj.jx, 1) = 'SRCWSLST' then
                m.jj.jx = 'SRCWSLST =' left(mbr, 7)'Q'
            else if word(m.jj.jx, 1) = 'CLNWSLST' then
                m.jj.jx = 'CLNWSLST =' mbr
            end
        else if space(subword(m.jj.jx, 1, 2) ,1) ,
                == '//DELMBRIF IF' then do
            m.jj.jx = '//DELMBRIF IF RC =' (7 *(^doRemove)) 'THEN'
            end
        else if word(m.jj.jx, 1) == 'DELETE' then do
            nm = word(m.jj.jx, 2)
            cx = pos('(', nm)
            if right(nm, 1) = ')' & cx > 0 then
                m.jj.jx = '  DELETE' left(nm, cx)mbr')'
            else
                call err 'bad delete' jx m.jj.jx
            end
        end
    call writeSub jj, sys, 1
    return 0
endProcedure cloneWsl

warn:
    say '*** warning:' arg(1)
    return
endSubroutine warn

repAll: procedure expose m.
parse arg src, w, new
    res = ''
    cx = 1
    do forever
        nx = pos(w, src, cx)
        if nx < 1 then
            return res || substr(src, cx)
        res = res || substr(src, cx, nx-cx) || new
        cx = nx + length(w)
        end
endProcedure repAll

/**** ca *************************************************************/
/*--- extract ddl from source system ---------------------------------*/
caDDl: procedure expose m.
trace ?r
parse arg o, cco1, scp, GlbChg
    if m.sysRz = m.scp.rz then do
        call caDD1 o, cco1, scp, GlbChg
        end
    else do
        mbrN = mapGet(e, 'mbrNac')
        mark = mbrN'@'time()
        cf   = mapExp(e, '${libPre}.SENDCF($mbrNac)')
        sndIn = sendJob1(o, m.scp.rz, 'RECSRC',
            , 'job      -ddJob' m.timeout'//??' cf mark       ,
            , 'receive' mapExp(e, '${libPre}.CACDL($mbrNac)'))
        call caDD1 o, cco1, scp, GlbChg
        call sendJob2 o, sndIn, cf mark
        end
    return
endProcedure caDDL

/*--- quickMigrate to create ddl -------------------------------------*/
caDD1: procedure expose m.
parse arg o, cco1, scp, GlbChg
    call mapPut e, 'user', userid()
    call mapExpAll e, o, cco1
    do sx=1 to m.scp.0
        sn = scp'.'sx
        if m.sn.type == 'DB' then
            call caEx o, 'DATABASE' '='  m.sn.name, 'db'
        else if m.sn.type == 'IX' then
            call caEx o, 'INDEX' m.sn.qual m.sn.name, 'i'
        else if m.sn.type == 'TS' then
            call caEx o, 'TABLESPACE' m.sn.qual m.sn.name, 'ts'
        else if m.sn.type == 'VW' then
            call caEx o, 'VIEW' m.sn.qual m.sn.name, 'v'
        else
            call err 'implement type' m.sn.type 'for ca'
        end
    call readDsn m.libSkels'CCO2)', m.cco2.
    call mapExpAll e, o, cco2
    call caGlbChg o, glbChg
    return
endProcedure caDD1


caGlbChg: procedure expose m.
parse arg o, glbchg, cr
    if glbChg == '' then
        return
 /* call mAdd o, ' GLBLNAME  ' GlbChg,  nein, ins member schreiben ???
               , ' GLBLCRTR  ' mapGet(e, 'cacr') */
    glblDsn = m.libPre".caGlbChg("GlbChg")"
    if sysDsn("'"glblDsn"'") \== 'OK' then
        call err 'mask' GlbChg':' glblDsn sysDsn("'"glblDsn"'")
    call readDsn glblDsn, 'M.GLBL.'
    call mAddSt o, glbl
    return
endProcedure caGlblChg

/*--- add explode options depending on object type -------------------*/
caEx: procedure expose m.
parse arg o, oLine, ty
    call mAdd o, '' oLine
    call caE1 o, ty, 'e TABLESPACE        db'
    call caE1 o, ty, 'e TABLE             db ts'
    call caE1 o, ty, 'e INDEX             db ts t'
    call caE1 o, ty, 'e VIEW              db ts t v'
    call caE1 o, ty, 'e SYNONYM           db ts t v'
    call caE1 o, ty, 'e TRIGGER           db ts t v'
    call caE1 o, ty, 'e MQTB_T            db ts t v'
    call caE1 o, ty, 'e MQTB_I            db ts t v'
    call caE1 o, ty, 'e MQTB_V            db ts t v'
    call caE1 o, ty, 'e MQTB_S            db ts t v'
    call caE1 o, ty, 'e MQVW_VW           db ts t v'
    call caE1 o, ty, 'e MQVW_I            db ts t v'
    call caE1 o, ty, 'e MQVW_V            db ts t v'
    call caE1 o, ty, 'e MQVW_S            db ts t v'
    call caE1 o, ty, 'i MQVW_VW                     i'
    return
endProcedure caEx
caE1: procedure expose m.
parse arg o, ty, v1 v2 types
    if v1 == 'e' then
        e = 'EXPLODE'
    else if v1 == 'i' then
        e = 'IMPLODE'
    else
        call err 'bad explode' v1 'in caE1('o',' ty',' v1 v2 types')'
    if wordPos(ty, types) > 0 then
        call mAdd o, ' 'left(e, 11) v2
    return
endProcedure caE1
/**** bmc ************************************************************/
/*--- src und trg profile erstellen ----------------------------------*/
bmcVars: procedure expose m.
    m.e.profSrc = m.e.auftrag'_SRC'
    m.e.profTrg = m.e.auftrag'_TRG'
    m.e.profOwn = 'DBXAUFTR'
    return
endProcedure bmcVars

bmcVarsProf: procedure expose m.
parse arg isImport
    m.e.profChg = bmcMask2Prof(m.e.comMask)
    if isImport then
        m.e.profImp = bmcMask2Prof(m.e.impMask)
    return
endProcedure bmcVarsProf

bmcMask2Prof: procedure expose m.
parse arg mask
    m2 = translate(mapExp(e, mask))
    return word(translate(m2, '   ', '.()'), 2)'.'dsnGetMbr(m2)
endProdecure bmcMask2Prof

/*--- src und trg profile erstellen ----------------------------------*/
bmcSrcTrg: procedure expose m.
parse arg oldSrc prof
    if symbol('m.mask.hier') \== 'VAR' then
        call maskHierarchy
    if m.scopeSrc.rz \== m.sysRz | m.scopeTrg.rz \== m.sysRz then
        call err 'bmc compare on other rz not implemented'
    if m.scopeSrc.subsys \== m.scopeTrg.subsys then
        call err 'bmc compare on different subsystems not implemented'
    call configureSubsys m.scopeSrc.rz, m.scopeSrc.subsys
    call bmcProfile m.e.profOwn, m.e.profSrc, 'SCOPESRC'
    if m.optAuto then
        call maskScope m.e.comMask, 'SCOPESRC', 'SCOPETRG'
    call bmcProfile m.e.profOwn, m.e.profTrg, 'SCOPETRG'
    return
endProcedure bmcSrcTrg

bmcProfile: procedure expose m.
parse arg ow, prof, scp
    call sqlOConnect m.scp.subSys
    call sqlExec "insert into bmcacma1.CM_BLPROFILE" ,
                    "(BLPOWNER, blpName, type, template)" ,
         "values('"ow"', '"prof"', 'C', '"prof"####')", -803
    call sqlExec "delete from bmcacma1.CM_SCOPE" ,
                   "where scOwner = '"ow"' and scName = '"prof"'", 100
    do sx=1 to m.scp.0
        sn = scp'.'sx
        if m.sn.type = 'DB' then do
            q1 = m.sn.name
            q2 = ''
            end
        else do
            q1 = m.sn.qual
            q2 = m.sn.name
            end
        call sqlExec "insert into bmcacma1.CM_SCOPE" ,
          "(SCOWNER, SCName, Type, ACTION,OBJECT,NAME_PART1,NAME_PART2",
          ",MIGDT, MIGTS, MIGTB, MIGCK, MIGFK, MIGIX, MIGVW, MIGAU",
          ",MIGSY, MIGAL, MIGRO, MIGTR, MIGUC, MIGAX",
         ")values('"ow"', '"prof"', 'B', 'I'" ,
          ", '"m.sn.type"', '"q1"', '"q2"'" ,
          ",'N'  , 'Y',   'Y',  'Y',    'Y',   'Y',   'Y',  'N'",
          ",'Y'  , 'Y',   '',   'Y',    'Y',   'Y')"
        end
     call sqlCommit
     return
endProcedure bmcProfile
/* copy match begin ***************************************************/
/************************************* begin     copy      match ******/
/*--- wildCard matching with the following wildchars:
          * 0-n chars
          ? 1 char
      fill matched expressions instem st if st is non empty
      return 1 if mask matches wert ----------------------------------*/
match: procedure expose m.
parse arg wert, mask, st
    if st == '' then
        return matchRO(wert, mask)
    m.st.0 = -9
    return matchSt(wert, mask, st, 0)
endProcedure match

/*--- return the fixed prefix of maskt -------------------------------*/
matchPref: procedure
arg mask, suff
    ix = verify(mask, '*?', 'm')
    if ix = 0 then
        return mask
    else
        return left(mask, ix-1)suff
endProcedure matchPref

/*--- return true if mask matches wert -------------------------------*/
matchRO: procedure
arg wert, mask
    ix = verify(mask, '*?', 'm')
    if ix < 1 then return (mask == wert)
    if length(wert) < ix-1 then return 0
    if left(mask, ix-1) \== left(wert, ix-1) then return 0
    if substr(mask, ix, 1) == '?' then do
        if length(wert) < ix then return 0
        return matchRO(substr(wert, ix+1), substr(mask, ix+1))
        end
    mask = substr(mask, ix+1)                /* * 0 - n Chars */
    do ex = 1+length(wert) to ix by -1
        if matchRO(substr(wert, ex), mask) then return 1
        end
    return 0
endProcedure matchRO

/*--- wildCard matching: fill matched expressions instem st
      return 1 if mask matches wert ----------------------------------*/
matchSt: procedure expose m.
parse arg wert, mask, st, sx
    ix = verify(mask, '*?', 'm')
    if ix < 1 then do
        if mask \== wert then
            return 0
        m.st.0 = sx
        return 1
        end
    if \ abbrev(wert, left(mask, ix-1)) then
        return 0
    reMa = substr(mask, ix+1)
    sx = sx + 1
    if substr(mask, ix, 1) == '?' then do /* ? 1 Character */
        if length(wert) < ix then
            return 0
        m.st.sx = substr(wert, ix, 1)
        return matchSt(substr(wert, ix+1), reMa, st, sx)
        end
    do lx = 1+length(wert) to ix by -1 /* greedy: from all to empty */
        if matchSt(substr(wert, lx), reMa, st, sx) then do
            m.st.sx = substr(wert, ix, lx-ix)
            return 1
            end
        end
    return 0
endProcedure matchSt

matchTrans: procedure expose m.
parse arg mask, st
    r = ''
    ox = 1
    sx = 0
    ix = verify(mask, '*?', 'm')
    do sx=1 to m.st.0 while ix > 0
        if sx > m.st.0 then
            call err 'matchTrans('mask',' st') has only' ,
                                     m.st.0 'variables'
        r = r || substr(mask, ox, ix-ox)m.st.sx
        ox = ix+1
        ix = verify(mask, '*?', 'm', ox)
        end
    if ix > 0 then
        call err 'matchTrans('mask',' st') has only' ,
                                     m.st.0 'variables'
    return r || substr(mask, ox)
endProcedure matchTrans
/* copy match end *****************************************************/
/* copy csm begin ******************************************************
    interface to csm,
        it is integrate with adrTso, eg. dsnAlloc , 'RZ3/..' uses csm
***********************************************************************/
adrCsm:
    return adrTso('csmExec' arg(1), arg(2))
endProcedure adrCsm

csmCopy: procedure expose m.
parse arg csnFr, csnTo, ggRet
    if dsnGetMbr(csnTo) \= '' ,
         & dsnGetMbr(csnFr) <> dsnGetMbr(csnTo) then
        call err 'member rename' csnFr 'to' csnTo
    parse value csmSysDsn(csnFr) with sysFr '/' dsnFr
    parse value csmSysDsn(csnTo) with sysTo '/' dsnTo
    if sysFr = '*' & sysTo <> '*' then do
        pdsTo = dsnSetMbr(dsnTo)
        al = "SYSTEM("sysTo") DDNAME(COPYTo)",
             "DATASET('"pdsTo"') DISP(SHR)"
        alRes = dsnAlloc(systo'/'pdsTo, ,'COPYTO', '*')
        if datatype(alRes, 'n') then do
                   /* wir müssen es selbst allozieren csmxUtil
                      vergisst management class ||||| */
            say 'could not allocate' al
            say 'trying to create'
            rc = listDsi("'"dsnSetMbr(dsnFr)"' SMSINFO")
            if rc = 0 then
                mv = ''
            else if rc = 4 & sysReason = 19 then do
                mv = 'UNITCNT(30)'
                say 'multi volume' mv
                end
            else if rc \= 0 then
                call err 'listDsi rc' rc 'reason' sysReason,
                                     sysMsgLvl1 sysMsgLvl2
            al = left(al, length(al)-4)'CAT)'
            if right(sysDsSms, 7) == 'LIBRARY' ,
                | abbrev(sysDsSms, 'PDS') then
                 al = al 'DSNTYPE(LIBRARY)'
            if sysUnits = 'TRACK' then
                sysUnits = 'TRACKS'
            al = al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
                "RECFM("sysREcFM") LRECL("SYSLRECL")",
                "blksize("sysBLkSIZE")",
                "SPACE("sysPrimary"," sysSeconds")" sysUnits mv
            call adrCsm "allocate" al
            end
        call adrTso 'free dd(copyTo)'
        end
    c = "'COPY" sysFr"/''"dsnFr"'' TO" ,
                        sysTo"/''"dsnSetMbr(dsnTo)"'' REPLACE'"
    return adrTso("exec 'CSM.RZ1.P0.EXEC(CSRXUTIL)'" c , ggRet)
    return
endProcedure csmCopy

csmAlloc: procedure expose m.
parse arg dsn dd disp rest ':' nn, retRc
    sys = ''
    a2 = ''
    parse value csmSysDsn(dsn) with sys '/' dsn
    if disp = '' then
        disp = 'shr'
    al = "SYSTEM("sys") DDNAME("dd")"
    if dsn <> '' then do
        a2 = "DATASET('"dsnSetMbr(dsn)"')"
        mbr = dsnGetMbr(dsn)
        if mbr <> '' then
            a2 = a2 'MEMBER('mbr')'
        end
    if abbrev(disp, 'SYSOUT(') then
        a2 = a2 disp
    else
        a2 = a2 "DISP("disp")"
    if retRc <> '' | nn = '' then do
        alRc = adrCsm('allocate' al a2 rest, retRc)
        if alRc <> 0 then
            return alRc
        return dd 'call adrTso "free dd('dd')";'
        end
    do retry=0 by 1
        alRc = adrCsm('allocate' al a2 rest, '*')
        if alRc = 0 then
            return dd 'call adrTso "free dd('dd')";'
        if retry > 0 | nn = '' | wordPos(disp, 'OLD SHR') < 1 then
            return err('cmsAlloc rc' alRc 'for' al rest)
        say 'csmAlloc rc' alRc 'for' al a2 rest '...trying to create'
        nn = al 'disp(cat)' dsnCreateAtts(dsn, nn, 1)
        call adrCsm 'allocate' nn
        call adrTso 'free  dd('dd')'
        end
endProcedure csmAlloc

csmSysDsn: procedure expose m.
parse upper arg dsn, withStar
    if pos('/', dsn) < 1 then
        sys = '*'
    else
        parse var dsn sys '/' dsn
    if sys <> '' & sys <> '*' & sys <> sysvar(sysnode) then
        return sys'/'dsn
    else if withStar == 0 then
        return dsn
    else
        return '*/'dsn
endProcedure csmSysDsn
/* copy csm end********************************************************/
/* copy sqlO   begin ***************************************************
    sql interface  mit  o und j Anbindung
***********************************************************************/
sqlOini: procedure expose m.
    if m.sqlO.ini == 1 then
        return
    call sqlIni
    m.sqlO.ini = 1
    m.sqlO.cursors  = left('', 200)
    call jIni
    call classNew 'n SqlResultRdr u JRWO', 'm',
        , "jReset m.m.cursor = arg; m.m.type = arg2;",
        , "jOpen  call sqlResultRdrOpen m, opt",
        , "jClose call sqlClose m.m.cursor",
        , "jReadO return sqlSelReadO(m)"
    call classNew 'n SqlSel u JRWO', 'm',
        , "jReset m.m.src = arg; m.m.type = arg2;",
        , "jOpen  call sqlSelOpen m, opt",
        , "jClose call sqlSelClose m",
        , "jReadO return sqlSelReadO(m)"
    call classNew 'n SqlDRS u SqlSel', 'm',
        , "jReset m.m.loc = arg; m.m.type = arg2;",
        , "jOpen  call sqlDRSOpen m, opt",
        , "jClose call sqlSelClose m",
        , "jReadO return sqlSelReadO(m)"
    call classNew 'n SqlRxConnection u', 'm',
        , "sqlQuery  return sqlRxQuery(cx, src, retOk)",
        , "sqlFetch  return sqlRxFetch(cx, dst, retOk)",
        , "sqlClose  return sqlRxClose(cx, retOk)",
        , "sqlUpdate return sqlRxUpdate(cx, src, retOk)",
        , "sqlCall   call err 'implement sqlRxCall"
    call classNew 'n SqlRxStatement u', 'm',
        , "sqlQuery  return sqlRxQuery(m.cx.cursor, src, retOk)",
        , "sqlFetch  return sqlRxFetch(m.cx.cursor, dst, retOk)",
        , "sqlClose  return sqlRxClose(m.cx.cursor, retOk)",
        , "sqlUpdate return sqlRxUpdate(m.cx.cursor, src, retOk)",
        , "sqlCall   call err 'implement sqlRxCall"
    call classNew 'n SqlCsmConnection u', 'm',
        , "sqlQuery  return sqlCsmQuery(cx, src, retOk)",
        , "sqlFetch  return sqlCsmFetch(cx, dst)",
        , "sqlClose  return 0",
        , "sqlUpdate call err 'implement sqlCsmUpdate'"   ,
        , "sqlCall   call err 'implement sqlCsmCall'"
    call classNew 'n SqlCsmStatement u', 'm',
        , "sqlQuery  return sqlCsmQuery(m.cx.cursor, src, retOk)",
        , "sqlFetch  return sqlCsmFetch(m.cx.cursor, dst)",
        , "sqlClose  return 0",
        , "sqlUpdate call err 'implement sqlCsmUpdate'"   ,
        , "sqlCall   call err 'implement sqlCsmCall'"
    return 0
endProcedure sqlOini
/*--- execute a query from sql, with one resultset -------------------*/
sqlQuery: procedure expose m.
parse arg cx, src, retOk, m.sql.cx.type
    if m.sql.cx.type \== '' then
        m.sql.cx.type = class4Name(m.sql.cx.type)
    if datatype(cx, 'n') then
        interpret objMet(m.sql.connection, 'sqlQuery')
    else
        interpret objMet(cx, 'sqlQuery')
/*--- fetch next row to m.dst.* at end return false ------------------*/
sqlFetch: procedure expose m.
parse arg cx, dst, retOk
    if datatype(cx, 'n') then
        interpret objMet(m.sql.connection, 'sqlFetch')
    else
        interpret objMet(cx, 'sqlFetch')
/*--- close cursor 'c'cx ---------------------------------------------*/
sqlClose: procedure expose m.
parse arg cx, retOk
    if datatype(cx, 'n') then
        interpret objMet(m.sql.connection, 'sqlClose')
    else
        interpret objMet(cx, 'sqlClose')
    return 0
/*-- execute an sql with no resultset, but possibly outParms ---------*/
sqlUpdate: procedure expose m.
parse arg cx, src, retOk
    if cx == '' | datatype(cx, 'n') then
        interpret objMet(m.sql.connection, 'sqlUpdate')
    else
        interpret objMet(cx, 'sqlUpdate')
    return sqlCsmUpdate(cx, src, retOk)
/*-- execute an sql call with outParms and multiple resultSets -------*/
sqlCall: procedure expose m.
parse arg cx, src, retOk
    if cx == '' | datatype(cx, 'n') then
        interpret objMet(m.sql.connection, 'sqlCall')
    else
        interpret objMet(cx, 'sqlCall')
    return sqlCsmUpdate(cx, src, retOk)
/*--- connect to the db2 subsystem sys -----------------------------*/
sqlOConnect: procedure expose m.
parse arg sys, retCon
    call sqlOIni
    return sqlConnect(sys, retCon)
endProcedure sqlOConnect

sqlSel: procedure expose m.
parse arg src, type
     s = oNew('SqlSel', inp2str(src, '-sql'), type)
     call pipeWriteAll s
     return m.s.rowCount
endProcedure sqlSel

sqlStmtsOpt: procedure expose m.
parse arg src, opts
    upper opts
    sub = ''
    o = ''
    ggRet = ''
    do wx=1 to words(opts)
        w = word(opts, wx)
        if abbrev(w, '-SQL') then
            o = o'-sql'substr(w, 5)
        else if w == '-O' | w == 'O' then
            o = o'-o'
        else if w = '*' | datatype(w, 'n') then
            ggRet = ggRet w
        else if length(w) == 4 then
            sub = w
        else
            call err 'bad opt' w 'in opts' opts 'not -sql? -o or subsys'
        end
    call sqlOIni
    if sub == '' then
        call sqlOConnect
    else if sub \== m.sql.connected then
        call sqlConnect sub
    return sqlStmts(src, strip(ggRet), strip(o))
endProcedure sqlStmtsOpt

/*** execute sql's in a stream (separated by ;)
       opt: 'o' ==> write objects, otherwise fmtFTab
            's' ==> spufi formatting (window 72) otherwise linebreak */
sqlStmts: procedure expose m.
parse arg src, ggRet, opt
   dlm = ';'
   isStr = oStrOrObj(src, m.j.in)
   fLen = ''
   if pos('sql', opt) > 0 then
       fLen = word(substr(opt, pos('sql', opt)+3), 1)
   if isStr then do
       m.sqlStmts.rdr = ''
       call sbSrc sqlStmts, ggStr
       end
   else do
       fi = jOpen(o2File(ggObj), '<')
       call jCatSqlReset sqlStmts, , fi, fLen
       end
   do forever
       s1 = jCatSqlNext(sqlStmts, dlm)
       if s1 = '' then
           leave
       w1 = translate(word(s1, 1))
       if w1 == 'TERMINATOR' then do
            dlm = strip(substr(m.s.val, 12))
            if length(dlm) \== 1 then
                call scanErr s, 'bad terminator' dlm 'in' strip(m.s.val)
            iterate
            end
       call out sqlStmt(s1, ggRet, opt)
       end
   if \ isStr then
       call jClose fi
   return 0
endProcedure sqlStmts

sqlStmt: procedure expose m.
parse arg src, retOk, opt
    cx = sqlGetCursor()
    r1 = sqlExecute(cx, src, retOK)
    res = 'sqlCode' r1
    if wordPos(m.sql.cx.fun, 'DELETE INSERT UPDATE') > 0 then
        res = res',' m.sql.cx.updateCount 'rows' ,
              translate(fun, m.mAlfLC, m.mAlfUC)'d'
    else if m.sql.cx.updateCount\=='' & m.sql.cx.updateCount\=0 then
        res = res',' m.sql.cx.updateCount 'rows updated'
    aa = strip(src)
    if m.sql.cx.resultSet \== '' then do
        rdr = sqlResultRdr(cx)
        if pos('o', opt) > 0 then
            call pipeWriteAll rdr
        else
            call fmtFTab sqlStmtFmt, rdr
        res = m.rdr.rowCount 'rows fetched'
        end
    ll = 75 - length(res)
    if length(aa) > ll then
        aa = space(aa, 1)
    if length(aa) > ll then
        aa = left(aa,  ll-3)'...'
    call sqlFreeCursor cx
    return res':' aa
endProceduire sqlStmt

removeSqlStmt: procedure expose m.
parse arg src, ggRet, opt
    bx = verify(src, '( ')
    if bx < 1 then
        return ''
    fun = translate(word(substr(src, bx), 1))
    w2  = translate(word(substr(src, bx), 2))
    res = ''
    if fun == 'SELECT' | fun = 'WITH' then do
        s = oNew('SqlSel', inp2str(src, '%S%+Q\s'))
        if pos('o', opt) > 0 then
            call pipeWriteAll s
        else
            call fmtFTab sqlStmtFmt, s
        res = m.s.rowCount 'rows fetched'
        end
    else if  fun = 'SET' &  abbrev(w2, ':') then do
        ex = pos('=', w2)
        if ex > 2 then
            var = strip(substr(w2, 2, ex-2))
        else
            var = strip(substr(w2, 2))
        if var = '' then
            var = 'varUnbekannt'
        call sqlExec src, ggRet
        res = 'sqlCode' sqlCode var'='value(var)
        end
    else if fun = 'SET' | (fun = 'DECLARE' & w2 = 'GLOBAL') then do
        call sqlExImm src, ggRet
        res = 'sqlCode' sqlCode
        end
    else if fun = 'CALL' then do
        res = sqlStmtCall(src, ggRet, opt)
        end
    else do
        if pos('-', ggRet) < 1 & fun = 'DROP' then
            ggRet = -204 ggRet
        call sqlExec src, ggRet
        res = 'sqlCode' sqlCode
        if wordPos(fun, 'DELETE INSERT UPDATE') > 0 THEN
            res = res',' sqlErrd.3 'rows' ,
                  translate(fun, m.mAlfLC, m.mAlfUC)'d'
        end
    aa = strip(src)
    ll = 75 - length(res)
    if length(aa) > ll then
        aa = space(aa, 1)
    if length(aa) > ll then
        aa = left(aa,  ll-3)'...'
    return res':' aa
endProcedure removeSqlStmt

sqlStmtCall: procedure expose m.
parse arg src, ggRet, opt
    s = scanSrc(scanSqlReset(sqlstmtcall, ,0), src)
    if \ scanSqlId(scanSkip(s)) | m.s.val \== 'CALL' then
        call scanErr s, 'not a call'
    if \ scanSqlQuId(scanSkip(s)) then
        call scanErr s, 'qualified id missing after call'
    loc = ''
    if m.s.val.0 = 1 then
        wh = 'name =' quote(m.s.val.1, "'")
    else if m.s.val.0 = 2 then
        wh = "schema = '"strip(m.s.val.1)"'" ,
             "and name = '"strip(m.s.val.2)"'"
    else if m.s.val.0 = 3 then do
        loc = m.s.val.1
        wh = "schema = '"strip(m.s.val.2)"'" ,
             "and name = '"strip(m.s.val.3)"'"
        end
    else
        call scanErr s, 'storedProcedureName' m.s.val ,
               'has' m.s.val.0 'parts, should have 1, 2 or 3'
    pn = m.s.val
    da = sqlStmtCallDa(sqlStmtCall, loc, wh)
    if \ scanLit(scanSkip(s), '(') then
        call scanErr s, '( expected after call' pn
    varChars = f
    do ax=1
        m.da.ax.varName = ''
        isEmpty = 0
        if scanLit(scanSkip(s), ':') then do
             if \ scanVerify(scanSkip(s), m.mAlfDot) then
                 call scanErr s, 'variable expected after : in call' pn
             m.da.ax.varName = m.s.tok
             if m.da.ax.io == 'i' | m.da.ax.io == 'b' then
                 m.da.ax.sqlData = envGet(m.da.ax.varName)
             end
        else if scanString(s) then
            m.da.ax.sqlData = m.s.val
        else if scanVerify(s, ',):;', 'm') then
            m.da.ax.sqlData = strip(m.s.tok)
        else
            isEmpty = 1
        if scanLit(scanSkip(s), ')') then
            leave
        if \ scanLit(s, ',') then
            call scanErr s, if(isEmpty, 'value, var, ') ,
                         || "',' or ')' expected"
        end
    if ax \= m.da.sqlD then
        if \ (ax=1 & m.da.sqlD = 0 & isEmpty) then
            call scanErr s, 'call with' ax 'parms but' ,
                                pn 'needs' m.da.sqld
    caCo = sqlExec('call' pn 'using descriptor :M.'da, 466)
    call out '--- called' pn', sqlCode' caCo
    do ax=1 to m.da.sqlD
        call Out '  parm' ax m.da.ax.io m.da.ax.parmName,
                 || if(m.da.ax.varName \== '',' $'m.da.ax.varName),
               '=' m.da.ax.sqlData
        if m.da.ax.varName \== '' then
            call envPut m.da.ax.varName, m.da.ax.sqlData
        end
    if caCo = 466 then do
        drop sqlDP
        call sqlExec 'describe procedure :pn into :m.sqlDp'
        if m.sqldp.sqlD < 1 then
             call err 'bad sqldp sqlD='m.sqldp.sqlD 'for sqlCode' caCo
        do dx=1 to m.sqldp.sqlD
            call out '  dynamic result set' dx m.sqldp.dx.sqlName ,
                     'locator='m.sqldp.dx.sqlLocator
            end
        do dx=1 to m.sqldp.sqlD
            drs = 'dynamic result set' dx'='m.sqldp.dx.sqlName 'of' pn
            call out '--- begin of' drs
            rdr = sqlDRS(m.sqldp.dx.sqlLocator)
            if pos('o', opt) > 0 then
                call pipeWriteAll rdr
            else
                call fmtFTab sqlStmtFmt, rdr
            call out '---' m.rdr.rowCount 'rows fetched from' drs
            end
        end
    return 'sqlCode' caCo
endProcedure sqlStmtCall

sqlStmtCallDa: procedure expose m.
parse arg da, loc, wh
    cr = if(loc=='',,loc'.')'sysIbm'
    sql = "select 'SCHEMA=''' || strip(schema) || ''''",
             "|| ' and name='''   || strip(name  ) || ''''",
             "|| ' and specificName=''' || strip(specificName) || ''''",
             "|| ' and routineType =''' || strip(routineType ) || ''''",
             "|| ' and VERSION     =''' || strip(VERSION     ) || ''''",
          "from" cr".SysRoutines ",
          "where" wh "and active = 'Y'"
    if sqlpreAllCl(49, sql, rou, ':m.rou') <> 1 then
        call err m.rou.0 'routines found for' wh
    rdr = jOpen(sqlRdr('select * from' cr'.sysParms where' m.rou,
         'order by ordinal'), '<')
    do ix=1 while assNN('A', jReadO(rdr))
         if m.a.ordinal <>  ix then
             call err 'ix' ix 'mismatch ordinal' m.a.ordinal
         ty = m.a.dataTypeId
         m.da.ix.sqlType = ty
         m.da.ix.sqlLen  = m.a.length
         m.da.ix.sqlLen.sqlPrecision = m.a.length
         m.da.ix.sqlLen.sqlScale     = m.a.scale
         if wordPos(ty, 384 385) > 0 then        /* date */
             m.da.ix.sqlLen  = 10
         else if wordPos(ty, 388 389) > 0 then   /* time */
             m.da.ix.sqlLen  = 8
         else if wordPos(ty, 392 393) > 0 then   /* timestamp */
             m.da.ix.sqlLen  = 26
         m.da.ix.sqlData = ''
         m.da.ix.parmName= m.a.parmName
         m.da.ix.io      = translate(m.a.rowType, 'iob', 'POB')
         m.da.ix.sqlInd  = 1
         end
    m.da.sqlD = ix - 1
    return da
endProcedure sqlStmtCallDa

sqlResultRdr: procedure expose m.
parse arg cx, type
     return oNew('SqlResultRdr', cx, type)
endProcedure sqlRdr

sqlRdr: procedure expose m.
parse arg src, type
     return oNew('SqlSel', inp2str(src, '%S%+Q\s'), type)
endProcedure sqlRdr

sqlResultRdrOpen: procedure expose m.
parse arg m, opt
    if opt\== m.j.cRead then
        call err 'opt not' m.j.cRead 'sqlResultRdrOpen('m',' opt')'
    m.m.jReading = 1
    m.m.rowCount = 0
    return m
endProcedure sqlResultRdrOpen

/*--- prepare and open cursor
      generate type and fetchList ------------------------------------*/
sqlSelOpen: procedure expose m.
parse arg m, opt
    m.m.cursor = sqlGetCursor()
    call sqlQuery m.m.cursor, m.m.src, ,m.m.type  /* ????? */
    return sqlResultRdrOpen(m, opt)
endProcedure sqlOpen

/*--- dynamic result sets --------------------------------------------*/
sqlDRS: procedure expose m.
parse arg loc, type
     return oNew('SqlDRS', loc, type)
endProcedure sqlDRS

sqlDRSOpen: procedure expose m.
parse arg m, opt
    if opt\== m.j.cRead then
        call err 'opt not' m.j.cRead 'sqlDRSOpen('m',' opt')'
    crs = sqlGetCursor('a')
    crN = 'C'crs
    m.m.cursor = crs
    call sqlexec 'allocate C'crs 'cursor for result set :m.m.loc'
    call sqlExec('describe cursor :crN into :M.SQL.'crs'.D')
    m.m.jReading = 1
    m.m.rowCount = 0
    return m
endProcedure sqlDRSOpen

/*--- return a free cursor -------------------------------------------*/
sqlGetCursor: procedure expose m.
parse arg rng
    if rng == '' then
        return sqlGetCursorRng(rng, 10, 49)
    else if rng == 'h' then
        return sqlGetCursorRng(rng, 60, 99)
    else if rng == 'a' then
        return sqlGetCursorRng(rng, 110, 199)
    else
        call err 'bad cursor range' rng
endProcedure sqlGetCursor

sqlGetCursorRng: procedure expose m.
parse arg rng, fr, to
    cx = pos(' ', m.sqlO.cursors, fr)
    if cx < fr & cx > to then
        call err "no more '"rng"' cursors between" fr "and" to,
                 ":"m.sqlO.cursors
    m.sqlO.cursors = overlay('u', m.sqlO.cursors, cx)
    return cx
endProcedure sqlGetCursorRNG

/*--- mark a cursor as closed ----------------------------------------*/
sqlFreeCursor: procedure expose m.
parse arg cx
    if substr(m.sqlo.cursors, cx, 1) \== 'u' then
         call err 'sqlFreeCursor('cx') not in use :'m.sqlo.cursors
    m.sqlO.cursors = overlay(' ', m.sqlO.cursors, cx)
    return
endProcedure sqlFreeCursor
/*--- create the type, fetch vars etc. from the sqlDA ---------------*/
sqlFetchClass: procedure expose m.
parse arg cx
    if m.sql.cx.type = '' then do
        ff = mCat('SQL.'cx'.COL', '%+Q v, f ')
        m.sql.cx.type = classNew('n* SQL u f' ff 'v')
        end
    return m.sql.cx.type
endProcedure sqlFetchClass

/*--- fetch cursor for this sqlSel -----------------------------------*/
sqlSelReadO: procedure expose m.
parse arg m
    cx = m.m.cursor
    v = mNew(sqlFetchClass(cx))
    if \ sqlFetch(cx, v) then
        return ''
    m.m.rowCount = m.m.rowCount + 1
    return v
endProcedure sqlSelReadO

/*--- close sql Cursor -----------------------------------------------*/
sqlSelClose: procedure expose m.
parse arg m, v
    call sqlClose m.m.cursor
    call sqlFreeCursor m.m.cursor
    m.m.cursor = ''
    return m
endProcedure sqlSelClose
/*--- generate the format ff for a sql cx as specified in sp
          use the information from the sqlDa -------------------------*/
deleteSqlGenFmt: procedure expose m.
parse arg ff, cx, sp
    if abbrev(sp, '=') then
        return substr(sp, 2)
    if sp = '' then
        sp = '*st'
    m.ff.0 = m.sql.cx.d.sqlD
    m.ff.flds = oFlds(sqlType(cx))
    if abbrev(sp, '*') then do
        do ix=1 to m.ff.0
            m.ff.ix = substr(sp, 2)
            end
        return ff
        end
    if abbrev(fmts, '=') then
        m.Sql.cx.FMT = substr(fmts, 2)
    defs = 'ir7 fr9 sl12 Tl26' sp
    do wx = 1 to words(defs)
        parse value word(defs, wx) with ty 2 fo
        select
            when ty = 'd' then      t.384 = fo
            when ty = 'f' then      t.480 = fo'/f'
            when ty = 'i' then      t.496 = fo'/i'
            when ty = 'n' then      t.484 = fo'/n'
            when ty = 's' then      t.448 = fo
            when ty = 't' then      t.388 = fo
            when ty = 'T' then      t.392 = fo
            otherwise          call err 'bad type' ty 'for format' fo
            end
        end
    if symbol('t.496') == 'VAR' then
        t.500 = t.496
    if symbol('t.448') == 'VAR' then do
        t.452 = t.448
        t.456 = t.448
        t.464 = t.448
        end
    do wx = 1 to m.ff.0
        ty = m.sql.cx.d.wx.sqlType
        le = m.sql.cx.d.wx.sqlLen
        withNulls = ty // 2
        ty = ty - withNulls
        if symbol('t.ty') <> 'VAR' then
            call err 'sqlType' ty 'not supported'
        parse var t.ty fo 2 fl '/' op
        if op = 'i' then
             if le = 2 then le = 6
             else           le = 12
        else if op <> '' then
            call err 'length for sqlType' ty 'op' op 'not implemented'
        if fl = '=' then
            fl = le
        else if abbrev(fl, '<') then
            fl = min(le, substr(fl, 2))
        m.ff.wx = fo || fl
        end
    return ff
endProcedure sqlGenFmt
/* copy sqlO   end   **************************************************/
/* copy sqlCsm begin **************************************************/
/*--- send an sql to csm an handle sqlCode ---------------------------*/
sqlCsmExe:
parse arg cx, ggSqlStmt, ggRetOk
    sql_HOST =  m.sql.conHost
    SQL_DB2SSID = m.sql.conSSID
    sql_query = ggSqlStmt
    address tso "CSMAPPC START PGM(CSMASQL)"
    if \ (rc = 0 |  rc = 4) then
        call err 'csmappc rc' rc
    if sqlCode = 0 then
        return 0
    else if pos('*', ggRetOk) > 0 | wordPos(sqlCode, ggRetOk) > 0 ,
            then do
        if sqlCode < 0 & pos('say', ggRetOk) > 0 then
            call errSay sqlmsg(sqlCA2Rx(sqlCa))
        return sqlCode
        end
    else if sqlCode < 0 then
        call err sqlmsg(sqlCA2rx(sqlCa))
    else if pos('w', ggRetOk) < 1 then
        if sqlCode = 100 then
            call errSay 'sqlCode +100 row not found\nstmt =' ggSqlStmt
        else
            call errSay sqlMsg(sqlCA2rx(sqlCa)), ,'w'
    return sqlCode
endProcedure sqlCsmExe

/*--- execute a query from sql, with one resultset -------------------*/
sqlCsmQuery: procedure expose m.
parse arg cx, sqlSrc, retOk, src
    res = sqlCsmExe(cx, sqlSrc, 100 retOk)
    if res < 0 then
        return res
    f = m.sql.cx.type
    if src == '' then
        src = 'SQL.'cx'.DATA'
    m.sql.cx.data = src
    if f \== '' then do
        f = f'.FLDS'
        if m.f.0 < sqlD then
            call err 'not enough fields in type'
        end
    do kx=1 to sqlD
        rxNa = SQLDA_REXXNAME.kx
        cn = sqlVarName(f, kx, sqlDa_name.kx)
        m.sql.cx.col.kx = cn
        do rx=1 to sqlRow#
            if substr(sqlIndicator.rx, kx ,1) == 'ff'x then
                m.src.rx.cn = m.sqlNull
            else
                m.src.rx.cn = value(rxNa'.'rx)
            end
        end
    m.src.0 = sqlRow#
    m.sql.cx.col.0 = sqlD
    m.sql.cx.daIx = 0
    return 0
endProcedure sqlCsmQuery

sqlCsmFetch: procedure expose m.
parse arg cx, dst
    src = m.sql.cx.data
    rx = m.sql.cx.daIx + 1
    if rx > m.sql.cx.data.0 then
        return 0
    m.sql.cx.daIx = rx
    do kx = 1 to m.sql.cx.col.0
        c = m.sql.cx.col.kx
        m.dst.c = m.src.rx.c
        end
    return 1
endProcedure sqlCsmFetch
/* copy sqlCsm end   **************************************************/
/* copy sql    begin ***************************************************
    sql interface
***********************************************************************/
/*--- initialize sqlRx (belongs to sqlQ, but currently only one|) ----*/
sqlIni: procedure expose m.
    if m.sql.ini == 1 then
        return
    m.sqlNull = '---'
    m.sqlInd = 'sqlInd'
    m.sqlRetOK.0 = 0
    m.sqlCAMsg = 0
    m.sqlSuMsg = 2
    call sqlPushRetOk
    m.sql.ini = 1
    m.sql.conType = ''
    return 0
endProcedure sqlIni

/*--- connect and/or disconnect to DB2 -------------------------------*/
sqlConnect: procedure expose m.
parse upper arg sys, retOk
    if sys \== '' then
        nop
    else if sysvar(sysnode) == 'RZ1' then
        sys = 'DBAF'
    else
        call err 'no default subsys for' sysvar(sysnode)
    call sqlOIni
    hst = ''
    if pos('/', sys) > 0 then do
        parse value space(sys, 0) with hst '/' sys
        cTy = 'Csm'
        end
    else do
        cTy = 'Rx'
        end
    if m.sql.conType == cTy & m.sqlHost==hst & m.sqlConSSID == sys then
        return 0
    if m.sql.conType \== '' then
        call sqlDisconnect
    res = 0
    if cTy = 'Rx' then
        res = sqlRxConnect(sys, retOk)
    if res < 0 then
        return res
    m.sql.conType = cTy
    m.sql.conhost = hst
    m.sql.conSSID = sys
    m.sql.connection = oNew('Sql'cTy'Connection')
    return res
endProcedure sqlConnect

sqlDisconnect: procedure expose m.
parse arg retOk
    if m.sql.conType == 'Rx' then
        call sqlRxDisconnect
    m.sql.conType = ''
    m.sql.conhost = ''
    m.sql.conSSID = ''
    return 0
endProcedure sqlDisonnect

/*--- execute a query from sql, with one resultset -------------------*/
sqlRxQuery: procedure expose m.
parse arg cx, src, retOk
     m.sql.cx.updateCount = ''
     m.sql.cx.resultSet   = ''
     m.sql.cx.needDesc    = 1
     res = sqlPrepare(cx, src, retOk, 1)
     if res < 0 then
         return res
     res = sqlExec('declare c'cx 'cursor for s'cx, retOk)
     if res < 0 then
         return res
     res = sqlExec('open c'cx, retOk)
     if res < 0 then
         return res
     call sqlRxFetchVars cx
     m.sql.cx.updateCount = sqlErrd.3
     m.sql.cx.resultSet = cx
     return res
endProcedure sqlRxQuery

/*--- fetch next row to m.dst.* at end return false ------------------*/
sqlRxFetch: procedure expose m.
parse arg cx, dst, retOk
    if retOk == '' then
        retOk = 100 m.sqlRetOk
    fetCode = sqlExec('fetch c'cx 'into' sqlRxFetchVars(cx), retOk)
    if fetCode == 100 then
        return 0
    if fetCode < 0 then
        return fetCode
    call sqlSetNull cx, dst
    return 1
endProcedure sqlRxFetch

/*--- close cursor 'c'cx ---------------------------------------------*/
sqlRxClose: procedure expose m.
parse arg cx, retOk
     return sqlExec('close c'cx, retOk)
endProcedure sqlRxClose

/*-- execute an sql with no resultset, but possibly outParms ---------*/
sqlRxUpdate: procedure expose m.
parse arg cx, src, retOk
    m.sql.cx.updateCount = ''
    m.sql.cx.resultSet   = ''
    bx = verify(src, '( ')
    if bx > 0 then
        fun = translate(word(substr(src, bx), 1))
    if  fun = 'SET' then do
        w2 = translate(word(substr(src, bx), 2))
        if \ abbrev(w2, ':') then
            return sqlExImm(src, ggRet)
        trace ?r
        ex = pos('=', w2)
        if ex = 0 then
            ex = length(w2)+1
        var = strip(substr(w2, 2, ex-2))
        if var = '' then
            call err 'bad hostVar in' src
        m.sql.outVar = var
        src2 = 'set :M.sql.out.'var substr(w, ex) subword(src, 3)
        return sqlExec(src2, ggRet)
        end
    if fun == 'DECLARE'  then do
        if 'GLOBAL' == translate(word(substr(src, bx), 2)) then
            return sqlExImm(src, ggRet)
        end
    res = sqlExec(src, ggRet)
    if wordPos(fun, 'DELETE INSERT UPDATE') > 0 then
        m.sql.cx.updateCount = sqlErrd.3
    return res
endProcedure sqlRxUpdate

/*-- execute a query, update or call ---------------------------------*/
sqlExecute: procedure expose m.
parse arg cx, src, retOk
    src = inp2Str(src, '-sql')
    f = translate(word(substr(src, max(verify(src, '( '), 1)), 1))
    m.sql.cx.fun = f
    if f == 'SELECT' | fun == 'WITH' then
        return sqlQuery(cx, src, retOk)
    else if f == 'CALL' then
        call err 'implement sql call for:' src
    else
        return sqlUpdate(cx, src, retOk)
endProcedure sqlExecute

/*-- execute a query, copy result to stem ----------------------------*/
sql2St: procedure expose m.
parse arg src, dst, retOk, type
    cx = sqlGetCursor()
    res = sqlQuery(cx, src, retOk, type)
    if res >= 0 then do
        do sx=1 while sqlFetch(cx, dst'.'sx)
           end
        res = sx-1
        end
    m.dst.0 = res
    call sqlClose cx
    call sqlFreeCursor cx
    return res
endProcedure sql2St

/*-- execute a query and return value of the first column
           if > 1 row fail, if 0 rows return arg(3) or fail ----------*/
sql2One: procedure expose m.
parse arg src, dst
    cx = sqlGetCursor()
    call sqlQuery cx, src
    if \ sqlFetch(cx, dst) then
        if arg() > 2 then
            return arg(3)
        else
            call err 'no row returned for:' src
    if sqlFetch(cx, dst.2) then
        call err '2 or more rows for' src
    c1 = m.sql.cx.col.1
    res = m.dst.c1
    call sqlClose cx
    call sqlFreeCursor cx
    return res
endProcedure sql2One

/*--- prepare statement 's'cx from sql src into descriptor desc ------*/
sqlPrepare: procedure expose m.
parse arg cx, src, ggRetOk, descOut
     s = ''
     src = inp2str(src, '%+Q\s')
     m.sql.cx.d.sqlD = 'noSqlDA'
     m.sql.cx.i.sqlD = 'noDescInp'
     m.sql.cx.fetchVars = ''
     m.sql.cx.col.0 = ''
     m.sql.cx.into = ''
     if descOut == 1 then
         s = 'into :M.SQL.'cx'.D'
     return sqlExec('prepare s'cx s 'from :src', ggRetOk)
endProcedure sqlPrepare

/*--- open cursor 'c'cx using arguments arg(2), arg(3)... ------------*/
sqlOpen: procedure expose m.
parse arg cx
    if arg() <=  1 then
        return sqlExec('open c'cx)
    call sqlDescribeInput cx
    do ix=1 to arg()-1
        call sqlDASet cx , 'I', ix, arg(ix+1)
        end
    return sqlExec('open c'cx 'using descriptor :M.SQL.'cx'.I')
endProcedure sqlOpen

/*--- describe output (if not already done)
         and return size of sqlDa ------------------------------------*/
sqlDescribeOutput: procedure expose m.
parse arg cx, force
    if force == 1 | \ datatype(m.sql.cx.d.sqlD, 'n') then
         call sqlExec 'describe s'cx 'into :M.SQL.'cx'.D', 0
    return m.sql.cx.d.sqlD
endProcedure sqlDescribeOutput

/*--- describe input (if not already done)
         and return size of input sqlDA ------------------------------*/
sqlDescribeInput: procedure expose m.
parse arg cx, force
    if force == 1 | \ datatype(m.sql.cx.i.sqlD, 'n') then
         call sqlExec 'describe input s'cx 'into :M.SQL.'cx'.I'
    return m.sql.cx.i.sqlD
endProcedure sqlDescribeInput

/*--- put sqlNull in all vars where indicator says so ---------------*/
sqlSetNull: procedure expose m.
    parse arg cx, dst
    do nx=1 to m.sql.cx.sqlNull.0
        col = m.sql.cx.sqlNull.nx
        if m.dst.col.sqlInd < 0 then
            m.dst.col = m.sqlNull
        end
    return
endProcedure sqlSetNull

/*--- use describe output to generate column names,
                fetchVariables and sqlNull names ---------------------*/
sqlRxFetchVars: procedure expose m.
parse arg cx
    if m.sql.cx.fetchVars \== '' then
        return m.sql.cx.fetchVars
    call sqlDescribeOutput cx
    f = m.sql.cx.type
    if f \== '' then do
        f = f'.FLDS'
        if m.f.0 < m.sql.cx.d.sqlD then
            call err 'not enough column names'
        end
    m.sql.cx.col.0 = m.sql.cx.d.sqlD
    nx = 0
    vars = ''
    do kx=1 to m.sql.cx.d.sqlD
        cn = sqlVarName(f, kx, m.sql.cx.d.kx.sqlName)
        m.sql.cx.col.kx = cn
        vars = vars', :m.dst.'cn
        if m.sql.cx.d.kx.sqlType // 2 = 1 then do
            vars = vars' :m.dst.'cn'.sqlInd'
            nx = nx + 1
            m.sql.cx.sqlNull.nx = cn
            end
        end
    m.sql.cx.sqlNull.0 = nx
    m.sql.cx.fetchVars = substr(vars, 3)
    return m.sql.cx.fetchVars
endProcedure sqlRxFetchVars

sqlVarName: procedure expose m. sqlVarName.
parse arg f, kx, sNa
    if f == '' then do
        cn = translate(word(sNa, 1))
        if cn == '' | symbol('sqlVarName.cn') == 'VAR' then
                cn = 'COL'kx
        sqlVarName.cn = 1
        return cn
        end
    else do
        if m.f.kx == '' then
            call err 'implement empty varName'
        return substr(m.f.kx, 2)
        end
endProcedure sqlVarName
/*--- set one value in a DA, handle nulls ----------------------------*/
sqlDASet: procedure expose m.
parse arg cx, da, ix, val
    m.sql.cx.da.ix.sqlData = val
    m.sql.cx.da.ix.sqlInd = - (val == m.sqlNull)
    /* data types schienen einmal nicht zu funktionieren .......
    if wordPos(m.da.ix.sqlType, '384 385 388 389 392 393') > 0 then
        m.da.ix.sqlType = 448 + (m.da.ix.sqlType // 2) */
    return
endProcedure sqlDASet

sqlExImm:
parse arg ggSrc, ggRetOk
     return sqlExec('execute immediate :ggSrc', ggRetOk)
endProcedure sqlExImm

sqlCommit: procedure expose m.
parse arg src
     return sqlExec('commit')
endProcedure sqlCommit

/*--- execute sql thru the dsnRexx interface -------------------------*/
sqlExec: /* no procedure, to keep variables sql... */
    parse arg ggSqlStmt, ggRetOk
    address dsnRexx 'execSql' ggSqlStmt
    /* say 'sqlCode' sqlCode 'rc' rc 'for' ggSqlStmt ggNo */
sqlHandleRCSqlCode:
    if rc = 0 then
        return 0
    if ggRetOk = '' then
        ggRetOk = m.sqlRetOk
    if wordPos(rc, '1 -1') < 0 then
        call err 'dsnRexx rc' rc sqlmsg()
    else if pos('*', ggRetOk) > 0 | wordPos(sqlCode, ggRetOk) > 0 ,
            then do
        if sqlCode < 0 & pos('say', ggRetOk) > 0 then
            say 'sqlError' sqlmsg()
        return sqlCode
        end
    else if rc < 0 then
        call err sqlmsg()
/*???lse if sqlCode <> 0 | (pos('w',ggRetOk)<1 & sqlWarn.0^==' ') then*/
    else if (sqlCode <> 0 | sqlWarn.0^==' ') & pos('w',ggRetOk)<1 then
        call errSay sqlMsg(), ,'w'
    return sqlCode
endSubroutine sqlExec

/*--- connect to the db2 subsystem sys -----------------------------*/
sqlRxConnect: procedure expose m.
parse upper arg sys, ggRetOk
    call sqlIni
    address tso "SUBCOM DSNREXX"
    if rc <> 0 then do
       sRc = RXSUBCOM('ADD','DSNREXX','DSNREXX') /* ADD HOST CMD ENV  */
       if sRc <> 0 then
           call err 'rc' sRc 'from RXSUBCOM(ADD, DSNREXX, DSNREXX)'
       end
    if sys = '-' then
        return 0
    ggSqlStmt =  'connect' sys
    address dsnRexx ggSqlStmt
    return sqlHandleRcSqlCode()
endProcedure sqlRxConnect

/*--- diconnect from db2 ---------------------------------------------*/
sqlRxDisconnect: procedure expose m.
parse arg retOk
    ggSqlStmt =  'disconnect'
    address dsnRexx ggSqlStmt
    return sqlHandleRcSqlCode()
endProcedure sqlDisconnect

/*--- send a command to db2 through the TSO dsn processor ------------*/
sqlDsn: procedure expose m.
parse arg st, sys, cmd, rcOk
    x = outtrap('M.'st'.')
    push 'END'
    push cmd
    address tso 'DSN SYSTEM('sys')'
    rr = rc
    x = outtrap(off)
    if rr = 0 | rcOk = '*' | wordPos(rr, rcOk) > 0 then
        return rr
    fl = max(1, m.st.0 - 10)
    em = 'rc' rr 'for DSN SYSTEM('sys') cmd' cmd,
          '\nOuputlines' fl '-' m.st.0':'
    do lx=fl to m.st.0
        em = em '\n' strip(m.st.lx, 't')
        end
    call err em
endProcedure sqlDsn
/*--- push and pop currently accepted sqlCodes -----------------------*/
sqlPushRetOk: procedure expose m.
parse arg rr
    nx = m.sqlRetOk.0 + 1
    m.sqlRetOk.0 = nx
    m.sqlRetOk.nx = rr
    m.sqlRetOk    = rr
    return
endProcedure sqlPushRetOk

sqlPopRetOk: procedure expose m.
    nx = m.sqlRetOk.0 - 1
    if nx < 1 then
        call err 'sqlPopRetOk with .0' m.sqlRetOk.0
    m.sqlRetOk    = m.sqlRetOk.nx
    m.sqlRetOk.0 = nx
    return
endProcedure sqlPopRetOk

/*--- issue an sql error message -------------------------------------*/
sqlMsg: /* no procedure, to keep variables sql... */
    if \ dataType(sqlCode, 'n') then do
        ggRes = 'sqlCode' sqlCode 'not numeric\n'sqlCaMsg()
        end
    else do
        ggRes = sqlDsntiar(sqlRx2CA())
        ggWa = sqlMsgWarn()
        if ggWa \= '' then
            ggRes = ggRes'\nwarnings' ggWa
        if m.sqlCAMsg == 1 then
           ggRes = ggRes'\n'sqlCaMsg()'\n'sqlCaMsg(sqlCa2Rx(sqlCa))
        end
    ggSt = 'SQL.HOST'
    ggVa = 'SQL.HOST.VAR'
    ggBe = 'SQL.HOST.BEF'
    call sqlHostVars ggSqlStmt, 12, ggSt
    if datatype(sqlErrd.5, 'n') & sqlErrd.5 > 0 then do
        ggW1 = translate(word(ggSqlStmt, 1))
        ggW2 = translate(word(ggSqlStmt, 2))
        if ggW1 == 'PREPARE' then
            ggVV = sqlHostVarFind(ggSt, 'FROM')
        else if ggW1 ggW2 == 'EXECUTE IMMEDIATE' then
            ggVV = sqlHostVarFind(ggSt, 1)
        else
            ggVV = ''
        if ggVV == '' then
            ggRes = ggRes || sqlMsgSrcPos(ggSqlStmt, sqlErrd.5)
        else
            ggRes = ggRes || sqlMsgSrcPos(value(ggVV), sqlErrd.5)
        end
    ggRes = ggRes'\nstmt =' ggSqlStmt
    ggPref = '\nwith'
    do ggXX=1 to m.ggSt.0
        ggRes = ggRes || ggPref m.ggBe.ggXX ':'m.ggVa.ggXX ,
                      '=' value(m.ggVa.ggXX)
        ggPref = '\n    '
        end
    if m.sqlSuMsg == 1 | (m.sqlSuMsg == 2 & m.sql.conHost \== '') then
        ggRes = ggRes'\nsubsys =' ,
                if(m.sql.conHost=='',,m.sql.conHost'/'),
                || m.sql.conSSID', interfaceType' m.sql.conType
    return  ggRes
endSubroutine sqlMsg

/*--- use dsnTiar to translate sql Info to error text ----------------*/
sqlDsnTiar: procedure expose m.
parse arg ca
    if -438  = sqlCa2Rx(ca) then
        return '\nSQLCODE = -438:',
           'APPLICATION RAISED ERROR WITH sqlState' sqlState ,
           'and DIAGNOSTIC TEXT:' sqlErrMc
    liLe = 78
    msLe = liLe * 10
    msg = d2c(msLe,2) || left('', msLe)
    len = d2c(liLe, 4)
    ADDRESS LINKPGM "DSNTIAR ca msg len"
    if rc <> 0 then
        call err 'linkPgm dsnTiar rc' rc 'sqlCa' ca
    res = strip(substr(msg, 13, liLe-10))
    cx = pos(', ERROR: ', res)
    if cx > 0 then
        res = left(res, cx-1)':' strip(substr(res, cx+9))
    do c=3+liLe by liLe to msLe while substr(msg, c, 10) = ''
            res = res'\n    'strip(substr(msg, c+10, liLe-10))
        end
    return res
endProcedure sqlDsnTiar

/*--- format all rexx sqlCa fields into a message --------------------*/
sqlCaMsg:
    return 'sqlCode' sqlCode 'sqlState='sqlState                    ,
           '\n    errMC='translate(sqlErrMc, ',', 'ff'x)            ,
           '\n    warnings='sqlWarnCat('+') 'erP='sqlErrP           ,
           '\n    errD.1='sqlErrD.1 '2='sqlErrD.2 '3='sqlErrD.3     ,
           '\n    errD.4='sqlErrD.4 '5='sqlErrD.5 '6='sqlErrD.6
endProcedure sqlCaMsg

/*--- format the sqlCA into the dsnTiar SQLCA ------------------------*/
sqlRx2Ca:
    if \ (datatype(sqlcode, 'n') & datatype(sqlErrD.1, 'n') ,
                                 & datatype(sqlErrD.3, 'n')) then
        return err('sqlCode etc. not numeric\nsqlCa =' sqlCaMsg())
    if digits() < 10 then
        numeric digits 10
    sqlCa = 'SQLCA   ' || d2c(136, 4) || d2c(sqlCode, 4) ,
            || d2c(min(70, length(sqlErrMc)), 2)left(sqlErrMc, 70) ,
            || left(sqlErrP, 8) ,
            || d2c(sqlErrD.1, 4)d2c(sqlErrD.2, 4)d2c(sqlErrD.3, 4) ,
            || d2c(sqlErrD.4, 4)d2c(sqlErrD.5, 4)d2c(sqlErrD.6, 4) ,
            || sqlWarnCat() || sqlState
    if length(sqlCa) <> 136 then
        call err 'sqlCa length' length(sqlCa) 'not 136' ,
                 '\n'sqlCaMsg() '==>'  ca', hex='c2x(ca)
    return sqlCa
endProcedure sqlRx2Ca

/*--- extract the fields from the SqlCA and put it to rexx vars ------*/
sqlCA2Rx: procedure expose m. ,
       sqlCode sqlErrMc sqlErrP sqlErrD. sqlWarn. sqlState
parse arg ca
    numeric digits 10
    if length(ca) < 136 | c2d(substr(ca, 9, 4), 4) <> 136 then
        call err 'bad sqlCa len' length(ca) 'not 136:' ca', hex='c2x(ca)
    sqlCode  = c2d(substr(ca, 13 ,4), 4)
    sqlErrMC = substr(ca, 19, c2d(substr(ca, 17, 2), 2))
    sqlErrP  = substr(ca, 89, 8)
    do ix=1 to 6
        sqlErrD.ix = c2d(substr(ca, 93 + 4 * ix, 4), 4)
        end
    do ix=0 to 10
        sqlWarn.ix = substr(ca, 121 + ix, 1)
        end
    sqlState = substr(ca, 132, 5)
    return sqlCode
endProcedure sqlCA2Rx

/*--- concat the sql warnings with Separator sep --------------------*/
sqlWarnCat: procedure expose m. sqlWarn.
parse arg sep
    return sqlWarn.0 || sep,
        || sqlWarn.1||sqlWarn.2||sqlWarn.3||sqlWarn.4||sqlWarn.5||sep ,
        || sqlWarn.6||sqlWarn.7||sqlWarn.8||sqlWarn.9||sqlWarn.10||sep
endProcedure sqlWarnCat

/*--- make the text for sqlWarnings ----------------------------------*/
sqlMsgWarn: procedure expose m. sqlWarn.
     r = ''
     text =' 1=W var truncated, 1=S scrollable, 1=N nonScrollable,'  ,
            '2=W nulls in aggregate,'                                ,
            '3=W more cols than vars,'                               ,
                             '3=Z more result sets than locators,'   ,
            '4=W no where, 4=D sensitive dynamic, 4=I insensitive,'  ,
                          '4=S sensitive static,'                    ,
            '5=W not valid sql, 5=1 readOnly, 5=2 readDelete,'       ,
                          '5=3 readDeleteUpdate,'                    ,
            '6=W day changed to month range,'                        ,
            '7=W dec digits truncated,'                              ,
            '8=W char substituted,'                                  ,
            '9=W arith excep in count, 9=Z multipe result sets,'     ,
            '10=W char conversion err in ca,'
     do wx = 1 to 10
         w = sqlWarn.wx
         if w = ' ' then
             iterate
         t = wx'='w
         cx = pos(' 'wx'='w' ', text)
         ex = pos(','         , text, cx + 1)
         if cx > 0 & ex > cx then
             r = r substr(text, cx+1, ex-cx)
         else
             r = r wx'='w '?,'
         end
     r = strip(r, 't', ',')
     if r = '' & sqlwarn.0 <> '' then
        call err 'sqlWarn.0='sqlWarn.0 'but all warns empty'
     return r
endProcedure sqlMsgWarn

/*--- show in the source src the point pos  (where error occured)
          a few lines from src around pos and arrow to pos ----------*/
sqlMsgSrcPos: procedure expose m.
parse arg src, pos
    liLe = 68
    liCn = 3
    afLe = 25
    t1 = space(left(src, pos), 1)
    t2 = left(' ', substr(src, pos, 1) == ' ' ,
                 | substr(src, pos+1, 1) == ' ') ,
         || space(substr(src, pos+1), 1)
    afLe = min(afLe, length(t2))
    if length(t1) + afLe > liLe * liCn then
        t1 = '...'right(t1, liLe * liCn - afLe -3)
    else if length(t1)+length(t2) > liLe then
        t1 = left(' ', (liCn * liLe - length(t1) -afLe) // liLe)||t1
    pL = length(t1) // liLe
    if length(t2) <= liLe-pL then
        tx = t1 || t2
    else
        tx = t1 || left(t2, liLe-pL-3)'...'
    res = '\nsrc' strip(substr(tx, 1, liLe), 't')
    do cx=1+liLe by liLe to length(tx)
        res = res || '\n  +' strip(substr(tx, cx, liLe), 't')
        end
    loc = 'pos' pos 'of' length(src)
    if length(loc)+6 < pL then
        return res'\n  >' right('>>>'loc'>>>', pL)
    else
        return res'\n  >' left('', pL-1)'<<<'loc'<<<'
endProcdedure sqlMsgSrcPos

/*--- get the hostVars in the sql in src and the word before ---------*/
sqlHostVars: procedure expose m.
parse arg src, cnt, st
    cx = 1
    sx = 0
    do cnt
        cx = pos(':', src, cx) + 1
        if cx < 2 then
           leave
        if pos(substr(src, cx, 1), m.mAlfRex1) < 1 then
            iterate
        ex = verify(src, m.mAlfRexR, 'n', cx)
        if ex - cx > 100 then
            iterate
        sx = sx + 1
        if ex < 1 then
            m.st.var.sx = substr(src, cx)
        else
            m.st.var.sx = substr(src, cx, ex - cx)
                       /* search word before */
        do bE = cx-2 by -1 to 1 ,
                while substr(src, bE, 1) == ' '
            end
        do bB = bE by -1 to max(1, bE-20),
                while pos(substr(src, bB, 1), m.mAlfa) > 0
            end
        if bB < bE & bB >= 0 then
            m.st.bef.sx = substr(src, bB+1, bE-bB)
        else
            m.st.bef.sx = ''
        end
    m.st.0 = sx
    return sx
endProcedure sqlHostVars

/*--- find the name of hostvar, by index or by before ----------------*/
sqlHostVarFind: procedure expose m.
parse arg st, fnd
    if datatype(fnd, 'n') & fnd <= m.st.0 then
        return m.st.var.fnd
    do ix=1 to m.st.0
        if translate(m.st.bef.ix) = fnd then
            return m.st.var.ix
        end
    return ''
endSubroutine sqlHostVarFind
/* copy sql    end   **************************************************/
/* copy j begin *******************************************************
    the j framework
         jReset
         jOpen
         jClose
         jRead
         jWrite
***********************************************************************/
jRead: procedure expose m.
parse arg m, var
    call objMetClaM m, 'jRead'
    if m.m.jReading then
        interpret ggCode
    else
        return err('jRead('m',' var') but not opened r')
endProcedure jRead

jReadO: procedure expose m.
parse arg m
if arg() > 1 then call err '???  old interface'
    call objMetClaM m, 'jReadO'
    if m.m.jReading then
        interpret ggCode
    else
        return err('jReadO('m',' var') but not opened r')
endProcedure jReadO

jWrite: procedure expose m.
parse arg m, line
    call objMetClaM m, 'jWrite'
    if \ m.m.jWriting then
        return err('jWrite('m',' line') but not opened w')
    interpret ggCode
    return
endProcedure jWrite

jWriteO: procedure expose m.
parse arg m, var
    call objMetClaM m, 'jWriteO'
    if \ m.m.jWriting then
        return err('jWriteO('m',' var') but not opened w')
    interpret ggCode
    return
endProcedure jWriteO

jWriteAll: procedure expose m.
parse arg m, rdr
    rdr = o2file(rdr)
    call objMetClaM m, 'jWriteAll'
    if \ m.m.jWriting then
        return err('jWriteAll('m',' rdr') but not opened w')
    interpret ggCode
    return
endProcedure jWriteAll

jWriteNow: procedure expose m.
parse arg m, rdr
    rdr = o2file(rdr)
    interpret objMet(m, 'jWriteNow')
    return
endProcedure jWriteNow

jCat: procedure expose m.
parse arg opt m
    if m = '' then do
        m = opt
        opt = m.j.cWri
        end
    call jOpen m, opt
    do ax=2 to arg()
        call jWriteAll m, arg(ax)
        end
    call jClose m
    return m
endProcedure jCat

jWriteNowImpl: procedure expose m.
parse arg m, rdr
    call jOpen rdr, m.j.cRead
    do while jRead(rdr, line)
        call jWrite m, m.line
        end
    call jClose rdr
    return
endProcedure jWriteNow

jWriteNowImplO: procedure expose m.
parse arg m, rdr
    call jOpen rdr, m.j.cRead
    do while assNN('li', jReadO(rdr))
        call jWriteO m, li
        end
    call jClose rdr
    return
endProcedure jWriteNow

/*--- reset JRW: fail if open, initialise ---------------------------*/
jReset: procedure expose m.
parse arg m, arg, arg2, arg3
    if m.m.jReading == 1 | m.m.jWriting == 1 then
        return err('still open jReset('m',' arg2')') / 3
    m.m.jReading = 0
    m.m.jWriting = 0
    m.m.jUsers = 0
    interpret objMet(m, 'jReset')
    return m
endProcedure jReset

jOpen: procedure expose m.
parse arg m, opt
    call objMetClaM m, 'jOpen'
    oUsers = m.m.jUsers
    if opt = m.j.cRead then do
        if m.m.jReading then
            nop
         else if m.m.jWriting then
            return err('already opened for writing jOpen('m',' opt')')
        else do
            interpret ggCode
            m.m.jReading = 1
            end
        end
    else if \ abbrev('>>', opt, 1) then do
        return err('bad option' opt 'in jOpen('m',' opt')')
        end
    else do
        if m.m.jWriting then
            nop
         else if m.m.jReading then
            return err('already opened for reading jOpen('m',' opt')')
        else do
            interpret ggCode
            m.m.jWriting = 1
            end
        end
    m.m.jUsers = oUsers + 1
    return m
endProcedure jOpen

jClose: procedure expose m.
parse arg m
    call objMetClaM m, 'jClose'
    oUsers = m.m.jUsers
    if oUsers = 1 then do
        interpret ggCode
        m.m.jReading = 0
        m.m.jWriting = 0
        end
    else if oUsers < 1 then
        call err 'jClose' m 'but already closed'
    m.m.jUsers = oUsers - 1
    return m
endProcedure jClose

/*--- cat the lines of the file together, with mid between lines,
                fail if not all lines are strings -------------------*/
jCatLines: procedure expose m.
parse arg m, fmt
    if abbrev(fmt, '-sql') then
        return jCatSql(m, substr(fmt, 5))
    if fmt == '' then
        fmt = '%+Q\s'
    call jOpen m, m.j.cRead
    if \ jRead(m, line) then do
        call jClose m
        return ''
        end
    res = f(fmt, m.line)
    do while jRead(m, line)
        res = res || f(fmt'%-Qnxt', m.line)
        end
    call jClose m
    fEnd = 'F.FORMAT.'fmt'%-Qend'
    return res || m.fEnd
endProcedure jCatLines

/*--- cat the line of a file, using comments
               fixline (with token wrapping) or separate lines -------*/
jCatSql: procedure expose m.
parse arg m, fLen
    call jCatSqlReset m'.JCATSQL', , jOpen(m, '<'), fLen
    res = jCatSqlNext(m'.JCATSQL')
    call jClose m
    return res
endProcedure jCatSql

jCatSqlReset: procedure expose m.
parse arg m, aSrc, m.m.rdr, m.m.fLen
    call jCatSqlNL m, aSrc
    return m
endProcedure jCatSqlReset

jCatSqlNL: procedure expose m.
parse arg m
    if m.m.rdr \== '' then
      if jRead(m.m.rdr, m'.SRC') then do
        if m.m.fLen \== '' then
            m.m.src = left(m.m.src, m.m.fLen)
        else if substr(m.m.src, length(m.m.src), 1) \== ' ' then
            m.m.src = m.m.src' '
        m.m.pos = 1
        return 1
        end
    m.m.pos = length(m.m.src)+1
    return 0
endProcedure jCatSqlNl

jCatSqlNext: procedure expose m.
parse arg m, stop
    res = ''
    st = ''
    bx = m.m.pos
    do forever
        call sbUntil m, '"''-/'stop
        if sbEnd(m) then do
            res = res || substr(m.m.src, bx)
            bx = 0
            end
        else if substr(m.m.src, m.m.pos, 2) = '--' then do
            res = res || substr(m.m.src, bx, m.m.pos-bx)' '
            bx = 0
            end
        else if substr(m.m.src, m.m.pos, 2) = '/*' then do
            res = res || substr(m.m.src, bx, m.m.pos-bx)' '
            do forever
                px = pos('*/', m.m.src, m.m.pos)
                if px > 0 then
                    leave
                if \ jCatSqlNL(m) then
                    return res
                end
            bx = px+2
            m.m.pos = bx
            end
        else if sbLit(m, ''' "') then do
            c1 = sbPrev(m)
            do while \ sbStrEnd(m, c1)
                res = res || substr(m.m.src, bx)
                if m.m.fLen \== '' then
                    if jCatSqlNl(m) then do
                        bx = m.m.pos
                        iterate
                        end
                call err 'unclosed' c1 'string:' m.m.src
                end
            end
        else if pos(substr(m.m.src, m.m.pos, 1), stop) > 0 then do
            res = strip(res||substr(m.m.src, bx, m.m.pos-bx), 't')
            call sbChar m, 1
            if res <> '' then
                return res
            bx = m.m.pos
            end
        if bx = 0 then
            if jCatSqlNl(m) then
                bx = m.m.pos
            else
                return res
        end
endProcedure jCatSqlNext

jIni: procedure expose m.
    if m.j.ini == 1 then
        return
    m.j.ini = 1
    m.j.cRead = '<'
    m.j.cWri = '>'
    m.j.cApp = '>>'
    call oIni
    am = "call err 'call of abstract method"
    call classNew 'n JRW u ORun, f JREADING v, f JWRITING v', 'm',
        , "new call jReset m, arg, arg2, arg3",
        , "jRead"   am "jRead('m',' var')'" ,
        , "jReadO if \ jRead(m, 'J.GGVAR') then return '';",
                "return s2o(m.j.ggVar)" ,
        , "jWrite" am "jWrite('m',' line')'" ,
        , "jWriteO call jWrite(m, o2string(var))" ,
        , "jWriteAll call jWriteNowImpl m, rdr",
        , "jWriteNow call jWriteNowImpl m, rdr",
        , "jReset",
        , "jOpen" am" jOpen('m',' opt')'" ,
        , "jClose" ,
        , "oRun call pipeWriteAll m",
        , "o2String return jCatLines(m, fmt)",
        , "o2File return m"
    call classNew 'n JRWO u JRW', 'm',
        , "jRead res = jReadO(m); if res == '' then return 0;" ,
                "m.var = o2string(res); return 1" ,
        , "jReadO"   am "jReadO('m')'" ,
        , "jWrite  call jWriteO(m, s2o(var))" ,
        , "jWriteO" am "jWriteO('m',' line')'",
        , "jWriteAll call jWriteNowImplO m, rdr",
        , "jWriteNow call jWriteNowImplO m, rdr",

    am = "call err 'call errObject"
    call classNew 'n JRWErr u JRW', 'm',
        , "jWriteAll" er "jWriteAll 'm', rdr'",
        , "jWriteNow" er "jWriteNow 'm', 'rdr'",
        , "jClose" er "jClose 'm'"
    call classNew 'n JSay u JRW', 'm',
        , "jWrite say line" ,
        , "jWriteO call classOut , var, 'outO: '",
        , "jOpen if \ abbrev(opt, m.j.cWri) then",
            "call err 'can only write JSay.jOpen('m',' opt')';" ,
            "else m.m.jWriting = 1"
    call classNew 'n JStem u JSay', 'm',
        , "jReset m.m.stem = arg;",
               "if \ dataType(m.arg.0, 'n') then m.arg.0 = 0" ,
        , "jWrite call mAdd m.m.stem, line"
    call classNew 'n JRWEof u JRW', 'm',
        , "jRead drop m.var; return 0",
        , "jOpen if pos('>', opt) > 0 then",
            "call err 'can only read JRWEof.jOpen('m',' opt')';" ,
            "else m.m.jReading = 1"
    m.j.in = jOpen(oNew('JRWEof'), m.j.cRead)
    call outDst
    call classNew "n JBuf u JRWO, f BUF s r", "m",
        , "jOpen call jBufOpen m, opt",
        , "jReset call jBufReset m, arg",
        , "jRead return jBufRead(m, var)",
        , "jReadO return jBufReadO(m)",
        , "jWrite call jBufWrite m, line",
        , "jWriteO call jBufWriteO m, var"
    call classNew "n JBufTxt u JBuf, f MAXL v ", "m",
        , "jReset call jBufReset m, arg; m.m.maxl = 80",
        , "jWriteO call jBufWrite m, o2Text(var, m.m.maxl)"
    return
endProcedure jIni

/*--- out interface of j --------------------------------------------*/
outIni: procedure expose m.
    call jIni
    return
endProcedure outIni

outDst: procedure expose m.
parse arg wrt
    oldOut = m.j.out
    if wrt == '' then
        wrt = jOpen(oNew('JSay'), '>')
    m.j.out = wrt
    return oldOut
endProcedure outDst

/*--- return a JRW from rdr or in ------------------------------------*/
j2Rdr: procedure expose m.
    parse arg rdr
    if oStrOrObj(rdr, m.j.in) then
        return jBuf(ggStr)
    else
        return o2file(ggObj)
endProcedure j2Rdr
      /* jstr is part of out interface --> inp2str */
inp2str: procedure expose m.
    parse arg rdr, fmt
    if oStrOrObj(rdr, m.j.in) then
        return ggStr
    else
        return o2String(ggObj, fmt)
endProcedure inp2str

j2Buf: procedure expose m.
    parse arg rdr
    if oStrOrObj(rdr, m.j.in) then
        return jBuf(ggStr)
    if classInheritsOf(ggCla, class4Name('JBuf')) ,
            & m.ggObj.jUsers < 1 then
        return ggObj
    b = jOpen(jBuf(), m.j.cWri)
    call jWriteNow b, o2File(ggObj)
    return jClose(b)
endProcedure j2Buf

in: procedure expose m.
parse arg arg
    return jRead(m.j.in, arg)
endProcedure in

inO: procedure expose m.
    if arg() > 0 then call err '??? old interface'
    return jReadO(m.j.in)
endProcedure in

out: procedure expose m.
parse arg line
    call jWrite m.j.out, line
    return 0
endProcedure out

outO: procedure expose m.
parse arg arg
    call jWriteO m.j.out, arg
    return
endProcedure outO

/*--- jBuf: buffer read or write (supports datataypes) ---------------*/
jBuf: procedure expose m.
    m = oNew('JBuf') /* calls jBufReset */
    do ax=1 to arg()
        m.m.buf.ax = arg(ax)
        end
    m.m.buf.0 = ax-1
    m.m.allV = 1
    return m
endProcedure jBuf
/*--- jBuf: buffer read or write (supports datataypes) ---------------*/
jBufTxt: procedure expose m.
    m = oNew('JBufTxt') /* calls jBufReset */
    do ax=1 to arg()
        m.m.buf.ax = arg(ax)
        end
    m.m.buf.0 = ax-1
    m.m.allV = 1
    return m
endProcedure jBufTxt

jBufReset: procedure expose m.
parse arg m
    m.m.stem = m'.BUF'
    do ax=1 to arg() - 1
        m.m.buf.ax = arg(ax+1)
        end
    m.m.buf.0 = ax-1
    m.m.allV = 1
    return m
endProcedure jBufReset

jBufOpen: procedure expose m.
parse arg m, opt
    if opt == m.j.cRead then do
        m.m.readIx = 0
        m.m.jReading = 1
        return m
        end
    if opt == m.j.cWri then do
        m.m.buf.0 = 0
        m.m.allV = 1
        end
    else if opt \== m.j.cApp then
         call err 'jBufOpen('m',' opt') with bad opt'
    m.m.jWriting = 1
    return m
endProcedure jBufOpen

jBufWrite: procedure expose m.
parse arg m, line
    if m.m.allV then
        call mAdd m'.BUF', line
    else
        call mAdd m'.BUF', s2o(line)
    return
endProcedure jBufWrite

jBufWriteStem: procedure expose m.
parse arg m, st
    ax = m.m.buf.0
    if m.m.allV then do
        do sx=1 to m.st.0
            ax = ax + 1
            m.m.buf.ax = m.st.sx
            end
        end
    else do
        do sx=1 to m.st.0
            ax = ax + 1
            m.m.buf.ax = o2String(m.st.sx)
            end
       end
       m.m.buf.0 = ax
    return m
endProcedure jBufWrite

jBufWriteO: procedure expose m.
parse arg m, ref
    if m.m.allV then do
        cl = objClass(ref)
        if cl = m.class.classV then do
            call mAdd m'.BUF', m.ref
            return
            end
        if cl == m.class.classW then do
            call mAdd m'.BUF', substr(ref, 2)
            return
            end
        m.m.allV = 0
        do ax=1 to m.m.buf.0
            m.m.buf.ax = s2o(m.m.buf.ax)
            end
        end
    call mAdd m'.BUF', ref
    return
endProcedure jBufWriteO

jBufReadO: procedure expose m.
parse arg m
    nx = m.m.readIx + 1
    if nx > m.m.buf.0 then
        return ''
    m.m.readIx = nx
    if m.m.allV then
        return s2o(m.m.buf.nx)
    else
        return m.m.buf.nx
endProcedure jBufReadO

jBufRead: procedure expose m.
parse arg m, var
    nx = m.m.readIx + 1
    if nx > m.m.buf.0 then
        return 0
    m.m.readIx = nx
    if m.m.allV then
        m.var = m.m.buf.nx
    else
        m.var = o2String(m'.BUF.'nx)
    return 1
endProcedure jBufRead

jBufTxtWriteO: procedure expose m.
parse arg m, ref
    if m.m.allV \== 1 then
        call err '1 \== allV' m.m.allV 'in jBufTxtWriteO('m',' ref')'
    cl = objClass(ref, '?')
    if cl = m.class.classV then
        call mAdd m'.BUF', m.ref
    else if cl == m.class.classW then
        call mAdd m'.BUF', substr(ref, 2)
    else if ref == '' then
        call mAdd m'.BUF', '@ null object'
    else if cl == '?' then
        call mAdd m'.BUF', '@'ref 'class=???'
    else do
        l = '@'ref 'class='className(cl)
        ff = cl'.FLDS'
        do fx=1 to m.ff.0 while length(l) < m.m.maxl + 3
            if m.ff.fx == '' then
                 l = l', .='m.ref
            else do
                 f1 = substr(m.ff.fx, 2)
                 l = l',' f1'='m.ref.f1
                 end
            end
        if length(l) > m.m.maxl then
            l = left(l, m.m.maxl-3)'...'
        call mAdd m'.BUF', l
        end
    return
endProcedure jBufTxtWriteO

/* copy j end *********************************************************/
/* copy o begin ******************************************************
    an object has a class which describes fields and methods
    an object has fields (e.g. m.o.fld1)
    an object may call it's methods (dynamic binding)
***********************************************************************/
oIni: procedure expose m.
    if m.o.ini = 1 then
        return
    m.o.ini = 1

    call classIni
    call oAdd1Method m.class.classV, 'o2String return m.m'
    m.class.escW = '!'
    call oAdd1Method m.class.classW, 'o2String return substr(m, 2)'
    or = classNew('n ORun u',
         , 'm oRun call err "call of abstract method oRun"',
         , 'm o2File return oRun2File(m)',
         , 'm o2String return jCatLines(oRun2File(m), fmt)')
                /* oRunner does not work yet ||||| */
    rc = classNew('n* ORun u ORun, m oRun call oClassAdded arg(2)')
    call oAddMethod rc'.OMET', rc
    call classAddedRegister oMutate(mNew(), rc)
    return
endProcedure oIni

/*--- when notified about a new class cl, build the redundancies ----*/
oClassAdded: procedure expose m.
parse arg cl
    m.class.o2c.cl = m.class.class
    call oAddMethod cl'.OMET', cl
    new = "m.class.o2c.m =" cl
    if m.cl.flds.0 > 0 | m.cl.stms.0 > 0 then
        new = new"; call oClear m, '"cl"'"
    new = new";" classMet(cl, 'new', '')
    if cl == m.class.class then
        call mAlias 'CLASS', cl
    else  /* object adresses */
        call mNewArea cl, 'O.'substr(cl,7), new
     if m.cl \== 'u' | m.cl.name == '' then
        return
    call mAlias cl, m.cl.name
    new = 'new'
    m.cl.oMet.new = ''
    co = ''                              /* build code for copy */
    do fx=1 to m.cl.flds.0
        nm = m.cl.flds.fx
          if translate(nm) == nm & \ abbrev(nm, 'GG') ,
              & pos('.M.', nm'.') < 1 & pos('.T.', nm'.') < 1 then
               co = co'm.t'nm '= m.m'nm';'
        else
            co = co 'f='quote(substr(nm, 2))';m.t.f = m.m.f;'
        end
    do fx=1 to m.cl.stms.0
        nm = m.cl.stms.fx
        sc = m.cl.stms.fx.class
        if nm == ''then
            co = co "m.t.0=m.m.0;" ,
               "do sx=1 to m.m.0;" ,
                 "call oClaCopy '"sc"',m'.'sx, t'.'sx; end;"
        else
            co = co "st='"substr(nm, 2)"';m.t.st.0=m.m.st.0;",
                "do sx=1 to m.m.st.0;",
                  "call oClaCopy '"sc"',m'.'st'.'sx, t'.'st'.'sx; end;"
        end
    p = cl'.OMET.oCopy'
    if symbol('m.p') \== VAR then
        m.p = co
    return
endProcedure oClassAdded

/*--- add the methods of class cl to the methodtable mt -------------*/
oAddMethod: procedure expose m.
parse arg mt, cl
     if pos(m.cl, 'frsv') > 0 then
         return
     if m.cl = 'm' then do
         nm = m.cl.name
         m.mt.nm = m.cl.met
         return
         end
/*     if m.cl.class \== '' then
         call oAddMethod mt, m.cl.class
*/   do x=1 to m.cl.0
         call oAddMethod mt, m.cl.x
         end
     return
endProcedure oAddMethod

/* add 1 method to a completed class and its subclasses -------------*/
oAdd1Method: procedure expose m.
parse arg clNm, met code
    cl = classAdd1Method(clNm, met code)
    m.cl.omet.met = code
    call oAdd1MethodSubs cl, met code
    return cl
endProcedure oAdd1Method

/* add 1 method code to OMET of all subclasses of cl  -------------*/
oAdd1MethodSubs: procedure expose m.
parse arg cl, met code
    do sx=1 to m.cl.sub.0
        sc = m.cl.sub.sx
        if pos(m.sc, 'nvw') > 0 then do
            do mx=1 to m.sc.0
                ms = m.sc.mx
                if m.ms == 'm' & m.ms.name == met then
                    call err 'method' med 'already in' sc
                end
            m.sc.omet.met = code
            end
        call oAdd1MethodSubs sc, met code
        end
    return cl
endProcedure oAdd1MethodSubs

/*--- create an an object of the class className
        mutate it to class but DO NOT call it's new method ----------*/
oBasicNew: procedure expose m.
parse arg cl
    return oMutate(mBasicNew(cl), cl)

/*--- create an an object of the class className
        and call it's new method ------------------------------------*/
oNew: procedure expose m.
signal labelMNew    /* work is done there |   ???? remove */

/*--- return the class of object obj --------------------------------*/
objClass: procedure expose m.
parse arg obj
    if symbol('m.class.o2c.obj') == 'VAR' then
         return m.class.o2c.obj
    if abbrev(obj, m.class.escW) then
        return m.class.classW
    if abbrev(obj, 'CLASS.CAST.') then
        return substr(obj, 12, pos(':', obj, 12)-12)
    if arg() >= 2 then
        return arg(2)
    return err('objClass no class found for object' obj)
endProcedure objClass

oKindOf: procedure expose m.
parse arg obj, sup
    cl = objClass(obj, '')
    if cl == '' then
        return 0
    return classInheritsOf(cl, class4name(sup))
endProcedure oKindOf

classInheritsOf: procedure expose m.
parse arg cl, sup    /* wkTst optimierung in classAdded */
    if cl == sup then
        return 1
    do while m.cl \== 'n' & m.cl \== 'u'
        if m.cl.class == '' then
            return 0
        cl = m.cl.class
        end
    do cx=1 to m.cl.0
        d = m.cl.cx
        if m.d == 'u' then
            if classInheritsOf(d, sup) then
                return 1
        end
    return 0
endProcedure classInheritsOf

classSetMet: procedure expose m.
parse arg na, me, code
    if symbol('m.class.n2c.na') \== 'VAR' then
        call err 'no class' na 'in classMet('na',' me')'
    cl = m.class.n2c.na
    if symbol('m.cl.oMet.me') \== 'VAR' then
        call err 'no method in classMet('na',' me')'
    m.cl.oMet.me = code
    return cl
endProcedure classSetMet

/*--- return the code of method me of the class with name na --------*/
classMet: procedure expose m.
parse arg na, me
    if symbol('m.class.n2c.na') \== 'VAR' then
        call err 'no class' na 'in classMet('na',' me')'
    cl = m.class.n2c.na
    if symbol('m.cl.oMet.me') == 'VAR' then
        return m.cl.oMet.me
    if arg() >= 3 then
        return arg(3)
    call err 'no method in classMet('na',' me')'
endProcedure classMethod

/*--- set m, ggClass, ggCode to the address, class and code
        of method me of object m ------------------------------------*/
objMetClaM: procedure expose m. m ggClass ggCode
parse arg m, me
    if symbol('m.class.o2c.m') == 'VAR' then
         ggClass =  m.class.o2c.m
    else if abbrev(m, 'CLASS.CAST.') then
        parse var m 'CLASS.CAST.' ggClass ':' m
    else
        return err('no class found for object' m)
    if symbol('m.ggClass.oMet.me') == 'VAR' then
        ggCode = m.ggClass.oMet.me
    else
         call err 'no method' me 'in class' className(ggClass),
              'of object' m
    return
endProcedure objMetClaM

/*--- return the code of method me of object obj --------------------*/
objMet: procedure expose m.
parse arg obj, me
        /* handle the easy and frequent case directly */
    if symbol('m.class.o2c.obj') == 'VAR' then
         c =  m.class.o2c.obj
    else if abbrev(obj, m.class.escW) then
         c = m.class.classW
    else do
        call objMetClaM obj, me
        return 'M="'m'";'ggCode
        end
     if symbol('m.c.oMet.me') == 'VAR' then
         return m.c.oMet.me
    return err('no method' me 'in class' className(c) 'of object' obj)
endProcedure objMet

/*--- return the stem of fieldnames of object m ---------------------*/
oFlds: procedure expose m.
parse arg m
    return objClass(m)'.FLDS'
endProcedure oFlds

/*--- return the contents of field f navigation along path ----*/
oGet: procedure expose m.
parse arg obj, path, clazz
    nullNew = 0
    ret = oAccPath(obj, path, clazz)
    if ret == 1 then
        ret = oAccStr(m, cl)
    if ret == 1 then
        return str
    return err(ret 'in oGet('obj',' path')')
endProcedure oGet

oAccStr: procedure expose m. str
parse arg m, cl
    if cl == m.class.classV then
        str = m.m
    else if m.cl.valueCl == '' then
        return 'no value @' m 'class' className(cl)
    else if m.m == '' then
        return 'null @' m 'class' className(cl)
    else if abbrev(m, m.class.escW) then
        str = substr(m ,2)
    else
        str = o2String(m.m)
    return 1
endProcedure oAccStr

oGetO: procedure expose m.
parse arg obj, path, opt, clazz
    nullNew = pos('n', opt) > 0
    ret = oAccPath(obj, path, clazz)
    if ret == 1 then
        ret = oAccO(m, cl, opt)
    if ret == 1 then
        return ref
    else
        return err(ret 'in oGetO('obj',' path')')
endProcedure oGetO

oAccO: procedure expose m. ref
parse arg m, cl, opt
    if cl == m.class.classV then do
        ref = s2o(m.m)
        end
    else if m.cl \== 'r' then do
        ref = m
        end
    else if m.m == '' then do
        if opt == '-b' then do
            m.m = jBuf()
            end
        else if opt == '-n' then do
            rsn = oRefSetNew(m, cl)
            if rsn \==1 then
               return rsn
            end
        ref = m.m
        end
    else if objClass(m.m, 0) \== 0 then do
        ref = m.m
        end
    else do
        return 'no class for' m.m '@' m 'class' cl
        end
    return 1
endProcedure oAccO

oPut: procedure expose m.
parse arg obj, path, str
    nullNew = 1
    res = oAccPath(obj, path)
    if res == 1 then
        res = ocPut(m, cl, str)
    if res == 1 then
        return str
    return err(res 'in oPut('obj',' path',' str')')
endProceudre oPut

ocPut: procedure expose m.
parse arg m, cl, str
    if m.cl.valueCl == m.class.classV then
        m.m = str
    else if m.cl.valueCl \== '' then
        m.m = s2o(str)
    else
        return 'no value @' m 'class' className(cl)
    return 1
endProcedure ocPut

oPutO: procedure expose m.
parse arg obj, path, ref
    nullNew = 1
    res = oAccPath(obj, path)
    if res == 1 then
        res = ocPutO(m, cl, ref)
    if res == 1 then
        return ref
    return err(ret 'in oPut('obj',' path',' ref')')
endProcedure oPutO

ocPutO: procedure expose m.
parse arg m, cl, ref
    if m.cl.valueCl == m.class.classV then
        m.m = o2string(ref)
    else if m.cl.valueCl \== '' then
        m.m = ref
    else if m.cl.stemCl \== '' then
        return 'implement put to stem'
    else
        return 'no value @' m 'class' className(cl)
    return 1
endProcedure ocPutO

oClear: procedure expose m.
parse arg obj, cl
    if cl == '' then
        cl = objClass(obj)
    do fx=1 to m.cl.flds.0
        f1 = m.cl.flds.fx
        o1 = obj || f1
        if f1 == '' then
            c1 = cl
        else do
            c1 = substr(f1, 2)
            c1 = m.cl.f2c.c1
            end
        if c1 == m.class.classW then
            m.o1 = m.class.escW
        else
            m.o1 = ''
        end
    do sx=1 to m.cl.stms.0
        f1 = obj || m.cl.stms.sx
        m.f1.0 = 0
        end
    return obj
endProcedure oClear

oAccPath: procedure expose m. m cl nullNew
parse arg m, pa, cl
    if cl == '' & m \== '' then do
        cl = objClass(m)
        end
    if pa == '' then
        return 1
    if abbrev(pa, m.class.cRef) ,
            | (\ m.cl.hasFlds & abbrev(pa, m.class.cNav)) then do
        if pa == m.class.cRef & m.cl.valueCl == m.class.classV then do
            cl = m.class.classV
            return 1
            end
        if (m.cl.valueCl == '' | m.cl.valueCl == m.class.classV) ,
              & m.cl \== 'r' then
            return 'no reference @' m 'class' cl
        if m.m = '' then do
            if \ nullNew then
                return 'null @' m 'class' className(cl)
            rsn = oRefSetNew(m, cl)
            if rsn \== 1 then
                return rsn
            end
        return oAccPath(m.m, substr(pa, 2))
        end
    if pos(left(pa, 1), m.class.cPath) > 0 then
        return oAccPath(m, substr(pa, 2), cl)
    px = verify(pa, m.class.cPath, 'm')
    if px < 1 then
        px = length(pa)+1
    fn = left(pa, px-1)
    pa = substr(pa, px)
    if symbol('m.cl.f2c.fn') == 'VAR' then
        return oAccPath(m'.'fn, pa, m.cl.f2c.fn)
    if m.cl.stemCl=='' | fn=='' | verify(fn, '0123456789','n')>0 then
        return 'no field' fn '@' m 'class' className(cl)
    if fn == 0 then
        return oAccPath(m'.0', pa, m.class.classV)
    if abbrev(fn, 0) | verify(m.m.0, '0123456789', 'n') > 0,
            | fn > m.m.0 then
        return 'bad stem index' fn'>'m.m.0 '@' m 'class' className(cl)
    return oAccPath(m'.'fn, pa, m.cl.stemCl)
endProcedure oAccPath

oRefSetNew: procedure expose m.
parse arg m, cl
    cr = m.cl.valueCl
    if m.cr.class = '' then
        return 'no class for null @' m 'class' className(cl)
    if m.cr.class = m.class.classW then
        m.m = o2s()
    else if m.cr \== 'r' then
        return 'class' className(cl) 'not ref'
    else
        m.m = mNew(m.cr.class)
    return 1
endProcedure oRefSetNew


/*--- mutate object m to the class named name -----------------------*/
oMutate: procedure expose m.
parse arg m, name
    m.class.o2c.m = class4Name(name)
    return m
endProcedure oMutate

/*--- return object obj cast'd to class named cl --------------------*/
oCast: procedure expose m.
parse arg obj, cl
     if abbrev(obj, 'CLASS.CAST.') then
         obj = substr(obj, 1 + pos(':', obj, 12))
     return 'CLASS.CAST.'class4Name(cl)':'obj
endProcedure oCast

/*--- copy object m of class c to t ---------------------------------*/
oClaCopy: procedure expose m.
parse arg ggCla, m, t
    if t == '' then do
        if ggCla == m.class.classW then
            return m
        t = mBasicNew(ggCla)
        end
     else if ggCla == m.class.classW then do
         m.t = o2String(m)
         m.class.o2c.t = m.class.classV
         return t
         end
     ggCode = ggCla'.OMET.oCopy'
     interpret m.ggCode
     m.class.o2c.t = ggCla
     return t
endProcedure oClaCopy

/*--- copy object m to t --------------------------------------------*/
oCopy: procedure expose m.
parse arg m, t
    return oClaCopy(objClass(m), m, t)
endProcedure oCopy

/*--- copy object to a newly created object -------------------------*/
oCopyNew: procedure expose m.
parse arg m
     if symbol('m.class.o2c.m') == 'VAR' then
         return oCopy(m, mBasicNew(m.class.o2c.m))
     return oCopy(m, mBasicNew(m.class.classV))
endProcedure oCopyNew

/*--- return a new instance of a subclass of Run
        with code code in method oRun -------------------------------*/
oRunner: procedure expose m.
    if arg() >= 1 then
           r = oNew(classNew('n* ORun u ORun, m oRun' arg(1)))
    else
           r = oNew(classNew('n| ORun u ORun'))
    return r
endProcedure oRunner

/*--- set code for runner -------------------------------------------*/
oRunnerCode: procedure expose m.
parse arg r, code
    call classSetMet objClass(r), 'oRun', code
    return r
endProcedure oRunnerCode

/*--- run method oRun of object m -----------------------------------*/
oRun: procedure expose m.
parse arg m, arg, arg2, arg3
    interpret objMet(m, 'oRun')
    return
endProcedure oRun

/*--- run method oRun and return output in new JBuf ------------------*/
oRun2File: procedure expose m.
parse arg rn
    b = jBuf()
    call pipeBeLa '>' b
    call oRun rn
    call pipeEnd
    return b
endProcedure oRun2File

/*--- cast the object to a file -------------------------------------*/
o2File: procedure expose m.
parse arg m
    interpret objMet(m, 'o2File')
    call err 'o2file did not return'
endProcedure o2File

/*--- cast the object to a String -----------------------------------*/
o2String: procedure expose m.
parse arg m, fmt
    if opt == '' then
        opt = '-b '
    interpret objMet(m, 'o2String')
    return err('o2String did not return')
endProcedure o2String

/*--- return true if object is kind of String------------------------*/
oStrOrObj: procedure expose m. ggStr ggObj ggCla
parse arg ggObj, def
    if ggObj == '' then
        ggObj = def
    ggCla = objClass(ggObj, '')

    if ggCla == '' then do
        ggStr = ggObj
        ggObj = ''
        return 1
        end
    else if wordPos(ggCla, m.class.classV m.class.classW) > 0 then do
        ggStr = o2String(ggObj)
        ggObj = ''
        return 1
        end
    else do
        ggStr = ''
        return 0
        end
endProcedure oStrOrObj

/*--- return true if object is kind of String ----- ???? -------------*/
oStrOrFile: procedure expose m. ggStr ggObj ggCla
parse arg m, def
    if oStrOrObj(m, def) then
        return 1
    ggObj = o2File(ggObj)
    return 0
endProcedure oStrOrFile

/*--- return a short string representation of an object -------------*/
o2Text: procedure expose m.
parse arg m, maxL
    if m == '' then
        return '@ null object'
    if maxL == '' then
        maxL = 80
    cl = objClass(m, '?')
    if cl = m.class.classV then
        l = m.m
    else if cl == m.class.classW then
        l = substr(m, 2)
    else if cl == '?' then
        l = '@'m 'class=???'
    else do
        l = '@'m 'class='className(cl)
        ff = cl'.FLDS'
        do fx=1 to m.ff.0 while length(l) < maxL + 3
            if m.ff.fx == '' then
                 l = l', .='m.m
            else do
                 f1 = substr(m.ff.fx, 2)
                 l = l',' f1'='m.m.f1
                 end
            end
        end
    if length(l) <= maxL then
        return l
    return left(l, maxL-3)'...'
endProcedure o2Text

/*--- cast a String to an object -----------------------------------*/
s2o: procedure expose m.
parse arg str
    return m.class.escW || str
    return r
endProcedure s2o

oIfStr: procedure expose m.
parse arg m
    if length(m) > 200 then
        return m
    cl = objClass(m, '')
    if cl = '' then
        return m
    else if cl = m.class.classV then
        return = m.m
    else if cl == m.class.classW then
        return = substr(m, 2)
    else if arg() >= 2 then
        return arg(2)
    else
        call err m 'of class' className(cl) 'not kind of string'
endProcedure oIfStr

/* copy o end *******************************************************/
/* copy class begin **************************************************
    a class has fields and methods,
    the class module handles only the metadata,
    object handling (instanciation, methodcalls etc.) is in O

    classes are represented by a metadata tree,
        its nodes of class class have diffenrent types:

class subTypes (implemented as choices)
    'u'    = union:    NAME -> name of class if <> '',
                    stem -> references component classes
    'f' = field:      NAME -> fieldName (x.name),
                    CLASSS -> reference to class of fieldValue
    's' = stem:     class -> ref to class at each stem element
    'c' = choice:   NAME -> selection value,
                    CLASS -> ref to class of choice
    'm' = method:    NAME -> methodName,
                    MET -> rexxCode
    'r' = reference CLASS -> ref to type at reference
special classes
    'v'    = Value     String Value
    'w'    = ValueAsA    StringValue packed into an adress (prefix escW)
    'o' = AnyClass    any class with dynamic classLookup on object
formal definition, see classIni

class expression (ce) allow the following syntax
    ce = className | classAdr | 'n'('?','*','|')? name union | union
        | 'f' name ce | 's' ce | 'c' name ce | 'm' name code | r ce?
    union = 'u' (ce (',' ce)*)?

    the modifiers of 'n' means
        none:    create new class, fail if name already defined
        '?':    create new class or return old of that name
        '*':    use an exisiting class of that definition
                or create new class with a unique name
        '|':    create a new class with a unique name
    'm' extends to then end of the ce (line)
    'u' allows several components, in classNew also multiple args
                Achtung, aber NICHT rekursiv|
***********************************************************************/
classIni: procedure expose m.
    if m.class.ini == 1 then
        return
    m.class.ini = 1
    call mapIni
    call mNewArea 'CLASS', 'CLASS'
    call mapReset 'CLASS.N2C'  /* name to class */
        /* to notify other modules (e.g. O) on every new named class */
    m.class.addedSeq.0 = 0
    m.class.addedListeners.0 = 0
    m.class.classV = classBasicNew('u', 'v')
    m.class.classW = classBasicNew('u', 'w')
    m.class.classO = classBasicNew('u', 'o')
    cr = mIterBegin('CLASS')
    do while assNN('cr', mIter(cr))
        call classAddedNotify cr
        end

    m.class.class = classNew('n class u v',
            , 'c u u f NAME v, s r class',
            , 'c f u f NAME v, f CLASS r class',
            , 'c s f CLASS r class' ,
            , 'c c u f NAME v, f CLASS r class',
            , 'c m u f NAME v, f MET  v' ,
            , 'c r f CLASS r class' )
    m.class.cNav = '.'
    m.class.cRef = '|'
    m.class.cDot = '%'
    m.class.cPath = m.class.cNav || m.class.cRef || m.class.cDot
    m.class.classR = classNew('r')
    return
endProcedure classIni


/*--- return the name of a class if it exists otherwise the class ---*/
className: procedure expose m.
parse arg cl
    if m.cl = 'u' & m.cl.name \= '' then
        return m.cl.name
    else
        return cl
endProcedure class4Name

/*--- return class of given name or class ---------------------------*/
class4Name: procedure expose m.
parse arg nm
    if symbol('m.class.n2c.nm') == 'VAR' then
        return m.class.n2c.nm
    if arg() > 1 then
        return arg(2)
    call err 'no class' nm
endProcedure class4Name

classBasicNew: procedure expose m.
parse arg ty, nm, cl, nmTy
    n = mNew('CLASS')
    m.n = ty
    m.n.name = nm
    m.n.nameComp = nm
    if ty == 'u' & nm \== '' then do
        if pos(nmTy, '*|') > 0 then do
            m.n.name = nm || substr(n, 1+lastPos('.', n))
            if nmTy == '*' then
                m.n.nameComp = nm'*'
            else
                m.n.nameComp = m.n.name
            end
        call mapAdd class.n2c, m.n.name, n
        end
    call mapAdd class.n2c, n, n
    m.n.class = ''
    m.n.met = ''
    m.n.0 = 0
    m.n.sub.0 = 0
    m.n.super.0 = 0
    if length(ty) \== 1 | pos(ty, 'ufscrm') < 1 then
        call err 'bad type' ty': classBasicNew('ty',' nm',' cl')'
    else if nm == '' & pos(ty, 'fm') > 0 then
        call err 'empty name: classBasicNew('ty',' nm',' cl')'
    else if nm \== '' & ty \== 'c'  ,
          & ( verify(nm, '0123456789') < 1 ,
            | verify(nm, ' .*|@', 'm') > 0 ) then
        call err 'bad name' nm': classBasicNew('ty',' nm',' cl')'
    else if nm \= '' & pos(ty, 'rs') > 0 then
        call err 'name for type' ty': classBasicNew('ty',' nm',' cl')'
    else if pos(ty, 'fcrs') > 0 then do
        if cl \== '' then
            m.n.class = mapGet(class.n2c, cl)
        else if ty == 'r' then
            m.n.class = m.class.classO
  /*    else say 'cl leer' ty nm nmTy   ???????*/
        end
    else if ty == 'm' then
        m.n.met = cl
    else if cl \== '' then
        call err 'class for type' ty': classBasicNew('ty',' nm',' cl')'
    return n
endProcedure classBasicNew


classNew: procedure expose m.
parse arg clEx 1 ty rest
    if abbrev(ty, 'n') then do
        if wordPos(ty, 'n n? n* n|') < 1 then
            call err 'bad type' ty': classNew('clEx')'
        nmTy = right(ty, 1)
        parse var rest nm ty rest
        if ty \== 'u' then
            call err 'class name' nm 'without u: classNew('clEx')'
        if nmTy == 'n' then do
             if mapHasKey(class.n2c, nm) then
                call err 'class' nm 'already defined: classNew('clEx')'
            end
        else if nmTy == '?' then do
            if mapHasKey(class.n2c, nm) then
                return mapGet(class.n2c, nm)
            end
        else if nmTy == '*' then do
            if arg() \== 1 then
                call err 'arg()='arg() 'for n* : classNew('clEx')'
            if mapHasKey(class.n2c, clEx) then
                return mapGet(class.n2c, clEx)
            end
        n = classBasicNew('u', nm, , nmTy)
        end
    else do
        nmTy = ''
        if arg() \== 1 then
            call err 'arg()='arg() 'without name: classNew('clEx')'
        if mapHasKey(class.n2c, clEx) then
               return mapGet(class.n2c, clEx)
        if length(ty) <> 1 | pos(ty, 'ufscmr') < 1 then
            call err 'bad type' ty': classNew('clEx')'
        nm = ''
        if pos(ty, 'usr') < 1 then
            parse var rest nm rest
        if ty = 'u'  then do
            n = classBasicNew(ty)
            end
        else if    ty = 'm' then do
            n = classBasicNew(ty, nm, rest)
            rest = ''
            end
        else do
            parse var rest t1 rest
            if wordPos(t1, 'u f s c m r') > 0 then do
                n = classBasicNew(ty, nm)
                m.n.class = classNew(t1 rest)
                rest = ''
                end
            else do
                n = classBasicNew(ty, nm, t1)
                end
            end
        end
    if ty \== 'u' then do
        if rest \== '' then
            call err 'rest' rest 'but end of classExp expected:' clEx
        end
    else do
        lx = 0
        do while lx < length(rest)
            cx = pos(',', rest, lx+1)
            if cx <= lx | word(substr(rest, lx+1), 1) == 'm' then
                cx = length(rest)+1
            a = mAdd(n, classNew(strip(substr(rest, lx+1, cx-lx-1))))
            lx=cx
            end
        pref = ''
        do ax=2 to arg()
            if length(arg(ax)) == 1 & arg(ax) \== ' ' then
                pref = arg(ax)' '
            else
                call mAdd n, classNew(pref || arg(ax))
            end
        end
    cr = mIterBegin('CLASS')
    do while assNN('cr', mIter(cr)) & \ classEqual(n, cr)
        end
    isNew = cr == n
    if \ isNew then do
        if mapRemove(class.n2c, n) \== n then
            call err 'mapRemove('n') mismatch'
        if m.n == 'u' & m.n.name \== '' then
            if mapRemove(class.n2c, m.n.name) \== n then
                call err 'mapRemove('m.n.name') mismatch'
        call mFree n
        n = cr
        end
    if nmTy == '' | nmTy == '*' then
        call mapAdd class.n2c, clEx, n
    if isNew then
        call classAddedNotify n
    return n
endProcedure classNew

classAdd1Method: procedure expose m.
parse arg clNm, met code
    cl = class4Name(clNm)
    if pos(m.cl, 'uvw') < 1 then
        call err 'class not nvw but' m.cl,
            'in classAdd1Method('clNm',' met code')'
    do sx = 1 to m.cl.0
        su = m.cl.sx
        if m.cl.sx = 'm' & m.cl.name == met then
            call err 'met' met 'already in' clNm
        end
    call mAdd cl, classNew('m' met code)
    return cl
endProcedure classAdd1Method

/*--- register a listener for newly defined classes
        and call it for all already defined classes -----------------*/
classAddedRegister: procedure expose m.
parse arg li
    call mAdd 'CLASS.ADDEDLISTENERS', li
    do cx = 1 to m.class.addedSeq.0
        call oRun li, m.class.addedSeq.cx
        end
    return
endProcedure classAddedRegister

/*--- to notify all listeners about a newly defined classes --------*/
classAddedNotify: procedure expose m.
parse arg cl
    call mAdd 'CLASS.ADDEDSEQ', cl
    if m.cl == 'u' then
        call classSuperSub cl
    m.cl.flds.0 = 0
    m.cl.stms.0 = 0
    m.cl.stemCl = ''
    m.cl.valueCl = ''
    call classAddFields cl, cl
    m.cl.hasFlds = m.cl.flds.0 > 1 ,
        | (m.cl.flds.0 == 1 & m.cl.flds.1 \== '') | m.cl.stms.0 > 0
    do lx = 1 to m.class.addedListeners.0
        call oRun m.class.addedListeners.lx, cl
        end
    return
endProcedure classAddedNotify

/*--- add supper and sub links for class cl -------------------------*/
classSuperSub: procedure expose m.
parse arg cl
    do ux=1 to m.cl.0
        u1 = m.cl.ux
        if m.u1 == 'u' then do
            if mPos(cl'.SUPER', u1) > 0 then
                call err u1 'is already in' cl'.SUPER.'sx ,
                    || ': classSuperSub('cl')'
            call mAdd cl'.SUPER', u1
            if mPos(cl'.SUB', cl) > 0 then
                call err cl 'is already in' u1'.SUB.'sx ,
                    || ': classSuperSub('cl')'
            call mAdd u1'.SUB', cl
            end
        end
    return
endProcedure classSuperSub

/*--- add the the fields of class cl to stem f ----------------------*/
classAddFields: procedure expose m.
parse arg f, cl, nm
    n1 = substr(nm, 1+abbrev(nm, '.') )
    if symbol('m.f.f2c.n1') \== 'VAR' then
        m.f.f2c.n1 = cl
/*    else if cl == m.f.f2c.n1 then
        return 0 */
    if cl == m.class.classV | cl == m.class.classW | m.cl=='r' then do
        if nm == '' then do
            if m.f.valueCl \== '' then
                return  err('value mistmatch')
            m.f.valueCl = cl
            end
        if nm == '' then do
             call mMove f'.FLDS', 1, 2
             m.f.flds.1 = ''
             end
        else do
            call mAdd f'.FLDS', nm
            end
        return 0
        end
    if m.cl = 's' then do
        if m.cl.class == '' then
            call err 'stem null class'
        a1 = mAdd(f'.STMS', nm)
        m.a1.class = m.cl.class
        if nm == '' then
            m.f.stemCl = m.cl.class
        return 0
        end
    if m.cl = 'f' then
        return classAddFields(f, m.cl.class, nm'.'m.cl.name)
    if m.cl.class \== '' then
        return classAddFields(f, m.cl.class, nm)
    do tx=1 to m.cl.0
        call classAddFields f, m.cl.tx, nm
        end
    return 0
endProcedure classAddFields

/*--- return true iff the two classes are equal -------------------*/
classEqual: procedure expose m.
parse arg l, r
    if m.l \== m.r | m.l.nameComp \== m.r.nameComp ,
            | m.l.class \== m.r.class | m.l.0 \== m.r.0  then
        return 0
    if m.l.met \== m.r.met  then
        return 0
    do sx=1 to m.l.0
        if m.l.sx \== m.r.sx then
            return 0
        end
    return 1
endProcedure classEqual

/*--- print object ---------------------------------------------------*/
objOut: procedure expose m.
parse arg m, pr, p1
   c = objClass(m, '')
   if c == '' then
       call out p1 'no class for' m
   else if c == m.class.classV then
       call out p1 || m.m
   else if c == m.class.classW then
       call out p1 || o2String(m)
   else
       call classOutDone c, m, pr, p1
   return
endProcedure objOut

/*--- recursively output (with out:) the object a with class t -------*/
classOut: procedure expose m.
parse arg t, a, pr, p1
    return classOutDone(if(t=='',m.class.classO, t), a, pr, p1)
endProcedure classOut

/*--- ouput object a with class t and stopper done ------------------*/
classOutDone: procedure expose m. done.
parse arg t, a, pr, p1
    if p1 == '' then
        p1 = pr
    if right(p1, 1) \== ' ' then
        p1 = p1' '
    if done.ini \== 1 then do
        done.ini = 1
        t = class4Name(t, t)
        p1 = p1'@'a' '
        end
    if done.t.a == 1 then
        return out(p1'done :'className(t) '@'a)
    done.t.a = 1
    if t = m.class.classO then do
        if a == '' then
            return out(p1'obj null')
        t = objClass(a, '')
        if t = '' then
            return out(p1'obj has no class @'m.a)
        else
            return classOutDone(t, a, pr, p1'isA')
        end

    if t == m.class.classV then
        return out(p1'=' m.a)
    if t == m.class.classW == 'w' then
        return out(p1'}' substr(a, 2))
    if m.t == 'f' then
        return classOutDone(m.t.class, a'.'m.t.name, pr, p1'.'m.t.name)
    if m.t == 'r' then do
        if m.a == '' then
            return out(p1'refTo :'className(m.t.class) '@null@')
        else
            return classOutDone(m.t.class, m.a, pr,
                    , p1'refTo @'m.a)
        end
    if m.t = 'u' then do
        t1 = m.t.1
        vv = m.t.0 > 0 & m.t.1 == m.class.classV
        call out p1 || if(m.t.name == '', 'union', ':'m.t.name) ,
             || copies(' =' m.a, vv)
        do ux=1+vv to m.t.0
            call classOutDone m.t.ux, a, pr' '
            end
        return 0
        end
    if m.t = 's' then do
        call out p1'stem' m.a.0
        do ux=1 to m.a.0
            call classOutDone m.t.class, a'.'ux, pr' ', pr' .'ux
            end
        return 0
        end
    if m.t = 'c' then do
        if m.t.name = m.a then
            call classOutDone m.t.class, a, pr, p1'choice' m.a
        return 0
        end
    if m.t = 'm' then
        return 0
    return err('bad class type' m.t)
endProcedure classOutDone
/* copy class end   ***************************************************/
/* copy map begin ******************************************************
    a map stores values at keys
    it may also maintain a list of keys
    the basic ideas are similar to the java Interface java.util.Map
    contrary to stems we also handle keys longer then 250 bytes
***********************************************************************/
/*--- initialize the module ------------------------------------------*/
mapIni: procedure expose m.
    if m.map.ini = 1 then
        return
    m.map.ini = 1
    call mIni
    m.map.0 = 0
    m.map.inlineSearch = 1
    call mapReset map.inlineName, map.inline
    return
endProcedure mapIni

mapInline: procedure expose m.
parse arg pName, opt
    if mapHasKey(map.inlineName, pName) then do
        im = mapGet(map.inlineName, pName)
        if pos('l', opt) < 1 & symbol('m.im.0') \== 'VAR' then do
            m.im.0 =  m.im.lEnd - m.im.lBegin - 1
            do ix=1 to m.im.0
                m.im.ix = strip(sourceline(ix+m.im.lBegin), 't')
                end
            end
        return im
        end
    name = '/'
    do lx = m.map.inlineSearch to sourceline()
        if \ abbrev(sourceline(lx), '$') then
            iterate
        li = sourceline(lx)
        s1 = pos('/', li)+ 1
        if s1 < 3 | s1 > 4 then
            iterate
        s2 = pos('/', li, s1)
        if s2 <= s1 then
            iterate
        if s1 == 3 then do
            if name \== substr(li, s1, s2-s1) then
                iterate
            im = 'MAP.INLINE.' || (m.map.inline.0+1)
            call mapAdd map.inlineName, name, im
            m.im.lBegin = lBeg
            m.im.lEnd = lx
            m.im.mark = mrk
            if name == pName then do
                m.map.inlineSearch = lx+1
                return mapInline(pName)
                end
            name = '/'
            end
        else if \ mapHasKey(map.inlineName,
                , substr(li, s1, s2-s1)) then do
            lBeg = lx
            mrk = substr(li, 2, s1-3)
            name = substr(li, s1, s2-s1)
            end
        else do
            name = '/'
            end
        end
    if pos('r', opt) > 0 then
        return ''
    return err('no inline data /'pName'/ found')
endProcedure mapInline

/*--- create a new map ----------------------------------------------*/
mapNew: procedure expose m.
parse arg opt
    m.map.0 = m.map.0 + 1
    return mapReset('MAP.'m.map.0 , opt)
endProcedure mapNew

/*--- make an empty map, if opt <> '' maintain stem of keys
                ('K' in map.keys, '=' in a else in opt) --------------*/
mapReset: procedure expose m.
    parse arg a, opt
    if symbol('m.map.keys.a') == 'VAR' then
        call mapClear a
    if opt = '=' then
        st = a
    else if translate(opt) = 'K' then
        st = 'MAP.KEYS.'a
    else
        st = opt
    m.map.keys.a = st
    if st \== '' then
        m.st.0 = 0
    return a
endProcedure

/*--- add a new key value pair to the map ----------------------------*/
mapAdd: procedure expose m.
parse arg a, ky, val
    vv = mapValAdr(a, ky, 'a')
    m.vv = val
    return val
endProcedure mapAdd

/*--- change the value at a key or add key value ---------------------*/
mapPut: procedure expose m.
parse arg a, ky, val
    vv = mapValAdr(a, ky, 'p')
    m.vv = val
    return val
endProcedure mapPut

/*--- return 1 if key ky exists in map a, 0 otherwise ----------------*/
mapHasKey: procedure expose m.
parse arg a, ky
    return mapValAdr(a, ky) \== ''
endProcedure mapHasKey

/*--- return the value of key ky in map a if it exists,
          else if called with a third argument return third argument
          else issue an error ----------------------------------------*/
mapGet: procedure expose m.
parse arg a, ky
    vv =  mapValAdr(a, ky)
    if vv \== '' then
        return m.vv
    else if arg() > 2 then
        return arg(3)
    else
        return err('missing key in mapGet('a',' ky')')
endProcedure mapGet

/*--- return a stem of all keys --------------------------------------*/
mapKeys: procedure expose m.
parse arg a
    if m.map.keys.a == '' then
        call err 'mapKeys('a') with no keys'
     return m.map.keys.a
endProcedure mapKeys

/*--- remove a key from the map, do nothing if it is missing ---------*/
mapRemove: procedure expose m.
parse arg a, ky
    vv = mapValAdr(a, ky)
    if vv == '' then
        return ''
    if m.map.keys.a \== '' then do
        trace ?R /* not tested yet ???wkTest */
        k = m.map.keys.a
        mx = m.k.0
        do i=1 to mx
            if m.k.i == ky then do
                m.k.i = m.k.mx
                m.k.0 = mx - 1
                return
                end
            end
        end
    val = m.vv
    drop m.a.ky
    return val
endProcedure mapRemove

/*--- remove all entries ---------------------------------------------*/
mapClear: procedure expose m.
parse arg a
    st = mapKeys(a)
    liLe = 243 - length(a)
    do kx=1 to m.st.0
        ky = m.st.kx
        drop m.st.kx
        if length(ky) <= liLe then do
            drop m.a.ky
            end
        else do
            adr = mapValAdr(a, ky)
            if adr \== '' then do
                ha = left(adr, lastPos('.', adr) - 3)
                do i = 1 to m.ha.k.0
                     drop m.ha.k.i m.ha.v.i
                     end
                 drop m.ha.k.0
                 end
            end
        end
    m.st.0 = 0
    return a
endProcedure mapClear

/*--- return the value pointer for a key, '' if non existing
             with fun = 'a' add a key, with 'p' put a key ------------*/
mapValAdr: procedure expose m.
parse arg a, ky, fun
    if length(ky) + length(a) <= 243 then do
        res = a'.'ky
         if symbol('m.res') == 'VAR' then do
            if fun == 'a' then
                call err 'duplicate key' ky 'in map' a
            return res
            end
        else if fun == '' then
            return ''
        end
    else do
        len = 243 - length(a)
        q = len % 4
        ha = a'.'left(ky, len - 2 * q) || substr(ky,
            , (length(ky)-len) % 2 + 2 * q, q) || right(ky, q)
        if symbol('M.ha.k.0') == 'VAR' then do
            do i=1 to m.ha.k.0
                if m.ha.k.i == ky then do
                    if fun == 'a' then
                        call err 'duplicate key' ky ,
                            'map' a 'hash' ha'.K.'i
                    return ha'.V.'i
                    end
                end
            end
        else do
            i = 1
            end
        if fun == '' then
            return ''
        if i > 9 then
            call err 'overflow long key' y 'in map' a 'hash' ha'.K.'i
        m.ha.k.0 = i
        m.ha.k.i = ky
        res = ha'.V.'i
        end
    if m.map.keys.a \== '' then
        call mAdd m.map.Keys.a, ky
    m.res = ''
    return res
endProcedure mapValAdr

/* copy map end *******************************************************/
/* copy mapExp begin **************************************************/
mapVia: procedure expose m.
parse arg a, ky
    sx = pos('|', ky)
    if sx < 1 then
        return mapGet(a, ky)
    via = mapGet(a, left(ky, sx-1))
    do while sx <= length(ky)
        fx = sx+1
        sx = pos('|', ky, fx)
        if sx < 1 then
            sx = length(ky) + 1
        if sx = fx then do
            if symbol('m.via') \== 'VAR' then
                call err 'missing m.'via 'at' sx 'in mapVia('a',' ky')'
            via = m.via
            end
        else do
            f = substr(ky, fx, sx - fx)
            if symbol('m.via.f') \== 'VAR' then
                call err 'missing m.'via'.'f ,
                     'at' sx 'in mapVia('a',' ky')'
            via = m.via.f
            end
        end
    return via
endProcedure mapVia

mapExpAt: procedure expose m.
parse arg a, src, sx
    m.map.ExpAt = 0
    cx = pos('$', src, sx)
    if cx < 1 then
        return substr(src, sx)
    res = substr(src, sx, cx-sx)
    do forever
        if substr(src, cx+1, 1) = '{' then do
            ex = pos('}', src, cx+2)
            if ex < 1 then
                call err 'missing } after' substr(src, cx) 'in' src
            res = res || mapVia(a, strip(substr(src, cx+2, ex-cx-2)))
            ex = ex + 1
            end
        else do
            ex = verify(src, m.mAlfDot, 'n', cx+1)
            if ex < 1 then
                return res || mapVia(a, substr(src, cx+1))
            if ex = cx+1 then do
                m.map.ExpAt = cx
                return res
                end
            res = res || mapVia(a, substr(src, cx+1, ex-cx-1))
            end
        cx = pos('$', src, ex)
        if cx < 1 then
            return res || substr(src, ex)
        res = res || substr(src, ex, cx-ex)
        end
endProcedure mapExpAt

mapExp: procedure expose m.
parse arg a, src
    res = mapExpAt(a, src, 1)
    if m.map.ExpAt \== 0 then
        call err 'mapExp stopped at' substr(src, map.ExpAt) 'in' src
    return res
endProcedure mapExp

mapExpAllAt: procedure expose m.
parse arg a, dst, src, sx, cx
    do while sx <= m.src.0
        li = mapExpAt(a, m.src.sx, cx)
        dx = m.map.ExpAt
        if (cx=1 & dx = 0) | li \= '' then
            call mAdd dst, li
        if dx = 0 then do
            cx = 1
            sx = sx+1
            end
        else do
            return sx dx
            end
        end
    return ''
endProcedure mapExpAllAt

mapExpAll: procedure expose m.
parse arg a, dst, src
    sto = mapExpAllAt(a, dst, src, 1, 1)
    if sto == '' then
         return
    lx = word(sto, 1)
    call err 'mapExpAll stopped at' sto':' m.src.lx
endProcedure mapExpAll
/* copy mapExp end ****************************************************/
/* copy m begin ********************************************************
  we use variables as follows
    m. stem m: all global data and object data that must survive
               a procedure call  (m for memory in Memoria of B5000)
        m.<mbr>.** to avoid conflicts: every rexx Module (copy) should
               only allocate addresses m.<mbr>.** with <mbr> the name of
               the rexx module
        we pass parameters around (e.g. a=address, m=memory, st=stem)
            and the called function may use m.a or m.a.subField etc.
    gg*: local variable in subroutines without procedure
    everything else: temporary data within procedure

  every subroutine is declared as procedure expose m.
        (also if no m. variable is used, because e.g. of error handling)
  the few subroutines that cannot use procedure, should use only
        variables starting with gg
***********************************************************************/
/*---make an area -----*/

mNewArea: procedure expose m.
parse arg nm, adr, newCd, freeCd
    m.m.area.0 = m.m.area.0 + 1
    a = 'M.AREA.'m.m.area.0
    if adr == '=' then
        adr = nm
    else if adr == '' then
        adr = 'M.'m.m.area.0
    if symbol('m.m.n2a.adr') == 'VAR' then
        call err 'adr' adr 'for area' nm 'already used'
    m.m.n2a.adr = a
    call mAlias adr, nm
    m.m.p2a.adr = a

    m.a.0 = 0
    m.a.free.0 = 0
    m.a.address = adr
    m.a.newCode = newCd
    m.a.freeCode = freeCd
    return nm
endProcedure mNewArea

mAlias: procedure expose m.
parse arg oldNa, newNa
    if symbol('m.m.n2a.oldNa') \== 'VAR' then
        call err 'area' oldNa 'does not exist'
    if oldNa == newNa then
        return
    if symbol('m.m.n2a.newNa') == 'VAR' then
        call err 'newName' newNa 'for old' oldNa 'already used'
    m.m.n2a.newNa = m.m.n2a.oldNa
    return
endProcedure mAlias

mBasicNew: procedure expose m. ggArea
parse arg name
    if symbol('m.m.n2a.name') \== 'VAR' then
        call err 'area' name 'does not exists'
    ggArea = m.m.n2a.name
    if m.ggArea.free.0 > 0 then do
        fx = m.ggArea.free.0
        m.ggArea.free.0 = fx-1
        m = m.ggArea.free.fx
        end
    else do
        m.ggArea.0 = m.ggArea.0 + 1
        m = m.ggArea.address'.'m.ggArea.0
        end
    return m
endProcedure mBasicNew

mNew: procedure expose m.
labelMNew:
parse arg name, arg, arg2, arg3
    m = mBasicNew(name)
    interpret m.ggArea.newCode
    return m
endProcedure mNew

mReset: procedure expose m.
parse arg a, name
    ggArea = m.m.n2a.name
    m = a
    interpret m.ggArea.newCode
    return m
endProcedure mReset

mFree: procedure expose m.
parse arg m
    p = 'M.P2A.'left(m, lastPos('.', m)-1)
    area = m.p
    if m.area.freeCode \== '' then
        interpret m.area.freeCode
    fx = m.area.free.0 + 1
    m.area.free.0 = fx
    m.area.free.fx = m
    return
endProcedure mFree
/*--- iterate over all allocate elements of an area ------------------*/
mIterBegin: procedure expose m.
parse arg nm
    a = m.m.n2a.nm
    return m.a.address'.0'
endProcedure mIterBegin

mIter: procedure expose m.
parse arg cur
    if cur == '' then
        return ''
    lx = lastPos('.', cur)
    p = 'M.P2A.'left(cur, lx-1)
    a = m.p
    ix = substr(cur, lx+1)
    do ix=ix+1 to m.a.0
        n = m.a.address'.'ix
        do fx=1 to m.a.free.0 while m.a.free \== n
            end
        if fx > m.a.free.0 then
            return n
        end
    return ''
endProcedure mIter

/*--- cut stem a to length len ---------------------------------------*/
mCut: procedure expose m.
parse arg a, len
    m.a.0 = len
    return a
endProcedure mCut

/*--- add one or several arguments to stem m.a -----------------------*/
mAdd: procedure expose m.
parse arg a
    ix = m.a.0
    do ax = 2 to arg()
        ix = ix + 1
        m.a.ix = arg(ax)
        end
    m.a.0 = ix
    return a'.'ix
endProcedure mAdd

/*--- pop last element from stem m.a ---------------------------------*/
mPop: procedure expose m.
parse arg a
    ix = m.a.0
    if ix < 1 then
        call err 'pop from empty stem' a
    m.a.0 = ix-1
    return m.a.ix
endProcedure mPop

/*--- add to m.dst.* a (sub)sequence of m.src.* ----------------------*/
mAddSt: procedure expose m.
    parse arg dst, src
    dx = m.dst.0
    do sx = 1 to m.src.0
        dx = dx + 1
        m.dst.dx = m.src.sx
        end
    m.dst.0 = dx
    return
endProcedure mAddSt

/*--- find position of first occurrence of ele in stem m,
        return 0 if nonemove a part of a stem -----------------------*/
mPos: procedure expose m.
parse arg m, ele, sx
    if sx == '' then
        sx = 1
    do x=sx to m.m.0
        if m.m.x = ele then
            return x
        end
    return 0
endProcedure mPos

/*--- move a part of a stem ------------------------------------------*/
mMove: procedure expose m.
parse arg m, sx, dx
    if dx < sx then do
        y = dx
        do x=sx to m.m.0
            m.m.y = m.m.x
            y = y + 1
            end
        end
    else if dx > sx then do
        y = m.m.0 + dx - sx
        do x=m.m.0 by -1 to sx
            m.m.y = m.m.x
            y = y - 1
            end
        end
    m.m.0 = m.m.0 + dx - sx
    return
endProcedure mMove

/*--- insert a stem into another ------------------------------------*/
mInsert: procedure expose m.
parse arg m, tx, st
    call mMove m, tx, tx+m.st.0
    do sx=1 to m.st.0
        dx = tx-1+sx
            m.m.dx = m.st.sx
            end
    return
endProcedure mInsert

/*--- strip all elements of a stem -----------------------------------*/
mStrip: procedure expose m.
parse arg st, opt
    if opt == '' then
        opt = 'b'
    do x=1 to m.st.0
        m.st.x = strip(m.st.x, opt)
        end
    return st
endProcedure mStrip


/* cat the lines of a stem, possibly repeated --------------------------
       args: stem, fmt see fGen: -------------------------------------*/
mCat: procedure expose m.
parse arg st, fmt
    if m.st.0 < 1 then
        return ''
    res = f(fmt, m.st.1)
    do sx=2 to m.st.0
        res = res || fPlus(fmt 'nxt', m.st.sx)
        end
    return res || fFld(fmt 'end')
endProcedure mCat

mIni: procedure expose m.
    if m.m.ini = 1 then
        return
    m.m.ini = 1
    m.mAlfLC  = 'abcdefghijklmnopqrstuvwxyz'
    m.mAlfUC  = translate(m.mAlfLC)
    m.mAlfa   = m.mAlfLC || m.mAlfUC
    m.mAlfNum = m.mAlfa || '0123456789'
    m.mAlfDot = m.mAlfNum || '.'
    m.mAlfRex1 = m.mAlfa'@#$?'  /* charset problem with ¬|  */
    m.mAlfRexR = m.mAlfRex1'.0123456789'
    m.m.area.0 = 0
    call mNewArea
    return
endProcedure mIni
/* copy m end *********************************************************/
/* copy adrIsp begin *************************************************/
/**********************************************************************
    lmd: catalog read
    call sequence: lmdBegin, lmdNext*, lmdEnd
        mit lmd service (mit save in file und read,
                         weil list zu langsam und listcat abstürzt)
        1. arg (grp)     als group dataset für lmd save
                         und dd name für file read
***********************************************************************/
lmdBegin: procedure expose m.
    parse arg grp, lev
    call adrIsp 'lmdinit listid(lmdId) level('lev')'
    res = adrIsp('lmdlist listid(&lmdId) option(save) group('grp')', 4)
    call adrIsp 'lmdfree listid(&lmdId)'
    if res = 0 then do
        call trc timing() 'lmdlist save' grp lev
        call adrTso 'alloc dd('grp') shr dsn('grp'.datasets)'
        end
    else do
        call trc 'no datasets found' timing() 'lmdlist save' grp lev
        call adrTso 'alloc dd('grp') dummy'
        end
    call readDDBegin grp
return /* end lmdBegin */

lmdNext:
    parse arg ggGrp, ggSt, withVolume
    if \ readDD(ggGrp, ggSt) then
         return 0
    if withVolume \== 1 then
        do ggIx=1 to value(ggSt'0')
            x = value(ggSt || ggIx, word(value(ggSt || ggIx), 1))
            end
    return 1
endSubroutin lmdNext

lmdEnd: procedure expose m.
    parse arg grp
    call readDDEnd grp
    call adrTso 'free dd('grp')'
return /* end lmdEnd */

lmd: procedure expose m.
    parse arg lev, withVol
    call lmdBegin gg1, lev
    do while lmdNext(gg1, q., withVol)
        do x=1 to q.0
           call out q.x
           end
        end
    call lmdEnd gg1
    return
endProcedure lmd
/**********************************************************************
    member list of a pds:
        call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmm: procedure expose m.
parse arg dsn
    id = lmmBegin(dsn)
    do ix=1 by 1
        m = lmmNext(id)
        if m = '' then
            leave
        call out m
        end
    call lmmEnd id
    return
endProcedure lmm

lmmBegin: procedure expose m.
parse arg dsn
    mbr = dsnGetMbr(dsn)
    pds = dsnSetMbr(dsn, )
    call adrIsp "LMINIT DATAID(lmmId) DATASET('"pds"') ENQ(SHRW)"
    call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
    res = lmmId
    if mbr <> '' then
        res = res 'pattern('mbr')'
    return res
endProcedure lmmBegin

lmmEnd: procedure expose m.
parse arg lmmId opt
    call adrIsp "LMMLIST DATAID("lmmId") option(free)", 8
    call adrIsp "LMCLOSE DATAID("lmmId")"
    call adrIsp "LMFREE DATAID("lmmId")"
    return
endProcedure lmmEnd

lmmNext: procedure expose m.
parse arg lmmId opt
    if adrIsp("LMMLIST DATAID("lmmid")" ,
               "OPTION(LIST) MEMBER(Mbr)" opt, 4 8) = 0 then
        return strip(mbr)
    else
        return ''
endProcedure lmmNext

lmmRm: procedure expose m.
parse arg dsn, mbrs
    mbrs = dsnGetMbr(dsn) mbrs
    pds = dsnSetMbr(dsn, )
    call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
    call adrIsp "LMOPEN DATAID("lmmId") OPTION(OUTPUT) "
    err = ''
    do wx=1 to words(mbrs)
        m1 = word(mbrs, wx)
        rr = adrIsp("lmmDel dataid("lmmId") member("m1")", 0 8 12)
        if rc = 0 then
            say 'removed' m1 'from' pds
        else if rc = 8 then
            say 'not found' m1 'in' pds
        else do
            err = 'error deleting' m1 'in' pds 'rc' rr strip(zerrlm)
            say err
            leave
            end
        end
    call adrIsp "LMCLOSE DATAID("lmmId")"
    call adrIsp "LMFREE DATAID("lmmId")"
    if err <> '' then
        call err err
    return
endProcedure lmmRm
/*--- address ispf with error checking -------------------------------*/
adrIsp:
    parse arg ggIspCmd, ggRet
    address ispexec ggIspCmd
    if rc = 0 then return 0
    else if ggRet == '*' then return rc
    else if wordPOS(rc, ggRet) > 0 then return rc
    else
        call err 'adr ispExec rc' rc 'in' ggIspCmd':' strip(zerrlm)
endSubroutine adrIsp

/*--- address editor with error checking -----------------------------*/
adrEdit:
    parse arg ggEditCmd, ggRet
    address isrEdit ggEditCmd
    if rc = 0 then return 0
    else if ggRet == '*' then return rc
    else if wordPOS(rc, ggRet) > 0 then return rc
    else
        call err 'adr isrEdit rc' rc 'for' ggEditCmd
endSubroutine adrEdit
/* copy adrIsp end   *************************************************/
/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
    parse arg ggTsoCmd, ggRet
    address tso ggTsoCmd
    if rc == 0                     then return 0
    else if ggRet == '*'           then return rc
    else if wordPos(rc, ggRet) > 0 then return rc
    else
        call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */

/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure expose m.
parse upper arg dsn ., addPrefix
    if left(dsn,1) = "'" then
        return strip(dsn, 'b', "'")
    sp = sysvar('SYSPREF')
    if sp == '' then
        sp = userid()
    cx = pos('~', dsn)
    if cx < 1 & addPrefix == 1 then
        return sp'.'dsn
    do while cx \== 0
        le = left(dsn, cx-1)
        ri = substr(dsn, cx+1)
        if right(le, 1) == '.' | left(ri, 1) == '.' then
            dsn = le || sp || ri
        else
            dsn = le || left('.', le \== '') || sp ,
                     || left('.', ri \== '') || ri
        cx = pos('~', spec, cx)
        end
    return dsn
endProcedure dsn2Jcl

/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure expose m.
parse arg dsn .
    return "'"dsn"'"
endProcedure jcl2dsn

dsnSetMbr: procedure expose m.
parse arg dsn, mbr
     bx = pos('(', dsn)
     if bx > 0 then
         dsn = strip(left(dsn, bx-1))
     if mbr <> '' then
         dsn = dsn'('strip(mbr)')'
     return dsn
endProcedure dsnSetMbr

dsnGetMbr: procedure expose m.
parse arg dsn
     lx = pos('(', dsn)
     rx = pos(')', dsn, lx+1)
     if lx < 1 then
         return ''
     else if lx < rx then
         return substr(dsn, lx+1, rx-lx-1)
     else
         return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
    io: read or write a dataset with the following callsequences:
        read:  readDDBegin, readDD*,  readDDEnd
        write: writeBegin,  writeDD*, writeEnd

        readDD returns true if data read, false at eof
***********************************************************************/

/*--- prepare reading from a DD --------------------------------------*/
readDDBegin: procedure expose m.
    parse upper arg ggDD
    call errAddCleanup 'call readDDEnd' ggDD', "*"'
return /* end readDDBegin */

/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt = '' then
        ggCnt = 100
    call adrTso 'execio' ggCnt 'diskr' ggDD '(stem' ggSt')', 2
    return (value(ggSt'0') > 0)
return /* end readDD */

/*--- finish reading DD  ggDD ----------------------------------------*/
readDDEnd: procedure expose m.
    parse upper arg ggDD, ggRet
    call errRmCleanup 'call readDDEnd' ggDD', "*"'
    return adrTso('execio 0 diskr' ggDD '(finis)', ggRet)
endProcedure readDDEnd

/*--- prepare writing to DD ggDD -------------------------------------*/
writeDDBegin: procedure expose m.
    parse upper arg ggDD
                  /* ensure file is erased, if no records are written */
    call adrTso 'execio' 0 'diskw' ggDD '(open)'
    call errAddCleanup 'call writeDDEnd' ggDD', "*"'
return /* end writeDDBegin */

/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    call adrTso 'execio' ggCnt 'diskw' ggDD '(stem' ggSt')'
    return
endSubroutine writeDD

/*--- end writing to dd ggDD (close) --------------------------------*/
writeDDEnd: procedure expose m.
parse upper arg ggDD, ggRet
    call errRmCleanup 'call writeDDEnd' ggDD', "*"'
    return adrTso('execio 0 diskw' ggDD '(finis)', ggRet)
endProcedure writeDDEnd

/*--- readNx: read next line, using buffer ---------------------------*/
/*--- begin: allocate dsnSpec and ini ------------------------ -------*/
readNxBegin: procedure expose m.
    parse arg m, m.m.dsn, m.m.dd, m.m.Cnt
    if m.m.dd = '' then
        m.m.dd = 'DDNX'
    if m.m.cnt = '' then
        m.m.cnt = 1000
    m.m.cx = m.m.cnt + 999
    m.m.buf0x = 0
    m.m.0 = 0
    call dsnAlloc 'dd('m.m.dd')' m.m.dsn
    call readDDBegin m.m.dd
    return m
endProcedure readDDNxBegin

/*--- return the stem of the next line, or '' at end -----------------*/
readNx: procedure expose m.
parse arg m
    ix = m.m.cx + 1
    m.m.cx = ix
    if m.m.cx <= m.m.0 then
        return m'.'ix
    m.m.buf0x = m.m.buf0x + m.m.0
    if \ readDD(m.m.dd, 'M.'m'.', m.m.cnt)then
        return ''
    m.m.cx = 1
    return m'.1'
endProcedure readDDNx

/*--- return the position (line number) of reader
           plus le characters of the current line (default 50) ------*/
readnxPos: procedure expose m.
parse arg m, le
    li = m'.'m.m.cx
    li = strip(m.li, 't')
    if arg() < 2 then
        le = 50
    if le < 1 then
        li = ''
    else if length(li) <= le then
        li = ':' li
    else
        li = ':' left(li, le-3)'...'
    return 'line' (m.m.buf0x + m.m.cx)li
endProcedure readnxPos

/*--- close and deallocate ------------------------------------------*/
readNxEnd: procedure expose m.
parse arg m
    call readDDEnd m.m.dd
    call tsoFree m.m.dd
    return
endProcedure readDDNxEnd

/*--- standardise a dsn spec
       word1             dsName or -
       word2             dd     or -
       word3             disp   or -
       word4 to first :  attributes in tso format
       after first :     attributes for new allocation
----------------------------------------------------------------------*/
dsnSpec: procedure expose m.
parse upper arg spec
    rr = ''      /* put leading - in separate words */
    do sx=1 while words(rr) < 3 & wx \= ''
        wx = word(spec, sx)
        do while abbrev(wx, '-') & words(rr) < 3
            wx = substr(wx, 2)
            rr = rr '-'
            end
        rr = rr wx
        end
    spec = rr subWord(spec, sx)
    na = ''
    dd = ''
    di = ''
    if left(spec, 1) = '&' then /* external spec is handled ok */
        spec = strip(substr(spec, 2))
    do wx=1 by 1
        w = word(spec, wx)
        if w = '' | abbrev(w, '.') | abbrev(w, ':') then
            leave
        else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
            di = w
        else if w = 'CATALOG' then
            di = di w
        else if abbrev(w, 'DD(') then
            dd = substr(w, 4, length(w)-4)
        else if abbrev(w, 'DSN(') then
            na = strip(substr(w, 5, length(w)-5))
        else if na == '' then
            na = dsn2jcl(w)
        else if dd == '' then
            dd = w
        else if di == '' then
            di = w
        else
            leave
        end
    if na == '' then
        na = '-'
    else if abbrev(na, "'") then
        na = substr(na, 2, length(na)-2)
    if dd == '' then dd = '-'
    if di == '' then di = '-'
    re = subword(spec, wx)
    if abbrev(re, '.') then
        re = substr(re, 2)
    return na dd di re
endProcedure dsnSpec

/*--- alloc a dsn with dsnAlloc
          if the dsn is inuse wait and retry
          until either the allocation is successfull
          or the timeout occurs --------------------------------------*/
dsnAllocWait: procedure expose m.
parse upper arg spec, pDi, pDD, timeOut
    x = max(1, arg() - 1)
    do rt=0
        m.adrTsoAl.1 = ''
        m.adrTsoAl.2 = ''
        m.adrTsoAl.3 = ''
        call outtrap m.adrTsoAl.
        res = dsnAlloc(spec, pDi, pDD, '*')
        call outtrap off
        if \ abbrev(res, ' ') then
            return res
        msg = m.adrTsoAl.1'\n'm.adrTsoAl.2'\n'm.adrTsoAl.3
        if rt > timeOut & timeOut \== '' then
            return err('timeout allocating' spec time() '\n'msg)
        if pos('DATA SET IS ALLOCATED TO ANOTHER', msg) < 1 then
            return err('allocating' spec'\n'msg)
        say time() 'sleep and retry alloc' spec
        call sleep 1, 0
        end
endProcedure dsnAllocWait

/*--- alloc a dsn or a dd
          spec '-'<ddName>
               datasetName? disposition? '.'? attributes? (':' newAtts)?
          disp default disposition
          dd   default dd name
          retRc   erlaubte ReturnCodes (leer = 0)
          returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, pDi, pDD, retRc
    parse value dsnSpec(spec) with na dd di rest
    if na = '-' then
        m.dsnAlloc.dsn = ''
    else
        m.dsnAlloc.dsn = na
    if na == '-' & dd \== '-' & di == '-' & rest = '' then
        return dd
    if dd == '-' & pDD \== '' then
        dd = pDD
    if dd == '-' then do
        if symbol('m.adrTso.ddNum') = 'VAR' then
            dd = m.adrTso.ddNum + 1
        else
            dd = 1
        m.adrTso.ddNum = dd
        dd = 'DD' || dd
        end
    if di = '-' & pDi \== '' then
        di = pDi
    if di = '-' then
        di = 'SHR'
    else if pos('(', na) < 1 then
        nop
    else if di = 'MOD' then
        call err 'disp mod for' na
    else
        di = 'SHR'
    if pos('/', na) > 0 then
        return csmAlloc(na dd di rest, retRc)
    else
        return tsoAlloc(na dd di rest, retRc)
endProcedure dsnAlloc

tsoAlloc: procedure expose m.
parse arg na dd disp rest ':' nn, retRc
    c = 'alloc dd('dd')' disp
    if na \== '-' then
        c = c "DSN('"na"')"
    else if disp = 'NEW' and nn \== '' then
        c = c dsnCreateAtts(,nn)
    call outtrap m.adrTsoAl.
    alRc = adrTso(c rest, '*')
    call outtrap off
    if alRc =  0 then do
        call errAddCleanup 'call tsoFree' dd', "*"'
        return dd 'call tsoFree' dd';'
        end
    if nn \= '' & wordPos(disp, 'OLD SHR') > 0 ,
          & sysDsn("'"m.dsnAlloc.dsn"'") == 'DATASET NOT FOUND' then do
        say 'tsoAlloc creating' c rest ':'nn
        call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(na, nn)
        call adrTso 'free  dd('dd')'
        return tsoAlloc(na dd disp rest, retRc)
        end
    do ax=1 to m.adrTsoAl.0
        say m.adrTsoal.ax
        end
    if retRc = '*' | wordPos(alRc, retRc) > 0 then
        return ' ' alRc
    call err 'tsoAlloc rc' alRc 'for' c rest
endProcedure tsoAlloc

tsoAtts: procedure expose m.
parse arg dsn
    rc = listDsi("'"dsn"' SMSINFO")
    if rc = 0 then
        mv = ''
    else if rc = 4 & sysReason = 19 then do
        mv = 'UNITCNT(30)'
        say 'multi volume' mv
        end
    else if rc ^= 0 then
        call err 'listDsi rc' rc 'reason' sysReason,
                             sysMsgLvl1 sysMsgLvl2
    al = 'CAT'
    al = ''
    if right(sysDsSms, 7) == 'LIBRARY' ,
        | abbrev(sysDsSms, 'PDS') then
         al = al 'DSNTYPE(LIBRARY)'
    if sysUnits = 'TRACK' then
        sysUnits = 'TRACKS'
    al = al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
        "DATACLAS("sysDataClass")" ,
        "RECFM("translate('1 2 3', ' 'sysREcFM, ' 123')")",
        "LRECL("SYSLRECL")",
        "blksize("sysBLkSIZE")",
        "SPACE("sysPrimary"," sysSeconds")" sysUnits mv
    return al
endProcedure tsoAtts

tsoFree: procedure expose m.
parse arg dd, ggRet
    call adrTso 'free dd('dd')', ggRet
    call errRmCleanup 'call tsoFree' dd', "*"'
    return
endProcedure tsoFree

dsnCreateAtts: procedure expose m.
parse arg dsn, atts, forCsm
    forCsm = forCsm == 1
    aU = ' 'translate(atts)
    if abbrev(atts, ':') then do
        parse var atts a1 atts
        bl = 32760
        rl = substr(a1, 3)
        if abbrev(a1, ':F') then do
            if rl = '' then
                rl = 80
            recfm='f b'
            bl = bl - (bl // rl)
            end
        else do
            if rl = '' then
                rl = bl-4
            recfm = substr(a1, 2, 1) 'b'
            end
        if forCsm then
            atts =  atts "recfm("space(recfm, 0)") lrecl("rl")",
                    "blkSize("bl")"
        else
            atts = atts "recfm("recfm") lrecl("rl") block("bl")"
        end
    if pos('(', dsn) > 0 & pos(' DSNTYPE(', aU) < 1 ,
                         & pos(' DSORG(',   aU) < 1 then
        atts = atts 'dsntype(library) dsorg(po)'
    if pos(' MGMTCLAS(', aU) < 1 then
        atts = atts 'mgmtclas(COM#A091)'
    if pos(' SPACE(', aU) < 1 then
        if forCsm then
            atts = atts 'space(10, 1000) cylinder'
        else
            atts = atts 'space(10, 1000) cyl'
    if dsn == '' then
       return atts
    return "dataset('"dsnSetMbr(dsn)"')" atts
endProcedure dsnCreateAtts

/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
    ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
    call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
    interpret subword(ggAlloc, 2)
    return
endSubroutine readDsn

/*--- write the dataset specified in ggDsnSpec from stem ggSt
          write ggCnt records if not empty otherwise ggst0
          if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
    call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
            '(stem' ggSt 'open finis)'
    interpret subword(ggAlloc, 2)
    if ggSay == 1 | m.debug == 1 then
       say ggCnt 'records written to' ggDsnSpec
    return
endSubroutine writeDsn

copyDSN: procedure expose m.
parse arg frSpec, toSpec, ggSay
    frDD = dsnAlloc(frSpec, 'SHR', 'FRDD')
    toDD = dsnAlloc(toSpec, 'OLD', 'TODD')
    call readDDBegin word(frDD, 1)
    call writeDDBegin word(toDD, 1)
    cnt = 0
    do while readDD(word(frDD, 1), r.)
        call writeDD word(toDD, 1), r.
        cnt = cnt + r.0
        end
    call readDDEnd word(frDD, 1)
    call writeDDEnd word(toDD, 1)
    interpret ';' subword(frDD, 2) '; ; ;' subword(toDD, 2)
    if ggSay == 1 | m.debug == 1 then
       say cnt 'records copied from' frSpec 'to' to toSpec
    return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
/* copy err begin ******************************************************
    messages, errorhandling,help
***********************************************************************/
errIni: procedure expose m.
    if m.err.ini == 1 then
        return
    call outIni
    m.err.ini     = 1
    m.err.handler = ''
    m.err.cleanup = ';'
    m.err.opt     = ''
    return
endProcedure errIni
/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
    call errIni
    parse arg m.err.opt, m.err.handler
    if pos('I', translate(m.err.opt)) > 0 then
        if errOS() \== 'LINUX' then
            if sysVar('sysISPF') = 'ACTIVE' then
                    call adrIsp 'control errors return'
    return
endSubroutine errReset

/*--- error routine: abend with message ------------------------------*/
err:
    parse arg ggTxt, ggOpt
    call errIni
    drop err handler cleanup opt call return
    if ggOpt == '' & m.err.handler \== '' then do
        if 1 then do /* no detection of recursive err call loop
                        --> will anyway fail by stack overflow */
            interpret m.err.handler
            end
        else do
                     /* avoid recursive err call loop */
            drop call return
            if symbol('m.err.call') \== 'VAR' then
                m.err.call = 1
            else
                m.err.call = m.err.call + 1
            if m.err.call > 10 then do
                say 'errHandler loop:' m.err.handler
                end
            else do
                m.err.return = 1
                call errInterpret m.err.handler
                m.err.call = m.err.call - 1
                if m.err.return then
                    return result
                end
            end
        end
    call outDst
    call errSay ggTxt, 'e'
    call errCleanup
    if ggOpt == '' then
        ggOpt = m.err.opt
    ggOpt = translate(ggOpt)
    if pos('T', ggOpt) > 0  then do
        trace ?r
        say 'trace ?r in err'
        end
    if pos('H', ggOpt) > 0  then do
        call errSay 'divide by zero to show stackHistory', 'e'
        x = 1 / 0
        end
    call errSay 'exit(12)', 'e'
    exit errSetRc(12)
endSubroutine err

/*--- error routine: user message cleanup exit -----------------------*/
errEx:
    parse arg ggTxt
    call errIni
    call outDst
    call errSay ggTxt
    call errCleanup
    exit 8
endProcedure errEx

errAddCleanup: procedure expose m.
parse arg code
    if m.err.ini \== 1 then
        call errIni
        /* concatenate backwards, then it is executed also backwards */
    m.err.cleanup = ';'code || m.err.cleanup
    return
endProcedure errAddCleanup

errRmCleanup: procedure expose m.
parse arg code
    if m.err.ini \== 1 then
        call errIni
    cx = pos(';'code';', m.err.cleanup)
    if cx > 0 then
        m.err.cleanup = left(m.err.cleanup, cx) ,
                     || substr(m.err.cleanup, cx + length(code)+2)
    return
endProcedure errRmCleanup

errCleanup: procedure expose m.
    call errIni
    cl = m.err.cleanup
    if cl = ';' then
        return
    m.err.cleanup = ';'
    say 'err cleanup begin' cl
    call errInterpret cl
    say 'err cleanup end' cl
    return
endProcedure errCleanup

errInterpret: procedure expose m.
parse arg code
    interpret code
    m.err.return = 0
    return
endProcedure errInterpret
/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
    interpret 'assertRes =' arg(1)
    if \ assertRes then
        call err 'assert failed' arg(1)':' arg(2)
    return
endProcedure assert

/*--- output an errorMessage msg with pref pref
           split message in lines at '/n' ---------------------------*/
errSay: procedure expose m.
parse arg msg, pref
    parse source . . ggS3 .                           /* current rexx */
    if pref == 'e' then
        msg = 'fatal error in' ggS3':' msg
    else if pref == 'w' then
        msg = 'warning in' ggS3':' msg
    else if pref \== '' then
        msg = pref':' msg
    return outNl(msg)
endProcedure errSay

/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg, op
    call errSay msg, 'e'
    call help
    call err msg, op
endProcedure errHelp

/*--- return the Operating System we are running on: TSO or LINUX ---*/
errOS: procedure expose m.
    parse source os .
    return os
endProcedure errOS

/*--- set rc for ispf: -------------------------------------------------
    if a cmd is run by ispStart, its RC is ignored,
         but ISPF passes the value of the shared varible 3IspfRc
         back as return code
----------------------------------------------------------------------*/
errSetRc: procedure expose m.
parse arg zIspfRc
    if errOS() \== 'LINUX' then
           if sysVar('sysISPF') = 'ACTIVE' then
            address ispExec vput 'zIspfRc' shared
    return zIspfRc
endProcedure errSetRc

/*--- output a trace message if m.tr is set -----------------------*/
trc: procedure expose m.
parse arg msg
    if m.trace == 1 then
        call out 'trc:' msg
    return
endProcedure trc

debug: procedure expose m.
parse arg msg
    if m.debug == 1 then
        call out 'debug' msg
    return
endProcedure debug

/*--- display the first comment block of the source as help ----------*/
help: procedure expose m.
    parse source . . s3 .
    call out right(' help for rexx' s3, 79, '*')
    do ax=1 to arg()
        say ' ' arg(ax)
        end
    do lx=1 by 1
        if pos('/*', sourceLine(lx)) > 0 then
            leave
        else if lx > 10 then do
            call out 'initial commentblock not found for help'
            return
            end
        end
    do lx=lx+1 by 1
        li = strip(sourceLine(lx), 't', ' ')
        if pos('*/', li) > 0 then
            leave
        call out li
        end
    call out right(' end help for rexx' s3, 79, '*')
    return 4
endProcedure help

/*--- output all lines (separated by '\n') of all args --------------*/
outNl: procedure expose m.
    do ax=1 to max(1, arg())
        msg = arg(ax)
        sx = 0
        bx = -1
        do lx=1 until bx >= length(msg)
                ex = pos('\n', msg, bx+2)
            if ex < 1 then
                ex = length(msg)+1
            call out substr(msg, bx+2, ex-bx-2)
            bx = ex
         end
        end
    return 0
endProcedure outNl
/* copy err end   *****************************************************/
/* copy ut begin  *****************************************************/
/*--- if function  warning all3 arguments get evaluated|
                   e.g if(x=0, 'infinity', 1/0) will fail| -----------*/
if: procedure expose m.
parse arg co, ifTrue, ifFalse
    if co then
        return ifTrue
    else
        return ifFalse
endProcedure if
/*--- embedded ASSignement:
      assign the second argument to the variable with name in first arg
      and return the value assigned ----------------------------------*/
ass:
    call value arg(1), arg(2)
    return arg(2)
/*--- embedded ASSignement only if NotNull:
      assign the second argument to the variable with name in first arg
      if the second arg is not null, return new value ---------------*/
assIf:
    if arg(2) == '' then
        return value(arg(1))
    call value arg(1), arg(2)
    return arg(2)

/*--- return first nonNull argument ---------------------------------*/
nn:
    if arg(1) \== '' then
        return arg(1)
    if arg(2) \== '' then
        return arg(2)
    call err 'nn() both args empty'

/*--- embedded ASSignement return NotNull:
      assign the second argument to the variable with name in first arg
      and return 1 if value not null, 0 if null ----------------------*/
assNN:
    call value arg(1), arg(2)
    return arg(2) \== ''

/*--- return current time and cpu usage ------------------------------*/
timing: procedure expose m.
return return time() 'ela='time('E') 'cpu='sysvar('syscpu'),
            'su='sysvar('syssrv')

timingTest: procedure expose m.
    say 'begin' timing()  sysvar('sysnode')
    do 30000000
       end
    say 'end  ' timing()
return

/*--- sleep several seconds ------------------------------------------*/
sleep: procedure expose m.
parse arg secs, sayIt
    if sayit <> 0 then
        say 'sleeping' secs 'secs' time()
    CALL SYSCALLS 'ON'
    ADDRESS SYSCALL "sleep" secs
    CALL SYSCALLS 'OFF'
    if sayit <> 0 then
        say 'slept' secs 'secs' time()
    return
endProcedure sleep

/*--- elongate inp with spaces up to given len -----------------------*/
elong: procedure expose m.
parse arg inp, len
    if length(inp) >= len then
        return inp
    return left(inp, len)
endProcedure elong

/*--- quote string txt using quoteChar qu ("""" ==> ") ---------------*/
quote: procedure expose m.
parse arg txt, qu
    if qu = '' then
        qu = '"'
    res = qu
    ix = 1
    do forever
        qx = pos(qu, txt, ix)
        if qx = 0 then
            return res || substr(txt, ix) || qu
        res = res || substr(txt, ix, qx-ix) || qu || qu
        ix = qx + length(qu)
        end
endProcedure quote

/*--- return the count of occurrences of needle in heyStack ----------*/
posCount: procedure expose m.
parse arg needle, hayStack, start, fin
    if start = '' then
        start = 1
    if fin = '' then
        fin = length(hayStack) + 1 - length(needle)
    do cnt = 0 by 1
        start = pos(needle, haystack, start)
        if start < 1 | start > fin then
             return cnt
        start = start + length(needle)
        end
endProcedure posCount

repAll: procedure expose m.
parse arg src, w, new
    res = ''
    cx = 1
    do forever
        nx = pos(w, src, cx)
        if nx < 1 then
            return res || substr(src, cx)
        res = res || substr(src, cx, nx-cx) || new
        cx = nx + length(w)
        end
endProcedure repAll

repAllWords: procedure expose m.
parse arg src, w, new
    res = ''
    wx = 0
    cx = 1
    do forever
        wx = wordPos(w, src, wx+1)
        if wx < 1 then
            return res || substr(src, cx)
        nx = wordindex(src, wx)
        res = res || substr(src, cx, nx-cx) || new
        cx = nx + length(w)
        end
endProcedure repAllWords
/* copy ut end ********************************************************/
}¢--- A540769.WK.REXX.O13(DBX1126) cre=2012-11-26 mod=2012-11-26-16.21.41 A540769 ---
/* rexx ****************************************************************
synopsis:     DBX fun args                                       v1.4

edit macro fuer CS Nutzung von DB2 AdminTool 10.1
           (die a* Funktionen gehen auch mit tso dbx ...)

    ?            diese Hilfe
    aa,aw,ac pr  naechste AuftragsId suchen fuer praefix pr
                 aa: anzueigen, aw, ac entsprechendes Member editieren
    n, nt        neuen Auftrag erstellen (nt = test)
    q subSys?    query und expandiert Scope Zeilen vom Db2Catalog
                     * fuegt alle bestehenden Objekte ein
                     * ergaenzt scope Zeile mit infos, z.B tb -> ts
                     * UNDO um Expansion rueckgaengig zu machen
                     * mit q, qq, etc. Zeile selekieren,
                               sonst werden alle expandiert
                     * funktioniert nicht nur in Auftrag
                 falls SubSys angegeben wird da gesucht sonst DBAF/DBOF
    c opt?       compare source gegen target
    i subs nct   changes in Db2Subsystem subSys importieren
                 subs = sub(,sub)*: Liste von Subsystemen/Umgebungen
                 sub: DBAF (lokal), RR2/DBOF (im PTA), RZ8(betr. Subsys)
                      ET, IT, PA (pta), PR (prod), pq(pta+rq2)
                          ==> Rz/Subsys des PromotionPaths
                 nct: Nachtraege:
                     leer: noch nicht in dieses SubSys importierte
                     =   : vom letzten import plus neue
                     89A : Nachtraege 8, 9 und A
    v opt?       version files erstellen für altes Verfahren
    vc vd vj vs vt vy ec ed ej es et ey subsys? nt?
                 view or edit cdl, ccl jcl, srcddl, trgddl, strategY
    sw rz?       WSL ins RZ rz schicken und clonen, ohne rz multiclone

    opt?         Optionale Optionen =, -f, -=f etc. (fuer c, v, st)
        =        statt aktuelle source aus Db2 extrahieren
                       letzte extrahierte Version als Source brauchen
        -f       force: ignoriere QualitaetsVerletzungen

    cloneWsl     dbaMulti Funktionalitaet ist hier implementiert

Typen fuer scope und dbx q (analog adminTool, grossOderKlein ist egal):
    type                DB TS TB VW AL IX UDT UDF TG SP SQ SY
    1stelliges Kuerzel  D  S  T  V  A  X  E   F   J  O  Q  Y
Optionen im Auftrag: v10, v72, keeptgt 0, qCheck 0, dbaCheck 0
Variabeln im Auftrag (expandiert werden $varName imd ${varName})
                      varName ist case sensitive|)
    srcNm        NamensKonvention compare source (z.B. DBAF)
    trgNm        NamensKonvention compare target (z.B. DBAF)
    impNm        NamensKonvention import Ziel (z.B. DBOF)
    subsys       Db2 Subsystem (source, target, import, je nachdem)
     Optionen:   ca, bmc, ibm
   Funktionen:   ia (imp+ana), ie (ia+exe), ee,ve (exejcl), ew,vw (wsl)
************************************************************************
 9.11.2012 W. Keller ey und vy für view/edit strategy
               */ /* end of help
23. 8.2012 W. Keller v1015 für extract
13. 7.2012 W. Keller typo in query scope
18. 5.2012 W. Keller im neuen Auftrag source DX0G target DC0G/DCVG @rz8
                     PromotionPaths angepasst und vereinfacht
 4. 4.2012 W. Keller sqlQuery via csm for dbx q and qualitycheck
 4. 4.2012 W. Keller fix, import submits after last import empty, chroi
14. 2.2012 W. Keller ca  prototype
23.12.2011 W. Keller bmc prototype
13.12.2011 W. Keller RZ0, ToolPrefix, csmCopy
 3.11.2011 W. Keller Zuegeltermine 2012
 6. 9.2011 W. Keller v10 RZ8 DE0G UND DM0G ausgebaut
29.08.2011 W. Keller v10 default mit p8 und p9 alias
24.06.2011 W. Keller v10 und v72
 8.06.2011 W. Keller stored procedures editiert und version=%
26.05.2011 W. Keller qCheck 0 eingefügt
30.03.2011 W. Keller import et, it, .... , DD0G -> it, trg dc0g, i pa
24.12.2010 W. Keller plexZ (mit location CHROI00Z...)
10.12.2010 W. Keller db2 release 915, damit instead of trigger kommen
19.11.2010 W. Keller viewEdit macht jetzt view für v* statt immer edit
14.10.2010 W. Keller dp4g und dp2g in rz4.* bzw rz2.*, Zuegelsch 2012
24. 8.2010 W. Keller zusätzliche Typen für scope und dbx q
23. 8.2010 W. Keller dbzf ausgebaut
 6. 8.2010 W. Keller vc vj vs vt ec ej es et nt? eingebaut
 5. 8.2010 W. Keller stepName recTrg instead of recSrc for target
12. 7.2010 W. Keller sq=sequence für compare (fehlt noch in q)
18. 2.2010 W. Keller class=BS0 für PTA (wegen RR25 und RR26)
11. 2.2010 W. Keller dbaCheck mit ex0
 9. 2.2010 W. Keller sendJob timeout 600 auch in extractScopeVersion
 1.12.2009 W. Keller CSM.RZ1.P0.EXEC statt CMS.DIV...
12.11.2009 W. Keller Qualitätsfehler ohne -f stoppt wieder
25.10.2009 W. Keller DeltaNew überall, -a Optione, batch und do removed
28.09.2009 W. Keller Optionen keepTgt 0 und dbaCheck 0
10.09.2009 W. Keller mask ausschalten falls kein maskFile
07.09.2009 W. Keller fix error with dbaMulti
25.08.2009 W. Keller err statt fehl in line 1001
12.08.2009 W. Keller batch (ohne for) geflickt, ac pr -r: return new mbr
12.08.2009 W. Keller Zuegelschub wird nach Datum ausgesucht
19.05.2009 P. Kuhn   DEFER im Masking ignorieren
05.03.2009 P. Kuhn   Qualitaets-Check "ts not logged" eingebaut
18.12.2008 p. kuhn   neues Delta Merge Verfahren im import fuer DQ0G
18.12.2008 p. kuhn   SW fuer DVBP im RZ2 (frueher im RZ4)
10.12.2008 p. kuhn   Timeout vom Sendjob von 30 auf 600 Sek. erhoeht.
28.11.2008 w. keller v9 Fehler bei leerer Selektion
24.09.2008 p. kuhn   v9 checks
15.09.2008 p. kuhn   beim ersten import wird cdl dbaCheck't und editiert
09.09.2008 w. keller target mit RZ (job holt ddl, version aus RZ), opt =
08.08.2008 w. keller import mit wildcards
24.07.2008 w. keller overwrite ausgebaut +25.7
24.06.2008 w. keller fix spezialFall für DB         +18.7
19.05.2008 w. keller qualitaetsKontolle in c,v und st und -f Option
13.05.2008 w. keller rw, rs, sw, st und do ... for ... eingebaut
25.02.2008 w. keller subSys argument für dbx q
22.11.2007 w. keller fun v für ObjectCompare Verfahren inkl db ddl save
                     dq0g mit eigenen Libraries
12.11.2007 w. keller DSN für neuen Wartungsstand
05.06.2007 w. keller neu
***********************************************************************/
/* Ideen, Wünsche ******************************************************
     AuftragsId aus Prototyp bestimmen
     LCTL
     sämtliche infos aus XLS
     jedesmal Zwischenspeichern mit und restore Funktion
     analyze generieren, falls möglich
     batch Funktionen ganzen Zügelschub importieren usw. ==> mit wsh|
     generierte Runs starten in richtiger Reihenfolge
     mails an Entwickler schicken
     Rückmeldung falls keine changes (leeres cdl)

     Type Tabelle
                       char   type Variabeln
                                   fuer extract
        db             d      DB
        ts             s      TS
        tb/vw/alias    a v t  -    own  name
        ix             x      IX
        userDefinedTy  e      -    sch  udt
        function       f      -    sch  udf
        trigger        j      TG   qual name
        storedProc     o      SP   qual name
        sequence       q      SQ   qual name
        synonym        y      SY   qual name

**** alte Funktion (braucht es nicht mehr) *****************************
    sw rz?       WSL aus RZ rz holen und clonen, ohne rz mulitclone
    rs rz        source ddl und version aus RZ rz holen
    st opt? rz   target ddl und version extrahieren und ins rz schicken

***********************************************************************/
    m.debug = 0
    call errReset h
    if sysvar(sysispf) = 'ACTIVE' then
        call adrIsp 'Control errors return'
    call jIni
    parse upper arg oArgs
    oArg1 = word(oArgs, 1)
    m.auftrag.dataset = 'DSN.DBX.AUFTRAG'
    m.editMacro = 0
    m.editProc  = 0
    if oArgs = '' then do
        if adrEdit('macro (oArgs) NOPROCESS', '*') <> 0 then
            call errHelp('keine Argumente und kein editMacro rc =' rc)
        m.editMacro = 1
        call adrEdit 'caps off'
        call adrEdit '(x) = member'
        m.auftrag.member = x
        m.edit.member = x
        call adrEdit '(x) = dataset'
        m.auftrag.dataset = x
        m.edit.dataset = x
        end
    if oArgs = '' | pos('?', oArgs) > 0 then
        exit help()
    call dbxIni
    m.exitValue = 0
    call work oArgs
    call sqlDisconnect
    exit m.exitValue

/*--- hier wählen wir die wirklich Arbeit aus -----------------------*/
work: procedure expose m.
parse arg wArgs
    parse upper var wArgs fun args
    args = strip(args)
    call mapReset e, 'K'
    call mapPut e, 'dol', '$'
    call stepGroup 1
    m.auftrag.force = 0
    do while abbrev(fun, '-')
        r = substr(fun, 3)
        if abbrev(fun, '-A') then do
             if verify(r, '.()', 'm') < 1 then do
                  m.auftrag.member = r
                  end
             else do
                 m.auftrag.dataset = dsnSetMbr(r)
                 m.auftrag.member =  dsnGetMbr(r)
                 end
             end
        else if abbrev(fun, '-F') then do
             m.auftrag.force = 1
             end
        else do
            call err 'bad opt' fun 'in' wArgs
            end
        parse var args fun args
        if fun = '' then
            return errHelp('fun missing in args:' wArgs)
        end

    if m.auftrag.dataset = 'A540769.DBX.AUFTRAG' then do
        m.libSkels = 'A540769.wk.skels(dbx'
        m.libPre   = 'A540769.DBX'
        end
    else if m.auftrag.dataset = 'DSN.DBQ.AUFTRAG' then do
        m.libSkels = 'ORG.U0009.B0106.KIDI63.SKELS(dbx'
        m.libPre   = 'DSN.DBQ'
        end
    else do
        m.libPre   = 'DSN.DBX'
        m.libSkels = 'ORG.U0009.B0106.KIDI63.SKELS(dbx'
        end
    if 1 then do   /* ??? testSkels */
        if userid() = 'A540769' then
            m.libSkels = 'A540769.wk.skels(dbx'
        say '??? test skels' m.libSkels '|||'
        end
    m.libSpezial = m.libPre'.spezial'
    call configureRZ sysvar('SYSNODE')
    m.sysRz = m.myRz
    if m.myRZ = RZ1 then
        m.sysSub = DBAF
    else
        m.sysSub = 'noSysSubFor'm.myRz
    call mapPut e, 'rexxLib', 'ORG.U0009.B0106.KIDI63.EXEC'
    call mapPut e, 'libSkels', translate(m.libSkels)
    call mapPut e, 'ovrDD', 'DISP=SHR,DSN='m.libPre'.MASK(OVERRIDE)'
    call mapPut e, 'libPre', m.libPre

    if fun = 'Q' then              /* macht process selber | */
        return queryScope(args)
    if m.editMacro & ^ m.editProc then do
        call adrEdit 'process'
        m.editProc = 1
        end
    if wordPos(fun, 'AA AC AW') > 0 then
        return nextAuftrag(word(args, 1), substr(fun, 2), word(args, 2))
    else if fun = 'COPYDUMMY' then
        return copyDummy(args)
    else if fun = 'CLONEWSL' then
        return cloneWsl(word(args, 1), word(args, 2), 1==word(args, 3))

    call memberOpt
    if wordPos(fun, 'N NT') > 0 then
        call neuerAuftrag (fun = 'NT'), args, m.auftrag.member
    else if fun = 'C' | fun = 'V' | fun = 'ST' then
        call compare fun, args
    else if wordPos(fun, 'I IA IE') > 0 then
        call import fun, args
    else if fun = 'N' then
        call neuerNachtrag args
    else if fun = 'RS' then
        call receiveSource args
    else if fun = 'RW' then
        call receiveWSL args
    else if fun = 'SW' then
        call sendWSL args
    else if wordPos(fun, 'VC VD VE VJ VS VT VW VY' ,
                         'EC ED EE EJ ES ET EW EY') > 0 then
        call viewEdit fun, args
    else
        call errHelp 'bad fun' fun 'in args' args, , ' '
    if m.auftrag.orig = m.auftrag.0 | m.auftrag.0 = '' then do
        end
    else do
        if abbrev(m.auftrag.orig, 'rmQu') then do
                     /* alte | Zeilen loeschen */
            oldOr = word(m.auftrag.orig, 2)
            ox = 0
            do ix = 1 to m.auftrag.0
                if abbrev(word(m.auftrag.ix, 1), '|') & ix <= oldOr then
                    iterate
                ox = ox + 1
                m.auftrag.ox = m.auftrag.ix
                end
            m.auftrag.0 = ox
            m.auftrag.orig = 'rep'
            end
        if m.editMacro & m.auftrag.dataset = m.edit.dataset ,
                            & m.auftrag.member  = m.edit.member then do
            if m.auftrag.orig = 'rep' then do
                call adrEdit 'delete .zf .zl'
                m.auftrag.orig = 0
                end
            do lx = m.auftrag.orig+1 to m.auftrag.0
                li = left(m.auftrag.lx, 72)
                call adrEdit "line_after .zl = (li)"
                end
            call adrEdit 'save', 4
            end
        else do
            call writeDsn dsnSetMbr(m.auftrag.dataset,
                                  ,m.auftrag.member), m.auftrag.,,1
            end
        end
    return
endProcedure work

/*--- ini the CS config ----------------------------------------------*/
dbxIni: procedure expose m.
    m.timeout = 600
    m.uId = strip(userid())
    if m.uId = 'A234579' then
        m.uNa = 'Marc'
    else if m.uId = 'A390880' then
        m.uNa = 'Martin'
    else if m.uId = 'A540769' then
        m.uNa = 'Walter'
    else if m.uId = 'A666308' then
        m.uNa = 'Frank'
    else if m.uId = 'A754048' then
        m.uNa = 'Alessandro'
    else if m.uId = 'A790472' then
        m.uNa = 'Agnes'
    else if m.uId = 'A828386' then
        m.uNa = 'Reni'
    else
        m.uNa = m.uId
    m.scopeTypes = 'DB TS TB VW AL IX UDT UDF TG SP SQ SY'
    m.scopeType1 = 'D  S  T  V  A  X  E   F   J  O  Q  Y'
    m.nachtragChars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
           /* PromotionPaths */
    m.iProm.1 = 'ET IT PQ PA PR'
    m.iProm.2 = 'RZ1/DBAF,RZ8/DC0G RZ1/DBTF,RZ8/DD0G,RZZ/DE0G' ,
                        'RQ2/DBOF,RR2/DBOF RR2/DBOF RZ2/DBOF'
    m.iProm.3 = 'RZ1/DBBA,RZ8/DCVG RZ1/DVTB,RZ8/DDVG,RZZ/DEVG' ,
                        'RQ2/DVBP,RR2/DVBP RR2/DVBP RZ2/DVBP'
    m.iProm.0 = 3
    return
endProcedure dbxIni

/*--- expand the import target list entered by the user
          to a list or rz/subsys, with pr1Sub first and the rest sorted*/
iListExpand: procedure expose m.
parse upper arg srcList
    tl = iPromExpand(translate(space(srcList, 0), '/ ', '.,'))
    local = ''
    remote = ''
    do tx=1 to words(tl)
       t1 = word(tl, tx)
       if abbrev(t1, m.myRz'/') then
           local = wordInsAsc(local, t1)
       else
           remote = wordInsAsc(remote, t1)
       end
    return local remote
endProcedure iListExpand

/*--- expand a target using iProm infos to a list of rz/subsys -------*/
iPromExpand: procedure expose m.
parse arg inp
    if words(inp) <> 1 then do   /* several words, expand each */
        out = ''
        do wx=1 to words(inp)
           out = out iPromExpand(word(inp, wx))
           end
        return out
        end
    if pos('/', inp) > 0 then   /* already expanded */
        return inp
    if inp == '?*?' then do /* find current promotionPath */
        tg = m.scopeTrg.rz'/'m.scopeTrg.subSys
        do tx=2 to m.iProm.0
            if pos(tg, m.iProm.tx) > 0 then
                return m.iprom.tx
            end
        call err 'target' tg 'not in any PromotionPath'
        end
    px = wordPos(inp, m.iProm.1) /* one promotion environment */
    if px > 0 then
        return translate(word(iPromExpand('?*?'), px), ' ', ',')
    if length(inp) = 4 then     /* prepend rz to subsys */
        return m.myRz'/'inp
          /* all subsys that match something */
    alOr = iPromExpand('?*?')
    all = translate(alOr, ' ', ',')
    out = ''
    do ax = 1 to words(all)
        if pos(inp, word(all, ax)) > 0 then
            if wordPos(word(all, ax), out) < 1 then
                out = out word(all, ax)
        end
    if out \== '' then
        return out
    call err 'inp' inp ' not found in promotionPath' alOr
endProcedure iPromExpand

wordInsAsc: procedure expose m.
parse arg lst, wrds
     do wx=1
        w = word(wrds, wx)
        if w == '' then
            return space(lst, 1)
        do rx=1 to words(lst) while w > word(lst, rx)
            end
        r1 = word(lst, rx)
        if r1 == '' then
            lst = lst w
        else if w < r1 then
            lst = subWord(lst, 1, rx-1) w subWord(lst, rx)
        end
endProcedure wordInsAsc

charInsAsc: procedure expose m.
parse arg lst, chrs
     do wx=1 to length(chrs)
        c = substr(chrs, wx, 1)
        do rx=1 to length(lst) while c > substr(lst, rx, 1)
            end
        r1 = substr(lst, rx, 1)
        if rx > length(lst) then
            lst = lst || c
        else if c < r1 then
            lst = left(lst, rx-1) || c || substr(lst, rx)
        end
    return lst
endProcedure wordInsAsc

/*--- batch funktionen -----------------------------------------------*/
batchOld: procedure expose m.
parse upper arg args
    m.auftrag.dataset = 'DSN.DBX.AUFTRAG'
    wx = 1
    do forever
        w1 = word(args, wx)
        if w1 = '' then
            return 0
        if w1 = 'ADATASET' then do
            m.auftrag.dataset = word(args, wx+1)
            wx = wx+2
            end
        else if w1 = 'DO' then do
            fx = wordPos('FOR', args, wx)
            if fx < 1 then
                 call err 'DO ohne FOR in' args
            cmd = subWord(args, wx+1, fx-wx-1)
            do wx=fx+1
                ww = word(args, wx)
                if ww = '' then
                    leave
                m.auftrag.member = ww
                say 'batch do' cmd 'for' ww '...'
                call work cmd
                end
            end
        else do
            if wordPos(translate(w1), 'A AC AW') > 0 then do
                drop m.auftrag.member
                cmd = subword(args, wx)
                end
            else do
                m.auftrag.member = w1
                cmd = subword(args, wx+1)
                end
            say 'batch do' cmd 'for mbr' m.auftrag.member
            call work cmd
            return 0
            end
        end
    return 0
endProcedure batchOld

/*--- create the necessary dbx libries in the specified rz -----------*/
copyDummy: procedure expose m.
parse arg rz subs
    call copyDummy1 rz, 'DSN.DBX.AUFTRAG(DUMMY)'
    call copyDummy1 rz, 'DSN.DBX.AUTO(DUMMY)'
    call copyDummy1 rz, 'DSN.DBX.CDL(DUMMY)'
 /* call copyDummy1 rz, 'DSN.DBX.DBAUTO(DUMMY)'
    call copyDummy1 rz, 'DSN.DBX.DBSRCCAT(DUMMY)'
    call copyDummy1 rz, 'DSN.DBX.DBSRCDDL(DUMMY)'
    call copyDummy1 rz, 'DSN.DBX.DBTRGCAT(DUMMY)'
    call copyDummy1 rz, 'DSN.DBX.DBTRGDDL(DUMMY)'
 */
    call copyDummy1 rz, 'DSN.DBX.JCL(DUMMY)'
    call copyDummy1 rz, 'DSN.DBX.MASK(DUMMY)'
 /* call copyDummy1 rz, 'DSN.DBX.OVRCAT(DUMMY)' */
    call copyDummy1 rz, 'DSN.DBX.SENDCF(DUMMY)'
    call copyDummy1 rz, 'DSN.DBX.SPEZIAL(DUMMY)'
    call copyDummy1 rz, 'DSN.DBX.SRCCAT(DUMMY)'
    call copyDummy1 rz, 'DSN.DBX.SRCDDL(DUMMY)'
    call copyDummy1 rz, 'DSN.DBX.TRGCAT(DUMMY)'
    call copyDummy1 rz, 'DSN.DBX.TRGDDL(DUMMY)'
    call copyDummy1 rz, 'DSN.DBX.CADDL(DUMMY)'
    call copyDummy1 rz, 'DSN.DBX.CAGLBCHG(DUMMY)'
    do sx=1 to words(subs)
        s1 = word(subs, sx)
        if length(s1) = 4 then
            call copyDummy1 rz, 'DSN.DBX's1'.STRY(DUMMY)',
                              , 'DSN.DBXDBAF.STRY(DUMMY)'
        else
            call copyDummy1 rz, 'DSN.DBXMAP.'s1'(DUMMY)',
                              , 'DSN.DBXMAP.WKA2B(DUMMY)'
        end
    return 0
 endProcedure copyDummy

copyDummy1: procedure expose m.
parse arg sys, dsn, fr
if fr == '' then
    fr = dsn
say '???copyDummy' sys dsn fr
    if sysDsn("'"fr"'") <> 'OK' then
        call writeDsn fr, x, 0, 1
    call csmCopy fr, sys'/'dsn
    return

/*--- die Konfiguration pro db2 Subsys -------------------------------*/
configureRZSub: procedure expose m.
    parse arg rz, subsys
    call configureRZ rz
    call configureSubsys rz, subsys
    return
endProcedure configureRZSub

configureSubsys: procedure expose m.
    parse arg rz, subsys
    call mapPut e, 'subsys', subsys
    if rz = 'RZ8' then
        call mapPut e, 'location', 'CHROI000'subsys
    else if rz = 'RZZ' then
        call mapPut e, 'location', 'CHROI00Z'subsys
    else
        call mapPut e, 'location', 'CHSKA000'subsys
    return
endProcedure configureSubsys

/*--- die Konfiguration pro RZ ---------------------------------------*/
configureRZ: procedure expose m.
    parse arg rz, rel px, toolV
    if rz = 'RZ0T' then
        rz = 'RZ0'
    if rz = '' then
        rz = m.myRz
    else
        m.myRz = rz
    m.jobCard = 'jobCa'
    call mapPut e, 'jobCla', 'LOG0'
    rx = pos(rz'/', m.iProm.2)
    if rx < 1 then
        m.pr1Sub = '?noSubsys?'
    else
        m.pr1Sub = substr(m.iProm.2, rx+4, 4)
    call mapPut e, 'rz', rz
    zz = overlay('Z', rz, 2)
    call mapPut e, 'zz', zz
    if rel == '' then
        rel = 1015
    if px == '' then
        px = if(rz\=='RZ0', 'P0', 'PA')
    call mapPut e, 'db2rel', rel
    call mapPut e, 'db2relAl', px
    call mapPut e, 'dsnload', if(rz=='RZ0', 'DSN', 'DB2@') ,
           || '.'zz'.'px'.DSNLOAD'
    call mapPut e, 'capref', 'DSN.CADB2.'zz'.P0'
    call mapPut e, 'caload', 'DSN.CADB2.'zz'.P0.CDBALOAD'
    call mapPut e, 'cacr', DBX
    if toolV \== '' then do
        say 'v72 nicht mehr untertstuetzt, v10 wird benutzt'
        toolV = mapGet(e, 'toolVers', 10)
        toolV = ''
        end
    call mapPut e, 'toolVers', toolV
 /* if toolV == 10 then do  */
        call mapPut e, 'toolPreP', 'DSN.TOOLS.'zz'.P0'
        call mapPut e, 'toolPreC', 'DSN.TOOLS.'zz'.C0'
 /*     end
    else if toolV == 72 then do
        call mapPut e, 'toolPreP', 'DSN.TOOLS.'zz'.P8'
        call mapPut e, 'toolPreC', 'DSN.TOOLS.'zz'.C8'
        end
    else
        call err 'bad toolVersion' toolV
 */ if rz = 'RZ1' then do
        if m.libPre = 'DSN.DBQ' then do
            m.pr1Sub = 'DQ0G'
            m.jobCard = 'jobCQ'
            call mapPut e, 'toolPreP', 'DSN.ADB72.P0'
            call mapPut e, 'toolPreC', 'DSN.ADB72.C0'
            end
        end
    else if rz = 'RR2' then do
        call mapPut e, 'jobCla', 'BS0'
        end
    return
endProcedure configureRZ

/*--- Member Namen prüfen und Auftrag lesen---------------------------*/
memberOpt: procedure expose m.
    if m.auftrag.dataset <> m.libPre'.AUFTRAG' then
        call err 'dbx sollte' m.libPre'.AUFTRAG editieren, nicht' ,
                    m.auftrag.dataset
    m8 = substr(m.auftrag.member, 8, 1)
    if pos(m8, 'CW')  < 1 then
        call err 'Member muss 8 stellig sein und mit C oder W enden',
                       'nicht' m.auftrag.member
    m.optOvr = 0 /* (m8 == 'W') & (m.libPre ^== 'DSN.DBQ') */
    m.optAuto = 1
    call readAuftrag '', m.auftrag.dataset, m.auftrag.member
    return
endProcedure memberOpt

/*--- Auftrag einlesen -----------------------------------------------*/
readAuftrag: procedure expose m.
parse arg sys, pds, mbr
    editingAuftrag = 0
    if sys = '' & m.editMacro then do
        call adrEdit '(em) = member'
        call adrEdit '(ed) = dataset'
        editingAuftrag = ed = pds & em = mbr
        end
    if editingAuftrag then do
        if adrEdit('(zl) = lineNum .zl', 4) = 4 then
            zl = 0
        m.auftrag.0 = zl
        do lx=1 to zl
            call adrEdit "(li) = line" lx
            m.auftrag.lx = li
            end
        end
    else do
        dsn = dsnSetMbr(m.auftrag.dataset, m.auftrag.member)
        if sys = '' then
          if sysDsn("'"dsn"'") <> 'OK' then
            call err 'auftrag' dsn 'existiert nicht:' sysDsn("'"dsn"'")
        call readDsn sys'/'dsn, m.auftrag.
        end
    m.auftrag.orig = m.auftrag.0
    return
endProcedure readAuftrag

/*--- naechste AuftragsNummer suchen ---------------------------------*/
nextAuftrag: procedure expose m.
parse arg pre, make, rz opt
    if abbrev(rz, '-') then do
        opt = rz
        rz = ''
        end
    opt = translate(opt)
    if rz = '' | rz = '*' then
        rz = m.myRz
    if m.myRz <> 'RZ1' then
        call err 'Auftrag für RZ' rz 'muss aus RZ1 erstellt werden'
    auft = m.libPre'.AUFTRAG'
    call mAdd mCut(na, 0), auft, 'DSN.DBA.CLON.WSL'
    max = pre
    do nx=1 to m.na.0
        lmm = lmmBegin(dsnSetMbr(m.na.nx, pre'*'))
        mb = lmmNext(lmm)
        fi = mb
        la = ''
        do cnt=2 by 1 while mb <> ''
            la = mb
            mb = lmmNext(lmm)
            end
        call lmmEnd lmm
        say left(fi, 8) '-' left(la, 8)right(cnt-2, 5) ,
            'member in' dsnSetMbr(m.na.nx, pre'*')
        if la >> max then
            max = la
        end
    nn = left(max, 7, '0')
    do cx=7 by-1 to length(pre)+1,
            while pos(substr(nn, cx, 1), '0123456789') > 0
        end
    if cx >= 7 then
        nn = ''
    else do
        pp = 1 + substr(nn, cx+1)
        if length(pp) > 7-cx then
            nn = ''
        else
            nn = left(nn, cx) || right(pp, 7-cx, 0)
        end
    if length(nn) <> 7 then do
        say 'max Auftrag' max 'kein naechster bestimmbar'
        end
    else if pos(make, 'CW') < 1 then do
        say 'max Auftrag' max 'naechster' nn'?'
        end
    else do
        nn = nn || make
        say 'max Auftrag' max 'naechster' nn
        m.auftrag.0 = 0

        call neuerAuftrag 0, rz, nn
        dsnNN = dsnSetMbr(auft, nn)
        call writeDsn dsnNN, m.auftrag.
        if opt = '-R' then
            nop
        else if rz = 'RZ1' then
            call adrIsp "edit dataset('"dsnNN"')", 4
        else
            call writeDsn rz'/'dsnNN, m.auftrag.
        end
    m.auftrag.0 = '' /* do not write back the new auftrag | */
    if opt = '-R' then
        m.exitValue = nn
    return 0
endProcedure nextAuftrag

/*--- einen neuen Auftrag initialisieren -----------------------------*/
neuerAuftrag: procedure expose m.
parse arg isTst, rz, auftName
    if  rz = '' then
        rz = m.myRz
    else
        call configureRz rz
    if isTst then do
        ow = m.uid
        maPr = 'T' || left(translate(m.uNa), 3, 'X')
        comMask = m.libPre'.MASK('maPr'PROT)'
        impMask = m.libPre'.MASK('maPr'$subsys)'
        end
    else do
        ow = 'S100447'
        comMask = m.libPre'.MASK(PROT$trgNm)'
        impMask = m.libPre'.MASK($trgNm$impNm)'
        end
    comIgno = m.libPre'.MASK(IGNORE)'
    impIgno = ''
    if m.auftrag.0 <> 0 then
        call err 'fun n erstellt neuen Auftrag nur in leeres Member'
                             /* wahrscheinlichen Zügelschub bestimmen*/
    zglS = '20130208 20130510 20130809 20131108 2014???? 2015????'
    zi = date('s')
    zi = overlay(right(substr(zi, 5, 2)+1, 2, 0), zi, 5)
    do wx=1 while zi >> word(zglS, wx)
        end
    zglSchub = if(isTst, 'test', word(zglS, wx) '??:00')

    call mAdd auftrag                                      ,
        , addDateUs('auftrag ' auftName ow)                ,
        , '  Zuegelschub' zglSchub                         ,
        , '  Besteller   pid     name    tel'              ,
        , '  comMask    ' comMask                          ,
        , '  comIgno    ' comIgno                          ,
        , '  impMask    ' impMask                          ,
        , '  impIgno    ' impIgno                          ,
        , 'source RZ8.DX0G'                                ,
        , '  ts' left(auftName, 4)'A1P.A%'                 ,
        , 'target RZ8.'if(left(auftName, 2) == 'XB', 'DCVG', 'DC0G')
    return
endProcedure neuerAuftrag

neuerNachtrag: procedure expose m.
parse upper arg opt
    call analyseAuftrag
    call addNachtrag
    return
endProcedure neuerNachtrag

nextNachtrag: procedure expose m.
    parse arg nt
    nx = pos(nt, m.nachtragChars) + 1
    if nx > length(m.nachtragChars) then
        call err 'kein Nachtrag char mehr nach' nt
    return substr(m.nachtragChars, nx, 1)
    m.e.nachtrag = nt
    return nt
endProcedure nextNachtrag

/*--- compare: Funktionen c, v und st --------------------------------*/
compare: procedure expose m.
parse upper arg fun, sendToRz
    opts = ''
    do forever
        if abbrev(sendToRz, '=') then do
            sendToRz = strip(substr(sendToRz, 2))
            opts = opts'='
            end
        else if abbrev(sendToRz, '-') then do
            opts = opts || substr(word(sendToRz, 1), 2)
            sendToRz = subword(sendToRz, 2)
            end
        else
            leave
        end
    cmpLast = pos('=', opts) > 0
    if fun = 'C' then
        function = 'compare'
    else if fun = 'ST' then do
        if sendToRz = '' | sendToRz = '*' then
            call errHelp 'ST without sendToRz'
        call mapPut e, 'toRz', sendToRz
        function = 'sendTarget' sendToRz
        end
    else if fun = 'V' then
        function = 'version'
    else
        call err 'bad fun' fun
    call analyseAuftrag
    if (m.scopeSrc.rz = m.sysRz ,
       | (wordPos(m.scopeSrc.rz, 'RZ8 RZZ') > 0 & m.sysRZ = 'RZ1') ,
       ) & m.e.qCheck \== 0 then do
        if qualityCheck(getDb2Catalog('SRC')) then
            if pos('F', opts) < 1 & \ m.auftrag.force then
                return
            else
                say 'wegen Option -f Verarbeitung',
                      'trotz Qualitaetsfehlern'
        end
    nacLast = m.e.nachtrag
    if nacLast = '?' & cmpLast then
        call err 'c = oder v = ohne vorangaengiges c oder v'
    if nacLast = '?' | m.nacImp then
        m.e.nachtrag = nextNachtrag(nacLast)
    call mapPut e, 'mbrNac', left(m.e.auftrag, 7)m.e.nachtrag
    m.o.0 = 0
    call mapPut e, 'jobName', 'Y'left(m.e.auftrag, 7)
    call mapPut e, 'fun', function opts
    call namingConv m.scopeTrg.rz, m.scopeTrg.subsys, 'trgNm'
    call namingConv m.scopeSrc.rz, m.scopeSrc.subsys, 'srcNm'
    call mapExpAll e, o, skelStem(m.jobCard)

    call mapPut e, 'mask', shrDummy(mapExp(e, m.e.comMask), 1)
    call mapPut e, 'ignore', shrDummy(mapExp(e, m.e.comIgno))
    call bmcVarsProf 0

    if 0 then   /* db ddl extrahieren ja / nein ???? */
        call extractSrcTrg o, 'DB', cmpLast left(m.e.auftrag, 7)nacLast
    if m.e.tool == ibm then
        call extractSrcTrg o, '', cmpLast left(m.e.auftrag, 7)nacLast
    else if m.e.tool == bmc then
        call bmcSrcTrg cmpLast m.e.auftrag
    else if m.e.tool == ca  then do
        call configureSubsys m.scopeSrc.rz, m.scopeSrc.subsys
        end
    if fun = 'C' then do
        if m.optOvr then do
            call mapPut e, 'ovr', 'OVR'
            call mapExpAll e, o, skelStem('OVR')
            call mapPut e, 'src', 'OVR'
            end
        if m.e.keepTgt then
            call mapPut e, 'keepTgtV', ''
        else
            call mapPut e, 'keepTgtV', 'KEEPTGT,'
        if m.e.tool == ca  then
            call caDDL o, scopeSrc, dsnGetMbr(mapGet(e, 'mask'))
        else
            call mapExpAll e, o, skelStem('COMP')
        end
    if fun = 'ST' then
        call mapExpAll e, o, skelStem('ST')
    call writeSub o
    call mAdd auftrag, addDateUs(function ,
                    left('===', 3*cmpLast)m.e.nachtrag,
                    m.scopeTrg.rz'.'m.scopeTrg.subSys ,
                    mapExp(e, "'${libPre}." ,
                ||  if(m.e.tool=="IBM","srcCat",m.e.tool"Cdl") ,
                ||  "($mbrNac)'"))
    return
endProcedure compare

/*--- find the naming convention for a rz and subsystem --------------*/
namingConv: procedure expose m.
parse arg rz, subsys, var
    if rz = '.' then do
        if pos('.', subSys) > 0 then
            call err 'namingConv old target' subsys
        if pos('/', subSys) > 0 then
            parse var subsys rz '/' subsys
        else
            rz = m.sysRz
        end
    if strip(rz) = 'RZ1' then
        t = strip(subsys)
    else
        t = 'DBOF'
    if var ^== '' then
        call mapPut e, var, t
    return t
endProcedure namingConv

skelStem: procedure expose m.
parse upper arg nm
    st = 'SKEL.'nm
    if symbol('m.st.0') \== 'VAR' then
        call readDsn m.libSkels || nm || ')', 'M.'st'.'
return st
endProcedur skelStem

/*--- write jcl and submit it ----------------------------------------*/
writeSub: procedure expose m.
parse arg o, rz, noWri
    userSubmits = 1 /* edit jcl and user submits it */
    if noWri <> 1 then do
        jcl = m.libPre'.JCL('m.e.auftrag')'
        call mStrip o, 't'
        do ox=1 to m.o.0
            if length(m.o.ox) > 70 then
                call debug 'o.'ox 'len' length(m.o.ox)':' m.o.ox
            end
        call writeDsn jcl, m.o., ,1
        if userSubmits then /* edit dataset and user may submit it */
            call adrIsp "edit dataset('"jcl"')", 4
        end
    if (noWri <> 1) & (rz = '' | rz = m.sysRz) then do
         if ^ userSubmits then
            call adrTso "sub '"jcl"'"
         end
    else do  /* submit jcl in another rz */
        sysl = csmSysDsn(rz'/')
        if sysl = '*/' then
            sysl = ''
        iral = dsnAlloc(sysl 'SYSOUT(T) dd(ir) .WRITER(INTRDR)')
        call writeDDBegin ir
        call writeDD ir, m.o.
        call writeDDend 'IR'
        interpret subword(irAl, 2)
        end
    return
endProcedure writeSub


/*--- view or edit a member -----------------------------------------*/
viewEdit: procedure expose m.
parse upper arg fun 2 wh, nac
    call analyseAuftrag
    if wh = 'D' then do
       if words(nac) > 1 | length(word(nac, 1)) > 3 then do
           d = m.libPre'Map.'word(nac, 1)
           nac = subword(nac, 2)
           end
       else do
           d = m.libPre'.caDDL'
           end
       end
    else if wh = 'Y' then do
        if length(word(nac, 1)) == 4 then
            parse var nac d nac
        else
            d = substr(m.imp.last, 5)
        rd = m.sysRz'/'d
        d = m.libPre || d'.STRY'
        end
    else do
        if wh = 'C' then
            d = 'CDL'
        else if wh = 'E' then
            d = 'EXEJCL'
        else if wh = 'J' then
            d = 'JCL'
        else if wh = 'S' then
            d = 'SRCDDL'
        else if wh = 'T' then
            d = 'TRGDDL'
        else if wh = 'W' then
            d = 'BMCWSL'
        end
    if nac = '' then
        d = d'('left(m.e.auftrag,7)m.e.nachtrag')'
    else
        d = d'('left(m.e.auftrag,7)right(strip(nac), 1)')'
    if fun == 'E' then
        call adrIsp "edit dataset('"d"')", 4
    else
        call adrIsp "view dataset('"d"')", 4
    return
endProcedure viewEdit
/*--- return jcl either dd dummy or dd disp=shr,dsn=... --------------*/
shrDummy: procedure expose m.
parse arg dsn, keepEmpty
    if dsn \= '' then
        return 'DISP=SHR,DSN='translate(dsn)
    else if keepEmpty == 1 then
        return ''
    else
        return 'DUMMY'
endProcedure shrDummy

/*--- funktion i -----------------------------------------------------*/
import: procedure expose m.
parse upper arg fun, rzSubSysList opt .
    call analyseAuftrag
    if m.e.nachtrag = '?' then
        call err 'vor i=import braucht es compare'
    if opt <> '' then
        nop
    else if m.cmpLast then
            call err 'i=import mit c = oder v = muss Nachtraege',
               'explizit angeben, z.B. dbx i' rzSubSysList m.e.nachtrag
    if ^ m.nacImp then do
        cdl = cdlDsnCheck(m.e.nachtrag)
        if m.e.dbaCheck == 0 then nop
        else if m.e.tool \== 'IBM' then
            say 'dbaCheck for' m.e.tool 'not implemented'
        else do
            if m.editMacro then
                dbaParm = 'EX0'
            else
                dbaParm = 'END'
            call adrIsp "edit dataset('"cdl"') macro(dbacheck)",
                         "parm(dbaParm)", 4
            end
        end
    call mapPut e, 'expOpt', if(m.e.keepTgt, 'A', 'X')
    if list = '' then
        call err 'no targets in list "'rzDBSysList'"'
    impCnt = 0
    call configureRz m.sysRz
    if fun = 'IA' then
        fu2 = 'Ana'
    else if fun = 'IE' then
        fu2 = 'AnaExe'
    else
        fu2 = ''
    call mapPut e, 'fun', strip('import'fun fu2 left(rzSubSysList, 30))
    a7 = left(m.e.auftrag, 7)
    call mapPut e, 'jobName', 'Y'a7
    m.e.impMasks = ''
    m.jOut.0 = 0
    m.jOut.toRZ.0 = 0
    m.jOut.send.0 = 0
    call setIf jOut
    call setIf jOut'.TORZ'
    call mapExpAll e, jOut, skelStem(m.jobCard)    /* Jobcards */
    call configureRZ m.sysRz
    rzLast = ''
    call stepGroup 1
    j0 = m.jOut.0
    list = iListExpand(rzSubSysList, 0)
    do lx = 1 to words(list)
        rzDBSys = word(list, lx)
        parse value word(list,lx) with r '/' subsys
        if opt == '=' then do
            if symbol('m.imp.rzDBSys.nachtrag') == 'VAR' then
                nachAll = m.imp.rzDBSys.nachtrag
            else
                nachAll = ''
            end
        else if opt \== '' then do
            nachAll = opt
            end
        else do
            if symbol('m.imp.rzDBSys.nachtrag') \== 'VAR' then
                nachAll = m.compares
            else
                nachAll = substr(m.compares,
                        , 1+pos(m.imp.rzDBSys.nachTop, m.compares))
            end
        if nachAll == '' then
            iterate
        if m.e.tool = 'CA' then
            nachAll = right(nachAll, 1)
        trgNm = ''
        do nx=1 to m.nachtrag.0
            if pos(m.nachtrag.nx, nachAll) < 1 then
                iterate
            act = namingConv('.', m.nachtrag.nx.trg)
            if trgNm = '' then
                trgNm = act
            else if trgNm <> act then
                call err 'targetNaming' trgNm 'wechselt zu' act ,
                    'fuer nachtrag' m.nachtrag.nx 'auf' m.nachtrag.nx.trg
            end
        m.imp.seq = m.imp.seq + 1
        if length(m.imp.seq) > 3 then
            call err 'import Sequenz Ueberlauf' m.imp.seq
        m.imp.seq = right(m.imp.seq, 3, 0)
        if length(nachAll) = 1 then
            nachVB = nachAll
        else
            nachVB = left(nachAll, 1)'-'right(nachAll, 1)
        chaPre = m.e.auftrag'.'nachVB'.'m.imp.seq
        zs = translate(strip(right(m.e.zuegelSchub, 6)))
        if m.e.tool = 'IBM' then
            call mapPut e, 'change',chaPre'.'zs/*'.V'mapGet(e,'toolVers')*/
        else
            call mapPut e, 'change',m.e.auftrag || m.imp.seq'_'zs
        call mapPut e, 'changeRem', 'zs' m.e.zuegelSchub ,
                                    'auf' m.e.auftrag nachAll 'import DBX'
        call mapPut e, 'deltaVers', chaPre'.DLT'
        call namingConv '.', rzDBSys, 'impNm'
        call namingConv m.scopeSrc.rz, m.scopeSrc.subsys, 'srcNm'
        call mapPut e, 'trgNm', trgNm
        call mapPut e, 'fun', 'import'fu2 rz
        call mapPut e, 'fu2', fu2
        call mapPut e, 'mbrNac', a7 || right(nachAll, 1)
        if r <> m.myRz then do
            call importToRZ jOut
            call configureRZ r
            end
        call configureSubsys r, subsys
        if m.e.tool == 'CA' then
            call caImport jOut, fun, r, subsys, nachAll,
                     , mapExp(e, m.e.impMask), mapExp(e, m.e.comIgno)
        else
            call ibmImport jOut, fun, r, subsys, nachAll,
                     , mapExp(e, m.e.impMask), mapExp(e, m.e.comIgno)
        call mAdd auftrag,  addDateUs("import" rzDBSys nachAll,
                       mapGet(e, 'change') fun)
        call stepGroup
        end
    call importToRz jOut
    if m.jOut.0 <= j0 then
        say 'nothing to import'
    else do
        if m.e.tool <> ibm & m.jOut.ifLine \== '' then do
            call mAdd jOut, '//       IF ABEND OR NOT (',
                          , '//        ' m.jOut.ifLine ') THEN',
                          , '//PERROR   EXEC PGM=IDCAMS ',
                          , '//SYSPRINT   DD SYSOUT=*',
                          , '//SYSIN      DD *',
                          , '   SET MAXCC = 12',
                          , '//       ENDIF'
            end
        call writeSub jOut
        end
    return
endProcedure import

importToRZ: procedure expose m.
parse arg o
    if m.o.send.0 \== 0 & m.sysRz \== m.myRz then do
        sAft = ''
        do sx=1 to m.o.send.0
            c1 = m.o.send.sx
            if m.cdlSent.c1 \== 1 then do
                m.cdlSent.c1 = 1
                if sAft == '' then do
                    call mapPut e, 'toRz', m.myRz
                    call mapPut e, 'cdl',  dsnSetMbr(c1)
                    call addIf o
                    call mapExpAll e, o, skelStem('sCdl')
                    jx = m.o.0
                    sAft = m.o.jx
                    jx = jx - 1
                    sCx = pos('(', m.o.jx)
                    m.o.jx = left(m.o.jx, sCx) || dsnGetMbr(c1) '-'
                    m.o.0 = jx
                    end
                else do
                    call mAdd o, right(',', sCx) || dsnGetMbr(c1) '-'
                    end
                end
            end
        if sAft \== '' then do
            call mAdd o, right(')', sCx) '-', sAft
            call addIf o, 'end'
            call setIf o, 'CP'm.myRz
            end
        end
    if m.o.toRZ.0 == 0 then do
        end
    else if m.sysRz == m.myRz then do
        call addIf o
        call mAddSt o, o'.TORZ'
        call addIf o, 'end'
        m.o.ifLine = m.o.toRz.ifLine
        end
    else do
        call addIf o
        call mapExpAll e, o, skelStem('subRz')
        la = m.o.0
        la = m.o.la
        m.o.0 = m.o.0 - 1
        call mapExpAll e, o, skelStem(m.jobcard)  /*Jobcards*/
        call mAddSt o, o'.TORZ'
        call mAdd o, la
        call addIf o, 'end'
        call setIf o, 'SUB'm.myRz
        end
    m.o.toRZ.0 = 0
    call setIf jOut'.TORZ'
    m.o.send.0 = 0
    return
endProcedure importToRZ

ibmImport: procedure expose m.
parse arg o, fun, rz, dbSys, nachAll, msk, ign
    say 'ibmImport' o',fun='fun', rz='rz', dbSys='dbSys,
              || ',nachAll='nachAll', mask='msk', ignore='ign
    call mapPut e, 'ignore', shrDummy(ign)
    call mapPut e, 'mask',   shrDummy(msk, 1)
    if rz <> m.sysRz then do
        do nx=1 to length(nachAll) /* send changes to rz */
            c1 = cdlDsnCheck(substr(nachAll, nx, 1))
            call mAdd o.send, c1
        end
    call mapPut e, 'cType', "''''T''''"
    call mapPut e, 'inDdn', 'DCHG'
    cdlPds = m.libPre'.CDL'
    call mapPut e, 'cdlPds', cdlPds
    call ibmImportExpand o'.TORZ', nachAll
    return
endProcedure ibmImport

caImport: procedure expose m.
parse arg o, fun, rz, dbSys, nachAll, msk, ign
    say 'caImport' o',fun='fun', rz='rz', dbSys='dbSys,
              || ',nachAll='nachAll', mask='msk', ignore='ign
    if length(nachAll) \== 1 then
        call err 'caImport nachAll' nachAll 'not exactly one'
    mskMbr = dsnGetMbr(msk)
    call mapPut e, 'ddlin', m.libPre'.CADDL('mapGet(e, 'mbrNac')')'
    call mapPut e, 'comIgnoMbr', dsnGetMbr(ign)
    call mapPut e, 'impMaskMbr', mskMbr
    if mskMbr \== '' & substr(mskMbr, 5) \== left(mskMbr, 4) then do
        mapDdl = m.libPre'MAP.'mskMbr'('mapGet(e, 'mbrNac')')'
        call mapPut e, 'ddlout', mapDdl
        if m.caMapDdl.mapDdl \== 1 then do
            m.caMapDdl.mapDdl = 1
            call importMapping o, mskMbr, nachAll, mapDdl
            call stepGroup o
            end
        call mapPut e, 'ddlin', mapDdl
        call mapPut e, 'impMaskMbr', ''
        end
    call mAdd o'.SEND', mapGet(e, 'ddlin')
    call mapPut e, 'stry', mapGet(e, 'mbrNac')
    call mapPut e, 'bpid', m.libPre'.CASTRAT-'mapGet(e, 'mbrNac')
    call addIf o'.TORZ'
    call mapExpAll e, o'.TORZ', skelStem('CImp')
    call addIf o'.TORZ', 'end'
    call setIf o'.TORZ', 'AUTO'
    if mskMbr == '' then
        m.o.toRZ.0 = m.o.toRZ.0 -2 /* die maskZeilen entfernen */

    if wordPos(fun, 'IA IE') > 0 then do /* analyse step */
        if m.e.tool = ibm then
            call err 'fun' fun 'not implemented for' m.e.tool
        call addIf o'.TORZ'
        call mapExpAll e, o'.TORZ', skelStem('CAna')
        if mskMbr \== '' then
            call caGlbChg o'.TORZ', mskMbr
        call addIf o'.TORZ', 'end'
        call setIf o'.TORZ', 'ANA', 0 4
        end
    if wordPos(fun, 'IE') > 0 then do /* execute step */
        call addIf o'.TORZ'
        call mapExpAll e, o'.TORZ', skelStem(left(m.e.tool, 1)'Exe')
        ej = mapExp(e, "'${libPre}.EXEJCL($mbrNac)'")
        call addIf o'.TORZ', 'end'
        call setIf o'.TORZ', 'RUN'
        j.1 = 'exeJcl for' m.e.auftrag 'noch nicht generiert'
        call writeDsn ej, j., 1, 1
        end
    return
endProcedure caImport
importOld: procedure expose m.
parse upper arg fun, rzSubSysList opt .
    call analyseAuftrag
    if m.e.nachtrag = '?' then
        call err 'vor i=import braucht es compare'
    if opt <> '' then
        nop
    else if words(m.targets) > 1 then
            call err 'i=import mit mehreren targets muss Nachtraege',
               'explizit angeben, z.B. dbx i' rzSubSysList m.e.nachtrag
    else if m.cmpLast then
            call err 'i=import mit c = oder v = muss Nachtraege',
               'explizit angeben, z.B. dbx i' rzSubSysList m.e.nachtrag
    if ^ m.nacImp then do
        cdl = cdlDsnCheck(m.e.nachtrag)
        if m.e.dbaCheck == 0 then nop
        else if m.e.tool \== 'IBM' then
            say 'dbaCheck for' m.e.tool 'not implemented'
        else do
            if m.editMacro then
                dbaParm = 'EX0'
            else
                dbaParm = 'END'
            call adrIsp "edit dataset('"cdl"') macro(dbacheck)",
                         "parm(dbaParm)", 4
            end
        end
    call mapPut e, 'expOpt', if(m.e.keepTgt, 'A', 'X')
    call readDsn m.libSkels || left(m.e.tool, m.e.tool\=='IBM')'Imp)',
        , m.ic.
    list = iListExpand(rzSubSysList, 0)
    if list = '' then
        call err 'no targets in list "'rzSubSysList'"'
    impCnt = 0
    call configureRz m.sysRz
    if fun = 'IA' then
        fu2 = 'Ana'
    else if fun = 'IE' then
        fu2 = 'AnaExe'
    else
        fu2 = ''
    call mapPut e, 'fun', strip('import'fu2 left(rzSubSysList, 30))
    call mapPut e, 'jobName', 'Y'left(m.e.auftrag, 7)
    m.e.impMasks = ''
    fu2 = fun fu2
    m.jOut.0 = 0
    call mapExpAll e, jOut, skelStem(m.jobCard) /* Jobcards */
    call stepGroup 1
    j0 = m.jOut.0
    rz = '?'
    do lx = 1
        r1 = word(list, lx)
        parse var r1 r '/' subsys
        if r <> rz | subsys = '' then do
            if impCnt <> 0 then do
                if rz <> m.sysRz then do
                    if symbol('m.sCdl.0') \== 'VAR' then do
                        call readDsn m.libSkels'sCdl)', m.sCdl.
                        call readDsn m.libSkels'subRz)', m.subRz.
                        end
                    if m.impMbrs == '' then
                        call err 'int no impMbrs'
                    call mapPut e, 'mbrNac',
                            , left(m.e.auftrag, 7)left(m.impMbrs, 1)
                    call mapPut e, 'toRz', m.myRz
                    call mapExpAll e, jOut, sCdl
                    jy = m.jOut.0
                    jx = jy-1
                    m.jOut.0 = jx
                    jla = m.jOut.jy
                    cx = pos(')-', m.jOut.jx)
                    if cx < 1 | substr(m.jout.jx, cx+2) \= '' then
                        call err 'bad sCdl line' jx':'m.jOut.jx
                    m.jOut.jx = left(m.jOut.jx,cx-1) '-'
                    do mx=2 to length(m.impMbrs)
                        call mAdd jOut, left('', cx-10)',' ,
                                || left(m.e.auftrag,7) ,
                                || substr(m.impMbrs, mx,1) '-'
                        end
                    call mAdd jOut, left('', cx-10)') -'
                    call mAdd jOut, jLa
                    call mapExpAll e, jOut, subRz
                    jy = m.jOut.0
                    jla = m.jOut.jy
                    m.jOut.0 = jy-1
                    call mAddSt jOut, jAft
                    call mAdd jOut, jLa
                    end
                end
            if subsys = '' then do
                if m.jout.0 > j0 then
                    call writeSub jOut
                return
                end
            rz = r
            if rz = m.sysRz then do
                job = jOut
                m.jAft.0 = 'noUse'
                end
            else do
                job = jAft
                m.jAft.0 = 0
                end
            m.impMbrs = ''
            call configureRz rz
            impCnt = 0
            call mapPut e, 'fun', 'import'fu2 rz
            call mapPut e, 'fu2', fun
            call configureSubsys rz
            end
        if length(subsys) <> 4 then
            call err 'ungueltiges db2SubSys' subsys 'im import' rz
        call configureSubsys rz, subsys
        if rz = m.sysRz then
            impCnt = impCnt + importAdd(job, subsys,      opt, ic, fu2)
        else if m.sysRz == 'RZ1' then
            impCnt = impCnt + importAdd(job, rz'/'subsys, opt, ic, fu2)
        else
            call err 'cannot import into' rz 'from' m.sysRz
        end
endProcedure importOld

/*--- add a single import to jcl in o --------------------------------*/
importAdd: procedure expose m.
parse upper arg o, rzSubSys, opt, fun fu2
    /* Uebergang altes auf neue Delta Merge Verfahren ++++++++ begin */
    deltaNew = 1 /* abbrev(rzSubSys,'RZ1.'),
            | (pos('.',rzSubSys) < 1 & m.sysRz = 'RZ1') */
    if deltaNew then do   /* neues delta merge verfahren */
        inDdn = 'DCHG'
        call mapPut e, 'cType', "''''T''''"
        end
    else do               /* altes delta merge verfahren */
        inDdn = 'SRCDDN2'
        call mapPut e, 'cType', "''''C''''"
        end
    call mapPut e, 'inDdn', inDdn
    /* Uebergang altes auf neue Delta Merge Verfahren ++++++++ end   */
    if opt ^= '' & opt ^= '=' then do
        nachAll = opt
        end
    else if symbol('m.imp.rzSubSys.nachtrag') ^== 'VAR' then do
        nachAll = m.compares
        end
    else do
        if opt = '=' then
            la = left(m.imp.rzSubSys.nachtrag, 1)
        else
            la = right(m.imp.rzSubSys.nachtrag, 1)
        cx = pos(la, m.compares)
        if cx < 1 then
            call err 'nachtrag' la 'von' rzSubSys m.rzSubSys.change ,
                     'nicht in Compare Liste' m.compares
        nachAll = substr(m.compares, cx + (opt ^= '='))
        end
    if nachAll = ' ' then do
        say  'alle Nachtraege schon importiert fuer' rzSubSys
        return 0
        end
    call mapPut e, 'mbrChg', left(m.e.auftrag, 7)right(nachAll, 1)
    if length(nachAll) = 1 then
        nachVB = nachAll
    else
        nachVB = left(nachAll, 1)'-'right(nachAll, 1)
    trgNm = ''
    do nx=1 to m.nachtrag.0
        if pos(m.nachtrag.nx, nachAll) < 1 then
            iterate
        act = namingConv('.', m.nachtrag.nx.trg)
        if trgNm = '' then
            trgNm = act
        else if trgNm <> act then
            call err 'targetNaming' trgNm 'wechselt zu' act ,
                'fuer nachtrag' m.nachtrag.nx 'auf' m.nachtrag.nx.trg
        end
    m.imp.seq = m.imp.seq + 1
    if length(m.imp.seq) > 3 then
        call err 'import Sequenz Ueberlauf' m.imp.seq
    m.imp.seq = right(m.imp.seq, 3, 0)
    chaPre = m.e.auftrag'.'nachVB'.'m.imp.seq
    zs = translate(strip(right(m.e.zuegelSchub, 6)))
    if m.e.tool = 'IBM' then
        call mapPut e, 'change',chaPre'.'zs/*'.V'mapGet(e,'toolVers')*/
    else
        call mapPut e, 'change',m.e.auftrag || m.imp.seq'_'zs
    call mapPut e, 'changeRem', 'zs' m.e.zuegelSchub ,
                                'auf' m.e.auftrag nachAll 'import DBX'
    call mapPut e, 'deltaVers', chaPre'.DLT'
    call namingConv '.', rzSubSys, 'impNm'
    call namingConv m.scopeSrc.rz, m.scopeSrc.subsys, 'srcNm'
    call mapPut e, 'trgNm', trgNm
    call mapPut e, 'ignore', shrDummy(mapExp(e, m.e.impIgno))
    cdlPds = m.libPre'.CDL'
    call mapPut e, 'cdlPds', cdlPds
    call bmcVarsProf 1
    if m.impMbrs = '' & m.myRz \== m.sysRz then
        call mapExpAll e, o, skelStem(m.jobcard) /* Jobcards */
    m.impMbrs = charInsAsc(m.impMbrs, nachAll)
    if m.e.tool = 'CA' then do
    return 1
endProcedure importAdd

stepGroup: procedure expose m.
parse arg f
     if f == 1 then
         no = 1
     else
         no = m.e.stepNo + 1
     m.e.stepNo = right(no, 3, 0)
     m.e.stepGr = 'S'm.e.stepNo
     call mapPut e, 'stp', m.e.stepGr
     return
endProcedure stepGroup

setIf: procedure expose m.
parse arg o, stp, codes
    if stp == '' then
        li = ''
    else do
        if length(stp) < 5 then
            stp = m.e.stepGr || stp
        li = stp'.RUN AND'
        pr = '('
        if codes == '' then
            codes = 0
        do cx=1 to words(codes)
            li = li pr stp'.RC='word(codes,cx)
            pr = 'OR'
            end
        li = li ')'
        end
    if length(li) > 53 then
        call err 'if too long' li

    m.o.ifLine = li
    if li == '' then
         call mapPut e, 'endIf', '//*      no endIf'
    else
         call mapPut e, 'endIf', '//       ENDIF'
    return
endProcedure setIf

addIf: procedure expose m.
parse arg o, opt
    if m.o.ifLine == '' then
        return
    else if opt == 'end' then
        call mAdd o, '//       ENDIF'
    else
        call mAdd o, '//       IF' m.o.ifLine 'THEN'
    return
endProcedure addIf

ibmImportExpand: procedure expose m.
parse arg o, nachAll, deltaNew
    call addIf o
    ic = skelStem('Imp')
    sto = mapExpAllAt(e, o, ic, 1, 1)
    do while sto ^= ''
        parse var sto lx cx
        w = word(substr(m.ic.lx, cx), 1)
        if w == '$@maskDD' then do
            if mapGet(e, 'mask') \= '' then
                call mAdd o, '//MSKDDN1     DD' mapGet(e, 'mask')
            end
        else if w == '$@maskII' then do
            if mapGet(e, 'mask') \= '' then
                call mAdd o, "  MSKDDN='MSKDDN1',",
                           , " MSKOWN='DUMMY',",
                           , "  MSKNAME='DUMMY',"
            end
        else if w == '$@bmcCdl' then do
            le = left('//IMPORTIN', 13)
            do ix=1 to length(nachAll)
                call mAdd o, le || 'DD DISP=SHR,DSN=',
                                || cdlDsnCheck(substr(nachAll, ix, 1))
                le = left('//', 13)
                end
            end
        else if w ^== '$@cdl' then do
            call err 'unbekannte Anweisung' w 'in Zeile' cx m.ic.cx
            end
        else do
            inDdn = mapGet(e, 'inDdn')
            do ix=1 to length(nachAll)
                call mAdd o, left('//'inDdn || right(ix,3,0), 13) ,
                                || 'DD DISP=SHR,DSN=',
                                || cdlDsnCheck(substr(nachAll, ix, 1))
                end
            end
        sto = mapExpAllAt(e, o, ic, lx, cx + length(w))
        end
    call addIf o, 'end'
    call setIf o, 'AUTO'
    return
endProcedure ibmImportExpand

importMapping: procedure expose m.
parse arg o, msk, nachAll, mapDdl
    oldRz = m.myRz
    oldSub= mapGet(e, 'subsys')
    if m.myRz \== m.sysRz then
        call configureRZSub m.sysRz, m.sysSub
    say '???adding impMbr' msk
    call addIf o
    mStry = left(m.e.auftrag, 7)'#'
    call mapPut e, 'mStry', mStry
    interpret subword(dsnAlloc(mapDdl '::F'), 2)
    call mAdd o,'//****** importMasking' mask 'begin ???????'
    call mapExpAll e, o, skelStem('CMAP')
    call mapPut e, 'ddlout', mapDdl
    call caGlbChg o, mapGet(e, 'impMaskMbr')
    call mAdd o,'//       ENDIF'
    call mAdd o,'//****** importMasking' mask 'end   ???????'
    call addIf o, 'end'
    call setIf o, 'MANA', 0 4
    if m.myRz \== oldRz then
        call configureRZSub oldRz, oldSub
    return
endProcedure importMapping

/*--- DSN für CDL des Nachtrags zurückgeben und auf Existenz prüfen---*/
cdlDsnCheck: procedure expose m.
parse arg nt
    cdl = m.libPre'.'if(m.e.tool=='IBM', 'CDL', 'CADDL') ,
        || '('left(m.e.auftrag, 7) || nt')'
    if m.cdlDsnCheck.cdl == 1 then
        return cdl
    rr = sysDsn("'"cdl"'")
    if rr <> 'OK' then
        call err 'cdl fuer' nt'. Nachtrag fehlt:' cdl rr
    m.cdlDsnCheck.cdl = 1
    return cdl
endProcedure cdlDsnCheck

/*--- Date und user rechtsbuendig einfuegen --------------------------*/
addDateUs: procedure expose m.
parse arg le
    return le right(date(s) time() m.uNa, 71-length(le))
endProcedure addDateUs                                      "'"

/*--- den aktuellen Auftrag analysieren ------------------------------*/
analyseAuftrag: procedure expose m.
    m.scopeSrc.0 = 0
    m.scopeSrc.subSys = m.pr1Sub
    m.scopeSrc.rz     = m.myRz
    m.catSrc.0 = ''
    m.scopeTrg.0 = 0
    m.scopeTrg.subSys = m.pr1Sub
    m.scopeTrg.rz = m.myRz
    m.catTrg.0 = ''
    m.imp.seq = -1
    m.nacImp = 0
    m.e.impMask = ''
    m.e.comMask = ''
    m.e.tool = 'IBM'
    m.e.keepTgt = 1
    allImpSubs = ''
    if m.auftrag.0 = 0 then
        call err 'Auftrag ist leer'
    vaWo = 'AUFTRAG'
    varWo =  'ZUEGELSCHUB BESTELLER COMMASK COMIGNO IMPMASK IMPIGNO' ,
             'KEEPTGT DBACHECK QCHECK V72 V10 CA BMC IBM'
    ignWo = 'SW SENDWSL RECEIVEWSL RECEIVESOURCE'
    ignCh = '*|'
    lev1Wo = 'SCOPE SOURCE TARGET COMPARE VERSION IMPORT SENDTARGET' ,
             varWo 'PROTOTYPERZ'
    do lx=1 to m.auftrag.0
        li = m.auftrag.lx
        parse upper var li w1 w2 w3 .
        if w1 = '' | pos(left(w1, 1), ignCh) > 0 ,
                   | wordPos(w1, ignWo) > 0 then
            iterate
        if wordPos(w1, vaWo) < 1 then
            call err 'operation' w1 ', erwartet' vaWo 'in Zeile' lx li
        w2 = translate(word(li, 2))
        if w1 = 'AUFTRAG' then do
            if w2 ^= m.auftrag.member then
                call err 'auftrag' w2 '<> member' m.auftrag.member
            m.e.auftrag = w2
            m.e.nachtrag = '?'
            m.nachtrag.0 = 0
            if dataType(left(w3, 1), 'U') & length(w3) <= 8 then
                ow = w3
            else
                ow = 'S100447'
            call mapPut e, 'chgOwn', ow
            vaWo = lev1Wo
            end
        else if wordPos(w1, 'V72 V10') > 0 then do
            call configureRZ , , substr(w1, 2)
            end
        else if wordPos(w1, 'CA BMC IBM') > 0 then do
            m.e.tool = w1
            end
        else if wordPos(w1, varWo) > 0 then do
            m.e.w1 = word(li, 2)
            end
        else if w1 = 'PROTOTYPERZ' then do /* alte syntax sep08 ??? */
            m.scopeSrc.rz = word(li, 2)
            end
        else if wordPos(w1, 'SCOPE SOURCE TARGET') > 0 then do
            suSy = ''
            if w1 = 'SOURCE' then do
                scp = 'SCOPESRC'
                suSy = w2
                end
            else if w1 = 'TARGET' then do
                scp = 'SCOPETRG'
                if abbrev('EXPLICIT', w2, 2) then do
                    m.optAuto = 0
                    suSy = w3
                    end
                else do
                    suSy = w2
                    if abbrev('EXPLICIT', w3, 2) then
                        m.optAuto = 0
                    end
                end
            else do /* alte syntax */
                if abbrev('SOURCE', w2) then
                    scp = 'SCOPESRC'
                else if abbrev('TARGET', w2) then
                    scp = 'SCOPETRG'
                else
                    call err 'scope' w2 'nicht abk. von SOURCE TARGET',
                                        'in Zeile' lx li
                end
            if (abbrev(suSy, 'DQ0') | abbrev(suSy, 'RZ1.DQ0')) ,
                                   <> (m.libPre == 'DSN.DBQ') then
                call err 'subSys' suSy 'mit Auftrag in' m.libPre
            m.scp.0 = 0
            if pos('.', suSy) > 0 then
                parse var suSy suRz '.' suSy
            else if pos('/', suSy) > 0 then
                parse var suSy suRz '/' suSy
            else
                suRZ = ''
            if suSy <> '' then
                m.scp.subsys = suSy
            if suRz <> '' then
                m.scp.rz = suRz
            vaWo = m.scopeTypes m.scopeType1 lev1Wo
            call debug 'scope' scp m.scp.rz'.'m.scp.subsys
            end
        else if wordPos(w1, m.scopeTypes m.scopeType1) > 0 then do
            parse value analyseScope(li) with ty nm qu
            if ty = '?' then
                call err nm qu 'in scope line' lx':' strip(li)
            aa = mAdd(scp, 'scope')
            m.aa.type = ty
            m.aa.qual = qu
            m.aa.name = nm
            end
        else if wordPos(w1, 'COMPARE VERSION SENDTARGET') > 0 then do
            if w1 = 'SENDTARGET' then
                w2 = w3
            cmpLast = abbrev(w2, '=')
            w2 = strip(w2, 'l', '=')
            if length(w2) <> 1 | pos(w2, m.nachtragChars) < 1 then
                call err 'nachtrag' w2 'in Zeile' lx li
            if pos(w2, m.nachtragChars) ,
                    < pos(m.e.nachtrag, m.nachtragChars) then
                call err 'nachtrag' w2 '< vorherigem' m.e.nachtrag ,
                        'in Zeile' lx li
            if m.e.nachtrag <> w2 then do
                m.e.nachtrag = w2
                nx = m.nachtrag.0 + 1
                m.nachtrag.0 = nx
                m.nachtrag.nx = w2
                end
            m.nachtrag.nx.fun = ''
            m.nachtrag.nx.last = cmpLast
            if pos(left(w1, 1), 'CV') > 0 then
                m.nachtrag.nx.fun = left(w1, 1)
            if abbrev(w3, "'") | verify(w3, '/.', 'm') < 1 then
                t1 = m.myRz'/'m.pr1Sub
            else
                t1 = translate(w3, '/', '.')
            m.nachtrag.nx.trg = t1
            call debug 'nachtr' nx m.nachtrag.nx 'trg' m.nachtrag.nx.trg
            m.nacImp = (w1 <> 'COMPARE')
            end
        else if w1 = 'IMPORT' then do
            parse upper var li . subsys nachAll chg .
            subsys = translate(subsys, '/', '.')
            if pos('/', subsys) < 1 then
                subsys = 'RZ1/'subsys
            parse var chg chgAuf '.' chgNac '.' chgSeq '.' chgImp
            aa = m.e.auftrag
            if chgAuf = aa then do
                if left(chgNac, 1) <> left(nachAll, 1) then
                    call err 'Nachtrag von mismatch in Zeile' lx li
                if right(chgNac, 1) <> right(nachAll, 1) then
                    call err 'Nachtrag bis mismatch in Zeile' lx li
                end
            else if abbrev(chgAuf, aa) ,
                    & substr(chgAuf, length(aa)+4, 1) == '_' then do
                chgSeq = substr(chgAuf, length(aa)+1, 3)
                end
            else
                call err 'Auftrag mismatch in Zeile' lx li
            if chgSeq <= m.imp.seq then
                call err 'seq' chgSeq 'nicht > letzte' m.imp.seq,
                             'in Zeile' lx li
            m.nacImp = 1
            m.imp.last = subSys
            m.imp.subSys.nachtrag = nachAll
            if wordPos(subSys, allImpSubs) < 1 then do
                allImpSubs = allImpSubs subSys
                m.imp.subSys.nachTop = left(nachAll, 1)
                end
            do nx=length(nachAll) by -1 to 1
                if pos(substr(nachAll, nx, 1), m.nachtragChars) ,
                     > pos(m.imp.subSys.nachTop , m.nachtragChars) then
                    m.imp.subSys.nachTop = substr(nachAll, nx, 1)
                end
            m.imp.subSys.change   = chg
            m.imp.seq = chgSeq
            end
        else do
            call err 'ungültiger Operator' w1 'in Zeile' lx':' strip(li)
            end
        end

    m.e.keepTgt = m.e.keepTgt == 1
                               /* nachtrae durchgehen und kumulieren */
    m.targets = ''
    m.compares = ''
    m.versions = ''
    drop cmpLast
    m.cmpLast = 0
    do nx=1 to m.nachtrag.0
        m.cmpLast = m.cmpLast | m.nachtrag.nx.last
        if wordPos(m.nachtrag.nx.trg, m.targets) < 1 then
            m.targets = m.targets m.nachtrag.nx.trg
        if m.nachtrag.nx.fun = 'C' then
            m.compares = m.compares || m.nachtrag.nx
        if m.nachtrag.nx.fun = 'V' then
            m.versions = m.versions || m.nachtrag.nx
        call debug 'nachtrag' nx m.nachtrag.nx 'trg' m.nachtrag.nx.trg,
                 'all' m.targets 'fun' ,
                  m.nachtrag.nx.fun 'com' m.compares 'ver' m.versions,
                  'cmpLast' m.cmpLast
        end
    if 0 & abbrev(m.scopeSrc.subSys, 'DQ0') then
        call configureRz , '915 P0'
    if 0 then do
        say 'auftrag ' m.e.auftrag m.e.nachtrag mapGet(e, 'chgOwn')
        say '  comMask  ' m.e.comMask
        say '  comIgno  ' m.e.comIgno
        say '  impMask  ' m.e.impMask
        say '  impIgno  ' m.e.impIgno
        scp = 'SCOPESRC'
        drop subsys
        say '  scope ' m.scp.0 m.scp.subsys ,
            '  target ' m.scopeTrg.0 m.scopeTrg.subsys
        do sx=1 to m.scp.0
            say '   ' m.scp.sx.type m.scp.sx.qual'.'m.scp.sx.name
            end
        end
    call bmcVars
    return
endProcedure analyseAuftrag

/*--- eine Scope Zeile analysieren -----------------------------------*/
analyseScope: procedure expose m.
parse arg li
    parse upper var li ty w1 rest
    if wordPos(ty, m.scopeType1) > 0 then
        ty = word(m.scopeTypes, wordPos(ty, m.scopeType1))
    if wordPos(ty, m.scopeTypes) < 1 then
        return '?'
    cx = pos('.', w1)
    if cx < 1 then do
        qu = w1
        end
    else do
        qu =strip(left(w1, cx-1))
        rest = substr(w1, cx) rest
        end
    if qu = '' then
        return '? leerer Qualifier'
    if ty = 'DB' then
        return ty qu
    if left(rest, 1) = '.' then
        rest = substr(rest, 2)
    nm = word(rest, 1)
    if nm = '' then
        return '? leerer Name'
    return ty nm qu
endProcedure analyseScope

/*--- jcl generieren um Src und Trg Version und DDL zu extrahieren ---*/
extractSrcTrg: procedure expose m.
parse arg o, xx, oldSrc mbrLast
    call configureSubsys m.scopeSrc.rz, m.scopeSrc.subsys
    call mapPut e, 'auto', xx'AUTO'
    call mapPut e, 'src', xx'SRC'
    call mapPut e, 'trg', xx'TRG'
    mbrNac = mapGet(e, 'mbrNac')
    call mapPut e, 'what', xx'SRC'
    if ^ oldSrc then do
        call extractScopeVersion o, xx, 'SRC'
        end
    else if mbrNac <> mbrLast then do
        pr = m.libPre'.'xx'SRC'
        call copyDsn pr'DDL('mbrLast')', pr'DDL('mbrNac')', 1
        call copyDsn pr'CAT('mbrLast')', pr'CAT('mbrNac')', 1
        end
    call configureSubsys m.scopeTrg.rz, m.scopeTrg.subsys
    call mapPut e, 'what', xx'TRG'
    if m.optAuto then do
        call mapExpAll e, o, skelStem('AutMa')
        if m.sysRz = m.scopeTrg.rz then do
            call mapExpAll e, o, skelStem('AutEx')
            end
        else do
            mbrN = mapGet(e, 'mbrNac')
            mark = mbrN'@'time()
            autD = mapExp(e, '${libPre}.$auto($mbrNac)')
            cf   = mapExp(e, '${libPre}.SENDCF($mbrNac)')
            sndIn = sendJob1(o, m.scopeTrg.rz, 'RECTRG',
                , 'send'    autD                      ,
                , 'job      -ddJob' m.timeout'//??' cf mark       ,
                , 'receive' mapExp(e, '${libPre}.${what}DDL($mbrNac)') ,
                , 'receive' mapExp(e, '${libPre}.${what}CAT($mbrNac)') )
            call mapExpAll e, o, skelStem('AutEx')
            call sendJob2 o, sndIn, cf mark
            end
        end
    else do
        call extractScopeVersion o, xx, 'TRG'
        end
    return
endProcedure extractSrcTrg

/*--- Version + DDL zu extrahieren -----------------------------------*/
extractScopeVersion: procedure expose m.
parse arg o, ty, what
    scp = 'SCOPE'what
    /* say m.scp.rz  'scp' scp */
    if m.sysRz = m.scp.rz then do
        call extractVersionStep o, ty, what
        end
    else do
        mbrN = mapGet(e, 'mbrNac')
        mark = mbrN'@'time()
        cf   = mapExp(e, '${libPre}.SENDCF($mbrNac)')
        sndIn = sendJob1(o, m.scp.rz, 'REC'what,
            , 'job      -ddJob' m.timeout'//??' cf mark       ,
            , 'receive' mapExp(e, '${libPre}.${what}DDL($mbrNac)') ,
            , 'receive' mapExp(e, '${libPre}.${what}CAT($mbrNac)') )
        call extractVersionStep o, ty, what
        call sendJob2 o, sndIn, cf mark
        end
    return
endProcedure extractScopeVersion

/*--- einen Step um Version + DDL zu extrahieren ---------------------*/
extractVersionStep: procedure expose m.
parse arg o, ty, what
    scp = 'SCOPE'what
    call mapPut e, 'what', ty || what
    i = skelStem('ExVe')
    sto = mapExpAllAt(e, o, i, 1, 1)
    do while sto ^== ''
        parse var sto lx cx
        w = word(substr(m.i.lx, cx), 1)
        if w == '$@scope' then do
            if ty == '' then do
                do sx=1 to m.scp.0
                    sn = scp'.'sx
                    if wordPos(m.sn.type, 'UDT UDF') > 0 then do
                        t = "SCH = '"m.sn.qual"', " ,
                            m.sn.type "= '"m.sn.name"';"
                        end
                    else do
                        t = "TYPE = '"m.sn.type"',"
                        if m.sn.type <> 'DB' then
                            t = t "QUAL = '"m.sn.qual"',"
                        t = t "NAME = '"m.sn.name"'"
                        if m.sn.type = 'SP' then
                            t = t", VERSION='%'"
                        t = t';'
                        end
                    if length(t) < 30 then do
                        call mAdd o, ' ' t
                        end
                    else do
                        cx = lastPos(',', t)
                        call mAdd o, ' ' left(t, cx),
                                   , '  ' substr(t, cx+1)
                        end
                    end
                end
            else if ty == 'DB' then do
                c = getDb2Catalog(what)
                do x=1 to m.c.0
                    d1 = m.c.x.db
                    if db.d1 == 1 then
                        iterate
                    db.d1 = 1
                    call mAdd o, "  TYPE = 'DB,' NAME = '"d1"';"
                    end
                end
            else
                call err 'extractVersionStep bad ty' ty
            end
        else do
            call err 'implement stop' sto 'word' w 'in line' lx m.i.lx
            end
        sto = mapExpAllAt(e, o, i, lx, cx + length(w))
        end
    return
endProcedure extractVersionStep

/*--- add jcl to stem o to send a job to rz toRz with stepname step
         and add the remaining arguments as sendJob statements
         afterwards the caller must add the jcl and call sendJob2 ----*/
sendJob1: procedure expose m.
parse arg o, toRz, step
    oldRz = m.myRz
    call configureRz toRz
    call mapPut e, 'step', step
    call mapExpAll e, o, skelStem('SendJ')
    do ax=4 to arg()
        aa = arg(ax)
        call debug 'sendJob1 le' length(aa) aa'|'
        sx = 0
        do forever
            sy = sx
            sx = pos(';', aa, sy+1)
            if sx = 0 then
                leave
            call mAdd o, substr(aa,sy+1, sx-sy-1)
            end
        call mAdd o, substr(aa, sy+1) left('-', (ax < arg()))
        end
    call mAdd o, '//DDJOB     DD *'
    stReX = m.o.0+1
    call mapPut e, 'jobName', 'Y'left(m.e.auftrag, 7)
    call mapPut e, 'fun', 'extract data from' toRz
    call mapExpAll e, o, skelStem(m.jobCard)
    return oldRz stReX
endProcedure sendJob1

/*--- add the mark step to the job, translate leading // to ??
          and switch back to original rz -----------------------------*/
sendJob2: procedure expose m.
parse arg o, oldRz stReX, cfMark
    if cfMark ^= '' then do
        call mAdd o, '//         IF NOT ABEND' ,
                      'AND RC >= 0 AND RC <= 4 THEN'
        call mapPut e, 'step', 'MARKOK'
        call mapExpAll e, o, skelStem('SendJ')
        call mAdd o, 'mark' cfMark 'okRc0'
        call mAdd o, '//         ELSE'
        call mapPut e, 'step', 'MARKERR'
        call mapExpAll e, o, skelStem('SendJ')
        call mAdd o, 'mark' cfMark 'badRcOrAbend'
        call mAdd o, '//         ENDIF'
        end
    do ox = stReX to m.o.0
        if abbrev(m.o.ox, '//') then
            m.o.ox = overlay('??', m.o.ox)
        end
    call configureRz oldRz
    return
endProcedure sendJob2

/*--- return Stem fuer die CatalogInfo für Src oder Trg
          falls noetig aus Db2Catalog einlesen -----------------------*/
getDb2Catalog: procedure expose m.
parse arg wh
    st = 'CAT'wh
    if datatype(m.st.0, n) then
        return st
    else if m.st.0 ^== '' then
        call err 'getDb2Catalog('wh') bad value m.'st'.0' m.st.0
    scp = 'SCOPE'wh
    if m.sysRz = m.scp.rz then
        call sqlOConnect m.scp.subSys
    else
        call sqlOConnect m.scp.rz'/'m.scp.subSys
    call queryDb2Catalog st, wh
    m.v9.0 = 0
    call queryDb2V9 st, 'V9'
    return st
endProcedure getDb2Catalog

/*--- Information aus Db2Catalog fuer einen Scope einlesen -----------*/
queryDb2Catalog: procedure expose m.
parse arg st, what
    scp = 'SCOPE'what
    /* m.scopeTypes = 'DB TS TB VW IX AL' */
    ts = ''
    tb = ''
    ix = ''
    unQueried = 0
    do sx=1 to m.scp.0
        sn = scp'.'sx
        t = "  TYPE = '"m.sn.type"',"
        if m.sn.type <> 'DB' then
            t = t "QUAL = '"m.sn.qual"',"
        t = t "NAME = '"m.sn.name"';"
        call debug 'queryDb2Catalog' sx t
        if m.sn.type = 'DB' then
            ts = ts 'or s.dbName' sqlClause(m.sn.name)
        else if m.sn.Type = 'TS' then
            ts = ts 'or (s.dbName' sqlClause(m.sn.qual) ,
                    'and s.name' sqlClause(m.sn.name)')'
        else if m.sn.Type = 'TB' then
            tb = tb 'or (t.creator' sqlClause(m.sn.qual) ,
                    'and t.name' sqlClause(m.sn.name)')'
        else if m.sn.Type = 'IX' then
            ix = ix 'or (x.creator' sqlClause(m.sn.qual) ,
                    'and x.name' sqlClause(m.sn.name)')'
        else
            unQueried = unQueried + 1
        end
    sel = 'select s.dbName db, s.name ts , s.type, ',
                  's.partitions, s.segSize, s.log, ',
                  't.creator cr, t.name tb,' ,
                  't.status tbSta, t.tableStatus tbTbSta',
              'from sysibm.sysTableSpace S, sysibm.sysTables T'
    wh = "where s.dbName = t.dbName and s.name = t.tsName",
               "and t.type = 'T'"
    sql = ''
    if ts <> '' then
        sql = sql 'union' sel wh 'and ('substr(ts, 5)')'
    call debug 'ts sql' sql
    if tb <> '' then
        sql = sql 'union' sel wh 'and ('substr(tb, 5)')'
    call debug 'tb sql' sql
    if ix <> '' then
        sql = sql 'union' sel ', SYSIBM.SYSINDEXES X',
                    wh 'and t.creator=x.tbCreator and t.name=x.tbName',
                       'and ('substr(ix, 5)')'
    call debug 'ix sql' sql
    if sql = '' then do
         m.st.0 = 0
         if unQueried < 1 then
             say 'nothing specified in source scope'
         return 0
         end
    drop db ts cr tb type
    call sql2St substr(sql, 8), st
    if m.debug == 1 then do
        say m.st.0
        do sx = 1 to m.st.0
           say strip(m.st.sx.db)'.'strip(m.st.sx.ts) m.st.sx.type ,
                      m.st.sx.partitions m.st.sx.segSize
           end
        end
    return m.st.0
endProcedure queryDb2Catalog

/*--- haben wir schon DB2 V9 Objekte ? -------------------------------*/
queryDb2V9: procedure expose m.
parse arg sc, vv
    m.vv.0 = 0
    wh =''
    do x = 1 to m.sc.0
        wh = wh "or (cr='"m.sc.x.cr"' and tb='"m.sc.x.tb"')"
        end
    if wh == '' then
        return 0
    return sql2st("select tp,nm,v9",
             "from s100447.db2v9",
             "where V9 <> '' and (" substr(wh, 5) ")",
             "order by cr,tb,cl", vv)
endProcedure queryDb2V9

/*--- Qualitaets Pruefung fuer CatalogInfo Stem c --------------------*/
qualityCheck: procedure expose m.
parse arg c
    if m.libPre <> 'DSN.DBQ' then
        call maskIni
    o = 'AUFTRAG'
    m.o.orig = 'rmQu' m.o.orig
    m.spezialFall.done = ''
    aufOld = m.o.0
    do x=1 to m.c.0
        vDb = strip(m.c.x.db)
        n = '|| db' vDb
        if d.n ^== 1 then do
            d.n = 1
            call spezialfall vDb, substr(n, 4)
            end
        n = '|| ts' vDb'.'strip(m.c.x.ts)
        if d.n ^== 1 then do
            d.n = 1
            call spezialfall vDb, substr(n, 4)
            if m.c.x.log <> 'Y' then
                call mAdd o, n 'not logged'
            if m.c.x.partitions > 0 then
                nop
            else if m.c.x.segSize = 0 then
                call mAdd o, n 'simple TS'
            end
        n = '|| tb' strip(m.c.x.cr)'.'strip(m.c.x.tb)
        if d.n ^== 1 then do
            d.n = 1
            call spezialfall vDb, substr(n, 4)
            if m.c.x.tbTbSta = 'L' then
                call mAdd o, n 'auxilary index oder table fehlt'
            else if m.c.x.tbTbSta = 'P' then
                call mAdd o, n 'primary index fehlt'
            else if m.c.x.tbTbSta = 'R' then
                call mAdd o, n 'index auf Row ID fehlt'
            else if m.c.x.tbTbSta = 'U' then
                call mAdd o, n 'index auf unique key fehlt'
            else if m.c.x.tbTbSta = 'V' then
                call mAdd o, n 'Regenerierung interne ViewDarstellung'
            else if m.c.x.tbTbSta ^= '' then
                call mAdd o, n 'TableStatus' m.c.x.tbTbSta 'unbekannt'
            end
        end
    do vx=1 to m.v9.0
        call mAdd o, '|| V9' m.v9.vx.tp left(m.v9.vx.nm, 30) ,
                                        left(m.v9.vx.v9, 30)
        end
    return aufOld < m.o.0
endProcedure qualityCheck

/*--- für jedes Objekt aus Source Scope Eintrage in der
      Spezialfall Library suchen und falls vorhanden anzeigen --------*/
spezialFall: procedure expose m.
parse upper arg db, typ qua '.' nam
    if m.libPre = 'DSN.DBQ' then
        return
    pDb = mask2prod('DBNAME', db)
    if (typ = 'DB' | typ = 'TS') & db <> qua then
        call err 'db mismatch spezialFall('db',' typ qua'.'nam')'
    if typ = 'DB' then
        srch = typ pDb'.'
    else if typ = 'TS' then
        srch = typ pDb'.'mask2prod('TSNAME', nam)
    else if typ = 'TB' then
        srch = typ mask2prod('TBOWNER', qua)'.'mask2prod('TBNAME', nam)
    else
        call err 'bad typ' typ
    st = spezialFall'.'pDb
    if symbol('m.st.0') <> 'VAR' then do
        dsn = m.libSpezial"("pDb")"
        sy = sysDsn("'"dsn"'")
        if sy <> 'OK' then do
            m.st.0 = 0
            if sy <> 'MEMBER NOT FOUND' then
                call err 'spezialFall library' dsn':' sy
            end
        else do
           call readDsn dsn, 'M.SPEZIALFALL.'pDB'.'
           end
        end
    if m.st.0 < 1 then
        return
    offs = 999
    found = 0
    do sx = 1 to m.st.0
        fx = verify(m.st.sx, ' ')
        if fx = 0 | fx > 72 then
           iterate
        if substr(m.st.sx, fx, 1) = '*' then
           iterate
        if fx <= offs then do
            offs = fx
            m.st.sx = left(m.st.sx, 72)
            n = ''
            if pos('.', m.st.sx) > 0 then
                parse upper var m.st.sx t q '.' n .
            else
                parse upper var m.st.sx t q .
            if wordPos(t, 'DB TS TB') < 1 then
              call err 'spezialFall' pDb 'line' sx 'ungueltig:' m.st.sx
            found = match(srch, t strip(q)'.'strip(n)) ,
                    & ^ (wordPos(pDb'.'sx, m.spezialFall.done) > 0)
            if found then
                m.spezialFall.done = m.spezialFall.done  pDb'.'sx
            end
        if found then
            call mAdd auftrag, '|-'left(m.st.sx, 78)
        end
    return
endProcedure spezialFall

/*--- mask handling initialise ---------------------------------------*/
maskIni: procedure expose m.
    call maskHierarchy
    call maskRead mask.prot, m.libPre'.MASK(PROTDBAF)'
    call maskRead mask.dbof, m.libPre'.MASK(DBAFDBOF)'
    return
endProcedure maskIni

/*--- mask a whole scope  --------------------------------------------*/
maskScope: procedure expose m.
parse arg mskDsn, fr, to
    call maskRead masc, mskDsn
    do fx=1 to m.fr.0
        ty = m.fr.fx.type
        m.to.fx.type = ty
        if wordPos(ty, 'DB SG') > 0 then
            m.to.fx.qual = ''
        else if wordPos(ty, 'TS') > 0 then
            m.to.fx.qual = maskTrans(masc, 'DBNAME', m.fr.fx.qual)
        else
            m.to.fx.qual = maskTrans(masc, 'SCHEMA', m.fr.fx.qual)
        if wordPos(ty, 'DB') > 0 then
            m.to.fx.name = maskTrans(masc, 'DBNAME', m.fr.fx.name)
        else if wordPos(ty, 'TB VW AL') > 0 then
            m.to.fx.name = maskTrans(masc, 'TBNAME', m.fr.fx.name)
        else if wordPos(ty, 'SP') > 0 then
            m.to.fx.name = maskTrans(masc, 'STPNAME', m.fr.fx.name)
        else
            m.to.fx.name = maskTrans(masc, ty'NAME', m.fr.fx.name)
        end
    m.to.0 = m.fr.0
    return
endProcedure maskScope

/*--- mask test functions --------------------------------------------*/
testMask: procedure expose m.
    call maskIni
    call maskTT OWNER, GDB9998
    call maskTT DBNAME, DGDB9998
    call maskTT DBNAME, DGDB0287
    call maskTT OWNER, GDB0301
    call maskTT TSNAME, AGRFX12A2
    call maskTT OWNER, SYS123EF
    return 0
endProcedure testMask

maskTT: procedure expose m.
parse arg ty, na
    say 'maskTrans(prot,' ty',' na') =' maskTrans(mask.prot, ty, na) ,
        ' -> DBOF' maskTrans(mask.dbof, ty, maskTrans(mask.prot,ty,na))
    return

/*--- translate a prototype object to DBOF naming -------------------*/
mask2Prod: procedure expose m.
parse arg ty, na
    return translate(strip(,
        maskTrans(mask.dbof, ty, maskTrans(mask.prot,ty,na))))

/*--- translate an object of type ty and name na
           by the masking file in st --------------------------------*/
maskTrans: procedure expose m.
parse arg st, ty, na
    if symbol('m.mask.hier.ty') <> 'VAR' then
        call err 'bad type' ty
    types = m.mask.hier.ty
    do sx=1 to m.st.0
        if wordPos(m.st.sx.typ, types) < 1 then
            iterate
        if match(na, m.st.sx.in, vv) then
            return matchTrans(m.st.sx.out, vv)
        end
    return na
endProcedure maskTrans

/*--- read and analyse the masking file dsn into stem st ------------*/
maskRead: procedure expose m.
parse arg st, dsn
    maskIgno = 'COMPRESS SEGSIZE DEFER DEFINE PRIQTY SECQTY'
    call readDsn dsn, i.
    j = 0
    do i=1 to i.0
        parse var i.i t ':' s ',' d
        t = strip(t)
        if symbol('m.mask.hier.t') == 'VAR' then
            nop
        else if wordPos(t, maskIgno) > 0 then
            iterate
        else
            call err 'bad typ' t 'in maskline' i':' i.i
        j = j+1
        m.st.j.typ = t
        m.st.j.in = strip(s)
        m.st.j.out = word(d, 1)
        end
    m.st.0 = j
    return
    drop typ in out
    do wx=1 to m.st.0
        say wx m.st.wx.typ':' m.st.wx.in'==>'m.st.wx.out'|'
        end
endProcedure maskRead

/*--- initialise the type hierarchy of masking
           as input use the msgLines of the mask editor --------------*/
maskHierarchy: procedure expose m.
                     /* copy der hierarch aus masking template */
    call mAdd mCut('T', 0)                           ,
      , 'COLNAME                                     ' ,
      , 'NAME                                        ' ,
      , '  DBNAME,TSNAME,TBNAME,IXNAME,UDFNAME,      ' ,
      , '  UDTNAME,COLLNAME,PKGNAME,PGMNAME,PLNNAME  ' ,
      , '  DBRMNAME,STPNAME,SFNAME,TGNAME,GRPNAME,   ' ,
      , '  VCATNAME,GBPNAME                          ' ,
      , '  BPNAME                                    ' ,
      , '    TSBPNAME,IXBPNAME                       ' ,
      , '  SGNAME                                    ' ,
      , '    TSSGNAME,IXSGNAME                       ' ,
      , 'AUTHID                                      ' ,
      , '  SQLID,SCHEMA                              ' ,
      , '  OWNER                                     ' ,
      , '    DBOWNER,TSOWNER,TBOWNER,IXOWNER         ' ,
      , '  GRANTID                                   ' ,
      , '    GRANTOR,GRANTEE                         '
    qx = 0
    lOff = -1
    m.mask.hier = ''
    do x=1 to m.t.0
        of = verify(m.t.x, ' ', 'n')
        li = translate(m.t.x, ' ', ',')
        do while qx > 0 & word(q.qx, 1) >= of
            qx = qx -1
            end
        px = qx - 1
        if (qx = 0 | of > word(q.qx, 1))  & words(li) = 1 then do
            px = qx
            qx = qx + 1
            if qx = 1 then
                q.qx = of word(li, 1)
            else
                q.qx = of word(li, 1) subword(q.px, 2)
            end
        do wx=1 to words(li)
            w1 = word(li, wx)
            m.mask.hier = m.mask.hier w1
            if wordPos(w1, subWord(q.qx, 2)) < 1 then
                m.mask.hier.w1 = w1 subWord(q.qx, 2)
            else
                m.mask.hier.w1 = subWord(q.qx, 2)
            end
        end
    return
endProcedure maskHierarchy

/*--- Funktion q: scope Zeilen pruefen -------------------------------*/
queryScope: procedure expose m.
parse arg subSys
    subs2 = ''
    rf = 1
    isConn = 0
    if adrEdit('(rl) = lineNum .zl', 4) = 4 then
            rl = 0
    if ^ m.editMacro then
        call err 'q nicht als Macro'
    if ^ m.editProc then do
        if adrEdit('PROCESS RANGE Q', 0 4) = 0 then do
            call adrEdit '(rf) = lineNum .zfrange'
            call adrEdit '(rl) = lineNum .zlrange'
            end
        m.editProc = 1
        end
    do rx = rf by 1 while rx <= rl
        call adrEdit '(li) = line' rx
        parse value analyseScope(li) with ty nm qu
        if ty = '?' then do
            if nm <> '' then
                say nm qu 'in line' rx':' strip(li)
            if \ isConn & subsys == '' then do
                parse upper var li w1 w2 .
                if wordpos(w1, 'SOURCE TARGET') > 0 then do
                    if length(w2) = 4 | ( length(w2) = 8 ,
                          & pos(substr(w2,4,1), './') > 0) then
                    subs2 = translate(w2, '/', '.')
                    end
                end
            iterate
            end
        if \ isConn then do
            isConn = 1
            if subSys = '' then
                subSys = if(subs2 == '', m.pr1Sub, subs2)
            subsys = translate(subsys, '/', '.')
            call sqlConnect subSys
            subsys = translate(subsys, m.mAlfLC, m.mAlfUC)
            end
        call expandScope mCut(qq, 0), ty, qu, nm
        do qx=1 to m.qq.0
            neu = m.qq.qx
            if length(neu subSys) < 70 then
                neu = left(neu, 68 - length(subSys)) '*'subSys
            else if length(neu subSys) < 80 then
                neu = neu '*'subSys
            liCm = if(qx=1, "line" rx, "line_after" (rx+qx-2))
            if adrEdit(liCm "= (neu)", 4) = 4 then
                say 'truncation line' rx':' neu
            end
        rx = rx + m.qq.0 - 1
        rl = rl + m.qq.0 - 1
        end
    call sqlDisConnect
    return 0
endProcedure queryScope

/*--- einen Scope Ausdruck expandieren -------------------------------*/
expandScope: procedure expose m.
parse arg o, ty, qu, nm
     sql = ''
     dec2s = "strip(case when abs(?) > 9223372036854775807",
                       "then char(real(?)) else char(bigint(?)) end)"
     if ty = 'DB' then
         sql = "select 'db', name, '' from sysibm.sysDatabase",
                    "where name" sqlClause(nm)
     else if ty = 'TS' then
         sql = "select 'ts', strip(dbName) || '.' || strip(tsName)," ,
                    "case when count(*) = 1 then 'tb '" ,
                         "else strip(char(count(*))) || ' tables||| '",
                    "end || min(strip(creator) ||'.'|| strip(name))",
                    "from sysibm.systables" ,
                    "where type = 'T' and dbName" sqlClause(qu),
                                    "and tsName" sqlClause(nm),
                    "group by dbName, tsName"
     else if ty = 'TB' | ty = 'VW' | ty = 'AL' then
         sql = "select case when type = 'T' then 'tb'",
                           "when type = 'V' then 'vw'",
                           "when type = 'A' then 'al'",
                                           "else '?' || type end,",
                    "strip(creator) || '.' || strip(name),",
                    "case when type = 'A' then 'for '",
                              "|| strip(location) || '.'" ,
                              "|| strip(tbCreator)||'.'||strip(tbName)",
                          "else 'ts ' || strip(dbName) ||'.'",
                                      "|| strip(tsName)",
                    "end",
                    "from sysibm.systables" ,
                    "where type =" quote(left(ty, 1), "'"),
                        "and creator" sqlClause(qu),
                        "and name" sqlClause(nm)
     else if ty = 'IX' then
         sql = "select 'ix', strip(creator) || '.' || strip(name),",
                        "'tb ' || strip(tbCreator)||'.'||strip(tbName)",
                    'from sysibm.sysIndexes' ,
                    'where creator' sqlClause(qu),
                           'and name' sqlClause(nm)
     else if ty = 'UDT' then
         sql = "select 'udt', strip(schema) || '.' || strip(name),",
                        "'source ' || strip(sourceSchema)",
                        "|| '.' || strip(sourceType)",
                    "from sysibm.sysDataTypes",
                    'where schema' sqlClause(qu),
                           'and name' sqlClause(nm)
     else if ty = 'UDF' | ty = 'SP' then
         sql = "select case when routineType = 'F' then 'udf'",
                           "when routineType = 'P' then 'sp'",
                           "else '?' || routineType end, ",
                      "strip(schema) || '.' || strip(name),",
                      "'otp=' || origin || function_type" ,
                        "|| strip(char(parm_count))",
                      "|| ' spec=' || strip(specificName)",
                      "|| ' a=' || active || ' vers=' || version",
                    "from sysibm.sysRoutines",
                    'where routineType =' quote(right(ty, 1), "'"),
                         'and schema' sqlClause(qu) ,
                         'and name' sqlClause(nm)
     else if ty = 'TG' then
         sql = "select 'tg', strip(schema) || '.' || strip(name),",
                        "'teg ' || trigTime || trigEvent||granularity",
                        "|| ' tb ' || strip(tbOwner) || '.'",
                        "||           strip(tbName)",
                    "from sysibm.sysTriggers",
                    'where seqNo=1 and schema' sqlClause(qu),
                           'and name' sqlClause(nm)
     else if ty = 'SQ' then
         sql = "select 'sq', strip(schema) || '.' || strip(name),",
                        "'start ' ||" repAll(dec2s, "?", "start"),
                        "|| ': ' ||" repAll(dec2s, "?", "minValue"),
                        "|| '-' ||" repAll(dec2s, "?", "maxValue"),
                        "|| ' inc ' ||" repAll(dec2s, "?", "increment"),
                    "from sysibm.sysSequences",
                    "where seqType='S' and schema" sqlClause(qu),
                           "and name" sqlClause(nm)
     else if ty = 'SY' then
         sql = "select 'sy', strip(creator) || '.' || strip(name),",
                        "'for ' || strip(tbCreator) || '.'" ,
                               "||strip(tbName)",
                    "from sysibm.sysSynonyms",
                    "where creator" sqlClause(qu),
                         "and name" sqlClause(nm)
     else do
        call mAdd o, ty left(qu'.'nm, 30) '* query nicht implementiert'
        return
        end
     call sqlQuery 1, sql 'order by 2', ,
        , classNew('n* SQL u f FT v, f FN v, f FI v')
     do cx=0 by 1 while sqlFetch(1, d)
             call mAdd o, lefA(m.d.ft, 3) lefA(m.d.fn, 30) m.d.fi
             end
     call  sqlClose 1
     if cx = 0 then
         call mAdd o, lefA(ty, 3) lefA(strip(qu)left('.', qu \== '') ,
                   || strip(nm), 30) '* nicht gefunden'
    return
endProcedure expandScope

/*--- return sql condition (= String oder like String) ---------------*/
sqlClause: procedure expose m.
parse arg val
     val = translate(val, '%_', '*?')
     if verify(val, '%_', 'm') > 0 then
          return 'like' quote(val, "'")
     else
          return '=' quote(val, "'")
endProcedure sqlClause

lefA: procedure expose m.
parse arg s, len
    if length(s) < len then
        return left(s, len)
    else
        return s
endProcedure lefA

/*--- copy srcDdl und srcCat aus anderem rz --------------------------*/
receiveSource: procedure expose m.
parse arg rz
    if rz = '' | rz = '*' | rz = m.myRz then
        call err 'rs receiveSource mit ungueltigem rz' rz
    call readAuftrag rz, m.auftrag.dataset, m.e.auftrag
    call analyseAuftrag
    if m.e.nachtrag = '?' then
        call err 'keine Version in Auftrag' m.e.auftrag 'im' rz
    nacMbr = left(m.e.auftrag, 7) || m.e.nachtrag
    call csmCopy rz'/'m.libPre'.srcDdl('nacMbr')', m.libPre'.'rz'DDL'
    call csmCopy rz'/'m.libPre'.srcCat('nacMbr')', m.libPre'.'rz'Cat'
    call readAuftrag   , m.auftrag.dataset, m.auftrag
    call mAdd auftrag, addDateUs('receiveSource' rz,
                        m.libPre'.'rz'Cat('nacMbr')')
    return
endProcedure receiveSource

/*--- copy wsl aus anderem rz ----------------------------------------*/
receiveWSL: procedure expose m.
parse arg rz
    if rz = m.myRz then
        rz = ''
    call analyseAuftrag
    sWsl = 'dsn.dba.clon.wsl('left(m.e.auftrag, 7)'Q)'
    sIff = 'dsn.dba.'left(m.e.auftrag, 7)'Q.IFF'
    if rz <> '' then do
        call csmCopy rz'/'sWsl, sWsl
        if adrCsm("dslist SYSTEM("rz") DSNMASK('"sIff"') SHORT", 4) = 0,
               & stemSize = 1 then
            call csmCopy rz'/'sIff, sIff
        else
            say 'iff existiert nicht im' rz
        end
    call cloneWsl '', m.e.auftrag, 1
    call mAdd auftrag, addDateUs('receiveWSL' rz)
    return
endProcedure receiveWSL

/*--- send wsl to the argument rz ------------------------------------*/
sendWSL: procedure expose m.
parse arg rz
    if rz = m.myRz then
        rz = ''
    call analyseAuftrag
    if m.versions = '' | m.compares <> '' then
        call warn 'sendWSL ohne versions oder mit compares'
    sWsl = 'dsn.dba.clon.wsl('left(m.e.auftrag, 7)'Q)'
    sIff = 'dsn.dba.'left(m.e.auftrag, 7)'Q.IFF'
    if sysDsn("'"sWsl"'") <> 'OK' then
        call err 'source wsl fehlt:' sWsl sysDsn("'"sWsl"'")
    if rz <> '' then do
        call csmCopy sWsl, rz'/'sWsl
        if sysDsn("'"sIff"'") <> 'OK' then
            say 'iff existiert nicht' sIff sysDsn("'"sIff"'")
        else
            call csmCopy sIff, rz'/'sIff
        end
    call cloneWsl rz, m.e.auftrag, 1
    call mAdd auftrag, addDateUs('sendWSL' rz)
    return
endProcedure sendWSL

/*--- clone a wsl mbr in the rz sys,
          if doRemove=1 remove old members first ---------------------*/
cloneWsl: procedure expose m.
parse arg sys, mbr, doRemove
                 /* copy multi clone jcl from target rz */
    jcl = csmSysDsn(sys'/DSN.DBA.MULTI.CLONE'right(mbr, 1)'.JCL', 0)
    CALL READdsn jcl, m.jj.
                                /* modify the jcl */
    do jx=1 to m.jj.0
        if word(m.jj.jx, 2) == '=' then do
            if word(m.jj.jx, 1) = 'SRCWSLST' then
                m.jj.jx = 'SRCWSLST =' left(mbr, 7)'Q'
            else if word(m.jj.jx, 1) = 'CLNWSLST' then
                m.jj.jx = 'CLNWSLST =' mbr
            end
        else if space(subword(m.jj.jx, 1, 2) ,1) ,
                == '//DELMBRIF IF' then do
            m.jj.jx = '//DELMBRIF IF RC =' (7 *(^doRemove)) 'THEN'
            end
        else if word(m.jj.jx, 1) == 'DELETE' then do
            nm = word(m.jj.jx, 2)
            cx = pos('(', nm)
            if right(nm, 1) = ')' & cx > 0 then
                m.jj.jx = '  DELETE' left(nm, cx)mbr')'
            else
                call err 'bad delete' jx m.jj.jx
            end
        end
    call writeSub jj, sys, 1
    return 0
endProcedure cloneWsl

warn:
    say '*** warning:' arg(1)
    return
endSubroutine warn

repAll: procedure expose m.
parse arg src, w, new
    res = ''
    cx = 1
    do forever
        nx = pos(w, src, cx)
        if nx < 1 then
            return res || substr(src, cx)
        res = res || substr(src, cx, nx-cx) || new
        cx = nx + length(w)
        end
endProcedure repAll

/**** ca *************************************************************/
/*--- extract ddl from source system ---------------------------------*/
caDDl: procedure expose m.
parse arg o, scp, GlbChg
    if m.sysRz = m.scp.rz then do
        call caDD1 o, scp, GlbChg
        end
    else do
        mbrN = mapGet(e, 'mbrNac')
        mark = mbrN'@'time()
        cf   = mapExp(e, '${libPre}.SENDCF($mbrNac)')
        sndIn = sendJob1(o, m.scp.rz, 'RECSRC',
            , 'job      -ddJob' m.timeout'//??' cf mark       ,
            , 'receive' mapExp(e, '${libPre}.caddl($mbrNac)'))
        call caDD1 o, scp, GlbChg
        call sendJob2 o, sndIn, cf mark
        end
    return
endProcedure caDDL

/*--- quickMigrate to create ddl -------------------------------------*/
caDD1: procedure expose m.
parse arg o, scp, GlbChg
    call mapPut e, 'user', userid()
    call mapExpAll e, o, skelStem('CCOM')
    do sx=1 to m.scp.0
        sn = scp'.'sx
        if m.sn.type == 'DB' then
            call caEx o, 'DATABASE' '='  m.sn.name, 'db'
        else if m.sn.type == 'IX' then
            call caEx o, 'INDEX' m.sn.qual m.sn.name, 'i'
        else if m.sn.type == 'TS' then
            call caEx o, 'TABLESPACE' m.sn.qual m.sn.name, 'ts'
        else if m.sn.type == 'VW' then
            call caEx o, 'VIEW' m.sn.qual m.sn.name, 'v'
        else
            call err 'implement type' m.sn.type 'for ca'
        end
    call mapExpAll e, o, skelStem('CCO2')
    call caGlbChg o, glbChg
    return
endProcedure caDD1


caGlbChg: procedure expose m.
parse arg o, gCh
    if gCh == '' then
        return
    upper gCh
    if symbol('m.glbChg.gCh.0') \== 'VAR' then do
        glblDsn = m.libPre".caGlbChg("gCh")"
        if sysDsn("'"glblDsn"'") \== 'OK' then
            call err 'mask' gCh':' glblDsn sysDsn("'"glblDsn"'")
        call readDsn glblDsn, 'M.GLBCHG.'gCh'.'
        end
    call mAddSt o, 'GLBCHG.'gCh
    return
endProcedure caGlblChg

/*--- add explode options depending on object type -------------------*/
caEx: procedure expose m.
parse arg o, oLine, ty
    call mAdd o, '' oLine
    call caE1 o, ty, 'e TABLESPACE        db'
    call caE1 o, ty, 'e TABLE             db ts'
    call caE1 o, ty, 'e INDEX             db ts t'
    call caE1 o, ty, 'e VIEW              db ts t v'
    call caE1 o, ty, 'e SYNONYM           db ts t v'
    call caE1 o, ty, 'e TRIGGER           db ts t v'
    call caE1 o, ty, 'e MQTB_T            db ts t v'
    call caE1 o, ty, 'e MQTB_I            db ts t v'
    call caE1 o, ty, 'e MQTB_V            db ts t v'
    call caE1 o, ty, 'e MQTB_S            db ts t v'
    call caE1 o, ty, 'e MQVW_VW           db ts t v'
    call caE1 o, ty, 'e MQVW_I            db ts t v'
    call caE1 o, ty, 'e MQVW_V            db ts t v'
    call caE1 o, ty, 'e MQVW_S            db ts t v'
    call caE1 o, ty, 'i MQVW_VW                     i'
    return
endProcedure caEx
caE1: procedure expose m.
parse arg o, ty, v1 v2 types
    if v1 == 'e' then
        e = 'EXPLODE'
    else if v1 == 'i' then
        e = 'IMPLODE'
    else
        call err 'bad explode' v1 'in caE1('o',' ty',' v1 v2 types')'
    if wordPos(ty, types) > 0 then
        call mAdd o, ' 'left(e, 11) v2
    return
endProcedure caE1
/**** bmc ************************************************************/
/*--- src und trg profile erstellen ----------------------------------*/
bmcVars: procedure expose m.
    m.e.profSrc = m.e.auftrag'_SRC'
    m.e.profTrg = m.e.auftrag'_TRG'
    m.e.profOwn = 'DBXAUFTR'
    return
endProcedure bmcVars

bmcVarsProf: procedure expose m.
parse arg isImport
    m.e.profChg = bmcMask2Prof(m.e.comMask)
    if isImport then
        m.e.profImp = bmcMask2Prof(m.e.impMask)
    return
endProcedure bmcVarsProf

bmcMask2Prof: procedure expose m.
parse arg mask
    m2 = translate(mapExp(e, mask))
    return word(translate(m2, '   ', '.()'), 2)'.'dsnGetMbr(m2)
endProdecure bmcMask2Prof

/*--- src und trg profile erstellen ----------------------------------*/
bmcSrcTrg: procedure expose m.
parse arg oldSrc prof
    if symbol('m.mask.hier') \== 'VAR' then
        call maskHierarchy
    if m.scopeSrc.rz \== m.sysRz | m.scopeTrg.rz \== m.sysRz then
        call err 'bmc compare on other rz not implemented'
    if m.scopeSrc.subsys \== m.scopeTrg.subsys then
        call err 'bmc compare on different subsystems not implemented'
    call configureSubsys m.scopeSrc.rz, m.scopeSrc.subsys
    call bmcProfile m.e.profOwn, m.e.profSrc, 'SCOPESRC'
    if m.optAuto then
        call maskScope m.e.comMask, 'SCOPESRC', 'SCOPETRG'
    call bmcProfile m.e.profOwn, m.e.profTrg, 'SCOPETRG'
    return
endProcedure bmcSrcTrg

bmcProfile: procedure expose m.
parse arg ow, prof, scp
    call sqlOConnect m.scp.subSys
    call sqlExec "insert into bmcacma1.CM_BLPROFILE" ,
                    "(BLPOWNER, blpName, type, template)" ,
         "values('"ow"', '"prof"', 'C', '"prof"####')", -803
    call sqlExec "delete from bmcacma1.CM_SCOPE" ,
                   "where scOwner = '"ow"' and scName = '"prof"'", 100
    do sx=1 to m.scp.0
        sn = scp'.'sx
        if m.sn.type = 'DB' then do
            q1 = m.sn.name
            q2 = ''
            end
        else do
            q1 = m.sn.qual
            q2 = m.sn.name
            end
        call sqlExec "insert into bmcacma1.CM_SCOPE" ,
          "(SCOWNER, SCName, Type, ACTION,OBJECT,NAME_PART1,NAME_PART2",
          ",MIGDT, MIGTS, MIGTB, MIGCK, MIGFK, MIGIX, MIGVW, MIGAU",
          ",MIGSY, MIGAL, MIGRO, MIGTR, MIGUC, MIGAX",
         ")values('"ow"', '"prof"', 'B', 'I'" ,
          ", '"m.sn.type"', '"q1"', '"q2"'" ,
          ",'N'  , 'Y',   'Y',  'Y',    'Y',   'Y',   'Y',  'N'",
          ",'Y'  , 'Y',   '',   'Y',    'Y',   'Y')"
        end
     call sqlCommit
     return
endProcedure bmcProfile
/* copy match begin ***************************************************/
/************************************* begin     copy      match ******/
/*--- wildCard matching with the following wildchars:
          * 0-n chars
          ? 1 char
      fill matched expressions instem st if st is non empty
      return 1 if mask matches wert ----------------------------------*/
match: procedure expose m.
parse arg wert, mask, st
    if st == '' then
        return matchRO(wert, mask)
    m.st.0 = -9
    return matchSt(wert, mask, st, 0)
endProcedure match

/*--- return the fixed prefix of maskt -------------------------------*/
matchPref: procedure
arg mask, suff
    ix = verify(mask, '*?', 'm')
    if ix = 0 then
        return mask
    else
        return left(mask, ix-1)suff
endProcedure matchPref

/*--- return true if mask matches wert -------------------------------*/
matchRO: procedure
arg wert, mask
    ix = verify(mask, '*?', 'm')
    if ix < 1 then return (mask == wert)
    if length(wert) < ix-1 then return 0
    if left(mask, ix-1) \== left(wert, ix-1) then return 0
    if substr(mask, ix, 1) == '?' then do
        if length(wert) < ix then return 0
        return matchRO(substr(wert, ix+1), substr(mask, ix+1))
        end
    mask = substr(mask, ix+1)                /* * 0 - n Chars */
    do ex = 1+length(wert) to ix by -1
        if matchRO(substr(wert, ex), mask) then return 1
        end
    return 0
endProcedure matchRO

/*--- wildCard matching: fill matched expressions instem st
      return 1 if mask matches wert ----------------------------------*/
matchSt: procedure expose m.
parse arg wert, mask, st, sx
    ix = verify(mask, '*?', 'm')
    if ix < 1 then do
        if mask \== wert then
            return 0
        m.st.0 = sx
        return 1
        end
    if \ abbrev(wert, left(mask, ix-1)) then
        return 0
    reMa = substr(mask, ix+1)
    sx = sx + 1
    if substr(mask, ix, 1) == '?' then do /* ? 1 Character */
        if length(wert) < ix then
            return 0
        m.st.sx = substr(wert, ix, 1)
        return matchSt(substr(wert, ix+1), reMa, st, sx)
        end
    do lx = 1+length(wert) to ix by -1 /* greedy: from all to empty */
        if matchSt(substr(wert, lx), reMa, st, sx) then do
            m.st.sx = substr(wert, ix, lx-ix)
            return 1
            end
        end
    return 0
endProcedure matchSt

matchTrans: procedure expose m.
parse arg mask, st
    r = ''
    ox = 1
    sx = 0
    ix = verify(mask, '*?', 'm')
    do sx=1 to m.st.0 while ix > 0
        if sx > m.st.0 then
            call err 'matchTrans('mask',' st') has only' ,
                                     m.st.0 'variables'
        r = r || substr(mask, ox, ix-ox)m.st.sx
        ox = ix+1
        ix = verify(mask, '*?', 'm', ox)
        end
    if ix > 0 then
        call err 'matchTrans('mask',' st') has only' ,
                                     m.st.0 'variables'
    return r || substr(mask, ox)
endProcedure matchTrans
/* copy match end *****************************************************/
/* copy csm begin ******************************************************
    interface to csm,
        it is integrate with adrTso, eg. dsnAlloc , 'RZ3/..' uses csm
***********************************************************************/
adrCsm:
    return adrTso('csmExec' arg(1), arg(2))
endProcedure adrCsm

csmCopy: procedure expose m.
parse arg csnFr, csnTo, ggRet
    if dsnGetMbr(csnTo) \= '' ,
         & dsnGetMbr(csnFr) <> dsnGetMbr(csnTo) then
        call err 'member rename' csnFr 'to' csnTo
    parse value csmSysDsn(csnFr) with sysFr '/' dsnFr
    parse value csmSysDsn(csnTo) with sysTo '/' dsnTo
    if sysFr = '*' & sysTo <> '*' then do
        pdsTo = dsnSetMbr(dsnTo)
        al = "SYSTEM("sysTo") DDNAME(COPYTo)",
             "DATASET('"pdsTo"') DISP(SHR)"
        alRes = dsnAlloc(systo'/'pdsTo, ,'COPYTO', '*')
        if datatype(alRes, 'n') then do
                   /* wir müssen es selbst allozieren csmxUtil
                      vergisst management class ||||| */
            say 'could not allocate' al
            say 'trying to create'
            rc = listDsi("'"dsnSetMbr(dsnFr)"' SMSINFO")
            if rc = 0 then
                mv = ''
            else if rc = 4 & sysReason = 19 then do
                mv = 'UNITCNT(30)'
                say 'multi volume' mv
                end
            else if rc \= 0 then
                call err 'listDsi rc' rc 'reason' sysReason,
                                     sysMsgLvl1 sysMsgLvl2
            al = left(al, length(al)-4)'CAT)'
            if right(sysDsSms, 7) == 'LIBRARY' ,
                | abbrev(sysDsSms, 'PDS') then
                 al = al 'DSNTYPE(LIBRARY)'
            if sysUnits = 'TRACK' then
                sysUnits = 'TRACKS'
            al = al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
                "RECFM("sysREcFM") LRECL("SYSLRECL")",
                "blksize("sysBLkSIZE")",
                "SPACE("sysPrimary"," sysSeconds")" sysUnits mv
            call adrCsm "allocate" al
            end
        call adrTso 'free dd(copyTo)'
        end
    c = "'COPY" sysFr"/''"dsnFr"'' TO" ,
                        sysTo"/''"dsnSetMbr(dsnTo)"'' REPLACE'"
    return adrTso("exec 'CSM.RZ1.P0.EXEC(CSRXUTIL)'" c , ggRet)
    return
endProcedure csmCopy

csmAlloc: procedure expose m.
parse arg dsn dd disp rest ':' nn, retRc
    sys = ''
    a2 = ''
    parse value csmSysDsn(dsn) with sys '/' dsn
    if disp = '' then
        disp = 'shr'
    al = "SYSTEM("sys") DDNAME("dd")"
    if dsn <> '' then do
        a2 = "DATASET('"dsnSetMbr(dsn)"')"
        mbr = dsnGetMbr(dsn)
        if mbr <> '' then
            a2 = a2 'MEMBER('mbr')'
        end
    if abbrev(disp, 'SYSOUT(') then
        a2 = a2 disp
    else
        a2 = a2 "DISP("disp")"
    if retRc <> '' | nn = '' then do
        alRc = adrCsm('allocate' al a2 rest, retRc)
        if alRc <> 0 then
            return alRc
        return dd 'call adrTso "free dd('dd')";'
        end
    do retry=0 by 1
        alRc = adrCsm('allocate' al a2 rest, '*')
        if alRc = 0 then
            return dd 'call adrTso "free dd('dd')";'
        if retry > 0 | nn = '' | wordPos(disp, 'OLD SHR') < 1 then
            return err('cmsAlloc rc' alRc 'for' al rest)
        say 'csmAlloc rc' alRc 'for' al a2 rest '...trying to create'
        nn = al 'disp(cat)' dsnCreateAtts(dsn, nn, 1)
        call adrCsm 'allocate' nn
        call adrTso 'free  dd('dd')'
        end
endProcedure csmAlloc

csmSysDsn: procedure expose m.
parse upper arg dsn, withStar
    if pos('/', dsn) < 1 then
        sys = '*'
    else
        parse var dsn sys '/' dsn
    if sys <> '' & sys <> '*' & sys <> sysvar(sysnode) then
        return sys'/'dsn
    else if withStar == 0 then
        return dsn
    else
        return '*/'dsn
endProcedure csmSysDsn
/* copy csm end********************************************************/
/* copy sqlO   begin ***************************************************
    sql interface  mit  o und j Anbindung
***********************************************************************/
sqlOini: procedure expose m.
    if m.sqlO.ini == 1 then
        return
    call sqlIni
    m.sqlO.ini = 1
    m.sqlO.cursors  = left('', 200)
    call jIni
    call classNew 'n SqlResultRdr u JRWO', 'm',
        , "jReset m.m.cursor = arg; m.m.type = arg2;",
        , "jOpen  call sqlResultRdrOpen m, opt",
        , "jClose call sqlClose m.m.cursor",
        , "jReadO return sqlSelReadO(m)"
    call classNew 'n SqlSel u JRWO', 'm',
        , "jReset m.m.src = arg; m.m.type = arg2;",
        , "jOpen  call sqlSelOpen m, opt",
        , "jClose call sqlSelClose m",
        , "jReadO return sqlSelReadO(m)"
    call classNew 'n SqlDRS u SqlSel', 'm',
        , "jReset m.m.loc = arg; m.m.type = arg2;",
        , "jOpen  call sqlDRSOpen m, opt",
        , "jClose call sqlSelClose m",
        , "jReadO return sqlSelReadO(m)"
    call classNew 'n SqlRxConnection u', 'm',
        , "sqlQuery  return sqlRxQuery(cx, src, retOk)",
        , "sqlFetch  return sqlRxFetch(cx, dst, retOk)",
        , "sqlClose  return sqlRxClose(cx, retOk)",
        , "sqlUpdate return sqlRxUpdate(cx, src, retOk)",
        , "sqlCall   call err 'implement sqlRxCall"
    call classNew 'n SqlRxStatement u', 'm',
        , "sqlQuery  return sqlRxQuery(m.cx.cursor, src, retOk)",
        , "sqlFetch  return sqlRxFetch(m.cx.cursor, dst, retOk)",
        , "sqlClose  return sqlRxClose(m.cx.cursor, retOk)",
        , "sqlUpdate return sqlRxUpdate(m.cx.cursor, src, retOk)",
        , "sqlCall   call err 'implement sqlRxCall"
    call classNew 'n SqlCsmConnection u', 'm',
        , "sqlQuery  return sqlCsmQuery(cx, src, retOk)",
        , "sqlFetch  return sqlCsmFetch(cx, dst)",
        , "sqlClose  return 0",
        , "sqlUpdate call err 'implement sqlCsmUpdate'"   ,
        , "sqlCall   call err 'implement sqlCsmCall'"
    call classNew 'n SqlCsmStatement u', 'm',
        , "sqlQuery  return sqlCsmQuery(m.cx.cursor, src, retOk)",
        , "sqlFetch  return sqlCsmFetch(m.cx.cursor, dst)",
        , "sqlClose  return 0",
        , "sqlUpdate call err 'implement sqlCsmUpdate'"   ,
        , "sqlCall   call err 'implement sqlCsmCall'"
    return 0
endProcedure sqlOini
/*--- execute a query from sql, with one resultset -------------------*/
sqlQuery: procedure expose m.
parse arg cx, src, retOk, m.sql.cx.type
    if m.sql.cx.type \== '' then
        m.sql.cx.type = class4Name(m.sql.cx.type)
    if datatype(cx, 'n') then
        interpret objMet(m.sql.connection, 'sqlQuery')
    else
        interpret objMet(cx, 'sqlQuery')
/*--- fetch next row to m.dst.* at end return false ------------------*/
sqlFetch: procedure expose m.
parse arg cx, dst, retOk
    if datatype(cx, 'n') then
        interpret objMet(m.sql.connection, 'sqlFetch')
    else
        interpret objMet(cx, 'sqlFetch')
/*--- close cursor 'c'cx ---------------------------------------------*/
sqlClose: procedure expose m.
parse arg cx, retOk
    if datatype(cx, 'n') then
        interpret objMet(m.sql.connection, 'sqlClose')
    else
        interpret objMet(cx, 'sqlClose')
    return 0
/*-- execute an sql with no resultset, but possibly outParms ---------*/
sqlUpdate: procedure expose m.
parse arg cx, src, retOk
    if cx == '' | datatype(cx, 'n') then
        interpret objMet(m.sql.connection, 'sqlUpdate')
    else
        interpret objMet(cx, 'sqlUpdate')
    return sqlCsmUpdate(cx, src, retOk)
/*-- execute an sql call with outParms and multiple resultSets -------*/
sqlCall: procedure expose m.
parse arg cx, src, retOk
    if cx == '' | datatype(cx, 'n') then
        interpret objMet(m.sql.connection, 'sqlCall')
    else
        interpret objMet(cx, 'sqlCall')
    return sqlCsmUpdate(cx, src, retOk)
/*--- connect to the db2 subsystem sys -----------------------------*/
sqlOConnect: procedure expose m.
parse arg sys, retCon
    call sqlOIni
    return sqlConnect(sys, retCon)
endProcedure sqlOConnect

sqlSel: procedure expose m.
parse arg src, type
     s = oNew('SqlSel', inp2str(src, '-sql'), type)
     call pipeWriteAll s
     return m.s.rowCount
endProcedure sqlSel

sqlStmtsOpt: procedure expose m.
parse arg src, opts
    upper opts
    sub = ''
    o = ''
    ggRet = ''
    do wx=1 to words(opts)
        w = word(opts, wx)
        if abbrev(w, '-SQL') then
            o = o'-sql'substr(w, 5)
        else if w == '-O' | w == 'O' then
            o = o'-o'
        else if w = '*' | datatype(w, 'n') then
            ggRet = ggRet w
        else if length(w) == 4 then
            sub = w
        else
            call err 'bad opt' w 'in opts' opts 'not -sql? -o or subsys'
        end
    call sqlOIni
    if sub == '' then
        call sqlOConnect
    else if sub \== m.sql.connected then
        call sqlConnect sub
    return sqlStmts(src, strip(ggRet), strip(o))
endProcedure sqlStmtsOpt

/*** execute sql's in a stream (separated by ;)
       opt: 'o' ==> write objects, otherwise fmtFTab
            's' ==> spufi formatting (window 72) otherwise linebreak */
sqlStmts: procedure expose m.
parse arg src, ggRet, opt
   dlm = ';'
   isStr = oStrOrObj(src, m.j.in)
   fLen = ''
   if pos('sql', opt) > 0 then
       fLen = word(substr(opt, pos('sql', opt)+3), 1)
   if isStr then do
       m.sqlStmts.rdr = ''
       call sbSrc sqlStmts, ggStr
       end
   else do
       fi = jOpen(o2File(ggObj), '<')
       call jCatSqlReset sqlStmts, , fi, fLen
       end
   do forever
       s1 = jCatSqlNext(sqlStmts, dlm)
       if s1 = '' then
           leave
       w1 = translate(word(s1, 1))
       if w1 == 'TERMINATOR' then do
            dlm = strip(substr(m.s.val, 12))
            if length(dlm) \== 1 then
                call scanErr s, 'bad terminator' dlm 'in' strip(m.s.val)
            iterate
            end
       call out sqlStmt(s1, ggRet, opt)
       end
   if \ isStr then
       call jClose fi
   return 0
endProcedure sqlStmts

sqlStmt: procedure expose m.
parse arg src, retOk, opt
    cx = sqlGetCursor()
    r1 = sqlExecute(cx, src, retOK)
    res = 'sqlCode' r1
    if wordPos(m.sql.cx.fun, 'DELETE INSERT UPDATE') > 0 then
        res = res',' m.sql.cx.updateCount 'rows' ,
              translate(fun, m.mAlfLC, m.mAlfUC)'d'
    else if m.sql.cx.updateCount\=='' & m.sql.cx.updateCount\=0 then
        res = res',' m.sql.cx.updateCount 'rows updated'
    aa = strip(src)
    if m.sql.cx.resultSet \== '' then do
        rdr = sqlResultRdr(cx)
        if pos('o', opt) > 0 then
            call pipeWriteAll rdr
        else
            call fmtFTab sqlStmtFmt, rdr
        res = m.rdr.rowCount 'rows fetched'
        end
    ll = 75 - length(res)
    if length(aa) > ll then
        aa = space(aa, 1)
    if length(aa) > ll then
        aa = left(aa,  ll-3)'...'
    call sqlFreeCursor cx
    return res':' aa
endProceduire sqlStmt

removeSqlStmt: procedure expose m.
parse arg src, ggRet, opt
    bx = verify(src, '( ')
    if bx < 1 then
        return ''
    fun = translate(word(substr(src, bx), 1))
    w2  = translate(word(substr(src, bx), 2))
    res = ''
    if fun == 'SELECT' | fun = 'WITH' then do
        s = oNew('SqlSel', inp2str(src, '%S%+Q\s'))
        if pos('o', opt) > 0 then
            call pipeWriteAll s
        else
            call fmtFTab sqlStmtFmt, s
        res = m.s.rowCount 'rows fetched'
        end
    else if  fun = 'SET' &  abbrev(w2, ':') then do
        ex = pos('=', w2)
        if ex > 2 then
            var = strip(substr(w2, 2, ex-2))
        else
            var = strip(substr(w2, 2))
        if var = '' then
            var = 'varUnbekannt'
        call sqlExec src, ggRet
        res = 'sqlCode' sqlCode var'='value(var)
        end
    else if fun = 'SET' | (fun = 'DECLARE' & w2 = 'GLOBAL') then do
        call sqlExImm src, ggRet
        res = 'sqlCode' sqlCode
        end
    else if fun = 'CALL' then do
        res = sqlStmtCall(src, ggRet, opt)
        end
    else do
        if pos('-', ggRet) < 1 & fun = 'DROP' then
            ggRet = -204 ggRet
        call sqlExec src, ggRet
        res = 'sqlCode' sqlCode
        if wordPos(fun, 'DELETE INSERT UPDATE') > 0 THEN
            res = res',' sqlErrd.3 'rows' ,
                  translate(fun, m.mAlfLC, m.mAlfUC)'d'
        end
    aa = strip(src)
    ll = 75 - length(res)
    if length(aa) > ll then
        aa = space(aa, 1)
    if length(aa) > ll then
        aa = left(aa,  ll-3)'...'
    return res':' aa
endProcedure removeSqlStmt

sqlStmtCall: procedure expose m.
parse arg src, ggRet, opt
    s = scanSrc(scanSqlReset(sqlstmtcall, ,0), src)
    if \ scanSqlId(scanSkip(s)) | m.s.val \== 'CALL' then
        call scanErr s, 'not a call'
    if \ scanSqlQuId(scanSkip(s)) then
        call scanErr s, 'qualified id missing after call'
    loc = ''
    if m.s.val.0 = 1 then
        wh = 'name =' quote(m.s.val.1, "'")
    else if m.s.val.0 = 2 then
        wh = "schema = '"strip(m.s.val.1)"'" ,
             "and name = '"strip(m.s.val.2)"'"
    else if m.s.val.0 = 3 then do
        loc = m.s.val.1
        wh = "schema = '"strip(m.s.val.2)"'" ,
             "and name = '"strip(m.s.val.3)"'"
        end
    else
        call scanErr s, 'storedProcedureName' m.s.val ,
               'has' m.s.val.0 'parts, should have 1, 2 or 3'
    pn = m.s.val
    da = sqlStmtCallDa(sqlStmtCall, loc, wh)
    if \ scanLit(scanSkip(s), '(') then
        call scanErr s, '( expected after call' pn
    varChars = f
    do ax=1
        m.da.ax.varName = ''
        isEmpty = 0
        if scanLit(scanSkip(s), ':') then do
             if \ scanVerify(scanSkip(s), m.mAlfDot) then
                 call scanErr s, 'variable expected after : in call' pn
             m.da.ax.varName = m.s.tok
             if m.da.ax.io == 'i' | m.da.ax.io == 'b' then
                 m.da.ax.sqlData = envGet(m.da.ax.varName)
             end
        else if scanString(s) then
            m.da.ax.sqlData = m.s.val
        else if scanVerify(s, ',):;', 'm') then
            m.da.ax.sqlData = strip(m.s.tok)
        else
            isEmpty = 1
        if scanLit(scanSkip(s), ')') then
            leave
        if \ scanLit(s, ',') then
            call scanErr s, if(isEmpty, 'value, var, ') ,
                         || "',' or ')' expected"
        end
    if ax \= m.da.sqlD then
        if \ (ax=1 & m.da.sqlD = 0 & isEmpty) then
            call scanErr s, 'call with' ax 'parms but' ,
                                pn 'needs' m.da.sqld
    caCo = sqlExec('call' pn 'using descriptor :M.'da, 466)
    call out '--- called' pn', sqlCode' caCo
    do ax=1 to m.da.sqlD
        call Out '  parm' ax m.da.ax.io m.da.ax.parmName,
                 || if(m.da.ax.varName \== '',' $'m.da.ax.varName),
               '=' m.da.ax.sqlData
        if m.da.ax.varName \== '' then
            call envPut m.da.ax.varName, m.da.ax.sqlData
        end
    if caCo = 466 then do
        drop sqlDP
        call sqlExec 'describe procedure :pn into :m.sqlDp'
        if m.sqldp.sqlD < 1 then
             call err 'bad sqldp sqlD='m.sqldp.sqlD 'for sqlCode' caCo
        do dx=1 to m.sqldp.sqlD
            call out '  dynamic result set' dx m.sqldp.dx.sqlName ,
                     'locator='m.sqldp.dx.sqlLocator
            end
        do dx=1 to m.sqldp.sqlD
            drs = 'dynamic result set' dx'='m.sqldp.dx.sqlName 'of' pn
            call out '--- begin of' drs
            rdr = sqlDRS(m.sqldp.dx.sqlLocator)
            if pos('o', opt) > 0 then
                call pipeWriteAll rdr
            else
                call fmtFTab sqlStmtFmt, rdr
            call out '---' m.rdr.rowCount 'rows fetched from' drs
            end
        end
    return 'sqlCode' caCo
endProcedure sqlStmtCall

sqlStmtCallDa: procedure expose m.
parse arg da, loc, wh
    cr = if(loc=='',,loc'.')'sysIbm'
    sql = "select 'SCHEMA=''' || strip(schema) || ''''",
             "|| ' and name='''   || strip(name  ) || ''''",
             "|| ' and specificName=''' || strip(specificName) || ''''",
             "|| ' and routineType =''' || strip(routineType ) || ''''",
             "|| ' and VERSION     =''' || strip(VERSION     ) || ''''",
          "from" cr".SysRoutines ",
          "where" wh "and active = 'Y'"
    if sqlpreAllCl(49, sql, rou, ':m.rou') <> 1 then
        call err m.rou.0 'routines found for' wh
    rdr = jOpen(sqlRdr('select * from' cr'.sysParms where' m.rou,
         'order by ordinal'), '<')
    do ix=1 while assNN('A', jReadO(rdr))
         if m.a.ordinal <>  ix then
             call err 'ix' ix 'mismatch ordinal' m.a.ordinal
         ty = m.a.dataTypeId
         m.da.ix.sqlType = ty
         m.da.ix.sqlLen  = m.a.length
         m.da.ix.sqlLen.sqlPrecision = m.a.length
         m.da.ix.sqlLen.sqlScale     = m.a.scale
         if wordPos(ty, 384 385) > 0 then        /* date */
             m.da.ix.sqlLen  = 10
         else if wordPos(ty, 388 389) > 0 then   /* time */
             m.da.ix.sqlLen  = 8
         else if wordPos(ty, 392 393) > 0 then   /* timestamp */
             m.da.ix.sqlLen  = 26
         m.da.ix.sqlData = ''
         m.da.ix.parmName= m.a.parmName
         m.da.ix.io      = translate(m.a.rowType, 'iob', 'POB')
         m.da.ix.sqlInd  = 1
         end
    m.da.sqlD = ix - 1
    return da
endProcedure sqlStmtCallDa

sqlResultRdr: procedure expose m.
parse arg cx, type
     return oNew('SqlResultRdr', cx, type)
endProcedure sqlRdr

sqlRdr: procedure expose m.
parse arg src, type
     return oNew('SqlSel', inp2str(src, '%S%+Q\s'), type)
endProcedure sqlRdr

sqlResultRdrOpen: procedure expose m.
parse arg m, opt
    if opt\== m.j.cRead then
        call err 'opt not' m.j.cRead 'sqlResultRdrOpen('m',' opt')'
    m.m.jReading = 1
    m.m.rowCount = 0
    return m
endProcedure sqlResultRdrOpen

/*--- prepare and open cursor
      generate type and fetchList ------------------------------------*/
sqlSelOpen: procedure expose m.
parse arg m, opt
    m.m.cursor = sqlGetCursor()
    call sqlQuery m.m.cursor, m.m.src, ,m.m.type  /* ????? */
    return sqlResultRdrOpen(m, opt)
endProcedure sqlOpen

/*--- dynamic result sets --------------------------------------------*/
sqlDRS: procedure expose m.
parse arg loc, type
     return oNew('SqlDRS', loc, type)
endProcedure sqlDRS

sqlDRSOpen: procedure expose m.
parse arg m, opt
    if opt\== m.j.cRead then
        call err 'opt not' m.j.cRead 'sqlDRSOpen('m',' opt')'
    crs = sqlGetCursor('a')
    crN = 'C'crs
    m.m.cursor = crs
    call sqlexec 'allocate C'crs 'cursor for result set :m.m.loc'
    call sqlExec('describe cursor :crN into :M.SQL.'crs'.D')
    m.m.jReading = 1
    m.m.rowCount = 0
    return m
endProcedure sqlDRSOpen

/*--- return a free cursor -------------------------------------------*/
sqlGetCursor: procedure expose m.
parse arg rng
    if rng == '' then
        return sqlGetCursorRng(rng, 10, 49)
    else if rng == 'h' then
        return sqlGetCursorRng(rng, 60, 99)
    else if rng == 'a' then
        return sqlGetCursorRng(rng, 110, 199)
    else
        call err 'bad cursor range' rng
endProcedure sqlGetCursor

sqlGetCursorRng: procedure expose m.
parse arg rng, fr, to
    cx = pos(' ', m.sqlO.cursors, fr)
    if cx < fr & cx > to then
        call err "no more '"rng"' cursors between" fr "and" to,
                 ":"m.sqlO.cursors
    m.sqlO.cursors = overlay('u', m.sqlO.cursors, cx)
    return cx
endProcedure sqlGetCursorRNG

/*--- mark a cursor as closed ----------------------------------------*/
sqlFreeCursor: procedure expose m.
parse arg cx
    if substr(m.sqlo.cursors, cx, 1) \== 'u' then
         call err 'sqlFreeCursor('cx') not in use :'m.sqlo.cursors
    m.sqlO.cursors = overlay(' ', m.sqlO.cursors, cx)
    return
endProcedure sqlFreeCursor
/*--- create the type, fetch vars etc. from the sqlDA ---------------*/
sqlFetchClass: procedure expose m.
parse arg cx
    if m.sql.cx.type = '' then do
        ff = mCat('SQL.'cx'.COL', '%+Q v, f ')
        m.sql.cx.type = classNew('n* SQL u f' ff 'v')
        end
    return m.sql.cx.type
endProcedure sqlFetchClass

/*--- fetch cursor for this sqlSel -----------------------------------*/
sqlSelReadO: procedure expose m.
parse arg m
    cx = m.m.cursor
    v = mNew(sqlFetchClass(cx))
    if \ sqlFetch(cx, v) then
        return ''
    m.m.rowCount = m.m.rowCount + 1
    return v
endProcedure sqlSelReadO

/*--- close sql Cursor -----------------------------------------------*/
sqlSelClose: procedure expose m.
parse arg m, v
    call sqlClose m.m.cursor
    call sqlFreeCursor m.m.cursor
    m.m.cursor = ''
    return m
endProcedure sqlSelClose
/*--- generate the format ff for a sql cx as specified in sp
          use the information from the sqlDa -------------------------*/
deleteSqlGenFmt: procedure expose m.
parse arg ff, cx, sp
    if abbrev(sp, '=') then
        return substr(sp, 2)
    if sp = '' then
        sp = '*st'
    m.ff.0 = m.sql.cx.d.sqlD
    m.ff.flds = oFlds(sqlType(cx))
    if abbrev(sp, '*') then do
        do ix=1 to m.ff.0
            m.ff.ix = substr(sp, 2)
            end
        return ff
        end
    if abbrev(fmts, '=') then
        m.Sql.cx.FMT = substr(fmts, 2)
    defs = 'ir7 fr9 sl12 Tl26' sp
    do wx = 1 to words(defs)
        parse value word(defs, wx) with ty 2 fo
        select
            when ty = 'd' then      t.384 = fo
            when ty = 'f' then      t.480 = fo'/f'
            when ty = 'i' then      t.496 = fo'/i'
            when ty = 'n' then      t.484 = fo'/n'
            when ty = 's' then      t.448 = fo
            when ty = 't' then      t.388 = fo
            when ty = 'T' then      t.392 = fo
            otherwise          call err 'bad type' ty 'for format' fo
            end
        end
    if symbol('t.496') == 'VAR' then
        t.500 = t.496
    if symbol('t.448') == 'VAR' then do
        t.452 = t.448
        t.456 = t.448
        t.464 = t.448
        end
    do wx = 1 to m.ff.0
        ty = m.sql.cx.d.wx.sqlType
        le = m.sql.cx.d.wx.sqlLen
        withNulls = ty // 2
        ty = ty - withNulls
        if symbol('t.ty') <> 'VAR' then
            call err 'sqlType' ty 'not supported'
        parse var t.ty fo 2 fl '/' op
        if op = 'i' then
             if le = 2 then le = 6
             else           le = 12
        else if op <> '' then
            call err 'length for sqlType' ty 'op' op 'not implemented'
        if fl = '=' then
            fl = le
        else if abbrev(fl, '<') then
            fl = min(le, substr(fl, 2))
        m.ff.wx = fo || fl
        end
    return ff
endProcedure sqlGenFmt
/* copy sqlO   end   **************************************************/
/* copy sqlCsm begin **************************************************/
/*--- send an sql to csm an handle sqlCode ---------------------------*/
sqlCsmExe:
parse arg cx, ggSqlStmt, ggRetOk
    sql_HOST =  m.sql.conHost
    SQL_DB2SSID = m.sql.conSSID
    sql_query = ggSqlStmt
    address tso "CSMAPPC START PGM(CSMASQL)"
    if \ (rc = 0 |  rc = 4) then
        call err 'csmappc rc' rc
    if sqlCode = 0 then
        return 0
    else if pos('*', ggRetOk) > 0 | wordPos(sqlCode, ggRetOk) > 0 ,
            then do
        if sqlCode < 0 & pos('say', ggRetOk) > 0 then
            call errSay sqlmsg(sqlCA2Rx(sqlCa))
        return sqlCode
        end
    else if sqlCode < 0 then
        call err sqlmsg(sqlCA2rx(sqlCa))
    else if pos('w', ggRetOk) < 1 then
        if sqlCode = 100 then
            call errSay 'sqlCode +100 row not found\nstmt =' ggSqlStmt
        else
            call errSay sqlMsg(sqlCA2rx(sqlCa)), ,'w'
    return sqlCode
endProcedure sqlCsmExe

/*--- execute a query from sql, with one resultset -------------------*/
sqlCsmQuery: procedure expose m.
parse arg cx, sqlSrc, retOk, src
    res = sqlCsmExe(cx, sqlSrc, 100 retOk)
    if res < 0 then
        return res
    f = m.sql.cx.type
    if src == '' then
        src = 'SQL.'cx'.DATA'
    m.sql.cx.data = src
    if f \== '' then do
        f = f'.FLDS'
        if m.f.0 < sqlD then
            call err 'not enough fields in type'
        end
    do kx=1 to sqlD
        rxNa = SQLDA_REXXNAME.kx
        cn = sqlVarName(f, kx, sqlDa_name.kx)
        m.sql.cx.col.kx = cn
        do rx=1 to sqlRow#
            if substr(sqlIndicator.rx, kx ,1) == 'ff'x then
                m.src.rx.cn = m.sqlNull
            else
                m.src.rx.cn = value(rxNa'.'rx)
            end
        end
    m.src.0 = sqlRow#
    m.sql.cx.col.0 = sqlD
    m.sql.cx.daIx = 0
    return 0
endProcedure sqlCsmQuery

sqlCsmFetch: procedure expose m.
parse arg cx, dst
    src = m.sql.cx.data
    rx = m.sql.cx.daIx + 1
    if rx > m.sql.cx.data.0 then
        return 0
    m.sql.cx.daIx = rx
    do kx = 1 to m.sql.cx.col.0
        c = m.sql.cx.col.kx
        m.dst.c = m.src.rx.c
        end
    return 1
endProcedure sqlCsmFetch
/* copy sqlCsm end   **************************************************/
/* copy sql    begin ***************************************************
    sql interface
***********************************************************************/
/*--- initialize sqlRx (belongs to sqlQ, but currently only one|) ----*/
sqlIni: procedure expose m.
    if m.sql.ini == 1 then
        return
    m.sqlNull = '---'
    m.sqlInd = 'sqlInd'
    m.sqlRetOK.0 = 0
    m.sqlCAMsg = 0
    m.sqlSuMsg = 2
    call sqlPushRetOk
    m.sql.ini = 1
    m.sql.conType = ''
    return 0
endProcedure sqlIni

/*--- connect and/or disconnect to DB2 -------------------------------*/
sqlConnect: procedure expose m.
parse upper arg sys, retOk
    if sys \== '' then
        nop
    else if sysvar(sysnode) == 'RZ1' then
        sys = 'DBAF'
    else
        call err 'no default subsys for' sysvar(sysnode)
    call sqlOIni
    hst = ''
    if pos('/', sys) > 0 then do
        parse value space(sys, 0) with hst '/' sys
        cTy = 'Csm'
        end
    else do
        cTy = 'Rx'
        end
    if m.sql.conType == cTy & m.sqlHost==hst & m.sqlConSSID == sys then
        return 0
    if m.sql.conType \== '' then
        call sqlDisconnect
    res = 0
    if cTy = 'Rx' then
        res = sqlRxConnect(sys, retOk)
    if res < 0 then
        return res
    m.sql.conType = cTy
    m.sql.conhost = hst
    m.sql.conSSID = sys
    m.sql.connection = oNew('Sql'cTy'Connection')
    return res
endProcedure sqlConnect

sqlDisconnect: procedure expose m.
parse arg retOk
    if m.sql.conType == 'Rx' then
        call sqlRxDisconnect
    m.sql.conType = ''
    m.sql.conhost = ''
    m.sql.conSSID = ''
    return 0
endProcedure sqlDisonnect

/*--- execute a query from sql, with one resultset -------------------*/
sqlRxQuery: procedure expose m.
parse arg cx, src, retOk
     m.sql.cx.updateCount = ''
     m.sql.cx.resultSet   = ''
     m.sql.cx.needDesc    = 1
     res = sqlPrepare(cx, src, retOk, 1)
     if res < 0 then
         return res
     res = sqlExec('declare c'cx 'cursor for s'cx, retOk)
     if res < 0 then
         return res
     res = sqlExec('open c'cx, retOk)
     if res < 0 then
         return res
     call sqlRxFetchVars cx
     m.sql.cx.updateCount = sqlErrd.3
     m.sql.cx.resultSet = cx
     return res
endProcedure sqlRxQuery

/*--- fetch next row to m.dst.* at end return false ------------------*/
sqlRxFetch: procedure expose m.
parse arg cx, dst, retOk
    if retOk == '' then
        retOk = 100 m.sqlRetOk
    fetCode = sqlExec('fetch c'cx 'into' sqlRxFetchVars(cx), retOk)
    if fetCode == 100 then
        return 0
    if fetCode < 0 then
        return fetCode
    call sqlSetNull cx, dst
    return 1
endProcedure sqlRxFetch

/*--- close cursor 'c'cx ---------------------------------------------*/
sqlRxClose: procedure expose m.
parse arg cx, retOk
     return sqlExec('close c'cx, retOk)
endProcedure sqlRxClose

/*-- execute an sql with no resultset, but possibly outParms ---------*/
sqlRxUpdate: procedure expose m.
parse arg cx, src, retOk
    m.sql.cx.updateCount = ''
    m.sql.cx.resultSet   = ''
    bx = verify(src, '( ')
    if bx > 0 then
        fun = translate(word(substr(src, bx), 1))
    if  fun = 'SET' then do
        w2 = translate(word(substr(src, bx), 2))
        if \ abbrev(w2, ':') then
            return sqlExImm(src, ggRet)
        trace ?r
        ex = pos('=', w2)
        if ex = 0 then
            ex = length(w2)+1
        var = strip(substr(w2, 2, ex-2))
        if var = '' then
            call err 'bad hostVar in' src
        m.sql.outVar = var
        src2 = 'set :M.sql.out.'var substr(w, ex) subword(src, 3)
        return sqlExec(src2, ggRet)
        end
    if fun == 'DECLARE'  then do
        if 'GLOBAL' == translate(word(substr(src, bx), 2)) then
            return sqlExImm(src, ggRet)
        end
    res = sqlExec(src, ggRet)
    if wordPos(fun, 'DELETE INSERT UPDATE') > 0 then
        m.sql.cx.updateCount = sqlErrd.3
    return res
endProcedure sqlRxUpdate

/*-- execute a query, update or call ---------------------------------*/
sqlExecute: procedure expose m.
parse arg cx, src, retOk
    src = inp2Str(src, '-sql')
    f = translate(word(substr(src, max(verify(src, '( '), 1)), 1))
    m.sql.cx.fun = f
    if f == 'SELECT' | fun == 'WITH' then
        return sqlQuery(cx, src, retOk)
    else if f == 'CALL' then
        call err 'implement sql call for:' src
    else
        return sqlUpdate(cx, src, retOk)
endProcedure sqlExecute

/*-- execute a query, copy result to stem ----------------------------*/
sql2St: procedure expose m.
parse arg src, dst, retOk, type
    cx = sqlGetCursor()
    res = sqlQuery(cx, src, retOk, type)
    if res >= 0 then do
        do sx=1 while sqlFetch(cx, dst'.'sx)
           end
        res = sx-1
        end
    m.dst.0 = res
    call sqlClose cx
    call sqlFreeCursor cx
    return res
endProcedure sql2St

/*-- execute a query and return value of the first column
           if > 1 row fail, if 0 rows return arg(3) or fail ----------*/
sql2One: procedure expose m.
parse arg src, dst
    cx = sqlGetCursor()
    call sqlQuery cx, src
    if \ sqlFetch(cx, dst) then
        if arg() > 2 then
            return arg(3)
        else
            call err 'no row returned for:' src
    if sqlFetch(cx, dst.2) then
        call err '2 or more rows for' src
    c1 = m.sql.cx.col.1
    res = m.dst.c1
    call sqlClose cx
    call sqlFreeCursor cx
    return res
endProcedure sql2One

/*--- prepare statement 's'cx from sql src into descriptor desc ------*/
sqlPrepare: procedure expose m.
parse arg cx, src, ggRetOk, descOut
     s = ''
     src = inp2str(src, '%+Q\s')
     m.sql.cx.d.sqlD = 'noSqlDA'
     m.sql.cx.i.sqlD = 'noDescInp'
     m.sql.cx.fetchVars = ''
     m.sql.cx.col.0 = ''
     m.sql.cx.into = ''
     if descOut == 1 then
         s = 'into :M.SQL.'cx'.D'
     return sqlExec('prepare s'cx s 'from :src', ggRetOk)
endProcedure sqlPrepare

/*--- open cursor 'c'cx using arguments arg(2), arg(3)... ------------*/
sqlOpen: procedure expose m.
parse arg cx
    if arg() <=  1 then
        return sqlExec('open c'cx)
    call sqlDescribeInput cx
    do ix=1 to arg()-1
        call sqlDASet cx , 'I', ix, arg(ix+1)
        end
    return sqlExec('open c'cx 'using descriptor :M.SQL.'cx'.I')
endProcedure sqlOpen

/*--- describe output (if not already done)
         and return size of sqlDa ------------------------------------*/
sqlDescribeOutput: procedure expose m.
parse arg cx, force
    if force == 1 | \ datatype(m.sql.cx.d.sqlD, 'n') then
         call sqlExec 'describe s'cx 'into :M.SQL.'cx'.D', 0
    return m.sql.cx.d.sqlD
endProcedure sqlDescribeOutput

/*--- describe input (if not already done)
         and return size of input sqlDA ------------------------------*/
sqlDescribeInput: procedure expose m.
parse arg cx, force
    if force == 1 | \ datatype(m.sql.cx.i.sqlD, 'n') then
         call sqlExec 'describe input s'cx 'into :M.SQL.'cx'.I'
    return m.sql.cx.i.sqlD
endProcedure sqlDescribeInput

/*--- put sqlNull in all vars where indicator says so ---------------*/
sqlSetNull: procedure expose m.
    parse arg cx, dst
    do nx=1 to m.sql.cx.sqlNull.0
        col = m.sql.cx.sqlNull.nx
        if m.dst.col.sqlInd < 0 then
            m.dst.col = m.sqlNull
        end
    return
endProcedure sqlSetNull

/*--- use describe output to generate column names,
                fetchVariables and sqlNull names ---------------------*/
sqlRxFetchVars: procedure expose m.
parse arg cx
    if m.sql.cx.fetchVars \== '' then
        return m.sql.cx.fetchVars
    call sqlDescribeOutput cx
    f = m.sql.cx.type
    if f \== '' then do
        f = f'.FLDS'
        if m.f.0 < m.sql.cx.d.sqlD then
            call err 'not enough column names'
        end
    m.sql.cx.col.0 = m.sql.cx.d.sqlD
    nx = 0
    vars = ''
    do kx=1 to m.sql.cx.d.sqlD
        cn = sqlVarName(f, kx, m.sql.cx.d.kx.sqlName)
        m.sql.cx.col.kx = cn
        vars = vars', :m.dst.'cn
        if m.sql.cx.d.kx.sqlType // 2 = 1 then do
            vars = vars' :m.dst.'cn'.sqlInd'
            nx = nx + 1
            m.sql.cx.sqlNull.nx = cn
            end
        end
    m.sql.cx.sqlNull.0 = nx
    m.sql.cx.fetchVars = substr(vars, 3)
    return m.sql.cx.fetchVars
endProcedure sqlRxFetchVars

sqlVarName: procedure expose m. sqlVarName.
parse arg f, kx, sNa
    if f == '' then do
        cn = translate(word(sNa, 1))
        if cn == '' | symbol('sqlVarName.cn') == 'VAR' then
                cn = 'COL'kx
        sqlVarName.cn = 1
        return cn
        end
    else do
        if m.f.kx == '' then
            call err 'implement empty varName'
        return substr(m.f.kx, 2)
        end
endProcedure sqlVarName
/*--- set one value in a DA, handle nulls ----------------------------*/
sqlDASet: procedure expose m.
parse arg cx, da, ix, val
    m.sql.cx.da.ix.sqlData = val
    m.sql.cx.da.ix.sqlInd = - (val == m.sqlNull)
    /* data types schienen einmal nicht zu funktionieren .......
    if wordPos(m.da.ix.sqlType, '384 385 388 389 392 393') > 0 then
        m.da.ix.sqlType = 448 + (m.da.ix.sqlType // 2) */
    return
endProcedure sqlDASet

sqlExImm:
parse arg ggSrc, ggRetOk
     return sqlExec('execute immediate :ggSrc', ggRetOk)
endProcedure sqlExImm

sqlCommit: procedure expose m.
parse arg src
     return sqlExec('commit')
endProcedure sqlCommit

/*--- execute sql thru the dsnRexx interface -------------------------*/
sqlExec: /* no procedure, to keep variables sql... */
    parse arg ggSqlStmt, ggRetOk
    address dsnRexx 'execSql' ggSqlStmt
    /* say 'sqlCode' sqlCode 'rc' rc 'for' ggSqlStmt ggNo */
sqlHandleRCSqlCode:
    if rc = 0 then
        return 0
    if ggRetOk = '' then
        ggRetOk = m.sqlRetOk
    if wordPos(rc, '1 -1') < 0 then
        call err 'dsnRexx rc' rc sqlmsg()
    else if pos('*', ggRetOk) > 0 | wordPos(sqlCode, ggRetOk) > 0 ,
            then do
        if sqlCode < 0 & pos('say', ggRetOk) > 0 then
            say 'sqlError' sqlmsg()
        return sqlCode
        end
    else if rc < 0 then
        call err sqlmsg()
/*???lse if sqlCode <> 0 | (pos('w',ggRetOk)<1 & sqlWarn.0^==' ') then*/
    else if (sqlCode <> 0 | sqlWarn.0^==' ') & pos('w',ggRetOk)<1 then
        call errSay sqlMsg(), ,'w'
    return sqlCode
endSubroutine sqlExec

/*--- connect to the db2 subsystem sys -----------------------------*/
sqlRxConnect: procedure expose m.
parse upper arg sys, ggRetOk
    call sqlIni
    address tso "SUBCOM DSNREXX"
    if rc <> 0 then do
       sRc = RXSUBCOM('ADD','DSNREXX','DSNREXX') /* ADD HOST CMD ENV  */
       if sRc <> 0 then
           call err 'rc' sRc 'from RXSUBCOM(ADD, DSNREXX, DSNREXX)'
       end
    if sys = '-' then
        return 0
    ggSqlStmt =  'connect' sys
    address dsnRexx ggSqlStmt
    return sqlHandleRcSqlCode()
endProcedure sqlRxConnect

/*--- diconnect from db2 ---------------------------------------------*/
sqlRxDisconnect: procedure expose m.
parse arg retOk
    ggSqlStmt =  'disconnect'
    address dsnRexx ggSqlStmt
    return sqlHandleRcSqlCode()
endProcedure sqlDisconnect

/*--- send a command to db2 through the TSO dsn processor ------------*/
sqlDsn: procedure expose m.
parse arg st, sys, cmd, rcOk
    x = outtrap('M.'st'.')
    push 'END'
    push cmd
    address tso 'DSN SYSTEM('sys')'
    rr = rc
    x = outtrap(off)
    if rr = 0 | rcOk = '*' | wordPos(rr, rcOk) > 0 then
        return rr
    fl = max(1, m.st.0 - 10)
    em = 'rc' rr 'for DSN SYSTEM('sys') cmd' cmd,
          '\nOuputlines' fl '-' m.st.0':'
    do lx=fl to m.st.0
        em = em '\n' strip(m.st.lx, 't')
        end
    call err em
endProcedure sqlDsn
/*--- push and pop currently accepted sqlCodes -----------------------*/
sqlPushRetOk: procedure expose m.
parse arg rr
    nx = m.sqlRetOk.0 + 1
    m.sqlRetOk.0 = nx
    m.sqlRetOk.nx = rr
    m.sqlRetOk    = rr
    return
endProcedure sqlPushRetOk

sqlPopRetOk: procedure expose m.
    nx = m.sqlRetOk.0 - 1
    if nx < 1 then
        call err 'sqlPopRetOk with .0' m.sqlRetOk.0
    m.sqlRetOk    = m.sqlRetOk.nx
    m.sqlRetOk.0 = nx
    return
endProcedure sqlPopRetOk

/*--- issue an sql error message -------------------------------------*/
sqlMsg: /* no procedure, to keep variables sql... */
    if \ dataType(sqlCode, 'n') then do
        ggRes = 'sqlCode' sqlCode 'not numeric\n'sqlCaMsg()
        end
    else do
        ggRes = sqlDsntiar(sqlRx2CA())
        ggWa = sqlMsgWarn()
        if ggWa \= '' then
            ggRes = ggRes'\nwarnings' ggWa
        if m.sqlCAMsg == 1 then
           ggRes = ggRes'\n'sqlCaMsg()'\n'sqlCaMsg(sqlCa2Rx(sqlCa))
        end
    ggSt = 'SQL.HOST'
    ggVa = 'SQL.HOST.VAR'
    ggBe = 'SQL.HOST.BEF'
    call sqlHostVars ggSqlStmt, 12, ggSt
    if datatype(sqlErrd.5, 'n') & sqlErrd.5 > 0 then do
        ggW1 = translate(word(ggSqlStmt, 1))
        ggW2 = translate(word(ggSqlStmt, 2))
        if ggW1 == 'PREPARE' then
            ggVV = sqlHostVarFind(ggSt, 'FROM')
        else if ggW1 ggW2 == 'EXECUTE IMMEDIATE' then
            ggVV = sqlHostVarFind(ggSt, 1)
        else
            ggVV = ''
        if ggVV == '' then
            ggRes = ggRes || sqlMsgSrcPos(ggSqlStmt, sqlErrd.5)
        else
            ggRes = ggRes || sqlMsgSrcPos(value(ggVV), sqlErrd.5)
        end
    ggRes = ggRes'\nstmt =' ggSqlStmt
    ggPref = '\nwith'
    do ggXX=1 to m.ggSt.0
        ggRes = ggRes || ggPref m.ggBe.ggXX ':'m.ggVa.ggXX ,
                      '=' value(m.ggVa.ggXX)
        ggPref = '\n    '
        end
    if m.sqlSuMsg == 1 | (m.sqlSuMsg == 2 & m.sql.conHost \== '') then
        ggRes = ggRes'\nsubsys =' ,
                if(m.sql.conHost=='',,m.sql.conHost'/'),
                || m.sql.conSSID', interfaceType' m.sql.conType
    return  ggRes
endSubroutine sqlMsg

/*--- use dsnTiar to translate sql Info to error text ----------------*/
sqlDsnTiar: procedure expose m.
parse arg ca
    if -438  = sqlCa2Rx(ca) then
        return '\nSQLCODE = -438:',
           'APPLICATION RAISED ERROR WITH sqlState' sqlState ,
           'and DIAGNOSTIC TEXT:' sqlErrMc
    liLe = 78
    msLe = liLe * 10
    msg = d2c(msLe,2) || left('', msLe)
    len = d2c(liLe, 4)
    ADDRESS LINKPGM "DSNTIAR ca msg len"
    if rc <> 0 then
        call err 'linkPgm dsnTiar rc' rc 'sqlCa' ca
    res = strip(substr(msg, 13, liLe-10))
    cx = pos(', ERROR: ', res)
    if cx > 0 then
        res = left(res, cx-1)':' strip(substr(res, cx+9))
    do c=3+liLe by liLe to msLe while substr(msg, c, 10) = ''
            res = res'\n    'strip(substr(msg, c+10, liLe-10))
        end
    return res
endProcedure sqlDsnTiar

/*--- format all rexx sqlCa fields into a message --------------------*/
sqlCaMsg:
    return 'sqlCode' sqlCode 'sqlState='sqlState                    ,
           '\n    errMC='translate(sqlErrMc, ',', 'ff'x)            ,
           '\n    warnings='sqlWarnCat('+') 'erP='sqlErrP           ,
           '\n    errD.1='sqlErrD.1 '2='sqlErrD.2 '3='sqlErrD.3     ,
           '\n    errD.4='sqlErrD.4 '5='sqlErrD.5 '6='sqlErrD.6
endProcedure sqlCaMsg

/*--- format the sqlCA into the dsnTiar SQLCA ------------------------*/
sqlRx2Ca:
    if \ (datatype(sqlcode, 'n') & datatype(sqlErrD.1, 'n') ,
                                 & datatype(sqlErrD.3, 'n')) then
        return err('sqlCode etc. not numeric\nsqlCa =' sqlCaMsg())
    if digits() < 10 then
        numeric digits 10
    sqlCa = 'SQLCA   ' || d2c(136, 4) || d2c(sqlCode, 4) ,
            || d2c(min(70, length(sqlErrMc)), 2)left(sqlErrMc, 70) ,
            || left(sqlErrP, 8) ,
            || d2c(sqlErrD.1, 4)d2c(sqlErrD.2, 4)d2c(sqlErrD.3, 4) ,
            || d2c(sqlErrD.4, 4)d2c(sqlErrD.5, 4)d2c(sqlErrD.6, 4) ,
            || sqlWarnCat() || sqlState
    if length(sqlCa) <> 136 then
        call err 'sqlCa length' length(sqlCa) 'not 136' ,
                 '\n'sqlCaMsg() '==>'  ca', hex='c2x(ca)
    return sqlCa
endProcedure sqlRx2Ca

/*--- extract the fields from the SqlCA and put it to rexx vars ------*/
sqlCA2Rx: procedure expose m. ,
       sqlCode sqlErrMc sqlErrP sqlErrD. sqlWarn. sqlState
parse arg ca
    numeric digits 10
    if length(ca) < 136 | c2d(substr(ca, 9, 4), 4) <> 136 then
        call err 'bad sqlCa len' length(ca) 'not 136:' ca', hex='c2x(ca)
    sqlCode  = c2d(substr(ca, 13 ,4), 4)
    sqlErrMC = substr(ca, 19, c2d(substr(ca, 17, 2), 2))
    sqlErrP  = substr(ca, 89, 8)
    do ix=1 to 6
        sqlErrD.ix = c2d(substr(ca, 93 + 4 * ix, 4), 4)
        end
    do ix=0 to 10
        sqlWarn.ix = substr(ca, 121 + ix, 1)
        end
    sqlState = substr(ca, 132, 5)
    return sqlCode
endProcedure sqlCA2Rx

/*--- concat the sql warnings with Separator sep --------------------*/
sqlWarnCat: procedure expose m. sqlWarn.
parse arg sep
    return sqlWarn.0 || sep,
        || sqlWarn.1||sqlWarn.2||sqlWarn.3||sqlWarn.4||sqlWarn.5||sep ,
        || sqlWarn.6||sqlWarn.7||sqlWarn.8||sqlWarn.9||sqlWarn.10||sep
endProcedure sqlWarnCat

/*--- make the text for sqlWarnings ----------------------------------*/
sqlMsgWarn: procedure expose m. sqlWarn.
     r = ''
     text =' 1=W var truncated, 1=S scrollable, 1=N nonScrollable,'  ,
            '2=W nulls in aggregate,'                                ,
            '3=W more cols than vars,'                               ,
                             '3=Z more result sets than locators,'   ,
            '4=W no where, 4=D sensitive dynamic, 4=I insensitive,'  ,
                          '4=S sensitive static,'                    ,
            '5=W not valid sql, 5=1 readOnly, 5=2 readDelete,'       ,
                          '5=3 readDeleteUpdate,'                    ,
            '6=W day changed to month range,'                        ,
            '7=W dec digits truncated,'                              ,
            '8=W char substituted,'                                  ,
            '9=W arith excep in count, 9=Z multipe result sets,'     ,
            '10=W char conversion err in ca,'
     do wx = 1 to 10
         w = sqlWarn.wx
         if w = ' ' then
             iterate
         t = wx'='w
         cx = pos(' 'wx'='w' ', text)
         ex = pos(','         , text, cx + 1)
         if cx > 0 & ex > cx then
             r = r substr(text, cx+1, ex-cx)
         else
             r = r wx'='w '?,'
         end
     r = strip(r, 't', ',')
     if r = '' & sqlwarn.0 <> '' then
        call err 'sqlWarn.0='sqlWarn.0 'but all warns empty'
     return r
endProcedure sqlMsgWarn

/*--- show in the source src the point pos  (where error occured)
          a few lines from src around pos and arrow to pos ----------*/
sqlMsgSrcPos: procedure expose m.
parse arg src, pos
    liLe = 68
    liCn = 3
    afLe = 25
    t1 = space(left(src, pos), 1)
    t2 = left(' ', substr(src, pos, 1) == ' ' ,
                 | substr(src, pos+1, 1) == ' ') ,
         || space(substr(src, pos+1), 1)
    afLe = min(afLe, length(t2))
    if length(t1) + afLe > liLe * liCn then
        t1 = '...'right(t1, liLe * liCn - afLe -3)
    else if length(t1)+length(t2) > liLe then
        t1 = left(' ', (liCn * liLe - length(t1) -afLe) // liLe)||t1
    pL = length(t1) // liLe
    if length(t2) <= liLe-pL then
        tx = t1 || t2
    else
        tx = t1 || left(t2, liLe-pL-3)'...'
    res = '\nsrc' strip(substr(tx, 1, liLe), 't')
    do cx=1+liLe by liLe to length(tx)
        res = res || '\n  +' strip(substr(tx, cx, liLe), 't')
        end
    loc = 'pos' pos 'of' length(src)
    if length(loc)+6 < pL then
        return res'\n  >' right('>>>'loc'>>>', pL)
    else
        return res'\n  >' left('', pL-1)'<<<'loc'<<<'
endProcdedure sqlMsgSrcPos

/*--- get the hostVars in the sql in src and the word before ---------*/
sqlHostVars: procedure expose m.
parse arg src, cnt, st
    cx = 1
    sx = 0
    do cnt
        cx = pos(':', src, cx) + 1
        if cx < 2 then
           leave
        if pos(substr(src, cx, 1), m.mAlfRex1) < 1 then
            iterate
        ex = verify(src, m.mAlfRexR, 'n', cx)
        if ex - cx > 100 then
            iterate
        sx = sx + 1
        if ex < 1 then
            m.st.var.sx = substr(src, cx)
        else
            m.st.var.sx = substr(src, cx, ex - cx)
                       /* search word before */
        do bE = cx-2 by -1 to 1 ,
                while substr(src, bE, 1) == ' '
            end
        do bB = bE by -1 to max(1, bE-20),
                while pos(substr(src, bB, 1), m.mAlfa) > 0
            end
        if bB < bE & bB >= 0 then
            m.st.bef.sx = substr(src, bB+1, bE-bB)
        else
            m.st.bef.sx = ''
        end
    m.st.0 = sx
    return sx
endProcedure sqlHostVars

/*--- find the name of hostvar, by index or by before ----------------*/
sqlHostVarFind: procedure expose m.
parse arg st, fnd
    if datatype(fnd, 'n') & fnd <= m.st.0 then
        return m.st.var.fnd
    do ix=1 to m.st.0
        if translate(m.st.bef.ix) = fnd then
            return m.st.var.ix
        end
    return ''
endSubroutine sqlHostVarFind
/* copy sql    end   **************************************************/
/* copy j begin *******************************************************
    the j framework
         jReset
         jOpen
         jClose
         jRead
         jWrite
***********************************************************************/
jRead: procedure expose m.
parse arg m, var
    call objMetClaM m, 'jRead'
    if m.m.jReading then
        interpret ggCode
    else
        return err('jRead('m',' var') but not opened r')
endProcedure jRead

jReadO: procedure expose m.
parse arg m
if arg() > 1 then call err '???  old interface'
    call objMetClaM m, 'jReadO'
    if m.m.jReading then
        interpret ggCode
    else
        return err('jReadO('m',' var') but not opened r')
endProcedure jReadO

jWrite: procedure expose m.
parse arg m, line
    call objMetClaM m, 'jWrite'
    if \ m.m.jWriting then
        return err('jWrite('m',' line') but not opened w')
    interpret ggCode
    return
endProcedure jWrite

jWriteO: procedure expose m.
parse arg m, var
    call objMetClaM m, 'jWriteO'
    if \ m.m.jWriting then
        return err('jWriteO('m',' var') but not opened w')
    interpret ggCode
    return
endProcedure jWriteO

jWriteAll: procedure expose m.
parse arg m, rdr
    rdr = o2file(rdr)
    call objMetClaM m, 'jWriteAll'
    if \ m.m.jWriting then
        return err('jWriteAll('m',' rdr') but not opened w')
    interpret ggCode
    return
endProcedure jWriteAll

jWriteNow: procedure expose m.
parse arg m, rdr
    rdr = o2file(rdr)
    interpret objMet(m, 'jWriteNow')
    return
endProcedure jWriteNow

jCat: procedure expose m.
parse arg opt m
    if m = '' then do
        m = opt
        opt = m.j.cWri
        end
    call jOpen m, opt
    do ax=2 to arg()
        call jWriteAll m, arg(ax)
        end
    call jClose m
    return m
endProcedure jCat

jWriteNowImpl: procedure expose m.
parse arg m, rdr
    call jOpen rdr, m.j.cRead
    do while jRead(rdr, line)
        call jWrite m, m.line
        end
    call jClose rdr
    return
endProcedure jWriteNow

jWriteNowImplO: procedure expose m.
parse arg m, rdr
    call jOpen rdr, m.j.cRead
    do while assNN('li', jReadO(rdr))
        call jWriteO m, li
        end
    call jClose rdr
    return
endProcedure jWriteNow

/*--- reset JRW: fail if open, initialise ---------------------------*/
jReset: procedure expose m.
parse arg m, arg, arg2, arg3
    if m.m.jReading == 1 | m.m.jWriting == 1 then
        return err('still open jReset('m',' arg2')') / 3
    m.m.jReading = 0
    m.m.jWriting = 0
    m.m.jUsers = 0
    interpret objMet(m, 'jReset')
    return m
endProcedure jReset

jOpen: procedure expose m.
parse arg m, opt
    call objMetClaM m, 'jOpen'
    oUsers = m.m.jUsers
    if opt = m.j.cRead then do
        if m.m.jReading then
            nop
         else if m.m.jWriting then
            return err('already opened for writing jOpen('m',' opt')')
        else do
            interpret ggCode
            m.m.jReading = 1
            end
        end
    else if \ abbrev('>>', opt, 1) then do
        return err('bad option' opt 'in jOpen('m',' opt')')
        end
    else do
        if m.m.jWriting then
            nop
         else if m.m.jReading then
            return err('already opened for reading jOpen('m',' opt')')
        else do
            interpret ggCode
            m.m.jWriting = 1
            end
        end
    m.m.jUsers = oUsers + 1
    return m
endProcedure jOpen

jClose: procedure expose m.
parse arg m
    call objMetClaM m, 'jClose'
    oUsers = m.m.jUsers
    if oUsers = 1 then do
        interpret ggCode
        m.m.jReading = 0
        m.m.jWriting = 0
        end
    else if oUsers < 1 then
        call err 'jClose' m 'but already closed'
    m.m.jUsers = oUsers - 1
    return m
endProcedure jClose

/*--- cat the lines of the file together, with mid between lines,
                fail if not all lines are strings -------------------*/
jCatLines: procedure expose m.
parse arg m, fmt
    if abbrev(fmt, '-sql') then
        return jCatSql(m, substr(fmt, 5))
    if fmt == '' then
        fmt = '%+Q\s'
    call jOpen m, m.j.cRead
    if \ jRead(m, line) then do
        call jClose m
        return ''
        end
    res = f(fmt, m.line)
    do while jRead(m, line)
        res = res || f(fmt'%-Qnxt', m.line)
        end
    call jClose m
    fEnd = 'F.FORMAT.'fmt'%-Qend'
    return res || m.fEnd
endProcedure jCatLines

/*--- cat the line of a file, using comments
               fixline (with token wrapping) or separate lines -------*/
jCatSql: procedure expose m.
parse arg m, fLen
    call jCatSqlReset m'.JCATSQL', , jOpen(m, '<'), fLen
    res = jCatSqlNext(m'.JCATSQL')
    call jClose m
    return res
endProcedure jCatSql

jCatSqlReset: procedure expose m.
parse arg m, aSrc, m.m.rdr, m.m.fLen
    call jCatSqlNL m, aSrc
    return m
endProcedure jCatSqlReset

jCatSqlNL: procedure expose m.
parse arg m
    if m.m.rdr \== '' then
      if jRead(m.m.rdr, m'.SRC') then do
        if m.m.fLen \== '' then
            m.m.src = left(m.m.src, m.m.fLen)
        else if substr(m.m.src, length(m.m.src), 1) \== ' ' then
            m.m.src = m.m.src' '
        m.m.pos = 1
        return 1
        end
    m.m.pos = length(m.m.src)+1
    return 0
endProcedure jCatSqlNl

jCatSqlNext: procedure expose m.
parse arg m, stop
    res = ''
    st = ''
    bx = m.m.pos
    do forever
        call sbUntil m, '"''-/'stop
        if sbEnd(m) then do
            res = res || substr(m.m.src, bx)
            bx = 0
            end
        else if substr(m.m.src, m.m.pos, 2) = '--' then do
            res = res || substr(m.m.src, bx, m.m.pos-bx)' '
            bx = 0
            end
        else if substr(m.m.src, m.m.pos, 2) = '/*' then do
            res = res || substr(m.m.src, bx, m.m.pos-bx)' '
            do forever
                px = pos('*/', m.m.src, m.m.pos)
                if px > 0 then
                    leave
                if \ jCatSqlNL(m) then
                    return res
                end
            bx = px+2
            m.m.pos = bx
            end
        else if sbLit(m, ''' "') then do
            c1 = sbPrev(m)
            do while \ sbStrEnd(m, c1)
                res = res || substr(m.m.src, bx)
                if m.m.fLen \== '' then
                    if jCatSqlNl(m) then do
                        bx = m.m.pos
                        iterate
                        end
                call err 'unclosed' c1 'string:' m.m.src
                end
            end
        else if pos(substr(m.m.src, m.m.pos, 1), stop) > 0 then do
            res = strip(res||substr(m.m.src, bx, m.m.pos-bx), 't')
            call sbChar m, 1
            if res <> '' then
                return res
            bx = m.m.pos
            end
        if bx = 0 then
            if jCatSqlNl(m) then
                bx = m.m.pos
            else
                return res
        end
endProcedure jCatSqlNext

jIni: procedure expose m.
    if m.j.ini == 1 then
        return
    m.j.ini = 1
    m.j.cRead = '<'
    m.j.cWri = '>'
    m.j.cApp = '>>'
    call oIni
    am = "call err 'call of abstract method"
    call classNew 'n JRW u ORun, f JREADING v, f JWRITING v', 'm',
        , "new call jReset m, arg, arg2, arg3",
        , "jRead"   am "jRead('m',' var')'" ,
        , "jReadO if \ jRead(m, 'J.GGVAR') then return '';",
                "return s2o(m.j.ggVar)" ,
        , "jWrite" am "jWrite('m',' line')'" ,
        , "jWriteO call jWrite(m, o2string(var))" ,
        , "jWriteAll call jWriteNowImpl m, rdr",
        , "jWriteNow call jWriteNowImpl m, rdr",
        , "jReset",
        , "jOpen" am" jOpen('m',' opt')'" ,
        , "jClose" ,
        , "oRun call pipeWriteAll m",
        , "o2String return jCatLines(m, fmt)",
        , "o2File return m"
    call classNew 'n JRWO u JRW', 'm',
        , "jRead res = jReadO(m); if res == '' then return 0;" ,
                "m.var = o2string(res); return 1" ,
        , "jReadO"   am "jReadO('m')'" ,
        , "jWrite  call jWriteO(m, s2o(var))" ,
        , "jWriteO" am "jWriteO('m',' line')'",
        , "jWriteAll call jWriteNowImplO m, rdr",
        , "jWriteNow call jWriteNowImplO m, rdr",

    am = "call err 'call errObject"
    call classNew 'n JRWErr u JRW', 'm',
        , "jWriteAll" er "jWriteAll 'm', rdr'",
        , "jWriteNow" er "jWriteNow 'm', 'rdr'",
        , "jClose" er "jClose 'm'"
    call classNew 'n JSay u JRW', 'm',
        , "jWrite say line" ,
        , "jWriteO call classOut , var, 'outO: '",
        , "jOpen if \ abbrev(opt, m.j.cWri) then",
            "call err 'can only write JSay.jOpen('m',' opt')';" ,
            "else m.m.jWriting = 1"
    call classNew 'n JStem u JSay', 'm',
        , "jReset m.m.stem = arg;",
               "if \ dataType(m.arg.0, 'n') then m.arg.0 = 0" ,
        , "jWrite call mAdd m.m.stem, line"
    call classNew 'n JRWEof u JRW', 'm',
        , "jRead drop m.var; return 0",
        , "jOpen if pos('>', opt) > 0 then",
            "call err 'can only read JRWEof.jOpen('m',' opt')';" ,
            "else m.m.jReading = 1"
    m.j.in = jOpen(oNew('JRWEof'), m.j.cRead)
    call outDst
    call classNew "n JBuf u JRWO, f BUF s r", "m",
        , "jOpen call jBufOpen m, opt",
        , "jReset call jBufReset m, arg",
        , "jRead return jBufRead(m, var)",
        , "jReadO return jBufReadO(m)",
        , "jWrite call jBufWrite m, line",
        , "jWriteO call jBufWriteO m, var"
    call classNew "n JBufTxt u JBuf, f MAXL v ", "m",
        , "jReset call jBufReset m, arg; m.m.maxl = 80",
        , "jWriteO call jBufWrite m, o2Text(var, m.m.maxl)"
    return
endProcedure jIni

/*--- out interface of j --------------------------------------------*/
outIni: procedure expose m.
    call jIni
    return
endProcedure outIni

outDst: procedure expose m.
parse arg wrt
    oldOut = m.j.out
    if wrt == '' then
        wrt = jOpen(oNew('JSay'), '>')
    m.j.out = wrt
    return oldOut
endProcedure outDst

/*--- return a JRW from rdr or in ------------------------------------*/
j2Rdr: procedure expose m.
    parse arg rdr
    if oStrOrObj(rdr, m.j.in) then
        return jBuf(ggStr)
    else
        return o2file(ggObj)
endProcedure j2Rdr
      /* jstr is part of out interface --> inp2str */
inp2str: procedure expose m.
    parse arg rdr, fmt
    if oStrOrObj(rdr, m.j.in) then
        return ggStr
    else
        return o2String(ggObj, fmt)
endProcedure inp2str

j2Buf: procedure expose m.
    parse arg rdr
    if oStrOrObj(rdr, m.j.in) then
        return jBuf(ggStr)
    if classInheritsOf(ggCla, class4Name('JBuf')) ,
            & m.ggObj.jUsers < 1 then
        return ggObj
    b = jOpen(jBuf(), m.j.cWri)
    call jWriteNow b, o2File(ggObj)
    return jClose(b)
endProcedure j2Buf

in: procedure expose m.
parse arg arg
    return jRead(m.j.in, arg)
endProcedure in

inO: procedure expose m.
    if arg() > 0 then call err '??? old interface'
    return jReadO(m.j.in)
endProcedure in

out: procedure expose m.
parse arg line
    call jWrite m.j.out, line
    return 0
endProcedure out

outO: procedure expose m.
parse arg arg
    call jWriteO m.j.out, arg
    return
endProcedure outO

/*--- jBuf: buffer read or write (supports datataypes) ---------------*/
jBuf: procedure expose m.
    m = oNew('JBuf') /* calls jBufReset */
    do ax=1 to arg()
        m.m.buf.ax = arg(ax)
        end
    m.m.buf.0 = ax-1
    m.m.allV = 1
    return m
endProcedure jBuf
/*--- jBuf: buffer read or write (supports datataypes) ---------------*/
jBufTxt: procedure expose m.
    m = oNew('JBufTxt') /* calls jBufReset */
    do ax=1 to arg()
        m.m.buf.ax = arg(ax)
        end
    m.m.buf.0 = ax-1
    m.m.allV = 1
    return m
endProcedure jBufTxt

jBufReset: procedure expose m.
parse arg m
    m.m.stem = m'.BUF'
    do ax=1 to arg() - 1
        m.m.buf.ax = arg(ax+1)
        end
    m.m.buf.0 = ax-1
    m.m.allV = 1
    return m
endProcedure jBufReset

jBufOpen: procedure expose m.
parse arg m, opt
    if opt == m.j.cRead then do
        m.m.readIx = 0
        m.m.jReading = 1
        return m
        end
    if opt == m.j.cWri then do
        m.m.buf.0 = 0
        m.m.allV = 1
        end
    else if opt \== m.j.cApp then
         call err 'jBufOpen('m',' opt') with bad opt'
    m.m.jWriting = 1
    return m
endProcedure jBufOpen

jBufWrite: procedure expose m.
parse arg m, line
    if m.m.allV then
        call mAdd m'.BUF', line
    else
        call mAdd m'.BUF', s2o(line)
    return
endProcedure jBufWrite

jBufWriteStem: procedure expose m.
parse arg m, st
    ax = m.m.buf.0
    if m.m.allV then do
        do sx=1 to m.st.0
            ax = ax + 1
            m.m.buf.ax = m.st.sx
            end
        end
    else do
        do sx=1 to m.st.0
            ax = ax + 1
            m.m.buf.ax = o2String(m.st.sx)
            end
       end
       m.m.buf.0 = ax
    return m
endProcedure jBufWrite

jBufWriteO: procedure expose m.
parse arg m, ref
    if m.m.allV then do
        cl = objClass(ref)
        if cl = m.class.classV then do
            call mAdd m'.BUF', m.ref
            return
            end
        if cl == m.class.classW then do
            call mAdd m'.BUF', substr(ref, 2)
            return
            end
        m.m.allV = 0
        do ax=1 to m.m.buf.0
            m.m.buf.ax = s2o(m.m.buf.ax)
            end
        end
    call mAdd m'.BUF', ref
    return
endProcedure jBufWriteO

jBufReadO: procedure expose m.
parse arg m
    nx = m.m.readIx + 1
    if nx > m.m.buf.0 then
        return ''
    m.m.readIx = nx
    if m.m.allV then
        return s2o(m.m.buf.nx)
    else
        return m.m.buf.nx
endProcedure jBufReadO

jBufRead: procedure expose m.
parse arg m, var
    nx = m.m.readIx + 1
    if nx > m.m.buf.0 then
        return 0
    m.m.readIx = nx
    if m.m.allV then
        m.var = m.m.buf.nx
    else
        m.var = o2String(m'.BUF.'nx)
    return 1
endProcedure jBufRead

jBufTxtWriteO: procedure expose m.
parse arg m, ref
    if m.m.allV \== 1 then
        call err '1 \== allV' m.m.allV 'in jBufTxtWriteO('m',' ref')'
    cl = objClass(ref, '?')
    if cl = m.class.classV then
        call mAdd m'.BUF', m.ref
    else if cl == m.class.classW then
        call mAdd m'.BUF', substr(ref, 2)
    else if ref == '' then
        call mAdd m'.BUF', '@ null object'
    else if cl == '?' then
        call mAdd m'.BUF', '@'ref 'class=???'
    else do
        l = '@'ref 'class='className(cl)
        ff = cl'.FLDS'
        do fx=1 to m.ff.0 while length(l) < m.m.maxl + 3
            if m.ff.fx == '' then
                 l = l', .='m.ref
            else do
                 f1 = substr(m.ff.fx, 2)
                 l = l',' f1'='m.ref.f1
                 end
            end
        if length(l) > m.m.maxl then
            l = left(l, m.m.maxl-3)'...'
        call mAdd m'.BUF', l
        end
    return
endProcedure jBufTxtWriteO

/* copy j end *********************************************************/
/* copy o begin ******************************************************
    an object has a class which describes fields and methods
    an object has fields (e.g. m.o.fld1)
    an object may call it's methods (dynamic binding)
***********************************************************************/
oIni: procedure expose m.
    if m.o.ini = 1 then
        return
    m.o.ini = 1

    call classIni
    call oAdd1Method m.class.classV, 'o2String return m.m'
    m.class.escW = '!'
    call oAdd1Method m.class.classW, 'o2String return substr(m, 2)'
    or = classNew('n ORun u',
         , 'm oRun call err "call of abstract method oRun"',
         , 'm o2File return oRun2File(m)',
         , 'm o2String return jCatLines(oRun2File(m), fmt)')
                /* oRunner does not work yet ||||| */
    rc = classNew('n* ORun u ORun, m oRun call oClassAdded arg(2)')
    call oAddMethod rc'.OMET', rc
    call classAddedRegister oMutate(mNew(), rc)
    return
endProcedure oIni

/*--- when notified about a new class cl, build the redundancies ----*/
oClassAdded: procedure expose m.
parse arg cl
    m.class.o2c.cl = m.class.class
    call oAddMethod cl'.OMET', cl
    new = "m.class.o2c.m =" cl
    if m.cl.flds.0 > 0 | m.cl.stms.0 > 0 then
        new = new"; call oClear m, '"cl"'"
    new = new";" classMet(cl, 'new', '')
    if cl == m.class.class then
        call mAlias 'CLASS', cl
    else  /* object adresses */
        call mNewArea cl, 'O.'substr(cl,7), new
     if m.cl \== 'u' | m.cl.name == '' then
        return
    call mAlias cl, m.cl.name
    new = 'new'
    m.cl.oMet.new = ''
    co = ''                              /* build code for copy */
    do fx=1 to m.cl.flds.0
        nm = m.cl.flds.fx
          if translate(nm) == nm & \ abbrev(nm, 'GG') ,
              & pos('.M.', nm'.') < 1 & pos('.T.', nm'.') < 1 then
               co = co'm.t'nm '= m.m'nm';'
        else
            co = co 'f='quote(substr(nm, 2))';m.t.f = m.m.f;'
        end
    do fx=1 to m.cl.stms.0
        nm = m.cl.stms.fx
        sc = m.cl.stms.fx.class
        if nm == ''then
            co = co "m.t.0=m.m.0;" ,
               "do sx=1 to m.m.0;" ,
                 "call oClaCopy '"sc"',m'.'sx, t'.'sx; end;"
        else
            co = co "st='"substr(nm, 2)"';m.t.st.0=m.m.st.0;",
                "do sx=1 to m.m.st.0;",
                  "call oClaCopy '"sc"',m'.'st'.'sx, t'.'st'.'sx; end;"
        end
    p = cl'.OMET.oCopy'
    if symbol('m.p') \== VAR then
        m.p = co
    return
endProcedure oClassAdded

/*--- add the methods of class cl to the methodtable mt -------------*/
oAddMethod: procedure expose m.
parse arg mt, cl
     if pos(m.cl, 'frsv') > 0 then
         return
     if m.cl = 'm' then do
         nm = m.cl.name
         m.mt.nm = m.cl.met
         return
         end
/*     if m.cl.class \== '' then
         call oAddMethod mt, m.cl.class
*/   do x=1 to m.cl.0
         call oAddMethod mt, m.cl.x
         end
     return
endProcedure oAddMethod

/* add 1 method to a completed class and its subclasses -------------*/
oAdd1Method: procedure expose m.
parse arg clNm, met code
    cl = classAdd1Method(clNm, met code)
    m.cl.omet.met = code
    call oAdd1MethodSubs cl, met code
    return cl
endProcedure oAdd1Method

/* add 1 method code to OMET of all subclasses of cl  -------------*/
oAdd1MethodSubs: procedure expose m.
parse arg cl, met code
    do sx=1 to m.cl.sub.0
        sc = m.cl.sub.sx
        if pos(m.sc, 'nvw') > 0 then do
            do mx=1 to m.sc.0
                ms = m.sc.mx
                if m.ms == 'm' & m.ms.name == met then
                    call err 'method' med 'already in' sc
                end
            m.sc.omet.met = code
            end
        call oAdd1MethodSubs sc, met code
        end
    return cl
endProcedure oAdd1MethodSubs

/*--- create an an object of the class className
        mutate it to class but DO NOT call it's new method ----------*/
oBasicNew: procedure expose m.
parse arg cl
    return oMutate(mBasicNew(cl), cl)

/*--- create an an object of the class className
        and call it's new method ------------------------------------*/
oNew: procedure expose m.
signal labelMNew    /* work is done there |   ???? remove */

/*--- return the class of object obj --------------------------------*/
objClass: procedure expose m.
parse arg obj
    if symbol('m.class.o2c.obj') == 'VAR' then
         return m.class.o2c.obj
    if abbrev(obj, m.class.escW) then
        return m.class.classW
    if abbrev(obj, 'CLASS.CAST.') then
        return substr(obj, 12, pos(':', obj, 12)-12)
    if arg() >= 2 then
        return arg(2)
    return err('objClass no class found for object' obj)
endProcedure objClass

oKindOf: procedure expose m.
parse arg obj, sup
    cl = objClass(obj, '')
    if cl == '' then
        return 0
    return classInheritsOf(cl, class4name(sup))
endProcedure oKindOf

classInheritsOf: procedure expose m.
parse arg cl, sup    /* wkTst optimierung in classAdded */
    if cl == sup then
        return 1
    do while m.cl \== 'n' & m.cl \== 'u'
        if m.cl.class == '' then
            return 0
        cl = m.cl.class
        end
    do cx=1 to m.cl.0
        d = m.cl.cx
        if m.d == 'u' then
            if classInheritsOf(d, sup) then
                return 1
        end
    return 0
endProcedure classInheritsOf

classSetMet: procedure expose m.
parse arg na, me, code
    if symbol('m.class.n2c.na') \== 'VAR' then
        call err 'no class' na 'in classMet('na',' me')'
    cl = m.class.n2c.na
    if symbol('m.cl.oMet.me') \== 'VAR' then
        call err 'no method in classMet('na',' me')'
    m.cl.oMet.me = code
    return cl
endProcedure classSetMet

/*--- return the code of method me of the class with name na --------*/
classMet: procedure expose m.
parse arg na, me
    if symbol('m.class.n2c.na') \== 'VAR' then
        call err 'no class' na 'in classMet('na',' me')'
    cl = m.class.n2c.na
    if symbol('m.cl.oMet.me') == 'VAR' then
        return m.cl.oMet.me
    if arg() >= 3 then
        return arg(3)
    call err 'no method in classMet('na',' me')'
endProcedure classMethod

/*--- set m, ggClass, ggCode to the address, class and code
        of method me of object m ------------------------------------*/
objMetClaM: procedure expose m. m ggClass ggCode
parse arg m, me
    if symbol('m.class.o2c.m') == 'VAR' then
         ggClass =  m.class.o2c.m
    else if abbrev(m, 'CLASS.CAST.') then
        parse var m 'CLASS.CAST.' ggClass ':' m
    else
        return err('no class found for object' m)
    if symbol('m.ggClass.oMet.me') == 'VAR' then
        ggCode = m.ggClass.oMet.me
    else
         call err 'no method' me 'in class' className(ggClass),
              'of object' m
    return
endProcedure objMetClaM

/*--- return the code of method me of object obj --------------------*/
objMet: procedure expose m.
parse arg obj, me
        /* handle the easy and frequent case directly */
    if symbol('m.class.o2c.obj') == 'VAR' then
         c =  m.class.o2c.obj
    else if abbrev(obj, m.class.escW) then
         c = m.class.classW
    else do
        call objMetClaM obj, me
        return 'M="'m'";'ggCode
        end
     if symbol('m.c.oMet.me') == 'VAR' then
         return m.c.oMet.me
    return err('no method' me 'in class' className(c) 'of object' obj)
endProcedure objMet

/*--- return the stem of fieldnames of object m ---------------------*/
oFlds: procedure expose m.
parse arg m
    return objClass(m)'.FLDS'
endProcedure oFlds

/*--- return the contents of field f navigation along path ----*/
oGet: procedure expose m.
parse arg obj, path, clazz
    nullNew = 0
    ret = oAccPath(obj, path, clazz)
    if ret == 1 then
        ret = oAccStr(m, cl)
    if ret == 1 then
        return str
    return err(ret 'in oGet('obj',' path')')
endProcedure oGet

oAccStr: procedure expose m. str
parse arg m, cl
    if cl == m.class.classV then
        str = m.m
    else if m.cl.valueCl == '' then
        return 'no value @' m 'class' className(cl)
    else if m.m == '' then
        return 'null @' m 'class' className(cl)
    else if abbrev(m, m.class.escW) then
        str = substr(m ,2)
    else
        str = o2String(m.m)
    return 1
endProcedure oAccStr

oGetO: procedure expose m.
parse arg obj, path, opt, clazz
    nullNew = pos('n', opt) > 0
    ret = oAccPath(obj, path, clazz)
    if ret == 1 then
        ret = oAccO(m, cl, opt)
    if ret == 1 then
        return ref
    else
        return err(ret 'in oGetO('obj',' path')')
endProcedure oGetO

oAccO: procedure expose m. ref
parse arg m, cl, opt
    if cl == m.class.classV then do
        ref = s2o(m.m)
        end
    else if m.cl \== 'r' then do
        ref = m
        end
    else if m.m == '' then do
        if opt == '-b' then do
            m.m = jBuf()
            end
        else if opt == '-n' then do
            rsn = oRefSetNew(m, cl)
            if rsn \==1 then
               return rsn
            end
        ref = m.m
        end
    else if objClass(m.m, 0) \== 0 then do
        ref = m.m
        end
    else do
        return 'no class for' m.m '@' m 'class' cl
        end
    return 1
endProcedure oAccO

oPut: procedure expose m.
parse arg obj, path, str
    nullNew = 1
    res = oAccPath(obj, path)
    if res == 1 then
        res = ocPut(m, cl, str)
    if res == 1 then
        return str
    return err(res 'in oPut('obj',' path',' str')')
endProceudre oPut

ocPut: procedure expose m.
parse arg m, cl, str
    if m.cl.valueCl == m.class.classV then
        m.m = str
    else if m.cl.valueCl \== '' then
        m.m = s2o(str)
    else
        return 'no value @' m 'class' className(cl)
    return 1
endProcedure ocPut

oPutO: procedure expose m.
parse arg obj, path, ref
    nullNew = 1
    res = oAccPath(obj, path)
    if res == 1 then
        res = ocPutO(m, cl, ref)
    if res == 1 then
        return ref
    return err(ret 'in oPut('obj',' path',' ref')')
endProcedure oPutO

ocPutO: procedure expose m.
parse arg m, cl, ref
    if m.cl.valueCl == m.class.classV then
        m.m = o2string(ref)
    else if m.cl.valueCl \== '' then
        m.m = ref
    else if m.cl.stemCl \== '' then
        return 'implement put to stem'
    else
        return 'no value @' m 'class' className(cl)
    return 1
endProcedure ocPutO

oClear: procedure expose m.
parse arg obj, cl
    if cl == '' then
        cl = objClass(obj)
    do fx=1 to m.cl.flds.0
        f1 = m.cl.flds.fx
        o1 = obj || f1
        if f1 == '' then
            c1 = cl
        else do
            c1 = substr(f1, 2)
            c1 = m.cl.f2c.c1
            end
        if c1 == m.class.classW then
            m.o1 = m.class.escW
        else
            m.o1 = ''
        end
    do sx=1 to m.cl.stms.0
        f1 = obj || m.cl.stms.sx
        m.f1.0 = 0
        end
    return obj
endProcedure oClear

oAccPath: procedure expose m. m cl nullNew
parse arg m, pa, cl
    if cl == '' & m \== '' then do
        cl = objClass(m)
        end
    if pa == '' then
        return 1
    if abbrev(pa, m.class.cRef) ,
            | (\ m.cl.hasFlds & abbrev(pa, m.class.cNav)) then do
        if pa == m.class.cRef & m.cl.valueCl == m.class.classV then do
            cl = m.class.classV
            return 1
            end
        if (m.cl.valueCl == '' | m.cl.valueCl == m.class.classV) ,
              & m.cl \== 'r' then
            return 'no reference @' m 'class' cl
        if m.m = '' then do
            if \ nullNew then
                return 'null @' m 'class' className(cl)
            rsn = oRefSetNew(m, cl)
            if rsn \== 1 then
                return rsn
            end
        return oAccPath(m.m, substr(pa, 2))
        end
    if pos(left(pa, 1), m.class.cPath) > 0 then
        return oAccPath(m, substr(pa, 2), cl)
    px = verify(pa, m.class.cPath, 'm')
    if px < 1 then
        px = length(pa)+1
    fn = left(pa, px-1)
    pa = substr(pa, px)
    if symbol('m.cl.f2c.fn') == 'VAR' then
        return oAccPath(m'.'fn, pa, m.cl.f2c.fn)
    if m.cl.stemCl=='' | fn=='' | verify(fn, '0123456789','n')>0 then
        return 'no field' fn '@' m 'class' className(cl)
    if fn == 0 then
        return oAccPath(m'.0', pa, m.class.classV)
    if abbrev(fn, 0) | verify(m.m.0, '0123456789', 'n') > 0,
            | fn > m.m.0 then
        return 'bad stem index' fn'>'m.m.0 '@' m 'class' className(cl)
    return oAccPath(m'.'fn, pa, m.cl.stemCl)
endProcedure oAccPath

oRefSetNew: procedure expose m.
parse arg m, cl
    cr = m.cl.valueCl
    if m.cr.class = '' then
        return 'no class for null @' m 'class' className(cl)
    if m.cr.class = m.class.classW then
        m.m = o2s()
    else if m.cr \== 'r' then
        return 'class' className(cl) 'not ref'
    else
        m.m = mNew(m.cr.class)
    return 1
endProcedure oRefSetNew


/*--- mutate object m to the class named name -----------------------*/
oMutate: procedure expose m.
parse arg m, name
    m.class.o2c.m = class4Name(name)
    return m
endProcedure oMutate

/*--- return object obj cast'd to class named cl --------------------*/
oCast: procedure expose m.
parse arg obj, cl
     if abbrev(obj, 'CLASS.CAST.') then
         obj = substr(obj, 1 + pos(':', obj, 12))
     return 'CLASS.CAST.'class4Name(cl)':'obj
endProcedure oCast

/*--- copy object m of class c to t ---------------------------------*/
oClaCopy: procedure expose m.
parse arg ggCla, m, t
    if t == '' then do
        if ggCla == m.class.classW then
            return m
        t = mBasicNew(ggCla)
        end
     else if ggCla == m.class.classW then do
         m.t = o2String(m)
         m.class.o2c.t = m.class.classV
         return t
         end
     ggCode = ggCla'.OMET.oCopy'
     interpret m.ggCode
     m.class.o2c.t = ggCla
     return t
endProcedure oClaCopy

/*--- copy object m to t --------------------------------------------*/
oCopy: procedure expose m.
parse arg m, t
    return oClaCopy(objClass(m), m, t)
endProcedure oCopy

/*--- copy object to a newly created object -------------------------*/
oCopyNew: procedure expose m.
parse arg m
     if symbol('m.class.o2c.m') == 'VAR' then
         return oCopy(m, mBasicNew(m.class.o2c.m))
     return oCopy(m, mBasicNew(m.class.classV))
endProcedure oCopyNew

/*--- return a new instance of a subclass of Run
        with code code in method oRun -------------------------------*/
oRunner: procedure expose m.
    if arg() >= 1 then
           r = oNew(classNew('n* ORun u ORun, m oRun' arg(1)))
    else
           r = oNew(classNew('n| ORun u ORun'))
    return r
endProcedure oRunner

/*--- set code for runner -------------------------------------------*/
oRunnerCode: procedure expose m.
parse arg r, code
    call classSetMet objClass(r), 'oRun', code
    return r
endProcedure oRunnerCode

/*--- run method oRun of object m -----------------------------------*/
oRun: procedure expose m.
parse arg m, arg, arg2, arg3
    interpret objMet(m, 'oRun')
    return
endProcedure oRun

/*--- run method oRun and return output in new JBuf ------------------*/
oRun2File: procedure expose m.
parse arg rn
    b = jBuf()
    call pipeBeLa '>' b
    call oRun rn
    call pipeEnd
    return b
endProcedure oRun2File

/*--- cast the object to a file -------------------------------------*/
o2File: procedure expose m.
parse arg m
    interpret objMet(m, 'o2File')
    call err 'o2file did not return'
endProcedure o2File

/*--- cast the object to a String -----------------------------------*/
o2String: procedure expose m.
parse arg m, fmt
    if opt == '' then
        opt = '-b '
    interpret objMet(m, 'o2String')
    return err('o2String did not return')
endProcedure o2String

/*--- return true if object is kind of String------------------------*/
oStrOrObj: procedure expose m. ggStr ggObj ggCla
parse arg ggObj, def
    if ggObj == '' then
        ggObj = def
    ggCla = objClass(ggObj, '')

    if ggCla == '' then do
        ggStr = ggObj
        ggObj = ''
        return 1
        end
    else if wordPos(ggCla, m.class.classV m.class.classW) > 0 then do
        ggStr = o2String(ggObj)
        ggObj = ''
        return 1
        end
    else do
        ggStr = ''
        return 0
        end
endProcedure oStrOrObj

/*--- return true if object is kind of String ----- ???? -------------*/
oStrOrFile: procedure expose m. ggStr ggObj ggCla
parse arg m, def
    if oStrOrObj(m, def) then
        return 1
    ggObj = o2File(ggObj)
    return 0
endProcedure oStrOrFile

/*--- return a short string representation of an object -------------*/
o2Text: procedure expose m.
parse arg m, maxL
    if m == '' then
        return '@ null object'
    if maxL == '' then
        maxL = 80
    cl = objClass(m, '?')
    if cl = m.class.classV then
        l = m.m
    else if cl == m.class.classW then
        l = substr(m, 2)
    else if cl == '?' then
        l = '@'m 'class=???'
    else do
        l = '@'m 'class='className(cl)
        ff = cl'.FLDS'
        do fx=1 to m.ff.0 while length(l) < maxL + 3
            if m.ff.fx == '' then
                 l = l', .='m.m
            else do
                 f1 = substr(m.ff.fx, 2)
                 l = l',' f1'='m.m.f1
                 end
            end
        end
    if length(l) <= maxL then
        return l
    return left(l, maxL-3)'...'
endProcedure o2Text

/*--- cast a String to an object -----------------------------------*/
s2o: procedure expose m.
parse arg str
    return m.class.escW || str
    return r
endProcedure s2o

oIfStr: procedure expose m.
parse arg m
    if length(m) > 200 then
        return m
    cl = objClass(m, '')
    if cl = '' then
        return m
    else if cl = m.class.classV then
        return = m.m
    else if cl == m.class.classW then
        return = substr(m, 2)
    else if arg() >= 2 then
        return arg(2)
    else
        call err m 'of class' className(cl) 'not kind of string'
endProcedure oIfStr

/* copy o end *******************************************************/
/* copy class begin **************************************************
    a class has fields and methods,
    the class module handles only the metadata,
    object handling (instanciation, methodcalls etc.) is in O

    classes are represented by a metadata tree,
        its nodes of class class have diffenrent types:

class subTypes (implemented as choices)
    'u'    = union:    NAME -> name of class if <> '',
                    stem -> references component classes
    'f' = field:      NAME -> fieldName (x.name),
                    CLASSS -> reference to class of fieldValue
    's' = stem:     class -> ref to class at each stem element
    'c' = choice:   NAME -> selection value,
                    CLASS -> ref to class of choice
    'm' = method:    NAME -> methodName,
                    MET -> rexxCode
    'r' = reference CLASS -> ref to type at reference
special classes
    'v'    = Value     String Value
    'w'    = ValueAsA    StringValue packed into an adress (prefix escW)
    'o' = AnyClass    any class with dynamic classLookup on object
formal definition, see classIni

class expression (ce) allow the following syntax
    ce = className | classAdr | 'n'('?','*','|')? name union | union
        | 'f' name ce | 's' ce | 'c' name ce | 'm' name code | r ce?
    union = 'u' (ce (',' ce)*)?

    the modifiers of 'n' means
        none:    create new class, fail if name already defined
        '?':    create new class or return old of that name
        '*':    use an exisiting class of that definition
                or create new class with a unique name
        '|':    create a new class with a unique name
    'm' extends to then end of the ce (line)
    'u' allows several components, in classNew also multiple args
                Achtung, aber NICHT rekursiv|
***********************************************************************/
classIni: procedure expose m.
    if m.class.ini == 1 then
        return
    m.class.ini = 1
    call mapIni
    call mNewArea 'CLASS', 'CLASS'
    call mapReset 'CLASS.N2C'  /* name to class */
        /* to notify other modules (e.g. O) on every new named class */
    m.class.addedSeq.0 = 0
    m.class.addedListeners.0 = 0
    m.class.classV = classBasicNew('u', 'v')
    m.class.classW = classBasicNew('u', 'w')
    m.class.classO = classBasicNew('u', 'o')
    cr = mIterBegin('CLASS')
    do while assNN('cr', mIter(cr))
        call classAddedNotify cr
        end

    m.class.class = classNew('n class u v',
            , 'c u u f NAME v, s r class',
            , 'c f u f NAME v, f CLASS r class',
            , 'c s f CLASS r class' ,
            , 'c c u f NAME v, f CLASS r class',
            , 'c m u f NAME v, f MET  v' ,
            , 'c r f CLASS r class' )
    m.class.cNav = '.'
    m.class.cRef = '|'
    m.class.cDot = '%'
    m.class.cPath = m.class.cNav || m.class.cRef || m.class.cDot
    m.class.classR = classNew('r')
    return
endProcedure classIni


/*--- return the name of a class if it exists otherwise the class ---*/
className: procedure expose m.
parse arg cl
    if m.cl = 'u' & m.cl.name \= '' then
        return m.cl.name
    else
        return cl
endProcedure class4Name

/*--- return class of given name or class ---------------------------*/
class4Name: procedure expose m.
parse arg nm
    if symbol('m.class.n2c.nm') == 'VAR' then
        return m.class.n2c.nm
    if arg() > 1 then
        return arg(2)
    call err 'no class' nm
endProcedure class4Name

classBasicNew: procedure expose m.
parse arg ty, nm, cl, nmTy
    n = mNew('CLASS')
    m.n = ty
    m.n.name = nm
    m.n.nameComp = nm
    if ty == 'u' & nm \== '' then do
        if pos(nmTy, '*|') > 0 then do
            m.n.name = nm || substr(n, 1+lastPos('.', n))
            if nmTy == '*' then
                m.n.nameComp = nm'*'
            else
                m.n.nameComp = m.n.name
            end
        call mapAdd class.n2c, m.n.name, n
        end
    call mapAdd class.n2c, n, n
    m.n.class = ''
    m.n.met = ''
    m.n.0 = 0
    m.n.sub.0 = 0
    m.n.super.0 = 0
    if length(ty) \== 1 | pos(ty, 'ufscrm') < 1 then
        call err 'bad type' ty': classBasicNew('ty',' nm',' cl')'
    else if nm == '' & pos(ty, 'fm') > 0 then
        call err 'empty name: classBasicNew('ty',' nm',' cl')'
    else if nm \== '' & ty \== 'c'  ,
          & ( verify(nm, '0123456789') < 1 ,
            | verify(nm, ' .*|@', 'm') > 0 ) then
        call err 'bad name' nm': classBasicNew('ty',' nm',' cl')'
    else if nm \= '' & pos(ty, 'rs') > 0 then
        call err 'name for type' ty': classBasicNew('ty',' nm',' cl')'
    else if pos(ty, 'fcrs') > 0 then do
        if cl \== '' then
            m.n.class = mapGet(class.n2c, cl)
        else if ty == 'r' then
            m.n.class = m.class.classO
  /*    else say 'cl leer' ty nm nmTy   ???????*/
        end
    else if ty == 'm' then
        m.n.met = cl
    else if cl \== '' then
        call err 'class for type' ty': classBasicNew('ty',' nm',' cl')'
    return n
endProcedure classBasicNew


classNew: procedure expose m.
parse arg clEx 1 ty rest
    if abbrev(ty, 'n') then do
        if wordPos(ty, 'n n? n* n|') < 1 then
            call err 'bad type' ty': classNew('clEx')'
        nmTy = right(ty, 1)
        parse var rest nm ty rest
        if ty \== 'u' then
            call err 'class name' nm 'without u: classNew('clEx')'
        if nmTy == 'n' then do
             if mapHasKey(class.n2c, nm) then
                call err 'class' nm 'already defined: classNew('clEx')'
            end
        else if nmTy == '?' then do
            if mapHasKey(class.n2c, nm) then
                return mapGet(class.n2c, nm)
            end
        else if nmTy == '*' then do
            if arg() \== 1 then
                call err 'arg()='arg() 'for n* : classNew('clEx')'
            if mapHasKey(class.n2c, clEx) then
                return mapGet(class.n2c, clEx)
            end
        n = classBasicNew('u', nm, , nmTy)
        end
    else do
        nmTy = ''
        if arg() \== 1 then
            call err 'arg()='arg() 'without name: classNew('clEx')'
        if mapHasKey(class.n2c, clEx) then
               return mapGet(class.n2c, clEx)
        if length(ty) <> 1 | pos(ty, 'ufscmr') < 1 then
            call err 'bad type' ty': classNew('clEx')'
        nm = ''
        if pos(ty, 'usr') < 1 then
            parse var rest nm rest
        if ty = 'u'  then do
            n = classBasicNew(ty)
            end
        else if    ty = 'm' then do
            n = classBasicNew(ty, nm, rest)
            rest = ''
            end
        else do
            parse var rest t1 rest
            if wordPos(t1, 'u f s c m r') > 0 then do
                n = classBasicNew(ty, nm)
                m.n.class = classNew(t1 rest)
                rest = ''
                end
            else do
                n = classBasicNew(ty, nm, t1)
                end
            end
        end
    if ty \== 'u' then do
        if rest \== '' then
            call err 'rest' rest 'but end of classExp expected:' clEx
        end
    else do
        lx = 0
        do while lx < length(rest)
            cx = pos(',', rest, lx+1)
            if cx <= lx | word(substr(rest, lx+1), 1) == 'm' then
                cx = length(rest)+1
            a = mAdd(n, classNew(strip(substr(rest, lx+1, cx-lx-1))))
            lx=cx
            end
        pref = ''
        do ax=2 to arg()
            if length(arg(ax)) == 1 & arg(ax) \== ' ' then
                pref = arg(ax)' '
            else
                call mAdd n, classNew(pref || arg(ax))
            end
        end
    cr = mIterBegin('CLASS')
    do while assNN('cr', mIter(cr)) & \ classEqual(n, cr)
        end
    isNew = cr == n
    if \ isNew then do
        if mapRemove(class.n2c, n) \== n then
            call err 'mapRemove('n') mismatch'
        if m.n == 'u' & m.n.name \== '' then
            if mapRemove(class.n2c, m.n.name) \== n then
                call err 'mapRemove('m.n.name') mismatch'
        call mFree n
        n = cr
        end
    if nmTy == '' | nmTy == '*' then
        call mapAdd class.n2c, clEx, n
    if isNew then
        call classAddedNotify n
    return n
endProcedure classNew

classAdd1Method: procedure expose m.
parse arg clNm, met code
    cl = class4Name(clNm)
    if pos(m.cl, 'uvw') < 1 then
        call err 'class not nvw but' m.cl,
            'in classAdd1Method('clNm',' met code')'
    do sx = 1 to m.cl.0
        su = m.cl.sx
        if m.cl.sx = 'm' & m.cl.name == met then
            call err 'met' met 'already in' clNm
        end
    call mAdd cl, classNew('m' met code)
    return cl
endProcedure classAdd1Method

/*--- register a listener for newly defined classes
        and call it for all already defined classes -----------------*/
classAddedRegister: procedure expose m.
parse arg li
    call mAdd 'CLASS.ADDEDLISTENERS', li
    do cx = 1 to m.class.addedSeq.0
        call oRun li, m.class.addedSeq.cx
        end
    return
endProcedure classAddedRegister

/*--- to notify all listeners about a newly defined classes --------*/
classAddedNotify: procedure expose m.
parse arg cl
    call mAdd 'CLASS.ADDEDSEQ', cl
    if m.cl == 'u' then
        call classSuperSub cl
    m.cl.flds.0 = 0
    m.cl.stms.0 = 0
    m.cl.stemCl = ''
    m.cl.valueCl = ''
    call classAddFields cl, cl
    m.cl.hasFlds = m.cl.flds.0 > 1 ,
        | (m.cl.flds.0 == 1 & m.cl.flds.1 \== '') | m.cl.stms.0 > 0
    do lx = 1 to m.class.addedListeners.0
        call oRun m.class.addedListeners.lx, cl
        end
    return
endProcedure classAddedNotify

/*--- add supper and sub links for class cl -------------------------*/
classSuperSub: procedure expose m.
parse arg cl
    do ux=1 to m.cl.0
        u1 = m.cl.ux
        if m.u1 == 'u' then do
            if mPos(cl'.SUPER', u1) > 0 then
                call err u1 'is already in' cl'.SUPER.'sx ,
                    || ': classSuperSub('cl')'
            call mAdd cl'.SUPER', u1
            if mPos(cl'.SUB', cl) > 0 then
                call err cl 'is already in' u1'.SUB.'sx ,
                    || ': classSuperSub('cl')'
            call mAdd u1'.SUB', cl
            end
        end
    return
endProcedure classSuperSub

/*--- add the the fields of class cl to stem f ----------------------*/
classAddFields: procedure expose m.
parse arg f, cl, nm
    n1 = substr(nm, 1+abbrev(nm, '.') )
    if symbol('m.f.f2c.n1') \== 'VAR' then
        m.f.f2c.n1 = cl
/*    else if cl == m.f.f2c.n1 then
        return 0 */
    if cl == m.class.classV | cl == m.class.classW | m.cl=='r' then do
        if nm == '' then do
            if m.f.valueCl \== '' then
                return  err('value mistmatch')
            m.f.valueCl = cl
            end
        if nm == '' then do
             call mMove f'.FLDS', 1, 2
             m.f.flds.1 = ''
             end
        else do
            call mAdd f'.FLDS', nm
            end
        return 0
        end
    if m.cl = 's' then do
        if m.cl.class == '' then
            call err 'stem null class'
        a1 = mAdd(f'.STMS', nm)
        m.a1.class = m.cl.class
        if nm == '' then
            m.f.stemCl = m.cl.class
        return 0
        end
    if m.cl = 'f' then
        return classAddFields(f, m.cl.class, nm'.'m.cl.name)
    if m.cl.class \== '' then
        return classAddFields(f, m.cl.class, nm)
    do tx=1 to m.cl.0
        call classAddFields f, m.cl.tx, nm
        end
    return 0
endProcedure classAddFields

/*--- return true iff the two classes are equal -------------------*/
classEqual: procedure expose m.
parse arg l, r
    if m.l \== m.r | m.l.nameComp \== m.r.nameComp ,
            | m.l.class \== m.r.class | m.l.0 \== m.r.0  then
        return 0
    if m.l.met \== m.r.met  then
        return 0
    do sx=1 to m.l.0
        if m.l.sx \== m.r.sx then
            return 0
        end
    return 1
endProcedure classEqual

/*--- print object ---------------------------------------------------*/
objOut: procedure expose m.
parse arg m, pr, p1
   c = objClass(m, '')
   if c == '' then
       call out p1 'no class for' m
   else if c == m.class.classV then
       call out p1 || m.m
   else if c == m.class.classW then
       call out p1 || o2String(m)
   else
       call classOutDone c, m, pr, p1
   return
endProcedure objOut

/*--- recursively output (with out:) the object a with class t -------*/
classOut: procedure expose m.
parse arg t, a, pr, p1
    return classOutDone(if(t=='',m.class.classO, t), a, pr, p1)
endProcedure classOut

/*--- ouput object a with class t and stopper done ------------------*/
classOutDone: procedure expose m. done.
parse arg t, a, pr, p1
    if p1 == '' then
        p1 = pr
    if right(p1, 1) \== ' ' then
        p1 = p1' '
    if done.ini \== 1 then do
        done.ini = 1
        t = class4Name(t, t)
        p1 = p1'@'a' '
        end
    if done.t.a == 1 then
        return out(p1'done :'className(t) '@'a)
    done.t.a = 1
    if t = m.class.classO then do
        if a == '' then
            return out(p1'obj null')
        t = objClass(a, '')
        if t = '' then
            return out(p1'obj has no class @'m.a)
        else
            return classOutDone(t, a, pr, p1'isA')
        end

    if t == m.class.classV then
        return out(p1'=' m.a)
    if t == m.class.classW == 'w' then
        return out(p1'}' substr(a, 2))
    if m.t == 'f' then
        return classOutDone(m.t.class, a'.'m.t.name, pr, p1'.'m.t.name)
    if m.t == 'r' then do
        if m.a == '' then
            return out(p1'refTo :'className(m.t.class) '@null@')
        else
            return classOutDone(m.t.class, m.a, pr,
                    , p1'refTo @'m.a)
        end
    if m.t = 'u' then do
        t1 = m.t.1
        vv = m.t.0 > 0 & m.t.1 == m.class.classV
        call out p1 || if(m.t.name == '', 'union', ':'m.t.name) ,
             || copies(' =' m.a, vv)
        do ux=1+vv to m.t.0
            call classOutDone m.t.ux, a, pr' '
            end
        return 0
        end
    if m.t = 's' then do
        call out p1'stem' m.a.0
        do ux=1 to m.a.0
            call classOutDone m.t.class, a'.'ux, pr' ', pr' .'ux
            end
        return 0
        end
    if m.t = 'c' then do
        if m.t.name = m.a then
            call classOutDone m.t.class, a, pr, p1'choice' m.a
        return 0
        end
    if m.t = 'm' then
        return 0
    return err('bad class type' m.t)
endProcedure classOutDone
/* copy class end   ***************************************************/
/* copy map begin ******************************************************
    a map stores values at keys
    it may also maintain a list of keys
    the basic ideas are similar to the java Interface java.util.Map
    contrary to stems we also handle keys longer then 250 bytes
***********************************************************************/
/*--- initialize the module ------------------------------------------*/
mapIni: procedure expose m.
    if m.map.ini = 1 then
        return
    m.map.ini = 1
    call mIni
    m.map.0 = 0
    m.map.inlineSearch = 1
    call mapReset map.inlineName, map.inline
    return
endProcedure mapIni

mapInline: procedure expose m.
parse arg pName, opt
    if mapHasKey(map.inlineName, pName) then do
        im = mapGet(map.inlineName, pName)
        if pos('l', opt) < 1 & symbol('m.im.0') \== 'VAR' then do
            m.im.0 =  m.im.lEnd - m.im.lBegin - 1
            do ix=1 to m.im.0
                m.im.ix = strip(sourceline(ix+m.im.lBegin), 't')
                end
            end
        return im
        end
    name = '/'
    do lx = m.map.inlineSearch to sourceline()
        if \ abbrev(sourceline(lx), '$') then
            iterate
        li = sourceline(lx)
        s1 = pos('/', li)+ 1
        if s1 < 3 | s1 > 4 then
            iterate
        s2 = pos('/', li, s1)
        if s2 <= s1 then
            iterate
        if s1 == 3 then do
            if name \== substr(li, s1, s2-s1) then
                iterate
            im = 'MAP.INLINE.' || (m.map.inline.0+1)
            call mapAdd map.inlineName, name, im
            m.im.lBegin = lBeg
            m.im.lEnd = lx
            m.im.mark = mrk
            if name == pName then do
                m.map.inlineSearch = lx+1
                return mapInline(pName)
                end
            name = '/'
            end
        else if \ mapHasKey(map.inlineName,
                , substr(li, s1, s2-s1)) then do
            lBeg = lx
            mrk = substr(li, 2, s1-3)
            name = substr(li, s1, s2-s1)
            end
        else do
            name = '/'
            end
        end
    if pos('r', opt) > 0 then
        return ''
    return err('no inline data /'pName'/ found')
endProcedure mapInline

/*--- create a new map ----------------------------------------------*/
mapNew: procedure expose m.
parse arg opt
    m.map.0 = m.map.0 + 1
    return mapReset('MAP.'m.map.0 , opt)
endProcedure mapNew

/*--- make an empty map, if opt <> '' maintain stem of keys
                ('K' in map.keys, '=' in a else in opt) --------------*/
mapReset: procedure expose m.
    parse arg a, opt
    if symbol('m.map.keys.a') == 'VAR' then
        call mapClear a
    if opt = '=' then
        st = a
    else if translate(opt) = 'K' then
        st = 'MAP.KEYS.'a
    else
        st = opt
    m.map.keys.a = st
    if st \== '' then
        m.st.0 = 0
    return a
endProcedure

/*--- add a new key value pair to the map ----------------------------*/
mapAdd: procedure expose m.
parse arg a, ky, val
    vv = mapValAdr(a, ky, 'a')
    m.vv = val
    return val
endProcedure mapAdd

/*--- change the value at a key or add key value ---------------------*/
mapPut: procedure expose m.
parse arg a, ky, val
    vv = mapValAdr(a, ky, 'p')
    m.vv = val
    return val
endProcedure mapPut

/*--- return 1 if key ky exists in map a, 0 otherwise ----------------*/
mapHasKey: procedure expose m.
parse arg a, ky
    return mapValAdr(a, ky) \== ''
endProcedure mapHasKey

/*--- return the value of key ky in map a if it exists,
          else if called with a third argument return third argument
          else issue an error ----------------------------------------*/
mapGet: procedure expose m.
parse arg a, ky
    vv =  mapValAdr(a, ky)
    if vv \== '' then
        return m.vv
    else if arg() > 2 then
        return arg(3)
    else
        return err('missing key in mapGet('a',' ky')')
endProcedure mapGet

/*--- return a stem of all keys --------------------------------------*/
mapKeys: procedure expose m.
parse arg a
    if m.map.keys.a == '' then
        call err 'mapKeys('a') with no keys'
     return m.map.keys.a
endProcedure mapKeys

/*--- remove a key from the map, do nothing if it is missing ---------*/
mapRemove: procedure expose m.
parse arg a, ky
    vv = mapValAdr(a, ky)
    if vv == '' then
        return ''
    if m.map.keys.a \== '' then do
        trace ?R /* not tested yet ???wkTest */
        k = m.map.keys.a
        mx = m.k.0
        do i=1 to mx
            if m.k.i == ky then do
                m.k.i = m.k.mx
                m.k.0 = mx - 1
                return
                end
            end
        end
    val = m.vv
    drop m.a.ky
    return val
endProcedure mapRemove

/*--- remove all entries ---------------------------------------------*/
mapClear: procedure expose m.
parse arg a
    st = mapKeys(a)
    liLe = 243 - length(a)
    do kx=1 to m.st.0
        ky = m.st.kx
        drop m.st.kx
        if length(ky) <= liLe then do
            drop m.a.ky
            end
        else do
            adr = mapValAdr(a, ky)
            if adr \== '' then do
                ha = left(adr, lastPos('.', adr) - 3)
                do i = 1 to m.ha.k.0
                     drop m.ha.k.i m.ha.v.i
                     end
                 drop m.ha.k.0
                 end
            end
        end
    m.st.0 = 0
    return a
endProcedure mapClear

/*--- return the value pointer for a key, '' if non existing
             with fun = 'a' add a key, with 'p' put a key ------------*/
mapValAdr: procedure expose m.
parse arg a, ky, fun
    if length(ky) + length(a) <= 243 then do
        res = a'.'ky
         if symbol('m.res') == 'VAR' then do
            if fun == 'a' then
                call err 'duplicate key' ky 'in map' a
            return res
            end
        else if fun == '' then
            return ''
        end
    else do
        len = 243 - length(a)
        q = len % 4
        ha = a'.'left(ky, len - 2 * q) || substr(ky,
            , (length(ky)-len) % 2 + 2 * q, q) || right(ky, q)
        if symbol('M.ha.k.0') == 'VAR' then do
            do i=1 to m.ha.k.0
                if m.ha.k.i == ky then do
                    if fun == 'a' then
                        call err 'duplicate key' ky ,
                            'map' a 'hash' ha'.K.'i
                    return ha'.V.'i
                    end
                end
            end
        else do
            i = 1
            end
        if fun == '' then
            return ''
        if i > 9 then
            call err 'overflow long key' y 'in map' a 'hash' ha'.K.'i
        m.ha.k.0 = i
        m.ha.k.i = ky
        res = ha'.V.'i
        end
    if m.map.keys.a \== '' then
        call mAdd m.map.Keys.a, ky
    m.res = ''
    return res
endProcedure mapValAdr

/* copy map end *******************************************************/
/* copy mapExp begin **************************************************/
mapVia: procedure expose m.
parse arg a, ky
    sx = pos('|', ky)
    if sx < 1 then
        return mapGet(a, ky)
    via = mapGet(a, left(ky, sx-1))
    do while sx <= length(ky)
        fx = sx+1
        sx = pos('|', ky, fx)
        if sx < 1 then
            sx = length(ky) + 1
        if sx = fx then do
            if symbol('m.via') \== 'VAR' then
                call err 'missing m.'via 'at' sx 'in mapVia('a',' ky')'
            via = m.via
            end
        else do
            f = substr(ky, fx, sx - fx)
            if symbol('m.via.f') \== 'VAR' then
                call err 'missing m.'via'.'f ,
                     'at' sx 'in mapVia('a',' ky')'
            via = m.via.f
            end
        end
    return via
endProcedure mapVia

mapExpAt: procedure expose m.
parse arg a, src, sx
    m.map.ExpAt = 0
    cx = pos('$', src, sx)
    if cx < 1 then
        return substr(src, sx)
    res = substr(src, sx, cx-sx)
    do forever
        if substr(src, cx+1, 1) = '{' then do
            ex = pos('}', src, cx+2)
            if ex < 1 then
                call err 'missing } after' substr(src, cx) 'in' src
            res = res || mapVia(a, strip(substr(src, cx+2, ex-cx-2)))
            ex = ex + 1
            end
        else do
            ex = verify(src, m.mAlfDot, 'n', cx+1)
            if ex < 1 then
                return res || mapVia(a, substr(src, cx+1))
            if ex = cx+1 then do
                m.map.ExpAt = cx
                return res
                end
            res = res || mapVia(a, substr(src, cx+1, ex-cx-1))
            end
        cx = pos('$', src, ex)
        if cx < 1 then
            return res || substr(src, ex)
        res = res || substr(src, ex, cx-ex)
        end
endProcedure mapExpAt

mapExp: procedure expose m.
parse arg a, src
    res = mapExpAt(a, src, 1)
    if m.map.ExpAt \== 0 then
        call err 'mapExp stopped at' substr(src, map.ExpAt) 'in' src
    return res
endProcedure mapExp

mapExpAllAt: procedure expose m.
parse arg a, dst, src, sx, cx
    do while sx <= m.src.0
        li = mapExpAt(a, m.src.sx, cx)
        dx = m.map.ExpAt
        if (cx=1 & dx = 0) | li \= '' then
            call mAdd dst, li
        if dx = 0 then do
            cx = 1
            sx = sx+1
            end
        else do
            return sx dx
            end
        end
    return ''
endProcedure mapExpAllAt

mapExpAll: procedure expose m.
parse arg a, dst, src
    sto = mapExpAllAt(a, dst, src, 1, 1)
    if sto == '' then
         return
    lx = word(sto, 1)
    call err 'mapExpAll stopped at' sto':' m.src.lx
endProcedure mapExpAll
/* copy mapExp end ****************************************************/
/* copy m begin ********************************************************
  we use variables as follows
    m. stem m: all global data and object data that must survive
               a procedure call  (m for memory in Memoria of B5000)
        m.<mbr>.** to avoid conflicts: every rexx Module (copy) should
               only allocate addresses m.<mbr>.** with <mbr> the name of
               the rexx module
        we pass parameters around (e.g. a=address, m=memory, st=stem)
            and the called function may use m.a or m.a.subField etc.
    gg*: local variable in subroutines without procedure
    everything else: temporary data within procedure

  every subroutine is declared as procedure expose m.
        (also if no m. variable is used, because e.g. of error handling)
  the few subroutines that cannot use procedure, should use only
        variables starting with gg
***********************************************************************/
/*---make an area -----*/

mNewArea: procedure expose m.
parse arg nm, adr, newCd, freeCd
    m.m.area.0 = m.m.area.0 + 1
    a = 'M.AREA.'m.m.area.0
    if adr == '=' then
        adr = nm
    else if adr == '' then
        adr = 'M.'m.m.area.0
    if symbol('m.m.n2a.adr') == 'VAR' then
        call err 'adr' adr 'for area' nm 'already used'
    m.m.n2a.adr = a
    call mAlias adr, nm
    m.m.p2a.adr = a

    m.a.0 = 0
    m.a.free.0 = 0
    m.a.address = adr
    m.a.newCode = newCd
    m.a.freeCode = freeCd
    return nm
endProcedure mNewArea

mAlias: procedure expose m.
parse arg oldNa, newNa
    if symbol('m.m.n2a.oldNa') \== 'VAR' then
        call err 'area' oldNa 'does not exist'
    if oldNa == newNa then
        return
    if symbol('m.m.n2a.newNa') == 'VAR' then
        call err 'newName' newNa 'for old' oldNa 'already used'
    m.m.n2a.newNa = m.m.n2a.oldNa
    return
endProcedure mAlias

mBasicNew: procedure expose m. ggArea
parse arg name
    if symbol('m.m.n2a.name') \== 'VAR' then
        call err 'area' name 'does not exists'
    ggArea = m.m.n2a.name
    if m.ggArea.free.0 > 0 then do
        fx = m.ggArea.free.0
        m.ggArea.free.0 = fx-1
        m = m.ggArea.free.fx
        end
    else do
        m.ggArea.0 = m.ggArea.0 + 1
        m = m.ggArea.address'.'m.ggArea.0
        end
    return m
endProcedure mBasicNew

mNew: procedure expose m.
labelMNew:
parse arg name, arg, arg2, arg3
    m = mBasicNew(name)
    interpret m.ggArea.newCode
    return m
endProcedure mNew

mReset: procedure expose m.
parse arg a, name
    ggArea = m.m.n2a.name
    m = a
    interpret m.ggArea.newCode
    return m
endProcedure mReset

mFree: procedure expose m.
parse arg m
    p = 'M.P2A.'left(m, lastPos('.', m)-1)
    area = m.p
    if m.area.freeCode \== '' then
        interpret m.area.freeCode
    fx = m.area.free.0 + 1
    m.area.free.0 = fx
    m.area.free.fx = m
    return
endProcedure mFree
/*--- iterate over all allocate elements of an area ------------------*/
mIterBegin: procedure expose m.
parse arg nm
    a = m.m.n2a.nm
    return m.a.address'.0'
endProcedure mIterBegin

mIter: procedure expose m.
parse arg cur
    if cur == '' then
        return ''
    lx = lastPos('.', cur)
    p = 'M.P2A.'left(cur, lx-1)
    a = m.p
    ix = substr(cur, lx+1)
    do ix=ix+1 to m.a.0
        n = m.a.address'.'ix
        do fx=1 to m.a.free.0 while m.a.free \== n
            end
        if fx > m.a.free.0 then
            return n
        end
    return ''
endProcedure mIter

/*--- cut stem a to length len ---------------------------------------*/
mCut: procedure expose m.
parse arg a, len
    m.a.0 = len
    return a
endProcedure mCut

/*--- add one or several arguments to stem m.a -----------------------*/
mAdd: procedure expose m.
parse arg a
    ix = m.a.0
    do ax = 2 to arg()
        ix = ix + 1
        m.a.ix = arg(ax)
        end
    m.a.0 = ix
    return a'.'ix
endProcedure mAdd

/*--- pop last element from stem m.a ---------------------------------*/
mPop: procedure expose m.
parse arg a
    ix = m.a.0
    if ix < 1 then
        call err 'pop from empty stem' a
    m.a.0 = ix-1
    return m.a.ix
endProcedure mPop

/*--- add to m.dst.* a (sub)sequence of m.src.* ----------------------*/
mAddSt: procedure expose m.
    parse arg dst, src
    dx = m.dst.0
    do sx = 1 to m.src.0
        dx = dx + 1
        m.dst.dx = m.src.sx
        end
    m.dst.0 = dx
    return
endProcedure mAddSt

/*--- find position of first occurrence of ele in stem m,
        return 0 if nonemove a part of a stem -----------------------*/
mPos: procedure expose m.
parse arg m, ele, sx
    if sx == '' then
        sx = 1
    do x=sx to m.m.0
        if m.m.x = ele then
            return x
        end
    return 0
endProcedure mPos

/*--- move a part of a stem ------------------------------------------*/
mMove: procedure expose m.
parse arg m, sx, dx
    if dx < sx then do
        y = dx
        do x=sx to m.m.0
            m.m.y = m.m.x
            y = y + 1
            end
        end
    else if dx > sx then do
        y = m.m.0 + dx - sx
        do x=m.m.0 by -1 to sx
            m.m.y = m.m.x
            y = y - 1
            end
        end
    m.m.0 = m.m.0 + dx - sx
    return
endProcedure mMove

/*--- insert a stem into another ------------------------------------*/
mInsert: procedure expose m.
parse arg m, tx, st
    call mMove m, tx, tx+m.st.0
    do sx=1 to m.st.0
        dx = tx-1+sx
            m.m.dx = m.st.sx
            end
    return
endProcedure mInsert

/*--- strip all elements of a stem -----------------------------------*/
mStrip: procedure expose m.
parse arg st, opt
    if opt == '' then
        opt = 'b'
    do x=1 to m.st.0
        m.st.x = strip(m.st.x, opt)
        end
    return st
endProcedure mStrip


/* cat the lines of a stem, possibly repeated --------------------------
       args: stem, fmt see fGen: -------------------------------------*/
mCat: procedure expose m.
parse arg st, fmt
    if m.st.0 < 1 then
        return ''
    res = f(fmt, m.st.1)
    do sx=2 to m.st.0
        res = res || fPlus(fmt 'nxt', m.st.sx)
        end
    return res || fFld(fmt 'end')
endProcedure mCat

mIni: procedure expose m.
    if m.m.ini = 1 then
        return
    m.m.ini = 1
    m.mAlfLC  = 'abcdefghijklmnopqrstuvwxyz'
    m.mAlfUC  = translate(m.mAlfLC)
    m.mAlfa   = m.mAlfLC || m.mAlfUC
    m.mAlfNum = m.mAlfa || '0123456789'
    m.mAlfDot = m.mAlfNum || '.'
    m.mAlfRex1 = m.mAlfa'@#$?'  /* charset problem with ¬|  */
    m.mAlfRexR = m.mAlfRex1'.0123456789'
    m.m.area.0 = 0
    call mNewArea
    return
endProcedure mIni
/* copy m end *********************************************************/
/* copy adrIsp begin *************************************************/
/**********************************************************************
    lmd: catalog read
    call sequence: lmdBegin, lmdNext*, lmdEnd
        mit lmd service (mit save in file und read,
                         weil list zu langsam und listcat abstürzt)
        1. arg (grp)     als group dataset für lmd save
                         und dd name für file read
***********************************************************************/
lmdBegin: procedure expose m.
    parse arg grp, lev
    call adrIsp 'lmdinit listid(lmdId) level('lev')'
    res = adrIsp('lmdlist listid(&lmdId) option(save) group('grp')', 4)
    call adrIsp 'lmdfree listid(&lmdId)'
    if res = 0 then do
        call trc timing() 'lmdlist save' grp lev
        call adrTso 'alloc dd('grp') shr dsn('grp'.datasets)'
        end
    else do
        call trc 'no datasets found' timing() 'lmdlist save' grp lev
        call adrTso 'alloc dd('grp') dummy'
        end
    call readDDBegin grp
return /* end lmdBegin */

lmdNext:
    parse arg ggGrp, ggSt, withVolume
    if \ readDD(ggGrp, ggSt) then
         return 0
    if withVolume \== 1 then
        do ggIx=1 to value(ggSt'0')
            x = value(ggSt || ggIx, word(value(ggSt || ggIx), 1))
            end
    return 1
endSubroutin lmdNext

lmdEnd: procedure expose m.
    parse arg grp
    call readDDEnd grp
    call adrTso 'free dd('grp')'
return /* end lmdEnd */

lmd: procedure expose m.
    parse arg lev, withVol
    call lmdBegin gg1, lev
    do while lmdNext(gg1, q., withVol)
        do x=1 to q.0
           call out q.x
           end
        end
    call lmdEnd gg1
    return
endProcedure lmd
/**********************************************************************
    member list of a pds:
        call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmm: procedure expose m.
parse arg dsn
    id = lmmBegin(dsn)
    do ix=1 by 1
        m = lmmNext(id)
        if m = '' then
            leave
        call out m
        end
    call lmmEnd id
    return
endProcedure lmm

lmmBegin: procedure expose m.
parse arg dsn
    mbr = dsnGetMbr(dsn)
    pds = dsnSetMbr(dsn, )
    call adrIsp "LMINIT DATAID(lmmId) DATASET('"pds"') ENQ(SHRW)"
    call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
    res = lmmId
    if mbr <> '' then
        res = res 'pattern('mbr')'
    return res
endProcedure lmmBegin

lmmEnd: procedure expose m.
parse arg lmmId opt
    call adrIsp "LMMLIST DATAID("lmmId") option(free)", 8
    call adrIsp "LMCLOSE DATAID("lmmId")"
    call adrIsp "LMFREE DATAID("lmmId")"
    return
endProcedure lmmEnd

lmmNext: procedure expose m.
parse arg lmmId opt
    if adrIsp("LMMLIST DATAID("lmmid")" ,
               "OPTION(LIST) MEMBER(Mbr)" opt, 4 8) = 0 then
        return strip(mbr)
    else
        return ''
endProcedure lmmNext

lmmRm: procedure expose m.
parse arg dsn, mbrs
    mbrs = dsnGetMbr(dsn) mbrs
    pds = dsnSetMbr(dsn, )
    call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
    call adrIsp "LMOPEN DATAID("lmmId") OPTION(OUTPUT) "
    err = ''
    do wx=1 to words(mbrs)
        m1 = word(mbrs, wx)
        rr = adrIsp("lmmDel dataid("lmmId") member("m1")", 0 8 12)
        if rc = 0 then
            say 'removed' m1 'from' pds
        else if rc = 8 then
            say 'not found' m1 'in' pds
        else do
            err = 'error deleting' m1 'in' pds 'rc' rr strip(zerrlm)
            say err
            leave
            end
        end
    call adrIsp "LMCLOSE DATAID("lmmId")"
    call adrIsp "LMFREE DATAID("lmmId")"
    if err <> '' then
        call err err
    return
endProcedure lmmRm
/*--- address ispf with error checking -------------------------------*/
adrIsp:
    parse arg ggIspCmd, ggRet
    address ispexec ggIspCmd
    if rc = 0 then return 0
    else if ggRet == '*' then return rc
    else if wordPOS(rc, ggRet) > 0 then return rc
    else
        call err 'adr ispExec rc' rc 'in' ggIspCmd':' strip(zerrlm)
endSubroutine adrIsp

/*--- address editor with error checking -----------------------------*/
adrEdit:
    parse arg ggEditCmd, ggRet
    address isrEdit ggEditCmd
    if rc = 0 then return 0
    else if ggRet == '*' then return rc
    else if wordPOS(rc, ggRet) > 0 then return rc
    else
        call err 'adr isrEdit rc' rc 'for' ggEditCmd
endSubroutine adrEdit
/* copy adrIsp end   *************************************************/
/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
    parse arg ggTsoCmd, ggRet
    address tso ggTsoCmd
    if rc == 0                     then return 0
    else if ggRet == '*'           then return rc
    else if wordPos(rc, ggRet) > 0 then return rc
    else
        call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */

/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure expose m.
parse upper arg dsn ., addPrefix
    if left(dsn,1) = "'" then
        return strip(dsn, 'b', "'")
    sp = sysvar('SYSPREF')
    if sp == '' then
        sp = userid()
    cx = pos('~', dsn)
    if cx < 1 & addPrefix == 1 then
        return sp'.'dsn
    do while cx \== 0
        le = left(dsn, cx-1)
        ri = substr(dsn, cx+1)
        if right(le, 1) == '.' | left(ri, 1) == '.' then
            dsn = le || sp || ri
        else
            dsn = le || left('.', le \== '') || sp ,
                     || left('.', ri \== '') || ri
        cx = pos('~', spec, cx)
        end
    return dsn
endProcedure dsn2Jcl

/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure expose m.
parse arg dsn .
    return "'"dsn"'"
endProcedure jcl2dsn

dsnSetMbr: procedure expose m.
parse arg dsn, mbr
     bx = pos('(', dsn)
     if bx > 0 then
         dsn = strip(left(dsn, bx-1))
     if mbr <> '' then
         dsn = dsn'('strip(mbr)')'
     return dsn
endProcedure dsnSetMbr

dsnGetMbr: procedure expose m.
parse arg dsn
     lx = pos('(', dsn)
     rx = pos(')', dsn, lx+1)
     if lx < 1 then
         return ''
     else if lx < rx then
         return substr(dsn, lx+1, rx-lx-1)
     else
         return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
    io: read or write a dataset with the following callsequences:
        read:  readDDBegin, readDD*,  readDDEnd
        write: writeBegin,  writeDD*, writeEnd

        readDD returns true if data read, false at eof
***********************************************************************/

/*--- prepare reading from a DD --------------------------------------*/
readDDBegin: procedure expose m.
    parse upper arg ggDD
    call errAddCleanup 'call readDDEnd' ggDD', "*"'
return /* end readDDBegin */

/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt = '' then
        ggCnt = 100
    call adrTso 'execio' ggCnt 'diskr' ggDD '(stem' ggSt')', 2
    return (value(ggSt'0') > 0)
return /* end readDD */

/*--- finish reading DD  ggDD ----------------------------------------*/
readDDEnd: procedure expose m.
    parse upper arg ggDD, ggRet
    call errRmCleanup 'call readDDEnd' ggDD', "*"'
    return adrTso('execio 0 diskr' ggDD '(finis)', ggRet)
endProcedure readDDEnd

/*--- prepare writing to DD ggDD -------------------------------------*/
writeDDBegin: procedure expose m.
    parse upper arg ggDD
                  /* ensure file is erased, if no records are written */
    call adrTso 'execio' 0 'diskw' ggDD '(open)'
    call errAddCleanup 'call writeDDEnd' ggDD', "*"'
return /* end writeDDBegin */

/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    call adrTso 'execio' ggCnt 'diskw' ggDD '(stem' ggSt')'
    return
endSubroutine writeDD

/*--- end writing to dd ggDD (close) --------------------------------*/
writeDDEnd: procedure expose m.
parse upper arg ggDD, ggRet
    call errRmCleanup 'call writeDDEnd' ggDD', "*"'
    return adrTso('execio 0 diskw' ggDD '(finis)', ggRet)
endProcedure writeDDEnd

/*--- readNx: read next line, using buffer ---------------------------*/
/*--- begin: allocate dsnSpec and ini ------------------------ -------*/
readNxBegin: procedure expose m.
    parse arg m, m.m.dsn, m.m.dd, m.m.Cnt
    if m.m.dd = '' then
        m.m.dd = 'DDNX'
    if m.m.cnt = '' then
        m.m.cnt = 1000
    m.m.cx = m.m.cnt + 999
    m.m.buf0x = 0
    m.m.0 = 0
    call dsnAlloc 'dd('m.m.dd')' m.m.dsn
    call readDDBegin m.m.dd
    return m
endProcedure readDDNxBegin

/*--- return the stem of the next line, or '' at end -----------------*/
readNx: procedure expose m.
parse arg m
    ix = m.m.cx + 1
    m.m.cx = ix
    if m.m.cx <= m.m.0 then
        return m'.'ix
    m.m.buf0x = m.m.buf0x + m.m.0
    if \ readDD(m.m.dd, 'M.'m'.', m.m.cnt)then
        return ''
    m.m.cx = 1
    return m'.1'
endProcedure readDDNx

/*--- return the position (line number) of reader
           plus le characters of the current line (default 50) ------*/
readnxPos: procedure expose m.
parse arg m, le
    li = m'.'m.m.cx
    li = strip(m.li, 't')
    if arg() < 2 then
        le = 50
    if le < 1 then
        li = ''
    else if length(li) <= le then
        li = ':' li
    else
        li = ':' left(li, le-3)'...'
    return 'line' (m.m.buf0x + m.m.cx)li
endProcedure readnxPos

/*--- close and deallocate ------------------------------------------*/
readNxEnd: procedure expose m.
parse arg m
    call readDDEnd m.m.dd
    call tsoFree m.m.dd
    return
endProcedure readDDNxEnd

/*--- standardise a dsn spec
       word1             dsName or -
       word2             dd     or -
       word3             disp   or -
       word4 to first :  attributes in tso format
       after first :     attributes for new allocation
----------------------------------------------------------------------*/
dsnSpec: procedure expose m.
parse upper arg spec
    rr = ''      /* put leading - in separate words */
    do sx=1 while words(rr) < 3 & wx \= ''
        wx = word(spec, sx)
        do while abbrev(wx, '-') & words(rr) < 3
            wx = substr(wx, 2)
            rr = rr '-'
            end
        rr = rr wx
        end
    spec = rr subWord(spec, sx)
    na = ''
    dd = ''
    di = ''
    if left(spec, 1) = '&' then /* external spec is handled ok */
        spec = strip(substr(spec, 2))
    do wx=1 by 1
        w = word(spec, wx)
        if w = '' | abbrev(w, '.') | abbrev(w, ':') then
            leave
        else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
            di = w
        else if w = 'CATALOG' then
            di = di w
        else if abbrev(w, 'DD(') then
            dd = substr(w, 4, length(w)-4)
        else if abbrev(w, 'DSN(') then
            na = strip(substr(w, 5, length(w)-5))
        else if na == '' then
            na = dsn2jcl(w)
        else if dd == '' then
            dd = w
        else if di == '' then
            di = w
        else
            leave
        end
    if na == '' then
        na = '-'
    else if abbrev(na, "'") then
        na = substr(na, 2, length(na)-2)
    if dd == '' then dd = '-'
    if di == '' then di = '-'
    re = subword(spec, wx)
    if abbrev(re, '.') then
        re = substr(re, 2)
    return na dd di re
endProcedure dsnSpec

/*--- alloc a dsn with dsnAlloc
          if the dsn is inuse wait and retry
          until either the allocation is successfull
          or the timeout occurs --------------------------------------*/
dsnAllocWait: procedure expose m.
parse upper arg spec, pDi, pDD, timeOut
    x = max(1, arg() - 1)
    do rt=0
        m.adrTsoAl.1 = ''
        m.adrTsoAl.2 = ''
        m.adrTsoAl.3 = ''
        call outtrap m.adrTsoAl.
        res = dsnAlloc(spec, pDi, pDD, '*')
        call outtrap off
        if \ abbrev(res, ' ') then
            return res
        msg = m.adrTsoAl.1'\n'm.adrTsoAl.2'\n'm.adrTsoAl.3
        if rt > timeOut & timeOut \== '' then
            return err('timeout allocating' spec time() '\n'msg)
        if pos('DATA SET IS ALLOCATED TO ANOTHER', msg) < 1 then
            return err('allocating' spec'\n'msg)
        say time() 'sleep and retry alloc' spec
        call sleep 1, 0
        end
endProcedure dsnAllocWait

/*--- alloc a dsn or a dd
          spec '-'<ddName>
               datasetName? disposition? '.'? attributes? (':' newAtts)?
          disp default disposition
          dd   default dd name
          retRc   erlaubte ReturnCodes (leer = 0)
          returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, pDi, pDD, retRc
    parse value dsnSpec(spec) with na dd di rest
    if na = '-' then
        m.dsnAlloc.dsn = ''
    else
        m.dsnAlloc.dsn = na
    if na == '-' & dd \== '-' & di == '-' & rest = '' then
        return dd
    if dd == '-' & pDD \== '' then
        dd = pDD
    if dd == '-' then do
        if symbol('m.adrTso.ddNum') = 'VAR' then
            dd = m.adrTso.ddNum + 1
        else
            dd = 1
        m.adrTso.ddNum = dd
        dd = 'DD' || dd
        end
    if di = '-' & pDi \== '' then
        di = pDi
    if di = '-' then
        di = 'SHR'
    else if pos('(', na) < 1 then
        nop
    else if di = 'MOD' then
        call err 'disp mod for' na
    else
        di = 'SHR'
    if pos('/', na) > 0 then
        return csmAlloc(na dd di rest, retRc)
    else
        return tsoAlloc(na dd di rest, retRc)
endProcedure dsnAlloc

tsoAlloc: procedure expose m.
parse arg na dd disp rest ':' nn, retRc
    c = 'alloc dd('dd')' disp
    if na \== '-' then
        c = c "DSN('"na"')"
    else if disp = 'NEW' and nn \== '' then
        c = c dsnCreateAtts(,nn)
    call outtrap m.adrTsoAl.
    alRc = adrTso(c rest, '*')
    call outtrap off
    if alRc =  0 then do
        call errAddCleanup 'call tsoFree' dd', "*"'
        return dd 'call tsoFree' dd';'
        end
    if nn \= '' & wordPos(disp, 'OLD SHR') > 0 ,
          & sysDsn("'"m.dsnAlloc.dsn"'") == 'DATASET NOT FOUND' then do
        say 'tsoAlloc creating' c rest ':'nn
        call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(na, nn)
        call adrTso 'free  dd('dd')'
        return tsoAlloc(na dd disp rest, retRc)
        end
    do ax=1 to m.adrTsoAl.0
        say m.adrTsoal.ax
        end
    if retRc = '*' | wordPos(alRc, retRc) > 0 then
        return ' ' alRc
    call err 'tsoAlloc rc' alRc 'for' c rest
endProcedure tsoAlloc

tsoAtts: procedure expose m.
parse arg dsn
    rc = listDsi("'"dsn"' SMSINFO")
    if rc = 0 then
        mv = ''
    else if rc = 4 & sysReason = 19 then do
        mv = 'UNITCNT(30)'
        say 'multi volume' mv
        end
    else if rc ^= 0 then
        call err 'listDsi rc' rc 'reason' sysReason,
                             sysMsgLvl1 sysMsgLvl2
    al = 'CAT'
    al = ''
    if right(sysDsSms, 7) == 'LIBRARY' ,
        | abbrev(sysDsSms, 'PDS') then
         al = al 'DSNTYPE(LIBRARY)'
    if sysUnits = 'TRACK' then
        sysUnits = 'TRACKS'
    al = al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
        "DATACLAS("sysDataClass")" ,
        "RECFM("translate('1 2 3', ' 'sysREcFM, ' 123')")",
        "LRECL("SYSLRECL")",
        "blksize("sysBLkSIZE")",
        "SPACE("sysPrimary"," sysSeconds")" sysUnits mv
    return al
endProcedure tsoAtts

tsoFree: procedure expose m.
parse arg dd, ggRet
    call adrTso 'free dd('dd')', ggRet
    call errRmCleanup 'call tsoFree' dd', "*"'
    return
endProcedure tsoFree

dsnCreateAtts: procedure expose m.
parse arg dsn, atts, forCsm
    forCsm = forCsm == 1
    aU = ' 'translate(atts)
    if abbrev(atts, ':') then do
        parse var atts a1 atts
        bl = 32760
        rl = substr(a1, 3)
        if abbrev(a1, ':F') then do
            if rl = '' then
                rl = 80
            recfm='f b'
            bl = bl - (bl // rl)
            end
        else do
            if rl = '' then
                rl = bl-4
            recfm = substr(a1, 2, 1) 'b'
            end
        if forCsm then
            atts =  atts "recfm("space(recfm, 0)") lrecl("rl")",
                    "blkSize("bl")"
        else
            atts = atts "recfm("recfm") lrecl("rl") block("bl")"
        end
    if pos('(', dsn) > 0 & pos(' DSNTYPE(', aU) < 1 ,
                         & pos(' DSORG(',   aU) < 1 then
        atts = atts 'dsntype(library) dsorg(po)'
    if pos(' MGMTCLAS(', aU) < 1 then
        atts = atts 'mgmtclas(COM#A091)'
    if pos(' SPACE(', aU) < 1 then
        if forCsm then
            atts = atts 'space(10, 1000) cylinder'
        else
            atts = atts 'space(10, 1000) cyl'
    if dsn == '' then
       return atts
    return "dataset('"dsnSetMbr(dsn)"')" atts
endProcedure dsnCreateAtts

/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
    ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
    call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
    interpret subword(ggAlloc, 2)
    return
endSubroutine readDsn

/*--- write the dataset specified in ggDsnSpec from stem ggSt
          write ggCnt records if not empty otherwise ggst0
          if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
    call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
            '(stem' ggSt 'open finis)'
    interpret subword(ggAlloc, 2)
    if ggSay == 1 | m.debug == 1 then
       say ggCnt 'records written to' ggDsnSpec
    return
endSubroutine writeDsn

copyDSN: procedure expose m.
parse arg frSpec, toSpec, ggSay
    frDD = dsnAlloc(frSpec, 'SHR', 'FRDD')
    toDD = dsnAlloc(toSpec, 'OLD', 'TODD')
    call readDDBegin word(frDD, 1)
    call writeDDBegin word(toDD, 1)
    cnt = 0
    do while readDD(word(frDD, 1), r.)
        call writeDD word(toDD, 1), r.
        cnt = cnt + r.0
        end
    call readDDEnd word(frDD, 1)
    call writeDDEnd word(toDD, 1)
    interpret ';' subword(frDD, 2) '; ; ;' subword(toDD, 2)
    if ggSay == 1 | m.debug == 1 then
       say cnt 'records copied from' frSpec 'to' to toSpec
    return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
/* copy err begin ******************************************************
    messages, errorhandling,help
***********************************************************************/
errIni: procedure expose m.
    if m.err.ini == 1 then
        return
    call outIni
    m.err.ini     = 1
    m.err.handler = ''
    m.err.cleanup = ';'
    m.err.opt     = ''
    return
endProcedure errIni
/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
    call errIni
    parse arg m.err.opt, m.err.handler
    if pos('I', translate(m.err.opt)) > 0 then
        if errOS() \== 'LINUX' then
            if sysVar('sysISPF') = 'ACTIVE' then
                    call adrIsp 'control errors return'
    return
endSubroutine errReset

/*--- error routine: abend with message ------------------------------*/
err:
    parse arg ggTxt, ggOpt
    call errIni
    drop err handler cleanup opt call return
    if ggOpt == '' & m.err.handler \== '' then do
        if 1 then do /* no detection of recursive err call loop
                        --> will anyway fail by stack overflow */
            interpret m.err.handler
            end
        else do
                     /* avoid recursive err call loop */
            drop call return
            if symbol('m.err.call') \== 'VAR' then
                m.err.call = 1
            else
                m.err.call = m.err.call + 1
            if m.err.call > 10 then do
                say 'errHandler loop:' m.err.handler
                end
            else do
                m.err.return = 1
                call errInterpret m.err.handler
                m.err.call = m.err.call - 1
                if m.err.return then
                    return result
                end
            end
        end
    call outDst
    call errSay ggTxt, 'e'
    call errCleanup
    if ggOpt == '' then
        ggOpt = m.err.opt
    ggOpt = translate(ggOpt)
    if pos('T', ggOpt) > 0  then do
        trace ?r
        say 'trace ?r in err'
        end
    if pos('H', ggOpt) > 0  then do
        call errSay 'divide by zero to show stackHistory', 'e'
        x = 1 / 0
        end
    call errSay 'exit(12)', 'e'
    exit errSetRc(12)
endSubroutine err

/*--- error routine: user message cleanup exit -----------------------*/
errEx:
    parse arg ggTxt
    call errIni
    call outDst
    call errSay ggTxt
    call errCleanup
    exit 8
endProcedure errEx

errAddCleanup: procedure expose m.
parse arg code
    if m.err.ini \== 1 then
        call errIni
        /* concatenate backwards, then it is executed also backwards */
    m.err.cleanup = ';'code || m.err.cleanup
    return
endProcedure errAddCleanup

errRmCleanup: procedure expose m.
parse arg code
    if m.err.ini \== 1 then
        call errIni
    cx = pos(';'code';', m.err.cleanup)
    if cx > 0 then
        m.err.cleanup = left(m.err.cleanup, cx) ,
                     || substr(m.err.cleanup, cx + length(code)+2)
    return
endProcedure errRmCleanup

errCleanup: procedure expose m.
    call errIni
    cl = m.err.cleanup
    if cl = ';' then
        return
    m.err.cleanup = ';'
    say 'err cleanup begin' cl
    call errInterpret cl
    say 'err cleanup end' cl
    return
endProcedure errCleanup

errInterpret: procedure expose m.
parse arg code
    interpret code
    m.err.return = 0
    return
endProcedure errInterpret
/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
    interpret 'assertRes =' arg(1)
    if \ assertRes then
        call err 'assert failed' arg(1)':' arg(2)
    return
endProcedure assert

/*--- output an errorMessage msg with pref pref
           split message in lines at '/n' ---------------------------*/
errSay: procedure expose m.
parse arg msg, pref
    parse source . . ggS3 .                           /* current rexx */
    if pref == 'e' then
        msg = 'fatal error in' ggS3':' msg
    else if pref == 'w' then
        msg = 'warning in' ggS3':' msg
    else if pref \== '' then
        msg = pref':' msg
    return outNl(msg)
endProcedure errSay

/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg, op
    call errSay msg, 'e'
    call help
    call err msg, op
endProcedure errHelp

/*--- return the Operating System we are running on: TSO or LINUX ---*/
errOS: procedure expose m.
    parse source os .
    return os
endProcedure errOS

/*--- set rc for ispf: -------------------------------------------------
    if a cmd is run by ispStart, its RC is ignored,
         but ISPF passes the value of the shared varible 3IspfRc
         back as return code
----------------------------------------------------------------------*/
errSetRc: procedure expose m.
parse arg zIspfRc
    if errOS() \== 'LINUX' then
           if sysVar('sysISPF') = 'ACTIVE' then
            address ispExec vput 'zIspfRc' shared
    return zIspfRc
endProcedure errSetRc

/*--- output a trace message if m.tr is set -----------------------*/
trc: procedure expose m.
parse arg msg
    if m.trace == 1 then
        call out 'trc:' msg
    return
endProcedure trc

debug: procedure expose m.
parse arg msg
    if m.debug == 1 then
        call out 'debug' msg
    return
endProcedure debug

/*--- display the first comment block of the source as help ----------*/
help: procedure expose m.
    parse source . . s3 .
    call out right(' help for rexx' s3, 79, '*')
    do ax=1 to arg()
        say ' ' arg(ax)
        end
    do lx=1 by 1
        if pos('/*', sourceLine(lx)) > 0 then
            leave
        else if lx > 10 then do
            call out 'initial commentblock not found for help'
            return
            end
        end
    do lx=lx+1 by 1
        li = strip(sourceLine(lx), 't', ' ')
        if pos('*/', li) > 0 then
            leave
        call out li
        end
    call out right(' end help for rexx' s3, 79, '*')
    return 4
endProcedure help

/*--- output all lines (separated by '\n') of all args --------------*/
outNl: procedure expose m.
    do ax=1 to max(1, arg())
        msg = arg(ax)
        sx = 0
        bx = -1
        do lx=1 until bx >= length(msg)
                ex = pos('\n', msg, bx+2)
            if ex < 1 then
                ex = length(msg)+1
            call out substr(msg, bx+2, ex-bx-2)
            bx = ex
         end
        end
    return 0
endProcedure outNl
/* copy err end   *****************************************************/
/* copy ut begin  *****************************************************/
/*--- if function  warning all3 arguments get evaluated|
                   e.g if(x=0, 'infinity', 1/0) will fail| -----------*/
if: procedure expose m.
parse arg co, ifTrue, ifFalse
    if co then
        return ifTrue
    else
        return ifFalse
endProcedure if
/*--- embedded ASSignement:
      assign the second argument to the variable with name in first arg
      and return the value assigned ----------------------------------*/
ass:
    call value arg(1), arg(2)
    return arg(2)
/*--- embedded ASSignement only if NotNull:
      assign the second argument to the variable with name in first arg
      if the second arg is not null, return new value ---------------*/
assIf:
    if arg(2) == '' then
        return value(arg(1))
    call value arg(1), arg(2)
    return arg(2)

/*--- return first nonNull argument ---------------------------------*/
nn:
    if arg(1) \== '' then
        return arg(1)
    if arg(2) \== '' then
        return arg(2)
    call err 'nn() both args empty'

/*--- embedded ASSignement return NotNull:
      assign the second argument to the variable with name in first arg
      and return 1 if value not null, 0 if null ----------------------*/
assNN:
    call value arg(1), arg(2)
    return arg(2) \== ''

/*--- return current time and cpu usage ------------------------------*/
timing: procedure expose m.
return return time() 'ela='time('E') 'cpu='sysvar('syscpu'),
            'su='sysvar('syssrv')

timingTest: procedure expose m.
    say 'begin' timing()  sysvar('sysnode')
    do 30000000
       end
    say 'end  ' timing()
return

/*--- sleep several seconds ------------------------------------------*/
sleep: procedure expose m.
parse arg secs, sayIt
    if sayit <> 0 then
        say 'sleeping' secs 'secs' time()
    CALL SYSCALLS 'ON'
    ADDRESS SYSCALL "sleep" secs
    CALL SYSCALLS 'OFF'
    if sayit <> 0 then
        say 'slept' secs 'secs' time()
    return
endProcedure sleep

/*--- elongate inp with spaces up to given len -----------------------*/
elong: procedure expose m.
parse arg inp, len
    if length(inp) >= len then
        return inp
    return left(inp, len)
endProcedure elong

/*--- quote string txt using quoteChar qu ("""" ==> ") ---------------*/
quote: procedure expose m.
parse arg txt, qu
    if qu = '' then
        qu = '"'
    res = qu
    ix = 1
    do forever
        qx = pos(qu, txt, ix)
        if qx = 0 then
            return res || substr(txt, ix) || qu
        res = res || substr(txt, ix, qx-ix) || qu || qu
        ix = qx + length(qu)
        end
endProcedure quote

/*--- return the count of occurrences of needle in heyStack ----------*/
posCount: procedure expose m.
parse arg needle, hayStack, start, fin
    if start = '' then
        start = 1
    if fin = '' then
        fin = length(hayStack) + 1 - length(needle)
    do cnt = 0 by 1
        start = pos(needle, haystack, start)
        if start < 1 | start > fin then
             return cnt
        start = start + length(needle)
        end
endProcedure posCount

repAll: procedure expose m.
parse arg src, w, new
    res = ''
    cx = 1
    do forever
        nx = pos(w, src, cx)
        if nx < 1 then
            return res || substr(src, cx)
        res = res || substr(src, cx, nx-cx) || new
        cx = nx + length(w)
        end
endProcedure repAll

repAllWords: procedure expose m.
parse arg src, w, new
    res = ''
    wx = 0
    cx = 1
    do forever
        wx = wordPos(w, src, wx+1)
        if wx < 1 then
            return res || substr(src, cx)
        nx = wordindex(src, wx)
        res = res || substr(src, cx, nx-cx) || new
        cx = nx + length(w)
        end
endProcedure repAllWords
/* copy ut end ********************************************************/
}¢--- A540769.WK.REXX.O13(DB2CAT) cre=2013-01-21 mod=2013-01-21-16.45.52 A540769 ---
/* copy db2Cat begin **************************************************/
catTbLastCol: procedure expose m.
parse upper arg cr, tb
    return sql2one( ,
          "select strip(char(colcount)) || ' ' || strip(c.name) one"  ,
              "from sysibm.sysTables t left join sysibm.sysColumns c" ,
                  "on c.tbCreator = t.creator and c.tbName = t.name"  ,
                       "and c.colNo = t.colCount"                     ,
               "where t.creator = '"cr"' and t.name = '"tb"'", ,'')
endProcedure catTbLastCol

catTbCols: procedure expose m.
parse upper arg cr, tb
    if sql2St("select strip(name) name "     ,
          "from sysibm.sysColumns " ,
          "where tbcreator = '"cr"' and tbname='"tb"'",
          "order by colNo", ggSt) < 1 then
        return ''
    res = m.ggst.1.name
    do cx=2 to m.ggst.0
        res = res m.ggst.cx.name
        end
    return res
endProcedure catTbCols

catTbColsTrunc: procedure expose m.
parse upper arg cr, tb, maxL
    if sql2St("select strip(name) name, colType, length, length2"     ,
          "from sysibm.sysColumns " ,
          "where tbcreator = '"cr"' and tbname='"tb"'",
          "order by colNo", ggSt) < 1 then
        return ''
    res = ''
    do cx=1 to m.ggst.0
        ty = m.ggSt.cx.colType
        if pos('LOB', ty) > 0 then
            res = res', substr('m.ggSt.cx.name', 1,' ,
                 min(maxL, m.ggSt.cx.length2)') 'm.ggSt.cx.name
        else if pos('CHAR', ty) > 0 & m.ggSt.cx.length > maxL then
            res = res', substr('m.ggSt.cx.name', 1,' maxL')',
                 m.ggSt.cx.name
        else
            res = res',' m.ggSt.cx.name
        end
    return substr(res, 3)
endProcedure catTbColsTrunc

catIxKeys: procedure expose m.
parse upper arg cr, ix
    sql = "select colSeq, colName, ordering"                          ,
              "from sysibm.sysKeys"                                   ,
               "where ixCreator = '"cr"' and ixName = '"ix"'" ,
               "order by colSeq"
    call sqlPreOpen 1, sql
    res = ''
    do kx=1 while sqlFetchInto(1, ':sq, :col, :ord')
        if sq \= kx then
            call err 'expected' kx 'but got colSeq' sq ,
                     'in index' cr'.'ix'.'col
        res = res || strip(col) || translate(ord, '<>?', 'ADR')
        end
    call sqlClose 1
    return res
endProcedure catIxKeys

catColCom: procedure expose m.
parse upper arg fCr, fTb, tCr, tTb
    sql = "select t.name, t.colType, t.nulls, t.""DEFAULT"""        ,
                    ", coalesce(f.nulls, 'new')"                    ,
              "from sysibm.sysColumns t"                            ,
                "left join sysibm.sysColumns f"                     ,
                  "on f.tbCreator = '"fCr"' and f.tbName = '"fTb"'" ,
                    "and f.name = t.name"                           ,
              "where t.tbCreator = '"tCr"' and t.tbName = '"tTb"'"  ,
              "order by t.colNo"
    call sqlPreOpen 1, sql
    pr = ' '
    do kx=1 while sqlFetchInto(1, ':na, :ty, :nu, :de, :nn')
        /* say kx na ty nu de 'nn' nn */
        if pos('CHAR', ty) > 0 then
            dv = "''"
        else if pos('INT' ,ty) > 0 | wordPos(ty, 'REAL FLOAT') > 0 then
            dv = 0
        else if ty == 'TIMESTMP' then
            dv = '0001-01-01-00.00.00'
        else if pos('LOB', ty) > 0 then
            dv = ty"('')"
        else
            dv = '???'
        if nu = 'Y' then
            dv = 'case when 1=0 then' dv 'else null end'
        r = '???'
        if ty = 'ROWID' then do
            r = '--'
            end
        else if nn == 'new' then do
            if de = 'Y' then
                r = '--'
            else if nu == 'N' then
                r = dv
            else
                r = 'case when 1=0 then' dv 'else null end'
            end
        else do
            if nu = 'Y' | (nu = nn) then
                r = ''
            else
                r = 'coalesce('na',' dv')'
            end
        if abbrev(r, '--') then do
            r = ' ' r
            end
        else do
            r = pr r
            pr = ','
            end
        if pos('???', r) > 0 then
            call err 'no default for type' ty 'in' tCr'.'tTb'.'na
        call out r na
        end
    call sqlClose 1
    return
endProcedure catColCom
/* copy db2Cat end   **************************************************/
}¢--- A540769.WK.REXX.O13(DB2JAA) cre=2013-10-30 mod=2013-10-30-12.32.56 A540769 ---
wie gehts
}¢--- A540769.WK.REXX.O13(DB2MVEXT) cre=2012-09-17 mod=2012-09-19-13.45.35 A540769 ---
/* rexx ****************************************************************
***********************************************************************/
call errReset 'h'
call errAddCleanup 'call sqlExec rollback'
m.inpDs = 'DSN.MVEXT.CMDLIST'
m.dbSy = 'DBOC'
call iniA2V
say 'reading' m.inpDs
call readNxBegin ii, m.inpDs
do lx=1 until abbrev(m.il, ' SSI ')
    il = readNx(ii)
    if il == '' then
        call err 'no SSI header found in' m.inpDs
    end
h1 = m.il
il = readNx(ii)
h2 = m.il
m.col.0 = 0
call addCol 'dbMbr', pos('Trgt', h2)
call addCol 'system', pos('System', h2)
call addCol 'date', pos('Date', h2)
call addCol 'time', pos('Time', h2)
call addCol 'verb', pos('Verb', h2)
call addCol 'cmd', pos('Line 1', h2)
call addCol 'corr', pos('Corrid', h1)
call addCol 'auth', pos('Authid', h1)
call addCol 'operator', pos('Operator', h1)
il = readNx(ii)
call sqlRxConnect m.dbSy
call errAddCleanup 'call sqlExec rollback'
call preInsert 55
cIns = 0
cDup = 0
mode = ''

do lx=lx+2 while il \== ''
    call getCols cc, m.il
    sc = sqlRxExecute('55 -803', m.cc.dbMbr, m.cc.system, m.cc.tst,
          , m.cc.verb,
          , m.cc.cmd  , m.cc.corr  , m.cc.auth  , m.cc.operator)
    if sc = 0 then
        nMode = 'ins'
    else
        nMode = 'dup'
    if mode \== nMode then do
        call finishMode
        cMode = 0
        mode = nMode
        mFirst = m.cc.dbMbr m.cc.tst
        end
    cMode = cMode + 1
    mLast = m.cc.dbMbr m.cc.tst m.cc.cmd
    if cMode // 10000 = 0 then do
        call sqlCommit
        call preInsert 55
        say left('         ' time() mode cMode mLast, 78)
        end
    il = readNx(ii)
    end
call sqlCommit
call finishMode
say 'total' cIns 'inserts and' cDup 'duplicates'
exit

finishMode:
    if mode == '' then
        return
    say left(right(cMode, 7) mode mFirst mLast, 78)
    if mode == 'ins' then
        cIns = cIns + cMode
    else
        cDup = cDup + cMode
    return

preInsert: procedure expose m.
parse arg cx
    call sqlPrepare cx, 'insert into oa1p.tadmCmd' ,
                 'values(?, ?, ?, ?, ?, ?, ?, ?)'
    return
endProcedure preInsert

addCol: procedure expose m.
    m = 'COL'
    fy = m.m.0
    fx = fy + 1
    parse upper arg m.m.fx.col, m.m.fx.pos
    m.m.fx.len = ''
    if fy > 0 then do
        m.m.fy.len = m.m.fx.pos - m.m.fy.pos
        if m.m.fy.len < 1 then
            call err 'not ascending col' fy m.m.fy.col m.m.fy.pos ,
                                     '>' fx m.m.fx.col m.m.fx.pos
        end
    m.m.0 = fx
    return
endProcedure addCol

getCols: procedure expose m.
    parse arg to, li
    m = 'COL'
    t = ''
    do cx=1 to m.col.0 - 1
        c1 = m.m.cx.col
        m.to.c1 = strip(substr(li, m.m.cx.pos, m.m.cx.len))
        end
    c1 = m.m.cx.col
    m.to.c1 = strip(substr(li, m.m.cx.pos))
    m.to.tst = translate(m.to.date'-'m.to.time, '.' ,':')
    v1 = translate(m.to.verb)
    if symbol('m.a2v.v1') == 'VAR' then
         m.to.verb = m.a2v.v1
    else
         m.to.verb = v1
    return
endProcedure getCols
iniA2V: procedure expose m.
    m.a2v.f = 'MODIFY'
    m.a2v.p = 'STOP'
    v3 = ACCESS  ALTER   ARCHIVE CANCEL CHANGE DISPLAY MODIFY,
         RECOVER REFRESH START   STOP   TERM   TRACE
    do vx=1 to words(v3)
        k = left(word(v3, vx), 3)
        m.a2v.k = word(v3, vx)
        end
    return
endProcedure iniA2V

/* copy sql    begin ***************************************************
    sql interface
***********************************************************************/
/*--- initialize sqlRx (belongs to sqlQ, but currently only one|) ----*/
sqlIni: procedure expose m.
    if m.sql.ini == 1 then
        return
    m.sqlNull = '---'
    m.sqlInd = 'sqlInd'
    m.sqlRetOK.0 = 0
    m.sqlCAMsg = 0
    m.sqlSuMsg = 2
    call sqlPushRetOk
    m.sql.ini = 1
    m.sql.conType = ''
    m.sql.conSSID = ''
    return 0
endProcedure sqlIni

/*--- connect and/or disconnect to DB2 -------------------------------*/
sqlConnect: procedure expose m.
parse upper arg sys, retOk
    if sys \== '' then
        nop
    else if sysvar(sysnode) == 'RZ1' then
        sys = 'DBAF'
    else
        call err 'no default subsys for' sysvar(sysnode)
    call sqlOIni
    hst = ''
    if pos('/', sys) > 0 then do
        parse value space(sys, 0) with hst '/' sys
        cTy = 'Csm'
        end
    else do
        cTy = 'Rx'
        end
    if m.sql.conType == cTy & m.sqlHost==hst & m.sqlConSSID == sys then
        return 0
    if m.sql.conType \== '' then
        call sqlDisconnect
    res = 0
    if cTy = 'Rx' then
        res = sqlRxConnect(sys, retOk)
    if res < 0 then
        return res
    m.sql.conType = cTy
    m.sql.conhost = hst
    m.sql.conSSID = sys
    m.sql.connection = oNew('Sql'cTy'Connection')
    return res
endProcedure sqlConnect

sqlDisconnect: procedure expose m.
parse arg retOk
    if m.sql.conType == 'Rx' then
        call sqlRxDisconnect
    m.sql.conType = ''
    m.sql.conhost = ''
    m.sql.conSSID = ''
    return 0
endProcedure sqlDisonnect

/*--- execute a query from sql, with one resultset -------------------*/
sqlRxQuery: procedure expose m.
parse arg cx, src, retOk
     m.sql.cx.updateCount = ''
     m.sql.cx.resultSet   = ''
     m.sql.cx.needDesc    = 1
     res = sqlPrepare(cx, src, retOk, 1)
     if res < 0 then
         return res
     res = sqlExec('declare c'cx 'cursor for s'cx, retOk)
     if res < 0 then
         return res
     res = sqlExec('open c'cx, retOk)
     if res < 0 then
         return res
     call sqlRxFetchVars cx
     m.sql.cx.updateCount = sqlErrd.3
     m.sql.cx.resultSet = cx
     return res
endProcedure sqlRxQuery

/*--- fetch next row to m.dst.* at end return false ------------------*/
sqlRxFetch: procedure expose m.
parse arg cx, dst, retOk
    if retOk == '' then
        retOk = 100 m.sqlRetOk
    fetCode = sqlExec('fetch c'cx 'into' sqlRxFetchVars(cx), retOk)
    if fetCode == 100 then
        return 0
    if fetCode < 0 then
        return fetCode
    call sqlSetNull cx, dst
    return 1
endProcedure sqlRxFetch

/*--- close cursor 'c'cx ---------------------------------------------*/
sqlRxClose: procedure expose m.
parse arg cx, retOk
     return sqlExec('close c'cx, retOk)
endProcedure sqlRxClose

/*-- execute an sql with no resultset, but possibly outParms ---------*/
sqlRxUpdate: procedure expose m.
parse arg cx, src, retOk
    m.sql.cx.updateCount = ''
    m.sql.cx.resultSet   = ''
    bx = verify(src, '( ')
    if bx > 0 then
        fun = translate(word(substr(src, bx), 1))
    if  fun = 'SET' then do
        w2 = translate(word(substr(src, bx), 2))
        if \ abbrev(w2, ':') then
            return sqlExImm(src, retOk)
        trace ?r
        ex = pos('=', w2)
        if ex = 0 then
            ex = length(w2)+1
        var = strip(substr(w2, 2, ex-2))
        if var = '' then
            call err 'bad hostVar in' src
        m.sql.outVar = var
        src2 = 'set :M.sql.out.'var substr(w, ex) subword(src, 3)
        return sqlExec(src2, retOk)
        end
    if fun == 'DECLARE'  then do
        if 'GLOBAL' == translate(word(substr(src, bx), 2)) then
            return sqlExImm(src, retOk)
        end
    res = sqlExec(src, retOk)
    if wordPos(fun, 'DELETE INSERT UPDATE') > 0 then
        m.sql.cx.updateCount = sqlErrd.3
    return res
endProcedure sqlRxUpdate

/*-- execute a query, update or call ---------------------------------*/
sqlExecute: procedure expose m.
parse arg cx, src, retOk
    src = inp2Str(src, '-sql')
    f = translate(word(substr(src, max(verify(src, '( '), 1)), 1))
    m.sql.cx.fun = f
    if f == 'SELECT' | fun == 'WITH' then
        return sqlQuery(cx, src, retOk)
    else if f == 'CALL' then
        call err 'implement sql call for:' src
    else
        return sqlUpdate(cx, src, retOk)
endProcedure sqlExecute

/*-- execute a query, copy result to stem ----------------------------*/
sql2St: procedure expose m.
parse arg src, dst, retOk, type
    cx = sqlGetCursor()
    res = sqlQuery(cx, src, retOk, type)
    if res >= 0 then do
        do sx=1 while sqlFetch(cx, dst'.'sx)
           end
        res = sx-1
        end
    m.dst.0 = res
    call sqlClose cx
    call sqlFreeCursor cx
    return res
endProcedure sql2St

/*-- execute a query and return value of the first column
           if > 1 row fail, if 0 rows return arg(3) or fail ----------*/
sql2One: procedure expose m.
parse arg src, dst
    cx = sqlGetCursor()
    call sqlQuery cx, src
    if \ sqlFetch(cx, dst) then
        if arg() > 2 then
            return arg(3)
        else
            call err 'no row returned for:' src
    if sqlFetch(cx, dst.2) then
        call err '2 or more rows for' src
    c1 = m.sql.cx.col.1
    res = m.dst.c1
    call sqlClose cx
    call sqlFreeCursor cx
    return res
endProcedure sql2One

/*--- prepare statement 's'cx from sql src into descriptor desc ------*/
sqlPrepare: procedure expose m.
parse arg cx, src, ggRetOk, descOut
     s = ''
     src = inp2str(src, '%+Q\s')
     m.sql.cx.d.sqlD = 'noSqlDA'
     m.sql.cx.i.sqlD = 'noDescInp'
     m.sql.cx.fetchVars = ''
     m.sql.cx.col.0 = ''
     m.sql.cx.into = ''
     if descOut == 1 then
         s = 'into :M.SQL.'cx'.D'
     return sqlExec('prepare s'cx s 'from :src', ggRetOk)
endProcedure sqlPrepare

/*--- open cursor 'c'cx using arguments arg(2), arg(3)... ------------*/
sqlOpen: procedure expose m.
parse arg cx
    if arg() <=  1 then
        return sqlExec('open c'cx)
    call sqlDescribeInput cx
    do ix=1 to arg()-1
        call sqlDASet cx , 'I', ix, arg(ix+1)
        end
    return sqlExec('open c'cx 'using descriptor :M.SQL.'cx'.I')
endProcedure sqlOpen

/*--- execute a prepared statement with arg(2), arg(3)... ------------*/
sqlRxExecute: procedure expose m.
parse arg cx retOk
    if arg() <=  1 then
        return sqlExec('execute s'cx, retOk)
    call sqlDescribeInput cx
    do ix=1 to arg()-1
        call sqlDASet cx , 'I', ix, arg(ix+1)
        end
    return sqlExec('execute s'cx 'using descriptor :M.SQL.'cx'.I',
                   , retOk)
endProcedure
/*--- describe output (if not already done)
         and return size of sqlDa ------------------------------------*/
sqlDescribeOutput: procedure expose m.
parse arg cx, force
    if force == 1 | \ datatype(m.sql.cx.d.sqlD, 'n') then
         call sqlExec 'describe s'cx 'into :M.SQL.'cx'.D', 0
    return m.sql.cx.d.sqlD
endProcedure sqlDescribeOutput

/*--- describe input (if not already done)
         and return size of input sqlDA ------------------------------*/
sqlDescribeInput: procedure expose m.
parse arg cx, force
    if force == 1 | \ datatype(m.sql.cx.i.sqlD, 'n') then
         call sqlExec 'describe input s'cx 'into :M.SQL.'cx'.I'
    return m.sql.cx.i.sqlD
endProcedure sqlDescribeInput

/*--- put sqlNull in all vars where indicator says so ---------------*/
sqlSetNull: procedure expose m.
    parse arg cx, dst
    do nx=1 to m.sql.cx.sqlNull.0
        col = m.sql.cx.sqlNull.nx
        if m.dst.col.sqlInd < 0 then
            m.dst.col = m.sqlNull
        end
    return
endProcedure sqlSetNull

/*--- use describe output to generate column names,
                fetchVariables and sqlNull names ---------------------*/
sqlRxFetchVars: procedure expose m.
parse arg cx
    if m.sql.cx.fetchVars \== '' then
        return m.sql.cx.fetchVars
    call sqlDescribeOutput cx
    f = m.sql.cx.type
    if f \== '' then do
        f = f'.FLDS'
        if m.f.0 < m.sql.cx.d.sqlD then
            call err 'not enough column names'
        end
    m.sql.cx.col.0 = m.sql.cx.d.sqlD
    nx = 0
    vars = ''
    do kx=1 to m.sql.cx.d.sqlD
        cn = sqlVarName(f, kx, m.sql.cx.d.kx.sqlName)
        m.sql.cx.col.kx = cn
        vars = vars', :m.dst.'cn
        if m.sql.cx.d.kx.sqlType // 2 = 1 then do
            vars = vars' :m.dst.'cn'.sqlInd'
            nx = nx + 1
            m.sql.cx.sqlNull.nx = cn
            end
        end
    m.sql.cx.sqlNull.0 = nx
    m.sql.cx.fetchVars = substr(vars, 3)
    return m.sql.cx.fetchVars
endProcedure sqlRxFetchVars

sqlVarName: procedure expose m. sqlVarName.
parse arg f, kx, sNa
    if f == '' then do
        cn = translate(word(sNa, 1))
        if cn == '' | symbol('sqlVarName.cn') == 'VAR' then
                cn = 'COL'kx
        sqlVarName.cn = 1
        return cn
        end
    else do
        if m.f.kx == '' then
            call err 'implement empty varName'
        return substr(m.f.kx, 2)
        end
endProcedure sqlVarName
/*--- set one value in a DA, handle nulls ----------------------------*/
sqlDASet: procedure expose m.
parse arg cx, da, ix, val
    m.sql.cx.da.ix.sqlData = val
    m.sql.cx.da.ix.sqlInd = - (val == m.sqlNull)
    /* data types schienen einmal nicht zu funktionieren .......
    if wordPos(m.da.ix.sqlType, '384 385 388 389 392 393') > 0 then
        m.da.ix.sqlType = 448 + (m.da.ix.sqlType // 2) */
    return
endProcedure sqlDASet

sqlExImm:
parse arg ggSrc, ggRetOk
     return sqlExec('execute immediate :ggSrc', ggRetOk)
endProcedure sqlExImm

sqlCommit: procedure expose m.
parse arg src
     return sqlExec('commit')
endProcedure sqlCommit

/*--- execute sql thru the dsnRexx interface -------------------------*/
sqlExec: /* no procedure, to keep variables sql... */
    parse arg ggSqlStmt, ggRetOk
    address dsnRexx 'execSql' ggSqlStmt
    /* say 'sqlCode' sqlCode 'rc' rc 'for' ggSqlStmt ggNo */
sqlHandleRCSqlCode:
    if rc = 0 then
        return 0
    if ggRetOk = '' then
        ggRetOk = m.sqlRetOk
    if wordPos(rc, '1 -1') < 0 then
        call err 'dsnRexx rc' rc sqlmsg()
    else if pos('*', ggRetOk) > 0 | wordPos(sqlCode, ggRetOk) > 0 ,
            then do
        if sqlCode < 0 & pos('say', ggRetOk) > 0 then
            say 'sqlError' sqlmsg()
        return sqlCode
        end
    else if rc < 0 then
        call err sqlmsg()
/*???lse if sqlCode <> 0 | (pos('w',ggRetOk)<1 & sqlWarn.0^==' ') then*/
    else if (sqlCode <> 0 | sqlWarn.0^==' ') & pos('w',ggRetOk)<1 then
        call errSay sqlMsg(), ,'w'
    return sqlCode
endSubroutine sqlExec

/*--- connect to the db2 subsystem sys -----------------------------*/
sqlRxConnect: procedure expose m.
parse upper arg sys, ggRetOk
    call sqlIni
    address tso "SUBCOM DSNREXX"
    if rc <> 0 then do
       sRc = RXSUBCOM('ADD','DSNREXX','DSNREXX') /* ADD HOST CMD ENV  */
       if sRc <> 0 then
           call err 'rc' sRc 'from RXSUBCOM(ADD, DSNREXX, DSNREXX)'
       end
    if sys = '-' then
        return 0
    m.sql.conSSID = sys
    ggSqlStmt =  'connect' sys
    address dsnRexx ggSqlStmt
    return sqlHandleRcSqlCode()
endProcedure sqlRxConnect

/*--- diconnect from db2 ---------------------------------------------*/
sqlRxDisconnect: procedure expose m.
parse arg retOk
    ggSqlStmt =  'disconnect'
    m.sql.conSSID = ''
    address dsnRexx ggSqlStmt
    return sqlHandleRcSqlCode()
endProcedure sqlDisconnect

/*--- send a command to db2 through the TSO dsn processor ------------*/
sqlDsn: procedure expose m.
parse arg st, sys, cmd, rcOk
    x = outtrap('M.'st'.')
    push 'END'
    push cmd
    address tso 'DSN SYSTEM('sys')'
    rr = rc
    x = outtrap(off)
    if rr = 0 | rcOk = '*' | wordPos(rr, rcOk) > 0 then
        return rr
    fl = max(1, m.st.0 - 10)
    em = 'rc' rr 'for DSN SYSTEM('sys') cmd' cmd,
          '\nOuputlines' fl '-' m.st.0':'
    do lx=fl to m.st.0
        em = em '\n' strip(m.st.lx, 't')
        end
    call err em
endProcedure sqlDsn
/*--- push and pop currently accepted sqlCodes -----------------------*/
sqlPushRetOk: procedure expose m.
parse arg rr
    nx = m.sqlRetOk.0 + 1
    m.sqlRetOk.0 = nx
    m.sqlRetOk.nx = rr
    m.sqlRetOk    = rr
    return
endProcedure sqlPushRetOk

sqlPopRetOk: procedure expose m.
    nx = m.sqlRetOk.0 - 1
    if nx < 1 then
        call err 'sqlPopRetOk with .0' m.sqlRetOk.0
    m.sqlRetOk    = m.sqlRetOk.nx
    m.sqlRetOk.0 = nx
    return
endProcedure sqlPopRetOk

/*--- issue an sql error message -------------------------------------*/
sqlMsg: /* no procedure, to keep variables sql... */
    if \ dataType(sqlCode, 'n') then do
        ggRes = 'sqlCode' sqlCode 'not numeric\n'sqlCaMsg()
        end
    else do
        ggRes = sqlDsntiar(sqlRx2CA())
        ggWa = sqlMsgWarn()
        if ggWa \= '' then
            ggRes = ggRes'\nwarnings' ggWa
        if m.sqlCAMsg == 1 then
           ggRes = ggRes'\n'sqlCaMsg()'\n'sqlCaMsg(sqlCa2Rx(sqlCa))
        end
    ggSt = 'SQL.HOST'
    ggVa = 'SQL.HOST.VAR'
    ggBe = 'SQL.HOST.BEF'
    call sqlHostVars ggSqlStmt, 12, ggSt
    if datatype(sqlErrd.5, 'n') & sqlErrd.5 > 0 then do
        ggW1 = translate(word(ggSqlStmt, 1))
        ggW2 = translate(word(ggSqlStmt, 2))
        if ggW1 == 'PREPARE' then
            ggVV = sqlHostVarFind(ggSt, 'FROM')
        else if ggW1 ggW2 == 'EXECUTE IMMEDIATE' then
            ggVV = sqlHostVarFind(ggSt, 1)
        else
            ggVV = ''
        if ggVV == '' then
            ggRes = ggRes || sqlMsgSrcPos(ggSqlStmt, sqlErrd.5)
        else
            ggRes = ggRes || sqlMsgSrcPos(value(ggVV), sqlErrd.5)
        end
    ggRes = ggRes'\nstmt =' ggSqlStmt
    ggPref = '\nwith'
    do ggXX=1 to m.ggSt.0
        ggRes = ggRes || ggPref m.ggBe.ggXX ':'m.ggVa.ggXX ,
                      '=' value(m.ggVa.ggXX)
        ggPref = '\n    '
        end
    if m.sqlSuMsg == 1 | (m.sqlSuMsg == 2 & m.sql.conHost \== '') then
        ggRes = ggRes'\nsubsys =' ,
                if(m.sql.conHost=='',,m.sql.conHost'/'),
                || m.sql.conSSID', interfaceType' m.sql.conType
    return  ggRes
endSubroutine sqlMsg

/*--- use dsnTiar to translate sql Info to error text ----------------*/
sqlDsnTiar: procedure expose m.
parse arg ca
    if -438  = sqlCa2Rx(ca) then
        return '\nSQLCODE = -438:',
           'APPLICATION RAISED ERROR WITH sqlState' sqlState ,
           'and DIAGNOSTIC TEXT:' sqlErrMc
    liLe = 78
    msLe = liLe * 10
    msg = d2c(msLe,2) || left('', msLe)
    len = d2c(liLe, 4)
    ADDRESS LINKPGM "DSNTIAR ca msg len"
    if rc <> 0 then
        call err 'linkPgm dsnTiar rc' rc 'sqlCa' ca
    res = strip(substr(msg, 13, liLe-10))
    cx = pos(', ERROR: ', res)
    if cx > 0 then
        res = left(res, cx-1)':' strip(substr(res, cx+9))
    do c=3+liLe by liLe to msLe while substr(msg, c, 10) = ''
            res = res'\n    'strip(substr(msg, c+10, liLe-10))
        end
    return res
endProcedure sqlDsnTiar

/*--- format all rexx sqlCa fields into a message --------------------*/
sqlCaMsg:
    return 'sqlCode' sqlCode 'sqlState='sqlState                    ,
           '\n    errMC='translate(sqlErrMc, ',', 'ff'x)            ,
           '\n    warnings='sqlWarnCat('+') 'erP='sqlErrP           ,
           '\n    errD.1='sqlErrD.1 '2='sqlErrD.2 '3='sqlErrD.3     ,
           '\n    errD.4='sqlErrD.4 '5='sqlErrD.5 '6='sqlErrD.6
endProcedure sqlCaMsg

/*--- format the sqlCA into the dsnTiar SQLCA ------------------------*/
sqlRx2Ca:
    if \ (datatype(sqlcode, 'n') & datatype(sqlErrD.1, 'n') ,
                                 & datatype(sqlErrD.3, 'n')) then
        return err('sqlCode etc. not numeric\nsqlCa =' sqlCaMsg())
    if digits() < 10 then
        numeric digits 10
    sqlCa = 'SQLCA   ' || d2c(136, 4) || d2c(sqlCode, 4) ,
            || d2c(min(70, length(sqlErrMc)), 2)left(sqlErrMc, 70) ,
            || left(sqlErrP, 8) ,
            || d2c(sqlErrD.1, 4)d2c(sqlErrD.2, 4)d2c(sqlErrD.3, 4) ,
            || d2c(sqlErrD.4, 4)d2c(sqlErrD.5, 4)d2c(sqlErrD.6, 4) ,
            || sqlWarnCat() || sqlState
    if length(sqlCa) <> 136 then
        call err 'sqlCa length' length(sqlCa) 'not 136' ,
                 '\n'sqlCaMsg() '==>'  ca', hex='c2x(ca)
    return sqlCa
endProcedure sqlRx2Ca

/*--- extract the fields from the SqlCA and put it to rexx vars ------*/
sqlCA2Rx: procedure expose m. ,
       sqlCode sqlErrMc sqlErrP sqlErrD. sqlWarn. sqlState
parse arg ca
    numeric digits 10
    if length(ca) < 136 | c2d(substr(ca, 9, 4), 4) <> 136 then
        call err 'bad sqlCa len' length(ca) 'not 136:' ca', hex='c2x(ca)
    sqlCode  = c2d(substr(ca, 13 ,4), 4)
    sqlErrMC = substr(ca, 19, c2d(substr(ca, 17, 2), 2))
    sqlErrP  = substr(ca, 89, 8)
    do ix=1 to 6
        sqlErrD.ix = c2d(substr(ca, 93 + 4 * ix, 4), 4)
        end
    do ix=0 to 10
        sqlWarn.ix = substr(ca, 121 + ix, 1)
        end
    sqlState = substr(ca, 132, 5)
    return sqlCode
endProcedure sqlCA2Rx

/*--- concat the sql warnings with Separator sep --------------------*/
sqlWarnCat: procedure expose m. sqlWarn.
parse arg sep
    return sqlWarn.0 || sep,
        || sqlWarn.1||sqlWarn.2||sqlWarn.3||sqlWarn.4||sqlWarn.5||sep ,
        || sqlWarn.6||sqlWarn.7||sqlWarn.8||sqlWarn.9||sqlWarn.10||sep
endProcedure sqlWarnCat

/*--- make the text for sqlWarnings ----------------------------------*/
sqlMsgWarn: procedure expose m. sqlWarn.
     r = ''
     text =' 1=W var truncated, 1=S scrollable, 1=N nonScrollable,'  ,
            '2=W nulls in aggregate,'                                ,
            '3=W more cols than vars,'                               ,
                             '3=Z more result sets than locators,'   ,
            '4=W no where, 4=D sensitive dynamic, 4=I insensitive,'  ,
                          '4=S sensitive static,'                    ,
            '5=W not valid sql, 5=1 readOnly, 5=2 readDelete,'       ,
                          '5=3 readDeleteUpdate,'                    ,
            '6=W day changed to month range,'                        ,
            '7=W dec digits truncated,'                              ,
            '8=W char substituted,'                                  ,
            '9=W arith excep in count, 9=Z multipe result sets,'     ,
            '10=W char conversion err in ca,'
     do wx = 1 to 10
         w = sqlWarn.wx
         if w = ' ' then
             iterate
         t = wx'='w
         cx = pos(' 'wx'='w' ', text)
         ex = pos(','         , text, cx + 1)
         if cx > 0 & ex > cx then
             r = r substr(text, cx+1, ex-cx)
         else
             r = r wx'='w '?,'
         end
     r = strip(r, 't', ',')
     if r = '' & sqlwarn.0 <> '' then
        call err 'sqlWarn.0='sqlWarn.0 'but all warns empty'
     return r
endProcedure sqlMsgWarn

/*--- show in the source src the point pos  (where error occured)
          a few lines from src around pos and arrow to pos ----------*/
sqlMsgSrcPos: procedure expose m.
parse arg src, pos
    liLe = 68
    liCn = 3
    afLe = 25
    t1 = space(left(src, pos), 1)
    t2 = left(' ', substr(src, pos, 1) == ' ' ,
                 | substr(src, pos+1, 1) == ' ') ,
         || space(substr(src, pos+1), 1)
    afLe = min(afLe, length(t2))
    if length(t1) + afLe > liLe * liCn then
        t1 = '...'right(t1, liLe * liCn - afLe -3)
    else if length(t1)+length(t2) > liLe then
        t1 = left(' ', (liCn * liLe - length(t1) -afLe) // liLe)||t1
    pL = length(t1) // liLe
    if length(t2) <= liLe-pL then
        tx = t1 || t2
    else
        tx = t1 || left(t2, liLe-pL-3)'...'
    res = '\nsrc' strip(substr(tx, 1, liLe), 't')
    do cx=1+liLe by liLe to length(tx)
        res = res || '\n  +' strip(substr(tx, cx, liLe), 't')
        end
    loc = 'pos' pos 'of' length(src)
    if length(loc)+6 < pL then
        return res'\n  >' right('>>>'loc'>>>', pL)
    else
        return res'\n  >' left('', pL-1)'<<<'loc'<<<'
endProcdedure sqlMsgSrcPos

/*--- get the hostVars in the sql in src and the word before ---------*/
sqlHostVars: procedure expose m.
parse arg src, cnt, st
    cx = 1
    sx = 0
    do cnt
        cx = pos(':', src, cx) + 1
        if cx < 2 then
           leave
        if pos(substr(src, cx, 1), m.mAlfRex1) < 1 then
            iterate
        ex = verify(src, m.mAlfRexR, 'n', cx)
        if ex - cx > 100 then
            iterate
        sx = sx + 1
        if ex < 1 then
            m.st.var.sx = substr(src, cx)
        else
            m.st.var.sx = substr(src, cx, ex - cx)
                       /* search word before */
        do bE = cx-2 by -1 to 1 ,
                while substr(src, bE, 1) == ' '
            end
        do bB = bE by -1 to max(1, bE-20),
                while pos(substr(src, bB, 1), m.mAlfa) > 0
            end
        if bB < bE & bB >= 0 then
            m.st.bef.sx = substr(src, bB+1, bE-bB)
        else
            m.st.bef.sx = ''
        end
    m.st.0 = sx
    return sx
endProcedure sqlHostVars

/*--- find the name of hostvar, by index or by before ----------------*/
sqlHostVarFind: procedure expose m.
parse arg st, fnd
    if datatype(fnd, 'n') & fnd <= m.st.0 then
        return m.st.var.fnd
    do ix=1 to m.st.0
        if translate(m.st.bef.ix) = fnd then
            return m.st.var.ix
        end
    return ''
endSubroutine sqlHostVarFind
/* copy sql    end   **************************************************/
/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
    parse arg ggTsoCmd, ggRet
    address tso ggTsoCmd
    if rc == 0                     then return 0
    else if ggRet == '*'           then return rc
    else if wordPos(rc, ggRet) > 0 then return rc
    else
        call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */

/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure expose m.
parse upper arg dsn ., addPrefix
    if left(dsn,1) = "'" then
        return strip(dsn, 'b', "'")
    sp = sysvar('SYSPREF')
    if sp == '' then
        sp = userid()
    cx = pos('~', dsn)
    if cx < 1 & addPrefix == 1 then
        return sp'.'dsn
    do while cx \== 0
        le = left(dsn, cx-1)
        ri = substr(dsn, cx+1)
        if right(le, 1) == '.' | left(ri, 1) == '.' then
            dsn = le || sp || ri
        else
            dsn = le || left('.', le \== '') || sp ,
                     || left('.', ri \== '') || ri
        cx = pos('~', spec, cx)
        end
    return dsn
endProcedure dsn2Jcl

/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure expose m.
parse arg dsn .
    return "'"dsn"'"
endProcedure jcl2dsn

dsnSetMbr: procedure expose m.
parse arg dsn, mbr
     bx = pos('(', dsn)
     if bx > 0 then
         dsn = strip(left(dsn, bx-1))
     if mbr <> '' then
         dsn = dsn'('strip(mbr)')'
     return dsn
endProcedure dsnSetMbr

dsnGetMbr: procedure expose m.
parse arg dsn
     lx = pos('(', dsn)
     rx = pos(')', dsn, lx+1)
     if lx < 1 then
         return ''
     else if lx < rx then
         return substr(dsn, lx+1, rx-lx-1)
     else
         return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
    io: read or write a dataset with the following callsequences:
        read:  readDDBegin, readDD*,  readDDEnd
        write: writeBegin,  writeDD*, writeEnd

        readDD returns true if data read, false at eof
***********************************************************************/

/*--- prepare reading from a DD --------------------------------------*/
readDDBegin: procedure expose m.
    parse upper arg ggDD
    call errAddCleanup 'call readDDEnd' ggDD', "*"'
return /* end readDDBegin */

/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt = '' then
        ggCnt = 100
    call adrTso 'execio' ggCnt 'diskr' ggDD '(stem' ggSt')', 2
    return (value(ggSt'0') > 0)
return /* end readDD */

/*--- finish reading DD  ggDD ----------------------------------------*/
readDDEnd: procedure expose m.
    parse upper arg ggDD, ggRet
    call errRmCleanup 'call readDDEnd' ggDD', "*"'
    return adrTso('execio 0 diskr' ggDD '(finis)', ggRet)
endProcedure readDDEnd

/*--- prepare writing to DD ggDD -------------------------------------*/
writeDDBegin: procedure expose m.
    parse upper arg ggDD
                  /* ensure file is erased, if no records are written */
    call adrTso 'execio' 0 'diskw' ggDD '(open)'
    call errAddCleanup 'call writeDDEnd' ggDD', "*"'
return /* end writeDDBegin */

/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    call adrTso 'execio' ggCnt 'diskw' ggDD '(stem' ggSt')'
    return
endSubroutine writeDD

/*--- end writing to dd ggDD (close) --------------------------------*/
writeDDEnd: procedure expose m.
parse upper arg ggDD, ggRet
    call errRmCleanup 'call writeDDEnd' ggDD', "*"'
    return adrTso('execio 0 diskw' ggDD '(finis)', ggRet)
endProcedure writeDDEnd

/*--- readNx: read next line, using buffer ---------------------------*/
/*--- begin: allocate dsnSpec and ini ------------------------ -------*/
readNxBegin: procedure expose m.
    parse arg m, m.m.dsn, m.m.dd, m.m.Cnt
    if m.m.dd = '' then
        m.m.dd = 'DDNX'
    if m.m.cnt = '' then
        m.m.cnt = 1000
    m.m.cx = m.m.cnt + 999
    m.m.buf0x = 0
    m.m.0 = 0
    m.m.free = subword(dsnAlloc('dd('m.m.dd')' m.m.dsn), 2)
    call readDDBegin m.m.dd
    return m
endProcedure readDDNxBegin

/*--- return the stem of the next line, or '' at end -----------------*/
readNx: procedure expose m.
parse arg m
    m.m.cx = m.m.cx + 1
    if m.m.cx <= m.m.0 then
        return m'.'m.m.cx
    m.m.buf0x = m.m.buf0x + m.m.0
    if \ readDD(m.m.dd, 'M.'m'.', m.m.cnt)then
        return ''
    m.m.cx = 1
    return m'.1'
endProcedure readDDNx
/*--- return the stem of the curr line, '' at end --------------------*/
readNxCur: procedure expose m.
parse arg m
    if m.m.cx <= m.m.0 then
        return m'.'m.m.cx
    else
        return ''
endProcedure readNxCur

/*--- return the position (line number) of reader
           plus le characters of the current line (default 50) ------*/
readnxPos: procedure expose m.
parse arg m, le
    li = m'.'m.m.cx
    li = strip(m.li, 't')
    if arg() < 2 then
        le = 50
    if le < 1 then
        li = ''
    else if length(li) <= le then
        li = ':' li
    else
        li = ':' left(li, le-3)'...'
    return 'line' (m.m.buf0x + m.m.cx)li
endProcedure readnxPos

/*--- close and deallocate ------------------------------------------*/
readNxEnd: procedure expose m.
parse arg m
    call readDDEnd m.m.dd
    interpret m.m.free
    return
endProcedure readDDNxEnd

/*--- standardise a dsn spec
       word1             dsName or -
       word2             dd     or -
       word3             disp   or -
       word4 to first :  attributes in tso format
       after first :     attributes for new allocation
----------------------------------------------------------------------*/
dsnSpec: procedure expose m.
parse upper arg spec
    rr = ''      /* put leading - in separate words */
    do sx=1 while words(rr) < 3 & wx \= ''
        wx = word(spec, sx)
        do while abbrev(wx, '-') & words(rr) < 3
            wx = substr(wx, 2)
            rr = rr '-'
            end
        rr = rr wx
        end
    spec = rr subWord(spec, sx)
    na = ''
    dd = ''
    di = ''
    if left(spec, 1) = '&' then /* external spec is handled ok */
        spec = strip(substr(spec, 2))
    do wx=1 by 1
        w = word(spec, wx)
        if w = '' | abbrev(w, '.') | abbrev(w, ':') then
            leave
        else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
            di = w
        else if w = 'CATALOG' then
            di = di w
        else if abbrev(w, 'DD(') then
            dd = substr(w, 4, length(w)-4)
        else if abbrev(w, 'DSN(') then
            na = strip(substr(w, 5, length(w)-5))
        else if na == '' then
            na = dsn2jcl(w)
        else if dd == '' then
            dd = w
        else if di == '' then
            di = w
        else
            leave
        end
    if na == '' then
        na = '-'
    else if abbrev(na, "'") then
        na = substr(na, 2, length(na)-2)
    if dd == '' then dd = '-'
    if di == '' then di = '-'
    re = subword(spec, wx)
    if abbrev(re, '.') then
        re = substr(re, 2)
    return na dd di re
endProcedure dsnSpec

/*--- alloc a dsn with dsnAlloc
          if the dsn is inuse wait and retry
          until either the allocation is successfull
          or the timeout occurs --------------------------------------*/
dsnAllocWait: procedure expose m.
parse upper arg spec, pDi, pDD, timeOut
    x = max(1, arg() - 1)
    do rt=0
        m.adrTsoAl.1 = ''
        m.adrTsoAl.2 = ''
        m.adrTsoAl.3 = ''
        call outtrap m.adrTsoAl.
        res = dsnAlloc(spec, pDi, pDD, '*')
        call outtrap off
        if \ abbrev(res, ' ') then
            return res
        msg = m.adrTsoAl.1'\n'm.adrTsoAl.2'\n'm.adrTsoAl.3
        if rt > timeOut & timeOut \== '' then
            return err('timeout allocating' spec time() '\n'msg)
        if pos('DATA SET IS ALLOCATED TO ANOTHER', msg) < 1 then
            return err('allocating' spec'\n'msg)
        say time() 'sleep and retry alloc' spec
        call sleep 1, 0
        end
endProcedure dsnAllocWait

/*--- alloc a dsn or a dd
          spec '-'<ddName>
               datasetName? disposition? '.'? attributes? (':' newAtts)?
          disp default disposition
          dd   default dd name
          retRc   erlaubte ReturnCodes (leer = 0)
          returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, pDi, pDD, retRc
    parse value dsnSpec(spec) with na dd di rest
    if na = '-' then
        m.dsnAlloc.dsn = ''
    else
        m.dsnAlloc.dsn = na
    if na == '-' & dd \== '-' & di == '-' & rest = '' then
        return dd
    if dd == '-' & pDD \== '' then
        dd = pDD
    if dd == '-' then do
        if symbol('m.adrTso.ddNum') = 'VAR' then
            dd = m.adrTso.ddNum + 1
        else
            dd = 1
        m.adrTso.ddNum = dd
        dd = 'DD' || dd
        end
    if di = '-' & pDi \== '' then
        di = pDi
    if di = '-' then
        di = 'SHR'
    else if pos('(', na) < 1 then
        nop
    else if di = 'MOD' then
        call err 'disp mod for' na
    else
        di = 'SHR'
    if pos('/', na) > 0 then
        return csmAlloc(na dd di rest, retRc)
    else
        return tsoAlloc(na dd di rest, retRc)
endProcedure dsnAlloc

tsoAlloc: procedure expose m.
parse arg na dd disp rest ':' nn, retRc
    c = 'alloc dd('dd')' disp
    if na \== '-' then
        c = c "DSN('"na"')"
    else if disp = 'NEW' and nn \== '' then
        c = c dsnCreateAtts(,nn)
    call outtrap m.adrTsoAl.
    alRc = adrTso(c rest, '*')
    call outtrap off
    if alRc =  0 then do
        call errAddCleanup 'call tsoFree' dd', "*"'
        return dd 'call tsoFree' dd';'
        end
    if nn \= '' & wordPos(disp, 'OLD SHR') > 0 ,
          & sysDsn("'"m.dsnAlloc.dsn"'") == 'DATASET NOT FOUND' then do
        say 'tsoAlloc creating' c rest ':'nn
        call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(na, nn)
        call adrTso 'free  dd('dd')'
        return tsoAlloc(na dd disp rest, retRc)
        end
    do ax=1 to m.adrTsoAl.0
        say m.adrTsoal.ax
        end
    if retRc = '*' | wordPos(alRc, retRc) > 0 then
        return ' ' alRc
    call err 'tsoAlloc rc' alRc 'for' c rest
endProcedure tsoAlloc

tsoAtts: procedure expose m.
parse arg dsn
    rc = listDsi("'"dsn"' SMSINFO")
    if rc = 0 then
        mv = ''
    else if rc = 4 & sysReason = 19 then do
        mv = 'UNITCNT(30)'
        say 'multi volume' mv
        end
    else if rc ^= 0 then
        call err 'listDsi rc' rc 'reason' sysReason,
                             sysMsgLvl1 sysMsgLvl2
    al = 'CAT'
    al = ''
    if right(sysDsSms, 7) == 'LIBRARY' ,
        | abbrev(sysDsSms, 'PDS') then
         al = al 'DSNTYPE(LIBRARY)'
    if sysUnits = 'TRACK' then
        sysUnits = 'TRACKS'
    al = al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
        "DATACLAS("sysDataClass")" ,
        "RECFM("translate('1 2 3', ' 'sysREcFM, ' 123')")",
        "LRECL("SYSLRECL")",
        "blksize("sysBLkSIZE")",
        "SPACE("sysPrimary"," sysSeconds")" sysUnits mv
    return al
endProcedure tsoAtts

tsoFree: procedure expose m.
parse arg dd, ggRet
    call adrTso 'free dd('dd')', ggRet
    call errRmCleanup 'call tsoFree' dd', "*"'
    return
endProcedure tsoFree

dsnCreateAtts: procedure expose m.
parse arg dsn, atts, forCsm
    forCsm = forCsm == 1
    aU = ' 'translate(atts)
    if abbrev(atts, ':') then do
        parse var atts a1 atts
        bl = 32760
        rl = substr(a1, 3)
        if abbrev(a1, ':F') then do
            if rl = '' then
                rl = 80
            recfm='f b'
            bl = bl - (bl // rl)
            end
        else do
            if rl = '' then
                rl = bl-4
            recfm = substr(a1, 2, 1) 'b'
            end
        if forCsm then
            atts =  atts "recfm("space(recfm, 0)") lrecl("rl")",
                    "blkSize("bl")"
        else
            atts = atts "recfm("recfm") lrecl("rl") block("bl")"
        end
    if pos('(', dsn) > 0 & pos(' DSNTYPE(', aU) < 1 ,
                         & pos(' DSORG(',   aU) < 1 then
        atts = atts 'dsntype(library) dsorg(po)'
    if pos(' MGMTCLAS(', aU) < 1 then
        atts = atts 'mgmtclas(COM#A091)'
    if pos(' SPACE(', aU) < 1 then
        if forCsm then
            atts = atts 'space(10, 1000) cylinder'
        else
            atts = atts 'space(10, 1000) cyl'
    if dsn == '' then
       return atts
    return "dataset('"dsnSetMbr(dsn)"')" atts
endProcedure dsnCreateAtts

/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
    ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
    call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
    interpret subword(ggAlloc, 2)
    return
endSubroutine readDsn

/*--- write the dataset specified in ggDsnSpec from stem ggSt
          write ggCnt records if not empty otherwise ggst0
          if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
    call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
            '(stem' ggSt 'open finis)'
    interpret subword(ggAlloc, 2)
    if ggSay == 1 | m.debug == 1 then
       say ggCnt 'records written to' ggDsnSpec
    return
endSubroutine writeDsn

copyDSN: procedure expose m.
parse arg frSpec, toSpec, ggSay
    frDD = dsnAlloc(frSpec, 'SHR', 'FRDD')
    toDD = dsnAlloc(toSpec, 'OLD', 'TODD')
    call readDDBegin word(frDD, 1)
    call writeDDBegin word(toDD, 1)
    cnt = 0
    do while readDD(word(frDD, 1), r.)
        call writeDD word(toDD, 1), r.
        cnt = cnt + r.0
        end
    call readDDEnd word(frDD, 1)
    call writeDDEnd word(toDD, 1)
    interpret ';' subword(frDD, 2) '; ; ;' subword(toDD, 2)
    if ggSay == 1 | m.debug == 1 then
       say cnt 'records copied from' frSpec 'to' to toSpec
    return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
/* copy ut begin  *****************************************************/
/*--- if function  warning all3 arguments get evaluated|
                   e.g if(x=0, 'infinity', 1/0) will fail| -----------*/
if: procedure expose m.
parse arg co, ifTrue, ifFalse
    if co then
        return ifTrue
    else
        return ifFalse
endProcedure if
/*--- embedded ASSignement:
      assign the second argument to the variable with name in first arg
      and return the value assigned ----------------------------------*/
ass:
    call value arg(1), arg(2)
    return arg(2)
/*--- embedded ASSignement only if NotNull:
      assign the second argument to the variable with name in first arg
      if the second arg is not null, return new value ---------------*/
assIf:
    if arg(2) == '' then
        return value(arg(1))
    call value arg(1), arg(2)
    return arg(2)

/*--- return first nonNull argument ---------------------------------*/
nn:
    if arg(1) \== '' then
        return arg(1)
    if arg(2) \== '' then
        return arg(2)
    call err 'nn() both args empty'

/*--- embedded ASSignement return NotNull:
      assign the second argument to the variable with name in first arg
      and return 1 if value not null, 0 if null ----------------------*/
assNN:
    call value arg(1), arg(2)
    return arg(2) \== ''

/*--- return current time and cpu usage ------------------------------*/
timing: procedure expose m.
return return time() 'ela='time('E') 'cpu='sysvar('syscpu'),
            'su='sysvar('syssrv')

timingTest: procedure expose m.
    say 'begin' timing()  sysvar('sysnode')
    do 30000000
       end
    say 'end  ' timing()
return

/*--- sleep several seconds ------------------------------------------*/
sleep: procedure expose m.
parse arg secs, sayIt
    if sayit <> 0 then
        say 'sleeping' secs 'secs' time()
    CALL SYSCALLS 'ON'
    ADDRESS SYSCALL "sleep" secs
    CALL SYSCALLS 'OFF'
    if sayit <> 0 then
        say 'slept' secs 'secs' time()
    return
endProcedure sleep

/*--- elongate inp with spaces up to given len -----------------------*/
elong: procedure expose m.
parse arg inp, len
    if length(inp) >= len then
        return inp
    return left(inp, len)
endProcedure elong

/*--- quote string txt using quoteChar qu ("""" ==> ") ---------------*/
quote: procedure expose m.
parse arg txt, qu
    if qu = '' then
        qu = '"'
    res = qu
    ix = 1
    do forever
        qx = pos(qu, txt, ix)
        if qx = 0 then
            return res || substr(txt, ix) || qu
        res = res || substr(txt, ix, qx-ix) || qu || qu
        ix = qx + length(qu)
        end
endProcedure quote

/*--- return the count of occurrences of needle in heyStack ----------*/
posCount: procedure expose m.
parse arg needle, hayStack, start, fin
    if start = '' then
        start = 1
    if fin = '' then
        fin = length(hayStack) + 1 - length(needle)
    do cnt = 0 by 1
        start = pos(needle, haystack, start)
        if start < 1 | start > fin then
             return cnt
        start = start + length(needle)
        end
endProcedure posCount

repAll: procedure expose m.
parse arg src, w, new
    res = ''
    cx = 1
    do forever
        nx = pos(w, src, cx)
        if nx < 1 then
            return res || substr(src, cx)
        res = res || substr(src, cx, nx-cx) || new
        cx = nx + length(w)
        end
endProcedure repAll

repAllWords: procedure expose m.
parse arg src, w, new
    res = ''
    wx = 0
    cx = 1
    do forever
        wx = wordPos(w, src, wx+1)
        if wx < 1 then
            return res || substr(src, cx)
        nx = wordindex(src, wx)
        res = res || substr(src, cx, nx-cx) || new
        cx = nx + length(w)
        end
endProcedure repAllWords
/* copy ut end ********************************************************/
/* copy err begin ******************************************************
    messages, errorhandling,help
***********************************************************************/
errIni: procedure expose m.
    if m.err.ini == 1 then
        return
    call outIni
    m.err.ini     = 1
    m.err.handler = ''
    m.err.cleanup = ';'
    m.err.opt     = ''
    return
endProcedure errIni
/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
    call errIni
    parse arg m.err.opt, m.err.handler
    if pos('I', translate(m.err.opt)) > 0 then
        if errOS() \== 'LINUX' then
            if sysVar('sysISPF') = 'ACTIVE' then
                    call adrIsp 'control errors return'
    return
endSubroutine errReset

/*--- error routine: abend with message ------------------------------*/
err:
    parse arg ggTxt, ggOpt
    call errIni
    drop err handler cleanup opt call return
    if ggOpt == '' & m.err.handler \== '' then do
        if 1 then do /* no detection of recursive err call loop
                        --> will anyway fail by stack overflow */
            interpret m.err.handler
            end
        else do
                     /* avoid recursive err call loop */
            drop call return
            if symbol('m.err.call') \== 'VAR' then
                m.err.call = 1
            else
                m.err.call = m.err.call + 1
            if m.err.call > 10 then do
                say 'errHandler loop:' m.err.handler
                end
            else do
                m.err.return = 1
                call errInterpret m.err.handler
                m.err.call = m.err.call - 1
                if m.err.return then
                    return result
                end
            end
        end
    call outDst
    call errSay ggTxt, 'e'
    call errCleanup
    if ggOpt == '' then
        ggOpt = m.err.opt
    ggOpt = translate(ggOpt)
    if pos('T', ggOpt) > 0  then do
        trace ?r
        say 'trace ?r in err'
        end
    if pos('H', ggOpt) > 0  then do
        call errSay 'divide by zero to show stackHistory', 'e'
        x = 1 / 0
        end
    call errSay 'exit(12)', 'e'
    exit errSetRc(12)
endSubroutine err

/*--- error routine: user message cleanup exit -----------------------*/
errEx:
    parse arg ggTxt
    call errIni
    call outDst
    call errSay ggTxt
    call errCleanup
    exit 8
endProcedure errEx

errAddCleanup: procedure expose m.
parse arg code
    if m.err.ini \== 1 then
        call errIni
        /* concatenate backwards, then it is executed also backwards */
    m.err.cleanup = ';'code || m.err.cleanup
    return
endProcedure errAddCleanup

errRmCleanup: procedure expose m.
parse arg code
    if m.err.ini \== 1 then
        call errIni
    cx = pos(';'code';', m.err.cleanup)
    if cx > 0 then
        m.err.cleanup = left(m.err.cleanup, cx) ,
                     || substr(m.err.cleanup, cx + length(code)+2)
    return
endProcedure errRmCleanup

errCleanup: procedure expose m.
    call errIni
    cl = m.err.cleanup
    if cl = ';' then
        return
    m.err.cleanup = ';'
    say 'err cleanup begin' cl
    call errInterpret cl
    say 'err cleanup end' cl
    return
endProcedure errCleanup

errInterpret: procedure expose m.
parse arg code
    interpret code
    m.err.return = 0
    return
endProcedure errInterpret
/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
    interpret 'assertRes =' arg(1)
    if \ assertRes then
        call err 'assert failed' arg(1)':' arg(2)
    return
endProcedure assert

/*--- output an errorMessage msg with pref pref
           split message in lines at '/n' ---------------------------*/
errSay: procedure expose m.
parse arg msg, pref
    parse source . . ggS3 .                           /* current rexx */
    if pref == 'e' then
        msg = 'fatal error in' ggS3':' msg
    else if pref == 'w' then
        msg = 'warning in' ggS3':' msg
    else if pref \== '' then
        msg = pref':' msg
    return outNl(msg)
endProcedure errSay

/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg, op
    call errSay msg, 'e'
    call help
    call err msg, op
endProcedure errHelp

/*--- return the Operating System we are running on: TSO or LINUX ---*/
errOS: procedure expose m.
    parse source os .
    return os
endProcedure errOS

/*--- set rc for ispf: -------------------------------------------------
    if a cmd is run by ispStart, its RC is ignored,
         but ISPF passes the value of the shared varible 3IspfRc
         back as return code
----------------------------------------------------------------------*/
errSetRc: procedure expose m.
parse arg zIspfRc
    if errOS() \== 'LINUX' then
           if sysVar('sysISPF') = 'ACTIVE' then
            address ispExec vput 'zIspfRc' shared
    return zIspfRc
endProcedure errSetRc

/*--- output a trace message if m.tr is set -----------------------*/
trc: procedure expose m.
parse arg msg
    if m.trace == 1 then
        call out 'trc:' msg
    return
endProcedure trc

debug: procedure expose m.
parse arg msg
    if m.debug == 1 then
        call out 'debug' msg
    return
endProcedure debug

/*--- display the first comment block of the source as help ----------*/
help: procedure expose m.
    parse source . . s3 .
    call out right(' help for rexx' s3, 79, '*')
    do ax=1 to arg()
        say ' ' arg(ax)
        end
    do lx=1 by 1
        if pos('/*', sourceLine(lx)) > 0 then
            leave
        else if lx > 10 then do
            call out 'initial commentblock not found for help'
            return
            end
        end
    do lx=lx+1 by 1
        li = strip(sourceLine(lx), 't', ' ')
        if pos('*/', li) > 0 then
            leave
        call out li
        end
    call out right(' end help for rexx' s3, 79, '*')
    return 4
endProcedure help

/*--- output all lines (separated by '\n') of all args --------------*/
outNl: procedure expose m.
    do ax=1 to max(1, arg())
        msg = arg(ax)
        sx = 0
        bx = -1
        do lx=1 until bx >= length(msg)
                ex = pos('\n', msg, bx+2)
            if ex < 1 then
                ex = length(msg)+1
            call out substr(msg, bx+2, ex-bx-2)
            bx = ex
         end
        end
    return 0
endProcedure outNl
/* copy err end   *****************************************************/
/* copy out begin ******************************************************
    out interface simple with say only
***********************************************************************/
outIni: procedure expose m.
parse arg msg
    return
endProcedure outIni

/*--- output a message to the current destination -------------------*/
out: procedure expose m.
parse arg msg
    say msg
    return 0
endProcedure out

/*--- set a new out destination and return old one ------------------*/
outDst: procedure expose m.
parse arg d
    return ''
endProcedure outDst
      /* return the contents of a string or std input */
inp2str: procedure expose m.
    parse arg rdr, opt
    return rdr
endProcedure inp2str
/* copy out end   *****************************************************/
}¢--- A540769.WK.REXX.O13(DB2REVLO) cre=2006-04-20 mod=2006-05-08-17.42.30 F540769 ---
/* rexx ****************************************************************
    db2revlo: copy load infos from several db2SubSystems
    parameter:
         get <sd> from <s1> <s2> ...
              <sd> destination db2 subsystem i.e. DBOL
              <s1> <s2> ... source db2 subsystems

    this rexx copies tuples
        from sysibm.syscopy of the source subsystems <s1> <s2> ...
        to   revi.db2load   of the destinatin subsystem <sd>
        and deletes rows older then 222 days from this table

history:
2006.04.18 W.Keller new
***********************************************************************/

/*--- main code: analyse arguments and call work function ------------*/
parse arg args
    parse source . . m.this.name .
                             /*--- configure constants ---*/
    m.dTable = 'revi.db2Load'/* name of destination table          */
    m.retries = 3            /* max num of retries in retryHandler */
    m.selSrcOnly = 500       /* max rows to fetch per transaction  */
    m.retentionDays = 222    /* delete rows older than so many days*/
    m.insLimit      = -1     /* stop inserting after so many rows  */

    if args = '' then do
        args = 'get dbaf from dbTf dbaf'
        say m.this.name 'setting test arguments' fun subDest cFr subSrc
        end
    say m.this.name 'analysing arguments:' args
    parse upper var args fun subDest cFr subSrc
    if cFr ^= 'FROM' then
        call errHelp 'from missing in arguments:' args
    if words(subSrc) < 1 then
        call errHelp 'source db2 subsystems missing in arguments:' args
    select
        when fun == 'GET' then call retryHandler subDest, subSrc
        when fun == 'DO'  then do
                               call adrSqlConnect subDest
                               call doGet subDest <> subSrc, subSrc
                               if m.oldTuples & m.retentionDays > 0 then
                                   call doDelete subSrc
                               call adrSqlDisconnect
                               end
        otherwise              call errHelp 'bad function' fun ,
                                            'in arguments:' args
        end
    say m.this.name 'end'
    exit 0

/*--- retryHandler: retry to get the date from each subsystem --------*/
retryHandler: procedure expose m.
    parse arg dest, src
    say '---' m.this.name 'retryHandler begin'
    done = ''
    do rx=1 to m.retries while src ^= ''
        say '--- begin try' rx 'for' src
        next = ''
        do sx=1 to words(src)
            s1 = word(src, sx)
            say '--- try' rx 'from' s1
                   /* call get via tso not directly in rexx,
                      so we get an abend as a condition code back| */
            cc = adrTso(m.this.name 'do' dest 'from' s1, '*')
            if cc = 0 then do
                say '--- ok from' s1
                done = done s1
                end
            else do
                say '--- error from' s1 'rc' cc
                next = next s1
                end
            end
        src = next
        end
    say '--- successfully got' dest 'from' done
    if src ^= '' then do
        say '--- failed getting' dest 'from' src
        call err '--- failed getting' dest 'from' src
        end
    return
endProcedure retryHandler

doGet: procedure expose m.
    parse upper arg otherLoc, src

    cDup = 0
    cIns = 0
    cCom = 0
    cSrc = 0
    cRead = 0
    firstTst = ''
    lastTst = ''
    m.oldTuples = 1

    do forever
        say time() 'preparing'
        call doGetPrepare otherLoc, src
        drop strt.
        strt.tst = ''
        strt.cnt = 0
                         /* select latest rows from destination */
        call adrSql "open" m.selDestCrs
        do forever
            call adrSql m.selDestFetch
            if sqlCode = 100 then
                leave
            /* say 'fetch dest:' expVars(m.columns) */
            strt.dbname.tsname.dsnum.ictype.jobname.authid = 1
            strt.tst = timestamp
            strt.cnt = strt.cnt + 1
            end
        say time() 'startTimestamp' strt.tst 'with' strt.cnt 'tuples'
        if strt.tst = '' then do
            strt.tst = left(date(s),4)'-'substr(date(s), 5, 2) ,
                           || '-01-00.00.00.000000'
            say 'no old tuples setting startTimestamp to' strt.tst
            m.oldTuples = 0
            end
        if strt.cnt >= m.selSrcOnly then
            call err strt.cnt 'startTimestamp rows >=' m.selSrcOnly ,
                              'ROWS ONLY of select from' src
        call adrSql "close" m.selDestCrs

                         /* select rows from source and insert them */
        call adrSql "open" m.selSrcCrs "using :strt.tst"
        cSrc = 0
        do forever
            call adrSql m.selSrcFetch
            if sqlCode = 100 then
                leave
            cSrc = cSrc + 1
            /* say 'fetch' src':' expVars(m.columns) */
            if timestamp == strt.tst then do
                if 'VAR' = symbol( ,
                     'strt.dbname.tsname.dsnum.ictype.jobname.authid') ,
                     then do
                    /* say 'same timestamp duplicate' */
                    cDup = cDup + 1
                    iterate
                    end
                else do
                    /* say 'same timestamp not copied yet' */
                    end
                end
            call adrSql m.insDst
            cIns = cIns + 1
            if firstTst = '' then
                firstTst = timestamp
            lastTst = timestamp
            end
        call adrSql "close" m.selSrcCrs
        call adrSql "commit"
        cCom = cCom + 1
        cRead = cRead + cSrc
        say time() 'inserted' cIns', dups' cDup', read' cRead,
              || ', commits' cCom 'from' src
        if cSrc < m.selSrcOnly then
            leave
        if m.insLimit > 0 then do
            if cIns >= m.insLimit then do
                say '--- insert Limit' m.insLimit 'reached, stopping'
                leave
                end
            end
        end
        say '--- inserted' cIns', dups' cDup', read' cRead,
              || ', commits' cCom 'from' src
        say '    from' firstTst 'to' lastTst
    return
endProcedure doGet

/*--- prepare sql's --------------------------------------------------*/
doGetPrepare: procedure expose m.
    parse upper arg otherLoc, src

    cols =   'timestamp, dbname, tsname, dsnum, ictype, jobname, authid'
    m.columns = cols
    hCols = ':timestamp,:dbname,:tsname,:dsnum,:ictype,:jobname,:authid'
    sTable = 'sysibm.sysCopy'
    if otherLoc then
        sTable = 'CHSKA000'src'.'sTable

                         /* select latest rows from dTable */
    sql =   "select" cols ,
                "from" m.dTable ,
                "where subsys = '"src"'",
                     "and timestamp =",
                         "(   select max(timestamp)",
                             "from" m.dTable ,
                             "where subsys = '"src"'",
                         ")"
    call adrSql "prepare s1 from :sql", , sql
    call adrSql "declare c1 cursor for s1"
    m.selDestCrs = 'c1'
    m.selDestFetch = 'fetch c1 into' hCols

                         /* select next rows from sTable */
    sql =   "select" cols ,
                "from" sTable ,
                "where timestamp >= ?",
                     "and timestamp < current timestamp - 10 minutes",
                     "and icType in ('P','R','S','W','X','Y','Z')",
                "order by timestamp asc" ,
                "fetch first" m.selSrcOnly "rows only"
    call adrSql "prepare s2 from :sql", ,sql
    call adrSql "declare c2 cursor for s2"
    m.selSrcCrs = 'c2'
    m.selSrcFetch = 'fetch c2 into' hCols

                         /* insert 1 row into dTable */
    sql =   "insert into" m.dTable ,
                "(subSys, " cols")",
                "values('"src"', ?, ?, ?, ?, ?, ?, ?)"
    call adrSql "prepare s3 from :sql", ,sql
    m.insDst = "execute s3 using" hCols
    return
endProcedure doGetPrepare

doDelete: procedure expose m.
    parse upper arg src
    sql =   "delete"  ,
                "from" m.dTable ,
                "where subsys = '"src"'",
                     "and timestamp < current timestamp" ,
                         "-" m.retentionDays "days"
    call adrSql "execute immediate :sql", , sql
    cDel = sqlErrd.3
    call adrSql "commit"
    say '--- deleted' cDel 'rows older than' m.retentionDays 'days'
    return
endProcedure doDelete

expVars:
parse arg ggVars
    ggVars = translate(ggVars, ' ', ',')
    ggRes = ''
    do ggIx = 1 to words(ggVars)
        ggWW = word(ggVars, ggIx)
        ggRes = ggRes', 'ggWW'='value(ggWW)
        end
    if ggRes ^= '' then
        ggRes = substr(ggRes, 3)
    return ggRes
endSubroutine expVars

err:
parse arg ggMsg
    say 'fatal error' ggMsg
    if 'VAR' = symbol('m.selSrcCrs') then
        call adrSql 'close' m.selSrcCrs, '*'
    if 'VAR' = symbol('m.selDestCrs') then
        call adrSql "close" m.selDestCrs, '*'
    call adrSqlDisconnect '*'
    call adrSqlDisconnect '*'
    call errA ggMsg
endSubroutine err
/* copy adrIsp begin *************************************************/

/**********************************************************************
    adrSql: execute sql thru the dsnRexx interface
***********************************************************************/

adrSql: /* no procedure, to keep variables sql... */
    parse arg ggSqlStmt, ggRet, ggNo
    if ggNo <> '1' then do
        ggSqlStmt = 'execSql' ggSqlStmt
        if ggNo ^= '' then
            ggNo = '==>' ggNo
        end
    address dsnRexx ggSqlStmt
    /* say 'sqlCode' sqlCode 'rc' rc 'for' ggSqlStmt ggNo */
    if rc = 0 then do
        return 0
        end
    else if rc < 0 then do
        if ggRet == '*' then nop
        else if wordPos(sqlCode, ggRet) > 0 then nop
        else
            call err "sql rc" rc sqlmsg() ggNo
        end
    else if sqlWarn.0 ^== ' ' then do
        say 'warning' sqlMsg() 'for' ggSqlStmt ggNo
        end
    return sqlCode
endSubroutine adrSql

adrSqlConnect: procedure
parse arg ggSys, ggRetCon
    if adrTSO("SUBCOM DSNREXX", '*') <> 0 then do
       sRc = RXSUBCOM('ADD','DSNREXX','DSNREXX') /* ADD HOST CMD ENV  */
       if sRc <> 0 then
           call err 'rc' sRc 'from RXSUBCOM(ADD, DSNREXX, DSNREXX)'
       end
    call adrSql "connect" ggSys, ggRetCon ,1
    return
endProcedure adrSqlConnect

adrSqlDisconnect: procedure
parse arg ggRet
    call adrSql "disconnect ", ggRet, 1
    return
endProcedure adrSqlDisconnect

sqlMsg: /* no procedure, to keep variables sql... */
    ggW = ''
    do ggX=0 to 10
        if sqlWarn.ggx <> '' then
            ggw = ggw ggx'='sqlWarn.ggx
        end
    return  'sqlCode' sqlCode 'state' sqlState 'warn' ggW ,
            'errMc' strip(translate(sqlerrmc, ',', 'FF'x))':' ggSqlStmt
endSubroutine sqlMsg

/**********************************************************************
    adrDsn: send a command to db2 with the TSO dsn command
***********************************************************************/

adrDsn: procedure
parse arg sys, cmd, rcOk
    call adrTso 'alloc dd(sysprint) new reuse'
    push 'END'
    push cmd
    rr = adrTso('DSN SYSTEM('sys')', '*')
    say 'rc' rr 'adrTso DSN SYSTEM('sys') cmd' cmd
    if wordPos(rr, rcOk) < 1 then do
        say 'error rc' rr 'in adrTso DSN SYSTEM('sys') cmd' cmd

        call adrTso 'execio * diskr sysprint (finis stem pr.)'
        say 'sysprint' pr.0 'lines'
        do x=1 to pr.0
            say strip(pr.x, 't')
            end
        call adrTso 'free dd(sysprint) '
        call err 'rc' rr 'in adrTso DSN SYSTEM('sys') cmd' cmd
        end
    call adrTso 'free dd(sysprint)'
    return rr
endProcedure adr Dsn

/**********************************************************************
    adr*: address an environment
***********************************************************************/

adrIsp:
    parse arg ggIspCmd, ggRet
    address ispexec ggIspCmd
    if rc = 0 then return 0
    else if ggRet == '*' then return rc
    else if wordPOS(rc, ggRet) > 0 then return rc
    else
        call err 'adr ispExec rc' rc 'for' ggIspCmd
endSubroutine adrIsp

adrEdit:
    parse arg ggEditCmd, ggRet
    address isrEdit ggEditCmd
    if rc = 0 then return 0
    else if ggRet == '*' then return rc
    else if wordPOS(rc, ggRet) > 0 then return rc
    else
        call err 'adr isrEdit rc' rc 'for' ggEditCmd
endSubroutine adrEdit

/* copy adrIsp end   *************************************************/
/* copy adr begin ****************************************************/
/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure
parse arg dsn .
    if left(dsn,1) = "'" then
        return strip(dsn, 'b', "'")
    else if sysvar('SYSPREF') = '' then
        return dsn
    else
        return sysvar('SYSPREF')'.'dsn
endProcedure dsn2Jcl

/*--- format dsn from jcl format to tso format -----------------------*/
dsnFromJcl: procedure
parse arg dsn .
    return "'"dsn"'"
endProcedure dsnFromJcl

/**********************************************************************
    io: read or write a dataset with the following callsequences:
        read:  readDDBegin, readDD*,  readDDEnd
        write: writeBegin,  writeDD*, writeEnd

        readDD returns true if data read, false at eof
***********************************************************************/

/*--- prepare reading from a DD --------------------------------------*/
readDDBegin: procedure
return /* end readDDBegin */

/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt = '' then
        ggCnt = 100
    call adrTso 'execio' ggCnt 'diskr' ggDD '(stem' ggSt')', 2
    return (value(ggSt'0') > 0)
return /* end readDD */

/*--- finish reading DD  ggDD ----------------------------------------*/
readDDEnd: procedure
    parse arg ggDD
    call adrTso 'execio 0 diskr' ggDD '(finis)'
return /* end readDDEnd */

/*--- prepare writing to DD ggDD -------------------------------------*/
writeDDBegin: procedure
    parse arg ggDD
                  /* ensure file is erased, if no records are written */
    call adrTso 'execio' 0 'diskw' ggDD '(open)'
return /* end writeDDBegin */

/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    call adrTso 'execio' ggCnt 'diskw' ggDD '(stem' ggSt')'
    return
endSubroutine writeDD

/*--- end writing to dd ggDD (close) --------------------------------*/
writeDDEnd: procedure
    parse arg ggDD
    call adrTso 'execio 0 diskw' ggDD '(finis)'
return /* end writeDDEnd */

/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
    parse arg ggTsoCmd, ggRet
    address tso ggTsoCmd
    if rc == 0                     then return 0
    else if ggRet == '*'           then return rc
    else if wordPos(rc, ggRet) > 0 then return rc
    else
        call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */
/* copy adr end    ****************************************************/
/* copy err begin ******************************************************
    messages, errorhandling,help
***********************************************************************/
/* caller should define err as follows ---------------------------------
err:
parse arg ggMsg
    call errA ggMsg
    exit 12
endSubroutine err
   end call should define err ----------------------------------------*/

/*--- error routine: abend with message ------------------------------*/
errA:
    parse arg ggTxt
    parse source . . ggS3 .                           /* current rexx */
    say 'fatal error in' ggS3':' ggTxt
    x = x / 0
    exit setRc(12)
endSubroutine errA

/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure
parse arg ggMsg
    say 'fatal error:' ggMsg
    call help
    call err ggMsg
endProcedure errHelp

/*--- set rc for ispf: -----------------------------------------------*/
    if a cmd is run by ispStart, its RC is ignored,
         but ISPF passes the value of the shared varible zIspfRc
         back as return code
----------------------------------------------------------------------*/
setRc: procedure
parse arg zIspfRc
    if sysVar('sysISPF') = 'ACTIVE' then do
        say 'exitRc setting zIspfRc='zIspfRc
        address ispExec vput 'zIspfRc' shared
        end
    return zIspfRc
endProcedure setRc

/*--- output a trace message if m.trace is set -----------------------*/
trc: procedure expose m.
parse arg msg
    if m.trace == 1 then
        say 'trc:' msg
    return
endProcedure trc

/*--- quote string txt using quoteChar qu ("""" ==> ") ---------------*/
quote: procedure
parse arg txt, qu
    if qu = '' then
        qu = '"'
    res = qu
    ix = 1
    do forever
        qx = pos(qu, txt, ix)
        if qx = 0 then
            return res || substr(txt, ix) || qu
        res = res || substr(txt, ix, qx-ix) || qu || qu
        ix = qx + length(qu)
        end
endProcedure quote

/*--- return current time and cpu usage ------------------------------*/
showtime: procedure
parse arg showmsg
return time() sysvar('syscpu') /* sysvar('syssrv') */ showmsg

/--- display the first comment block of the source as help -----------*/
help: procedure
    parse source . . s3 .
    say 'help for rexx' s3
    do lx=1 by 1
        if pos('/*', sourceLine(lx)) > 0 then
            leave
        else if lx > 10 then do
            say 'initial commentblock not found for help'
            return
            end
        end
    do lx=lx+1 by 1
        li = strip(sourceLine(lx), 't', ' ')
        if pos('*/', li) > 0 then
            leave
        say li
        end
    return 4
endProcedure help
/* copy err end   *****************************************************/
}¢--- A540769.WK.REXX.O13(DB2UT) cre=2011-06-03 mod=2011-06-03-10.36.56 A540769 ---
/* rexx ****************************************************************
    db2Ut: Entwickler Interface für Db2 Utilites

    dieses übernimmt verschiedene Funktionen von Db2Ut, typischerweise
        in dieser Reihenfolge
    * ohne parm: Aufruf von DB2Ut mit ispf newappl(DBUT)
    * parm = panel: Anzeige des Panels und ausführen der Funktionen
    * param = DB .... storedProcedure Db2UtilP aufrufen mit den
              mitgegebenen Parametern
    * rexxName = Db2UtilP Funktion der StoredProcedure Db2UtilP

************************************************************************
23.12.2008 W.Keller utTemplate mit m.explicitTempl
19.12.2008 F.Schuck REORG eingebaut
************************/ /* end help **********************************
09.12.2008 F.Schuck richtige Table fuer Load bzw. Fehlermeldung
04.12.2008 W.Keller fix uninitialisierte .delims variable
10.11.2008 W.Keller native jcl
17.10.2008 W.Keller delimited, help
17.09.2008 W.Keller neu
***********************************************************************/
m.self.version = '1.0 - 19.12.2008'
parse arg pArgs
parse upper var pArgs pA1 pA2 .
parse source s1 s2 s3 s4 s5
m.self.name = s3
m.out = 0
m.out.0 = 0
m.punch.0 = 0
m.debug = 0
m.maxRc = 0

call dbg 'db2Ut start' m.self.version 'args' pArgs
call dbg 'db2Ut start source' s1',' s2',' s3',' s4',' s5
call dbg 'db2Ut user' userid()

call catIni
call scanWinIni
m.id = userid()'.DB2UT'
m.cnf.procDb2Ut = 'DB2UTIL.DB2UTIL'
m.cnf.procSys = 'DB2ADMIN.DSNUTILS'
m.cnf.lf   = '\'
m.cnf.eSt = '\' /* end of statement NO semicolon, lf */
m.mapTab = ''
m.templ.0 = 0
m.templ.copyD = "DSN('&SSID..&DB..&SN..P&PART..&UNIQ.')"m.cnf.lf,
           "DATACLAS(ENN0X) MGMTCLAS(SUB#ADB1) STORCLAS(FAR$N)"m.cnf.lf,
            "SPACE (100,10000) TRK"
m.templ.SYUTD = "DSN('&SSID..&DB..&SN..P&PART..&UNIQ..UT')"m.cnf.lf,
            "DATACLAS(ENN0X) MGMTCLAS(COM#E001)"m.cnf.lf,
            "SPACE (100,10000) TRK"
m.templ.SOUTD = "DSN('&SSID..&DB..&SN..P&PART..&UNIQ..SRT')"m.cnf.lf,
            "DATACLAS(ENN0X) MGMTCLAS(COM#E001)"m.cnf.lf,
            "SPACE (100,10000) TRK"
m.templ.srecd = ,
         "DSN('&SSID..&DB..&SN..P&PART..D&YE(3).&MO.&DA..REC')"m.cnf.lf,
         "DATACLAS(ENN0X) MGMTCLAS(COM#A032)"m.cnf.lf,
         "SPACE (100,10000) TRK"
m.templ.new = ,
           "DATACLAS(ENN0X) MGMTCLAS(COM#A041) STORCLAS(FAR$N)"m.cnf.lf,
            "SPACE TRK MAXPRIME 600"
if s3 == 'DB2UTILP' then
    call storedProcCall pArgs
else if pArgs = '' then
    call switchIspfAppl
else if pA1 = 'PANEL' then
    call doPanel
else if pA1 = 'DB' then
    call sqlCallDb2Ut pA2, subWord(pArgs, 3)
else
    call err 'bad pArgs' pArgs
mr = m.maxRc
call globalCleanup
exit mr
/*--- kleine Tests ---------------------------------------------------*/
exit testStoredProc('DBAF')
exit testmaptab()
exit testRebind()
call sqlCallDb2Ut
call testCopy1
exit

/*--- aufräumen am Ende des Programms --------------------------------*/
globalCleanup: procedure expose m.
    if symbol('m.db') == 'VAR' & m.db <> '-' then do
        call dbg 'committing in' m.db
        call sqlCommit
        call dbg 'disconnect from' m.db
        call sqlDisconnect
        end
    do px=1 to m.punch.0
        pu = m.punch.px
        drop m.punch.pu
        end
    m.out.0 = 0
    m.punch.0 = 0
    m.maxRc   = 0
    drop m.db
    return
endProcedure globalCleanup

/*--- set global variables -------------------------------------------*/
setGlobal: procedure expose m.
parse arg name, val
    call dbg 'setting global' name '=' val
    if name = 'DB' then do
        if symbol('m.DB') == 'VAR' then
            call err 'global db already set'
        call sqlConnect val
        end
    m.name = val
    return
endProcedure setGlobal

/***********************************************************************
     panel Funktionen
***********************************************************************/
/*--- switch ispf application ----------------------------------------*/
switchIspfAppl: procedure expose m.
    call adrIsp 'control errors return'
            /* if we are in an edit macro, we must do a macro first */
    call adrEdit 'macro (aa)', '*'
    call adrIsp "select cmd(DB2UT panel) newappl(DBUT) passlib"
    return
endProcedure switchIspfAppl

/*--- panel Verarbeitung ---------------------------------------------*/
doPanel: procedure expose m.
    msg = ''
   /* restart Punkt nach Fehlern */
doPanelRestart:
    call adrIsp 'control errors return'
    call errReset , 'signal doPanelErrHandler'
    do forever
        msg = doPanelOne(msg, errMsg)
        call globalCleanup
        if msg = 'end' then
            exit /* nicht return wegen FehlerHandler | */
        call doPanelErrMsg msg
        end
   /* error handler: Fehler anzeigen und wieder von vorn */
doPanelErrHandler:
    call errReset 'h'
    if ^ doPanelErrMsg(ggTxt) then do  /* falls keine panel msg, */
        call errSay ggTxt              /* anzeigen im Tso        */
        msg = 'msg(dbut213)'
        end
    call globalCleanup
    signal doPanelRestart
endProcedure doPanel

/*--- panelInfos aus FehlerMeldung rausholen -------------------------*/
doPanelErrMsg: procedure expose m. msg errmsg
parse arg txt
    sx = pos('££', txt)
    if sx < 1 then do
        msg = ''
        errMsg = ''
        return 0
        end
    qq = substr(txt, sx+2)
    ex = pos('££', qq)
    if ex > 0 sx then
         qq = left(qq, ex-1)
    parse var qq msg '£' cur '£' errMsg
    if msg = '' | length(msg) > 8 then
        call err 'bad msg "'msg'" in' txt
    msg = 'msg('msg')'
    if cur <> '' then
        msg = msg 'cursor('cur')'
    return 1
endProcedure doPanelErrMsg

/*--- panel anzeigen und auf User reagieren --------------------------*/
doPanelOne: procedure expose m.
    parse arg msg, errMsg
    di = adrIsp('display panel(db2Ut)' msg, '*')
    if di <> 0 then do
        if di <> 4 & di <> 8 then
            call out 'adrDisp rc' di
        return 'end'
        end
    call mAdd mCut(st, 0), 'db' susy, 'id' id, t1 strip(obj1)
    if t2 <> '' & obj2 <> '' then
        call mAdd st, t2 strip(obj2)
    if t3 <> '' & obj3 <> '' then
        call mAdd st, t3 strip(obj3)
                    /* parameter für jede Utility Fun zusammenstellen */
    do fx=1 to 3
        fa = value('fu'fx)
        if fa = '' then
            iterate
        if fa = 'LOA' | fa = 'UNL' then do
             shr = 'SHRLEVEL' shr
             if punch = '' then
                 punch = '-'
             else
                 punch = dsn2jcl(punch)
             if fa = 'UNL' then do
                 call mAdd st, fa dsn2jcl(loadf), punch, shr
                 if unli <> '' then
                     call mAdd st, 'LIMIT' unLi
                 if d = 'Y' then
                     call mAdd st, '  delimited' analyseDelimiter(delim)
                 end
             else do
                 if punch =  '' then do
                     if d = 'Y' then
                         oDelim = analyseDelimiter(delim)
                     else
                         oDelim = ''
                     end
                 else do
                     pn = loadPunch(punch)
                     if loadf ^== '' then
                         nop
                     else if pn ^== '' & m.pn.inDsn ^== '' then
                         loadf = m.pn.inDsn
                     oDelim = m.pn.delims
                     end
                 if loadf = '' then
                     return '££DBUT211£loadf££'
                 call mAdd st, fa dsn2jcl(loadf) shr 'resume' p
                 if oDelim <> '' then
                     call mAdd st, '    ' oDelim
                 if pn ^== '' then do
                     if t1 <> 'TB' | obj2 <> '' | obj3 <> '' ,
                            | verify(obj1, '*?,' , 'm') > 0 then
                         return '££DBUT218£t1££'
                     call mAdd st, '    into' obj1      m.pn.flds
                     end
                 end
             end
        else do
            call mAdd st, fa
            end
        end
                           /* Funktion im gewählten runMode ausführen */
    src = mCat(st, ' ')
    call dbg 'panel db' susy 'src' src
    call genJobcards mCut(jcl,0), jobCard1, jobCard2, jobCard3, jobCard4

    if r = 'F' then do
        call sqlCallDb2Ut susy, subword(src ,3)
        end
    else if r = 'V' then do
        call genJcl jcl, susy, st
        call outputSysprint jcl, 0
        end
    else if r = 'S' then do
        call genJcl jcl, susy, st
        call writeDsn 'SYSOUT(T) dd(ir) .WRITER(INTRDR)', 'M.JCL.', , 1
        end
    else if r = 'N' then do
        call nativeJcl jcl, susy, subword(src ,3)
        call outputSysprint jcl, 0
        end
    else do
        return '££dbut212£r££'
        end
    return ''
endProcedure doPanelOne

/*--- delimiter syntax umformen:
      wir erlauben nackte Zeichen, Strings oder hex Strings
      und mehrere dürfen zusammengehängt sein
      - Utility ist restriktiver -------------------------------------*/
analyseDelimiter: procedure expose m.
parse arg delim
    de = ''
    dc = 0
    call scanReset ds
    call scanSrc ds, delim
    do while ^ scanAtEnd(scanSkip(ds))
        hex = 0
        if scanString(ds, ''' x'' X'' " x" X"') then do
            d1 = m.ds.val
            hex = pos(left(m.ds.tok, 1), 'xX') > 0
            end
        else do
            call scanChar ds, 1
            d1 = m.ds.tok
            end
        if ^ hex then do
            do xx=1 by 1 to length(d1)
                de = de quote(substr(d1, xx, 1), "'")
                dc = dc + 1
                end
            end
        else do
            d1 = translate(m.ds.val)
            if verify(d1, '0123456789ABCDEF') > 0 ,
                            | length(d1) // 2 <> 0 then
                call scanErr ds, 'bad hex literal' ,
                         '££DBUT216£delim£'d1'££'
            do xx=1 by 2 to length(d1)
                de = de "X'"substr(d1, xx, 2)"'"
                dc = dc + 1
                end
            end
        end
    if dc > 3 then
        call err 'mehr als drei Delimiter' ,
                 '££DBUT217£delim£'de'££'
    de = de subword("',' '""' '.'", dc+1)
    if words(de) <> 3 then
        call err 'delimiter not 3 words:' de
    return de
endProcedure analyseDelimiter

/*--- punchfile einlesen und analysieren, falls nötig ----------------*/
loadPunch: procedure expose m.
parse arg pu
    if pu = '-' then
        return ''
    if symbol('m.punch.pu') = 'VAR' then
        nd = m.punch.pu
    else do
        nd = mAdd(punch, pu)
        m.punch.pu = nd
        call analysePunch nd, pu
        end
    return nd
endProcedure loadPunch

/*--- analyse a punchfile ----------------------------------------------
          nd for punch info
          puDsn: dsn of the punch file to analyse --------------------*/
analysePunch: procedure expose m.
parse arg nd, puDsn
    if sysdsn("'"puDsn"'") <> 'OK' then
        call err 'punch fehlt: ££DBut214£punch£' ,
                  || puDsn':' sysdsn("'"puDsn"'")'££'
    rdr = catMake('-r', puDsn)
    sc = scanUtilSql(rdr)
    call scanUtil sc
    ld = 0
    do while m.sc.utilType <> ''
        if m.sc.utilType <> 'u' then do
            call scanUtil sc
            end
        else if m.sc.val == 'TEMPLATE' then do
            parse value analyseTemplate(sc) with nm templ.nm
            end
        else if m.sc.val == 'LOAD' then do
            if ld then
                call scanErr sc, 'more than one load'
            ld = 1
            call analyseLoad nd, sc
            x = m.nd.inddn
            if symbol('templ.x') = 'VAR' then
                m.nd.inDsn = templ.x
            else
                m.nd.inDsn = ''
            end
        else do
            call scanUtil sc
            end
        end
    if ld < 1 then
        call scanErr sc, 'no load'
    call jClose rdr
    return
endProcedure analysePunch

/*--- analyse a utility template statement
          return  <template name> <dsn> ----------------------------*/
analyseTemplate: procedure expose m.
parse arg sc
    if scanUtil(sc) ^== 'n' then
        call scanErr sc, 'template name expected'
    res = m.sc.val
    do while ^ (scanUtil(sc) = 'u' | m.sc.utilType = '')
        if m.sc.utilType == 'n' & m.sc.utilBrackets = 0 then do
            if m.sc.val = 'DSN' then
                res = res scanUtilValue(sc, 1)
            end
        end
    if words(res) > 2 then
        call err 'to many dsns in template' res
    return res
endProcedure analyseTemplate

/*--- analyse load put atts into stem nd -----------------------------*/
analyseLoad: procedure expose m.
parse arg nd, sc
    if scanUtil(sc) ^== 'n' & m.sc.val ^== 'DATA' then
        call scanErr sc, 'load data expected'
        /* the load into syntax is too complex to analyse completely
           we only catch the interesting (and disturbing) parts */
    m.nd.inDdn = ''
    m.nd.part = ''
    m.nd.flds = ''
    m.nd.tb   = ''
    m.nd.delims = ''
    intos = 0
    do while 'u' ^== scanUtil(sc) & m.sc.utilType ^== ''
        if m.sc.utilType ^= 'n' | m.sc.utilBrackets ^= 0 then do
            if m.sc.utilType = '(' then do
                if m.sc.utilBrackets ^== 1 | intos ^== 1 then
                    call scanErr 'bad brackets for fields'
                call scanBack sc, '('
                m.nd.flds = '('scanUtilValue(sc, 0, m.cnf.lf)')'
                end
            iterate
            end
        opt = m.sc.val
        if wordPos(opt, 'INDDN PART') > 0 then do
            m.nd.opt = scanUtilValue(sc)
            end
        else if wordPos(opt, 'WHEN CCSID') > 0 then do
            vv = scanUtilValue(sc)   /* skip over brackets */
            end
        else if opt = 'INTO' then do
            intos = intos+1
            if intos > 1 then
                call scanErr sc, 'more than one into not implemented'
            if scanUtil(sc) ^== 'n' | m.sc.val ^== 'TABLE' then
                call scanErr sc, 'into table expected'
            if ^ scanSqlQuId(scanSkip(sc)) then
                call scanErr sc, 'table name expected'
            m.nd.tb = m.sc.val
            m.nd.tbQu = m.sc.tok
            end
        else if opt = 'FORMAT' then do
            if scanUtil(sc) ^== 'n' then
                call scanErr sc, 'format type expected'
            if m.sc.val = 'UNLOAD' then
                iterate
            else if m.sc.val ^== 'DELIMITED' then
                call scanErr sc, 'format' m.sc.val 'not supported'
            parse value "',' '""', '.'" with d.col d.cha d.dec
            do while scanUtil(sc) == 'n' ,
                    & wordPos(m.sc.val, 'COLDEL CHARDEL DECPT') > 0
                ky = left(m.sc.val, 3)
                if ^ scanString(scanSkip(sc), "' x' X'") then
                    call scanErr sc, 'delimiter string expected'
                d.ky = m.sc.tok
                if  ^abbrev(d.ky, "'") then
                    upper d.ky
                end
            m.nd.delims = 'DELIMITED' d.col d.cha d.dec
            end
        end
    return
endProcedure analyseLoad

/*--- jcl generieren für Run mit db2ut -------------------------------*/
genJobcards: procedure expose m.
parse arg oo
    do ax=2 to arg()
        if arg(ax) <> '' then
            call mAdd oo, arg(ax)
        end
return
endProcedure genJobcards

genJcl: procedure expose m.
parse arg oo, susy, st
    call mAdd jclTso(oo, 'db2Ut', 'S1', 1), "%DB2UT -"
    do ix = 1 to m.st.0
        line = strip(m.st.ix)
        sx = 1
        of = 4 - 2 * (wordPos(translate(word(line, 1)),
                   , 'ID DB COP RUN REB LOA UNL' ) > 0)
        do forever
            px = pos(m.cnf.lf, line, sx)
            if px = 0 then do
                call mAdd oo, left('', of)substr(line, sx) '-'
                leave
                end
            call mAdd oo, left('', of)substr(line, sx, px-sx) '-'
            of = 4
            sx = px + 1
            end
        end
    ox = m.oo.0
    m.oo.ox = left(m.oo.ox, length(m.oo.ox)-1)
    do ox=1 to m.oo.0
        if length(m.oo.ox) >= 72 then
            call err 'genJcl line overflow ('length(m.oo.ox)'):' m.oo.ox
        end
    return
endProcedure genJcl

/***********************************************************************
   sql call auf db2UtilP und Ausgabe Output
***********************************************************************/
/*--- connect und sql call auf db2UtilP ------------------------------*/
sqlCallDb2Ut: procedure expose m.
parse arg db, src
    if db <> '' then
        call sqlConnect db
    rst = 'NO'
    retcode = -9876
    e = ''
    z = 0
    call debugSqlCurrent 'before sql call'
    call dbg "call" m.cnf.procDb2Ut "("src", ...)"
    call sqlExec "call" m.cnf.procDb2Ut "(:src, :rst)", 0 +466
    call dbg 'after call src='src
    call debugSqlCurrent 'after sql call'
    call outputSysprint , 1
    return 0
endProcedure sqlCallDb2Ut

/*--- session sysprint oder stem ausgeben ----------------------------*/
outputSysprint: procedure expose m.
parse arg stem, summ
    if m.out & m.out.0 > 0 & stem = '' then do
        call sysPrintInsert out         /* restlichen Output einfügen */
        m.out.0 = 0
        end
    /* outputfile utilPrt allozieren */
    if  listDsi('utilPrt' file) <= 4 then
        listDsi = 0
    else
        listDsi = sysReason
    call dbg 'listDsi(utilPrt file)' listDsi sysMsgLvl2
    if sysVar('sysISPF') = 'ACTIVE' then do
        ty = 1
        call adrTso 'alloc reuse dd(utilPrt)',
            'recfm(v b) lrecl(136) block(32760) dsorg(PS)'
        end
    else if listDsi <> 2 then do
        ty = 0     /* bereits alloziert */
        end
    else if SYSVAR('SYSENV') = 'FORE' then do
        ty = 2
        call adrTso 'alloc reuse dd(utilPrt) dsName(*)',
            'recfm(v b) lrecl(136) block(32760) dsorg(PS)'
        end
    else if adrTso( 'alloc reuse sysout(*) dd(utilPrt)',
            'recfm(v b) lrecl(136) block(32760) dsorg(PS)',
             , '*') = 0 then do
        ty = 3
        end
    else do
        ty = -1
        say '--- sysprint output'
        end
    if ty >= 0 then
        call writeDDBegin utilPrt

    if stem = '' then do     /* daten aus session.sysprint */
        Call sqlPreOpen 2, 'SELECT SEQNO, TEXT' ,
                                'FROM SESSION.SYSPRINT ORDER BY 1'
        call dbg 'utility output sysprint'
        stem = mCut(qq, 0)
        do while sqlExec('fetch c2 into :seq, :txt', 0 100) = 0
            call mAdd stem, strip(substr(txt, 2), 't')
            end
        call sqlClose 2
        end
    bb = mCut(bb, 0)
    if summ == 1 then do
        do ox=1 to m.stem.0
            if abbrev(m.stem.ox, '+++') then do
                call mAdd bb, m.stem.ox
                r = word(m.stem.ox, words(m.stem.ox))
                if datatype(r, 'n') then
                    m.maxRc = max(m.maxRc, r)
                end
            end
        call mAdd bb, '+++' myTime() 'max rc' m.maxRc, ''
        end
    aa = mCut(aa, 0)
    all = bb stem
    ox = 0
    do ax=1 to words(all)
        st = word(all, ax)
        do sx = 1 to m.st.0
            txt = strip(m.st.sx, 't')
            if ty < 0 then do
                say txt
                end
            else do
                do cx=1 by 132 while cx+132 <= length(txt)
                    ox = ox + 1
                    out.ox = substr(txt, cx, 132)
                    end
                ox  =  ox + 1
                out.ox = substr(txt, cx)
                if ox > 100 then do
                    call writeDD utilPrt, out., ox
                    ox = 0
                    end
                end
            end
        end
    call writeDD utilPrt, out., ox
    call writeDDEnd utilPrt
    call dbg 'utilprt type' ty 'end output'

    if ty = 1 then do         /* view ouput */
        call adrIsp "LMINIT DATAID(vwId) DDNAME(utilPrt) ENQ(SHRW)"
        call dbg 'dataid' vwId
        call adrIsp "VIEW DATAID("vwId")", 0 4
        call adrIsp "LMFREE DATAID("vwId")"
        end
    if ty >= 1 then
        call adrTso 'free  dd(utilPrt)', '*'
    return 0
endProcedure outputSysprint

myTime: procedure
    return time() 'cpu' strip(sysvar('syscpu'))

/*--- say the contents of session.sysprint ---------------------------*/
showSysPrint: procedure expose m.
    p = ':m.st.sx.'
    call sqlPreAllCl 12, 'select seqNo, text',
               'from session.sysPrint order by seqNo asc', st,
             , p'sq,' p'tx'
    say '-- sysprint has' m.st.0 'records'
    do sx=1 to m.st.0
        say right(m.st.sx.sq, 3) strip(m.st.sx.tx, 't')
        end
    return
endProcedure showSysprint

/*--- insert the lines sysibm.sysprint or stem oo (if not '')
      into session.sysprint with prefix pref
      if opt='b' before existing rows, otherwise after ---------------*/
sysprintInsert: procedure expose m.
parse arg oo, pref, opt
    call sqlPreAllCl 12, 'select count(*), min(seqNO), max(seqNo)',
               'from session.sysPrint', spr,
             , ':cnt, :min :minI, :max :maxI'
    call dbg 'sysprint count' cnt 'min' min minI 'max' max maxI
    if oo <> '' then do
        call sqlPrepare 5,"insert into session.sysPrint values (?, ?)"
        if opt = 'b' then
            sf = min - m.oo.0
        else
            sf = max + 1
        sq = sf
        do ix=1 to m.oo.0
            tx = '?'pref || m.oo.ix  /* printer vorschub auf pos 1 ||?*/
            if length(tx) > 254 then
                tx = left(tx, 251)'...'
            call sqlExecute 5, sq, tx
            sq = sq + 1
            end
        call dbg 'sysprint insert' oo'.'m.oo.0 'from' sf 'to' (sq-1)
        end
    else do
        call sqlPreAllCl 12, 'select count(*), min(seqNO), max(seqNo)',
               'from sysIbm.sysPrint', spr,
             , ':sCn, :sMi :sMiI, :sMa :sMaI'
        call dbg 'sysibm count' sCn 'min' sMi sMiI 'max' sMa sMaI
        if sCn < 1 then
            call out 'sysibm.sysprint is empty'
        else
            call sqlExec "insert into session.sysPrint" ,
                     "select seqno +" (max+1-sMi) ", text" ,
                         "from sysibm.sysprint"
        end
    return
endProcedure sysprintInsert

/***********************************************************************
    stored procedure call:
        scan parms generate utility and rebind statements
        and call dsnUtilU to execeute them
***********************************************************************/
/*--- scan parms, do the work, put output into session.sysprint ------*/
storedProcCall: procedure expose m.
parse arg args
    call activateErrHandler
    call dbg 'stored Proc call'
    res = scanStringRun('-', args)
    call errReset 'h'
    call globalCleanup
    return res
endProcedure storedProcCall

/*--- activate the error handler for the stored proc -----------------*/
activateErrHandler: procedure expose m.
    call dbg 'activating err handler'
    m.out = 1
    call errReset 'h', 'exit(errHandler(ggTxt))'
    return
endProcedure activateErrHandler

/*--- stored proc error handler insert error messages
                    into session.sysprint ----------------------------*/
errHandler: procedure expose m.
parse arg msg
    call errReset 'h'
    call errSay msg, st, 'e'
    do sx=1 to m.st.0
        call out m.st.sx
        end
    say '| inserting output into session.sysprint'
    call sysprintInsert out
    m.out.0 = 0
 /*    keine gute Idee, es kommt nur Schrott vom letzten Mal||| ???
    say '| insert sysibm.sysprint into session.sysprint'
    call sysprintInsert               */
    say '| globalCleanup'
    call globalCleanup
    call out '||| error' msg
    call out '+++' myTime() 'error exit 12'
    say '| inserting output into session.sysprint'
    call sysprintInsert out
    m.out.0 = 0
    say '||| exit(12) |||'
    exit(12)
endProcedure errHandler

/*--- connect to pDb, scan src, do the work and
             insert output into session.sysprint ---------------------*/
scanStringRun: procedure expose m.
parse arg pDb, src
    if pDb <> '' then
        call setGlobal 'DB', pDb
    if sqlExImm('declare global temporary table sysprint',
                     '(SEQNO INTEGER NOT NULL,',
                      'TEXT VARCHAR(254))', -601) = -601 then
        call sqlExec 'DELETE FROM SESSION.SYSPRINT', 100
    call sqlExec 'set :us = user'
    m.superUser = us = 'A695189'
    m.explicitTempl = 1
    call sqlExec "insert into session.SYSPRINT values",
                 "(1, '?--- "m.self.name" start'",
                 "|| ' at" myTime()"'",
                 "|| ', version " m.self.version"'",
                 "|| ', db2 member ' || current member)"
    call sqlExec "insert into session.SYSPRINT values",
                 "(2,'    sqlUser" strip(us) m.superuser"'",
                 "|| ', osUser " userid()"')"
    call debugSqlCurrent 'scanStringRun db' m.db
    call genStatements mCut(gen, 0), src
    if m.mapTab ^== '' then
        /* das muessen wir vor dem PackageSwitch machen, weil
              create statements nur fuer ein Package mit
                   mit DYNAMICRULES(RUN) erlaubt (sonst SQL -549)
           fehlt dem Benutzer die Berechtigung
           bekommt er eine Fehlermehldung */
        call createMapTab m.mapTab
    if pDb = '-' then do
        call debugSqlCurrent 'before switch pkg'
        call sqlExec "set current packageset = 'DB2ADMIN'"
        call debugSqlCurrent 'after  switch pkg'
        end
    cnt = 0
    succ = 0
    do gx=1 to m.gen.0
        if abbrev(m.gen.gx, 'REBIND ') then do
            parse var m.gen.gx st '-- ' info
            call out '---' st
            call out '--   ' info
            cnt = cnt + 1
            succ = succ + bindCommand(st)
            end
        else do
            call runUtility m.id, m.gen.gx
            end
        end
    if cnt <> succ then
        call out '+++' cnt 'rebinds,' (cnt-succ) 'unsuccessful, rc 4'
    else if cnt <> 0 then
        call out '+++' cnt 'rebinds, all successful, rc 0'
    call out     "---" myTime() m.self.name "stop"
    call sysPrintInsert out
    return 0
endProcedure scanStringRun

/*--- connect to pDb, scan src, do the work and
             insert output into session.sysprint ---------------------*/
nativeJcl: procedure expose m.
parse arg oo, pDb, src
    if pDb <> '' then
        call setGlobal 'DB', pDb
    call debugSqlCurrent 'nativeJcl db' m.db
    m.superuser = -1
    m.explicitTempl = 0
    call genStatements mCut(gen, 0), src
    inReb = 0
    step = 0
    do gx=1 to m.gen.0
        if abbrev(m.gen.gx, 'REBIND ') then do
            parse var m.gen.gx st '-- ' info
            if ^inReb then do
                inReb = 1
                step = step + 1
                call jclTso oo, "db2 rebind", 'S'step, 0
                call mAdd oo, "DSN SYS("m.db")"
                end
            call mAdd oo,  st '-', '  /*' info '*/'
            end
        else do
            inReb = 0
            step = step + 1
            call mAdd oo,
                    , left("//*", 50, '-') "db2 utility",
                    , "//S"step "      EXEC PGM=DSNUTILB,REGION=0M,",
                                  ||   "PARM=("m.db",'"m.id"')"     ,
                    , "//DSSPRINT   DD SYSOUT=*"                    ,
                    , "//SYSPRINT   DD SYSOUT=*"                    ,
                    , "//SYSUDUMP   DD SYSOUT=*"                    ,
                    , "//UTPRINT    DD SYSOUT=*"                    ,
                    , "//STPRIN01   DD SYSOUT=*"                    ,
                    , "//DUMMY      DD DUMMY   "                    ,
                    , "//SYSTEMPL   DD DISP=SHR,"                   ,
                           ||  "DSN="m.db".DBAA.LISTDEF(TEMPL)" ,
                    , "//SYSIN DD *"
            call utilityFormat oo, m.gen.gx

            end
        end
    return 0
endProcedure nativeJcl

jclTso: procedure expose m.
parse arg oo, tit, step, proc
    call mAdd oo ,
        , left("//*", 50, '-') tit                          ,
        , "//"left(step,9) "EXEC PGM=IKJEFT01,DYNAMNBR=200" ,
        , "//SYSTSPRT   DD SYSOUT=*"                        ,
        , "//SYSPRINT   DD SYSOUT=*"
    if proc then
        call mAdd oo, "//SYSPROC  DD DISP=SHR,DSN=TSO.RZ1.P0.USER.EXEC"
    call mAdd oo, "//SYSTSIN    DD *"
    return oo
endProcedure jclTso

genStatements: procedure expose m.
parse arg gen, src
    call mCut c, 0
    m.c.list = mCut(l, 0)
    call utScanString c, src
    call expandLists c
    util = utGen(c)
    if util = '' then
        call out '--- no utility statements generated'
    else
        call mAdd gen, util
    rebCnt = genRebinds(gen, c)
    if util = '' & rebCnt = 0 then
        call out "+++ nothing to do rc 4"
    return
endProcedure genStatements

/*--- scan src, build tasks into stem u ------------------------------*/
utScanString: procedure expose m.
parse arg u, src
     call scanSqlReset sc, , 0
     call scanSrc sc, src
     return utScan(u, sc)
endProcedure ut ScanString

/*--- build tasks into stem u by scanning with sc --------------------*/
utScan: procedure expose m.
parse arg u, sc
    m.sc.utilBrackets = 0
    utilAll = 'COPY RUNSTATS REBIND LOAD UNLOAD REORG'
    gloAll  = 'DB ID'
    laLi = ''
    call scanSqlType sc
    do while m.sc.sqlType ^== ''
        if utScanList(m.u.list, sc) then do
            l = m.u.list
            laLi = l'.'m.l.0
            call dbg 'new list' laLi 'len' m.laLi.0
            do x=1 to m.laLi.0
                call dbg x m.laLi.x m.laLi.x.ts
                end
            end
        else if m.sc.sqlType = 'i' ,
            & wordPos(m.sc.val, gloAll) > 0 then do
            g = m.sc.val
            if scanSqlQuId(sc) then
                call setGlobal g, m.sc.val
            else if scanLit(sc, '-') then
                call setGlobal g, '-'
            else
                call scanErr sc, 'qual id excpected after' g
            call scanSqlType sc
            end
        else if m.sc.sqlType = 'i' ,
            & pos(' 'm.sc.val, ' 'utilAll) > 0 then do
            uw = word(substr(utilAll, pos(' 'm.sc.val, ' 'utilAll)), 1)
            nd = mAdd(u, uw)
            m.nd.util = uw
            m.nd.shrlevel = 'C'
            m.nd.delims   = ''
            m.nd.limit    = ''
            m.nd.list = laLi
            if laLii = '' then
               call scanErr sc, m.nd.util 'without list'
            if uw = 'LOAD' | uw = 'UNLOAD' then do
                if ^ scanVerify(scanSkip(sc), ' ', 'm') then
                    call scanErr sc, 'load file dsn expected'
                m.nd.loadfile = m.sc.tok
                m.nd.0 = 0
                end
            if uw = 'UNLOAD' then do
                if ^ scanVerify(scanSkip(sc), ' ', 'm') then
                    call scanErr sc, 'punch file dsn expected'
                m.nd.punchfile = m.sc.tok
                end
            call scanSqlType scanSkip(sc)
            call utScanOpts nd, sc
            end
        else if m.sc.sqlType = 'i' & m.sc.val = 'INTO' then do
            if m.nd.util <> 'LOAD' then
                call scanErr sc, 'into must be in LOAD'
            if ^ scanSqlQuID(sc) then
                call scanErr 'table name expected'
            in = mAdd(nd, m.sc.val)
            m.in.tbQu = m.sc.tok
            nx = scanUtil(sc)
            call scanBack sc, m.sc.tok
            m.in.flds = ''
            if nx = '(' then do
                m.in.flds = '(' scanUtilValue(sc, 0) ')'
                call scanSqlType sc
                end
            end
        else if m.sc.sqlType = 'i' & m.sc.val = 'DELIMITED' then do
            if m.nd.util <> 'LOAD' & m.nd.util <> 'UNLOAD' then
                call scanErr sc, 'delimited must be in LOAD or UNLOAD'
            call scanSqlType sc
            m.nd.delims = 'DELIMITED COLDEL' delWo(sc) ,
                          'CHARDEL' delWo(sc) 'DECPT' delWo(sc)
            end
        else do
            call scanErr sc, 'list or' utilAll 'excpected'
            end
        end
    return 1
endProcedure utScan

/*--- scan a word for delimiter syntax -------------------------------*/
delWo: procedure expose m.
parse arg sc
    if m.sc.sqlType ^== 's' then
        call scanErr sc, "delimiter expected (',' or x'25')"
    res = m.sc.tok
    call scanSqlType sc
    return res
endProcedure delWo

/*--- if the scanner is at a list, scannit and add it to l -----------*/
utScanList: procedure expose m.
parse arg l, sc
    listAll = 'TB TS VW'
    if m.sc.sqlType ^== 'i' | wordPos(m.sc.val, listAll) < 1 then
         return 0
    nl = mCut(mAdd(l, 'list'), 0)
    do while m.sc.sqlType == 'i' & wordPos(m.sc.val, listAll) > 0
        ty = m.sc.val
        do forever
            if ^ quMask(sc) then
                call scanErr sc, 'qualified id for' ty 'expected'
            name = m.sc.val
            call scanSqlType sc
            pa = ''
            if m.sc.sqlType = '*' then do
                pa = '*'
                call scanSqlType sc
                end
            else do while m.sc.sqlType = 'n'
                pa = pa m.sc.val
                call scanSqlType sc
                if m.sc.sqlType = '-' then do
                    call scanSqlType sc
                    if m.sc.sqlType ^== 'n' then
                        call scanErr sc, 'number expected after -'
                    pa = pa'-'m.sc.val
                    call scanSqlType sc
                    end
                else if m.sc.sqlType = 'n' & abbrev(m.sc.val,'-')then do
                    pa = pa || m.sc.val
                    call scanSqlType sc
                    end
                end
            n1 = mAdd(nl, ty)
            m.n1.ts = name
            m.n1.parts = pa
            if m.sc.sqlType ^== ',' then
                leave
            end
        end
    return 1
endProcedure utScanList

/*--- scan a qualifier with mask characters (* ?) --------------------*/
quMask: procedure expose m.
parse arg sc
    old1 = m.sc.scanName1
    oldR = m.sc.scanNameR
    m.sc.scanName1 = old1'*?%_\'
    m.sc.scanNameR = oldR'*?%_\'
    res = scanSqlQuId(sc)
    m.sc.scanName1 = old1
    m.sc.scanNameR = oldR
    return res
endProcedure quMask

/*--- scan options an put them into u --------------------------------*/
utScanOpts: procedure expose m.
parse arg u, sc
    optsAll = ' SHRLEVEL LIMIT RESUME '
    do forever
        px = pos(' 'm.sc.val, optsAll)
        if m.sc.sqlType ^== 'i' | px < 1 then
            return 0
        if px = pos(' 'm.sc.val, optsAll, px+2) > 0 then
            call scanErr sc, 'abbreviation not unique' m.sc.val
        att = word(substr(optsAll, px), 1)
        if ^ scanSqlType(sc) & pos(m.sc.sqlType, 'in') < 1 then
            call scanErr sc, 'value expected for' att
        m.u.att = m.sc.val
        call scanSqlType sc
        end
    return
endProcedure utScanOpts

/***********************************************************************
     expand lists. query db2Catalog to expand wildcards
***********************************************************************/
/*--- expand all lists -----------------------------------------------*/
expandLists: procedure expose m.
parse arg c
    lstLst = m.c.list
    do cx = 1 to m.c.0
        src = m.c.cx.list
        if symbol('st.src') = 'VAR' then do
            m.src.list = st.src
            iterate
            end
        trg = mCut(mAdd(lstLst, 'expList' src), 0)
        st.src = trg
        m.src.list = trg
        if m.explicitTempl then
            call out '  list' cx
        do sx=1 to m.src.0
             call expandAdd trg, m.src.sx, m.src.sx.ts, m.src.sx.parts
             end
        end
    return
endProcedure expandLists

/*--- expand one list entry and add the results to lst ---------------*/

expandAdd: procedure expose m.
parse arg lst, ty, qu '.' na, pa
    if m.explicitTempl then
        call out '   expanding' ty qu'.'na pa
                        /* build the sql */
    sqS = 'select distinct strip(t.creator), strip(t.name),',
                  'strip(t.dbName), strip(t.tsName),',
                  's.partitions, s.nTables' ,
              'from sysIbm.sysTables t, sysIbm.sysTablespace s'
    sqW =     'where t.tsName = s.name and t.dbName = s.dbName',
                "and t.type = 'T'"
    if ty = 'TS' then
        sq = sqS sqW 'and t.dbName' sqlClause(qu) ,
                     'and t.tsName' sqlClause(na)
    else if ty = 'TB' then
        sq = sqS sqW 'and t.creator' sqlClause(qu) ,
                     'and t.name' sqlClause(na)
    else if ty = 'VW' then
        sq = "with pa (cre, nam, typ, lev) as"                        ,
               "( select bCreator, bName, bType, 1"                   ,
                    "from sysibm.sysViewDep"                          ,
                    "where dType = 'V'"                               ,
                        "and dCreator" sqlClause(qu)                  ,
                        "and dName" sqlClause(na)                     ,
                 "union all select d.bCreator, d.bName,"              ,
                                  "d.bType, p.lev+1"                  ,
                     "from sysibm.sysViewDep d, pa p"                 ,
                     "where d.dcreator = p.cre and d.dName = p.nam"   ,
                          "and d.dType = p.Typ and p.lev < 1000"      ,
               ")" sqS ", pa p" sqW                                   ,
                     "and p.typ = 'T' and p.cre = t.creator"          ,
                                      "and p.nam = t.name"
    else
        call err 'bad list type' ty 'for' qu'.'na pa
    call dbg 'exp sql' sq
    call sqlPreOpen 1, sq
    xOld = m.lst.0
    do x=xOld+1 by 1  /* fetch the result rows */
        z = lst'.' || x
        y = ':m.'z'.'
        if ^ sqlFetchInto(1, y'CR,' y'TB,',
                   y'db,' y'ts,' y'paCnt,' y'tbCnt') then
            leave
        ky = m.z.cr'.'m.z.tb
                       /* check authorization */
        if m.superuser == -1 then do
            m.auth.ky = ''
            end
        else if symbol('m.auth.ky') ^== 'VAR' then do
            aa = 'delete from' ky
            if sqlExec('prepare s9 from :aa', '0 -551') = 0 then do
                m.auth.ky = 'w'
                end
            else do
                m.auth.ky = 'r' sqlMsg()
                call dbg 'no auth w' ky m.auth.ky
                aa = 'select 1 from' ky
                if sqlExec('prepare s9 from :aa', '0 -551') = -551 then
                    m.auth.ky = '-' sqlMsg()
                end
            end
        m.z.auth = m.auth.ky
        if m.explicitTempl | m.debug then
            call out '    ts' m.z.db'.'m.z.ts',' m.z.paCnt 'parts,' ,
                      m.z.tbCnt 'tables:' ky', auth' m.z.auth
        m.z.parts = pa
        call dbg 'llll' z m.z.auth parts m.z.parts
        end
    m.lst.0 = x-1
    call sqlClose 1
    call dbg 'fetched' m.lst.0 - xOld
    return
endProcedure expandAdd

/*--- return a sql clause = val, like val, like val escape -----------*/
sqlClause: procedure expose m.
parse arg val
     if verify(val, '*?', 'm') < 1 then
          return '=' quote(val, "'")
     else if verify(val, '_%', 'm') < 1 then
          return 'like' quote(translate(val, '%_', '*?'), "'")
     call dbg 'sql val before' val
     cx = -1
     do while cx < length(val)
         cx = verify(val, '\_%', 'm', cx+2)
         if cx < 1 then
             leave
         val = left(val, cx-1)'\'substr(val, cx)
         end
     val = translate(val, '%_', '*?')
     call dbg 'sql val after ' val
     return 'like' quote(val, "'") "escape '\'"
endProcedure sqlClause

/***********************************************************************
    generate utility statements
***********************************************************************/
/*--- generate all utility statements --------------------------------*/
utGen: procedure expose m.
parse arg utSt
    st = ''
    do ux=1 to m.utSt.0
        u = utSt'.'ux
        if m.u.util = 'COPY' then
            st = st utCopy(u)
        else if m.u.util = 'LOAD' then
            st = st utLoad(u)
        else if m.u.util = 'RUNSTATS' then
            st = st utRunstats(u)
        else if m.u.util = 'UNLOAD' then
            st = st utUnload(u)
        else if m.u.util = 'REORG' then
            st = st utReorg(u)
        else if wordPos(m.u.util, 'REBIND') < 1 then
            call err 'utility' m.u.util 'not implemented (yet)'
        end
    return st
endProcedure utGen

/*--- generate copy --------------------------------------------------*/
utCopy: procedure expose m.
parse arg u
    listDef = utListDef(m.u.list, 1, 'r')
    if listDef = '' then do
        call out '+++ copy on empty list, rc 4'
        return ''
        end
    tCo = utTemplate('COPYD')
    st = subword(tCo, 2)
    st = st subword(listdef, 2) ,
          'COPY LIST' word(listdef, 1),
          'COPYDDN('word(tCo, 1)') FULL YES PARALLEL' m.cnf.lf,
          'SHRLEVEL' word('REFERENCE CHANGE',
                       , 2 - abbrev(m.c.shrLevel, 'R'))
    return st m.cnf.eSt
endProcedure utCopy

/*--- generate runstats ----------------------------------------------*/
utRunstats: procedure expose m.
parse arg u
    listDef = utListDef(m.u.list, 0, 'w')
    if listDef = '' then do
        call out '+++ runstats on empty list, rc  4'
        return ''
        end
    st = subword(listdef, 2) ,
         'RUNSTATS TABLESPACE LIST' word(listdef,1),
         'INDEX(ALL) UPDATE(ALL) SHRLEVEL CHANGE'
    return st m.cnf.eSt
endProcedure genRunstats

/*--- generate unload ------------------------------------------------*/
utUnload: procedure expose m.
parse arg u
    ll = m.u.list
    listDef = utListDef(ll, 0, 'w', 'tbCnt')
    ll = m.ll.list
    if m.ll.0 < 1 then do
        call out '+++ unload on empty list, rc 4'
        return ''
        end
    tLo = utTemplate('LOAD', m.u.loadFile)
    tPu = utTemplate('PUNCH', m.u.punchFile)
    st = subword(tLo,2) subword(tPu, 2)
    do lx = 1 to m.ll.0
        st = st 'UNLOAD DATA FROM TABLE' m.ll.lx.cr'.'m.ll.lx.tb
        if m.u.limit <> '' then
            st = st 'LIMIT' m.u.limit
        st = st m.cnf.lf,
             'UNLDDN' word(tLo, 1) m.cnf.lf,
             'PUNCHDDN' word(tPu, 1) m.cnf.lf,
             m.u.delims utShr(m.u.shrlevel) m.cnf.eSt
        end
    return st
endProcedure utUnload

/*--- generate load --------------------------------------------------*/
utLoad: procedure expose m.
parse arg u
    ll = m.u.list
    listDef = utListDef(ll, 1, 'w', 'tbCnt')
    ll = m.ll.list
    if m.ll.0 < 1 then do
        call out '+++ load on empty list, rc 4'
        return ''
        end
    tCo = utTemplate('COPYD')
    tLo = utTemplate('LOAD', m.u.loadFile)
    tWo = utTemplate('WORKDDN')
    st = subword(tLo, 2) subword(tCo, 2) subword(tWo, 2)
    if abbrev('YES', m.u.resume) then
        rere = 'RESUME YES' utshr(m.u.shrlevel)
    else if abbrev('NO', m.u.resume) then
        rere = 'RESUME NO REPLACE COPYDDN' word(tCo, 1)m.cnf.lf,
               'STATISTICS INDEX ALL UPDATE ALL'
    else
        call err 'bad resume' m.u.resume
    do lx = 1 to m.ll.0
        st = st 'LOAD INDDN' word(tLo, 1) rere m.cnf.lf ,
                word(tWo, 1) m.cnf.lf
        if m.u.delims <> '' then
            st = st 'FORMAT' m.u.delims
        crTb = m.ll.lx.cr'.'m.ll.lx.tb
        do ix = 1 to m.u.0 until m.u.ix = crTb
            end
        if ix > m.u.0 then do
            st = st 'INTO TABLE' crTb
            end
        else do
            in = u'.'ix
            st = st 'INTO TABLE' m.in.tbQu
            if m.in.flds <> '' then
                 st = st m.cnf.lf m.in.flds
            end
        st = st m.cnf.eSt
        end
    return st
endProcedure utLoad

/*--- generate Reorg -------------------------------------------------*/
utReorg: procedure expose m.
parse arg u
    listDef = utListDef(m.u.list, 0, 'w')
    mt = m.id
    if pos('.', mt) > 0 then
        mt = left(mt, pos('.', mt) - 1)
    if mt = '' then
        call err 'bad utility id' m.id 'gives empty mapTab'
    m.mapTab = 'S100447.'mt
    if listDef = '' then do
        call out '+++ reorg on empty list, rc 4'
        return ''
        end
    st = ''
    tCo = utTemplate('COPYD')
    tRe = utTemplate('SRECD')
    tWo = utTemplate('WORKDDN')
    st = subword(tCo, 2) subword(tRe, 2) subword(tWo, 2)
    st = st subword(listdef, 2) ,
          'REORG TABLESPACE LIST' word(listdef, 1) m.cnf.lf,
            'LOG NO SORTDATA NOSYSREC SORTKEYS' m.cnf.lf,
            'COPYDDN('word(tCo, 1)')'m.cnf.lf,
            'SHRLEVEL CHANGE' m.cnf.lf,
            'DRAIN_WAIT 1800 RETRY 0 RETRY_DELAY 300'm.cnf.lf,
            'MAPPINGTABLE' m.mapTab m.cnf.lf,
            'MAXRO 120 DRAIN WRITERS LONGLOG CONTINUE' m.cnf.lf,
            'DELAY 1200 TIMEOUT TERM' m.cnf.lf,
            'UNLDDN('word(tRe, 1)')' m.cnf.lf,
            word(tWo, 1) 'SORTDEVT DISK SORTNUM 48' m.cnf.lf,
            'STATISTICS INDEX ALL KEYCARD REPORT NO' m.cnf.lf,
            'UPDATE ALL HISTORY NONE FORCEROLLUP NO'

    return st m.cnf.eSt
endProcedure utReorg
/*--- Create Mappingtable für Reorg if necessary
             Mappintable heisst S100447.name in DB2MAPUT.name  -------*/
createMaptab: procedure expose m.
parse upper arg cr '.' name
    if   sqlPreAllCl(5,'SELECT 1',
            'FROM SYSIBM.SYSTABLES' ,
            "WHERE CREATOR = '"cr"'" ,
            "AND NAME = '"NAME"' AND TYPE = 'T'",
             , st , ':haha') > 0 then
         return cr'.'name
    call sqlCommit /* sonst ist nach rollback session.sysprint weg */
    call debugSqlCurrent 'before switch sql'
    sc = sqlExec("set current sqlid = 'S100447'", '*')
    call debugSqlCurrent 'after  switch sql'
    if sc = 0 then
       if sqlExec('CREATE DATABASE DB2MAPUT',
                 'BUFFERPOOL BP2',
                 'INDEXBP    BP1',
                 'CCSID      EBCDIC',
                 'STOGROUP   GSMS',
                 , '*') = -601 then /* wenn vorhanden, dann ok */
             sc = 0
         /* Tablespace für Maptab */
    if sc = 0 then
        sc = sqlExec('CREATE TABLESPACE' name,
                 'IN DB2MAPUT',
                 'USING STOGROUP GSMS',
                 'PRIQTY 12 SECQTY 48',
                 'ERASE  NO ',
                 'FREEPAGE 0 PCTFREE 5',
                 'GBPCACHE CHANGED',
                 'TRACKMOD YES ',
                 'SEGSIZE 64 ',
                 'BUFFERPOOL BP2 ',
                 'LOCKSIZE ANY ',
                 'LOCKMAX SYSTEM ',
                 'CLOSE YES ',
                 'COMPRESS NO ',
                 'CCSID      EBCDIC',
                 'DEFINE YES ',
                 'MAXROWS 255',
               , '*')
            /* Mappingtable anlegen       */
    if sc = 0 then
        sc = sqlExec(   'CREATE TABLE' cr'.'name,
         '("TYPE"        CHAR(1) FOR SBCS DATA NOT NULL,',
         'SOURCE_RID     CHAR(5) FOR SBCS DATA NOT NULL,',
         'TARGET_XRID    CHAR(9) FOR SBCS DATA NOT NULL with default,',
         'LRSN           CHAR(6) FOR SBCS DATA NOT NULL)',
         'IN DB2MAPUT.'name ' audit none ccsid ebcdic not volatile',
         , '*')
    if sc = 0 then
        sc = sqlExec('CREATE UNIQUE INDEX' cr'.I'name,
                    'ON' cr'.'name,
                    '(SOURCE_RID            ASC,',
                    ' "TYPE"                ASC,',
                    'TARGET_XRID           ASC,',
                    'LRSN                  ASC)',
                    'USING STOGROUP GSMS',
                    'PRIQTY -1 SECQTY -1',
                    'ERASE  NO',
                    'FREEPAGE 0 PCTFREE 10',
                    'GBPCACHE CHANGED',
                    'NOT CLUSTER',
                    'CLOSE YES',
                    'COPY NO',
                    'DEFINE YES',
                    'PIECESIZE 2 G',
              , '*')
    if sc = 0 then do
        call sqlCommit
        return cr'.'name
        end
    call out '  '
    call out '+++ Sie haben keine Berechtigung,'
    call out '+++     die Mappingtable' cr'.'name 'zu erstellen'
    call out '+++   bitte wenden Sie sich an die Db2 Administration'
    call out '  '
    call out sqlMsg()
    call sqlExec 'rollback'
    call err 'Berechtigung fuer MappgingTable'
endProcedure createMaptab
/*--- generate listdef -----------------------------------------------*/
utListDef: procedure expose m.
parse arg l, allParts, necAuth, checks
    call dbg 'utListDef' l '-->' m.l.list
    l = m.l.list
    if m.l.0 = 0 then
        return ''
    if symbol('m.listdef') == 'VAR' then
        m.listdef = m.listdef + 1
    else
        m.listdef = 1
    st = 'LIST'm.listdef
    st = st 'LISTDEF' st
    if pos('tbCnt', checks) > 0 then do
        do x=1 to m.l.0
            if m.l.x.tbCnt <> 1 then
                call err 'nur 1 table unterstuetzt, nicht' m.l.x.tbCnt,
                        'in ts' m.l.x.db'.'m.l.x.ts,
                        'mit table' m.l.x.cr'.'m.l.x.tb
            end
        end
    do x=1 to m.l.0
        aa = word(m.l.x.auth, 1)
        if m.superUser == -1 then
            nop
        else if wordPos(necAuth || aa, 'ww rw rr') > 0 then
            call dbg 'auth' necAuth 'allowed for' ,
                m.l.x.cr'.'m.l.x.tb 'in' m.l.x.db'.'m.l.x.ts aa
        else if m.superUser == 1 then
            call out 'ignoring authorization' necAuth 'for',
                m.l.x.cr'.'m.l.x.tb 'in' m.l.x.db'.'m.l.x.ts m.l.x.auth
        else
            call err 'authorization' necAuth 'error for',
                m.l.x.cr'.'m.l.x.tb 'in' m.l.x.db'.'m.l.x.ts m.l.x.auth
        st = st m.cnf.lf 'INCLUDE TABLESPACE' m.l.x.db'.'m.l.x.ts
        if ^ abbrev('*', m.l.x.parts) then
            st = st 'PARTLEVEL' m.l.x.parts
        else if allParts then
            st = st 'PARTLEVEL'
        end
    return st m.cnf.eSt
endProcedure utListDef

/*--- generate shrlevel ----------------------------------------------*/
utShr: procedure expose m.
parse arg lv, opt
    if abbrev('CHANGE', lv) then
        return 'SHRLEVEL CHANGE'
    if abbrev('REFERENCE', lv) then
        return 'SHRLEVEL REFERENCE'
    if ^ abbrev('NONE', lv) then
        call err 'bad shrLevel' lv
    if opt = 1 then
        return 'SHRLEVEL NONE'
    else
        return ''
endProcedure utShr

/*--- generate template ----------------------------------------------*/
utTemplate: procedure expose m.
parse upper arg ty, dsn
    nm = 'T'ty

    if dsn = '' then do
        if m.templ.gen.nm == 1 then
            return nm
        if ty = 'WORKDDN' then do
            u = utTemplate('SYUTD')
            s = utTemplate('SOUTD')
            return 'WORKDDN('word(u, 1)','word(s, 1)')' ,
                            subword(u, 2) subword(s, 2)
            end
        m.templ.gen.nm = 1
        end
    else if dsn = 'DUMMY' then do
        return DUMMY
        end
    else do
        dsn = "DSN('"dsn"')"m.cnf.lf
        nm = nm || mInc(templ.0)
        end
    m.templ.name = nm
    if wordPos(ty, 'COPYD SYUTD SOUTD SRECD') < 1 then
        return nm 'TEMPLATE' nm dsn m.templ.new m.cnf.eSt
    else if m.explicitTempl then
        return nm 'TEMPLATE' nm dsn m.templ.ty m.cnf.eSt
    else
        return nm
endProcedure utTemplate

/*--- run utility with the given stamtents and write output ----------*/
runUtility: procedure expose m.
parse arg utId, st
    call scanUtilReset xxx
    call out ''
    call out '--- utility statements'
    call utilityFormat , st
    st = translate(st, ' ', m.cnf.lf)
    call dbg 'util st' length(st)':' st
    rst = 'NO'
    retcode = -9876
    e = ''
    z = 0
    call out
    call out '---' myTime() "exec sql call" m.cnf.procSys "("utId",...)"
    src = "call" m.cnf.procSys"( :utId, :rst,",
           ":st,:retcode, :ANY" copies(',:e,:e,:z',12) ")"
    if m.debug == 1 then do
        call debugSqlCurrent 'before sql' src
        call dbg '  with utId' utId
        call dbg '  with  rst' rst
        call dbg '  with   st' st
        call dbg '  with    e' e
        call dbg '  with    z' z
        end
    call sqlExec src, 0 +466
    call out '---' myTime() 'utility retCode' retCode
    call out '--- utility output'
    call sysPrintInsert  out
    m.out.0 = 0
    call sysPrintInsert
    call out '--- end utility output'
    call out '+++' myTime() 'utility retCode' retCode
    call sysPrintInsert  out
    m.out.0 = 0
    return
endProcedure runUtility

/*--- write the utility statements in st
          formated in lines to stem oo -------------------------------*/
utilityFormat: procedure expose m.
parse arg oo, st
    call scanUtilReset xxx
    x = 0
    cont = 0
    do while x < length(st)
        y = pos(m.cnf.lf, st, x+1)
        if y = 0 then
            y = length(st) + 1
        li = strip(substr(st, x+1, y-x-1))
        cont = wordPos(word(li, 1), m.scanUtil) < 1
        if oo = '' then
            call out left('', 4 * cont)li
        else
            call mAdd oo, left('', 4 * cont)li
        x = y
        end
    return
endProcedure utilityFormat

/***********************************************************************
    rebinds
***********************************************************************/
/*--- all rebinds ----------------------------------------------------*/
doRebind: procedure expose m.
parse arg utSt
    oldDb = ''
    sel = ''
    do ux=1 to m.utSt.0
        u = utSt'.'ux
        if m.u.util ^= 'REBIND' then
            iterate
        gotRebind = 1
        l = m.u.list
        listDef = utListDef(l, 0, 'w') /* check authorization */
        call dbg 'list' l m.l.0
        l = m.l.list
        do lx=1 to m.l.0
            call dbg 'rebind tb' m.l.lx.cr'.'m.l.lx.tb
            if oldDb <> m.l.lx.DB then do
                oldDb = m.l.lx.DB
                sel = sel ")) or (bQualifier='"oldDb"' and bName in ('"
                end
            else do
                sel = sel", '"
                end
            sel = sel || m.l.lx.ts"'"
            call dbg 'sel +' sel
            end
        end
    if sel = '' then do
        if gotRebind = 1 then
            call out '+++ no rebinds for empty object list, rc 4'
        return 0
        end
    sel = substr(sel, 7)'))'
    call dbg 'sel =' sel
    p = ':m.pk.sx.'
    call sqlPreOpen 8,
        , "select distinct dCollid, dName, dContoken, version, p.type,",
                          "p.bindTime, p.valid, p.operative",
              "from sysibm.sysPackDep d, sysibm.sysPackage p" ,
              "where bType in ('P', 'R')" ,
                  "and d.dLocation = p.location" ,
                  "and d.dCollid = p.collid" ,
                  "and d.dName = p.name" ,
                  "and d.dConToken = p.conToken" ,
                  "and ("sel")" ,
              "order by 2, 4, 1"
    succ = 0
    do sx=1 while sqlFetchInto(8, ':col, :nam, :cTo, :ver, :typ,' ,
                             ':bTi, :val, :ope')
        call dbg sx col nam c2x(cTo) ver typ bTi 'vo' val ope
        st = 'PACKAGE('strip(col)'.'strip(nam)
        if typ = 'T' then
            st = 'REBIND TRIGGER' st')'
        else
            st = 'REBIND' st'.('strip(ver)'))'
        call out '---' st
        call out '--     valid='val', op='ope', lastBind='bTi
        succ = succ + bindCommand(st)
        end
    call sqlClose 8
    sx = sx-1
    if sx = succ then
        call out '+++' sx 'rebinds, all successful, rc 0'
    else
        call out '+++' sx 'rebinds,' (sx-succ) 'unsuccessful, rc 4'
    return sx
endProcedure doRebind

genRebinds: procedure expose m.
parse arg gen, utSt
    oldDb = ''
    sel = ''
    do ux=1 to m.utSt.0
        u = utSt'.'ux
        if m.u.util ^= 'REBIND' then
            iterate
        gotRebind = 1
        l = m.u.list
        listDef = utListDef(l, 0, 'w') /* check authorization */
        call dbg 'list' l m.l.0
        l = m.l.list
        do lx=1 to m.l.0
            call dbg 'rebind tb' m.l.lx.cr'.'m.l.lx.tb
            if oldDb <> m.l.lx.DB then do
                oldDb = m.l.lx.DB
                sel = sel ")) or (bQualifier='"oldDb"' and bName in ('"
                end
            else do
                sel = sel", '"
                end
            sel = sel || m.l.lx.ts"'"
            call dbg 'sel +' sel
            end
        end
    if sel = '' then do
        if gotRebind = 1 then
            call out '+++ no rebinds for empty object list, rc 4'
        return 0
        end
    sel = substr(sel, 7)'))'
    call dbg 'sel =' sel
    p = ':m.pk.sx.'
    call sqlPreOpen 8,
        , "select distinct dCollid, dName, dContoken, version, p.type,",
                          "p.bindTime, p.valid, p.operative",
              "from sysibm.sysPackDep d, sysibm.sysPackage p" ,
              "where bType in ('P', 'R')" ,
                  "and d.dLocation = p.location" ,
                  "and d.dCollid = p.collid" ,
                  "and d.dName = p.name" ,
                  "and d.dConToken = p.conToken" ,
                  "and ("sel")" ,
              "order by 2, 4, 1"
    succ = 0
    do sx=1 while sqlFetchInto(8, ':col, :nam, :cTo, :ver, :typ,' ,
                             ':bTi, :val, :ope')
        call dbg sx col nam c2x(cTo) ver typ bTi 'vo' val ope
        st = 'PACKAGE('strip(col)'.'strip(nam)
        if typ = 'T' then
            st = 'REBIND TRIGGER' st')'
        else
            st = 'REBIND' st'.('strip(ver)'))'
        call mAdd gen, st '-- valid='val', op='ope', lastBind='bTi
        end
    call sqlClose 8
    return sx - 1
endProcedure genRebinds

/*--- one bindstatement ----------------------------------------------*/
bindCommand: procedure expose m.
parse arg stmt
  /****** use undocumented DSNESM71 programm,
          as it is used in DSNTBIND ***********************************/
  'NEWSTACK'
  queue "DSNE"
  queue stmt
  queue "END"

  x = outtrap('m.bm.')
  ADDRESS ATTCHMVS "DSNESM71"            /* call "pre" bind           */
  bind_rc = rc                           /* set rc to DSNESM71 call   */
  x = outtrap('OFF')

  'DELSTACK'
  call dbg 'bind rc' bind_rc D2X(ABS(bind_rc)) 'msgs' m.bm.0
  call sysPrintInsert out
  m.out.0 = 0
  if m.debug then do x=1 to m.bm.0
      call dbg m.bm.x
      end
  call sysPrintInsert bm
  do bx = 1 to m.bm.0
      if pos(' SUCCESSFUL REBIND ', m.bm.bx) > 0
          then return 1
      end
  return 0
 endProcedure bindCommand

/***********************************************************************
    small helper functions
***********************************************************************/
/*--- one output message ---------------------------------------------*/
out: procedure expose m.
parse arg msg
    sx = 0
    bx = -1
    do lx=1 until bx >= length(msg)
        ex = pos('\n', msg, bx+2)
        if ex < 1 then
            ex = length(msg)+1
        say substr(msg, bx+2, ex-bx-2)
        if m.out then
            call mAdd out, substr(msg, bx+2, ex-bx-2)
        bx = ex
        end
    return
endProcedure out

/*--- one debug message ----------------------------------------------*/
dbg: procedure expose m.
parse arg msg
    if m.debug then
        call out '???' msg
    return
endProcedure dbg

/***********************************************************************
    old test functions
***********************************************************************/
autTest: procedure expose m.
    call setGlobal 'DB', 'DBAF'
    call sqlExec 'set :oldPkgSet = current packageset'
    call out '*** autTest oldPkgSet =' oldPkgSet
    call autTestOne 'DSNREXX'
    call autTestOne 'DSNREXCS'
    call autTestOne 'DSNREXRR'
    call autTestOne 'DSNREXRS'
    call autTestOne 'DSNREXUR'
    call autTestOne 'DB2ADMIN'
    call sqlExec 'set current packageset = :oldPkgSet'
    call sqlExec 'set :act = current packageset'
    call out '*** autTest switche back to PkgSet =' act
    return 0
endProcedure autTest

autTestOne: procedure expose m.
parse arg pkgSet
    call sqlExec 'set current packageset = :pkgSet'
    call sqlExec 'set :act = current packageset'
    call out '*** autTestOne with pkgSet' pkgSet '=' act
    se = 'select WK011CH20 from A540769A.TWK011A'
    call autTestSel se
    call autTestSel se 'where 1 = 0'
    up = "update A540769A.TWK011A set WK011CH2 = 'q'"
    call autTestUpd up
    call autTestUpd up 'where 1 = 0'
    return
endProcedure autTestOne

autTestSel: procedure expose m.
parse arg sel
     msg = ''
     if sqlExec('prepare s7 from :sel', '*') < 0 then
         msg = 'prepare' sqlMsg()
     if sqlExec('declare c7 cursor for s7', '*') < 0 & msg = '' then
         msg = 'declare' sqlMsg()
     if sqlExec('open c7', '*') < 0 & msg = '' then
         msg = 'open' sqlMsg()
     v=''
     fet = sqlExec('fetch c7 into :v', '*')
     if fet < 0 msg = '' then
         msg = 'fetch v='v sqlMsg()
     if sqlExec('close c7', '*') < 0 then
          msg = 'close' sqlMsg()
     if msg = '' then
         msg = 'sel ok  fet' fet 'v' v
     else
         msg = 'sel err fet' fet
     call out msg sel
     return
endTestSel

autTestSelOld: procedure expose m.
parse arg sel
     call out 'autTestSel' sel
     call sqlExec 'prepare s7 from :sel', '*'
     call out '   prepare' sqlMsg()
     call sqlExec 'declare c7 cursor for s7', '*'
     call out '   declare' sqlMsg()
     call sqlExec 'open c7', '*'
     call out '   open' sqlMsg()
     v=''
     call sqlExec 'fetch c7 into :v', '*'
     call out '   fetch v='v sqlMsg()
     call sqlExec 'close c7', '*'
     call out '   close' sqlMsg()
     return
endTestSelOld

autTestUpd: procedure expose m.
parse arg upd
     msg = ''
     if sqlExec('prepare s1 from :upd', '*') < 0 then
         msg = 'prep' sqlMsg()
     if sqlExec('execute s1', '*') < 0 & msg = '' then
         msg = 'exec' sqlMsg()
     if msg = '' then
         msg = 'ok'
     call out 'upd' msg
     return
endTestUpd

autTestUpdOld: procedure expose m.
parse arg upd
     call out 'autTestUpd' upd
     call sqlExec 'execute immediate :upd', '*'
     call out '   execute immediate' sqlMsg()
     return
endTestUpdOld

debugSqlCurrent: procedure expose m.
parse arg pr, always
    if m.debug ^== 1 & always ^== 1 then
        return
    call sqlPreAllCl 5,'SELECT current sqlid, user, current packageset',
            'from sysibm.sysDummy1' , st , ':id, :us, :pa'
    if m.st.0 <> 1 then
        call err 'sysDummy1 <> 1'
    call out pr 'sqlCurrent sqlId' id 'user' us 'pkgSet' pa
    return
endProcedure debugSqlCurrent
/*--- return current collection --------------------------------------*/

testAnaPunch: procedure expose m.
    call errReset 'h'
    call analysePunch p1, 'DBAF.TMP.TST.DA540769.A418A.PUN3'
    say 'tb' m.p1.tb '*' m.p1.tbQu
    say '  inDsn' m.p1.inDsn
    say '  flds' m.p1.flds
    return 0
endProcedure testAnaPunch

testmaptab: procedure expose m.
    call errReset 'h'
    call sqlconnect dbaf
    call sqlExec "set current sqlid = 'S100447'"
    call createMaptab 's100447.Walter2'
    call sqldisconnect
    return 0
endProcedure testmaptab

testCopy1: procedure expose m.
    call activateErrHandler
    call setGlobal 'DB', 'DBAF'
    m.l.1.ts    = 'DGDB9998.A422A'
    m.l.1.parts = '*'
    m.l.0       = 1
    m.c.0 = 1
    c = 'C.1'
    m.c.util = 'COPY'
    m.c.list  = l
    c = 'C'
    call runUtility m.id, utGen(c)
 /* call err 'test errhandler\nline2\nline3    |' */
    call outputSysprint
    m.c.1.util = 'RUNSTATS'
    call runUtility m.id, utGen(c)
    call outputSysprint
    call globalCleanup
    return 0
endProcedure testCopy1

testCopy2: procedure expose m.
    call activateErrHandler
    call scanStringRun 'DBAF', 'ts DGDB9998.A422A 4 - 8 11 12 -18',
                         'id A540769.test2  copy shr r'
    call outputSysprint
    call globalCleanup
    return 0
endProcedure testCopy2

testCopy3: procedure expose m.
    call activateErrHandler
    call scanStringRun 'DBAF', 'ts DGDB9998.A202A ',
                         'id A540769.test2  copy shr r run'
    call outputSysprint
    call globalCleanup
    return 0
endProcedure testCopy2

testRebind: procedure expose m.
    c = 'REBIND PACKAGE(DB.DBWK3.(DB2J000003))'
    c = '-DIS DATABASE(DA540769)'
    b = 'REBIND PACKAGE(DB.DBWK1.(DB2J000003))'
    c = 'REBIND PACKAGE(DB.DBWK3.(DB2J000003))'
    d = 'REBIND PACKAGE(DB.DBWK411.(DB2J000003))'
    call bindCommand b
    return 0

db2Command: procedure expose m.
parse arg cmd
    call dbg 'db2Command' cmd
    len = length(cmd)
    e = ''
    cCmd = -99
    iRet = -99
    iRes = -99
    xsBy = -99
    gRea = -99
    gXs  = -99
    cRc  = -99
    cMsg = left('', 6000)
    cMsgI = -123
    sql = "CALL SYSPROC.ADMIN_COMMAND_DB2(" ,
              ":cmd,"                    ,/* DB2_CMD     P  1 VARCHAR */
              ":len,"                    ,/* LEN_CMD     P  2 INTEGER */
              ":e,"                      ,/* PARSE_TYPE  P  3 VARCHAR */
              ":e,"                      ,/* DB2_MEMBER  P  4 VARCHAR */
              ":cCmd,"                   ,/* CMD_EXEC    O  5 INTEGER */
              ":iRet,"                   ,/* IFCA_RET    O  6 INTEGER */
              ":iRes,"                   ,/* IFCA_RES    O  7 INTEGER */
              ":xsBy,"                   ,/* XS_BYTES    O  8 INTEGER */
              ":gRea,"                   ,/* IFCA_GRES   O  9 INTEGER */
              ":gXs,"                    ,/* GXS_BYTES   O 10 INTEGER */
              ":cRc,"                    ,/* RETURN_CODE O 11 INTEGER */
              ":cMsg :cMsgI"             ,/* MSG         O 12 VARCHAR */
            ")"
    call dbg 'db2Cmd sql' sql
    sc = sqlExec(sql, 466)
    call dbg 'cmd sqlCode' sc      'cCmd' cCmd 'ret' iRet
    call dbg 'msg ind' cMsgI 'len' length(cMsg) length(strip(cMsg))
    call sqlPreOpen 1, 'select rowNum, text' ,
                            'from sysibm.db2_cmd_output' ,
                            'order by 1 asc'
    do while sqlFetchInto(1, ':rw, :tx', 100)
        call dbg 'cmd' rw strip(tx, 't')
        end
    return 0
endProcedure db2Command

testStoredProc: procedure expose m.
parse arg conn
    call errReset 'h'
    m.out = 1
    call scanStringRun conn, 'id A540769A tb gdb6663.TWK401A',
                                'reo '
/*  call scanStringRun conn, 'id A540769.stoPr tb A540769.TWK418A' ,
                         ' loa TSS.SKA.TMP.TST.&TS..UNL3',
                         '     RESU n SHRLEVEL CHANGE LIMIT 89' ,
                         '     delimited  '','' X''7F'' ''.'' '
    call scanStringRun conn, 'id A540769.stoPr tb OA1A01.TBE111A1 REB'
    call scanStringRun conn, 'id A540769.stoPr tb A540769.TWK418A ',
                         'copy shr r reb'
                         ' LOA DBAF.TMP.TST.DA540769.A418A.LOA3',
                         ' SHRLEVEL CHA resume Y',
                         ' into "A540769"."TWK418A" ( ',
                         '  "WK418K1"',
                         '\POSITION(  00003:00008) CHAR(00006)',
                         '\, "WK418K2"',
                         '\POSITION(  00009:00012) CHAR(00004)',
                         '\, "WK418D1"',
                         '\POSITION(  00014:00015) CHAR(00002)',
                         "\ NULLIF(00013)=X'FF')"
                         'copy shr r rebi'
                         ' tb *.AB?T_T*      ' ,
                         ' tb A540769.TWK411A1 TB OA1A.TMF716A1' ,
                         ' vw GDB9998.VWK210A2 ' ,
                         ' unl TSS.SKA.TMP.TST.&TS..UNL3',
                         '     TSS.SKA.TMP.TST.&TS..PUN3',
                         '     RESU n SHRLEVEL CHANGE LIMIT 89 RUN',
    call scanStringRun conn, 'id A540769.stoPr tb A540769.TWK418A' ,
                         ' unl TSS.SKA.TMP.TST.&TS..UNL3',
                         '     TSS.SKA.TMP.TST.&TS..PUN3',
                         '     RESU n SHRLEVEL CHANGE LIMIT 89',
                         '     delimited  '','' X''7F'' ''.'' '
       */
    call showSysPrint
    return 0
endProcedure testStoredProc

/* copy scanUtil begin *************************************************
    scan db2 utility input statements using scan and a reader
**********************************************************************/
/*--- initialize with reader inRdr ----------------------------------*/
scanUtilReader: procedure expose m.
parse arg m, inRdr
    call scanReader m, inRdr
    call scanOptions sc, , , '--'
    call scanUtilReset m
    return m
endProcedure scanUtilReader

scanUtilSql: procedure expose m.
parse arg inRdr
    m = scanSql(inRdr)
    call scanUtilReset m
    return m
endProcedure scanUtilReader

scanUtilReset: procedure expose m.
parse arg m
    m.m.utilBrackets = 0
    m.scanUtil =  'BACKUP CATENFM CATMAINT CHECK' ,
                  'COPY COPYTOCOPY DIAGNOSE EXEC LISTDEF LOAD' ,
                  'MERGECOPY MODIFY OPTIONS QUIESCE REBUILD' ,
                  'RECOVER REORG REPAIR REPORT RESTORE' ,
                  'RUNSTATS STOSPACE TEMPLATE UNLOAD'
    return
endProcedure scanUtilReset
/*--- scan next token and put its type in m.sc.utilType:
      'u' a utility name
      'n' a name
      '"' a quoted name
      "'" an apostroph'd string
      '.' a .
      ',' a ,
      'v' a value
      ''  at end
      ---------------------------------------------------------------*/
scanUtil: procedure expose m.
parse arg sc
    m.sc.utilSpace = scanSpaceNl(sc)
    ty = '?'
    if scanLit(sc, '(') then do
        m.sc.utilBrackets = m.sc.utilBrackets + 1
        end
    else if scanLIT(sc, ')') then do
        m.sc.utilBrackets = m.sc.utilBrackets - 1
        if m.sc.utilBrackets < 0 then
           call scanErr sc, 'unmatched closing bracket )'
        end
    else if scanLit(sc, ',') then do
        end
    else if scanLit(sc, '.') then do
        end
    else if scanString(sc, "'") then do
        end
    else if scanString(sc, '"') then do
        end
    else if scanName(sc) then do
        m.sc.val = translate(m.sc.tok)
        if m.sc.utilBrackets > 0 then
            ty = 'n'
        else if 0 < wordPos(m.sc.val, m.scanUtil) then
            ty = 'u'
        else
            ty = 'n'
        end
    else if scanVerify(sc, ' (),''"', 'm') then do
        ty = 'v'
        m.sc.val = translate(m.sc.tok)
        end
    else if ^scanAtEnd(sc) then do
            call scanErr sc, 'scanUtil stopped before end'
        end
    else do
        /* say 'scanUtil return atEnd' */
        ty = ''
        m.sc.val = ''
        end
    if ty == '?' then
        m.sc.utilType = left(m.sc.tok, 1)
    else
        m.sc.utilType = ty
    return m.sc.utilType
endProcedure scanUtil

/*--- scan a value or a bracketed list of values ---------------------*/
scanUtilValue: procedure expose m.
parse arg sc, remApo, nl
    if remApo = '' | rempApo = 0 then
        remApo = "nv"
    else if rempApo = 1 then
        remApo = "nv'"
    if '(' ^== scanUtil(sc) then
         return scanUtilValueOne(sc, remApo)
    v = ''
    brx = m.sc.utilBrackets
    oLine = word(scanPos(sc), 1)
    do forever
        call scanUtil sc
        one = scanUtilValueOne(sc, remApo)
        if one == '' then
           call scanErr sc, 'eof in brackets'
        else if brx > m.sc.utilBrackets then
           return v
        nLine = word(scanPos(sc), 1)
        if ^ m.sc.utilSpace then
            v = v || one
        else if nl ^== '' & oLine <> nLine then
            v = v || nl || one
        else
            v = v' 'one
        oLine = nLine
        end
endProcedure scanUtilValue

scanUtilValueOne: procedure expose m.
parse arg sc, valTy
    if m.sc.utilType == '' then
        return ''
    else if m.sc.utilType == 'u' then
        call scanErr sc, 'util in scanUtilValueOne'
    if pos(m.sc.utilType, valTy) > 0 then
        return m.sc.val
    else
        return m.sc.tok
endProcedure scanUtilValueOne
/* copy scanUtil end **************************************************/
/* copy sql    begin ***************************************************
    sql interface
***********************************************************************/
sqlIni: procedure expose m.
    m.sqlNull = '---'
    return
endProcedure sqlIni

/*--- prepare statement 's'cx from sql src into descriptor desc ------*/
sqlPrepare: procedure expose m.
parse arg cx, src, descOut, descInp
     s = ''
     if descOut == 1 then
         s = 'into :M.SQL.'cx'.D'
     call sqlExec 'prepare s'cx s 'from :src'
     if descInp == 1 | (descInp == '' & pos('?', src) > 0) then
         call sqlExec 'describe input s'cx 'into :M.SQL.'cx'.I'
     else
         m.sql.cx.i.sqlD = 0
     return
endProcedure

/*--- prepare and declare 'c'cx from sql src -------------------------*/
sqlPreDeclare: procedure expose m.
parse arg cx, src, descOut, descInp
     call sqlPrepare cx, src, descOut, descInp
     call sqlExec 'declare c'cx 'cursor for s'cx
     return
endProcedure sqlPreDeclare

/*--- prepare, declare and open 'c'cx from sql src -------------------*/
sqlPreOpen: procedure expose m.
parse arg cx, src, descOut, descInp
     call sqlPreDeclare cx, src, descOut, descInp
     call sqlOpen cx
     return
endProcedure sqlPreOpen

/*--- open cursor 'c'cx using arguments arg(2), arg(3)... ------------*/
sqlOpen: procedure expose m.
parse arg cx
    do ix=1 to arg()-1
        call sqlDataSet 'SQL.'cx'.I', ix, arg(ix+1)
        end
     call sqlExec 'open c'cx 'using descriptor :M.SQL.'cx'.I'
     return
endProcedure sqlOpen

/*--- close cursor 'c'cx ---------------------------------------------*/
sqlClose: procedure expose m.
parse arg cx, src
     return sqlExec('close c'cx)
endProcedure sqlClose

/*--- fetch cursor 'c'cx into variables ggVars -----------------------*/
sqlFetchInto:
parse arg ggCx, ggVars
    if ggVars == '' then
        ggVars = 'descriptor :M.SQL.'ggCX'.D'
                        /* accept sqlCodes > 0 except 100 */
    return sqlExec('fetch c'ggCx 'into' ggVars, 0 100) <> 100
endProcedure sqlFetchInto

/*--- return sql variable list for stem st and fields the word in vars
          if withInd == 1 then with sqlIndicator variables
        sqlVars('S', 'A B') --> ':S.A, :S.B'
        sqlVars('S', 'A B', 1) --> ':S.A :S.A.SQLIND, :S.B :S.B.SQLIND'
----------------------------------------------------------------------*/
sqlVars: procedure expose m.
parse arg st, vars, withInd
    res = ''
    if st ^== '' then
        st = st'.'
    do ix=1 to words(vars)
        res = res', :'st || word(vars, ix)
        if withInd == 1 then
             res = res ':'st || word(vars, ix)'.SQLIND'
        end
    return substr(res, 3)
endProcedure sqlVars

sqlVarsNull: procedure expose m.
parse arg st, vars
    hasNulls = 0
    do ix = 1 to words(vars)
        fld = word(vars, ix)
        if m.st.fld.sqlInd < 0 then do
            m.st.fld = m.sqlNull
            hasNulls = 1
            end
        end
    return hasNulls
endProcedure sqlVarsNull

sqlDescNull: procedure expose m.
parse arg cx
    desc = 'SQL.'ggCX'.D',
    hasNulls = 0
    do ix=1 to m.desc.SQLD
        if m.desc.ix.sqlInd < 0 then do
            m.desc.ix.sqlData = m.sqlNull
            hasNulls = 1
            end
        end
    return hasNulls
endProcedure sqlDescNull

/*--- open cursor 'c'cx fetch all into variables vars and close
      st = passed stem, sx = row number
      return number of rows fetched ----------------------------------*/
sqlOpAllCl:
parse arg ggCx, st, ggVars
    do ggAx=4 to arg()
        call sqlDataSet 'SQL.'ggCx'.I', ggAx-3, arg(ggAx)
        end
    call sqlOpen ggCx
    do sx = 1 while sqlFetchInto(ggCx, ggVars)
        end
    m.st.0 = sx - 1
    call sqlClose ggCx
    return m.st.0
endProcedure sqlOpAllCl

sqlDataSet: procedure expose m.
parse arg da, ix, val
    m.da.ix.sqlData = val
    m.da.ix.sqlInd = - (arg(ix+2) == m.sqlNull)
    return
endProcedure sqlDataSet
/*--- prepare, declare open cursor 'c'cx, fetch all and close
      return number of rows fetched ----------------------------------*/
sqlPreAllCl:
parse arg ggCx, ggSrc, st, ggVars
    call sqlPreDeclare ggCx, ggSrc
    return sqlOpAllCl(ggCx, st, ggVars)
endProcedure sqlPreAllCl

/*--- execute statement 's'cx using arguments arg(2), arg(3)... ------*/
sqlExecute:
parse arg ggCx
    do ggAx=2 to arg()
        call sqlDataSet 'SQL.'ggCx'.I', ggAx-1, arg(ggAx)
        end
     call sqlExec 'execute s'ggCx 'using descriptor :M.SQL.'ggCx'.I'
     return
endProcedure

/*--- execute immediate the sql src ----------------------------------*/
sqlExImm:
parse arg ggSrc, ggRet
     return sqlExec('execute immediate :ggSrc', ggRet)
endProcedure sqlExImm

sqlCommit: procedure expose m.
parse arg src
     return sqlExec('commit')
endProcedure sqlCommit

/*--- execute sql thru the dsnRexx interface -------------------------*/
sqlExec: /* no procedure, to keep variables sql... */
    parse arg ggSqlStmt, ggRet, ggNo
    if ggNo <> '1' then
        ggSqlStmt = 'execSql' ggSqlStmt
    address dsnRexx ggSqlStmt
    /* say 'sqlCode' sqlCode 'rc' rc 'for' ggSqlStmt ggNo */
    if rc = 0 then
        return 0
    else if ggRet = '*' | wordPos(sqlCode, ggRet) > 0 then
        return sqlCode
    else if rc < 0 then
        call err sqlmsg()
    else if sqlWarn.0 ^== ' ' | sqlCode <> 0 then
        call errSay sqlMsg(), ,'w'
    return sqlCode
endSubroutine sqlExec

/*--- connect to the db2 subsystem ggSys -----------------------------*/
sqlConnect: procedure expose m.
parse arg ggSys, ggRetCon
    call sqlIni
    address tso "SUBCOM DSNREXX"
    if rc <> 0 then do
       sRc = RXSUBCOM('ADD','DSNREXX','DSNREXX') /* ADD HOST CMD ENV  */
       if sRc <> 0 then
           call err 'rc' sRc 'from RXSUBCOM(ADD, DSNREXX, DSNREXX)'
       end
    if ggSys = '-' then
        return 0
    return sqlExec("connect" ggSys, ggRetCon ,1)
endProcedure sqlConnect

/*--- diconnect from db2 ---------------------------------------------*/
sqlDisconnect: procedure expose m.
parse arg ggRet
    call sqlExec "disconnect ", ggRet, 1
    return
endProcedure sqlDisconnect

/*--- issue an sql error message -------------------------------------*/
sqlMsg: /* no procedure, to keep variables sql... */
    signal on syntax name sqlMsgOnSyntax
    ggRes = 'sqlCode' sqlCodeT(sqlCode, sqlErrMc, sqlwarn.0':' ,
       || sqlwarn.1||sqlwarn.2||sqlwarn.3||sqlwarn.4||sqlwarn.5',',
       || sqlwarn.6||sqlwarn.7||sqlwarn.8||sqlwarn.9||sqlwarn.10)
    if 0 then
      sqlMsgOnSyntax: do
        ggRes = 'sqlCode' sqlCode translate(sqlErrMc, ',', 'ff'x),
                '<<rexx sqlCodeT not found or syntax>>\nwarnings'
        do ggX=0 to 10
            if sqlWarn.ggx <> '' then
                ggRes = ggRes ggx'='sqlWarn.ggx
            end
        end
    signal off syntax
    ggRes = ggRes'\nstate' sqlState'\nstmt = ' ggSqlStmt
    ggPref = '\nwith'
    ggXX = pos(':', ggSqlStmt)+1
    do 12 while ggXX > 1
        ggYY = verify(ggSqlStmt, ' ,:+-*/&%?|()¢!', 'm', ggXX)
        if ggYY < 1 then
            ggYY = length(ggSqlStmt) + 1
        ggVar = substr(ggSqlStmt, ggXX, ggYY - ggXX)
        if ggVar <> '' then do
            ggRes = ggRes || ggPref ggVar '=' value(ggVar)
            ggPref = '\n    '
            end
        ggXX = pos(':', ggSqlStmt, ggYY+1) + 1
        end
    return  ggRes
endSubroutine sqlMsg

/*--- send a command to db2 through the TSO dsn processor ------------*/
sqlDsn: procedure expose m.
parse arg st, sys, cmd, rcOk
    x = outtrap('M.'st'.')
    push 'END'
    push cmd
    call address tso 'DSN SYSTEM('sys')'
    rr = rc
    x = outtrap(off)
    if rr = 0 | rcOk = '*' | wordPos(rr, rcOk) > 0 then
        return rr
    fl = max(1, m.st.0 - 10)
    em = 'rc' rr 'for DSN SYSTEM('sys') cmd' cmd,
          '\nOuputlines' fl '-' m.st.0':'
    do lx=fl to m.st.0
        em = em '\n' strip(m.st.lx, 't')
        end
    call err em
endProcedure sqlDsn
/* copy sql    end   **************************************************/
/* copy scanSql begin *************************************************/
/*--- initialize with reader inRdr ----------------------------------*/
scanSql: procedure expose m.
parse arg inRdr
    return scanSqlReset(scanWin(inRdr), inRdr)

scanSqlReset: procedure expose m.
parse arg m, rdr, scanWin
    if scanWin ^== 0 then
        call scanWinReset m, rdr, 5, 2, 1, 72
    else
        m.m.read = rdr
    return scanOpts(m, , '0123456789_' , '--')

scanSqlSeekId: procedure expose m.
parse arg m, lx, cmd, opts
    if opts = '' then
        opts = word
    if adrEdit("cursor =" max(trunc(lx), 1), 12) = 12 then
        return -1
    do while adrEdit("seek" cmd opts, 4) = 0 /* find each command*/
        call adrEdit "(fx) = cursor"
        if m.debug then do
            call adrEdit "(LI) = LINE" fx
            call debug 'scanSqlSeekId after' lx 'found' cmd 'at' fx li
            end
        call editReadReset m.m.read, fx
        call scanWinOpen es, fx
        do while word(scanPos(m), 1) <= fx & scanSqlType(m)
            if m.m.sqlType = 'i' & m.m.val == cmd then
                return fx
            end
        end
    return -1
endProcedure scanSqlSeekId
/*--- scan a sql token put type in m.sqltype:
      'i': ordinary identifier   e.g. Name
      'd': delimited identifier  e.g. "Delimited"
      'q': qualified identifier  e.g. abc."efg"
      'u': integer units         e.g. 8G
      'n': number                e.g. -234
      's': string                e.g. 'abc''ef'
      '' : at end
         : any other character   e.g. ;
      ----------------------------------------------------------------*/
scanSqlType: procedure expose m.
parse arg m, retSpace
    m.m.val = ''
    if scanSpaceNl(m) & retSpace = 1 then do
        m.m.sqlType = 'b'
        return 1
        end
    c2 = scanLook(m ,2)
    if scanString(m, "' x' X'") then do
        m.m.sqlType = 's'
        if ^abbrev(m.m.tok, "'") then
            m.m.val = x2c(m.m.val)
        end
    else if scanSqlQuId(m) then do
        if m.m.val.0 > 1 then
            m.m.sqlType = 'q'
        else if abbrev(m.m.tok, '"') then
            m.m.sqlType = 'd'
        else
            m.m.sqlType = 'i'
        end
    else if scanSqlNum(m, 0, 1)  then
        m.m.sqlType = 'n'
    else if scanChar(m, 1) then
        m.m.sqlType = m.m.tok
    else if scanAtEnd(m) then do
        m.m.sqlType = ''
        return 0
        end
    else
        call scanErr m, 'cannot scan sql'
    return 1
endProcedure scanSqlType

scanSqlSkipBrackets: procedure expose m.
parse arg m, br
    if br ^== '' then
        nop
    else if scanLit(m, '(') then
        br = 1
    else
        return 0
    do while scanSqlType(m) & m.m.sqlType ^== ';'
        if m.m.sqlType = '('        then br = br + 1
        else if m.m.sqlType ^== ')' then iterate
        else if br > 1              then br = br - 1
        else                             return 1
        end
    call scanErr m, '; or eof, but' br 'closing ) expected'
endProcedure skipBrackets
/*--- scan an ordinary sql identifier e.g. abc, ef_12 ----------------*/
scanSqlId: procedure expose m.
parse arg m
    if ^ scanName(m) then
        return 0
    m.m.val = translate(m.m.tok)
    return 1
endProcedure scanSqlId

/*--- scan a delimited or ordinay sql identifier ---------------------*/
scanSqlDeId: procedure expose m.
parse arg m
    if scanSqlId(m) then
        return 1
    if ^ scanString(m, '"') then
        return 0
    m.m.val = strip(m.m.val, 't')
    return 1
endProcedure scanSqlDeId

/*--- scan a qualified sql identifier --------------------------------*/
scanSqlQuId: procedure expose m.
parse arg m
    res = ''
    rto = ''
    do qx=1
        if ^ scanSqlDeId(m) then do
            if qx <> 1 then
                call scanErr m, 'id expected after .'
            return 0
            end
        m.m.val.qx = m.m.val
        res = res'.'m.m.val
        rto = rto'.'m.m.tok
        if ^ scanLit(scanSkip(m), '.') then
            leave
        call scanSpaceNl m
        end
    m.m.val.0 = qx
    m.m.val = substr(res, 2)
    m.m.tok = substr(rto, 2)
    return 1
endProcedure scanSqlQuId

/*--- scan a sql number ----------------------------------------------*/
scanSqlNum: procedure expose m.
parse arg m, checkEnd, noSp
    n = ''
    if scanLit(m, '+', '-') then do
        n = m.m.tok
        if noSp <> 1 then
            call scanSpaceNl m
        end
    if scanLit(m, '.') then
        n = n'.'
    if scanVerify(m, '0123456789') then
        n = n || m.m.tok
    else if n == '' then
        return 0
    else if noSp = 1 then do
        call scanBack m, n
        return 0
        end
    else
        call scanErr m, 'scanSqlNum bad number: no digits after' n
    if pos('.', n) < 1 then
        if scanLit(m, '.') then do
            if scanVerify(m, '0123456789') then
                n = n'.'m.m.tok
            end
    if scanLit(m, 'E', 'e') then do
        n = n'E'
        if scanLit(m, '+', '-') then
            n = n || m.m.tok
        if ^ scanVerify(m, '0123456789') then
            call scanErr m, 'scanSqlNum bad number: no digits after' n
        n = n || m.m.tok
        end
    if checkEnd ^= 0 then
        if pos(scanLook(m, 1), m.m.scanNameR) > 0 then
            call scanErr m, 'scanSqlNum number' n 'bad end' ,
                            scanLook(m, 1)
    m.m.val = n
    return 1
endProcedure scanSqlNum

/*--- scan a sql number with a unit which may follow without space ---*/
scanSqlNumUnit: procedure expose m.
parse arg m, both, units
    if ^ scanSqlNum(m, 0) then
        return 0
    nu = m.m.val
    sp = scanSpaceNl(m)
    if scanSqlId(m) then do
        if units == '' | wordpos(m.m.val, units) > 0 then
            nu = nu m.m.val
        else if both | ^ sp then
            call scanErr m, 'scanSqlNumUnit after' nu 'bad unit' m.m.val
        else
            call scanBack m, m.m.tok
        end
    else if both then
        call scanErr m, 'scanSqlNumUnit no unit after' nu
    else if ^sp & pos(scanLook(m, 1), m.m.scanNameR) > 0 then
        call scanErr m, 'scanSqlNumUnit bad number end after' nu
    m.m.val = nu
    return 1
endProcedure scanSqlNumUnit

/* copy scanSql end   *************************************************/
/* copy scanWin begin *************************************************
     scan the the concatenation of the lines of a reader
         any token my be split over several line
         except the end-of-line-comment-token
***********************************************************************/
scanWinIni: procedure expose m.
    if m.scanWin.ini = 1 then
        return
    m.scanWin.ini = 1
    call scanIni
    call jIni
    call oDecMethods oNewClass('ScanWin'),
        , 'scanReadNl return scanWinNl(m, unCond)',
        , 'scanSpaceNl scanWinSpaceNl(m)',
        , 'scanClose call scanWinClose m ',
        , 'scanInfo scanWinInfo(m)',
        , 'scanPos  scanWinPos(m)'
    return
endProcedure scanReadIni

/*--- instanciate a new window scanner, open rdr ---------------------*/
scanWin: procedure expose m.
parse arg rdr, wiSz, wiBa, cuPo, cuLe
    return scanWinReset(oNew('ScanWin'), rdr, wiSz, wiBa, cuPo, cuLe)

/*--- set the attributes of window scanner m, open rdr and start read*/
scanWinReset: procedure expose m.
parse arg m, rdr, wiSz, wiGa, cuPo, cuLe
    call scanReset m
    m.m.read = rdr
    m.m.atEnd = 'still closed'
    return scanWinOpts(m, wiSz, wiGa, cuPo, cuLe)
endProcedure scanWinReset

scanWinOpts: procedure expose m.
parse arg m, wiSz, wiGa, cuPo, cuLe
    wiSz = word(wiSz 5, 1)
    wiGa = word(wiGa 1, 1)
    m.m.cutPos = word(cuPo 1, 1)
    m.m.cutLen = word(cuLe 72, 1)
    m.m.winTot = (wiSz * 2 + wiGa) * m.m.cutLen
    m.m.posLim = (wiSz     + wiGa) * m.m.cutLen
    m.m.posOff =  wiGa * m.m.cutLen
    return scanWinOpen(m)
endProcedure scanWinReset

scanWinOpen: procedure expose m.
parse arg m, lx
    m.m.atEnd = 0
    if lx = '' then
        m.m.lineX = 1
    else
        m.m.lineX = lx
    m.m.pos = 1
    m.m.src = ''
    call jOpen m.m.read, 'r'
    call scanWinRead m
    return m
endProcedure scanWinOpen

scanWinClose: procedure expose m.
    m.m.atEnd = 'still closed'
    call jClose m.m.read
    return
endProcedure scanWinClose
/*--- move the source window: cut left side and append at right side
      return number of characters cut at left ------------------------*/
scanWinRead: procedure expose m.
parse arg m
    dlt = 0
    if m.m.atEnd then
        return 0
    if m.m.pos >= m.m.posLim then do     /*  cut left side */
        dlt = m.m.pos - (m.m.pos // m.m.cutLen + m.m.posOff)
        m.m.src = substr(m.m.src, dlt+1)
        m.m.pos = m.m.pos - dlt
        m.m.lineX = m.m.lineX + dlt % m.m.cutLen
        end
    do while length(m.m.src) < m.m.winTot /* read and fill to len */
        if ^ jRead(m.m.read, m'.'one) then do
            m.m.atEnd = 1
            return dlt
            end
        m.m.src = m.m.src || substr(m.m.one, m.m.cutPos, m.m.cutLen)
        end
    call assert 'length(m.m.src) = m.m.winTot'
    return dlt
endProcedure scanWinRead

/*--- return position of next line start -----------------------------*/
scanWinNLPos: procedure expose m.
parse arg m
    return m.m.pos + m.m.cutLen - ((m.m.pos - 1) // m.m.cutLen)

/*--- scan over spaces and comments ----------------------------------*/
scanWinSpaceNL: procedure expose m.
parse arg m
    res = 0
    do forever
        r1 = 0
        if scanVerify(m, ' ') then do
            r1 = 1
            end
        else if m.m.scanComment ^== '' ,
             & abbrev(substr(m.m.src, m.m.pos), m.m.scanComment) then do
            np = scanWinNlPos(m)
            r1 = length(m.m.scanComment) <= np - m.m.pos
            if r1 then
                m.m.pos = np
            end
        if r1 then
            res = 1
        else if scanWinRead(m) = 0 then
            return res
        end
endProcedure scanWinSpaceNl

/*--- return current position in input ------------------------------*/
scanWinPos: procedure expose m.
parse arg m
    if scanAtEnd(m) then
        return 'E'
    else
        ps = m.m.pos - 1
    return (m.m.lineX + (ps % m.m.cutLen)) (ps // m.m.cutLen + 1)
endProcedure scanWinPos

/*--- return a description of the current scan position --------------*/
scanWinInfo: procedure expose m.
parse arg m
    p = scanWinPos(m)
    if p == 'E' then do
        res = 'atEnd after'
        p = m.m.lineX - 1 + length(m.m.src) % m.m.cutLen
        end
    else do
        res = 'pos' word(p, 2) 'in'
        p = word(p, 1)
        end
    return res 'line' p':' strip(substr(m.m.src,
          , 1 + (p - m.m.lineX) * m.m.cutLen, m.m.cutLen), 't')
endProcedure scanWinInfo
/* copy scanWin end   *************************************************/
/* copy scan begin ****************************************************
Scan: scan an input:
    scanLine(m,ln) : begin scanning a single line (string)
    scanRead??(m,ln): begin scanning all lines of an opened reader
    scanAtEnd(m)   : returns whether we reached end of input
    scanLit(m,lit) : scan Literal lit if present or return 0
    scanChar(m,n)  : scan next n characters
    scanName(m)    : scan a name
    ScanNat(m)     : scan a natural number (without sign)
    scanString(m,q): scan a String with quote q. (with doubble = 1)
    scanVerify(m,c,o): verify(...,c,o,...)
    scanKeyValue(m): scan a key = value clause (with spaces)
    scanWord(m,u)  : scan a space delimited word or a string,
                          if u=1 then uppercase non-strings
    scanErr(m, txt): error with current scan location

    m is an adress, to store our state
    if a scan function succeeds, the scan posititon is moved

returns: true if scanned, false otherwise
         m.m.tok  ==> last token
         m.m.val  ==> last value for scanString/Word/KeyValue
         m.key    ==> key for scanKeyValue
         m.m.pos ==> scan position
         m.m.src ==> scan source
***********************************************************************/
scanIni: procedure expose m.
    if m.scan.ini == 1 then
        return
    m.scan.ini = 1
    m.scan.alfLC = 'abcdefghijklmnopqrstuvwxyz'
    m.scan.alfUC = translate(m.scan.alfLC)
    m.scan.alfa = m.scan.alfLC || m.scan.alfUC
    m.scan.alfNum = m.scan.alfa || '0123456789'
    return
endProcedure scanIni

scanReset: procedure expose m.
parse arg m, n1, np, co
    m.m.tok = ''
    m.m.val = ''
    m.m.key = ''
    m.m.read = ''
    return scanOpts(m, n1, np, co)
endProcedure scanReset

scanOpts: procedure expose m.
parse arg m, m.m.scanName1, namePlus, m.m.scanComment
    call scanIni
    if m.m.scanName1 == '' then
        m.m.scanName1 = m.scan.alfa
    if namePlus == '' then
        m.m.scanNameR = m.m.scanName1 || '0123456789'
    else
        m.m.scanNameR = m.m.scanName1 || namePlus
    return m
endProcedure scanReset


/*--- begin scanning a single line -----------------------------------*/
scanSrc: procedure expose m.
parse arg m, m.m.src
    m.m.atEnd = 1
    m.m.pos = 1
    return m
endProcedure scanSrc

/*--- return the next len characters ---------------------------------*/
scanLook: procedure expose m.
parse arg m, len
    if len == '' then
        return substr(m.m.src, m.m.pos)
    else
        return substr(m.m.src, m.m.pos,
                     , min(len, 1 + length(m.m.src) - m.m.pos))
endProcedure scanLook

/*--- scan the literal lit ------------------------------------------*/
scanLit: procedure expose m.
parse arg m
    do ax=2 to arg()
        if abbrev(substr(m.m.src, m.m.pos), arg(ax)) then do
            m.m.tok = arg(ax)
            m.m.pos = m.m.pos + length(arg(ax))
            return 1
            end
        end
    m.m.tok = ''
    return 0
endProcedure scanLit

/*--- scan the next len characters -----------------------------------*/
scanChar: procedure expose m.
parse arg m, len
    nx = 1 + length(m.m.src)
    if len ^= '' then
        nx = min(m.m.pos + len, nx)
    m.m.tok = substr(m.m.src, m.m.pos, nx - m.m.pos)
    m.m.pos = nx
    return m.m.tok ^== ''
endProcedure scanChar

/*--- scan a string with quote char qu -------------------------------*/
scanString: procedure expose m.
parse arg m, prefs
    m.m.tok = ''
    bx = m.m.pos
    if prefs = '' then do
        qu = substr(m.m.src, bx, 1)
        if pos(qu, "'""") < 1 then
            return 0
        ax = bx + 1
        end
    else do
        do px=1 until abbrev(substr(m.m.src, bx), p1)
            p1 = word(prefs, px)
            if p1 = '' then
                return 0
            end
        qu = right(p1, 1)
        ax = bx + length(p1)
        end
    m.m.val = ''
    do forever
        qx = pos(qu, m.m.src, ax)
        if qx < 1 then
            return scanErr(m, 'ending Apostroph('qu') missing')
        m.m.val = m.m.val || substr(m.m.src, ax, qx-ax)
        if qx >= length(m.m.src) then
            leave
        else if substr(m.m.src, qx+1, 1) <> qu then
            leave
        ax = qx+2
        m.m.val = m.m.val || qu
        end
    m.m.tok = substr(m.m.src, bx, qx+1-bx)
    m.m.pos = qx+1
    return 1
endProcedure scanString

/*--- scan a Name, first char in *.scanName1, rest in *.scanNameR ----*/
scanName: procedure expose m.
parse arg m
    if pos(substr(m.m.src, m.m.pos, 1),
                 , m.m.scanName1) <= 0 then do
        m.m.tok = ''
        return 0
        end
    return scanVerify(m, m.m.scanNameR)
endProcedure scanName

/*--- scan with verify, vOpt is passed to verify ---------------------*/
scanVerify: procedure expose m.
parse arg m, alpha, vOpt
    if vOpt == '' then   /* empty string does not take default| */
        nx = verify(m.m.src, alpha, , m.m.pos)
    else
        nx = verify(m.m.src, alpha, vOpt, m.m.pos)
    if nx = 0 then
        nx = length(m.m.src) + 1
    m.m.tok = substr(m.m.src, m.m.pos, nx - m.m.pos)
    m.m.pos = nx
    return m.m.tok ^== ''
endProcedure scanVerify

/*--- scan a natural number (no sign, decpoint ...) ------------------*/
scanNat: procedure expose m.
parse arg m, chEn
    if ^ scanVerify(m, '0123456789') then
        return 0
    if chEn^==0 & pos(substr(m.m.src, m.m.pos,1), m.m.scanNameR)>0 then
        call scanErr m, 'illegal number end'
    return 1
endProcedure ScanNat

scanInt: procedure expose m.
parse arg m, chEn
    if scanNat(m, chEn) then
        return 1
    ox = m.scan.m.pos
    if pos(substr(m.scan.m.src, ox, 1) , '+-') < 1 then
        return 0
    m.scan.m.pos = ox + 1
    if | scanNat(m) then do
        m.scan.m.pos = ox
        return 0
        end
    m.tok =substr(m.scan.m.src, ox, 1)|| m.tok
    return 1
endProcedure scanInt

/*--- scan a word and put value into *.val
           a word is either delimited by space or stopper
                     or a string (with single or double quotes -------*/
scanWord: procedure expose m.
parse arg m, stopper

    if scanString(m)                   then return 1
    if ^scanVerify(m, ' 'stopper, 'm') then return 0
    m.m.val = m.m.tok
    return 1
endProcedure scanWord

scanBack: procedure expose m.
parse arg m, tok
    if m.m.pos <= length(tok) then
        call scanErr sc, 'cannot back "'tok'" length'
    cx = m.m.pos - length(tok)
    if substr(m.m.src, cx, length(tok)) ^== tok then
        call scanErr sc, 'cannot back "'tok'" value'
    m.m.pos = cx
    return
endProcedure scanBack

/*--- scan a key = word phrase
          put key into m.key and word into m.m.val -------*/
scanKeyValue: procedure expose m.
parse arg m, def
    if ^ scanName(m) then
        return 0
    m.m.key = m.m.tok
    if ^ scanLit(scanSkip(m), '=') then do
        m.m.val = def
        m.m.tok = ' no='
        end
    else if ^scanWord(scanSkip(m)) then
        call scanErr(m, 'word expected after' m.m.key '=')
    return 1
endProcedure scanKeyValue

scanAtEnd: procedure expose m.
parse arg m
    return m.m.atEnd & m.m.pos > length(m.m.src)
endProcedure scanAtEnd

/*--- skip over spaces, nl and comments (if option set) --------------*/
scanSpaceNL: procedure expose m.
parse arg m
    lastTok = m.m.tok
    if m.m.read ^== '' then
        interpret 'res = ' oObjMethod(m, 'scanSpaceNl')
    else
        res = scanSpaceCom(m)
    m.m.tok = lastTok
    return res
endProcedure scanSpaceNL

scanSpaceCom: procedure expose m.
parse arg m
    res = scanVerify(m, ' ')
    if m.m.scanComment ^== '' then
        if abbrev(substr(m.m.src, m.m.pos), m.m.scanComment) then do
            m.m.pos = 1 + length(m.m.src)
            return 1
            end
    return res
endProcedure scanSpaceCom

/*--- skip over space, nl and comments and return m -----------------*/
scanSkip: procedure expose m.
parse arg m
    call scanSpaceNl m
return m
endProcedure scanSkip

/*--- emit an error with current scan pos ----------------------------*/
scanErr: procedure expose m.
parse arg m, txt
    m.m.err.0 = 0
    call err 'scanErr' txt'\n'scanInfo(m, m'.ERR')
    return 0
endProcedure scanErr

scanPos: procedure expose m.
parse arg m
    if m.m.read ^== '' then
        interpret 'return' oObjMethod(m, 'scanPos')
    else if scanAtEnd(m) then
        return E
    else
        return 1 m.m.pos
endProcedure scanPos

scanInfo: procedure expose m.
parse arg m
    msg = 'last token' m.m.tok 'scanPosition' ,
          strip(left(substr(m.m.src, m.m.pos), 40), 't')
    if m.m.read == '' then
        return msg'\npos' m.m.Pos 'in string' strip(m.m.src, 't')
    else
        interpret 'return msg"\n" ||' oObjMethod(m, 'scanInfo')
endProcedure scanInfo
/* copy scan end   ****************************************************/
/* copy cat  begin ****************************************************
***********************************************************************/
catOpt: procedure
parse arg opt, keep
     if abbrev(opt, '<') then
         o = 'r'substr(opt, 2)
     else if abbrev(opt, '>>') then
         o = 'a'substr(opt, 3)
     else if abbrev(opt, '>') then
         o = 'w'substr(opt, 2)
     else if pos(left(opt, 1), 'rwa') > 0 then
         o = opt
     else
         o = '?'opt
     if keep ^== 1 then
         o = translate(o, ' ', '£#')
     return space(o, 0)
endProcedure catOpt

/*--- create and possibly open a reader or writer --------------------*/
catMake: procedure expose m.
parse arg opt, spec
    o = catOpt(opt, 1)
    if pos('£', o) > 0 then
        return spec
    else if pos('#', o) > 0 then do
        if envhasKey(spec) then
            return catMake(translate(opt, '£', '#'), envGet(spec))
        else
            return envPut(spec, jBuf())
        end
    else if pos('&', o) > 0 then
        return catDsn('&'spec)
    else
        return catDsn(spec)
    call err 'catMake implement' opt
    if defDsn == '' then do
        o = left(o, length(o)-1)
        end
    else if defDsn == '' then do
        rw = catDsn(spec)
        end
    else do
        rw = jReset(defDsn, spec)
        end
    if pos('-', o) < 1 then
        call jOpen rw, o
    return rw
endProcedure catMake

/*--- create a new cat -----------------------------------------------*/
cat: procedure expose m.
    m = oNew('Cat')
    m.m.catIx = -9
    call catReset m
    do ax=1 by 2 to arg()
        call catWriteAll m, arg(ax), arg(ax+1)
        end
    return m
endProcedure cat

catReset: procedure expose m.
parse arg m
    m.m.RWs.0 = 0
    m.m.catWr = ''
    m.m.catRd = ''
    m.m.catToClose = ''
    m.m.catIx = -9
    call oSetTypePara m
    do ax=2 by 2 to arg()
        call catWriteAll m, arg(ax), arg(ax+1)
        end
    return m
endProcedure catReset

catClose: procedure expose m.
parse arg m
    if m.m.catIx == -9 then
        return
    if m.m.catWr ^== '' then do
        call jClose m.m.catWr
        bx = mInc(m'.RWS.0')
        m.m.opts.bx = ""
        m.m.RWs.bx = m.m.catWr
        m.m.catWr = ''
        end
    if m.m.catIx >= 0   then do
        if m.m.catRd ^== '' then do
            ix = m.m.catIx
            if pos('-', m.m.opts.ix) < 1 then
                call jClose m.m.catRd
            m.m.catRd = ''
            end
        do wx = 1 to words(m.m.catToClose)
            cl = word(m.m.catToClose, wx)
            if cl ^== m then
                call jClose cl
            end
        m.m.catToClose = ''
        end
    m.m.catIx = -9
    return m
endProcedure catClose

catOpen: procedure expose m.
parse arg m, oo
    call jClose m
    if oo = 'r' then do
        m.m.catIx = 0
        m.m.catRd = catNextRdr(m)
        m.m.jReading = 1
        end
    else if oo == 'w' | oo == 'a' then do
        if oo == 'w' then
            m.m.RWs.0 = 0
        m.m.catIx = -7
        m.m.jWriting = 1
        end
    else do
        call err 'catOpen('m',' oo') bad opt'
        end
    return m
endProcedure catOpen

/*--- return and open next reader ------------------------------------*/
catNextRdr: procedure expose m.
parse arg m
    cx = m.m.catIx
    if cx > 0 & cx <= m.m.RWs.0 & pos('-', m.m.opts.cx) < 1 then
        call jClose m.m.catRd
    cx = cx + 1
    m.m.catIx = cx
    if cx > m.m.RWs.0 then
        return ''
    oo = overlay('r', m.m.opts.cx)
    if pos('-', oo) < 1 then
        call jOpen m.m.RWs.cx, oo
    return m.m.RWs.cx
endProcedure catNextRdr

catRead: procedure expose m.
parse arg m, var
    do while m.m.catRd ^== ''
        if jRead(m.m.catRd, var) then
            return 1
        m.m.catRd = catNextRdr(m)
        end
    return 0
endProcedure catRead

catWrite: procedure expose m.
parse arg m, line
    if m.m.catWr == '' then do
        m.m.catWr = jOpen(jBuf(), 'w')
        call oSetTypePara m.m.catWr, oGetTypePara(m)
        end
    call jWrite m.m.catWr, line
    return
endProcedure catWrite

/*--- write contents of a reader to cat
          or keep it for later reading -------------------------------*/
catWriteAll: procedure expose m.
parse arg m
    if m.m.catIx >= 0 then
        call err 'catWriteAll('m',' arg(2)',' arg(3)') but opened,',
                 'catIx='m.m.catIx
    bx = m.m.RWs.0
    if m.m.catWr ^== '' then do
        call jClose m.m.catWr
        bx=bx+1
        m.m.opts.bx = ""
        m.m.RWs.bx = m.m.catWr
        m.m.catWr = ''
        end
    do ax=2 by 2 to arg()
        bx=bx+1
        m.m.opts.bx = catOpt(arg(ax))
        m.m.RWs.bx = catMake(arg(ax), arg(ax+1))
        call oSetTypePara m, oGetTypePara(m.m.RWs.bx)
        end
    m.m.RWs.0 = bx
    return
endProcedure catWriteAll

/*--- store the list toClose to close them when closing cat ----------*/
catLazyClose: procedure expose m.
parse arg m, toClose
    if m.m.catIx <> -7 then
        call err 'catLazyClose with catIx' m.m.catIx
    if m.m.RWs.0 = 0 then
        return 0
    if m.m.catToClose ^== '' then
        call err 'catLazyClose with catToClose' m.m.catToClose
    if m.m.catIx <> -7 | m.m.catToClose ^== '' then
        m.m.catToClose = toClose
    return 1
endProcedure catLazyClose

catSetTypePara: procedure expose m.
parse arg m, type
    do ix=1 to m.m.RWs.0
        call oSetTypePara m.m.RWs.ix, type
        end
    return
endProcedure catSetTypePara

/*--- create a reader/writer for a dsn -------------------------------*/
catDsn: procedure expose m.
parse arg spec
    m = oNew('CatDsn')
    m.m.readIx = 'c'
    ix = mInc('CAT.BUF')
    m.m.defDD = 'CAT'ix
    m.m.buf = 'CAT.BUF'ix
    call catDsnReset m, spec
    return m
endProcedure catDsn

catDsnReset: procedure expose m.
parse arg m, sp
    if symbol('m.m.defDD') ^== 'VAR' then
        m.m.defDD = 'CDD' mInc('CAT.DEFDD')
    m.m.spec = sp
    return m
endProcedure catDsnReset

catDsnOpen: procedure expose m.
parse arg m, opt
    call jClose m
    buf = m.m.buf
    if opt == 'r' then do
        aa = dsnAlloc(m.m.spec, 'SHR', m.m.defDD)
        if m.dsnAlloc.dsn <> '' then
            if sysDsn("'"m.dsnAlloc.dsn"'") <> 'OK' then
                call err 'cannot read' m.dsnAlloc.dsn':',
                               sysDsn("'"m.dsnAlloc.dsn"'")
        call readDDBegin word(aa, 1)
        m.m.jReading = 1
        m.buf.0 = -1
        m.m.readIx = 0
        end
    else do
        if opt == 'w' then
            aa = dsnAlloc(m.m.spec, 'OLD', m.m.defDD)
        else if opt == 'a' then
            aa = dsnAlloc(m.m.spec, 'MOD', m.m.defDD)
        else
            call err 'catDsnOpen('m',' opt') with bad opt'
        call writeDDbegin word(aa, 1)
        m.m.jWriting = 1
        m.buf.0 = 0
        m.m.readIx = 'w'
        end
    m.m.dd = word(aa, 1)
    m.m.free = subword(aa, 2)
    return m
endProcedure catDsnOpen

catDsnClose:
parse arg m
    buf = m.m.buf
    if m.m.readIx ^== 'c' then do
        if m.m.readIx == 'w' then do
            if m.buf.0 > 0 then
                call writeDD m.m.dd, 'M.'BUF'.'
            call writeDDend m.m.dd
            end
        else do
            call readDDend m.m.dd
            end
        interpret m.m.free
        end
    m.buf.0 = 'closed'
    m.m.readIx = 'c'
    m.m.free  = ''
    m.m.dd    = ''
    return m
endProcedure catDsnClose

catDsnRead: procedure expose m.
parse arg m, var
    ix = m.m.readIx + 1
    buf = m.m.buf
    if ix > m.buf.0 then do
        res = readDD(m.m.dd, 'M.'buf'.')
        if ^ res then
            return 0
        ix = 1
        end
    m.m.readIx = ix
    m.var = m.buf.ix
    return 1
endProcedure catDsnRead

catDsnWrite: procedure expose m.
parse arg m, var
    buf = m.m.buf
    ix = m.buf.0 + 1
    m.buf.0 = ix
    m.buf.ix = var
    if ix > 99 then do
        call writeDD m.m.dd, 'M.'buf'.'
        m.buf.0 = 0
        end
    return
endProcedure catDsnWrite

catIni: procedure expose m.
    if m.cat.ini == 1 then
        return
    m.cat.ini = 1
    m.cat.buf = 0
    call jIni
    call oDecMethods oNewClass("Cat", "JRW"),
        , "jOpen  return catOpen(m, arg)",
        , "jReset return catReset(m, '', arg)",
        , "jClose call catClose m",
        , "jWriteAll call err 'jWriteAll not opened w",
        , "oSetTypePara call catSetTypePara m, type",
        , "jRead return catRead(m, var)",
        , "jWrite call catWrite m, line; return",
        , "jWriteAll call catWriteAll m, opt, rdr; return"
    call oDecMethods oNewClass("CatDsn", "JRW"),
        , "jOpen  return catDsnOpen(m, arg)",
        , "jReset return catDsnReset(m, arg)",
        , "jClose call catDsnClose m",
        , "jRead return catDsnRead(m, var)",
        , "jWrite call catDsnWrite m, line"
    return
endProcedure catIni
/* copy cat  end   ****************************************************/
/* copy j begin *******************************************************
    the j framework
         jReset
         jOpen
         jClose
         jRead
         jWrite
***********************************************************************/
jRead: procedure expose m.
parse arg m, var
    if m.m.jReading then
        interpret oObjMethod(m, 'jRead')
    else
        call err 'jRead('m',' var') but not opened r'
endProcedure jRead

jWrite: procedure expose m.
parse arg m, line
    if m.m.jWriting then
        interpret oObjMethod(m, 'jWrite')
    else
        call err 'jWrite('m',' line') but not opened w'
    return
endProcedure jWrite

jWriteAll: procedure expose m.
parse arg m, opt, rdr
    interpret oObjMethod(m, 'jWriteAll')
    return
endProcedure jWriteAll

jWriteAllImpl: procedure expose m.
parse arg m, opt, rdr
    if pos('-', opt) < 1 then
        call jOpen rdr, catOpt(opt)
    do while jRead(rdr, line)
        call jWrite m, m.line
        end
    if pos('-', opt) < 1 then
        call jClose rdr
    return
endProcedure jWriteAll

jReset: procedure expose m.
parse arg m, arg
    call jClose m
    interpret oObjMethod(m, 'jReset')
    return m
endProcedure jOpen

jOpen: procedure expose m.
parse arg m, arg
    interpret oObjMethod(m, 'jOpen')
    return m
endProcedure jOpen

jClose: procedure expose m.
parse arg m
    if m.m.jReading = 1 | m.m.jWriting = 1 then
        interpret oObjMethod(m, 'jClose')
    m.m.jReading = 0
    m.m.jWriting = 0
    return m
endProcedure jClose

/*--- analyze an option in oOpt and oVal -----------------------------*/
jOpt: procedure expose m.
parse arg src, alone, val
    m.j.oOpt = ''
    if left(src, 1) ^== '-' then do
        m.j.oVal = src
        return 0
        end
    sx = 2
    if alone ^== '' then do
        sx = verify(src, alone, 'n', sx)
        if sx = 0  then
            sx = length(src)+1
        end
    if length(src) < sx then
        m.j.oVal = ''
    else if val == '' then
        call err 'bad opt "'src'" should contain only "'alone'"'
    else if pos(substr(src, sx, 1), val) < 1 then
        call err 'bad opt "'src'" should contain only "'alone'"' ,
                        'and/or 1 of "'val'" with value'
    else do
        sx = sx + 1
        m.j.oVal = substr(src, sx)
        end
    m.j.oOpt = substr(src, 2, sx-2)
    return 1
endProcedure jOpt

jIni: procedure expose m.
    if m.j.ini == 1 then
        return
    m.j.ini = 1
    call oIni
    call oDecMethods oNewClass("JRW"),
        , "jRead  call err 'jRead('m',' var') but not opened r'",
        , "jWrite call err 'jWrite('m',' line') but not opened w'",
        , "jWriteAll call jWriteAllImpl m, opt, rdr",
        , "jRead drop m.arg; return 0",
        , "jWrite say 'jOut:' line",
        , "jReset ;",
        , "jOpen ;",
        , "jClose ;"
    x = oNew("JRW")
    m.j.jIn = x
    m.x.jReading = 1
    m.x.jWriting = 0
    x = oNew("JRW")
    m.j.jOut = x
    m.x.jReading = 0
    m.x.jWriting = 1
    call oDecMethods oNewClass("Jbuf", "JRW"),
        , "jOpen return jBufOpen(m, arg)",
        , "jReset return jBufReset(m, arg)",
        , "oSetTypePara call jBufSetTypePara m, type",
        , "jRead return jBufRead(m, var)",
        , "jWrite call jBufWrite m, line"
    return
endProcedure jInit

jIn: procedure expose m.
parse arg arg
    return jRead(m.j.jIn, arg)
endProcedur jIn

jOut: procedure expose m.
parse arg arg
    call jWrite m.j.jOut, arg
    return
endProcedure jOut

/*--- jBuf: buffer read or write (supports datataypes) ---------------*/
jBuf: procedure expose m.
    m = oNew('Jbuf')
    call jBufReset m
    do ax=1 to arg()
        m.m.buf.ax = arg(ax)
        end
    m.m.buf.0 = ax-1
    return m
endProcedure jBuf

jBufReset: procedure expose m.
parse arg m
    m.m.stem = m'.BUF'
    m.m.buf.0 = 0
    call oSetTypePara m
    do ax=1 to arg() - 1
        m.m.buf.ax = arg(ax+1)
        m.m.buf.0 = ax
        end
    return m
endProcedure jBufReset

jBufSetTypePara: procedure expose m.
parse arg m, type
    if m.m.buf.0 <> 0 then
        call err 'jBufSetTypePara but not empty'
    return
endProcedure jBufSetTypePara

jBufOpen: procedure expose m.
parse arg m, opt
    call jClose m
    if opt == 'r' then do
        m.m.readIx = 0
        m.m.jReading = 1
        return m
        end
    if opt == 'w' then
        m.m.buf.0 = 0
    else if opt ^== 'a' then
        call err 'jBufOpen('m',' opt') with bad opt'
    m.m.jWriting = 1
    return m
endProcedure jBufOpen

jBufRead: procedure expose m.
parse arg m, var
    nx = m.m.readIx + 1
    if nx > m.m.buf.0 then
        return 0
    m.m.readIx = nx
    ty = oGetTypePara(m)
    if abbrev(ty, '=') then
        m.var = m.m.buf.nx
    else
        call oTyCopy ty, var, m'.BUF.'nx
    return 1
endProcedure jBufRead

jBufWrite: procedure expose m.
parse arg m, line
    nx = mInc(m'.BUF.0')
    ty = oGetTypePara(m)
    if abbrev(ty, '=') then
       m.m.buf.nx = line
    else
        call oTyCopy ty, m'.BUF.'nx, line
    return 1
endProcedure jBufRead
/* copy j end *********************************************************/
/* copy o begin ********************************************************
    object layer has three freatures
    *  an object may have a class which has methods
    *  an object may have a parmeterized type
    *  a class may contain field descriptions
***********************************************************************/
oClaMethod: procedure expose m.
parse arg cl, me
     if symbol('m.o.cla.cl.met.me') = 'VAR' then
         return m.o.cla.cl.met.me
     else
         call err 'no method' me 'in class' cl
endProcedure oClaMethod

oHasMethod: procedure expose m.
parse arg obj, me
     cla = oGetClass(obj)
     return symbol('m.o.cla.cl.met.me') = 'VAR'
endProcedure oHasMethod

oGetClass: procedure expose m.
parse arg Obj
     if symbol('m.o.obj2cla.Obj') = 'VAR' then
         return m.o.obj2cla.Obj
     call err 'no class found for object' obj
endProcedure oGetClass

oObjMethod: procedure expose m.
parse arg obj, me
     if symbol('m.o.obj2cla.obj') = 'VAR' then
         return oClaMethod(m.o.obj2cla.obj, me)
     if abbrev(obj, 'oCast:') then do
         cx = pos(':', obj, 7)
         return 'M="'substr(obj, cx+1)'";' ,
                 oClaMethod(substr(obj, 7,cx-7), me)
         end
     call err 'no class found for object' obj
endProcedure oObjMethod

oCast: procedure
parse arg obj, cl
     if abbrev(obj, 'oCast:') then
         obj = substr(obj, 1 + pos(':', obj, 7))
     return 'oCast:'cl':'obj
endProcedure oCast

oNewClass: procedure expose m.
parse arg name, super
  /* call oIni */
     name = oFldNew(name)
     neMe = 'O.CLA.'name'.MET'
     neFi = 'O.CLA.'name'.FLD'
     do sx=1 to words(super)
         sup = word(super, sx)
         if symbol('m.o.cla.sup') ^== 'VAR' then
             call err 'superclass' sup 'is not defined'
         if m.o.cla.sup.val ^== '' then
              m.o.cla.name.val = m.o.cla.sup.val
         if m.o.cla.sup.stem ^== '' then
              m.o.cla.name.stem = m.o.cla.sup.stem
         st = 'O.CLA.'sup'.MET'
         do x=1 to m.st.0
             olMe = m.st.x
             call oPut neMe, olMe, m.st.olMe
             end
         st = 'O.CLA.'sup'.FLD'
         do x=1 to m.st.0
             olFi = m.st.x
             call oPut neFi, olFi, m.st.olFi
             end
         end
     call oMutate 'O.CLA.'name, 'Class'
     return name
endProcedure oNewClass

oValStemFldsWKOLD: procedure expose m.
parse arg cl, m.o.cla.cl.val, m.o.cla.cl.stem, flds
    st = 'O.CLA.'cl'.FLD'
    do wx=1 by 2 to words(flds)
        call oPut st, word(flds, wx), word(flds, wx+1)
        end
    return cl
endProcedure oValStemFlds

oNewTypeWKOLD: procedure expose m.
parse arg cl, va, st, flds
    return oValStemFlds(oNewClass(cl), va, st, flds)

/*--- a field type has only fields of type '='
      finds or creates a field Type with the fields of types tps
          and the field list aFl.
          if dup = 'e' duplicate field names are resolved ------------*/
oFiTypeWKOLD: procedure expose m.
parse arg tps, aFl, dup
    if symbol('m.o.cla.fiType.tps.aFl.dup') = 'VAR' then
        return m.o.cla.fiType.tps.aFl.dup
    fs = ''
    do wx=1 to words(tps)
        t1 = oFlds(word(tps, wx))
        do fx=1 to m.t1.0
            fs = fs m.t1.fx
            end
        end
    fs = fs aFl
    fd = ''
    do wx=1 to words(fs)
        f1 = word(fs, wx)
        if wordPos(f1, fd) < 1 then do
            fd = fd f1
            end
        else if dup == 'e' then do
            do dx=2 by 1 while wordPos(f1 || dx, fn fs) > 0
                end
            fd = fd f1 || dx
            end
        end
    fd = space(fd aFl)
    if symbol('m.o.cla.fiType.fd') = 'VAR' then do
        res = m.o.cla.fiType.fd
        end
    else do
        res = oNewClass("FiType*")
        m.o.cla.fiType.fd = res
        st = 'O.CLA.'res'.FLD'
        do wx=1 to words(fd)
            call oPut st, word(fd, wx), '='
            end
        end
    m.o.cla.fiType.tps.aFl = res
    return res
endProcedure oFiType
oDecMethods: procedure expose m.
parse arg cla
     st = 'O.CLA.'cla'.MET'
     do ax=2 to arg()
         call oPut st, word(arg(ax), 1), subWord(arg(ax), 2)
         end
     return
endProcedure oDecMethods

oNew: procedure expose m.
parse arg cla
    st = 'O.CLA.'cla
    if symbol('M.st') ^== 'VAR' then
        call err 'class' cla 'is not initialized'
    nn = m.st.inst + 1
    m.st.inst = nn
    nn = 'O.C' || m.st || 'I' || nn
    if symbol('m.o.obj2cla.nn') == 'VAR' then
        call err 'oNew already defined:' nn
    m.o.obj2cla.nn = cla
    return nn
endProcedure oNew

oMutate: procedure expose m.
parse arg obj, class
    if obj == 'O.C13I12' then do
        end
    if symbol('M.O.CLA.class') ^== 'VAR' then
        call err 'class' class 'is not initialized'
    m.o.obj2cla.obj = class

    return obj
endProcedure oMutate

oSay: procedure expose m.
parse arg type, a, aPr, mPr
    ty = 'O.CLA.'type
    msg = mPr || substr(a, length(aPr)+1)
    redir = 0
    do forever
        if type == '=' then do
            say msg '=' m.a
            return
            end
        else if abbrev(type, '=') then do
            a = m.a
            msg = msg '==>' a
            redir = 1
            type = substr(type, 2)
            end
        else if left(type, 2) = '<>' then do
            k = m.a
            a = left(a, lastPos('.', a))k
            msg = msg '=<>' k
            redir = 1
            type = substr(type, 3)
            end
        else if left(type, 1) = '.' then do
            if ^ datatype(m.a.0, 'n') then
                call err 'type' type 'not stem but m.'a'.0 is' m.a.0
            type = substr(type, 2)
            if redir then do
                say msg 'stem 1..'m.a.0':' type
                end
            else do
                do y=1 to m.a.0
                    call oSay type, a'.'y, a'.', mPr'  '
                    end
                end
            return
            end
       else if redir then do
           say msg':' type
           return
           end
       else do
          leave
          end
       end
    if m.ty.val = '=' then
        say msg '=' m.a
    else
        say msg '=' m.a':' m.ty.val
       /* call oSay m.ty.val, a,==>' m.a '(to' m.ty.val')' */
    do y=1 to m.ty.fld.0
        f = m.ty.fld.y
        call oSay m.ty.fld.f , a'.'f, a'.', mPr' '
        end
    if m.ty.stem ^== '' then
        call oSay '.'m.ty.stem, a, a, mPr
    return
endProcedure oSay

oClear: procedure expose m.
parse arg type, a, val
    if abbrev(type, '.') then do
        m.a.0 = 0
        end
    else if abbrev(type, '<>') then do
        m.a = val
        call oClear substr(type, 3), left(a, lastPos('.', a))val, val
        end
    else if abbrev(type,  '=') then do
        m.a = ''
        end
    else do
        ty = 'O.CLA.'type
        if m.ty.val ^== '' then
            m.a = val
        do x = 1 to m.ty.fld.0
            k = m.ty.fld.x
            call oClear m.ty.fld.k, a'.'k, val
            end
        if m.ty.stem ^== '' then
            call m.a.0 = 0
        end
    return a
endProcedure oClear

oCopy: procedure expose m.
parse arg t, f
    if symbol('m.o.obj2cla.f') ^== 'VAR' then
        call err f 'has no class'
    cl = m.o.obj2cla.f
    m.o.obj2cla.t = m.o.obj2cla.f
    return oTyCopy(cl, t, f)
endProcedure oCopy

oTyCopy: procedure expose m.
parse arg type, t, f
    if abbrev(type, '.') then do
        do y=1 to m.f.0
            call oTyCopy substr(type, 2), t'.'y, f'.'y
            end
        m.t.0 = m.f.0
        end
    else if abbrev(type, '<>') then do
        k = m.f
        m.t = k
        call oTyCopy substr(type, 3), left(t, lastPos('.', t))k,
                                     , left(f, lastPos('.', f))k
        end
    else if abbrev(type, '=') then do
        m.t = m.f
        end
    else do
        ty = 'O.CLA.'type
        if m.ty.val ^== '' then
            m.t = m.f
        do x = 1 to m.ty.fld.0
            k = m.ty.fld.x
            call oTyCopy m.ty.fld.k, t'.'k, f'.'k
            end
        if m.ty.stem ^== '' then
            call oTyCopy '.'m.ty.stem, t, f
        end
    return t
endProcedure oTyCopy

/*--- Run ------------------------------------------------------------*/
oRunner: procedure expose m.
parse arg code
    return oRunnerReset(oNew('ORunner'), code)

oRunnerReset: procedure expose m.
parse arg m, pCode
    m.m.code = pCode
    return m
endProcedure oRunnerReset

oRun: procedure expose m.
parse arg m
    interpret m.m.code
    return
endProcedure oRun

oIni: procedure expose m.
     if m.o.ini = 1 then
         return
     m.o.ini = 1
     call oFldIni
     call mapIni
     m.o.paTy.0 = 0
     call oFldNew '=', '='
     call oDecMethods oNewClass('ORunner'), 'oRun call oRun m'
     return
endProcedure oIni
/* copy o end *********************************************************/
/* copy oFld begin *****************************************************
     defines classes with field names
          is the base for the oo layer in copy o
***********************************************************************/
/*--- initialize the module ------------------------------------------*/
oFldIni: procedure expose m.
    if m.oFld.ini = 1 then
        return
    m.oFld.ini = 1
    call mapIni
    m.o.fldOnly = mapNew()             /* map fields -> class  */
    m.o.cla.0 = 0                      /* the stem for classes */
    call oFldNew 'Class', '=', , ,     /* MetaClass definieren */
              'INST = MET .<>= FLD .<>=Class STEM =Class'
    return
endProcedure oFldIni

/*--- create a new class
          name: name of new class, a star will be replaced by a number
          va:   type of value
          st:   type of stem
          flds: pairs of field names and types
          dup:  duplicate resolver -----------------------------------*/
oFldNew: procedure expose m.
parse arg name, va, st, flds, dup
     if pos('*', name) > 0 then
         name = oPut('O.CLA', name, , '*')
     else
         call oPut 'O.CLA', name, , 'n'
     m.o.cla.name.inst = 0
     m.o.cla.name.val  = va
     m.o.cla.name.stem = st
     m.o.cla.name.FLD.0 = 0
     m.o.cla.name.MET.0 = 0
     return oFldAdd(name, flds, dup)
endProcedure oFldNew

/*--- create or find a class with only simple fields fs --------------*/
oFldOnly: procedure expose m.
parse arg fs, dup
    kk = space(fs '?'dup, 1)
    if mapHasKey(m.o.fldOnly, kk) then
        return mapGet(m.o.fldOnly, kk)
    if dup ^== 'e' then do
        ll = space(fs, 1)
        end
    else do
        ll = ''
        do wx=1 to words(fs)
            w = word(fs, wx)
            v = w
            do x=2 while wordPos(v, ff) > 0
                v = w || x
                end
            ll = space(ll v, 1)
            end
        end
    if mapHasKey(m.o.fldOnly, ll) then do
        nn = mapGet(m.o.fldOnly, ll)
        end
    else do
        nn = oFldNew('FldType*')
        st = 'O.CLA.'nn'.FLD'
        do lx=1 to words(ll)
            call oPut st, word(ll, lx), '=', dup
        end
        call mapPut m.o.fldOnly, ll, nn
        end
    call mapPut m.o.fldOnly, kk, nn
    return nn
endProcedure oFldOnly

/*--- return the stem of flds of class type --------------------------*/
oFlds: procedure expose m.
parse arg type
    return 'O.CLA.'type'.FLD'

/*--- return the concatenation of the fields of type ty in stem st
           formated by fmt -------------------------------------------*/
oFldCat: procedure expose m.
parse arg ty, st, fmt
    flds = oFlds(ty)
    res = ''
    do ix=1 to m.flds.0
        f = m.flds.ix
        if fmt == '' then
            res = res m.st.f
        else
            res = res fmt(m.st.f, m.fmt.ix)
        end
    return substr(res, 2)
endProcedure oFldCat

/*--- add fields to class cl given as name type pairs in fs ----------*/
oFldAdd: procedure expose m.
parse arg cla, fs, dup
    st = 'O.CLA.'cla'.FLD'
    do ix=1 by 2 to words(fs)
         call oPut st, word(fs, ix), word(fs, ix+1), dup
         end
    return cla
endProcedure oFldAdd

/*--- add/put key k with value v to stem st
      duplicate handling dup:
          * replace * in k by a number until it is new
          e add a number in it is not new
          o replace old value at existing key
          = add a new key, fail if key exists and value is different
          ------------------------------------------------------------*/
oPut: procedure expose m.
parse arg st, k, v, dup
    if dup = '*' then do
        cx = pos('*', k)
        if cx < 1 then
            call err 'no * in key' k
        k = oPutDupResolve(st, left(k, cx-1), 1)
        end
    else if symbol('m.st.k') = 'VAR' then do
        if dup = '' | dup = 'o' then do
            m.st.k = v
            return k
            end
        if dup = '=' then do
            if v <> m.st.k | ^ (v = '' & datatype(m.st.k, 'n')) then
                call err 'not =: m.'st'.'k '=>' m.st.k '<>' v
            return k
            end
        if dup = 'e' then
            k = oPutDupResolve(st, k, 2)
        else
            call err 'key' k 'exists in' st 'but dup' dup
        end
    else if dup = 'o' then
        call err 'old key' k 'does not exist in' st
    if datatype(k, 'n') | words(k) <> 1 | pos('.', k) > 0 then
        call err 'illegal name' k
    x = m.st.0 + 1
    m.st.0 = x
    m.st.x = k
    if v == '' then
        m.st.k = x
    else
        m.st.k = v
    return k
endProcedure oPut

oPutDupResolve: procedure expose m.
parse arg st, k, b
     do ix=b
         a = k || ix
         if symbol('m.st.a') <> 'VAR' then
             return a
         end
endProcedure oPutDupResolve

/*--- parameterized types --------------------------------------------*/
oGetTypePara: procedure expose m.
parse arg m
    if symbol('m.o.tyPa.m') == 'VAR' then
        return m.o.tyPa.m
    else
        return '='
endProcedure oGetTypePara

oSetTypePara: procedure expose m.
parse arg m, type, noCall
    if type = '' then
        type = '='
    if oGetTypePara(m) == type then
        return
    if noCall ^== 'noCall' then
        interpret oObjMethod(m, 'oSetTypePara')
    m.o.tyPa.m = type
    return
endProcedure oSetTypePara
/* copy oFld  end   ***************************************************/
/* copy map begin ******************************************************
    a map stores values at keys
    it may also maintain a list of keys
    the basic ideas are similar to the java Interface java.util.Map
    contrary to stems we also handle keys longer then 250 bytes
***********************************************************************/
/*--- create a new map ----------------------------------------------*/
mapNew: procedure expose m.
parse arg opt
    return mapReset('MAP.'mInc('MAP.0') , opt)
endProcedure mapNew

/*--- make an empty map, opt=K means maintain a stem of keys ---------*/
mapReset: procedure expose m.
    parse arg a, opt
    if symbol('m.map.keys.a') == 'VAR' then
        call mapClear a
    upper opt
    if opt = '=' then
        st = a
    else if opt = 'K' then
        st = 'MAP.KEYS.'a
    else
        st = ''
    m.map.keys.a = st
    if st ^== '' then
        m.st.0 = 0
    if abbrev(a, 'MAP.') then
         m.map.loKy.a.0 = 0
    return a
endProcedure

/*--- remove all entries ---------------------------------------------*/
mapClear: procedure expose m.
parse arg a
    st = mapKeys(a)
    do kx=1 to m.st.0
        k = m.st.kx
        drop m.a.k m.st.kx
        end
    m.st.0 = 0
    if abbrev(a, 'MAP.') then do
        do kx=1 to m.map.loKy.a.0
            drop m.map.loKy.a.kx m.map.loVa.a.kx
            end
        m.map.loKy.a.0 = 0
        end
    return a
endProcedure mapClear

/*--- return a stem of all keys (including removed ones) -------------*/
mapKeys: procedure expose m.
parse arg a
    if m.map.keys.a == '' then
        call err 'mapKeys('a') with no keys'
     return m.map.keys.a
endProcedure mapKeys

/*--- add a new key value pair to the map ----------------------------*/
mapAdd: procedure expose m.
parse arg a, ky, val
    if mapValAdr(a, ky) ^== '' then
        call err 'duplicate key in mAdd('a',' ky',' val')'
    if length(ky) < 200 then do
        m.a.ky = val
        end
    else do
        kx = mInc('MAP.LOKY.'a'.0')
        m.map.loKy.a.kx = ky
        m.map.loVa.a.kx = val
        end
    if m.map.keys.a ^== '' then
        return mAdd(m.map.keys.a, ky)
    return
endProcedure mapAdd

/*--- change the value at a key or add key value ---------------------*/
mapPut: procedure expose m.
parse arg a, ky, val
    vv = mapValAdr(a, ky)
    if vv ^== '' then
        m.vv = val
    else
        call mapAdd a, ky, val
    return val
endProcedure mapPut

/*--- return the value pointer for a key, '' if non existang ---------*/
mapValAdr: procedure expose m.
parse arg a, ky
    if length(ky) < 200 then do
        if symbol('m.a.ky') == 'VAR' then
            return a'.'ky
        end
    else if ^ abbrev(a, 'MAP.') then do
        call err 'key too long mapValAdr('a',' ky')'
        end
    else do
        do kx=1 to m.map.loKy.a.0
            if m.map.loKy.a.kx == ky then
                return 'MAP.LOVA.'a'.'kx
            end
        end
    return ''
endProcedure mapValAdr

/*--- remove a key from the map, do nothing if it is missing ---------*/
mapRemove: procedure expose m.
parse arg a, ky
    val = m.a.ky
    vv = mapValAdr(a, ky)
    if vv == '' then
        return ''
    if abbrev(vv, 'MAP.LOVA.') then
        call err 'not implemented mapRemove('a',' ky')'
    drop m.a.ky
    return val
endProcedure mapRemove

/*--- return 1 if key ky exists in map a, 0 otherwise ----------------*/
mapHasKey: procedure expose m.
parse arg a, ky
    return mapValAdr(a, ky) ^== ''
endProcedure mapHasKey

/*--- return the value of key ky in map a,
          fail if it does not exist ----------------------------------*/
mapGet: procedure expose m.
parse arg a, ky, noKey
    vv =  mapValAdr(a, ky)
    if vv == '' then
        call err 'missing key in mapGet('a',' ky')'
    return m.vv
endProcedure mapGet

/*--- initialize the module ------------------------------------------*/
mapIni: procedure expose m.
    if m.map.ini = 1 then
        return
    m.map.ini = 1
    call mIni
    m.map.0 = 0
    return
endProcedure mapIni
/* copy map end *******************************************************/
/* copy m begin ********************************************************
  we use variables as follows
    m. stem m: all global data and object data that must survive
               a procedure call  (m for memory in Memoria of B5000)
        m.<mbr>.** to avoid conflicts: every rexx Module (copy) should
               only allocate addresses m.<mbr>.** with <mbr> the name of
               the rexx module
        we pass parameters around (e.g. a=address, m=memory, st=stem)
            and the called function may use m.a or m.a.subField etc.
    gg*: local variable in subroutines without procedure
    everything else: temporary data within procedure

  every subroutine is declared as procedure expose m.
        (also if no m. variable is used, because e.g. of error handling)
  the few subroutines that cannot use procedure, should use only
        variables starting with gg
***********************************************************************/
/*--- increase m.a and return it (fail if undefined) -----------------*/
mInc: procedure expose m.
    parse arg a
    m.a = m.a + 1
    return m.a
endProcedure mInc

/*--- cut stem a to length len ---------------------------------------*/
mCut: procedure expose m.
parse arg a, len
    m.a.0 = len
    return a
endProcedure mCut

/*--- add one or several arguments to stem m.a -----------------------*/
mAdd: procedure expose m.
parse arg a
    ix = m.a.0
    do ax = 2 to arg()
        ix = ix + 1
        m.a.ix = arg(ax)
        end
    m.a.0 = ix
    return a'.'ix
endProcedure mAdd

/*--- add to m.dst.* a (sub)sequence of m.src.* ----------------------*/
mAddSt: procedure expose m.
    parse arg dst, src
    dx = m.dst.0
    do sx = 1 to m.src.0
        dx = dx + 1
        m.dst.dx = m.src.sx
        end
    m.dst.0 = dx
    return
endProcedure mAddAt

/*--- strip all elements of a stem -----------------------------------*/
mStrip: procedure expose m.
parse arg st, opt
    if opt == '' then
        opt = 'b'
    do x=1 to m.st.0
        m.st.x = strip(m.st.x, opt)
        end
    return st
endProcedure mStrip

/*--- cat all elements of a stem together ----------------------------*/
mCat: procedure expose m.
parse arg st, mid
    if m.st.0 < 1 then
        return ''
    res = m.st.1
    do x=2 to m.st.0
        res = res || mid || m.st.x
        end
    return res
endProcedure mCat

mIni: procedure expose m.
    if m.m.ini = 1 then
        return
    m.m.ini = 1
    m.mAlfLC  = 'abcdefghijklmnopqrstuvwxyz'
    m.mAlfUC  = translate(m.mAlfLC)
    m.mAlfa   = m.mAlfLC || m.mAlfUC
    m.mAlfNum = m.mAlfa || '0123456789'
    m.mAlfDot = m.mAlfNum || '.'
    return
endProcedure mIni
/* copy m end *********************************************************/
/* copy adrIsp begin *************************************************/
/**********************************************************************
    lmd: catalog read
    call sequence: lmdBegin, lmdNext*, lmdEnd
        mit lmd service (mit save in file und read,
                         weil list zu langsam und listcat abstürzt)
        1. arg (grp)     als group dataset für lmd save
                         und dd name für file read
***********************************************************************/
lmdBegin: procedure expose m.
    parse arg grp, lev
    call adrIsp 'lmdinit listid(lmdId) level('lev')'
    res = adrIsp('lmdlist listid(&lmdId) option(save) group('grp')', 4)
    call adrIsp 'lmdfree listid(&lmdId)'
    if res = 0 then do
        call trc timing() 'lmdlist save' grp lev
        call adrTso 'alloc dd('grp') shr dsn('grp'.datasets)'
        end
    else do
        call trc 'no datasets found' timing() 'lmdlist save' grp lev
        call adrTso 'alloc dd('grp') dummy'
        end
    call readDDBegin grp
return /* end lmdBegin */

lmdNext:
    parse arg ggGrp, ggSt, withVolume
    if ^ readDD(ggGrp, ggSt) then
         return 0
    if withVolume ^== 1 then
        do ggIx=1 to value(ggSt'0')
            x = value(ggSt || ggIx, word(value(ggSt || ggIx), 1))
            end
    return 1
endSubroutin lmdNext

lmdEnd: procedure expose m.
    parse arg grp
    call readDDEnd grp
    call adrTso 'free dd('grp')'
return /* end lmdEnd */

lmd: procedure expose m.
    parse arg lev, withVol
    call lmdBegin gg1, lev
    do while lmdNext(gg1, q., withVol)
        do x=1 to q.0
           call jOut q.x
           end
        end
    call lmdEnd gg1
    return
endProcedure lmd
/**********************************************************************
    member list of a pds:
        call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmm: procedure expose m.
parse arg dsn
    id = lmmBegin(dsn)
    do ix=1 by 1
        m = lmmNext(id)
        if m = '' then
            leave
        call jOut m
        end
    call lmmEnd id
    return
endProcedure lmm

lmmBegin: procedure expose m.
parse arg dsn
    mbr = dsnGetMbr(dsn)
    pds = dsnSetMbr(dsn, )
    call adrIsp "LMINIT DATAID(lmmId) DATASET('"pds"') ENQ(SHRW)"
    call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
    res = lmmId
    if mbr <> '' then
        res = res 'pattern('mbr')'
    return res
endProcedure lmmBegin

lmmEnd: procedure expose m.
parse arg lmmId opt
    call adrIsp "LMMLIST DATAID("lmmId") option(free)", 8
    call adrIsp "LMCLOSE DATAID("lmmId")"
    call adrIsp "LMFREE DATAID("lmmId")"
    return
endProcedure lmmEnd

lmmNext: procedure expose m.
parse arg lmmId opt
    if adrIsp("LMMLIST DATAID("lmmid")" ,
               "OPTION(LIST) MEMBER(Mbr)" opt, 4 8) = 0 then
        return strip(mbr)
    else
        return ''
endProcedure lmmNext

lmmRm: procedure expose m.
parse arg dsn, mbrs
    mbrs = dsnGetMbr(dsn) mbrs
    pds = dsnSetMbr(dsn, )
    call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
    call adrIsp "LMOPEN DATAID("lmmId") OPTION(OUTPUT) "
    err = ''
    do wx=1 to words(mbrs)
        m1 = word(mbrs, wx)
        rr = adrIsp("lmmDel dataid("lmmId") member("m1")", 0 8 12)
        if rc = 0 then
            say 'removed' m1 'from' pds
        else if rc = 8 then
            say 'not found' m1 'in' pds
        else do
            err = 'error deleting' m1 'in' pds 'rc' rr strip(zerrlm)
            say err
            leave
            end
        end
    call adrIsp "LMCLOSE DATAID("lmmId")"
    call adrIsp "LMFREE DATAID("lmmId")"
    if err <> '' then
        call err err
    return
endProcedure lmmRm
/*--- address ispf with error checking -------------------------------*/
adrIsp:
    parse arg ggIspCmd, ggRet
    address ispexec ggIspCmd
    if rc = 0 then return 0
    else if ggRet == '*' then return rc
    else if wordPOS(rc, ggRet) > 0 then return rc
    else
        call err 'adr ispExec rc' rc 'in' ggIspCmd':' strip(zerrlm)
endSubroutine adrIsp

/*--- address editor with error checking -----------------------------*/
adrEdit:
    parse arg ggEditCmd, ggRet
    address isrEdit ggEditCmd
    if rc = 0 then return 0
    else if ggRet == '*' then return rc
    else if wordPOS(rc, ggRet) > 0 then return rc
    else
        call err 'adr isrEdit rc' rc 'for' ggEditCmd
endSubroutine adrEdit
/* copy adrIsp end   *************************************************/
/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
    parse arg ggTsoCmd, ggRet
    address tso ggTsoCmd
    if rc == 0                     then return 0
    else if ggRet == '*'           then return rc
    else if wordPos(rc, ggRet) > 0 then return rc
    else
        call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */

/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure expose m.
parse arg dsn ., addPrefix
    if left(dsn,1) = "'" then
        return strip(dsn, 'b', "'")
    sp = sysvar('SYSPREF')
    if sp == '' then
        sp = userid()
    cx = pos('~', dsn)
    if cx < 1 & addPrefix == 1 then
        return sp'.'dsn
    do while cx ^== 0
        le = left(dsn, cx-1)
        ri = substr(dsn, cx+1)
        if right(le, 1) == '.' | left(ri, 1) == '.' then
            dsn = le || sp || ri
        else
            dsn = le || left('.', le ^== '') || sp ,
                     || left('.', ri ^== '') || ri
        cx = pos('~', spec, cx)
        end
    return dsn
endProcedure dsn2Jcl

/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure expose m.
parse arg dsn .
    return "'"dsn"'"
endProcedure jcl2dsn

dsnSetMbr: procedure expose m.
parse arg dsn, mbr
     bx = pos('(', dsn)
     if bx > 0 then
         dsn = strip(left(dsn, bx-1))
     if mbr <> '' then
         dsn = dsn'('strip(mbr)')'
     return dsn
endProcedure dsnSetMbr

dsnGetMbr: procedure expose m.
parse arg dsn
     lx = pos('(', dsn)
     rx = pos(')', dsn, lx+1)
     if lx < 1 then
         return ''
     else if lx < rx then
         return substr(dsn, lx+1, rx-lx-1)
     else
         return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
    io: read or write a dataset with the following callsequences:
        read:  readDDBegin, readDD*,  readDDEnd
        write: writeBegin,  writeDD*, writeEnd

        readDD returns true if data read, false at eof
***********************************************************************/

/*--- prepare reading from a DD --------------------------------------*/
readDDBegin: procedure expose m.
return /* end readDDBegin */

/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt = '' then
        ggCnt = 100
    call adrTso 'execio' ggCnt 'diskr' ggDD '(stem' ggSt')', 2
    return (value(ggSt'0') > 0)
return /* end readDD */

/*--- finish reading DD  ggDD ----------------------------------------*/
readDDEnd: procedure expose m.
    parse arg ggDD
    call adrTso 'execio 0 diskr' ggDD '(finis)'
return /* end readDDEnd */

/*--- prepare writing to DD ggDD -------------------------------------*/
writeDDBegin: procedure expose m.
    parse arg ggDD
                  /* ensure file is erased, if no records are written */
    call adrTso 'execio' 0 'diskw' ggDD '(open)'
return /* end writeDDBegin */

/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    call adrTso 'execio' ggCnt 'diskw' ggDD '(stem' ggSt')'
    return
endSubroutine writeDD

/*--- end writing to dd ggDD (close) --------------------------------*/
writeDDEnd: procedure expose m.
    parse arg ggDD
    call adrTso 'execio 0 diskw' ggDD '(finis)'
return /* end writeDDEnd */

/*--- alloc a dsn or a dd
          spec '-'<ddName>
               datasetName? disposition? '.'? attributes? (':' newAtts)?
          disp default disposition
          dd   default dd name
          retRc   erlaubte ReturnCodes (leer = 0)
          returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, disp, dd, retRc
    ds = ''
    m.dsnAlloc.dsn = ds
    if left(spec, 1) = '-' then
        return strip(substr(spec, 2))
    if left(spec, 1) = '&' then /* external spec is handled ok */
        spec = strip(substr(spec, 2))
    do wx=1 by 1
        w = word(spec, wx)
        if w = '' | abbrev(w, '.') | abbrev(w, ':') then
            leave
        else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
            disp = w
        else if w = 'CATALOG' then
            disp = disp w
        else if abbrev(w, 'DD(') then
            dd = substr(w, 4, length(w)-4)
        else if abbrev(w, 'DSN(') then
            ds = strip(substr(w, 5, length(w)-5))
        else if ds = '' then
            ds = dsn2jcl(w)
        else
            leave
        end
    rest = subword(spec, wx)
    if abbrev(rest, '.') then
        rest = substr(rest, 2)
    parse var rest rest ':' nn
    if dd <> '' & ds = '' & rest = '' & ^ abbrev(disp, 'SYSO') then
        call err "'return" dd"' no longer supported please use -"dd
    if dd = '' then do
        if symbol('m.adrTso.ddNum') = 'VAR' then
            dd = m.adrTso.ddNum + 1
        else
            dd = 1
        m.adrTso.ddNum = dd
        dd = 'DD' || dd
        end
    if disp = '' then
        disp = 'SHR'
    else if pos('(', ds) < 1 then
        nop
    else if disp = 'MOD' then
        call err 'disp mod for' ds
    else
        disp = 'SHR'
    m.dsnAlloc.dsn = ds
    if pos('/', ds) > 0 then
        return csmAlloc(dd, disp, ds, rest, nn, retRc)
    else
        return tsoAlloc(dd, disp, ds, rest, nn, retRc)
endProcedure dsnAlloc

tsoAlloc: procedure expose m.
parse arg dd, disp, dsn, rest, nn, retRc
    c = 'alloc dd('dd')' disp
    if dsn <> '' then
        c = c "DSN('"dsn"')"
    if retRc <> '' | nn = '' then do
        alRc = adrTso(c rest, retRc)
        if alRc <> 0 then
            return alRc
        return dd 'call adrTso "free dd('dd')";'
        end
    do retry=0 by 1
        alRc = adrTso(c rest, '*')
        if alRc = 0 then
            return dd 'call adrTso "free dd('dd')";'
        if retry > 0 | nn = '' | wordPos(disp, 'OLD SHR') < 1 ,
            | sysDsn("'"m.dsnAlloc.dsn"'") ^== 'DATASET NOT FOUND' then
            call err 'tsoAlloc rc' alRc 'for' c rest
        say 'tsoAlloc rc' alRc 'for' c rest '...trying to create'
        call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(dsn, nn)
        call adrTso 'free  dd('dd')'
        end
endProcedure tsoAlloc

dsnCreateAtts: procedure expose m.
parse arg dsn, atts, forCsm
    bl = 32760
    if abbrev(atts, ':') then do
        rl = substr(atts, 3)
        if abbrev(atts, ':F') then do
            if rl = '' then
                rl = 80
            recfm='f b'
            bl = bl - (bl // rl)
            end
        else do
            if rl = '' then
                rl = bl-4
            recfm = substr(atts, 2, 1) 'B'
            end
        end
    if pos('(', dsn) > 0 then
        po = 'dsntype(library) dsorg(po)'
    else
        po = ''
    dsn = dsnSetMbr(dsn)
    if forCsm == 1 then
        return "dataset('"dsn"')" po,
                "recfm("space(recfm, 0)") lrecl("rl") blkSize("bl")" ,
                "mgmtclas(s005y000) space(10, 1000) cylinder"
    else
        return "dsn('"dsn"')" po,
                "recfm("recfm") lrecl("rl") block("bl")" ,
                "mgmtclas(s005y000) space(10, 1000) cyl"
endProcedure dsnCreateAtts

/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
    ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
    call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
    interpret subword(ggAlloc, 2)
    return
endSubroutine readDsn

/*--- write the dataset specified in ggDsnSpec from stem ggSt
          write ggCnt records if not empty otherwise ggst0
          if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
    call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
            '(stem' ggSt 'open finis)'
    interpret subword(ggAlloc, 2)
    if ggSay == 1 | m.debug == 1 then
       say ggCnt 'records written to' ggDsnSpec
    return
endSubroutine writeDsn

copyDSN: procedure expose m.
parse arg frSpec, toSpec, ggSay
    frDD = dsnAlloc(frSpec, 'SHR', 'FRDD')
    toDD = dsnAlloc(toSpec, 'OLD', 'TODD')
    call readDDBegin word(frDD, 1)
    call writeDDBegin word(toDD, 1)
    cnt = 0
    do while readDD(word(frDD, 1), r.)
        call writeDD word(toDD, 1), r.
        cnt = cnt + r.0
        end
    call readDDEnd word(frDD, 1)
    call writeDDEnd word(toDD, 1)
    interpret ';' subword(frDD, 2) '; ; ;' subword(toDD, 2)
    if ggSay == 1 | m.debug == 1 then
       say cnt 'records copied from' frSpec 'to' to toSpec
    return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
/* copy err begin ******************************************************
    messages, errorhandling,help
***********************************************************************/
/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
parse arg oo, ha
    if pos('I', translate(oo)) > 0 then
        call adrIsp 'control errors return'
    m.err.opt = translate(oo, 'h', 'H')
    if ha == '' then
        drop m.err.handler
    else
        m.err.handler = ha
    return
endSubroutine errReset

/*--- error routine: abend with message ------------------------------*/
err:
    parse arg ggTxt, ggOpt
    drop err handler opt
    if ggOpt == '' & symbol('m.err.handler') == 'VAR' then
        interpret m.err.handler
    call errSay ggTxt
    parse source . . ggS3 .                           /* current rexx */
    if ggOpt == '' | ggOpt == '*' then
        ggOpt = translate(value('m.err.opt'), 'ht', 'HT')
    if pos('h', ggOpt) > 0  then do
        say 'fatal error in' ggS3': divide by zero to show stackHistory'
        x = 1 / 0
        end
    say 'fatal error in' ggS3': exit(12)'
    exit errSetRc(12)
endSubroutine err

/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
    interpret 'assertRes =' arg(1)
    if ^ assertRes then
        call err 'assert failed' arg(1)':' arg(2)
    return
endProcedure assert

/*--- say an errorMessage msg with pref pref
           split message in lines at '\n'
           say addition message in stem st ---------------------------*/
errSay: procedure expose m.
parse arg msg, st, pref
    parse source . . ggS3 .                           /* current rexx */
    if pref == 'e' | (pref == '' & st == '') then
        msg = 'fatal error:' msg
    else if pref == 'w' then
        msgf = 'warning:' msg
    else if pref == 0 then
        nop
    else if right(pref, 1) ^== ' ' then
        msg = pref':' msg
    else
        msg = pref || msg
    sx = 0
    bx = -1
    do lx=1 until bx >= length(msg)
        ex = pos('\n', msg, bx+2)
        if ex < 1 then
            ex = length(msg)+1
        if st == '' then do
            say substr(msg, bx+2, ex-bx-2)
            end
        else do
            sx = sx+1
            m.st.sx = substr(msg, bx+2, ex-bx-2)
            m.st.0 = sx
            end
        bx = ex
        end
    return
endProcedure errSay

/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg, op
    say 'fatal error:' msg
    call help
    call err msg, op
endProcedure errHelp

/*--- set rc for ispf: -------------------------------------------------
    if a cmd is run by ispStart, its RC is ignored,
         but ISPF passes the value of the shared varible 3IspfRc
         back as return code
----------------------------------------------------------------------*/
errSetRc: procedure expose m.
parse arg zIspfRc
    if sysVar('sysISPF') = 'ACTIVE' then do
        address ispExec vput 'zIspfRc' shared
        end
    return zIspfRc
endProcedure errSetRc

/*--- output a trace message if m.trace is set -----------------------*/
trc: procedure expose m.
parse arg msg
    if m.trace == 1 then
        say 'trc:' msg
    return
endProcedure trc

/*--- quote string txt using quoteChar qu ("""" ==> ") ---------------*/
quote: procedure expose m.
parse arg txt, qu
    if qu = '' then
        qu = '"'
    res = qu
    ix = 1
    do forever
        qx = pos(qu, txt, ix)
        if qx = 0 then
            return res || substr(txt, ix) || qu
        res = res || substr(txt, ix, qx-ix) || qu || qu
        ix = qx + length(qu)
        end
endProcedure quote

debug: procedure expose m.
parse arg msg
    if m.debug == 1 then
        say 'debug' msg
    return
endProcedure debug

/*--- return current time and cpu usage ------------------------------*/
timing: procedure expose m.
return time() time('E') sysvar('syscpu') /* sysvar('syssrv') */

/--- display the first comment block of the source as help -----------*/
help: procedure expose m.
    parse source . . s3 .
    say right(' help for rexx' s3, 79, '*')
    do lx=1 by 1
        if pos('/*', sourceLine(lx)) > 0 then
            leave
        else if lx > 10 then do
            say 'initial commentblock not found for help'
            return
            end
        end
    do lx=lx+1 by 1
        li = strip(sourceLine(lx), 't', ' ')
        if pos('*/', li) > 0 then
            leave
        say li
        end
    say right(' end help for rexx' s3, 79, '*')
    return 4
endProcedure help
/* copy err end   *****************************************************/
}¢--- A540769.WK.REXX.O13(DDLCHECK) cre=2013-06-03 mod=2013-10-03-13.57.06 A540769 ---
/* rexx ----------------------------------------------------------------
synopsis:
    DDLCHECK SEL dsnSpec dbSys view objs+
history:
25. 9.13 Walter erlaube cat oq <-> o fuer overwrites
 6. 8.13 Walter ix fuer spezialfall
18. 7.13 Walter fix sqlDisconnect und insert gp (null verschluckt n|)
28. 6.13 Walter db fuer Selektion - alle TS, kein check auf db selber
20. 6.13 Walter pieceSize Logik mit 2 Defaults
 3. 6.13 Walter neu
----------------------------------------------------------------------*/
parse arg mArg
call errReset hi
call wshIni
call csvIni
m.myRexx = 'ORG.U0009.B0106.KIDI63.EXEC'
m.m.toFree = ''
call mPut m'.SPEZIALTYPE.db', 'DB'
call mPut m'.SPEZIALTYPE.ts', 'TS'
call mPut m'.SPEZIALTYPE.t' , 'TB'
call mPut m'.SPEZIALTYPE.i' , 'IX'

m.spezialLib = 'DSN.DBX.SPEZIAL'
m.spezialOut = ''
if mArg == '' then
    if m.err.ispf then
       call adrEdit 'macro (mArg)', '*'
if 0 then do
    call qForm aa, csvRdr(file('A540769.TMP.TEXV(DDLEINS)'))
    call err endTest
    end
if 0 & mArg == '' then do
    say '???? calling ddlCheck ....'
    res = ddlCheck('check ~tmp.texv(ddlChe3) rz1/dbaf rz2/dbof ',
             't:A540769.TWK9% t:A540769.PLAN%')
/*  res = ddlCheck('check ~tmp.texv(ddlChe2) rz8/dx0g rz2/dbof ',
             't:OA1A.TMF150A1   t:OA1P.TMF15% t:OA%.TNI250%') */
    say '???? ddlCheck result =' res
    call outSt splitNl(xx, 'qualityCheck' res)
    exit
    end
if 0 & mArg == '' then
    mArg = 'sel ~tmp.texv(ddlCheck) dbaf S100447.vDdlChec8' ,
             't:OA1A.TMF150A1   t:OA1A.TMF160A1 t:OA%.TNI250%',
             'ts:BE0%.A010%   ts:BE0%.A10%',
             'v:OA1A.VMF150%    i:OA1A.IMF160% i:OA%.INI250%'
if pos('?', mArg) > 0 | mArg = '' then
    exit help()
call scanIni
call scanSrc s, mArg
fun = scanSkWord(s, ,1)
if fun == 'CHECK' then do
    dsn = scanSkWord(s, , , 'dsnSpec')
    xRzDb  = scanSkWord(s, , , 'rz/db2Subsystem')
    parse var xRzdb xRz '/' xDbSys
    yRzDb  = scanSkWord(s, , , 'rz/db2Subsystem')
    parse var yRzdb yRz '/' yDbSys
    rest = scanLook(s)
/*  say 'check  to dsn='dsn
    say '  from prototype  rz='xRz 'dbsys='xDbSys
    say '  from production rz='yRz 'dbsys='yDbSys
    say '  rest' rest */
    rX = selectOne(m, xRz, xDbSys, 'S100447.vDdlChec8', xSel, rest)
    rY = selectOne(m, yRz, yDbSys, 'S100447.vDdlCheS8', ySel, rest)
    call pipe '+F', file(dsn)
    sum = qForm(m, rX, rY, xRzDb, yRzDb)
    call pipe '-'
    call tsoFree m.m.toFree
    return sum
    end
else if fun == 'SEL' then do
    dsn = scanSkWord(s, , , 'dsnSpec')
    dbSys = scanSkWord(s, , , 'db2 system')
    view = scanSkWord(s, , , 'view to select from')
    parse var view vCr '.' vw
/*  say 'select to dsn='dsn
    say '  from dbSys='dbSys 'view='view */
    call sqlConnect dbSys
    call insSels s, vCr
    o = jOpen(file(dsn), '>')
    call jWriteAll o, csvWrt(sqlRdr('select * from' view))
    call jClose o
    call sqlDisconnect
    end
else do
    do wx=1 while scanWord(scanSkip(s))
        say wx m.s.val '<'m.s.tok'>'
        end
    call errHelp 'i}unknown function' fun
    end
exit 0

insSels: procedure expose m.
parse arg s, vCr
    call sqlUpdate 1, 'delete from' vCr'.'tDdlSel, 'w'
/*  say m.sql.1.updateCount 'rows deleted from' vCr'.'tDdlSel */
    cTy = ''
    do while scanWord(scanSkip(s))
        parse var m.s.val ty ':' cr '.' nm
        if ty \== cTy | cCr \== cr then do
           if cTy \== '' then
               call insType vCr, cTy, cCr, cEq, cLi
           cTy = ty
           cCr = cr
           cEq = ''
           cLi = ''
           end
        if verify(nm, '%_', 'm') = 0 then
            cEq = cEq nm
        else
            cLi = cLi nm
        end
    if cTy == '' then
        call err 'no selections'
    call insType vCr, cTy, cCr, cEq, cLi
    return '???'
endProcedure genWhere


insType: procedure expose m.
parse arg vCr, ty, cr, eq, li
/*  say 'insType' ty 'into' vCr'.tDdlSel' 'cr='cr 'eq='eq 'li='li */
    sq = "insert into" vCr".tDdlSel select"
    f1 = ", '' from sysibm.sys"
    if ty == 'db' then
        call insOne sq "'ts', dbName, name"f1"Tablespace",
             "where", 'dbName', cr, 'name', ,'%'
    else if ty == 'i' then
        call insOne sq "'i', creator, name"f1"Indexes",
             "where", 'creator', cr, 'name', eq, li
    else if ty == 't' then
        call insOne sq "'ts', dbName, tsName"f1"Tables" ,
             "where type not in ('A', 'V') and" ,
             , 'creator', cr, 'name', eq, li
    else if ty == 'ts' then
        call insOne sq "'ts', dbName, name"f1"Tablespace",
             "where", 'dbName', cr, 'name', eq, li
    else if ty == 'v' then
        call insOne sq "'v', creator, name"f1"Tables",
             "where type='V' and", 'creator', cr, 'name', eq, li
    else
        call err 'bad insType' ty
    return
endProcedure insType

insOne: procedure expose m.
parse arg sq, crCo, crV, nmCo, nmEq, nmLi
    if verify(crV, '%_', 'm') > 0 then
        sq = sq crCo "like '"crV"' and"
    else if crV \== '' then
        sq = sq crCo "= '"crV"' and"
    sq = sq '('
    if nmEq <> '' then
        sq = sq nmCo "in ('"repAll(space(nmEq, 1), ' ',  "', '")"') or"
    if nmLi <> '' then
        sq = sq nmCo "like '" ,
         || repAll(space(nmLi, 1), ' ',  "' or" nmCo "like '")"' or"
    if right(sq, 3) \== ' or' then
        call err 'no nm for sql' sq
    sq = left(sq, length(sq)-3)')'
    call sqlUpdate 1, sq, 100
/*  say m.sql.1.updateCount '???rows inserted by' sq */
    return
endProcedure insOne

selectOne: procedure expose m.
parse arg m, rz, dbSys, vw, dd, rest
    upper rz
    if rz <> '' & rz <> sysvar(sysnode) then do
        call dsnAlloc rz"/"userid()".TMP."dd" DD("dd") new ::v"
        call csmExRx rz, m.myRexx, ,'%ddlCheck sel dd('dd')' ,
                  dbSys vw rest
        m.m.toFree = m.m.toFree dd
        return csvRdr(file('dd('dd')'))
        end
    else do
        parse var vw cr '.' nm
        call sqlConnect dbSys
        call scanSrc sOne, rest
        call insSels sOne, cr
        o = jOpen(jBuf(), '>')
        call jWriteAll o, sqlRdr('select * from' vw)
    call sqlDisconnect
        call jCLose o
        return o
        end
endProcedure selectOne

qForm: procedure expose m.
parse arg m, xR, yR, xTit, yTit
      xI = jReadO(jOpen(xR, '<'))
      yI = jReadO(jOpen(yR, '<'))
      m.m.stats = ''
      call out right('help' ,
   'http://chw20025641/host/db2wiki/pmwiki.php?n=Main.CaDDLQuality',72)
      call out left('*ty ca object', 47) left('rows' yTit, 13) 'size'
      call out ' ty ca  name         attribute   ',
                       left(xTit, 13) 'standard     ' yTit
      call out ' '
      do while xI \== '' | yI \== ''
          xPa = m.xI.pa
          if m.xI.ty == 'c' then
              if right(xPa, length(m.xI.nm)+3) == ' c:'m.xI.nm then
                  xPa = left(xPa, length(xPa) - length(m.xI.nm) - 3)
              else
                  call err 'bad c: path' qFormL0(xI)
          yPa = m.yI.pa
          if m.yI.ty == 'c' then
              if right(yPa, length(m.yI.nm)+3) == ' c:'m.yI.nm then
                  yPa = left(yPa, length(yPa) - length(m.yI.nm) - 3)
              else
                  call err 'bad c: path' qFormL0(yI)
          if xI \== '' & yI \== '' & xPa == yPa then do
              if cuPa \== xPa then do
                  if \ abbrev(m.xI.cat, 's') then
                      call err 'cat=s% expected not' qFormL0(xI)
                  if \abbrev(m.yI.cat, 's') then
                      call err 'cat=s% expected not' qFormL0(yI)
                  cuNewOld = '='
                  cuPa = xPa
                  call out qFormS1(m, cuNewOld, yI)
                  xI = jReadO(xR)
                  yI = jReadO(yR)
                  end
              else if m.xI.att == m.yI.att then do
                  if qFormDoOut(cuNewOld, xI, yI) then
                      call out qFormL1(m, cuNewOld, xI, yI)
                  if m.xI.std \== m.yI.std then
                      call err 'std \==' qFormL0(xI) '\==' qFormL0(yI)
                  xI = jReadO(xR)
                  yI = jReadO(yR)
                  end
              else if m.xI.att << m.yI.att then do
                  if qFormDoOut(cuNewOld, xI, ) then
                      call out qFormL1(m, cuNewOld, xI)
                  xI = jReadO(xR)
                  end
              else do
                  if qFormDoOut(cuNewOld,   , yI) then
                      call out qFormL1(m, cuNewOld, , yI)
                  yI = jReadO(yR)
                  end
              end
          else if yI == '' | xPa << yPa then do
              if cuPa \== xPa then do
                  if \ abbrev(m.xI.cat, 's') then
                      call err 'cat=s% expected not' qFormL0(xI)
                  cuPa = xPa
                  cuNewOld = '+'
                  call out qFormS1(m, cuNewOld, xI)
                  end
              else do
                  if qFormDoOut(cuNewOld, xI) then
                      call out qFormL1(m, cuNewOld, xI)
                  end
              xI = jReadO(xR)
              end
          else do
              if cuPa \== yPa then do
                  if \abbrev(m.yI.cat, 's') then
                      call err 'cat=s% expected not' qFormL0(yI)
                  cuPa = yPa
                  cuNewOld = '-'
                  call out qFormS1(m, cuNewOld, yI)
                  end
              else do
                  if qFormDoOut(cuNewOld, , yI) then
                      call out qFormL1(m, cuNewOld, , yI)
                  end
                  yI = jReadO(yR)
              end
          end
      call jClose xR
      call jClose yR
      return statsSum(m, 'n pq p oq iq sb - + =')
endProcedure qForm
/*--- piecesize has 2 stdValues 2G and 4G,
                hide 4G valueS that do not change production --------*/
qFormDoOut: procedure expose m.
parse arg newOld, xI, yI
     zI = xI
     if zI == '' then
         zI = yI
     else if yI \== '' & m.xI.cat \== m.yI.cat then do
         if      wordPos(m.xI.cat, 'o oq') > 0 ,
               & wordPos(m.yI.cat, 'o oq') > 0 then do
             m.xI.cat = 'oq'
             m.yI.cat = 'oq'
             end
         else
             call err 'cat \==' qFormL0(xI) '\==' qFormL0(yI)
         end
     if m.zI.att \== 'piecesize' then
          return 1
     if m.zI.val \= 0 & m.zI.val \= 2097152 & m.zI.val \= 4194304 then
          return 1
     if newOld \== '=' then
          return 0
     if xI == '' | yI == '' then
          return 1 /* one was default the other not NOT EQUAL| */
     return m.xI.val \== m.yI.val
endProcedure formDoOut

qFormL0: procedure expose m.
parse arg i1
    return 'ty='m.i1.ty 'qu='m.i1.qu 'nm='m.i1.nm 'cat='m.i1.cat ,
           'att='m.i1.att 'val='m.i1.val 'std='m.i1.std 'pa='m.i1.pa
endProcedure qFormL0

qFormS1: procedure expose m.
parse arg m, newOld, i1
    if m.i1.cat \== 's' then
        call statsAdd m, newOLD, m.i1.cat, i1
    call statsAdd m, newOld, newOld, i1
    if abbrev(m.i1.pa, 'db:') then do
         db = substr(word(m.i1.pa, 1), 4)
         call spezialFall db, 'DB', db
         t1 = m.i1.ty
         if symbol('m.m.spezialType.t1') == VAR then
             call spezialFall db, m.m.spezialType.t1, m.i1.qu, m.i1.nm
         end
    return ,
        lefPad(lefPad(lefPad( ,
        newOld || left(m.i1.ty, 2) left(m.i1.cat, 2) ,
             strip(m.i1.qu)'.'strip(m.i1.nm), 47) ,
                  m.i1.val, 61) m.i1.std, 100) m.i1.pa
endProcedure qFormS1

qFormL1: procedure expose m.
parse arg m, newOld, nO, oO
    if nO \== '' & oO \== '' then do
        if newOld \==  '=' then
            call err 'newOld' newOld 'but both'
        if m.nO.att \== m.oO.att then
            call err 'newOld' newOld 'but att <>'
        if m.nO.std \== m.oO.std then
            call err 'newOld' newOld 'but std <>'
        nVal = m.nO.val
        oVal = m.oO.val
        aO = nO
        end
    else if nO \== '' then do
        nVal = m.nO.val
        if newOld == '+' then
            oVal = '---'
        else if newOld == '=' then
            parse var m.nO.std oVal ',' .
        else
            call err 'newOld' newOld 'but new not null'
        aO = nO
        end
    else if oO \== '' then do
        if newOld == '-' then
            nVal = '---'
        else if newOld == '=' then
            parse var m.oO.std nVal ',' .
        else
            call err 'newOld' newOld 'but old not null'
        oVal = m.oO.val
        aO = oO
        end
    else
        call err 'both null'
    call statsAdd m, newOld, m.aO.cat, aO, nVal, oVal
    vNm = ''
    if m.aO.ty == 'c' then
        vNm = m.aO.nm
    return ,
        lefPad(lefPad(lefPad(lefPad(lefPad( ,
        left(' 'm.aO.ty, 3) left(m.aO.cat, 4) vNm, 20) ,
                  m.aO.att, 33) ,
                  nVal, 47) m.aO.std, 61)  oVal, 100) m.aO.pa
endProcedure qFormL1

qFormLine: procedure expose m.
parse arg i1
    return ,
        lefPad(lefPad(lefPad(lefPad(lefPad(lefPad(,
        left(m.i1.ty, 2) m.i1.qu, 11) m.i1.nm, 28),
             m.i1.cat, 32) m.i1.att, 45) ,
             m.i1.val, 59) m.i1.std, 73)
endProcedure qFormLine

statsAdd: procedure expose m.
parse arg m, newOld, c1, i1, xVal, yVal
    if wordPos(c1, m.m.stats) < 1 then do
        m.m.stats = m.m.stats c1
        m.m.stats.c1 = 0
        end
    m.m.stats.c1 = m.m.stats.c1 + 1
    if m.m.stats.c1 <= 3 then do
        t = newOld || left(m.i1.ty, 2) left(m.i1.cat, 2),
                   m.i1.qu'.'m.i1.nm
        if abbrev(m.i1.cat, 's') then
            t = t 'rows='m.i1.val 'size='m.i1.std
        else
            t = t m.i1.att xVal'<'m.i1.std'>'yVal
        call mPut m'.STATS.'c1'.'m.m.stats.c1, t
        end
    return
endProcedure statsAdd

statsSum: procedure expose m.
parse arg m, lst
    ly = words(lst)
    lst = lst m.m.stats
    done = ''
    m1 = ''
    m2 = ''
    ox = 0
    do lx=1 to words(lst)
        c1 = word(lst, lx)
        if wordPos(c1, done) > 0 | wordPos(c1, m.m.stats) < 1 then
            iterate
        m1 = m1',' m.m.stats.c1'*'c1
        done = done c1
        do cx=1 to min(3, m.m.stats.c1) while lx<=ly & ox < 5
            ox = ox + 1
            m2 = m2'\n||' m.m.stats.c1.cx
            end
        end
    return '||' substr(m1, 3)m2 || m.spezialOut
endProcedure statsSum

spezialFall: procedure expose m.
parse arg db, ty, qu, nm
    if 1 == m.spezialDone.db.ty.qu.nm then
        return
    m.spezialDone.db.ty.qu.nm = 1
    st = spezialFall'.'db
    if symbol('m.st.0') <> 'VAR' then do
        dsn = m.spezialLib"("db")"
        sy = sysDsn("'"dsn"'")
        if sy <> 'OK' then do
            m.st.0 = 0
            if sy <> 'MEMBER NOT FOUND' then
                call err 'spezialFall library' dsn':' sy
            end
        else do
           call readDsn dsn, 'M.'st'.'
           end
        end
    if m.st.0 < 1 then
        return
    offs = 999
    found = 0
    do sx = 1 to m.st.0
        fx = verify(m.st.sx, ' ')
        if fx = 0 | fx > 72 then
           iterate
        if substr(m.st.sx, fx, 1) = '*' then
           iterate
        if fx <= offs then do
            offs = fx
            m.st.sx = left(m.st.sx, 72)
            n = ''
            if pos('.', m.st.sx) > 0 then
                parse upper var m.st.sx t q '.' n .
            else
                parse upper var m.st.sx t q .
            if t \== ty | m.spezialDonL.db.sx == 1 then
                iterate
            if t == 'DB' then
                found = match(strip(db), strip(q))
            else if wordPos(t, 'TS TB IX') > 0 then
                found = match(strip(qu)'.'strip(nm),
                           , strip(q)'.'strip(n))
            else
                call err 'spezialFall' db 'line' sx 'ungueltig:' m.st.sx
            if found then
                m.spezialDonL.db.sx = 1
            end
        if found then
            m.spezialOut = m.spezialOut'\n|-' left(m.st.sx, 78)
        end
    return
/* copy ws2 ??????????????????????????? */
/* rexx ****************************************************************
  wsh: walter's rexx shell                                   version 2.2
  interfaces:
      edit macro: for adhoc evaluation or programming
          either block selection: q or qq and b or a
          oder mit Directives ($#...) im Text
      wsh i: tso interpreter
      batch: input in dd wsh
      docu: http://chsa4212/host/db2wiki/pmwiki.php?n=Main.Wsh
      syntax: http://chsa4212/host/db2wiki/pmwiki.php?n=Main.WshSyn
--- history ------------------------------------------------------------
 6. 2.13 w.keller csmCopy aendert mgmtClas für neue lokale Files
 ********/ /*** end of help ********************************************
23. 1.13 w.keller sqlErrHandler sowie sqlRx und sql
11. 6.12 w.keller sqlUpdComLoop
23. 5.12 w.keller fix sqlStmt: drop accepts -204
31. 3.12 w.keller sql Query interface incl. sql über CSM
10. 2.12 w.keller div catTb* und eLong
 2. 6.11 w.keller sql error with current location and dsnTiar
 2. 5.11 w.keller sqlStmt etc..
16. 3.11 w.keller basic new r '' ==> r m.class.classO
28. 2.11 w.keller compFile by exprBlock, fix $@do forever, |
 7. 2.11 w.keller cleanup block / with sqlPush....
 2. 2.11 w.keller simplified syntax, ast for blocks, ? for help
19. 6.10 w.keller open/close stacked mit jUsers, framed eliminiert
19. 5.10 w.keller class wird direkt erzeugt ohne temporary
18. 4.10 w.keller scanUtilInto ==> testCase noch einbauen
17. 4.10 w.keller oMutate in fileTsoList eingebaut
14. 1.10 w.keller batch interface no longer dies on openIfNotYet
                  CSM.RZ1.P0.EXEC korrigiert
***********************************************************************/
/*--- main code wsh --------------------------------------------------*/
    call errReset 'hI'
    call pipeIni  /* without tstClass2 gives different result */
    parse arg spec
    isEdit = 0
    if spec = '' & m.err.ispf then do /* z/OS edit macro */
        isEdit = adrEdit('macro (spec) NOPROCESS', '*') == 0
        if isEdit then do
            call adrEdit '(d) = dataset'
            call adrEdit '(m) = member'
            m.editDsn = dsnSetMbr(d, m)
            if spec = '' & m.editDsn = 'A540769.WK.REXX(WSH)' then
                spec = 't'
            end
        end
    if spec = '?' then
        return help()
    call utIni
    f1 = spec
    rest = ''
    if pos(verify(f1, m.ut.alfNum), '1 2') > 0 then
        parse var spec f1 2 rest
    u1 = translate(f1)
    if u1 = 'T' then
        return wshTst(rest)
    else if u1 = 'I' then
        return wshInter(rest)
    else if u1 = 'S' then
        spec = '$#@ call sqlStmtsOpt $.$sqlIn,' quote(rest) '$#sqlIn#='
    call wshIni
    inp = ''
    out = ''
    if m.err.os == 'TSO' then do
        if isEdit then do
            parse value wshEditBegin(spec) with inp out
            end
        else if sysvar('sysEnv') = 'FORE' then do
            end
        else do
            inp = s2o('-wsh')
            useOut = listDsi('OUT FILE')
            if \ (useOut = 16 & sysReason = 2) then
                out = s2o('-out')
            end
        end
    else if m.err.os == 'LINUX' then do
        inp = s2o('&in')
        out = s2o('&out')
        end
    else
        call err 'implement wsh for os' m.err.os
    m.wshInfo = 'compile'
    call compRun spec, inp, out, wshInfo
    if isEdit then
        call wshEditEnd
exit 0
/*--- actual test case ----------------------------------------------*/
wshIni: procedure expose m.
    call compIni
    call sqlOIni
    call scanWinIni
    return
endProcedure wshIni

tstRts: procedure expose m.
    call wshIni
    call sqlConnect dbaf
    call sqlQuery 3, "select * from sysibm.sysTableSpaceSTats" ,
                    "where dbName = 'MF01A1A' and name = 'A150A'",
                    "order by partition  asc"
    do while sqlFetch(3, rr)
        say f('@.DBNAME%-8C.@NAME%-8C @PARTITION %4C' ,rr)
        end
    call sqlDisconnect
endProcedure tstRts

wshTst: procedure expose m.
parse arg rest
    if rest = '' then do /* default */
        call sqlConnect DBAF
        call catColCom 'cmnBatch', 'DSN_PGROUP_TABLE',
                     , 'cmnBatch', 'DSN_PGROUP_TABLE_new'
        call sqlDisConnect DBAF
        return 0
        end
    c = ''
    do wx=1 to words(rest)
        c = c 'call tst'word(rest, wx)';'
        end
    if wx > 2 then
        c = c 'call tstTotal;'
    say 'wsh interpreting' c
    interpret c
    return 0
endProcedure wshTst

/*--- interpret user input: rexx, expr, data or shell ---------------*/
wshInter: procedure expose m.
parse arg inp
    call wshIni
    inp = strip(inp)
    mode = '*'
    do forever
        if pos(left(inp, 1), '/;:*@.-=') > 0 then
            parse var inp mode 2 inp
        if mode == '/' then
            return 0
        mode = translate(mode, ';', ':')
        if inp <> '' then do
            say 'as' mode 'interpreting' inp
            if mode = ';' then
                interpret inp
            else if mode = '*' then
                interpret 'say' inp
            else do
                call errReset 'h', 'say "******* intercepting error";',
                    'call errSay ggTxt; return "";'
                call oRun compile(comp(jBuf(inp)), mode)
                call errReset 'h'
                end
            end
        say 'enter' mode 'expression, / for end, ; or * for Rexx' ,
                                                 '@ . - =  for wsh'
        parse pull inp
        end
endProcedure wshInter

wshEditBegin: procedure expose m.
parse arg spec
    dst = ''
    li = ''
    m.wsh.editHdr = 0
    pc = adrEdit("process dest range Q", 0 4 8 12 16)
    if pc = 16 then
        call err 'bad range must be q'
    if pc = 0 | pc = 8 then do
        call adrEdit "(rFi) = lineNum .zFrange"
        call adrEdit "(rLa) = lineNum .zLrange"
    /*  say 'range' rFi '-' rLa */
        end
    else do
        rFi = ''
    /*  say 'no range' */
        end
    if pc = 0 | pc = 4 then do
        call adrEdit "(dst) = lineNum .zDest"
    /*  say 'dest' dst */
        dst = dst + 1
        end
    else do
    /*  say 'no dest' */
        if adrEdit("find first '$#out' 1", 4) = 0 then do
            call adrEdit "(dst) = cursor"
    /*      say '$#out' dst   */
            call adrEdit "(li) = line" dst
            m.wsh.editHdr = 1
            end
        end
    m.wsh.editDst = dst
    m.wsh.editOut = ''
    if dst \== '' then do
        m.wsh.editOut = jOpen(jBufTxt(), '>')
        if m.wsh.editHdr then
            call jWrite m.wsh.editOut, left(li, 50) date('s') time()
        end
    if rFi == '' then do
        call adrEdit "(zLa) = lineNum .zl"
        if adrEdit("find first '$#' 1", 4) = 0 then do
            call adrEdit "(rFi) = cursor"
            call adrEdit "(li) = line" rFi
            if abbrev(li, '$#out') | abbrev(li, '$#end') then
                rFi = 1
            if rFi < dst & dst \== '' then
                rLa = dst-1
            else
                rLa = zLa
            end
        else do
            rFi = 1
            rLa = zLa
            end
        end
    /*  say 'range' c1 'rc' pc':' rFi '-' rLa   'after' dst */

    m.wsh.editIn = jOpen(jBuf(), m.j.cWri)
    do lx=rFi to rLa
        call adrEdit "(li) = line" lx
        call jWrite m.wsh.editIn, li
        end
    call errReset 'h',
             , 'return wshEditErrH(ggTxt, ' rFi',' rLa')'
    return jClose(m.wsh.editIn) m.wsh.editOut
endProcedure wshEditBegin

wshEditEnd: procedure expose m.
    call errReset 'h'
    if m.wsh.editOut == '' then
        return 0
    call jClose(m.wsh.editOut)
    lab = wshEditInsLinSt(m.wsh.editDst, 0, , m.wsh.editOut'.BUF')
    call wshEditLocate max(1, m.wsh.editDst-7)
    return 1
endProcedure wshEditEnd

wshEditLocate: procedure
parse arg ln
    call adrEdit '(la) = linenum .zl'
    call adrEdit 'locate '  max(1, min(ln, la - 37))
    return
endProcedure wshEditLocate

wshEditErrH: procedure expose m.
parse arg ggTxt, rFi, rLa
    call errCleanup
    call errReset 'h'
    call errMsg ' }'ggTxt
    call mMove err, 1, 2
    isScan = 0
    if wordPos("pos", m.err.4) > 0 ,
        & pos(" in line ", m.err.4) > 0 then do
        parse var m.err.4 "pos " pos .     " in line " lin":"
        if pos = '' then do
            parse var m.err.4 " line " lin":"
            pos = 0
            end
        isScan = lin \== ''
        end
    m.err.1 = '***' m.wshInfo 'error ***'
    if m.wshInfo=='compile' & isScan then do
        do sx=1 to m.err.0
            call out m.err.sx
            end
        lab = rFi + lin
        if pos \= '' then
            lab = wshEditInsLin(lab, 'msgline', right('*',pos))
        lab = wshEditInsLinSt((rFi+lin),0, 'msgline', err)
        call wshEditLocate rFi+lin-25
        end
    else do
        if m.wsh.editOut \== '' then do
            do sx=1 to m.err.0
                call jWrite m.wsh.editOut, m.err.sx
                end
            lab = wshEditInsLinSt(m.wsh.editDst, 0, ,
                , m.wsh.editOut'.BUF')
            call wshEditInsLinSt m.wsh.editDst, m.wsh.editHdr,
                , msgline, err
            call wshEditLocate max(1, m.wsh.editDst-7)
            end
        else do
            do sx=1 to m.err.0
                say m.err.sx
                end
            end
        end
    call errCleanup
    exit
endSubroutine wshEditErrH

wshEditInsLinCmd: procedure
parse arg wh
    if dataType(wh, 'n')  then do
        if adrEdit("label" wh "= .a", 0 8 12) \= 12 then
            return 'line_before .a ='
        else
            return 'line_after .zl ='
        end
    else if left(wh, 1) == '.' then
        return 'line_before' wh '='
    else
        return wh
endProcedure wshEditInsLinCmd

wshEditInsLin: procedure
parse arg wh, type
    cmd = wshEditInsLinCmd(wh)
    do ax=3 to arg()
        li = strip(arg(ax), 't')
        if li == '' then
            iterate
        if translate(type) = 'MSGLINE' then do while length(li) > 72
            sx = lastPos(' ', li, 72)
            if sx < 10 then
                sx = 72
            one = left(li, sx)
            li = '    'strip(substr(li, sx))
            call adrEdit cmd type "(one)"
            end
        call adrEdit cmd type "(li)", 0 4
        end
    return cmd
endProcedure wshEditInsLin

wshEditInsLinSt: procedure expose m.
parse arg wh, pl, type, st
    if wh == '' then do
        do ox=1 to m.st.0
            say m.st.ox
            end
        return ''
        end
    wh = wh + pl
    cmd = wshEditInsLinCmd(wh)
    do ax=1 to m.st.0
        call wshEditInsLin cmd, type, m.st.ax
        end
    return cmd
endProcedure wshEditInsLinSt


/*** end wsh, begin all copies ****************************************/
/* copy tstAll begin  *************************************************/
/*----------- neu, noch versorgen |||||-------------------------------*/
tstWiki:
    call mapReset docs, 'k'
    call addFiles docs, 'n', '/media/wkData/literature/notes'
    call addFiles docs, 'd', '/media/wkData/literature/docs'

    in = jOpen(file('wiki.old'), '<')
    out = jOpen(file('wiki.new'), '>')
    abc = '(:abc: %l%'
    do cx=1 to length(m.ut.alfLC)
        c1 = substr(m.ut.alfLC, cx, 1)
        abc = abc '¢¢#'c1 '|' c1'!!'
        end
    call jWrite out, abc ':)'
    inTxt = 0
    li = m.i
    do lx=1 while jRead(in, i)
        if 0 then
            say length(m.i) m.i
        if m.i = '' then
            iterate
        li = m.i
        do forever
            bx = pos('¢=', li)
            if bx < 1 then
                leave
            ex = pos('=!', li)
            if ex <= bx then
                call err '=! before ¢= in' lx li
            li = left(li, bx-1)substr(li,bx+2, ex-bx-2)substr(li,ex+2)
            end
        li = strip(li)
        if abbrev(li, '|') then do
            w = word(substr(li, 2), 1)
            call jWrite out, '¢¢#'w'!! {$:abc}'
            call jWrite out, '|||' substr(li, 2)
            inTxt=1
            iterate
            end
        if \ inTxt then do
            call jWrite out, li
            iterate
            end
        if \ (abbrev(li, '->') | abbrev(li, '#') ,
                | abbrev(li, '¢')) then do
            call jWrite out, '-<' li
            iterate
            end
        cx = 1
        if substr(li, cx, 2) == '->' then
            cx = verify(li, ' ', 'n', cx+2)
        hasCross = substr(li, cx, 1) == '#'
        if hasCross then
            cx = verify(li, ' ', 'n', cx+1)
        ex = verify(li, '!:\, ', 'm', cx)
        ex = ex - (substr(li, ex, 1) \== '!')
        hasBr = substr(li, cx, 1) == '¢'
        if \ hasBr then
            w = substr(li, cx, ex+1-cx)
        else if substr(li, ex, 1) == '!' then
            w = substr(li, cx+1, ex-1-cx)
        else
            call err 'br not closed' substr(w, cx+1, ex-1-cx) 'in' lx li
        hasPdf = right(w, 4) == '.pdf'
        if hasPdf then
            w = left(w, length(w)-4)
        if verify(w, '#?', 'm') > 0 then do
            w = translate(w, '__', '#?')
            say '*** changing to' w 'in' lx li
            end
        o = '-< {def+'w'}'
        o = '-< ¢¢'w'!!'
        k = translate(w)
        if k.k == 1 then
            say '*** doppelter key' k 'in:' lx left(li,80)
        k.k = 1
        dT = ''
        if mapHasKey(docs, k) then do
            parse value mapGet(docs, k) with dT dC dN
            call mapPut docs, k, dT (dC+1) dN
            do tx=1 to length(dT)
                t1 = substr(dT, tx, 1)
                o = o '¢¢Lit'translate(t1)':'word(dN, tx) '|' t1 '!!'
                end
            end
        qSeq = 'nd'
        qq = left(qSeq, 1)
        qx = 0
        do forever
            qx = pos('@'qq, li, qx+1)
            if qx < 1 then do
                qq = substr(qSeq, 1 + pos(qq, qSeq), 1)
                qx=0
                if qq = '' then
                    leave
                else
                    iterate
                end
            if pos(qq, dT) < 1 then do
                say '*** @'qq 'document not found:' lx li
                iterate
                end
            do qb = qx-1 by -1 while substr(li, qb, 1) == ' '
                end
            do qe = qx+2 by 1 while substr(li, qe, 1) == ' '
                end
            if substr(li, qb, 1) == '.' & substr(li, qe, 1) == '.' then
                li = left(li, qb)substr(li, qe+1)
            else
                li = left(li, qb) substr(li, qe)
            end
        o = o':' strip(substr(li, ex+1+(substr(li,ex+1,1)==':')))
        if 0 then say left(li, 30) '==>' left(o, 30)
        call jWrite out, o
        end
    dk = mapKeys(docs)
    do dx=1 to m.dk.0
        parse value mapGet(docs, m.dk.dx) with dT dC dN
        if dC < 1 then
            say '*** document not used:' dT dC dn
        end
    call jClose in
    call jClose out
    return
endProcedure tstWiki

addFiles: procedure expose m.
parse arg m, ty, file
    fl = jOpen(fileList(file(file)), '<')
    do while jRead(fl, fi1)
        nm = substr(m.fi1, lastPos('/', m.fi1)+1)
        k = translate(left(nm, pos('.', nm)-1))
        if \ mapHasKey(m, k) then do
            call mapAdd m, k, ty 0 nm
            end
        else do
            parse value mapGet(m, k) with dT dC dN
            call mapPut m, k, dT || ty 0 dN nm
            end
        end
    call jClose fl
    return
endProcedure addFiles

tstAll: procedure expose m.
    say 'tstAll ws2 25.2.13...............'
    call tstBase
    call tstComp
    call tstDiv
    if m.err.os = 'TSO' then
        call tstZos
    call tstTut0
    return 0
endProcedure tstAll

/* copx tstZos begin **************************************************/
tstZOs:
    call tstTime
    call sqlIni
    call tstSql
    call tstSqlC
    call tstSqlCSV
    call tstSqlQ
    call tstSqlUpdComLoop
    call tstSqlB
    call tstSqlStmt
    call tstSqlStmts
    call tstSqlO1
    call tstSqlO2
    call tstSqls1
    call tstSqlO
    call tstSqlFTab
    call tstTotal
    return
endProcedure tstZOs

tstWshBatch:
    call adrTso 'alloc dd(WSH) shr dsn(WK.TEXT(WSHBATCH))'
    call wshBatch
    return adrTso('free dd(WSH)')

tstLmdTiming:
parse arg lev
    say timing() lev
    call lmdBegin abc, lev
    c = 0
    do while lmdNext(abc, st.)
        c = c + st.0
        end
    call lmdEnd   abc
    say timing() lev 'with group - without reading' c
    call adrIsp 'lmdinit listid(lmdId) level('lev')'
    do c=0 while adrIsp('lmdlist listid(&lmdId) dataset(abc)', 8) = 0
        end
    call adrIsp 'lmdfree listid(&lmdId)'
    say timing() lev 'with list' c
    return
endProcedure lmdTiming

tstCsi: procedure expose m.
    if 0 then do
        call lmd 'A540769.*K'
        call tstCsiCla 'A540769.WK.REXX'
        call tstCsiCla 'A540769.AAA.DATASETS'
        call tstCsiCla 'A540769.RRR.DATASETS'
        end
    if 0 then do
        call tstCsiOpNx 'A540769.WK.*E*'
        call tstCsiOpNx 'A540769.AAA.DATASETS'
        call tstCsiOpNx 'A540769.RRR.DATASETS'
        end
    if 1 then do
        call tstCsiNxCl 'A540769.WK.**'
        call tstCsiNxCl 'DBTF.M*.**'
        call tstCsiNxCl 'DBTF.BE*.**'
        end
    return
tstCsi: procedure expose m.
 /* call lmd 'A540769.*K' */
    call tstCsi1   'A540769.WK.REXX'
    call tstCsi1   'A540769.AAA.DATASETS'
    call tstCsi1   'A540769.RRR.DATASETS'
    return

tstCsiCla:
parse arg ds
    say ds '-->' csiCla(ds)
    return

tstCsiOpNx: procedure expose m.
parse arg ds
    m = 'NUE123'
    s = 'res89'
    flds = 'devtyp volser mgmtclas comudsiz NOBYTTRK UDATASIZ HARBA'
    say 'csiOpen' ds
    call csiOpen m, ds, flds
    do while csiNext(m, s)
        say m.s     'dev' c2x(m.s.devTyp) ,
                    'vol' m.s.volSer 'cla' m.s.mgmtclas,
                    'comuDsiz' m.s.comuDsiz 'noBytTrk' m.s.noBytTrk,
                    'udatasiz' c2x(m.s.udatasiz) ,
                    'harba' c2x(m.s.harba)
        end
    return

tstCsiNxCl: procedure expose m.
parse arg ds
    m = 'ABC123'
    s = 'efg89'
    flds = 'devtyp volser mgmtclas'
    say 'csiOpen' ds
    call csiOpen m, ds, flds
    say timing() 'begin'
    do i=1 while csiNext(m, s)
        nn = csiArcTape(m.s.volser, m.s.mgmtClas, m.s.devtyp, m.s)
/*      oo = csiCla(strip(m.s))
        if oo <> nn then
            say nn '<>' oo m.s
 */     if i // 1000 = 0 then
            say timing() i nn m.s
        end
    say timing() (i-1) nn m.s
    return
endProcedure tstCsiNxCl

listCatClass: procedure expose m.
parse upper arg dsn
    call outtrap x., '*'
    call adrTso "listcat volume entry('"dsn"')", 4
    rt = rc
    call outtrap off
    /* say 'listct rc =' rt 'lines' x.0 */
    cl = ''
    vo = ''
    if word(x.1, 3) \== dsn then
        call out 'err ??? for dsn' dsn 'bad first line' x.1
    else if pos('NOT FOUND', x.1) > 0 then
        return 'notFound'
    else if word(x.1, 1)\== 'NONVSAM' then
        call out 'err ??? for dsn' dsn 'bad first line' x.1
    do x=2 to x.0 while vo = '' & left(x.x, 1) = ' '
     /* say x.x */
        p = pos('MANAGEMENTCLASS-', x.x)
        if p > 0 then
            vo = strip(word(substr(x.x, p+16), 1), 'l', '-')
        p = pos('VOLSER--', x.x)
        if p > 0 then
            vo = strip(word(substr(x.x, p+6), 1), 'l', '-')
        p = pos('DEVCLASS--', x.x)
            dt = strip(word(substr(x.x, p+8), 1), 'l', '-')
        end
   /*  say 'lc' cl 'vo' vo 'dt' dt 'dsn' dsn */
    if vo = '' then
        call out '??? err no volume for dsn' dsn
    else if vo = 'ARCIVE' then
        res =  'arcive'
    else if cl = '' then
        res = 'tape'
    else
        res = cl
    if   abbrev(res, 'ar') \= abbrev(dt, "X'0") ,
       | abbrev(res, 'ta') \= abbrev(dt, "X'7") ,
       | (left(res, 1) >= 'A') \= abbrev(dt, "X'3") then
       call out 'err ??? mismatch cl' cl 'vo' vo 'dt' dt 'dsn' dsn
    return res
endProcedure listCatClass

/* copx tstZos end   **************************************************/
/* copx tstDiv begin **************************************************/
tstDiv:
    call tstSorQ
    call tstSort
    call tstMatch
    call tstTotal
    return
endProcedure tstDiv

tstSorQ: procedure expose m.   /* wkTst??? remove once upon a time */
/*
$=/tstSorQ/
    ### start tst tstSorQ #############################################
    sort 29  c ACHT DREI DREIZEHN EINS ELF FUENF M.I.25 M.I.26 M.I.27 M+
    ..I.29 NEUN SECHS SIEBEN VIER VIERZEHN ZEHN ZWEI ZWOELF 0 1 1 1 2 2+
    . 3 3 4 4
    sort 22  c ACHT DREIZEHN ELF M.I.25 M.I.26 M.I.27 M.I.29 NEUN VIERZ+
    EHN ZEHN ZWOELF 0 1 1 1 2 2 3 3 4 4
    sort 15  c M.I.25 M.I.26 M.I.27 M.I.29 0 1 1 1 2 2 3 3 4 4
    sort 8  c M.I.25 M.I.26 M.I.27 M.I.29 0 1 1
    sort 1  M.I.29
$/tstSorQ/ */
/*
$=/tstSorQAscii/
    ### start tst tstSorQAscii ########################################
    sort 29  0 1 1 1 2 2 3 3 4 4 ACHT DREI DREIZEHN EINS ELF FUENF M.I.+
    25 M.I.26 M.I.27 M.I.29 NEUN SECHS SIEBEN VIER VIERZEHN ZEHN ZWEI Z+
    WOELF c
    sort 22  0 1 1 1 2 2 3 3 4 4 ACHT DREIZEHN ELF M.I.25 M.I.26 M.I.27+
    . M.I.29 NEUN VIERZEHN ZEHN ZWOELF c
    sort 15  0 1 1 1 2 2 3 3 4 4 M.I.25 M.I.26 M.I.27 M.I.29 c
    sort 8  0 1 1 M.I.25 M.I.26 M.I.27 M.I.29 c
    sort 1  M.I.29
$/tstSorQAscii/ */
    if m.err.os == 'LINUX' then
        call tst t, "tstSorQAscii"
    else
        call tst t, "tstSorQ"
    call mAdd mCut(i, 0), eins, zwei, drei, vier, fuenf, sechs,
        ,sieben, acht, neun, zehn, elf, zwoelf, dreizehn, vierzehn
    call mAdd i, 1, 2, 3, 4, 4, 3, 2, 1, 0, 1,
        , 'M.I.25', 'M.I.26', 'M.I.27', 'c', 'M.I.29'

    do yy = m.i.0 by -1 to 1
        do x = 0 to yy
            m.i.0 = x
            call sort i, o
            m = ''
            la = ''
            if x <> m.o.0 then
                call err 'size mismatch' x '<>' m.o.0
            do y=1 to m.o.0
                m = m m.o.y
                if \ (la << m.o.y) then
                    call err 'sort mismatch' yy x y '\' la '<<' m.o.y
                end
            end
        if yy // 7 = 1 then
           call tstOut t, 'sort' yy m
        do x = 2 to yy
            x1 = x-1
            m.i.x1 = m.i.x
            end
        end
    call tstEnd t
    return
endProcedure tstSorQ

tstSort: procedure expose m.
    call tstSortComp
    call tstSortComp '<<='
    call tstSortComp 'm.aLe <<= m.aRi'
    call tstSortComp 'if 1 then cmp = m.aLe <<= m.aRi; else call err sd'
    return
endProcedure tstSort

tstSortComp: procedure expose m.
parse arg cmp
/*
$=/tstSort/
    ### start tst tstSort #############################################
    sort 29  c ACHT DREI DREIZEHN EINS ELF FUENF M.I.25 M.I.26 M.I.27 M+
    ..I.29 NEUN SECHS SIEBEN VIER VIERZEHN ZEHN ZWEI ZWOELF 0 1 1 1 2 2+
    . 3 3 4 4
    sort 22  c ACHT DREIZEHN ELF M.I.25 M.I.26 M.I.27 M.I.29 NEUN VIERZ+
    EHN ZEHN ZWOELF 0 1 1 1 2 2 3 3 4 4
    sort 15  c M.I.25 M.I.26 M.I.27 M.I.29 0 1 1 1 2 2 3 3 4 4
    sort 8  c M.I.25 M.I.26 M.I.27 M.I.29 0 1 1
    sort 1  M.I.29
$/tstSort/ */
/*
$=/tstSortAscii/
    ### start tst tstSortAscii ########################################
    sort 29  0 1 1 1 2 2 3 3 4 4 ACHT DREI DREIZEHN EINS ELF FUENF M.I.+
    25 M.I.26 M.I.27 M.I.29 NEUN SECHS SIEBEN VIER VIERZEHN ZEHN ZWEI Z+
    WOELF c
    sort 22  0 1 1 1 2 2 3 3 4 4 ACHT DREIZEHN ELF M.I.25 M.I.26 M.I.27+
    . M.I.29 NEUN VIERZEHN ZEHN ZWOELF c
    sort 15  0 1 1 1 2 2 3 3 4 4 M.I.25 M.I.26 M.I.27 M.I.29 c
    sort 8  0 1 1 M.I.25 M.I.26 M.I.27 M.I.29 c
    sort 1  M.I.29
$/tstSortAscii/ */
    say '### start with comparator' cmp '###'
    if m.err.os == 'LINUX' then
        call tst t, "tstSortAscii"
    else
        call tst t, "tstSort"
    call mAdd mCut(i, 0), eins, zwei, drei, vier, fuenf, sechs,
        ,sieben, acht, neun, zehn, elf, zwoelf, dreizehn, vierzehn
    call mAdd i, 1, 2, 3, 4, 4, 3, 2, 1, 0, 1,
        , 'M.I.25', 'M.I.26', 'M.I.27', 'c', 'M.I.29'

    do yy = m.i.0 by -1 to 1
        do x = 0 to yy
            m.i.0 = x
            call sort i, o, cmp
            m = ''
            la = ''
            if x <> m.o.0 then
                call err 'size mismatch' x '<>' m.o.0
            do y=1 to m.o.0
                m = m m.o.y
                if \ (la << m.o.y) then
                    call err 'sort mismatch' yy x y '\' la '<<' m.o.y
                end
            end
        if yy // 7 = 1 then
           call tstOut t, 'sort' yy m
        do x = 2 to yy
            x1 = x-1
            m.i.x1 = m.i.x
            end
        end
    call tstEnd t
    return
endProcedure tstSort
tstMatch: procedure expose m.
/*
$=/tstMatch/
    ### start tst tstMatch ############################################
    match(eins, e?n*) 1 1 2,i,s trans(E?N*) EiNs
    match(eins, eins) 1 1 0 trans(EINS) EINS
    match(e1nss, e?n*) 1 1 2,1,ss trans(?*) 1ss
    match(eiinss, e?n*) 0 0 -9
    match(einss, e?n *) 0 0 -9
    match(ein s, e?n *) 1 1 2,i,s trans(E?N *) EiN s
    match(ein abss  , ?i*b*) 1 1 3,e,n a,ss   trans(?I*B*) eIn aBss  .
    match(ein abss wie gehtsssxdirx und auch , ) 0 0 -9
    match(ies000, *000) 1 1 1,ies trans(*000) ies000
    match(xx0x0000, *000) 1 1 1,xx0x0 trans(*000) xx0x0000
    match(000x00000xx, 000*) 1 1 1,x00000xx trans(000*) 000x00000xx
    match(000xx, *0*) 1 1 2,00,xx trans(ab*cd*ef) ab00cdxxef
$/tstMatch/ */
    call tst t, "tstMatch"
    call tstOut t, matchTest1('eins', 'e?n*'                        )
    call tstOut t, matchTest1('eins', 'eins'                        )
    call tstOut t, matchTest1('e1nss', 'e?n*', '?*'                 )
    call tstOut t, matchTest1('eiinss', 'e?n*'                      )
    call tstOut t, matchTest1('einss', 'e?n *'                      )
    call tstOut t, matchTest1('ein s', 'e?n *'                      )
    call tstOut t, matchTest1('ein abss  ', '?i*b*'                 )
    call tstOut t, matchTest1('ein abss wie gehtsssxdirx und auch ' )
    call tstOut t, matchTest1('ies000', '*000'                      )
    call tstOut t, matchTest1('xx0x0000', '*000'                    )
    call tstOut t, matchTest1('000x00000xx', '000*'                 )
    call tstOut t, matchTest1('000xx', '*0*', 'ab*cd*ef'            )
    call tstEnd t
return

matchTest1:
parse arg w, m, m2
    r = 'match('w',' m')' match(w, m) match(w, m, vv) m.vv.0
    do x=1 to m.vv.0
        r = r','m.vv.x
        end
    if m2 = '' then
        m2 = translate(m)
    if m.vv.0 >= 0 then
        r = r 'trans('m2')' matchTrans(m2, vv)
    return r
endProcedure matchTest1

tstTime: procedure
/*         Winterzeit dez 2011
$=/tstTime/
    ### start tst tstTime #############################################
    Lrsn2Lzt(C5E963363741) 2010-05-01-12.34.55.789008
    Achtung: output ist abhaengig von Winter/Sommerzeit und LeapSecs
    timeZone 7200.00000 leapSecs 25.0000000
    2jul(2011-03-31-14.35.01.234567)  11090
    Lrsn2Gmt(C5E963363741) 2010-05-01-10.35.20.789008
    Lrsn2Lzt(C5E963363741) 2010-05-01-12.34.55.789008
    gmt2Lrsn(2011-03-31-14.35.01.234567) C78D87B86E38
    lzt2Lrsn(2011-03-31-14.35.01.234567) C78D6CFDD13C
    Lrsn2Gmt(gmt2Lrsn(2011-03-31-14.35.01.234567) 2011-03-31-14.35.01.2+
    34560
    gmt2Lrsn(Lrsn2Gmt(C5E963363741) C5E963363741
    Lrsn2LZt(LZt2Lrsn(2011-03-31-14.35.01.234567) 2011-03-31-14.35.01.2+
    34560
    LZt2Stc(Lrsn2LZt(C5E963363741)( C5E963363741
$/tstTime/
*/
    call jIni
    call tst t, 'tstTime'
    t1 = '2011-03-31-14.35.01.234567'
    s1 = 'C5E963363741'
    call out 'Lrsn2Lzt('s1')' timeLrsn2Lzt(s1)
    call out ,
     'Achtung: output ist abhaengig von Winter/Sommerzeit und LeapSecs'
    call out 'timeZone' m.timeZone * m.timeStckUnit ,
             'leapSecs' m.timeLeap * m.timeStckUnit
    call timeReadCvt 1
    call out '2jul('t1') ' time2jul(t1)
    call out 'Lrsn2Gmt('s1')' timeLrsn2Gmt(s1)
    call out 'Lrsn2Lzt('s1')' timeLrsn2Lzt(s1)
    call out 'gmt2Lrsn('t1')' timeGmt2Lrsn(t1)
    call out 'lzt2Lrsn('t1')' timeLzt2Lrsn(t1)
    call out 'Lrsn2Gmt(gmt2Lrsn('t1')' timeLrsn2Gmt(timeGmt2Lrsn(t1))
    call out 'gmt2Lrsn(Lrsn2Gmt('s1')' timeGmt2Lrsn(timeLrsn2Gmt(s1))
    call out 'Lrsn2LZt(LZt2Lrsn('t1')' timeLrsn2LZt(timeLZt2Lrsn(t1))
    call out 'LZt2Stc(Lrsn2LZt('s1')(' timeLZt2Lrsn(timeLrsn2LZt(s1))
    call tstEnd t
    return
endProcedure tstTime
/* copx tstDiv end   **************************************************/

/* copx tstSql begin **************************************************/
tstSqlUtils: procedure expose m.
    call sqlConnect 'DBAF'
    id = 'A540769.dsnUtils'
    rst = 'NO'
    retcode = -9876
    e = ''
    z = 0
    st = "TEMPLATE TCOPYD",
            "DSN('&SSID..&JO..&US..P&PART(2)..D&DATE(3)..T&TIME.')",
            "DATACLAS(NULL12) MGMTCLAS(COM#A011) STORCLAS(FAR$N)",
            "SPACE (150,3750) TRK UNCNT 59;",
         "listdef abc include tablespace DA540769.A002* partlevel;",
         "listdef mf  include tablespace MF01A1A.A110A partlevel;",
         "copy list abc copyddn(tcopyd) shrlevel change;"
    st = translate(st)
    call sqlExec "call SYSPROC.DSNUTILS ( :id, :rst,",
                   ":st,:retcode, :ANY" copies(',:e,:e,:z',12) ")"
    call sqlExec ,
          'ASSOCIATE LOCATOR (:RESULTS) WITH PROCEDURE SYSPROC.DSNUTILS'
    say 'results' results
    call sqlExec 'ALLOCATE C111 CURSOR FOR RESULT SET :RESULTS'
    say 'allocated c111'
    do while sqlExec('fetch c111 into :seq, :txt', 0 100) = 0
        say 'sysPrint' seq strip(txt, 't')
        end
    call sqlExec 'close c111'
    say 'closed'
    call sqlDisconnect
    exit
endProcedure tstSqlUtils

tstSqlStored: procedure expose m.
    call sqlConnect 'DBAF'
    rst = 'NO'
    retcode = -9876
    e = ''
    z = 0
    st = "abc"
    call sqlExec "call SYSPROC.COMMAND ( :st, :rst)"
    say 'after call st='st 'rst='rst
    call sqlExec ,
          'ASSOCIATE LOCATOR (:RESULTS) WITH PROCEDURE SYSPROC.COMMAND'
    say 'results' results
    call sqlExec 'ALLOCATE C111 CURSOR FOR RESULT SET :RESULTS'
    say 'allocated c111'
    do while sqlExec('fetch c111 into :seq, :txt', 0 100) = 0
        say 'sysPrint' seq strip(txt, 't')
        end
    call sqlExec 'close c111'
    say 'closed'
    call sqlDisconnect
    return
endProcedure tstSqlStored

tstSqlStoredWK: procedure expose m.
    call sqlConnect 'DBAF'
 /* st = "direct wkUtiSub"
    rst = 'NO'
    say 'before call st='st 'rst='rst
    call sqlExec "call A540769.WKUTILSUB ( :st, :rst)"
    say 'after call st='st 'rst='rst
 */ rst = 'NO'
    retcode = -9876
    e = ''
    z = 0
    prc = 'DB2UTIL.DB2UTIL'
    st = "DA540769.A2*" /*  DA540769.A1*" */
    say  "call" prc "("st", ...)"
    call sqlExec "call" prc "(:st, :rst)"
    say 'after call st='st 'rst='rst
    call sqlExec ,
          'ASSOCIATE LOCATOR (:RESULTS) WITH PROCEDURE' prc
 /* say 'results' results  */
    call sqlExec 'ALLOCATE C111 CURSOR FOR RESULT SET :RESULTS'
    say ''
    say '***** utility output'
    do while sqlExec('fetch c111 into :seq, :txt', 0 100) = 0
        say 'sysPrint' seq strip(txt, 't')
        end
    call sqlExec 'close c111'
    say '***** end output'
    call sqlDisconnect
    return 0
endProcedure tstSqlStoredWK

tstSqlStoredSQL1: procedure expose m.
    call sqlConnect 'DBIA'
    rst = 'NO'
    retcode = -9876
    e = ''
    z = 0
    st = "DA540769.A2* DA540769.A1*"
    call sqlExec "call A540769.WKSQL1 ( :st, :rst)"
    say 'after call st='st 'rst='rst
    call sqlExec ,
          'ASSOCIATE LOCATOR (:RESULTS) WITH PROCEDURE A540769.WKUTIL'
    say 'results' results
    call sqlExec 'ALLOCATE C111 CURSOR FOR RESULT SET :RESULTS'
    say 'allocated c111'
    do while sqlExec('fetch c111 into :seq, :txt', 0 100) = 0
        say 'sysPrint' seq strip(txt, 't')
        end
    call sqlExec 'close c111'
    say 'closed'
    call sqlDisconnect
    return
endProcedure tstSqlStoredSQL1

tstSqlTriggerTiming:
    parse upper arg tb ni
    m.noInsert = ni == 0
    cnt = 200000
    if tb = '' then
        TB = 'GDB9998.TWK511TRI'
    call sqlConnect dbaf
    say timing() 'noInsert' m.noInsert 'tb' tb
    call sql2St 49, '*', cc, 'select max(pri) MX from' tb
    if m.cc.1.mx == m.sqlNull then
        m.cc.1.mx = 0
    von = m.cc.1.mx + 1
    bis = m.cc.1.mx + cnt
    say m.cc.0 'max' m.cc.1.mx 'von' von 'bis' bis 'count' cnt tb
    if right(tb, 2) = 'A1' then do
        call sqlPrepare 3, 'insert into' tb '(pri, short, long, par)' ,
                   'values (?, ?, ?, ?)'
        do ax=von to bis
            call sqlExecute 3, ax,
                  , ax 'wsh short', ax 'wsh long long long long long ',
                  , (ax-1) // 1000 + 1
            end
        end
    else do
        call sqlPrepare 3, 'insert into' tb '(pri, short, long)' ,
                   'values (?, ?, ?)'
        do ax=von to bis
            call sqlExecute 3, ax,
                  , ax 'wsh short', ax 'wsh long long long long long ',
                  , (ax-1) // 1000 + 1
            end
        end
    /*  call sqlLn 5,,, 'select * from' tb 'where pri >=' von */
    call sqlExImm 'commit'
    say timing()
    call sqlDisconnect
    return
endProcedure tstSqlTriggerTiming

tstSql: procedure expose m.
    cx = 2
    call sqlConnect
    call jIni
/*
$=/tstSql/
    ### start tst tstSql ##############################################
    *** err: SQLCODE = -204: A540769.SYSDUMMY IS AN UNDEFINED NAME
    .    e 1: sql = select * from sysdummy
    .    e 2: stmt = prepare s7 from :src
    fetchA 1 ab= m.abcdef.123.AB abc ef= efg
    fetchA 0 ab= m.abcdef.123.AB abc ef= efg
    sqlVars :M.STST.A :M.STST.A.sqlInd, :M.STST.B :M.STST.B.sqlInd, :M.+
    STST.C :M.STST.C.sqlInd
    1 all from dummy1
    a=a b=2 c=---
    fetchBT 1 SYSTABLES
    fetchBT 0 SYSTABLES
    fetchBI 1 SYSINDEXES
    fetchBI 0 SYSINDEXES
    opAllCl 3
    fetchC 1 SYSTABLES
    fetchC 2 SYSTABLESPACE
    fetchC 3 SYSTABLESPACESTATS
    sql2St 3
    fetchD 1 SYSIBM.SYSTABLES
    fetchD 2 SYSIBM.SYSTABLESPACE
    fetchD 3 SYSIBM.SYSTABLESPACESTATS
$/tstSql/ */
    call tst t, "tstSql"
    src = 'select * from sysdummy'
    call sqlExec 'prepare s7 from :src'
    call sqlPrepare cx, "select 'abc' , 'efg'",
                            'from sysibm.sysDummy1'
    call sqlExec 'declare c'cx 'cursor for s'cx
    call sqlOpen cx
    a = 'abcdef'
    b = 123
    do i=1 to 2
        call out 'fetchA' sqlFetchInto(cx, ':m.a.b.ab, :m.a.b.ef') ,
            'ab= m.'a'.' || b'.'ab m.a.b.ab 'ef=' m.a.b.ef
        end
    call sqlClose cx
    drop stst a b c m.stst.a m.stst.b m.stst.c
    sv = sqlVars('M.STST',  A B C , 1)
    call out 'sqlVars' sv
    call out sql2St(,
             "select 'a' a, 2 b, case when 1=0 then 1 else null end c",
                 "from sysibm.sysDummy1",
           , stst) 'all from dummy1'
    call out 'a='m.stst.1.a 'b='m.stst.1.b 'c='m.stst.1.c
    call sqlPreDeclare cx, "select name" ,
                            "from sysibm.sysTables" ,
                            "where creator = 'SYSIBM' and name = ?"
    call sqlOpen cx, 'SYSTABLES'
    call out 'fetchBT' sqlFetchInto(cx, ':NM') nm
    call out 'fetchBT' sqlFetchInto(cx, ':NM') nm
    call sqlClose cx
    call sqlOpen cx, 'SYSINDEXES'
    a = 'a b c'
    b = 1234565687687234
    call out 'fetchBI' sqlFetchInto(cx, ':NM') nm
    call out 'fetchBI' sqlFetchInto(cx, ':NM') nm
    call sqlClose cx
    src = 'select name' ,
              "from sysibm.sysTables" ,
              "where creator = 'SYSIBM' and name like 'SYSTABLES%'",
              "fetch first 3 rows only"
     call sqlPreDeclare cx, src
     st = 'wie geht'' s'
     call out 'opAllCl' sqlOpAllCl(cx, st, ':M.ST.SX.NAME')
     do x=1 to m.st.0
         call out 'fetchC' x m.st.x.name
         end
     st = 'auch noch'
     src = "select strip(creator) || '.' || strip(name) name" ,
               substr(src,12)
     call out 'sql2St' sql2St(src, st)
     do x=1 to m.st.0
         call out 'fetchD' x m.st.x.name
         end
    call tstEnd t
    return
endProcedure tstSql

tstSqlCSV: procedure expose m.
/*
$=/tstSqlCSV/
    ### start tst tstSqlCSV ###########################################
    NAME,CREATOR,MITCOM,MITQUO,MITNU,COL6
    SYSTABLES,SYSIBM  ,"a,b","a""b",1,8
    SYSTABLESPACE,SYSIBM  ,"a,b","a""b",---,8
    SYSTABLESPACESTATS,SYSIBM,"a,b","a""b",---,6
$/tstSqlCSV/ */
    call csvIni
    call sqlConnect
    call tst t, "tstSqlCSV"
    r = csvWrt(sqlRdr("select name, creator, 'a,b' mitCom",
         ", 'a""b' mitQuo" ,
         ", case when name='SYSTABLES' then 1 else null end mitNu" ,
         ",length(creator)" ,
              "from sysibm.sysTables" ,
              "where creator = 'SYSIBM' and name like 'SYSTABLES%'",
              "fetch first 3 rows only"))
    call pipeWriteAll r
/*  do rx=1 while jRead(r, vv)
        call out rx'<'m.vv'>'
        end
    call jClose r
*/  call tstEnd t
    return
endProcedure tstSqlCsv

ddlCheckExt: procedure expose m.
parse dbSys cr '.' view sels
    call sqlConnect dbSys
    do sx=1 to words(sels)
        parse value word(sels,sx) ty ':' qu '.' nm '?' gp
        if verify(qu, '_%', 'm') > 0 then
            quPr = 'like' quote(qu, "'")
        else
            quPr = '=' quote(qu, "'")
        end
    call sqlDisconnect
    return
endProcedure ddlCheckExt

tstSqlB: procedure expose m.
/*
$=/tstSqlB/
    ### start tst tstSqlB #############################################
    #jIn 1# select strip(name) "tb", strip(creator) cr
    #jIn 2# , case when name = 'SYSTABLES' then 1 else null end
    #jIn 3# from sysibm.sysTables
    #jIn 4# where creator = 'SYSIBM' and name like 'SYSTABLES%'
    #jIn 5# .
    #jIn 6# order by name
    #jIn 7# fetch first 3 rows only
    #jIn eof 8#
    dest1.fet: SYSTABLES SYSIBM 1
    dest2.fet: SYSTABLESPACE SYSIBM ---
    dest3.fet: SYSTABLESPACESTATS SYSIBM ---
$/tstSqlB/ */
    call tst t, "tstSqlB"
    cx = 9
    call sqlConnect
    call jIni
    call mAdd mCut(t'.IN', 0),
      , 'select strip(name) "tb", strip(creator) cr' ,
      ,     ", case when name = 'SYSTABLES' then 1 else null end" ,
      ,   "from sysibm.sysTables" ,
      ,   "where creator = 'SYSIBM' and name like 'SYSTABLES%'", ,
      ,   "order by name",
      ,   "fetch first 3 rows only"
     call sqlPreOpen cx
     do qx=1 while sqlFetch(cx, 'dest'qx'.fet')
         dst = 'dest'qx'.fet'
         call out dst':' m.dst.tb m.dst.cr m.dst.col3
         drop m.dst.tb m.dst.cr m.dst.col3
         end
     call tstEnd t
     return
endProcedure tstSqlB

tstSqlO: procedure expose m.
/*
$=/tstSqlO/
    ### start tst tstSqlO #############################################
    *** err: SQLCODE = -204: A540769.SYSDUMMY IS AN UNDEFINED NAME
    .    e 1: sql = select * from sysdummy
    .    e 2: stmt = prepare s7 from :src
    REQD=Y col=123 case=--- .sqlInd:-1 col5=anonym geburri=1956-04-01+
    -06.00.00.000000
    tstR: @tstWriteoV2 isA :SQL???class
    tstR:  .COL1 = erstens
    tstR:  .COL2 = zweitens
    tstR: @tstWriteoV3 isA :TstSqlO
    tstR:  .FEINS = erstens
    tstR:  .FZWEI = zweitens
$/tstSqlO/
*/
    call sqlConnect
    call sqlStmt 'set current schema = A540769';
    call tst t, "tstSqlO"
    src = 'select * from sysdummy'
    call sqlExec 'prepare s7 from :src'
    r = sqlRdr( ,
          "select d.*, 123, timestamp('01.04.1956','06:00:00')" ,
                             '"geburri walter",',
                    'case when 1=0 then 1 else null end caseNull,',
                    "'anonym'" ,
               'from sysibm.sysdummy1 d')
    call jOpen r, '<'
    do while assNN('o', jReadO(r))

        call out 'REQD='m.o.IBMREQD 'col='m.o.col2,
                  'case='m.o.CASENULL '.sqlInd:'m.o.caseNull.sqlInd,
                  'col5='m.o.col5,
                  'geburri='m.o.GEBURRI
        end
    call jClose r
    call classNew 'n? TstSqlO u f FEINS v, f FZWEI v'
    sq2 = "select 'erstens', 'zweitens' from sysibm.sysDummy1"
    call pipe '+N'
    call sqlSel sq2
    call pipe 'P|'
    o1 = inO()
    cn = className(objClass(o1))
    if abbrev(cn, 'SQL') then
        call mAdd t.trans, cn 'SQL???class'
    call outO o1
    call pipeWriteNow
    call pipe '-'
    call sqlSel sq2, 'TstSqlO'
    call tstEnd t
    return
endProcedure tstSqlO

tstSqlFTab: procedure expose m.
/*
$=/tstSqlFTab/
    ### start tst tstSqlFTab ##########################################
    UPDATESTATSTIME----------------NACTIVE------NPAGES-XTENTS-LOADRLAST+
    TIME--------------REORGLASTTIME--------------EORGINSERTS-EORGDELETE+
    S-EORGUPDATES-GUNCLUSTINS-RGDISORGLOB-GMASSDELETE-GNEARINDREF-RGFAR+
    INDREF-STATSLASTTIME--------------TATSINSERTS-TATSDELETES-TATSUPDAT+
    ES-SMASSDELETE-COPYLASTTIME---------------PDATEDPAGES-COPYCHANGES-C+
    OPYUP-COPYUPDATETIME-------------I---DBID---PSID-TITION-STANCE-SPAC+
    E---TOTALRO-DATASIZ-UNCOMPR-DBNAME-------NAME---------REORGCL-REORG+
    SC-REORGHA-HASHLASTUS-DRI-L-STATS01----
    --- modified
    allg vorher                     others vorher
    db-------ts---------part---inst-UPDATESTATSTIME----------------NACT+
    IVE------NPAGES-XTENTS-LOADRLASTTIME--------------REORGLASTTIME----+
     ----------EORGINSERTS-EORGDELETES-EORGUPDATES-GUNCLUSTINS-RGDISORG+
    LOB-GMASSDELETE-GNEARINDREF-RGFARINDREF-STATSLASTTIME--------------+
    TATSINSERTS-TATSDELETES-TATSUPDATES-SMASSDELETE-COPYLASTTIME-------+
     --------PDATEDPAGES-COPYCHANGES-COPYUP-COPYUPDATETIME-------------+
    I---DBID---PSID-SPACE---TOTALRO-DATASIZ-UNCOMPR-REORGCL-REORGSC-REO+
    RGHA-HASHLASTUS-DRI-L-STATS01----
    db-------ts---------part---inst-UPDATESTATSTIME----------------NACT+
    IVE------NPAGES-XTENTS-LOADRLASTTIME--------------REORGLASTTIME----+
     ----------EORGINSERTS-EORGDELETES-EORGUPDATES-GUNCLUSTINS-RGDISORG+
    LOB-GMASSDELETE-GNEARINDREF-RGFARINDREF-STATSLASTTIME--------------+
    TATSINSERTS-TATSDELETES-TATSUPDATES-SMASSDELETE-COPYLASTTIME-------+
     --------PDATEDPAGES-COPYCHANGES-COPYUP-COPYUPDATETIME-------------+
    I---DBID---PSID-SPACE---TOTALRO-DATASIZ-UNCOMPR-REORGCL-REORGSC-REO+
    RGHA-HASHLASTUS-DRI-L-STATS01----
    allg nachher                    others nachher
    DBNAME                   INSTANCE                                  +
    .    NPAGES                                        REORGLASTTIME   +
    .                                   REORGUPDATES                   +
    .     REORGMASSDELETE                     STATSLASTTIME            +
    .                          STATSUPDATES                            +
    .           COPYUPDATEDPAGES               COPYUPDATETIME          +
    .            PSID                   DATASIZE                REORGSC+
    ANACCESS            DRIVETYPE
    .         NAME                   UPDATESTATSTIME                   +
    .                 EXTENTS                                          +
    .            REORGINSERTS                        REORGUNCLUSTINS   +
    .                  REORGNEARINDREF                                 +
    .   STATSINSERTS                        STATSMASSDELETE            +
    .                        COPYCHANGES                               +
    .    IBMREQD         SPACE                   UNCOMPRESSEDDATASIZE  +
    .  REORGHASHACCESS        LPFACILITY
    .                  PARTITION                                NACTIVE+
    .                        LOADRLASTTIME                             +
    .                        REORGDELETES                        REORGD+
    ISORGLOB                      REORGFARINDREF                       +
    .              STATSDELETES                        COPYLASTTIME    +
    .                                   COPYUPDATELRSN                 +
    .     DBID                  TOTALROWS               REORGCLUSTERSEN+
    S        HASHLASTUSED     STATS01
$/tstSqlFTab/
*/
    call tst t, 'tstSqlFTab'
    call sqlConnect
    call sqlPreOpen 17, 'select * from sysibm.sysTablespaceStats' ,
                "where dbName = 'xxxDB06' and name = 'SYSTSTAB'"
    call sqlFTabReset abc, 17, 1,     ,  12
    call sqlFTabDef      abc, 492, '%7e'
    call sqlFTabOthers abc
    call sqlfTab abc
    call sqlClose 17
    call out '--- modified'
    call sqlopen  17
    call sqlFTabReset abc, 17, 2 1, 1 3 'c', 12
    call sqlFTabDef      abc, 492, '%7e'
    call sqlFTabAdd      abc, DBNAME, '%-8C', 'db', 'allg vorher'  ,
                                                  , 'allg nachher'
    call sqlFTabAdd      abc, NAME  , '%-8C', 'ts'
    call sqlFTabAdd      abc, PARTITION , , 'part'
    call sqlFTabAdd      abc, INSTANCE  , , 'inst'
    call fTabAddTit      abc, 2,                    'others vorher'
    call fTabAddTit      abc, 3,                    'others nachher'
    call sqlFTabOthers abc
    call sqlFTab abc
    call sqlClose 17
    call tstEnd t
    return
endProcedure tstSqlFTab

tstSqlC: procedure expose m.
/*
$=/tstSqlCRx/
    ### start tst tstSqlCRx ###########################################
    *** err: SQLCODE = -104: ILLEGAL SYMBOL "?". SOME SYMBOLS THAT MIGH+
    T
    .    e 1:     BE LEGAL ARE: . <IDENTIFIER> JOIN INNER LEFT RIGHT FU+
    LL CROSS ,
    .    e 2:     HAVING GROUP
    .    e 3: src select * from sysibm?sysDummy1
    .    e 4:   >    >>>pos 21 of 30>>>
    .    e 5: sql = select * from sysibm?sysDummy1
    .    e 6: stmt = prepare s9 into :M.SQL.9.D from :src
    .    e 7: with into :M.SQL.9.D = M.SQL.9.D
    *** err: SQLCODE = -204: NONONO.SYSDUMMY1 IS AN UNDEFINED NAME
    .    e 1: sql = select * from nonono.sysDummy1
    .    e 2: stmt = prepare s9 into :M.SQL.9.D from :src
    .    e 3: with into :M.SQL.9.D = M.SQL.9.D
    sys  ==> server CHSKA000DBAF    .
    fetched a1=abc, i2=12, c3=---
    .  I1 C2  .
    .   1 eins
    2222 zwei
$/tstSqlCRx/
$=/tstSqlCCsm/
    ### start tst tstSqlCCsm ##########################################
    *** err: SQLCODE = -104: ILLEGAL SYMBOL "?". SOME SYMBOLS THAT MIGH+
    T
    .    e 1:     BE LEGAL ARE: . <IDENTIFIER> JOIN INNER LEFT RIGHT FU+
    LL CROSS ,
    .    e 2:     HAVING GROUP
    .    e 3: src select * from sysibm?sysDummy1
    .    e 4:   >    >>>pos 21 of 30>>>
    .    e 5: sql = select * from sysibm?sysDummy1
    .    e 6: subsys = DD0G, host = RZ8, interfaceType Csm
    *** err: SQLCODE = -204: NONONO.SYSDUMMY1 IS AN UNDEFINED NAME
    .    e 1: sql = select * from nonono.sysDummy1
    .    e 2: subsys = DD0G, host = RZ8, interfaceType Csm
    sys rz8/DD0G ==> server CHROI000DD0G    .
    fetched a1=abc, i2=12, c3=---
    .  I1 C2  .
    .   1 eins
    2222 zwei
$/tstSqlCCsm/ */
    sqlBuf = jBuf("select 1 i1, 'eins' c2 from sysibm.sysDummy1",
      , "union all select 2222 i1, 'zwei' c2 from sysibm.sysDummy1")
    do tx=1 to 2
        if tx = 1 then do
            call tst t, "tstSqlCRx"
            sys = ''
            call sqlConnect
            end
        else do
            call tst t, "tstSqlCCsm"
            sys =  'rz8/DD0G'
            end
        call sqlConnect sys
        cx = 9
        call sqlQuery cx, 'select * from sysibm?sysDummy1'
        call sqlQuery cx, 'select * from nonono.sysDummy1'
        call sqlQuery cx, "select 'abc' a1, 12 i2, current server srv",
                     ", case when 1=0 then 1 else null end c3",
                 "from sysibm.sysDummy1"
        do while sqlFetch(cx, dst)
            call out 'sys' sys '==> server' m.dst.srv
            call out 'fetched a1='m.dst.a1', i2='m.dst.i2', c3='m.dst.c3
            end
        call fmtFTab , sqlRdr(sqlBuf)
        call sqlDisconnect
        call tstEnd t
        end
    return
endProcedure tstSqlC

tstSqlQ: procedure expose m.
/*
$=/tstSqlQ/
    ### start tst tstSqlQ #############################################
    insert updC 1
    insert select updC 2
    dest4.fet: 1 eins 2012-04-01-06.07.08.000000 1 updC 0
    dest5.fet: 2 zwei 2012-02-29-15.44.33.220000 --- updC 0
    dest6.fet: 11 zehn+eins 2012-04-11-06.07.08.000000 1 updC 0
    dest7.fet: 12 zehn+zwei 2012-03-10-15.44.33.220000 --- updC 0
    SQLCODE = 000,  SUCCESSFUL EXECUTION
    warnings  4=W no where
    sql = select * from final table (update session.dgtt  set c2 = 'u' +
    || c2)
    stmt = prepare s9 into :M.SQL.9.D from :src
    with into :M.SQL.9.D = M.SQL.9.D
    dest9.fet: 1 ueins 2012-04-01-06.07.08.000000 updC 4
    dest10.fet: 2 uzwei 2012-02-29-15.44.33.220000 updC 4
    dest11.fet: 11 uzehn+eins 2012-04-11-06.07.08.000000 updC 4
    dest12.fet: 12 uzehn+zwei 2012-03-10-15.44.33.220000 updC 4
$/tstSqlQ/ */
    call tst t, "tstSqlQ"
    cx = 9
    qx = 3
    call sqlConnect
    call sqlUpdate,"declare global temporary table session.dgtt",
                           "(i1 int, c2 varchar(20), t3 timestamp)"
    call sqlUpdate,"insert into session.dgtt" ,
                    "values(1, 'eins', '2012-04-01 06.07.08')"
    call sqlUpdate,"insert into session.dgtt" ,
                    "values(2, 'zwei', '2012-02-29 15:44:33.22')"
    call out 'insert updC' m.sql..updateCount
    call sqlUpdate,"insert into session.dgtt" ,
                      "select i1+10, 'zehn+'||strip(c2), t3+10 days",
                           "from session.dgtt"
    call out 'insert select updC' m.sql..updateCount
    call sqlQuery cx, 'select d.*' ,
               ', case when mod(i1,2) = 1 then 1 else null end grad' ,
               'from session.dgtt d'
    do qx=qx+1 while sqlFetch(cx, 'dest'qx'.fet')
        dst = 'dest'qx'.fet'
        call out dst':' m.dst.i1 m.dst.c2 m.dst.t3 m.dst.grad ,
           'updC' m.sql.cx.updateCount
        drop m.dst.i1 m.dst.c2 m.dst.t3 m.dst.grad
        end
    call sqlClose cx
    call sqlQuery cx, "select * from final table (update session.dgtt",
                   " set c2 = 'u' || c2)"
    do qx=qx+1 while sqlFetch(cx, 'dest'qx'.fet')
        dst = 'dest'qx'.fet'
        call out dst':' m.dst.i1 m.dst.c2 m.dst.t3 ,
           'updC' m.sql.cx.updateCount
        drop m.dst.i1 m.dst.c2 m.dst.t3 m.dst.grad
        end
    call sqlClose cx
    call tstEnd t
    return
endProcedure tstSqlQ

tstSqlUpdComLoop: procedure expose m.
/*
$=/tstSqlUpdComLoop/
    ### start tst tstSqlUpdComLoop ####################################
    sqlCode 0: declare global temporary table session.dgtt (i1 int) on +
    commit ....
    sqlCode 0, 123 rows inserted: insert into session.dgtt select row_n+
    umber()....
    CNT
    123
    1 rows fetched: select count(*) cnt from session.dgtt
    123 rows deleted, 10 commits: delete from session.dgtt d where i1 i+
    n (sele....
    T
    0
    1 rows fetched: select count(*) cnt from session.dgtt
$/tstSqlUpdComLoop/ */
    call tst t, "tstSqlUpdComLoop"
    call sqlConnect
    call out sqlStmt("declare global temporary table session.dgtt",
                           "(i1 int) on commit preserve rows")
    call out sqlStmt("insert into session.dgtt",
       "select row_number() over() from sysibm.sysTables",
           "fetch first 123 rows only")
    call out sqlStmt("select count(*) cnt from session.dgtt")
    call out sqlUpdComLoop("delete from session.dgtt d where i1 in",
       "(select i1 from session.dgtt fetch first 13 rows only)")
    call out sqlStmt("select count(*) cnt from session.dgtt")
    call tstEnd t
    return
endProcedure tstSqlUpdComLoop

tstSqlO1: procedure expose m.
/*
$=/tstSqlO1/
    ### start tst tstSqlO1 ############################################
    tstR: @tstWriteoV2 isA :<tstSqlO1Type>
    tstR:  .CR = SYSIBM
    tstR:  .TB = SYSTABLEPART
    tstR: @tstWriteoV3 isA :<tstSqlO1Type>
    tstR:  .CR = SYSIBM
    tstR:  .TB = SYSTABLEPART_HIST
    tstR: @tstWriteoV4 isA :<tstSqlO1Type>
    tstR:  .CR = SYSIBM
    tstR:  .TB = SYSTABLES
    tstR: @tstWriteoV5 isA :<tstSqlO1Type>
    tstR:  .CR = SYSIBM
    tstR:  .TB = SYSTABLESPACE
    --- writeAll
    tstR: @tstWriteoV6 isA :<tstSqlO1Type>
    tstR:  .CR = SYSIBM
    tstR:  .TB = SYSTABLEPART
    tstR: @tstWriteoV7 isA :<tstSqlO1Type>
    tstR:  .CR = SYSIBM
    tstR:  .TB = SYSTABLEPART_HIST
    tstR: @tstWriteoV8 isA :<tstSqlO1Type>
    tstR:  .CR = SYSIBM
    tstR:  .TB = SYSTABLES
    tstR: @tstWriteoV9 isA :<tstSqlO1Type>
    tstR:  .CR = SYSIBM
    tstR:  .TB = SYSTABLESPACE
$/tstSqlO1/
*/
    call sqlConnect
    call tst t, "tstSqlO1"
    sq = sqlRdr("select strip(creator) cr, strip(name) tb",
                     "from sysibm.sysTables",
                     "where creator='SYSIBM' and name like 'SYSTABL%'",
                     "order by 2 fetch first 4 rows only")
    call jOpen sq, m.j.cRead
    do while assNN('ABC', jReadO(sq))
        if m.sq.rowCount = 1 then do
            cx = m.sq.cursor
            call mAdd t.trans, className(m.sql.cx.type) '<tstSqlO1Type>'
            end
        call outO abc
        end
    call jClose sq
    call out '--- writeAll'
    call pipeWriteAll sq
    call tstEnd t
    return 0
endProcedure tstSqlO1

tstSqlO2: procedure expose m.
/*
$=/tstSqlO2/
    ### start tst tstSqlO2 ############################################
    CR     TB                RR
    SYSIBM SYSTABLEPART       1
    SYSIBM SYSTABLEPART_HIST  4
    SYSIBM SYSTABLES          9
    SYSIBM SYSTABLESPACE     16
$/tstSqlO2/
*/
    call sqlConnect
    call tst t, "tstSqlO2"
    call pipe '+N'
    call out    "select strip(creator) cr, strip(name) tb,"
    call out         "(row_number()over())*(row_number()over()) rr"
    call out         "from sysibm.sysTables"
    call out         "where creator='SYSIBM' and name like 'SYSTABL%'"
    call out         "order by 2 fetch first 4 rows only"
    call pipe 'N|'
    call sqlSel
    call pipe 'P|'
    call fmtFTab abc
    call pipe '-'
    call tstEnd t
    return 0
endProcedure tstSqlO2
tstSqlS1: procedure expose m.
/*
$=/tstSqlS1/
    ### start tst tstSqlS1 ############################################
    select c, a from sysibm.sysDummy1
    tstR: @tstWriteoV2 isA :<cla sql c a>
    tstR:  .C = 1
    tstR:  .A = a
    select ... where 1=0
    tstR: @ obj null
$/tstSqlS1/
*/
    call sqlOIni
    call tst t, "tstSqlS1"
    call sqlConnect dbaf
    s1 = fileSingle( ,
        sqlRdr("select count(*) c, 'a' a from sysibm.sysdummy1"))
    call mAdd t.trans, className(objClass(s1)) '<cla sql c a>'
    call out 'select c, a from sysibm.sysDummy1'
    call tstWriteO t, s1
    call out 'select ... where 1=0'
    call tstWriteO t, fileSingle( ,
        sqlRdr("select*from sysibm.sysdummy1 where 1=0"), '')
    call tstEnd t
    return
endProcedure tstSqlS1
tstSqlStmt: procedure expose m.
/*
$=/tstSqlStmt/
    ### start tst tstSqlStmt ##########################################
    *** err: SQLCODE = -713: THE REPLACEMENT VALUE FOR CURRENT SCHEMA I+
    S
    .    e 1:     INVALID
    .    e 2: sql = set current schema = 'sysibm'
    .    e 3: stmt = execute immediate :ggSrc
    sqlCode -713: set current schema = 'sysibm'
    sqlCode 0: set current schema =  sysibm
    tstR: @tstWriteoV2 isA :<sql?sc>
    tstR:  .C = SYSIBM
    1 rows fetched: select current schema c  from sysDummy1
    tstR: @tstWriteoV3 isA :<sql?sc>
    tstR:  .C = SYSIBM
    1 rows fetched: (select current schema c from sysDummy1)
$/tstSqlStmt/ */
    call sqlConnect
    call tst t, "tstSqlStmt"
    cn = className(classNew('n* SQL u f C v'))
    call mAdd t.trans, cn '<sql?sc>'
    call tstOut t, sqlStmt("set current schema = 'sysibm'")
    call tstOut t, sqlStmt("  set current schema =  sysibm ")
    call tstOut t, sqlStmt("   select current schema c  from sysDummy1",
                           , ,'o')
    call tstOut t, sqlStmt("  (select current schema c from sysDummy1)",
                           , ,'o')
    call tstEnd t
    return
endProcedure tstSqlStmt
tstSqlStmts: procedure expose m.
/*
$=/tstSqlStmts/
   ### start tst tstSqlStmts #########################################
   *** err: SQLCODE = -104: ILLEGAL SYMBOL "BLABLA". SOME SYMBOLS THAT
   .    e 1:     MIGHT BE LEGAL ARE: <ERR_STMT> <WNG_STMT> GET SQL SAV+
   EPOINT HOLD
   .    e 2:     FREE ASSOCIATE
   .    e 3: src blabla
   .    e 4:   > <<<pos 1 of 6<<<
   .    e 5: sql = blabla
   sqlCode -104: blabla
   sqlCode 0: set current schema=  sysIbm
   C
   1
   1 rows fetched: select count(*) "c" from sysDummy1  with    ur
   C
   1
   1 rows fetched: select count(*) "c" from sysDummy1  with    ur
   #jIn 1# set current -- sdf
   #jIn 2# schema = s100447;
   sqlCode 0: set current  schema = s100447
   #jIn eof 3#
$/tstSqlStmts/ */
    call sqlConnect
    call scanReadIni
    call scanWinIni
    call tst t, "tstSqlStmts"
    call sqlStmts "blabla ;;set current schema=  sysIbm "
    b = jBuf('select count(*) "c" from sysDummy1 --com' ,
             ,'with  /* comm */ ur;')
    call sqlStmts b
    call sqlStmts b, , '-sql72'
    call mAdd mCut(t'.IN', 0), 'set current -- sdf', 'schema = s100447;'
    call sqlStmts
    call tstEnd t
    return
endProcedure tstSqlStmts
/* copx tstSql end  ***************************************************/
/* copx tstComp begin **************************************************
    test the wsh compiler
***********************************************************************/
tstComp: procedure expose m.
    call compIni
    call tstCompDataConst
    call tstCompDataVars
    call tstCompShell
    call tstCompPrimary
    call tstCompExpr
    call tstCompFile
    call tstCompStmt
    call tstCompStmtA
    call tstCompDir
    call tstCompObj
    call tstCompORun
    call tstCompDataIO
    call tstCompPipe
    call tstCompRedir
    call tstCompComp
    call tstCompSyntax
    call tstCompSql
    call tstTotal
    return
endProcedure tstComp

tstComp1: procedure expose m.
parse arg ty nm cnt
    c1 = 0
    if cnt = 0 |cnt = '+' then do
        c1 = cnt
        cnt = ''
        end
    call jIni
    src = jBuf()
    call jOpen src, m.j.cWri
    do sx=2 to arg()
        call jWrite src, arg(sx)
        end
    call tstComp2 nm, ty, jClose(src), , c1, cnt
    return
endProcedure tstComp1

tstComp2: procedure expose m.
parse arg nm, spec, src, compSt
    call compIni
    call tst t, nm, compSt
    if src == '' then do
        src = jBuf()
        call tst4dp src'.BUF', mapInline(nm'Src')
        end
    m.t.moreOutOk = abbrev(strip(arg(5)), '+')
    cmp = comp(src)
    call out 'compile' spec',' (m.src.buf.0) 'lines:' m.src.buf.1
    r = compile(cmp, spec)
    noSyn = m.t.errHand = 0
    coErr = m.t.err
    say if( noSyn, "compiled", "*** syntaxed") r ":" objMet(r, 'oRun')
    cnt = 0
    do ax = 5 to max(arg(), 5) while m.t.err = coErr & noSyn
        a1 = strip(arg(ax))
        if a1 == '' & arg() >= 5 then
            iterate
        if abbrev(a1, '+') then do
            m.t.moreOutOk = 1
            a1 = strip(substr(a1, 2))
            end
        if datatype(a1, 'n') then
            cnt = a1
        else if a1 \== '' then
            call err 'tstComp2 bad arg('ax')' arg(ax)
        if cnt = 0 then do
            call mCut 'T.IN', 0
            call out "run without input"
            end
        else  do
            call mAdd mCut('T.IN', 0),
                ,"eins zwei drei", "zehn elf zwoelf?",
                , "zwanzig 21 22 23 24 ... 29|"
            do lx=4 to cnt
                call mAdd 'T.IN', left(lx "line" lx, lx+9, '-')';'
                end
            call out "run with" cnt "inputs"
            end
        m.t.inIx = 0
        call oRun r
        end
    call tstEnd t
    return
endProcedure tstComp2

tstCompDataConst: procedure expose m.
/*
$=/tstCompDataConst/
    ### start tst tstCompDataConst ####################################
    compile =, 8 lines:       Lline one, $** asdf
    run without input
    .      Lline one, .
    line two..
    line threecontinued on 4
    line five  fortsetzung
    line six   fortsetzung
$/tstCompDataConst/ */
    call tstComp1 '= tstCompDataConst',
        , '      Lline one, $** asdf',
        , 'line two.',
        , 'line three$*+ bla bla' ,
        , 'continued on 4',
        , 'line five $*( und so',
        , 'weiter $abc $? $''$*)'' $"$*)" und weiter $*) fortsetzung',
        , 'line six  $*( und $*( $** $*( so',
        , 'weiter $abc $? $*)'' $"$*)" und weiter $*) fortsetzung'

/*
$=/tstCompDataConstBefAftComm1/
    ### start tst tstCompDataConstBefAftComm1 #########################
    compile =, 3 lines:     $*(anfangs com.$*)       $*(plus$*) $** x
    run without input
    the only line;
$/tstCompDataConstBefAftComm1/ */
    call tstComp1 '= tstCompDataConstBefAftComm1',
        , '    $*(anfangs com.$*)       $*(plus$*) $** x',
        , 'the only line;',
        , '      $*(end kommentar$*)              '

/*
$=/tstCompDataConstBefAftComm2/
    ### start tst tstCompDataConstBefAftComm2 #########################
    compile =, 11 lines:     $*(anfangs com.$*)       $*(plus$*) $*+ x
    run without input
    the first non empty line;
    .      .
    befor an empty line with comments;
$/tstCompDataConstBefAftComm2/ */

    call tstComp1 '= tstCompDataConstBefAftComm2',
        , '    $*(anfangs com.$*)       $*(plus$*) $*+ x',
        , '    $*(forts Zeile com.$*)       $*(plus$*) $** x',
        , ' $*(comment 2. Zeile$*) $*(plus$*) $*+ x',
        , ' $*(forts Zeile com.$*) $*(plus$*) $** x',
        , 'the first non empty line;',
        , '      ',
        , 'befor an empty line with comments;',
        , ' $*(comment 4. Zeile$*) $*(plus$*) $*+ x',
        , ' $*(forts 4.Zeile com.$*) $*(plus$*) $** x',
        , '      $*(end kommentar$*)              $*+',
        , ' $*(forts end com.$*) $*(plus$*) $** x'
     return
endProcedure tstCompDataComm

tstCompDataVars: procedure expose m.
/*
$=/tstCompDataVars/
    ### start tst tstCompDataVars #####################################
    compile =, 5 lines:       Lline one, $** asdf
    run without input
    .      Lline one, .
    lline zwei output
    lline 3 .
    variable v1 = valueV1 ${v1}= valueV1; .
    .      $-.{""$v1} = valueV1; .
$/tstCompDataVars/ */
    call tstComp1 '= tstCompDataVars',
        , '      Lline one, $** asdf',
        , '   $$ lline zwei output',
        , 'lline 3 $=v1= valueV1 ' ,
        , 'variable v1 = $v1 $"${v1}=" ${  v1  }; ',
        , '      $"$-.{""""$v1} =" $-.{""$v1}; '
    return
endProcedure tstCompDataVars

tstCompShell: procedure expose m.
/*
$=/tstCompShell/
    ### start tst tstCompShell ########################################
    compile @, 12 lines:   $$  Lline one, $** asdf
    run without input
    Lline one,
    lline zwei output
    v1 = valueV1 ${v1}= valueV1|
    REXX OUT L5 CONTINUED L6 CONTINUED L7
    L8 ONE
    L9 TWO
    valueV1
    valueV1 valueV2
    out  valueV1 valueV2
    SCHLUSS
$/tstCompShell/ */
    call tstComp1 '@ tstCompShell',
        , '  $$  Lline one, $** asdf',
        , '   $$ lline zwei output',
        , '        $=v1= valueV1 ' ,
        , '$$       v1 = $v1 $"${v1}=" ${  v1  }| ' ,
        , 'call out rexx out l5, ' ,
        , '     continued l6 , ' ,
        , '     continued l7   ' ,
        , 'call out l8 one    ' ,
        , 'call out l9 two$=v2=valueV2  ',
        , '$$- $v1  $$- $v1 $v2   ',
        , 'call out   "out "     $v1 $v2   ',
        , '$$-   schluss    '
/*
$=/tstCompShell2/
    ### start tst tstCompShell2 #######################################
    compile @, 13 lines: $@do j=0 to 1 $@¢ $$ do j=$j
    run without input
    do j=0
    after if 0 $@¢ $!
    after if 0 $=@¢ $!
    do j=1
    if 1 then $@¢ a
    a2
    if 1 then $@=¢ b
    b2
    after if 1 $@¢ $!
    after if 1 $=@¢ $!
    end
$/tstCompShell2/ */
    call tstComp1 '@ tstCompShell2',
        , '$@do j=0 to 1 $@¢ $$ do j=$j' ,
        ,     'if $j then $@¢ ',
        ,          '$$ if $j then $"$@¢" a $$a2' ,
        ,          '$!',
        ,     'if $j then $@=¢ ',
        ,          '$$ if $j then $"$@=¢" b $$b2' ,
        ,          '$!',
        ,     'if $j then $@¢ $!' ,
        ,     '$$ after if $j $"$@¢ $!"' ,
        ,     'if $j then $@=¢ $!' ,
        ,     '$$ after if $j $"$=@¢ $!"' ,
        ,     '$!',
        , '$$ end'
    return
endProcedure tstCompShell

tstCompPrimary: procedure expose m.
    call compIni
/*
$=/tstCompPrimary/
    ### start tst tstCompPrimary ######################################
    compile =, 16 lines: Strings $"$""$""""$""" $'$''$''''$'''
    run without input
    Strings $"$""$" $'$''$'
    rexx $-{ 3 * 5 } = 15
    rexx $-¢ 5 * 7 $! = 35
    rexx $-// 7 * 11 $// = 77
    rexx $-/abcEf/ 11 * 13 $/abcEf/ = 143
    data  line three line four  bis hier
    shell line five line six bis hier
    var get   v1 value Eins, v1 value Eins .
    var isDef v1 1, v2 0 .
    #jIn eof 1#
    var read  >1 0 rr undefined
    #jIn eof 2#
    var read  >2 0 rr undefined
    no call abc$-{4*5} $-{efg$-{6*7} abc20 EFG42
    brackets $-{$-{1+9}*$-¢7+3$!*$-/b/5+5$/b/} 1000
    run with 3 inputs
    Strings $"$""$" $'$''$'
    rexx $-{ 3 * 5 } = 15
    rexx $-¢ 5 * 7 $! = 35
    rexx $-// 7 * 11 $// = 77
    rexx $-/abcEf/ 11 * 13 $/abcEf/ = 143
    data  line three line four  bis hier
    shell line five line six bis hier
    var get   v1 value Eins, v1 value Eins .
    var isDef v1 1, v2 0 .
    #jIn 1# eins zwei drei
    var read  >1 1 rr eins zwei drei
    #jIn 2# zehn elf zwoelf?
    var read  >2 1 rr zehn elf zwoelf?
    no call abc$-{4*5} $-{efg$-{6*7} abc20 EFG42
    brackets $-{$-{1+9}*$-¢7+3$!*$-/b/5+5$/b/} 1000
$/tstCompPrimary/ */
    call envRemove 'v2'
    call tstComp1 '= tstCompPrimary 3',
        , 'Strings $"$""$""""$"""' "$'$''$''''$'''",
        , 'rexx $"$-{ 3 * 5 } =" $-{ 3 * 5 }' ,
        , 'rexx $"$-¢ 5 * 7 $! =" $-¢ 5 * 7 $!' ,
        , 'rexx $"$-// 7 * 11 $// =" $-// 7 * 11 $//' ,
        , 'rexx $"$-/abcEf/ 11 * 13 $/abcEf/ ="',
            '$-/abcEf/ 11 * 13 $/abcEf/' ,
        , 'data $-=¢ line three',
        , 'line four $! bis hier'  ,
        , 'shell $-@¢ $$ line five',
        , '$$ line six $! bis hier' ,
        , '$= v1  =   value Eins  $=rr=undefined $= eins = 1 ',
        , 'var get   v1 $v1, v1 ${  v1  } ',
        , 'var isDef v1 ${? v${  eins  }  }, v2 ${?v2 } ',
        , 'var read  >1 ${> rr} rr $rr' ,
        , 'var read  >2 ${> rr} rr $rr',
        , 'no call $"abc$-{4*5} $-{efg$-{6*7}"',
            'abc$-{4*5} $-{efg$-{6*7}}',
        , 'brackets $"$-{$-{1+9}*$-¢7+3$!*$-/b/5+5$/b/}"',
            '$-{$-{1+9}*$-¢7+3$!*$-/b/5+5$/b/}'
    return
endProcedure tstCompPrimary

tstCompExpr: procedure expose m.
    call compIni
/*
$=/tstCompExprStr/
    ### start tst tstCompExprStr ######################################
    compile -, 3 lines: $=vv=vvStr
    run without input
    vv=vvStr
    o2String($.$vv)=vvStr
$/tstCompExprStr/ */
    call tstComp1 '- tstCompExprStr',
        , '$=vv=vvStr' ,
        , '"vv="$vv' ,
        , '$"o2String($.$vv)="o2String($.$vv)'
/*
$=/tstCompExprObj/
    ### start tst tstCompExprObj ######################################
    compile ., 5 lines: $=vv=vvStr
    run without input
    vv=
    vvStr
    s2o($.$vv)=
    vvStr
$/tstCompExprObj/ */
    call tstComp1 '. tstCompExprObj',
        , '$=vv=vvStr' ,
        , '"!vv="', '$vv',
        , '$"s2o($.$vv)="', 's2o($-$vv)'
/*
$=/tstCompExprDat/
    ### start tst tstCompExprDat ######################################
    compile =, 4 lines: $=vv=vvDat
    run without input
    vv=vvDat
    $.$vv= !vvDat
    $.-{"abc"}=!abc
$/tstCompExprDat/ */
    call tstComp1 '= tstCompExprDat',
        , '$=vv=vvDat' ,
        , 'vv=$vv',
        , '$"$.$vv=" $.$vv',
        , '$"$.-{""abc""}="$.-{"abc"}'

/*
$=/tstCompExprRun/
    ### start tst tstCompExprRun ######################################
    compile @, 3 lines: $=vv=vvRun
    run without input
    vv=vvRun
    o2string($.$vv)=vvRun
$/tstCompExprRun/ */
    call tstComp1 '@ tstCompExprRun',
        , '$=vv=vvRun' ,
        , 'call out "vv="$vv',
        , 'call out $"o2string($.$vv)="o2string($.$vv)'
/*
$=/tstCompExprCon/
$/tstCompExprCon/ */
/* wkTst sinnvolle Erweiterung ???
    call tstComp1 '# tstCompExprCon',
        , '$=vv=vvCon' ,
        , 'call out "vv="$vv',
        , 'call out $"o2string($.$vv)="o2string($.$vv)'
*/
    return
endProcedure tstCompExpr

tstCompStmt: procedure expose m.
/*
$=/tstCompStmt1/
    ### start tst tstCompStmt1 ########################################
    compile @, 8 lines: $= v1 = value eins  $= v2  =- 3*5*7 .
    run without input
    data v1 value eins v2 105
    eins
    zwei
    drei
    vier
    fuenf
    elf
    zwoelf  dreiZ
    . vierZ .
    fuenfZ
    lang v1 value eins v2 945
    oRun ouput 1
$/tstCompStmt1/ */
    call pipeIni
    call envPutO 'oRun', oRunner('call out "oRun ouput" (1*1)')
    call envRemove 'v2'
    call tstComp1 '@ tstCompStmt1',
        , '$= v1 = value eins  $= v2  =- 3*5*7 ',
        , '$$ data v1 $v1 v2 ${   v2  }',
        , '$$eins $@¢$$ zwei $$ drei  ',
        , '   $@¢   $! $@{   } $@//   $// $@/q r s /   $/q r s /',
             '       $@/eins/ $@¢ $$vier $! $/eins/ $! $$fuenf',
        , '$$elf $@=¢$@={ zwoelf  dreiZ  }  ',
        , '   $@=¢   $! $@=¢ $@=¢ vierZ $! $! $! $$fuenfZ',
        , '$$- "lang v1" $v1 "v2" ${v2}*9',
        , '$@$oRun""' /* String am schluss -> $$ "" statment||||| */

/*
$=/tstCompStmt2/
    ### start tst tstCompStmt2 ########################################
    compile @, 1 lines: $@for qq $$ loop qq $qq
    run without input
    #jIn eof 1#
    run with 3 inputs
    #jIn 1# eins zwei drei
    loop qq eins zwei drei
    #jIn 2# zehn elf zwoelf?
    loop qq zehn elf zwoelf?
    #jIn 3# zwanzig 21 22 23 24 ... 29|
    loop qq zwanzig 21 22 23 24 ... 29|
    #jIn eof 4#
$/tstCompStmt2/ */
    call tstComp1 '@ tstCompStmt2 3',
        , '$@for qq $$ loop qq $qq'

/*
$=/tstCompStmt3/
    ### start tst tstCompStmt3 ########################################
    compile @, 9 lines: $$ 1 begin run 1
    2 ct zwei
    ct 4 mit assign .
    run without input
    1 begin run 1
    3 run 3 ctV = ct 4 assign ctV|
    run 5 procCall $@$prCa
    out in proc at 8
    run 6 vor call $@prCa()
    out in proc at 8
    9 run end
    run with 3 inputs
    1 begin run 1
    3 run 3 ctV = ct 4 assign ctV|
    run 5 procCall $@$prCa
    out in proc at 8
    run 6 vor call $@prCa()
    out in proc at 8
    9 run end
$/tstCompStmt3/ */
    call tstComp1 '@ tstCompStmt3 3',
        , '$$ 1 begin run 1',
        , '$@ct $$ 2 ct zwei',
        , '$$ 3 run 3 ctV = $ctV|',
        , '$@ct $@=¢ct 4 mit assign $=ctV = ct 4 assign ctV $!',
        , '$$ run 5 procCall $"$@$prCa" $@$prCa',
        , '$$ run 6 vor call $"$@prCa()"',
        , '$@prCa()',
        , '$@proc prCa $$out in proc at 8',
        , '$$ 9 run end'

/*
$=/tstCompStmt4/
    ### start tst tstCompStmt4 ########################################
    compile @, 4 lines: $=eins=vorher
    run without input
    eins vorher
    eins aus named block eins .
$/tstCompStmt4/ */
    call tstComp1 '@ tstCompStmt4 0',
        , '$=eins=vorher' ,
        , '$$ eins $eins' ,
        , '$=/eins/aus named block eins $/eins/' ,
        , '$$ eins $eins'
/*
$=/tstCompStmtDo/
    ### start tst tstCompStmtDo #######################################
    compile @, 2 lines: ti=0$@do y=3 to 4 $@do 2 $@¢
    run without input
    y=3 ti1 z=7
    y=3 ti1 z=8
    y=3 ti2 z=7
    y=3 ti2 z=8
    y=4 ti3 z=7
    y=4 ti3 z=8
    y=4 ti4 z=7
    y=4 ti4 z=8
$/tstCompStmtDo/ */
    call tstComp1 '@ tstCompStmtDo', 'ti=0$@do y=3 to 4 $@do 2 $@¢',
     ,    'ti = ti + 1',
        '$@do $*(sdf$*) z $*(sdf$*) = 7 to 8 $$ y=$y ti$-{ti} z=$z $!'

/*
$=/tstCompStmtDo2/
    ### start tst tstCompStmtDo2 ######################################
    compile @, 7 lines: $$ $-=/sqlSel/
    run without input
    select 1 abc select 2 abc after table .
$/tstCompStmtDo2/ */
    call tstComp1 '@ tstCompStmtDo2',
         , '$$ $-=/sqlSel/',
         ,     '$=ty = abc ',
         ,     '$@do tx=1 to 2 $@=/table/',
         ,          'select $tx $ty',
         , '$/table/',
         ,     '$=ty = abc',
         ,     'after table',
         '$/sqlSel/'
     return
endProcedure tstCompStmt

tstCompStmtA: procedure expose m.
    call pipeIni

/*
$=/tstCompStmtAssAtt/
    ### start tst tstCompStmtAssAtt ###################################
    compile @, 19 lines: call tstCompStmtAA "begin", "tstAssAtt"
    run without input
    begin    tstAssAtt F1=F1val1   F2=         F3=         FR=
    gugus1
    ass1     tstAssAtt F1=F1val1   F2=F2ass1   F3=F3ass1   FR=
    ass2     tstAssAtt F1=F1val1   F2=F2ass1   F3=F3ass1   FR=<oAAR2>
    ass2     tstAssAr2 F1=FRF1ass2 F2=         F3=         FR=
    gugus3
    ass3     tstAssAtt F1=F1val1   F2=F2ass3   F3=F3ass1   FR=<oAAR2>
    ass3     tstAssAr2 F1=FRF1ass2 F2=FrF2ass3 F3=         FR=<oAAR3>
    ass3     tstAssAr3 F1=r2F1as3  F2=r2F2as3  F3=         FR=
    *** err: no field falsch in class tstAssAtt in EnvPut(falsch, +
             falsch, 1)
$/tstCompStmtAssAtt/

*/
    call classNew 'n? tstAssAtt u f F1 v, f F2 v,' ,
                'f F3 v, f FR r tstAssAtt'
    call envPutO 'tstAssAtt', oNew('tstAssAtt')
    call envPut 'tstAssAtt.F1', 'F1val1'
    call tstComp1 '@ tstCompStmtAssAtt',
        , 'call tstCompStmtAA "begin", "tstAssAtt"',
        , '$=tstAssAtt=:¢F2=F2ass1  $$gugus1',
        ,               'F3=F3ass1',
        ,               '!',
        , 'call tstCompStmtAA "ass1", "tstAssAtt"',
        , '$=tstAssAtt.FR.F1 = FRF1ass2',
        , '$=tstAssAr2 =. ${tstAssAtt.FR}',
        , 'call mAdd T.trans, $.$tstAssAr2 "<oAAR2>"',
        , 'call tstCompStmtAA "ass2", "tstAssAtt"',
          ';call tstCompStmtAA "ass2", "tstAssAr2"',
        , '$=tstAssAtt=:¢F2=F2ass3  $$gugus3',
        ,               ':/FR/ F2= FrF2ass3',
        ,                  'FR=:¢F1=r2F1as3',
        ,                       'F2=r2F2as3',
        ,     '  *  blabla $$ sdf',
        ,                        '!',
        ,               '/FR/    !',
        , '$=tstAssAr3 =. ${tstAssAtt.FR.FR}',
        , 'call mAdd T.trans, $.$tstAssAr3 "<oAAR3>";',
          'call tstCompStmtAA "ass3", "tstAssAtt";',
          'call tstCompStmtAA "ass3", "tstAssAr2";',
          'call tstCompStmtAA "ass3", "tstAssAr3"',
        , '$=tstAssAtt=:¢falsch=falsch$!'
/*
$=/tstCompStmtAsSuTy/
    ### start tst tstCompStmtAsSuTy ###################################
    compile @, 4 lines: call tstCompStmtA2 "begin", "tstAsSuTy"
    run without input
    begin    tstAsSuTy G1=G1ini1  .
    _..GT    tstAsSuTy F1=GTF1ini1 F2=         F3=         FR=
    as2      tstAsSuTy G1=G1ini1  .
    _..GT    tstAsSuTy F1=GtF1ass2 F2=F2ass2   F3=         FR=
$/tstCompStmtAsSuTy/
*/
    call classNew 'n? tstAsSuTy u f G1 v, f GT tstAssAtt'
    call envPutO 'tstAsSuTy', oNew('tstAsSuTy')
    call envPut 'tstAsSuTy.G1', 'G1ini1'
    call envPut 'tstAsSuTy.GT.F1', 'GTF1ini1'
    call tstComp1 '@ tstCompStmtAsSuTy',
        , 'call tstCompStmtA2 "begin", "tstAsSuTy"',
        , '$=tstAsSuTy.GT =:¢F1= GtF1ass2',
        ,         'F2= F2ass2 $!',
        , 'call tstCompStmtA2 "as2", "tstAsSuTy"'
/*
$=/tstCompStmtAssSt/
    ### start tst tstCompStmtAssSt ####################################
    compile @, 13 lines: .
    run without input
    *** err: bad stem index 1>0 @ <oASt>.HS class <clSt??> in EnvPut(ts+
    tAssSt.HS.1.F1, HS.1.ini0, )
    begin    tstAssSt  H1=H1ini1   HS.0=1       .
    _..1     tstAssSt. F1=HS.1.ini F2=         F3=         FR=
    ass2     tstAssSt  H1=H1ass2   HS.0=1       .
    _..1     tstAssSt. F1=         F2=hs+f2as2 F3=hs+f3as2 FR=
    ass3     tstAssSt  H1=H1ass3   HS.0=3       .
    _..1     tstAssSt. F1=         F2=hs+f2as3 F3=         FR=
    _..2     tstAssSt. F1=         F2=         F3=         FR=
    _..3     tstAssSt. F1=         F2=         F3=hs+f3as3 FR=
$/tstCompStmtAssSt/
*/
    cl = classNew('n? tstAssSt u f H1 v, f HS s tstAssAtt')
    cl = m.cl.2
    m.tstCl = m.cl.class
    call envPutO 'tstAssSt', oNew('tstAssSt')
    call oClaClear class4Name('tstAssAtt'), envGetO('tstAssSt')'.HS.1'
    call envPut 'tstAssSt.H1', 'H1ini1'
    call tstComp1 '@ tstCompStmtAssSt', '',
        , "call mAdd t.trans, $.$tstAssSt '<oASt>'",
               ", m.tstCl '<clSt??>'",
          ";call envPut 'tstAssSt.HS.1.F1', 'HS.1.ini0'",
          ";call envPut 'tstAssSt.HS.0', 1",
          ";call envPut 'tstAssSt.HS.1.F1', 'HS.1.ini1'",
        , 'call tstCompStmtSt "begin", "tstAssSt"',
        , '$=tstAssSt =:¢H1= H1ass2',
        ,      'HS =<:¢F2=hs+f2as2',
        ,          'F3=hs+f3as2$! !' ,
        , 'call tstCompStmtSt "ass2", "tstAssSt"',
        , '$=tstAssSt =:¢H1= H1ass3',
        ,      'HS =<:¢F2=hs+f2as3',
        ,          '; ; F3=hs+f3as3',
        ,            ' ! !' ,
        , 'call tstCompStmtSt "ass3", "tstAssSt"',
        , ''
/*
$=/tstCompStmtAssSR/
    ### start tst tstCompStmtAssSR ####################################
    compile @, 13 lines: .
    run without input
    *** err: bad stem index 1>0 @ <oASR>.HS class <clSR??> in EnvPut(ts+
    tAssSR.HS.1.F1, HS.1.ini0, )
    begin    tstAssSR  H1=H1ini1   HS.0=1       .
    _..1     tstAssSR. F1=HS.1.ini F2=         F3=         FR=
    ass2     tstAssSR  H1=H1ass2   HS.0=1       .
    _..1     tstAssSR. F1=         F2=hs+f2as2 F3=hs+f3as2 FR=
    ass3     tstAssSR  H1=H1ass3   HS.0=3       .
    _..1     tstAssSR. F1=         F2=hs+f2as3 F3=         FR=
    _..2     tstAssSR. F1=         F2=         F3=         FR=
    _..3     tstAssSR. F1=         F2=         F3=hs+f3as3 FR=
$/tstCompStmtAssSR/
*/
    cl = classNew('n? tstAssSR u f H1 v, f HS s r tstAssAtt')
    cl = m.cl.2
    m.tstCl = m.cl.class
    call envPutO 'tstAssSR', oNew('tstAssSR')
    call oClaClear class4Name('tstAssAtt'), envGetO('tstAssSR')'.HS.1'

    call envPut 'tstAssSR.H1', 'H1ini1'
    call tstComp1 '@ tstCompStmtAssSR', '',
        , "call mAdd t.trans, $.$tstAssSR '<oASR>'",
               ", m.tstCl '<clSR??>'",
          ";call envPut 'tstAssSR.HS.1.F1', 'HS.1.ini0'",
          ";call envPut 'tstAssSR.HS.0', 1",
          ";call envPutO 'tstAssSR.HS.1', ''",
          ";call envPut 'tstAssSR.HS.1.F1', 'HS.1.ini1'",
        , 'call tstCompStmtSt "begin", "tstAssSR"',
        , '$=tstAssSR =:¢H1= H1ass2',
        ,      'HS =<<:¢F2=hs+f2as2',
        ,          'F3=hs+f3as2$! !' ,
        , ';call tstCompStmtSt "ass2", "tstAssSR"',
        , '$=tstAssSR =:¢H1= H1ass3',
        ,      'HS =<:¢F2=hs+f2as3',
        ,          '; ; F3=hs+f3as3',
        ,            ' ! !' ,
        , 'call tstCompStmtSt "ass3", "tstAssSR"',
        , ''
/*
$=/tstCompStmtassTb/
    ### start tst tstCompStmtassTb ####################################
    compile @, 19 lines: .
    run without input
    *** err: bad stem index 1>0 @ <oASt>.HS class <clSt??> in EnvPut(ts+
    tAssSt.HS.1.F1, HS.1.ini0, )
    begin    tstAssSt  H1=H1ini1   HS.0=1       .
    _..1     tstAssSt. F1=HS.1.ini F2=         F3=         FR=
    tstR: @tstWriteoV4 isA :<assCla H1>
    tstR:  .H1 = H1ass2
    ass2     tstAssSt  H1=H1ini1   HS.0=2       .
    _..1     tstAssSt. F1=         F2=hs+f2as2 F3=hs+f3as2 FR=
    _..2     tstAssSt. F1=         F2=h3+f2as2 F3=h3+f3as2 FR=
    ass3     tstAssSt  H1=H1ass3   HS.0=3       .
    _..1     tstAssSt. F1=         F2=f2as3    F3=         FR=
    _..2     tstAssSt. F1=         F2=         F3=         FR=
    _..3     tstAssSt. F1=         F2=         F3=f3as3    FR=
$/tstCompStmtassTb/
*/
    cl = classNew('n? tstAssSt u f H1 v, f HS s tstAssAtt')
    cl = m.cl.2
    m.tstCl = m.cl.class
    call envPutO 'tstAssSt', oNew('tstAssSt')
    call oClaClear class4Name('tstAssAtt'), envGetO('tstAssSt')'.HS.1'
    call envPut 'tstAssSt.H1', 'H1ini1'
    call tstComp1 '@ tstCompStmtassTb', '',
        , "call mAdd t.trans, $.$tstAssSt '<oASt>'",
               ", m.tstCl '<clSt??>'",
          ";call envPut 'tstAssSt.HS.1.F1', 'HS.1.ini0'",
          ";call envPut 'tstAssSt.HS.0', 1",
          ";call envPut 'tstAssSt.HS.1.F1', 'HS.1.ini1'",
        , 'call tstCompStmtSt "begin", "tstAssSt"',
        , '$=tstAssSt =:¢ $@|¢  H1  ',
        , '                      H1ass2  ',
        , "$@{call mAdd 'T.TRANS', className(objClass(envWithObj()))",
               "'<assCla H1>'} $!",
        ,      'HS =<|¢  $*(...',
        ,       '..$*)  F2      F3   ',
        ,        '   hs+f2as2     hs+f3as2  ' ,
        ,        '  *   kommentaerliiii    ' ,
        ,        '                          ' ,
        ,        '   h3+f2as2    h3+f3as22222$! !' ,
        , 'call tstCompStmtSt "ass2", "tstAssSt"',
          '$=tstAssSt =:¢H1= H1ass3',
        ,      'HS =<|¢F2       F3',
        ,      '        f2as3' ,
        ,      '  ',
        ,      '                 $""',
        ,      '            f3as3 $! !' ,
        , 'call tstCompStmtSt "ass3", "tstAssSt"'
/*
$=/tstCompStmtassInp/
    ### start tst tstCompStmtassInp ###################################
    compile @, 11 lines: .
    run without input
    tstR: @tstWriteoV2 isA :<cla123>
    tstR:  .eins = l1v1
    tstR:  .zwei = l1v2
    tstR:  .drei = l1v3
    tstR: @tstWriteoV3 isA :<cla123>
    tstR:  .eins = l2v1
    tstR:  .zwei = l2v2
    tstR:  .drei = l21v3
    *** err: undefined variable oo in envGetO(oo)
    oo before 0
    oo nachher <oo>
    tstR: @tstWriteoV5 isA :<cla123>
    tstR:  .eins = o1v1
    tstR:  .zwei = o1v2
    tstR:  .drei = o1v3
$/tstCompStmtassInp/
*/
    call envRemove 'oo'
    call tstComp1 '@ tstCompStmtassInp', '',
        , "$@|¢eins    zwei  drei  ",
        , " l1v1    l1v2   l1v3",
        , "$@{call mAdd 'T.TRANS', className(objClass(envWithObj()))",
                  "'<cla123>'}" ,
        , "      l2v1   l2v2   l21v3",
        , "!",
        , "$$ oo before $.$oo",
        , "$; $>.$oo $@|¢eins zwei drei",
        , "            o1v1  o1v2   o1v3 $!",
        , "$; call mAdd 'T.TRANS', $.$oo '<oo>'",
        , "$; $$ oo nachher $.$oo $@$oo"
    return
endProcedure tstCompStmtA

tstCompStmtAA: procedure expose m.
parse arg ggTxt, ggN
    call out left(ggTxt,8) left(ggN, 9),
         'F1='left(envGet(ggN'.F1'), 8),
         'F2='left(envGet(ggN'.F2'), 8),
         'F3='left(envGet(ggN'.F3'), 8),
         'FR='envGetO(ggN'.FR')
    return
endSubroutine

tstCompStmtA2: procedure expose m.
parse arg ggTxt, ggN
    call out left(ggTxt,8) left(ggN, 9),
         'G1='left(envGet(ggN'.G1'), 8)
    call tstCompStmtAA '_..GT', ggN'.GT'
    return
endSubroutine

tstCompStmtSt: procedure expose m.
parse arg ggTxt, ggN
    call out left(ggTxt,8) left(ggN, 9),
         'H1='left(envGet(ggN'.H1'), 8),
         'HS.0='left(envGet(ggN'.HS.0'), 8)
    do sx=1 to envGet(ggN'.HS.0')
        call tstCompStmtAA '_..'sx, ggN'.HS.'sx
        end
    return
endSubroutine tstCompStmtSt

tstCompSyntax: procedure expose m.
    call tstCompSynPrimary
    call tstCompSynAss
    call tstCompSynRun
    return
endProcedure tstCompSyntax

tstCompSynPrimary: procedure expose m.

/*
$=/tstCompSynPri1/
    ### start tst tstCompSynPri1 ######################################
    compile @, 1 lines: a $ =
    *** err: scanErr pipe or $; expected: compile shell stopped before+
    . end of input
    .    e 1: last token  scanPosition $ =
    .    e 2: pos 3 in line 1: a $ =
$/tstCompSynPri1/ */
    call tstComp1 '@ tstCompSynPri1 +', 'a $ ='

/*
$=/tstCompSynPri2/
    ### start tst tstCompSynPri2 ######################################
    compile @, 1 lines: a $. {
    *** err: scanErr objRef expected after $. expected
    .    e 1: last token  scanPosition  {
    .    e 2: pos 5 in line 1: a $. {
$/tstCompSynPri2/ */
    call tstComp1 '@ tstCompSynPri2 +', 'a $. {'

/*
$=/tstCompSynPri3/
    ### start tst tstCompSynPri3 ######################################
    compile @, 1 lines: b $-  ¢  .
    *** err: scanErr objRef expected after $- expected
    .    e 1: last token  scanPosition   ¢
    .    e 2: pos 5 in line 1: b $-  ¢
$/tstCompSynPri3/ */
    call tstComp1 '@ tstCompSynPri3 +', 'b $-  ¢  '

/*
$=/tstCompSynPri4/
    ### start tst tstCompSynPri4 ######################################
    compile @, 1 lines: a ${ $*( sdf$*) } =
    *** err: scanErr var name expected
    .    e 1: last token  scanPosition } =
    .    e 2: pos 17 in line 1: a ${ $*( sdf$*) } =
$/tstCompSynPri4/ */
    call tstComp1 '@ tstCompSynPri4 +', 'a ${ $*( sdf$*) } ='

/*
$=/tstCompSynFile/
    ### start tst tstCompSynFile ######################################
    compile @, 1 lines: $@.<$*( co1 $*) $$abc
    *** err: scanErr block or expr expected for file expected
    .    e 1: last token  scanPosition $$abc
    .    e 2: pos 17 in line 1: $@.<$*( co1 $*) $$abc
$/tstCompSynFile/ */
    call tstComp1 '@ tstCompSynFile +', '$@.<$*( co1 $*) $$abc'

    return
endProcedure tstCompSynPrimary

tstCompSynAss: procedure expose m.

/*
$=/tstCompSynAss1/
    ### start tst tstCompSynAss1 ######################################
    compile @, 1 lines: $=
    *** err: scanErr assignment expected after $=
    .    e 1: last token  scanPosition .
    .    e 2: pos 3 in line 1: $=
$/tstCompSynAss1/ */
    call tstComp1 '@ tstCompSynAss1 +', '$='

/*
$=/tstCompSynAss2/
    ### start tst tstCompSynAss2 ######################################
    compile @, 2 lines: $=   .
    *** err: scanErr assignment expected after $=
    .    e 1: last token  scanPosition .
    .    e 2: pos 6 in line 1: $=
$/tstCompSynAss2/ */
    call tstComp1 '@ tstCompSynAss2 +', '$=   ', 'eins'

/*
$=/tstCompSynAss3/
    ### start tst tstCompSynAss3 ######################################
    compile @, 2 lines: $=   $$
    *** err: scanErr assignment expected after $=
    .    e 1: last token  scanPosition $$
    .    e 2: pos 6 in line 1: $=   $$
$/tstCompSynAss3/ */
    call tstComp1 '@ tstCompSynAss3 +', '$=   $$', 'eins'

/*
$=/tstCompSynAss4/
    ### start tst tstCompSynAss4 ######################################
    compile @, 1 lines: $=   eins
    *** err: scanErr = expected after $= "eins"
    .    e 1: last token  scanPosition .
    .    e 2: pos 10 in line 1: $=   eins
$/tstCompSynAss4/ */
    call tstComp1 '@ tstCompSynAss4 +', '$=   eins'

/*
$=/tstCompSynAss5/
    ### start tst tstCompSynAss5 ######################################
    compile @, 1 lines: $=  abc eins $$ = x
    *** err: scanErr = expected after $= "abc eins"
    .    e 1: last token  scanPosition $$ = x
    .    e 2: pos 14 in line 1: $=  abc eins $$ = x
$/tstCompSynAss5/ */
    call tstComp1 '@ tstCompSynAss5 +', '$=  abc eins $$ = x'

/*
$=/tstCompSynAss6/
    ### start tst tstCompSynAss6 ######################################
    compile @, 1 lines: $=  abc =
    *** err: scanErr block or expression after $= "abc" = expected
    .    e 1: last token  scanPosition .
    .    e 2: pos 10 in line 1: $=  abc =
$/tstCompSynAss6/ */
    call tstComp1 '@ tstCompSynAss6 +', '$=  abc ='

/*
$=/tstCompSynAss7/
    ### start tst tstCompSynAss7 ######################################
    compile @, 1 lines: $=  abc =..
    *** err: scanErr block or expression after $= "abc" = expected
    .    e 1: last token  scanPosition .
    .    e 2: pos 11 in line 1: $=  abc =..
$/tstCompSynAss7/ */
    call tstComp1 '@ tstCompSynAss7 +', '$=  abc =.'
    return
endProcedure tstCompSynAss

tstCompSynRun: procedure expose m.

/*
$=/tstCompSynRun1/
    ### start tst tstCompSynRun1 ######################################
    compile @, 1 lines: $@
    *** err: scanErr block or expr expected after $@ expected
    .    e 1: last token  scanPosition .
    .    e 2: pos 3 in line 1: $@
$/tstCompSynRun1/ */
    call tstComp1 '@ tstCompSynRun1 +', '$@'

/*
$=/tstCompSynRun2/
    ### start tst tstCompSynRun2 ######################################
    compile @, 1 lines: $@=
    *** err: scanErr block or expr expected after $@ expected
    .    e 1: last token  scanPosition .
    .    e 2: pos 4 in line 1: $@=
$/tstCompSynRun2/ */
    call tstComp1 '@ tstCompSynRun2 +', '$@='

/*
$=/tstCompSynRun3/
    ### start tst tstCompSynRun3 ######################################
    compile @, 1 lines: $@|
    *** err: scanErr block or expr expected after $@ expected
    .    e 1: last token  scanPosition .
    .    e 2: pos 4 in line 1: $@|
    *** err: scanErr comp2code bad fr | to | for @|| .
    .    e 1: last token  scanPosition .
    .    e 2: pos 4 in line 1: $@|
$/tstCompSynRun3/ */
    call tstComp1 '@ tstCompSynRun3 +', '$@|'

/*
$=/tstCompSynFor4/
    ### start tst tstCompSynFor4 ######################################
    compile @, 1 lines: $@for
    *** err: scanErr variable name after $@for expected
    .    e 1: last token  scanPosition .
    .    e 2: pos 6 in line 1: $@for
$/tstCompSynFor4/ */
    call tstComp1 '@ tstCompSynFor4 +', '$@for'

/*
$=/tstCompSynFor5/
    ### start tst tstCompSynFor5 ######################################
    compile @, 2 lines: $@for
    *** err: scanErr variable name after $@for expected
    .    e 1: last token  scanPosition .
    .    e 2: pos 6 in line 1: $@for
$/tstCompSynFor5/ */
    call tstComp1 '@ tstCompSynFor5 +', '$@for', a

/*
$=/tstCompSynFor6/
    ### start tst tstCompSynFor6 ######################################
    compile @, 2 lines: a
    *** err: scanErr variable name after $@for expected
    .    e 1: last token  scanPosition $$q
    .    e 2: pos 12 in line 2:  b $@for   $$q
$/tstCompSynFor6/ */
    call tstComp1 '@ tstCompSynFor6 +', 'a', ' b $@for   $$q'

/*
$=/tstCompSynFor7/
    ### start tst tstCompSynFor7 ######################################
    compile @, 3 lines: a
    *** err: scanErr statement after $@for "a" expected
    .    e 1: last token  scanPosition .
    .    e 2: pos 11 in line 2:  b $@for a
$/tstCompSynFor7/ */
    call tstComp1 '@ tstCompSynFor7 +', 'a', ' b $@for a', '  $$q'

/*
$=/tstCompSynCt8/
    ### start tst tstCompSynCt8 #######################################
    compile @, 3 lines: a
    *** err: scanErr ct statement expected
    .    e 1: last token  scanPosition .
    .    e 2: pos 8 in line 2:  b $@ct
$/tstCompSynCt8/ */
    call tstComp1 '@ tstCompSynCt8 +', 'a', ' b $@ct', '  $$q'

/*
$=/tstCompSynProc9/
    ### start tst tstCompSynProc9 #####################################
    compile @, 2 lines: a
    *** err: scanErr proc name expected
    .    e 1: last token  scanPosition $$q
    .    e 2: pos 12 in line 2:  b $@proc  $$q
$/tstCompSynProc9/ */
    call tstComp1 '@ tstCompSynProc9 +', 'a', ' b $@proc  $$q'

/*
$=/tstCompSynProcA/
    ### start tst tstCompSynProcA #####################################
    compile @, 2 lines: $@proc p1
    *** err: scanErr proc statement expected
    .    e 1: last token  scanPosition .
    .    e 2: pos 10 in line 1: $@proc p1
$/tstCompSynProcA/ */
    call tstComp1 '@ tstCompSynProcA +', '$@proc p1', '  $$q'

/*
$=/tstCompSynCallB/
    ### start tst tstCompSynCallB #####################################
    compile @, 1 lines: $@call (roc p1)
    *** err: scanErr procCall, for, do, ct, proc or objRef expected aft+
    er $@
    .    e 1: last token  scanPosition  (roc p1)
    .    e 2: pos 7 in line 1: $@call (roc p1)
$/tstCompSynCallB/ */
    call tstComp1 '@ tstCompSynCallB +', '$@call (roc p1)'

/*
$=/tstCompSynCallC/
    ### start tst tstCompSynCallC #####################################
    compile @, 1 lines: $@call( roc p1 )
    *** err: scanErr closing ) expected after $@call(
    .    e 1: last token  scanPosition roc p1 )
    .    e 2: pos 9 in line 1: $@call( roc p1 )
$/tstCompSynCallC/ */
    call tstComp1 '@ tstCompSynCallC +', '$@call( roc p1 )'

/*
$=/tstCompSynCallD/
    ### start tst tstCompSynCallD #####################################
    compile @, 2 lines: $@call( $** roc
    *** err: scanErr closing ) expected after $@call(
    .    e 1: last token  scanPosition .
    .    e 2: pos 16 in line 1: $@call( $** roc
$/tstCompSynCallD/ */
    call tstComp1 '@ tstCompSynCallD +',
        ,'$@call( $** roc' , ' $*( p1 $*) )'
    return
endProcedure tstCompSynRun

tstCompObj: procedure expose m.
    call tstReset t
    call oIni
    cl = classNew('n? tstCompCla u v, f FEINS v, f FZWEI v')
    do rx=1 to 10
        o = oNew(cl)
        m.tstComp.rx = o
        m.o = 'o'rx
        if rx // 2 = 0 then do
            m.o.fEins = 'o'rx'.1'
            m.o.fZwei = 'o'rx'.fZwei'rx
            end
        else do
            m.o.fEins = 'o'rx'.fEins'
            m.o.fZwei = 'o'rx'.2'
            end
        call mAdd 'T.TRANS', m.tstComp.rx '<o'rx'>'
        end

/*
$=/tstCompObjRef/
    ### start tst tstCompObjRef #######################################
    compile @, 13 lines: o1=m.tstComp.1
    run without input
    out .$"string" o1
    string
    out . o1
    tstR: @<o1> isA :tstCompCla = o1
    tstR:  .FEINS = o1.fEins
    tstR:  .FZWEI = o1.2
    out .{ o2 }
    tstR: @<o2> isA :tstCompCla = o2
    tstR:  .FEINS = o2.1
    tstR:  .FZWEI = o2.fZwei2
    out .¢ o3 $!
    tstR: @<o3> isA :tstCompCla = o3
    tstR:  .FEINS = o3.fEins
    tstR:  .FZWEI = o3.2
    out .¢ o4 $!
    tstR: @<o4> isA :tstCompCla = o4
    tstR:  .FEINS = o4.1
    tstR:  .FZWEI = o4.fZwei4
    out ./-/ o5 $/-/
    tstR: @<o5> isA :tstCompCla = o5
    tstR:  .FEINS = o5.fEins
    tstR:  .FZWEI = o5.2
$/tstCompObjRef/ */
m.ttt=1
    call tstComp1 '@ tstCompObjRef' ,
        , 'o1=m.tstComp.1',
        , 'o2 = m.tstComp.2' ,
        , '$$ out $".$""string""" o1 $$.$"string"',
        , '$$ out . o1 $$. o1',
        , '$$ out .{ o2 } $$.{ o2 }',
        , '$$ out .¢ o3 $"$!" $$.¢ ', ' m.tstComp.3 ', ' $!',
        , '$$ out .¢ o4 $"$!" $$.¢ ', ' m.tstComp.4 ', ' $!',
        , '$$ out ./-/ o5 $"$/-/" $$./-/  m.tstComp.5 ', ' $/-/'

/*
$=/tstCompObjRefPri/
    ### start tst tstCompObjRefPri ####################################
    compile @, 9 lines: $$ out .$"$.{o1}" $$.$.{ m.tstComp.1 }
    run without input
    out .$.{o1}
    tstR: @<o1> isA :tstCompCla = o1
    tstR:  .FEINS = o1.fEins
    tstR:  .FZWEI = o1.2
    out .$.-{o2}
    <o2>
    out .$.={o3}
    m.tstComp.3
    out .$.@{out o4}
    tstWriteO kindOf ORun oRun begin <<<
    tstR: @<o4> isA :tstCompCla = o4
    tstR:  .FEINS = o4.1
    tstR:  .FZWEI = o4.fZwei4
    tstWriteO kindOf ORun oRun end   >>>
    out .$.@¢$$abc $$efg$!
    tstWriteO kindOf ORun oRun begin <<<
    abc
    efg
    tstWriteO kindOf ORun oRun end   >>>
    out .$.@¢o5$!
    tstWriteO kindOf ORun oRun begin <<<
    tstR: @<o5> isA :tstCompCla = o5
    tstR:  .FEINS = o5.fEins
    tstR:  .FZWEI = o5.2
    abc
    tstWriteO kindOf ORun oRun end   >>>
$/tstCompObjRefPri/ */
    call tstComp1 '@ tstCompObjRefPri' ,
        , '$$ out .$"$.{o1}" $$.$.{ m.tstComp.1 }',
        , '$$ out .$"$.-{o2}" $$.$.-{ m.tstComp.2 }',
        , '$$ out .$"$.={o3}" $$.$.={ m.tstComp.3 }',
        , '$$ out .$"$.@{out o4}" $$.$.@{ call outO m.tstComp.4 }',
    , '$$ out .$"$.@¢$$abc $$efg$!" $$.$.@¢ $$abc ', ' ', ' $$efg $!',
        , '$$ out .$"$.@¢o5$!" $$.$.@¢ $$.m.tstComp.5', '$$abc $!'

/*
$=/tstCompObjRefFile/
    ### start tst tstCompObjRefFile ###################################
    compile @, 7 lines: $$ out .$".<.¢o1!" $$.$.<.¢ m.tstComp.1 $!
    run without input
    out ..<.¢o1!
    tstWriteO kindOf JRW jWriteNow begin <<<
    tstR: @<o1> isA :tstCompCla = o1
    tstR:  .FEINS = o1.fEins
    tstR:  .FZWEI = o1.2
    tstWriteO kindOf JRW jWriteNow end   >>>
    out .<$.-{o2}
    tstWriteO kindOf JRW jWriteNow begin <<<
    tstR: @<o2> isA :tstCompCla = o2
    tstR:  .FEINS = o2.1
    tstR:  .FZWEI = o2.fZwei2
    tstWriteO kindOf JRW jWriteNow end   >>>
    out .$.<{o3}
    tstWriteO kindOf JRW jWriteNow begin <<<
    m.tstComp.3
    tstWriteO kindOf JRW jWriteNow end   >>>
    out .$.<@{out o4}
    tstWriteO kindOf JRW jWriteNow begin <<<
    tstR: @<o4> isA :tstCompCla = o4
    tstR:  .FEINS = o4.1
    tstR:  .FZWEI = o4.fZwei4
    tstWriteO kindOf JRW jWriteNow end   >>>
    out .$<@¢$$abc $$efg$!
    tstWriteO kindOf JRW jWriteNow begin <<<
    abc
    efg
    tstWriteO kindOf JRW jWriteNow end   >>>
$/tstCompObjRefFile/ */

    call tstComp1 '@ tstCompObjRefFile' ,
        , '$$ out .$".<.¢o1!" $$.$.<.¢ m.tstComp.1 $!',
        , '$$ out .$"<$.-{o2}" $$.$.<.{ m.tstComp.2 }',
        , '$$ out .$"$.<{o3}" $$.$.<={ m.tstComp.3 }',
        , '$$ out .$"$.<@{out o4}" $$.$.<@{ call outO m.tstComp.4 }',
    , '$$ out .$"$<@¢$$abc $$efg$!" $$.$.<@¢ $$abc ', ' ', ' $$efg $!'

/*
$=/tstCompObjFor/
    ### start tst tstCompObjFor #######################################
    compile @, 2 lines: $@do rx=1 to 3 $$. m.tstComp.rx
    run without input
    FEINS=o1.fEins FZWEI=o1.2
    FEINS=o2.1 FZWEI=o2.fZwei2
    FEINS=o3.fEins FZWEI=o3.2
$/tstCompObjFor/
*/
    call tstComp1 '@ tstCompObjFor' ,
        , '$@do rx=1 to 3 $$. m.tstComp.rx' ,
        , '$| $@forWith with $$ FEINS=$FEINS FZWEI=$FZWEI'

/*
$=/tstCompObjRun/
    ### start tst tstCompObjRun #######################################
    compile @, 4 lines: $$ out .$"$@¢o1!" $$.$.@¢ $$. m.tstComp.1 $!
    run without input
    out .$@¢o1!
    tstWriteO kindOf ORun oRun begin <<<
    tstR: @<o1> isA :tstCompCla = o1
    tstR:  .FEINS = o1.fEins
    tstR:  .FZWEI = o1.2
    tstWriteO kindOf ORun oRun end   >>>
    out .$<@¢$$abc $$efg$!
    tstWriteO kindOf JRW jWriteNow begin <<<
    abc
    efg
    tstWriteO kindOf JRW jWriteNow end   >>>
$/tstCompObjRun/ */
    call tstComp1 '@ tstCompObjRun' ,
        , '$$ out .$"$@¢o1!" $$.$.@¢ $$. m.tstComp.1 $!',
    , '$$ out .$"$<@¢$$abc $$efg$!" $$.$.<@¢ $$abc ', ' ', ' $$efg $!'

    m.t.trans.0 = 0
/*
$=/tstCompObj/
    ### start tst tstCompObj ##########################################
    compile @, 6 lines: o1=m.tstComp.1
    run without input
    out . o1
    tstR: @tstWriteoV1 isA :tstCompCla = o1
    tstR:  .FEINS = o1.fEins
    tstR:  .FZWEI = o1.2
    out .{ o2 }
    tstR: @tstWriteoV2 isA :tstCompCla = o2
    tstR:  .FEINS = o2.1
    tstR:  .FZWEI = o2.fZwei2
    out .¢ o1, o2!
    tstR: @tstWriteoV1 isA :tstCompCla = o1
    tstR:  .FEINS = o1.fEins
    tstR:  .FZWEI = o1.2
    tstR: @tstWriteoV2 isA :tstCompCla = o2
    tstR:  .FEINS = o2.1
    tstR:  .FZWEI = o2.fZwei2
$/tstCompObj/ */
    call tstComp1 '@ tstCompObj' ,
        , 'o1=m.tstComp.1',
        , 'o2 = m.tstComp.2' ,
        , '$$ out . o1 $$. o1',
        , '$$ out .{ o2 } $$.{ o2 }',
    , '$$ out .¢ o1, o2!$; $@<.¢  m.tstComp.1  ', '  m.tstComp.2  $!'
    return
    m.t.trans.0 = 0
endProcedure tstCompObj

tstCompORun: procedure expose  m.
/*
$=/tstCompORun/
    ### start tst tstCompORun #########################################
    compile @, 6 lines: $@oRun()
    run without input
    oRun arg=1, v2=, v3=, v4=
    oRun arg=1, v2=, v3=, v4=
    oRun arg=2, v2=-{1 arg only} oder?, v3=, v4=
    oRun arg=2, v2=!.{1 obj only} oder?, v3=, v4=
    oRun arg=3, v2={2 args}, v3=und zwei?, v4=
    oRun arg=4, v2={3 args}, v3=zwei, v4=und drei?
$/tstCompORun/ */
    call compIni
    call envPutO 'oRun', oRunner('parse arg , v2, v3, v4;',
        'call tstOut t, "oRun arg="arg()", v2="v2", v3="v3", v4="v4' )
    call tstComp1 '@ tstCompORun',
        , '$@oRun()', '$@oRun-{}' ,
        , '    $@oRun-{$"-{1 arg only}" ''oder?''}' ,
        , '    $@oRun.{$".{1 obj only}" ''oder?''} $=v2=zwei' ,
        , '    $@oRun-{$"{2 args}", "und" $v2"?"}' ,
        , '    $@oRun-{$"{3 args}", $v2, "und drei?"}'
    return
endProcedure tstCompORun

tstCompDataIO: procedure expose m.
/*
$=/tstCompDataHereData/
    ### start tst tstCompDataHereData #################################
    compile =, 13 lines:  herdata $@#/stop/    .
    run without input
    . herdata .
    heredata 1 $x
    heredata 2 $y
    nach heredata
    . herdata ¢ .
    heredata 1 xValue
    heredata 2 yValueY
    nach heredata ¢
    . herdata { .
    HEREDATA 1 xValue
    heredata 2 yValueY
    nach heredata {
$/tstCompDataHereData/ */
    call tstComp1 '= tstCompDataHereData',
        , ' herdata $@#/stop/    ',
        , 'heredata 1 $x',
        , 'heredata 2 $y',
        , '$/stop/ $$ nach heredata',
        , ' herdata ¢ $@=/stop/    ',
        , '$=x=xValue$=y=yValueY',
        , 'heredata 1 $x',
        , 'heredata 2 $y',
        , '$/stop/ $$ nach heredata ¢',
        , ' herdata { $@/st/',
        , '; call out heredata 1 $x',
        , '$$heredata 2 $y',
        , '$/st/ $$ nach heredata {'
/*
$=/tstCompDataIO/
    ### start tst tstCompDataIO #######################################
    compile =, 5 lines:  input 1 $@.<$dsn $*+.
    run without input
    . input 1 .
    readInp line 1                       .
    readInp line 2                       .
    . nach dsn input und nochmals mit & .
    readInp line 1                       .
    readInp line 2                       .
    . und schluiss..
$/tstCompDataIO/ */
    dsn = word(tstPdsMbr(tstFilename('lib37', 'r'), 'readInp'), 1)
    dsnFB = strip(dsn tstFB('::F37', 0))
    b = jBuf(tstFB('readInp line 1', 37),
            ,tstFB('readInp line 2', 37))
    extFd = tstFB('&dsn('dsn') dd(xyz)', 0)
    extFd = tstFB(dsn 'dd(xyz) ::f', 0)
    if extFd = '' then
        extFd = dsn
    call jCat file(dsnFB), b
    call envPut 'dsn', dsn
    say 'dsn' dsn 'extFD' extFD'?'
    call tstComp1 '= tstCompDataIO',
        , ' input 1 $@.<$dsn $*+',
        , tstFB('::f', 0),
        , ' nach dsn input und nochmals mit & ' ,
        , '         $@.<' extFD,
        , ' und schluiss.'
    return
endProcedure tstCompDataIO

tstObjVF: procedure expose m.
parse arg v, f
    obj  = oNew(classNew('n? TstClassVF u v, f FLD1 v'))
    m.obj = if(f=='','val='v, v)
    m.obj.fld1 = if(f=='','FLD1='v, f)
    return obj
endProcedure tstObjVF

tstCompFile: procedure expose m.
/*
$=/tstCompFileBloSrc/
    $=vv=value-of-vv
    ###file from empty # block
    $@<#¢
        $!
    ###file from 1 line # block
    $@<#¢
    the only $ix+1/0 line $vv
    $!
    ###file from 2 line # block
    $@<#¢
        first line /0 $*+ no comment
        second and last line $$ $wie
    $!
    ===file from empty = block
    $@<=¢     $*+ comment
        $!
    ===file from 1 line = block
    $@<=¢ the only line $!
    ===file from 2 line = block
    $@<=¢ first line$** comment
        second and last line  $!
    ---file from empty - block
    $@<-/s/
        $/s/
    ---file from 1 line - block
    $@<-/s/ the only "line" (1*1) $/s/
    ---file from 2 line = block
    $@<-// first "line" (1+0)
        second   and   "last  line" (1+1)  $//
    ...file from empty . block
    $@<.¢
        $!
    ...file from 1 line . block
    $@<.¢ tstObjVF('v-Eins', '1-Eins') $!
    ...file from 2 line . block
    $@<.¢ tstObjVF('v-Elf', '1-Elf')
        tstObjVF('zwoelf')  $!
    ...file from 3 line . block
    $@<.¢ tstObjVF('einUndDreissig')
            s2o('zweiUndDreissig' o2String($vv))
            tstObjVF('dreiUndDreissig')  $!
    @@@file from empty @ block
    $@<@¢
        $!
    $=noOutput=before
    @@@file from nooutput @ block
    $@<@¢ nop
        $=noOutput = run in block $!
    @@@nach noOutput=$noOutput
    @@@file from 1 line @ block
    $@<@¢ $$. tstObjVF('w-Eins', 'w1-Eins') $!
    @@@file from 2 line @ block
    $@<@¢ $$.tstObjVF('w-Elf', 'w1-Elf')
        y='zwoelf' $$-y  $!
    @@@file from 3 line @ block
    $@<@¢ $$.tstObjVF('w einUndDreissig')    $$ +
    zweiUndDreissig $$ 33 $vv$!
    {{{ empty { block
    $@<{      }
    {{{ empty { block with comment
    $@<{    $*+ abc
          }
    {{{ one line { block
    $@<{ the only $"{...}" line $*+.
        $vv  }
    {{{ one line -{ block
    $@<-{ the only $"-{...}"  "line" $vv  }
    {{{ empty #{ block
    $@<#{            }
    {{{ one line #{ block
    $@<#{ the only $"-{...}"  "line" $vv ${vv${x}}  }
$/tstCompFileBloSrc/ */
/*
$=/tstCompFileBlo/
    ### start tst tstCompFileBlo ######################################
    compile =, 70 lines: $=vv=value-of-vv
    run without input
    ###file from empty # block
    ###file from 1 line # block
    the only $ix+1/0 line $vv
    ###file from 2 line # block
    first line /0 $*+ no comment
    second and last line $$ $wie
    ===file from empty = block
    ===file from 1 line = block
    . the only line .
    ===file from 2 line = block
    . first line
    second and last line  .
    ---file from empty - block
    ---file from 1 line - block
    THE ONLY line 1
    ---file from 2 line = block
    FIRST line 1
    SECOND AND last  line 2
    ...file from empty . block
    ...file from 1 line . block
    tstR: @tstWriteoV1 isA :TstClassVF = v-Eins
    tstR:  .FLD1 = 1-Eins
    ...file from 2 line . block
    tstR: @tstWriteoV2 isA :TstClassVF = v-Elf
    tstR:  .FLD1 = 1-Elf
    tstR: @tstWriteoV3 isA :TstClassVF = val=zwoelf
    tstR:  .FLD1 = FLD1=zwoelf
    ...file from 3 line . block
    tstR: @tstWriteoV4 isA :TstClassVF = val=einUndDreissig
    tstR:  .FLD1 = FLD1=einUndDreissig
    zweiUndDreissig value-of-vv
    tstR: @tstWriteoV5 isA :TstClassVF = val=dreiUndDreissig
    tstR:  .FLD1 = FLD1=dreiUndDreissig
    @@@file from empty @ block
    @@@file from nooutput @ block
    @@@nach noOutput=run in block
    @@@file from 1 line @ block
    tstR: @tstWriteoV6 isA :TstClassVF = w-Eins
    tstR:  .FLD1 = w1-Eins
    @@@file from 2 line @ block
    tstR: @tstWriteoV7 isA :TstClassVF = w-Elf
    tstR:  .FLD1 = w1-Elf
    zwoelf
    @@@file from 3 line @ block
    tstR: @tstWriteoV8 isA :TstClassVF = val=w einUndDreissig
    tstR:  .FLD1 = FLD1=w einUndDreissig
    zweiUndDreissig
    33 value-of-vv
    {{{ empty { block
    {{{ empty { block with comment
    {{{ one line { block
    the only {...} line value-of-vv
    {{{ one line -{ block
    THE ONLY -{...} line value-of-vv
    {{{ empty #{ block
    .            .
    {{{ one line #{ block
    . the only $"-{...}"  "line" $vv ${vv${x}}  .
$/tstCompFileBlo/ */
    call tstComp2 'tstCompFileBlo', '='
    m.t.trans.0 = 0

/*
$=/tstCompFileObjSrc/
    $=vv=value-vv-1
    $=fE=<¢ $!
    $=f2=.$.<.¢s2o("f2 line 1" o2String($vv))
         tstObjVF("f2 line2") $!
    ---empty file $"$@<$fE"
    $@$fE
    ---file with 2 lines $"$@<$f2"
    $@<.$f2
    $=vv=value-vv-2
    ---file with 2 lines $"$@<$f2"
    $@<.$f2
    $= dsn =- word(tstPdsMbr(tstFilename('libvb', 'r'), 'fileObj'),1) +
                tstFB('::V', 0)
    $@¢
        fi=jOpen(file($dsn),'>')
        call jWrite fi, 'line one on' $"$dsn"
        call jWrite fi, 'line two on' $"$dsn"
        call jClose fi
    $!
    ---file on disk out
    $@.<$dsn
$/tstCompFileObjSrc/ */
/*
$=/tstCompFileObj/
    ### start tst tstCompFileObj ######################################
    compile =, 20 lines: $=vv=value-vv-1
    run without input
    ---empty file $@<$fE
    ---file with 2 lines $@<$f2
    f2 line 1 value-vv-1
    tstR: @tstWriteoV1 isA :TstClassVF = val=f2 line2
    tstR:  .FLD1 = FLD1=f2 line2
    ---file with 2 lines $@<$f2
    f2 line 1 value-vv-1
    tstR: @tstWriteoV1 isA :TstClassVF = val=f2 line2
    tstR:  .FLD1 = FLD1=f2 line2
    ---file on disk out
    line one on $dsn
    line two on $dsn
$/tstCompFileObj/ */
    call tstComp2 'tstCompFileObj', '='

    return
endProcedure tstCompFile

tstCompPipe: procedure expose m.
/*
$=/tstCompPipe1/
    ### start tst tstCompPipe1 ########################################
    compile @, 1 lines:  call pipePreSuf "(1 ", " 1)"
    run without input
    #jIn eof 1#
    run with 3 inputs
    #jIn 1# eins zwei drei
    (1 eins zwei drei 1)
    #jIn 2# zehn elf zwoelf?
    (1 zehn elf zwoelf? 1)
    #jIn 3# zwanzig 21 22 23 24 ... 29|
    (1 zwanzig 21 22 23 24 ... 29| 1)
    #jIn eof 4#
$/tstCompPipe1/ */
    call tstComp1 '@ tstCompPipe1 3',
        , ' call pipePreSuf "(1 ", " 1)"'
/*
$=/tstCompPipe2/
    ### start tst tstCompPipe2 ########################################
    compile @, 2 lines:  call pipePreSuf "(1 ", " 1)"
    run without input
    #jIn eof 1#
    run with 3 inputs
    #jIn 1# eins zwei drei
    #jIn 2# zehn elf zwoelf?
    #jIn 3# zwanzig 21 22 23 24 ... 29|
    #jIn eof 4#
    ¢2 (1 eins zwei drei 1) 2!
    ¢2 (1 zehn elf zwoelf? 1) 2!
    ¢2 (1 zwanzig 21 22 23 24 ... 29| 1) 2!
$/tstCompPipe2/ */
    call tstComp1 '@ tstCompPipe2 3',
        , ' call pipePreSuf "(1 ", " 1)"' ,
        , ' $| call pipePreSuf "¢2 ", " 2!"'

/*
$=/tstCompPipe3/
    ### start tst tstCompPipe3 ########################################
    compile @, 3 lines:  call pipePreSuf "(1 ", " 1)"
    run without input
    #jIn eof 1#
    run with 3 inputs
    #jIn 1# eins zwei drei
    #jIn 2# zehn elf zwoelf?
    #jIn 3# zwanzig 21 22 23 24 ... 29|
    #jIn eof 4#
    <3 ¢2 (1 eins zwei drei 1) 2! 3>
    <3 ¢2 (1 zehn elf zwoelf? 1) 2! 3>
    <3 ¢2 (1 zwanzig 21 22 23 24 ... 29| 1) 2! 3>
$/tstCompPipe3/ */
    call tstComp1 '@ tstCompPipe3 3',
        , ' call pipePreSuf "(1 ", " 1)"' ,
        , ' $| call pipePreSuf "¢2 ", " 2!"',
        , ' $| call pipePreSuf "<3 ", " 3>"'

/*
$=/tstCompPipe4/
    ### start tst tstCompPipe4 ########################################
    compile @, 7 lines:  call pipePreSuf "(1 ", " 1)"
    run without input
    #jIn eof 1#
    run with 3 inputs
    #jIn 1# eins zwei drei
    #jIn 2# zehn elf zwoelf?
    #jIn 3# zwanzig 21 22 23 24 ... 29|
    #jIn eof 4#
    <3 ¢222 ¢221 ¢21 ¢20 (1 eins zwei drei 1) 20! 21! 221! 222! 3>
    <3 ¢222 ¢221 ¢21 ¢20 (1 zehn elf zwoelf? 1) 20! 21! 221! 222! 3>
    <3 ¢222 ¢221 ¢21 ¢20 (1 zwanzig 21 22 23 24 ... 29| 1) 20! 21! 221!+
    . 222! 3>
$/tstCompPipe4/ */
    call tstComp1 '@ tstCompPipe4 3',
        , ' call pipePreSuf "(1 ", " 1)"' ,
        , ' $| $@¢    call pipePreSuf "¢20 ", " 20!"',
        ,        ' $| call pipePreSuf "¢21 ", " 21!"',
        ,        ' $| $@¢      call pipePreSuf "¢221 ", " 221!"',
        ,                 ' $| call pipePreSuf "¢222 ", " 222!"',
        ,     '$!     $! ',
        , ' $| call pipePreSuf "<3 ", " 3>"'
    return
endProcedure tstCompPipe

tstCompRedir: procedure expose m.
/*
$=/tstCompRedir/
    ### start tst tstCompRedir ########################################
    compile @, 6 lines:  $>.$eins $@for vv $$ <$vv> $; .
    run without input
    #jIn eof 1#
    output eins .
    output piped zwei .
    run with 3 inputs
    #jIn 1# eins zwei drei
    #jIn 2# zehn elf zwoelf?
    #jIn 3# zwanzig 21 22 23 24 ... 29|
    #jIn eof 4#
    output eins <eins zwei drei> <zehn elf zwoelf?> <zwanzig 21 22 23 2+
    4 ... 29|>
    output piped zwei ab<eins zwei drei>yz ab<zehn elf zwoelf?>yz ab<zw+
    anzig 21 22 23 24 ... 29|>yz
$/tstCompRedir/ */
    call pipeIni
    call envRemove 'eins'  /* alte Variable loswerden */
    dsn = word(tstPdsMbr(tstFilename('libvb', 'r'), 'redir1'), 1)
    call envPut 'dsn', dsn
    call tstComp1 '@ tstCompRedir 3' ,
        , ' $>.$eins $@for vv $$ <$vv> $; ',
        , ' $$ output eins $-=¢$@$eins$!$; ',
        , ' $@for ww $$b${ww}y ',
        , '     $>$-{ $dsn } 'tstFB('::v', 0),
        ,         '$| call pipePreSuf "a", "z" $<.$eins',
        , ' $; $$ output piped zwei $-=¢$@<$dsn$! '
    return
endProcedure tstCompRedir

tstCompComp: procedure expose m.
/*
$=/tstCompCompShell/
    ### start tst tstCompCompShell ####################################
    compile @, 5 lines: $$compiling shell $; $= rrr =. $.compile@ $<#/+
    aaa/
    run without input
    compiling shell
    running einmal
    RUN 1 COMPILED einmal
    #jIn eof 1#
    running zweimal
    RUN 1 COMPILED zweimal
    #jIn eof 2#
    run with 3 inputs
    compiling shell
    running einmal
    RUN 1 COMPILED einmal
    #jIn 1# eins zwei drei
    compRun eins zwei dreieinmal
    #jIn 2# zehn elf zwoelf?
    compRun zehn elf zwoelf?einmal
    #jIn 3# zwanzig 21 22 23 24 ... 29|
    compRun zwanzig 21 22 23 24 ... 29|einmal
    #jIn eof 4#
    running zweimal
    RUN 1 COMPILED zweimal
    #jIn eof 5#
$/tstCompCompShell/ */
    call tstComp1 '@ tstCompCompShell 3',
        ,  "$$compiling shell $; $= rrr =. $.compile@ $<#/aaa/",
        ,  "call out run 1*1*1 compiled $cc; $@for v $$ compRun $v$cc",
        ,  "$/aaa/ $;",
        ,  "$=cc=einmal $$ running $cc $@$rrr",
        ,  "$=cc=zweimal $$ running $cc $@$rrr"
/*
$=/tstCompCompData/
    ### start tst tstCompCompData #####################################
    compile @, 5 lines: $$compiling data $; $= rrr =. $.compile=  +
        $<#/aaa/
    run without input
    compiling data
    running einmal
    call out run 1*1*1 compiled einmal
    running zweimal
    call out run 1*1*1 compiled zweimal
    run with 3 inputs
    compiling data
    running einmal
    call out run 1*1*1 compiled einmal
    running zweimal
    call out run 1*1*1 compiled zweimal
$/tstCompCompData/ */
    call tstComp1 '@ tstCompCompData 3',
        ,  "$$compiling data $; $= rrr =. $.compile=  $<#/aaa/",
        ,  "call out run 1*1*1 compiled $cc",
        ,  "$/aaa/ $;",
        ,  "$=cc=einmal $$ running $cc $@$rrr",
        ,  "$=cc=zweimal $$ running $cc $@$rrr"
    return
endProcedure tstCompComp

tstCompDir: procedure expose m.
/*
$=/tstCompDirSrc/
  'in src v1='$v1
  $#@ call out 'src @ out v1='$v1
  $#. s2o('src . v1=')
       $v1
  $#- 'src - v1='$v1
  $#= src = v1=$v1
$/tstCompDirSrc/ */
/*
$=/tstCompDir/
    ### start tst tstCompDir ##########################################
    compile call out 'before v1='$v1 $=v1=eins $#. s2o('. v1='$-$v1) $#+
    @ call out '@ v1='$v1 $#= = v1=$v1 $#- '- v1='$v1, 6 lines: 'in src+
    . v1='$v1
    run without input
    before v1=v1Before
    .. v1=eins
    @ v1=eins
    . = v1=eins .
    - v1=eins
    in src v1=eins
    src @ out v1=eins
    src . v1=
    eins
    src - v1=eins
    . src = v1=eins
$/tstCompDir/ */
    call envPut 'v1', 'v1Before'
    call tstComp2 'tstCompDir', "call out 'before v1='$v1 $=v1=eins" ,
        "$#. s2o('. v1='$-$v1) $#@ call out '@ v1='$v1" ,
        "$#= = v1=$v1 $#- '- v1='$v1"
/*
$=/tstCompDirPiSrc/
  zeile 1 v1=$v1
  zweite Zeile vor $"$@$#-"
  $@pi2()
  $#pi2#-
  $'zeile drei nach $@$#- v1='v1
  vierte und letzte Zeile
$/tstCompDirPiSrc/ */
/*
$=/tstCompDirPi/
    ### start tst tstCompDirPi ########################################
    compile call pipePreSuf '<','>' $=v1=eiPi $<.$pi $#pi#=, 6 lines: +
    zeile 1 v1=$v1
    run without input
    <zeile 1 v1=eins>
    <zweite Zeile vor $@$#->
    <zeile drei nach $@$#- v1=V1>
    <VIERTE UND LETZTE ZEILE>
$/tstCompDirPi/ */
    call tstComp2 'tstCompDirPi',
            , "call pipePreSuf '<','>' $=v1=eiPi $<.$pi $#pi#="
    return
endProcedure tstCompDir

tstCompSql: procedure expose m.
/*
$=/tstCompSqlSrc/
$@=¢
   select strip(creator) cr, strip(name) tb,
            (row_number()over())*(row_number()over()) rr
       from sysibm.sysTables
       where creator='SYSIBM' and name like 'SYSTABL%'
       order by 2 fetch first 4 rows only
$!
$| call sqlSel
$| call fmtFTab abc
$/tstCompSqlSrc/
$=/tstCompSql/
    ### start tst tstCompSql ##########################################
    compile @, 9 lines: $@=¢
    run without input
    CR     TB                RR
    SYSIBM SYSTABLEPART       1
    SYSIBM SYSTABLEPART_HIST  4
    SYSIBM SYSTABLES          9
    SYSIBM SYSTABLESPACE     16
$/tstCompSql/
*/
    call sqlConnect
    call tstComp2 'tstCompSql', '@'

    return
endProcedure tstCompFile
tstTut0: procedure expose m.
/*
$=/tstTut01Src/
$#=
$*+>.fSub()                               Kommentar
$*+>~tmp.jcl(t)                           Kommentar
$*+@=¢                                    Kommentar
$=subsys=DBAF
$=db=DA540769
$=ts=A977A
$*+@<~wk.jcl(jc)                          Kommentar
??*  -{sysvar(sysnode) date() time()} ts=$ts 10*len=$-{length($ts) * 10}
//P02     EXEC PGM=DSNUTILB,
//             PARM='$subsys,A540769C.FULCOPL'
//SYSPRINT  DD SYSOUT=*
//UTPRINT   DD SYSOUT=*
//SYSUDUMP  DD SYSOUT=*
//SYSTEMPL  DD DSN=$subsys.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN     DD *
LISTDEF C#LIST
  INCLUDE TABLESPACE $db.$ts*   PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
  $@¢if right($ts, 2) == '7A' then $@=¢
    FULL YES
  $! else
    $$ $''    FULL NO
  $!
    SHRLEVEL CHANGE
$*+!                                      Kommentar
$#out                                              20130224 11:48:24
$/tstTut01Src/
$=/tstTut01/
    ### start tst tstTut01 ############################################
    compile , 28 lines: $#=
    run without input
    ??*  -{sysvar(sysnode) date() time()} ts=A977A 10*len=50
    //P02     EXEC PGM=DSNUTILB,
    //             PARM='DBAF,A540769C.FULCOPL'
    //SYSPRINT  DD SYSOUT=*
    //UTPRINT   DD SYSOUT=*
    //SYSUDUMP  DD SYSOUT=*
    //SYSTEMPL  DD DSN=DBAF.DBAA.LISTDEF(TEMPL),DISP=SHR
    //SYSIN     DD *
    LISTDEF C#LIST
    INCLUDE TABLESPACE DA540769.A977A*   PARTLEVEL
    OPTIONS EVENT(ITEMERROR, SKIP)
    COPY LIST C#LIST COPYDDN(TCOPYD)
    FULL YES
    SHRLEVEL CHANGE
$/tstTut01/
$=/tstTut02Src/
$#@
$**>.fSub()
$**@¢
$=subsys=DBAF
$=db=DA540769
$=jx=0
$@do tx = 976 to 977 $@=¢
    $=ts=A$tx
    $=jx=-$jx+1
//A540769$jx JOB (CP00,KE50),'DB2 REO',
//         MSGCLASS=T,TIME=1440,
//         NOTIFY=&SYSUID,REGION=0M
//C$ts    EXEC PGM=DSNUTILB,
//             PARM='$subsys,A540769$jx.FULCOPL'
//SYSPRINT  DD SYSOUT=*
//UTPRINT   DD SYSOUT=*
//SYSUDUMP  DD SYSOUT=*
//SYSTEMPL  DD DSN=$subsys.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN     DD *
LISTDEF C#LIST
  INCLUDE TABLESPACE $db.$ts*   PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
    PARALLEL
    SHRLEVEL CHANGE
$!
$**!
$#out                                              20101229 13
$/tstTut02Src/
$=/tstTut02/
    ### start tst tstTut02 ############################################
    compile , 28 lines: $#@
    run without input
    //A5407691 JOB (CP00,KE50),'DB2 REO',
    //         MSGCLASS=T,TIME=1440,
    //         NOTIFY=&SYSUID,REGION=0M
    //CA976    EXEC PGM=DSNUTILB,
    //             PARM='DBAF,A5407691.FULCOPL'
    //SYSPRINT  DD SYSOUT=*
    //UTPRINT   DD SYSOUT=*
    //SYSUDUMP  DD SYSOUT=*
    //SYSTEMPL  DD DSN=DBAF.DBAA.LISTDEF(TEMPL),DISP=SHR
    //SYSIN     DD *
    LISTDEF C#LIST
    INCLUDE TABLESPACE DA540769.A976*   PARTLEVEL
    OPTIONS EVENT(ITEMERROR, SKIP)
    COPY LIST C#LIST COPYDDN(TCOPYD)
    PARALLEL
    SHRLEVEL CHANGE
    //A5407692 JOB (CP00,KE50),'DB2 REO',
    //         MSGCLASS=T,TIME=1440,
    //         NOTIFY=&SYSUID,REGION=0M
    //CA977    EXEC PGM=DSNUTILB,
    //             PARM='DBAF,A5407692.FULCOPL'
    //SYSPRINT  DD SYSOUT=*
    //UTPRINT   DD SYSOUT=*
    //SYSUDUMP  DD SYSOUT=*
    //SYSTEMPL  DD DSN=DBAF.DBAA.LISTDEF(TEMPL),DISP=SHR
    //SYSIN     DD *
    LISTDEF C#LIST
    INCLUDE TABLESPACE DA540769.A977*   PARTLEVEL
    OPTIONS EVENT(ITEMERROR, SKIP)
    COPY LIST C#LIST COPYDDN(TCOPYD)
    PARALLEL
    SHRLEVEL CHANGE
$/tstTut02/
$=/tstTut03Src/
$#@
$=subsys=DBAF
$@|¢
      db         ts
      DGDB9998   A976
      DA540769   A977
 !
$** $| call fmtFTab
$**    $#end
$|
$=jx=0
$@forWith o $@=¢
    $=jx=-$jx+1
//A540769$jx JOB (CP00,KE50),'DB2 REO',
//         MSGCLASS=T,TIME=1440,
//         NOTIFY=&SYSUID,REGION=0M
//C$ts    EXEC PGM=DSNUTILB,
//             PARM='$subsys,A540769$jx.FULCOPL'
//SYSPRINT  DD SYSOUT=*
//UTPRINT   DD SYSOUT=*
//SYSUDUMP  DD SYSOUT=*
//SYSTEMPL  DD DSN=$subsys.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN     DD *
LISTDEF C#LIST
  INCLUDE TABLESPACE $db.$ts*   PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
    PARALLEL
    SHRLEVEL CHANGE
$!
$#out
$/tstTut03Src/
$=/tstTut03/
    ### start tst tstTut03 ############################################
    compile , 31 lines: $#@
    run without input
    //A5407691 JOB (CP00,KE50),'DB2 REO',
    //         MSGCLASS=T,TIME=1440,
    //         NOTIFY=&SYSUID,REGION=0M
    //CA976    EXEC PGM=DSNUTILB,
    //             PARM='DBAF,A5407691.FULCOPL'
    //SYSPRINT  DD SYSOUT=*
    //UTPRINT   DD SYSOUT=*
    //SYSUDUMP  DD SYSOUT=*
    //SYSTEMPL  DD DSN=DBAF.DBAA.LISTDEF(TEMPL),DISP=SHR
    //SYSIN     DD *
    LISTDEF C#LIST
    INCLUDE TABLESPACE DGDB9998.A976*   PARTLEVEL
    OPTIONS EVENT(ITEMERROR, SKIP)
    COPY LIST C#LIST COPYDDN(TCOPYD)
    PARALLEL
    SHRLEVEL CHANGE
    //A5407692 JOB (CP00,KE50),'DB2 REO',
    //         MSGCLASS=T,TIME=1440,
    //         NOTIFY=&SYSUID,REGION=0M
    //CA977    EXEC PGM=DSNUTILB,
    //             PARM='DBAF,A5407692.FULCOPL'
    //SYSPRINT  DD SYSOUT=*
    //UTPRINT   DD SYSOUT=*
    //SYSUDUMP  DD SYSOUT=*
    //SYSTEMPL  DD DSN=DBAF.DBAA.LISTDEF(TEMPL),DISP=SHR
    //SYSIN     DD *
    LISTDEF C#LIST
    INCLUDE TABLESPACE DA540769.A977*   PARTLEVEL
    OPTIONS EVENT(ITEMERROR, SKIP)
    COPY LIST C#LIST COPYDDN(TCOPYD)
    PARALLEL
    SHRLEVEL CHANGE
$/tstTut03/
$=/tstTut04Src/
$#@
$=subsys=DBAF
$=db=DA540769
call sqlConnect $subsys
$@=¢  select dbName  db , tsName  ts
          from sysibm.sysTables
          where creator = 'SYSIBM' and name like 'SYSINDEXPAR%'
          order by name desc
$!
$| call sqlSel
$** $| call fmtFTab
$** $#end
$|
$=jx=0
$@forWith o $@=¢
    $=jx=-$jx+1
//A540769$jx JOB (CP00,KE50),'DB2 REO',
//         MSGCLASS=T,TIME=1440,
//         NOTIFY=&SYSUID,REGION=0M
//C$TS    EXEC PGM=DSNUTILB,
//             PARM='$subsys,A540769$jx.FULCOPL'
//SYSPRINT  DD SYSOUT=*
//UTPRINT   DD SYSOUT=*
//SYSUDUMP  DD SYSOUT=*
//SYSTEMPL  DD DSN=$subsys.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN     DD *
LISTDEF C#LIST
  INCLUDE TABLESPACE $DB.$TS*   PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
    PARALLEL
    SHRLEVEL CHANGE
$!
call sqlDisConnect
$#out                                              20101229
$/tstTut04Src/
$=/tstTut04/
    ### start tst tstTut04 ############################################
    compile , 35 lines: $#@
    run without input
    //A5407691 JOB (CP00,KE50),'DB2 REO',
    //         MSGCLASS=T,TIME=1440,
    //         NOTIFY=&SYSUID,REGION=0M
    //CSYSHIST     EXEC PGM=DSNUTILB,
    //             PARM='DBAF,A5407691.FULCOPL'
    //SYSPRINT  DD SYSOUT=*
    //UTPRINT   DD SYSOUT=*
    //SYSUDUMP  DD SYSOUT=*
    //SYSTEMPL  DD DSN=DBAF.DBAA.LISTDEF(TEMPL),DISP=SHR
    //SYSIN     DD *
    LISTDEF C#LIST
    INCLUDE TABLESPACE DSNDB06 .SYSHIST *   PARTLEVEL
    OPTIONS EVENT(ITEMERROR, SKIP)
    COPY LIST C#LIST COPYDDN(TCOPYD)
    PARALLEL
    SHRLEVEL CHANGE
    //A5407692 JOB (CP00,KE50),'DB2 REO',
    //         MSGCLASS=T,TIME=1440,
    //         NOTIFY=&SYSUID,REGION=0M
    //CSYSTSIPT    EXEC PGM=DSNUTILB,
    //             PARM='DBAF,A5407692.FULCOPL'
    //SYSPRINT  DD SYSOUT=*
    //UTPRINT   DD SYSOUT=*
    //SYSUDUMP  DD SYSOUT=*
    //SYSTEMPL  DD DSN=DBAF.DBAA.LISTDEF(TEMPL),DISP=SHR
    //SYSIN     DD *
    LISTDEF C#LIST
    INCLUDE TABLESPACE DSNDB06 .SYSTSIPT*   PARTLEVEL
    OPTIONS EVENT(ITEMERROR, SKIP)
    COPY LIST C#LIST COPYDDN(TCOPYD)
    PARALLEL
    SHRLEVEL CHANGE
$/tstTut04/
$=/tstTut05Src/
$#@
$=subsys = dbaf
$=lst=<:¢
    db = DGDB9998
    ts =<|¢
             ts
             A976
             A977
    !;
    db = DA540769
    <|/ts/
             ts
             A976
             A975
    /ts/
!
$** $$. $lst
$** $@ct $@¢$=tool =. $.compile@ $<~.wk.rexx(wshtut06)$!
$** $@$tool
$@do sx=1 to ${lst.0} $@¢
    $=db = ${lst.$sx.db}
    $** $$. ${lst.$sx}
    $@do tx=1 to ${lst.$sx.ts.0} $@=¢
        $*+ $$. ${lst.$sx.ts.$tx}
        $=ts= ${lst.$sx.ts.$tx.ts}
        $@¢ say $-=¢subsys $subsys db $db ts $ts $! $!
        $@copy()
        $!
    $!
$@ct $@¢
cl = classNew('n? DbTsList u s' ,
     classNew('n? DbTs u f db v, f ts s' ,
     classNew('n? Ts u f ts v')))
$=lst=. oNew(cl)
$!
$@proc copy $@=¢
$@ct $=jx=0
$=jx=-$jx+1
//A540769$jx JOB (CP00,KE50),'DB2 REO',
//         MSGCLASS=T,TIME=1440,
//         NOTIFY=&SYSUID,REGION=0M
//C$ts    EXEC PGM=DSNUTILB,
//             PARM='$subsys,A540769$jx.FULCOPL'
//SYSPRINT  DD SYSOUT=*
//UTPRINT   DD SYSOUT=*
//SYSUDUMP  DD SYSOUT=*
//SYSTEMPL  DD DSN=$subsys.DBAA.LISTDEF(TEMPL),DISP=SHR
//SYSIN     DD *
LISTDEF C#LIST
  INCLUDE TABLESPACE $db.$ts*   PARTLEVEL
OPTIONS EVENT(ITEMERROR, SKIP)
COPY LIST C#LIST COPYDDN(TCOPYD)
    PARALLEL
    SHRLEVEL CHANGE
$!
$#out                                              201012
$/tstTut05Src/
$=/tstTut05/
    ### start tst tstTut05 ############################################
    compile , 56 lines: $#@
    run without input
    //A5407691 JOB (CP00,KE50),'DB2 REO',
    //         MSGCLASS=T,TIME=1440,
    //         NOTIFY=&SYSUID,REGION=0M
    //CA976    EXEC PGM=DSNUTILB,
    //             PARM='dbaf,A5407691.FULCOPL'
    //SYSPRINT  DD SYSOUT=*
    //UTPRINT   DD SYSOUT=*
    //SYSUDUMP  DD SYSOUT=*
    //SYSTEMPL  DD DSN=dbaf.DBAA.LISTDEF(TEMPL),DISP=SHR
    //SYSIN     DD *
    LISTDEF C#LIST
    INCLUDE TABLESPACE DGDB9998.A976*   PARTLEVEL
    OPTIONS EVENT(ITEMERROR, SKIP)
    COPY LIST C#LIST COPYDDN(TCOPYD)
    PARALLEL
    SHRLEVEL CHANGE
    //A5407692 JOB (CP00,KE50),'DB2 REO',
    //         MSGCLASS=T,TIME=1440,
    //         NOTIFY=&SYSUID,REGION=0M
    //CA977    EXEC PGM=DSNUTILB,
    //             PARM='dbaf,A5407692.FULCOPL'
    //SYSPRINT  DD SYSOUT=*
    //UTPRINT   DD SYSOUT=*
    //SYSUDUMP  DD SYSOUT=*
    //SYSTEMPL  DD DSN=dbaf.DBAA.LISTDEF(TEMPL),DISP=SHR
    //SYSIN     DD *
    LISTDEF C#LIST
    INCLUDE TABLESPACE DGDB9998.A977*   PARTLEVEL
    OPTIONS EVENT(ITEMERROR, SKIP)
    COPY LIST C#LIST COPYDDN(TCOPYD)
    PARALLEL
    SHRLEVEL CHANGE
    //A5407693 JOB (CP00,KE50),'DB2 REO',
    //         MSGCLASS=T,TIME=1440,
    //         NOTIFY=&SYSUID,REGION=0M
    //CA976    EXEC PGM=DSNUTILB,
    //             PARM='dbaf,A5407693.FULCOPL'
    //SYSPRINT  DD SYSOUT=*
    //UTPRINT   DD SYSOUT=*
    //SYSUDUMP  DD SYSOUT=*
    //SYSTEMPL  DD DSN=dbaf.DBAA.LISTDEF(TEMPL),DISP=SHR
    //SYSIN     DD *
    LISTDEF C#LIST
    INCLUDE TABLESPACE DA540769.A976*   PARTLEVEL
    OPTIONS EVENT(ITEMERROR, SKIP)
    COPY LIST C#LIST COPYDDN(TCOPYD)
    PARALLEL
    SHRLEVEL CHANGE
    //A5407694 JOB (CP00,KE50),'DB2 REO',
    //         MSGCLASS=T,TIME=1440,
    //         NOTIFY=&SYSUID,REGION=0M
    //CA975    EXEC PGM=DSNUTILB,
    //             PARM='dbaf,A5407694.FULCOPL'
    //SYSPRINT  DD SYSOUT=*
    //UTPRINT   DD SYSOUT=*
    //SYSUDUMP  DD SYSOUT=*
    //SYSTEMPL  DD DSN=dbaf.DBAA.LISTDEF(TEMPL),DISP=SHR
    //SYSIN     DD *
    LISTDEF C#LIST
    INCLUDE TABLESPACE DA540769.A975*   PARTLEVEL
    OPTIONS EVENT(ITEMERROR, SKIP)
    COPY LIST C#LIST COPYDDN(TCOPYD)
    PARALLEL
    SHRLEVEL CHANGE
$/tstTut05/
   tstTut06   ==> platz für copy aus tut05
$=/tstTut07Src/
$**$>.fEdit()
call sqlConnect dbtf
$@|¢  ts
VTCASHFLOW
VTCASHFLOWAMOUNT
VTINSTRFLATDATA
$!
$| $@=¢
    select name, statstime, strip(dbName) || '.' || strip(tsName) dbts
       from sysibm.sysTables
       where creator = 'VDPS2' and name in
  $=co=(
  $@forWith t $@=¢
                                           $co '$ts'
      $=co=,
  $!
                                           )
$!
$| call sqlSel
$** $| call fmtFtab
$|
$=jx=0
$@forWith t $@=¢
$=jx=-$jx+1
//A540769$jx JOB (CP00,KE50),
//       'CATALOG',MSGCLASS=T,TIME=1440,
//         NOTIFY=&SYSUID,REGION=0M
//STEP$jx EXEC PGM=DSNUTILB,TIME=1440,
//   PARM=(DBTF,'A540769$jx.RUNSTA'),
//   REGION=0M
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//UTPRINT  DD SYSOUT=*
//SYSOUT   DD SYSOUT=*
//RNPRIN01 DD SYSOUT=*
//SYSIN DD *
  LISTDEF LST#STA   INCLUDE TABLESPACE $DBTS
   OPTIONS EVENT (ITEMERROR, SKIP)

   RUNSTATS TABLESPACE LIST LST#STA
         SHRLEVEL CHANGE
           INDEX(ALL KEYCARD)
           REPORT YES UPDATE ALL
$!
call sqlDisconnect dbaf
$#out                                              20101231 11:56:23
$/tstTut07Src/
$=/tstTut07/
$=/tstTut07/
    ### start tst tstTut07 ############################################
    compile , 46 lines: $**$>.fEdit()
    run without input
    //A5407691 JOB (CP00,KE50),
    //       'CATALOG',MSGCLASS=T,TIME=1440,
    //         NOTIFY=&SYSUID,REGION=0M
    //STEP1 EXEC PGM=DSNUTILB,TIME=1440,
    //   PARM=(DBTF,'A5407691.RUNSTA'),
    //   REGION=0M
    //SYSPRINT DD SYSOUT=*
    //SYSUDUMP DD SYSOUT=*
    //UTPRINT  DD SYSOUT=*
    //SYSOUT   DD SYSOUT=*
    //RNPRIN01 DD SYSOUT=*
    //SYSIN DD *
    LISTDEF LST#STA   INCLUDE TABLESPACE VV27A1T.VDPS329
    OPTIONS EVENT (ITEMERROR, SKIP)
    ..
    RUNSTATS TABLESPACE LIST LST#STA
    SHRLEVEL CHANGE
    INDEX(ALL KEYCARD)
    REPORT YES UPDATE ALL
    //A5407692 JOB (CP00,KE50),
    //       'CATALOG',MSGCLASS=T,TIME=1440,
    //         NOTIFY=&SYSUID,REGION=0M
    //STEP2 EXEC PGM=DSNUTILB,TIME=1440,
    //   PARM=(DBTF,'A5407692.RUNSTA'),
    //   REGION=0M
    //SYSPRINT DD SYSOUT=*
    //SYSUDUMP DD SYSOUT=*
    //UTPRINT  DD SYSOUT=*
    //SYSOUT   DD SYSOUT=*
    //RNPRIN01 DD SYSOUT=*
    //SYSIN DD *
    LISTDEF LST#STA   INCLUDE TABLESPACE VV28A1T.VDPS390
    OPTIONS EVENT (ITEMERROR, SKIP)
    ..
    RUNSTATS TABLESPACE LIST LST#STA
    SHRLEVEL CHANGE
    INDEX(ALL KEYCARD)
    REPORT YES UPDATE ALL
    //A5407693 JOB (CP00,KE50),
    //       'CATALOG',MSGCLASS=T,TIME=1440,
    //         NOTIFY=&SYSUID,REGION=0M
    //STEP3 EXEC PGM=DSNUTILB,TIME=1440,
    //   PARM=(DBTF,'A5407693.RUNSTA'),
    //   REGION=0M
    //SYSPRINT DD SYSOUT=*
    //SYSUDUMP DD SYSOUT=*
    //UTPRINT  DD SYSOUT=*
    //SYSOUT   DD SYSOUT=*
    //RNPRIN01 DD SYSOUT=*
    //SYSIN DD *
    LISTDEF LST#STA   INCLUDE TABLESPACE VV21A1T.VDPS004
    OPTIONS EVENT (ITEMERROR, SKIP)
    ..
    RUNSTATS TABLESPACE LIST LST#STA
    SHRLEVEL CHANGE
    INDEX(ALL KEYCARD)
    REPORT YES UPDATE ALL
$/tstTut07/
$=/tstTut08Src/
$/tstTut08Src/
$=/tstTut08/
$/tstTut08/
*/
    call sqlOIni
    call sqlDisconnect '*'
    call tstComp2 'tstTut01'
    call tstComp2 'tstTut02'
    call tstComp2 'tstTut03'
    call tstComp2 'tstTut04'
    call tstComp2 'tstTut05'
    call tstComp2 'tstTut07'
    call tstTotal
    return
endProcedure tstTut0
/* copx tstComp end   *************************************************/
/* copx tstBase begin **************************************************
     test the basic classes
***********************************************************************/
tstBase: procedure expose m.
    call tstTstSay
    call oIni
    call scanIni
    call tstO
    call tstM
    call classIni
    call tstMCat
    call tstMap
    call tstMapVia
    call tstClass
    call tstClass2
    call tstOEins
    call tstOGet
    call jIni
    call tstJSay
    call tstJ
    call tstJ2
    call tstJCatSql
    call catIni
    call tstCat
    call pipeIni
    CALL TstEnv
    CALL TstEnvCat
    call tstPipe
    call tstPipeS
    call tstEnvVars
    call tstEnvWith
    call tstTotal
    call tstPipeLazy
    call tstEnvClass
    call tstFile
    call tstFileList
    call tstF
    call tstFTab
    call tstFmt
    call tstFmtUnits
    call tstTotal
    call tstSb
    call tstSb2
    call tstScan
    call ScanReadIni
    call tstScanRead
    call tstScanUtilInto
    call tstScanWin
    call tstScanSQL
    call tstTotal
    return
endProcedure tstBase

/*--- test the tst Module, check the output visually  ----------------*/
tstTstSay: procedure expose m.
    call tstIni
    oldErr = m.tst.err
    oldNames = m.tst.errNames
    say '+++ tstTstSay start with' oldErr 'totErrs and',
            m.tst.tests 'tests'
/*
$=/tstTstSayEins/
    ### start tst tstTstSayEins #######################################
    test eins einzige testZeile
$/tstTstSayEins/
$=/tstTstSayZwei/
    ### start tst tstTstSayZwei #######################################
    zwei 1. testZeile
    zwei 2. und letzte testZeile
$/tstTstSayZwei/
$=/tstTstSayDrei/
    ### start tst tstTstSayDrei #######################################
    drei 1. testZeile vor empty Zeile
    ..
    drei 3. testZeile vor 10 space
    .          .
    drei 5. testZeile ziemlich lang 66                                 +
    .                                77  5   10   15++++++++++++++++++++
    .+++++++++++++++++++++++++++++++++++++++++++.
$/tstTstSayDrei/
*/
    call tst x, 'tstTstSayEins'
    call tstOut x, "test eins einzige testZeile"
    call tstEnd x, 'err 0'


    call tst x, 'tstTstSayZwei'
    call tstOut x, "zwei 1. testZeile"
    call tstOut x, "zwei 2. und letzte testZeile"
    call tstEnd x, 'err 0'

    call tst x, 'tstTstSayZwei'
    call tstOut x, "zwei 1. testZeile "    /* ein space zuviel */
    call tstOut x, "zwei 2. und letzte testZeile"
    call tstOut x, "zwei 3. zuviel"
    call tstEnd x, 'err 3'

    call tst y, 'tstTstSayDrei'
    call tstOut y, 'drei 1. testZeile vor empty Zeile'
    call tstOut y, ''
    call tstOut y, 'drei 3. testZeile vor 10 space'
    call tstOut y, left('', 10)
    call tstOut y, 'drei 5. testZeile ziemlich lang',
                left(66, 66) left('77  5   10   15', 77, '+')
    call tstEnd y, 'err 0'
    if m.y.err <> 0 then
        call err '+++ tstTstSay errs' m.x.err 'expected' 0
    if m.tst.err <> oldErr + 3 then
        call err '+++ tstTstSay totErrs' m.tst.err 'expected' 3
    say '+++ tstTstSay end Ok with' m.tst.err 'totErrs and' ,
        m.tst.tests 'tests'
    m.tst.err = oldErr
    m.tst.errNames = oldNames
    return
endProcedure tstTstSay

tstMark: procedure expose m.
parse arg m, msg
    if symbol('m.m') == 'VAR' then
        m.m = msg';' m.m
    else
        m.m = msg 'new'
    return m
endProcedure tstMark
tstM: procedure expose m.
/*
$=/tstMa/
    ### start tst tstMa ###############################################
    mNew() 1=newM1 2=newM2
    mNew(tst...) 2=2 new 3=4; 3; 1 new 4=5 new
    iter 4; 3; 1 new
    iter 2 new
    iter 5 new
$/tstMa/
*/
    call tst t, 'tstMa'
    m1 = mNew()
    m2 = mNew()
    m.m1 = 'newM1'
    m.m2 = 'newM2'
    call tstOut t, 'mNew() 1='m.m1 '2='m.m2
    call mNewArea 'tst'm1
    t1 = tstMark(mNew('tst'm1), '1')
    t2 = tstMark(mNew('tst'm1), '2')
    call mFree tstMark(t1, '3')
    t3 = tstMark(mNew('tst'm1), '4')
    t4 = tstMark(mNew('tst'm1), '5')
    call tstOut t, 'mNew(tst...) 2='m.t2 '3='m.t3 '4='m.t4
    i = mIterBegin('tst'm1)
    do while assNN('i', mIter(i))
        call tstOut t, 'iter' m.i
        end
    call tstEnd t
/*
$=/tstM/
    ### start tst tstM ################################################
    symbol m.b LIT
    symbol m.a LIT
    mAdd a A.2
    mAdd a A.3
    m.a: 3: 1=eins 2=zwei 3=drei 4=M.A.4
    m.c: 5: 1=c vorAddSt a 2=eins 3=zwei 4=drei 5=c nacAddSt a 6=M.C.6
$/tstM/ */


    drop m.b m.a m.a.0 m.a.1 m.a.2
    call tst t, 'tstM'
    call tstOut t, 'symbol m.b' symbol('m.b')
    m.b = 1
    call tstOut t, 'symbol m.a' symbol('m.a')
    call tstOut t, 'mAdd a' mAdd(mCut(a, 0), 'eins', 'zwei')
    call tstOut t, 'mAdd a' mAdd(a, 'drei')
    call tstOut t, 'm.a:' m.a.0': 1='m.a.1 '2='m.a.2 '3='m.a.3 '4='m.a.4
    call mAdd mCut(c, 0), 'c vorAddSt a'
    call mAddSt c, a
    call mAdd c, 'c nacAddSt a'
    call tstOut t, 'm.c:' m.c.0': 1='m.c.1 '2='m.c.2 '3='m.c.3,
                    '4='m.c.4 '5='m.c.5 '6='m.c.6
    call tstEnd t
    return
endProcedure tstM

tstMCat: procedure expose m.
/*
$=/tstMCat/
    ### start tst tstMCat #############################################
    mCat(0, )                     =;
    mCat(0, %qn1%s)               =;
    mCat(0, %qn112222%s%qe%s11)   =;
    mCat(0, 1%s%qn231%s%qe%s2)    =;
    mCat(0, 1%s2@%s%qn33341%s2@%s%=;
    mCat(0, 1%s2@%s3@%s%qn451%s2@%=;
    mCat(1, )                     =eins;
    mCat(1, %qn1%s)               =eins;
    mCat(1, %qn112222%s%qe%s11)   =eins11;
    mCat(1, 1%s%qn231%s%qe%s2)    =1eins2;
    mCat(1, 1%s2@%s%qn33341%s2@%s%=1eins2eins333;
    mCat(1, 1%s2@%s3@%s%qn451%s2@%=1eins2eins3eins4;
    mCat(2, )                     =einszwei;
    mCat(2, %qn1%s)               =eins1zwei;
    mCat(2, %qn112222%s%qe%s11)   =eins112222zwei11;
    mCat(2, 1%s%qn231%s%qe%s2)    =1eins231zwei2;
    mCat(2, 1%s2@%s%qn33341%s2@%s%=1eins2eins33341zwei2zwei333;
    mCat(2, 1%s2@%s3@%s%qn451%s2@%=1eins2eins3eins451zwei2zwei3zwei4;
    mCat(3, )                     =einszweidrei;
    mCat(3, %qn1%s)               =eins1zwei1drei;
    mCat(3, %qn112222%s%qe%s11)   =eins112222zwei112222drei11;
    mCat(3, 1%s%qn231%s%qe%s2)    =1eins231zwei231drei2;
    mCat(3, 1%s2@%s%qn33341%s2@%s%=1eins2eins33341zwei2zwei33341drei2dr+
    ei333;
    mCat(3, 1%s2@%s3@%s%qn451%s2@%=1eins2eins3eins451zwei2zwei3zwei451d+
    rei2drei3drei4;
$/tstMCat/ */
    call mIni
    call tst t, "tstMCat"
     m.qq.1 = "eins"
     m.qq.2 = "zwei"
     m.qq.3 = "drei"
     do qx = 0 to 3
         m.qq.0 = qx
         call tstMCat1 qx
         call tstMCat1 qx, '%qn1%s'
         call tstMCat1 qx, '%qn112222%s%qe%s11'
         call tstMCat1 qx, '1%s%qn231%s%qe%s2'
         call tstMCat1 qx, '1%s2@%s%qn33341%s2@%s%qe333'
         call tstMCat1 qx, '1%s2@%s3@%s%qn451%s2@%s3@%s%qe4'
         end
     call tstEnd t
     return
endProcedure tstMCat

tstMCat1: procedure expose m.
parse arg m.qq.0, fmt
    call out left("mCat("m.qq.0"," fmt")", 30)"="mCat(qq, fmt)";"
return
endProcedure tstMCat1

tstMap: procedure expose m.
/*
$=/tstMap/
    ### start tst tstMap ##############################################
    mapNew m keys m-keys 0
    map m zwei --> 2
    map m Zwei is not defined
    map stem m-keys 4
    map m eins --> 1
    map m zwei --> 2
    map m drei --> 3
    map m vier --> 4
    *** err: duplicate key eins in map m
    map m zwei is not defined
    q 2 zw dr
    map stem Q 2
    map Q zw --> 2Q
    map Q dr --> 3Q
    map stem m 3
    map m eins --> 1
    map m zwei --> 2PUT
    map m vier --> 4PUT
    *** err: duplicate key zwei in map m
    tstMapLong eins keys 3
    tstMapLong zweiMal keys 48
    tstMapLong dreiMal keys 93
    tstMapLong vier    keys 138
    tstMapLong <fuenf> keys 188
    tstMap clear keys 0
    inline1 3
    inline1 1 ==    inline1 eins==
    inline1 2 ====
    inline1 3 ==    inline1 drei==
    inline2 1 1 ==    inline2 eins==
    inline3 ?
$/tstMap/ */
/*
$=/tstMapInline1/
    inline1 eins

    inline1 drei
$/tstMapInline1/ */
/*
$=/tstMapInline2/
    inline2 eins
$/tstMapInline2/ */

    call tst t, 'tstMap'
    m = mapNew('K')
    ky = mapKeys(m)
    call mAdd t'.TRANS', m 'm', ky 'm-keys'
    call tstOut t, 'mapNew' m 'keys' ky m.ky.0
    call mapAdd m, 'eins', 1
    call mapAdd m, 'zwei', 2
    call mapAdd m, 'drei', 3
    call mapAdd m, 'vier', 4
    call tstMapShow m, 'zwei'
    call tstMapShow m, 'Zwei'
    call tstMapShowSt m, mapKeys(m)
    call mapAdd m, 'eins', 1
    call mapReset m, '='
    call tstMapShow m, 'zwei'
    call mapAdd m, 'eins', 1
    call mapAdd m, 'zwei', 2
    call mapPut m, 'zwei', 2Put
    call mapPut m, 'vier', 4Put
    call mapReset q, '='
    call mapAdd q, 'zw', 2q
    call mapAdd q, 'dr', 3q
    call tstOut t, 'q' m.q.0 m.q.1 m.q.2
    call tstMapShowSt q, mapKeys(q)
    call tstMapShowSt m, mapKeys(m)
    call mapAdd m, 'zwei', 2addDup
    call tstMapLong m, 'eins'      ,201, 2000, -2, 2
    call tstMapLong m, 'zweiMal'   ,201, 2000, -2, 2
    call tstMapLong m, 'dreiMal'   ,201, 2000,  2,-2
    call tstMapLong m, 'vier   '   ,2010, 201, -2, 2
    call tstMapLong m, '<fuenf>'   ,2010, 201,  2,-2
    call mapClear m
    keys = mapKeys(m)
    call tstOut t, 'tstMap clear keys' m.keys.0
    i = mapInline('tstMapInline1')
    call tstOut t, 'inline1' m.i.0
    do x=1 to m.i.0
        call tstOut t, 'inline1' x '=='m.i.x'=='
        end
    i = mapInline('tstMapInline2')
    call tstOut t, 'inline2' m.i.0 '1 =='m.i.1'=='
    call tstOut t, 'inline3' mapInline('tstMapInline3', 'r')'?'
    call tstEnd t
    return
endProcedure tstMap

tstMapLong: procedure expose m.
parse arg m, w, f1, t1, f2, t2
    if f1 < t1 then
        b1 = 201
    else
        b1 = -201
    if f2 < t2 then
        b2 = 1
    else
        b2 = -1
    lo = copies(w, 2100 % length(w))
    keys = mapKeys(m)
    keyCn = m.keys.0
    call tstOut t, 'tstMapLong' w 'keys' keyCn
    do x = f1 by b1 to t1
        do y = x+f2 by b2 to x+t2
            k = left(lo, y)
            if mapHasKey(m, k) then
                call err 'mapLong hasKey before' w y
            call mapAdd m, k, w y
            if \ mapHasKey(m, k) then
                call err 'mapLong \ hasKey after' w y
            if mapGet(m, k) \== w y then
                call err 'mapLong \ get <> ' w y
            keys = mapKeys(m)
            if keyCn + 1 \= m.keys.0 then
                call err 'mapLong keys .0 <> ' w y
            keyCn = m.keys.0
            if k \== m.keys.keyCn then
                call err 'mapLong keys . ' keyCn '<>' w y
            end
        end
    return
endProcedure tstMapLong

tstMapVia: procedure expose m.
/*
$=/tstMapVia/
    ### start tst tstMapVia ###########################################
    map M K --> A
    mapVia(m, K)      A
    *** err: missing m.A at 3 in mapVia(M, K|)
    mapVia(m, K|)     M.A
    mapVia(m, K|)     valAt m.a
    mapVia(m, K|)     valAt m.a
    *** err: missing m.A.aB at 5 in mapVia(M, K|aB)
    mapVia(m, K|aB)   M.A.aB
    mapVia(m, K|aB)   valAt m.A.aB
    *** err: missing m.valAt m.a at 4 in mapVia(M, K||)
    mapVia(m, K||)    M.valAt m.a
    mapVia(m, K||)    valAt m.valAt m.a
    mapVia(m, K||F)   valAt m.valAt m.a.F
$/tstMapVia/ */
    call tst t, 'tstMapVia'
    u = 'A.aB'
    v = 'valAt m.a'
    drop m.a m.u m.v m.v.f
    call mapReset m, 'K'
    call mapAdd m, k, a
    call tstMapShow m, k
    call tstOut t, 'mapVia(m, K)     ' mapVia(m, 'K')
    call tstOut t, 'mapVia(m, K|)    ' mapVia(m, 'K|')
    m.a = v
    call tstOut t, 'mapVia(m, K|)    ' mapVia(m, 'K|')
    call tstOut t, 'mapVia(m, K|)    ' mapVia(m, 'K|')
    call tstOut t, 'mapVia(m, K|aB)  ' mapVia(m, 'K|aB')
    m.u = 'valAt m.'u
    call tstOut t, 'mapVia(m, K|aB)  ' mapVia(m, 'K|aB')
    call tstOut t, 'mapVia(m, K||)   ' mapVia(m, 'K||')
    v = m.a
    m.v = 'valAt m.'v
    m.v.f = 'valAt m.'v'.F'
    call tstOut t, 'mapVia(m, K||)   ' mapVia(m, 'K||')
    call tstOut t, 'mapVia(m, K||F)  ' mapVia(m, 'K||F')
    call tstEnd t
    return
endProcedure tstMapVia

tstMapShow: procedure expose m.
parse arg a, key
    if mapHasKey(a, key) then
        call tstOut t, 'map' a key '-->' mapGet(a, key)
    else
        call tstOut t, 'map' a key 'is not defined'
    return
endProcedure tstMapShow

tstMapShowSt: procedure expose m.
parse arg a, st
    call tstOut t, 'map stem' st m.st.0
    do wx=1 to m.st.0
        call tstMapShow a, m.st.wx
        end
    return
endProcedure tstMapShow

tstClass2: procedure expose m.
/*
$=/tstClass2o2/
    ### start tst tstClass2 ###########################################
    @CLASS.5 isA :class = u
    . choice u union
    .  .NAME = class
    .  stem 7
    .   .1 refTo @CLASS.1 :class = u
    .    choice v union
    .    choice c union
    .     .NAME = u
    .     .CLASS refTo @CLASS.15 :class = s
    .      choice s .CLASS refTo @CLASS.12 done :class @CLASS.12
    .   .2 refTo @CLASS.6 :class = c
    .    choice c union
    .     .NAME = v
    .     .CLASS refTo @CLASS.7 :class = u
    .      choice u stem 0
    .   .3 refTo @CLASS.8 :class = c
    .    choice c union
    .     .NAME = w
    .     .CLASS refTo @CLASS.7 done :class @CLASS.7
    .   .4 refTo @CLASS.9 :class = c
    .    choice c union
    .     .NAME = o
    .     .CLASS refTo @CLASS.7 done :class @CLASS.7
    .   .5 refTo @CLASS.10 :class = c
    .    choice c union
    .     .NAME = s
    .     .CLASS refTo @CLASS.11 :class = f
    .      choice f union
    .       .NAME = CLASS
    .       .CLASS refTo @CLASS.12 :class = r
    .        choice r .CLASS refTo @CLASS.5 done :class @CLASS.5
    .   .6 refTo @CLASS.13 :class = c
    .    choice c union
    .     .NAME = r
    .     .CLASS refTo @CLASS.11 done :class @CLASS.11
    .   .7 refTo @CLASS.14 :class = c
    .    choice c union
    .     .NAME = u
    .     .CLASS refTo @CLASS.15 :class = s
    .      choice s .CLASS refTo @CLASS.12 done :class @CLASS.12
    .   .8 refTo @CLASS.16 :class = c
    .    choice c union
    .     .NAME = n
    .     .CLASS refTo @CLASS.17 :class = u
    .      choice u stem 2
    .       .1 refTo @CLASS.18 :class = f
    .        choice f union
    .         .NAME = NAME
    .         .CLASS refTo @CLASS.1 done :class @CLASS.1
    .       .2 refTo @CLASS.15 done :class @CLASS.15
    .   .9 refTo @CLASS.19 :class = c
    .    choice c union
    .     .NAME = f
    .     .CLASS refTo @CLASS.20 :class = u
    .      choice u stem 2
    .       .1 refTo @CLASS.18 done :class @CLASS.18
    .       .2 refTo @CLASS.11 done :class @CLASS.11
    .   .10 refTo @CLASS.21 :class = c
    .    choice c union
    .     .NAME = c
    .     .CLASS refTo @CLASS.20 done :class @CLASS.20
    .   .11 refTo @CLASS.22 :class = c
    .    choice c union
    .     .NAME = m
    .     .CLASS refTo @CLASS.23 :class = u
    .      choice u stem 2
    .       .1 refTo @CLASS.18 done :class @CLASS.18
    .       .2 refTo @CLASS.24 :class = f
    .        choice f union
    .         .NAME = MET
    .         .CLASS refTo @CLASS.1 done :class @CLASS.1
$/tstClass2o2/

$=/tstClass2/
    ### start tst tstClass2 ###########################################
    @CLASS.4 isA :class = u
    . choice u union
    .  .NAME = class
    .  stem 7
    .   .1 refTo @CLASS.1 :class = u
    .    choice u union
    .     .NAME = v
    .     stem 2
    .      .1 refTo @CLASS.20 :class = m
    .       choice m union
    .        .NAME = o2String
    .        .MET = return m.m
    .      .2 refTo @CLASS.108 :class = m
    .       choice m union
    .        .NAME = o2File
    .        .MET = return file(m.m)
    .   .2 refTo @CLASS.5 :class = c
    .    choice c union
    .     .NAME = u
    .     .CLASS refTo @CLASS.6 :class = u
    .      choice u union
    .       .NAME = .
    .       stem 2
    .        .1 refTo @CLASS.7 :class = f
    .         choice f union
    .          .NAME = NAME
    .          .CLASS refTo @CLASS.1 done :class @CLASS.1
    .        .2 refTo @CLASS.8 :class = s
    .         choice s .CLASS refTo @CLASS.9 :class = r
    .          choice r .CLASS refTo @CLASS.4 done :class @CLASS.4
    .   .3 refTo @CLASS.10 :class = c
    .    choice c union
    .     .NAME = f
    .     .CLASS refTo @CLASS.11 :class = u
    .      choice u union
    .       .NAME = .
    .       stem 2
    .        .1 refTo @CLASS.7 done :class @CLASS.7
    .        .2 refTo @CLASS.12 :class = f
    .         choice f union
    .          .NAME = CLASS
    .          .CLASS refTo @CLASS.9 done :class @CLASS.9
    .   .4 refTo @CLASS.13 :class = c
    .    choice c union
    .     .NAME = s
    .     .CLASS refTo @CLASS.12 done :class @CLASS.12
    .   .5 refTo @CLASS.14 :class = c
    .    choice c union
    .     .NAME = c
    .     .CLASS refTo @CLASS.11 done :class @CLASS.11
    .   .6 refTo @CLASS.15 :class = c
    .    choice c union
    .     .NAME = m
    .     .CLASS refTo @CLASS.16 :class = u
    .      choice u union
    .       .NAME = .
    .       stem 2
    .        .1 refTo @CLASS.7 done :class @CLASS.7
    .        .2 refTo @CLASS.17 :class = f
    .         choice f union
    .          .NAME = MET
    .          .CLASS refTo @CLASS.1 done :class @CLASS.1
    .   .7 refTo @CLASS.18 :class = c
    .    choice c union
    .     .NAME = r
    .     .CLASS refTo @CLASS.12 done :class @CLASS.12
$/tstClass2/ */

    call classIni
    call tst t, 'tstClass2'
    call classOut , m.class.class
    call tstEnd t
    return
endProcedure tstClass2

tstClass: procedure expose m.
/*
$=/tstClass/
    ### start tst tstClass ############################################
    Q u =className= tstClassTf12
    Q.eins.zwei v ==> M.Q.eins.zwei
    *** err: bad type v: classNew(v tstClassTf12)
    *** err: bad type v: classBasicNew(v, tstClassTf12, )
    R u =className= uststClassTf12
    R u =className= uststClassTf12in
    R u =className= tstClassTf12
    R.eins.zwei v ==> M.R.eins.zwei
    R s =stem.0= 2
    R.1 r ==> M.R.1 :CLASS.3
    R.1 u =className= tstClassTf12
    R.1.eins.zwei v ==> M.R.1.eins.zwei
    R.2 r ==> M.R.2 :CLASS.3
    R.2 u =className= tstClassTf12
    R.2.eins.zwei v ==> M.R.2.eins.zwei
    S u =className= TstClass7
    S s =stem.0= 2
    S.1 u =className= TstClass7s
    S.1.eins v ==> M.S.1.eins
    S.1 m =met-metA--> say "metA"
    S.1 m =met-metB--> say "metB"
    S.2 u =className= TstClass7s
    S.2.zwei v ==> M.S.2.zwei
    S.2 m =met-metA--> say "metA"
    S.2 m =met-metB--> say "metB"
    class of mutate qq tstClassTf12
$/tstClass/ */

    f = 'eins.zwei'
    e = 'eins'
    z = 'zwei'
    drop m.q.f m.r.f m.r.0 m.r.1 m.r.1.f m.r.2 m.r.2.f
    drop m.s.0 m.s.1 m.s.1.e m.s.2 m.s.2.z
    call classIni
    call tst t, 'tstClass'
    t1  =  classNew('n? tstClassTf12 u f eins f zwei v')
    call tstClassOut t, t1, q
    z = m.class.0
    if class4name('tstClassB', '') == '' then do
        t2 = classNew('n tstClassB u n tstClassC u tstClassTf12,',
            's u v tstClassTf12')
        end
    else do /*  the second time we would get a duplicate error */
        call tstOut t, '*** err: bad type v: classNew(v tstClassTf12)'
        call tstOut t, '*** err: bad type v:' ,
            'classBasicNew(v, tstClassTf12, )'
        end
    t2 = classNew('n? uststClassTf12 u' ,
           'n? uststClassTf12in u tstClassTf12',
        , classNew('s u r, tstClassTf12'))
    m.r.0 = 2
    call tstClassOut t, t2, r
    t3 = classNew('n? TstClass7 u s',
         classNew('n? TstClass7s u c 1 f eins v, c 2 f zwei v',
            ,'m', 'metA say "metA"', 'metB say "metB"'))
    m.s.0 = 2
    m.s.1 = 1
    m.s.2 = 2
    call tstClassOut t, t3, s
    call oMutatName qq, 'tstClassTf12'
    tt = objClass(qq)
    call tstOut t, 'class of mutate qq' className(tt)
    call tstEnd t
    return
endProcedure tstClass

tstClassOut: procedure expose m.
parse arg o, t, a
    if wordPos(t, m.class.classV m.class.classW m.class.classO) > 0 then
        return tstOut(o, a m.t.name '==>' m.a)
    if m.t == 'r' then
        return tstOut(o, a m.t '==>' m.a ':'m.t.class)
    if m.t == 'u' & m.t.name \== '' then
        call tstOut o, a m.t '=className=' m.t.name
    if m.t == 'f' then
        return tstClassOut(o, m.t.class, a'.'m.t.name)
    if m.t = 'u' then do
        do ux=1 to m.t.0
            call tstClassOut o, m.t.ux, a
            end
        return 0
        end
    if m.t = 's' then do
        call tstOut o, a m.t '=stem.0=' m.a.0
        do ux=1 to m.a.0
            call tstClassOut o, m.t.class, a'.'ux
            end
        return 0
        end
    if m.t = 'c' then do
        if m.t.name = m.a then
            call tstClassOut o, m.t.class, a
         return 0
        end
    if m.t = 'm' then
        return tstOut(o, a m.t '=met-'m.t.name'-->' m.t.met)
    call err 'bad class type' m.t
endProcedure tstClassOut


tstO: procedure expose m.
/*
$=/tstO/
    ### start tst tstO ################################################
    oIsCla(TstOCla1) 0
    TstOCla1 -
    oIsCla(TstOCla1) 1
    TstOCla1 -
    oIsCla(TstOCla1) 1
    TstOCla1 contents of met1
    TstOCla1.met2 -
    TstOCla2.met1 contents of met1
    TstOCla2.met2 contents of met2
    TstOCla1.TstOMet3 -
    TstOCla1.TstOMet3 generated met TstOCla1:TstOMet3 code...;
    TstOCla2.TstOMet3 generated met TstOCla2:TstOMet3 code...;
    tstOObj1.met1 -
    tstOObj1.met1 contents of met1
$/tstO/
*/
    call mIni
    call tst t, 'tstO'
    call oIni
    c1 = 'TstOCla1'
    c2 = 'TstOCla2'
    m1 = 'met1'
    m2 = 'met2'
    m3 = 'TstOMet3'
    lg = m.o.lazyGen
    call tstOut t, 'oIsCla('c1')' oIsCla(c1)
    call tstOut t, c1 oClaMet(c1, 'met1', '-')
    call oAddCla c1
    call tstOut t, 'oIsCla('c1')' oIsCla(c1)
    call tstOut t, c1 oClaMet(c1, 'met1', '-')
    call oAddMet c1, m1, 'contents of met1'
    call tstOut t, 'oIsCla('c1')' oIsCla(c1)
    call tstOut t, c1 oClaMet(c1, m1, '-')
    call oAddCla c2, c1
    call oAddMet c2, 'met2', 'contents of met2'
    call tstOut t, c1'.met2' oClaMet(c1, 'met2', '-')
    call tstOut t, c2'.'m1 oClaMet(c2, m1, '-')
    call tstOut t, c2'.met2' oClaMet(c2, 'met2', '-')
    call tstOut t, c1'.'m3 oClaMet(c1, m3, '-')
    call oAddMet lg, m3,
            , "return 'generated met' cl':'me 'code...;'"
    call tstOut t, c1'.'m3 oClaMet(c1, m3, '-')
    call tstOut t, c2'.'m3 oClaMet(c2, m3, '-')
    o1 = 'tstOObj1'
    o2 = 'tstOObj2'
    call tstOut t, o1'.met1' objMet(o1, 'met1', '-')
    call oMutate o1, c1
    call tstOut t, o1'.met1' objMet(o1, 'met1', '-')
    call tstEnd t
    drop m.o.cParent.c1 m.o.cMet.c1.m1 m.o.cMet.c1.m2 m.o.cMet.c1.m3
    drop m.o.cParent.c2 m.o.cMet.c2.m1 m.o.cMet.c2.m2 m.o.cMet.c2.m3
    drop m.o.o2c.o1                                   m.o.cMet.lg.m3
    return
endProcedure tstO


tstOEins: procedure expose m.
/*
$=/tstOEins/
    ### start tst tstOEins ############################################
    class method calls of TstOEins
    .  met Eins.eins M
     FLDS of <obj e of TstOEins> .FEINS, .FZWEI
     methodcalls of object e of TstOEins
    .  met Eins.eins <obj e of TstOEins>
    .  met Eins.zwei <obj e2 of TstOEins>
    *** err: no method nein in class TstOEins of object <obj e+
    . of TstOEins>
    *** err: no class found for object noObj
    class method calls of TstOEins
    .  met Elf.zwei M
    FLDS of <obj f of TstOElf> .FEINS, .FZWEI, .FELF
    methodcalls of object f of TstOElf
    .  met Eins.eins <obj f of TstOElf>
    .  met Elf.zwei <obj f of TstOElf>
    .  met Elf.drei <obj f of TstOElf>
    oCopy c1 of class TstOEins, c2
    C1 u =className= TstOEins
    C1.FEINS v ==> M.C1.FEINS
    C1.FZWEI v ==> M.C1.FZWEI
    C1 m =met-eins--> call tstOut t, "  met Eins.eins" m
    C1 m =met-zwei--> call tstOut t, "  met Eins.zwei" m
    C2 u =className= TstOEins
    C2.FEINS v ==> M.C1.FEINS
    C2.FZWEI v ==> M.C1.FZWEI
    C2 m =met-eins--> call tstOut t, "  met Eins.eins" m
    C2 m =met-zwei--> call tstOut t, "  met Eins.zwei" m
    oCopy c3 of class TstOElf, c4
    C4 u =className= TstOElf
    C4 u =className= TstOEins
    C4.FEINS v ==> M.C3.FEINS
    C4.FZWEI v ==> M.C3.FZWEI
    C4 m =met-eins--> call tstOut t, "  met Eins.eins" m
    C4 m =met-zwei--> call tstOut t, "  met Eins.zwei" m
    C4.FELF r ==> M.C3.FELF :CLASS.3
    C4 m =met-zwei--> call tstOut t, "  met Elf.zwei" m
    C4 m =met-drei--> call tstOut t, "  met Elf.drei" m
    tEinsDop <class TstOEins>
    oRun 7*3 21
    oRun 12*12 144
$/tstOEins/ */
    call classIni
    call tst t, 'tstOEins'
    tEins = classNew('n? TstOEins u f FEINS v,f FZWEI v', 'm',
           , 'eins call tstOut t, "  met Eins.eins" m',
           , 'zwei call tstOut t, "  met Eins.zwei" m')
    call mAdd t.trans, tEins '<class TstOEins>'
    call tstOut t, 'class method calls of TstOEins'
    interpret oClaMet('TstOEins', 'eins')
    e = oNew('TstOEins')
    e2 = oNew('TstOEins')
    call mAdd t.trans, e '<obj e of TstOEins>'
    call mAdd t.trans, e2 '<obj e2 of TstOEins>'
    call tstOut t, 'FLDS of' e mCat(oFlds(e), '%qn, %s')
    call tstOut t, 'methodcalls of object e of TstOEins'
    call tstOmet e, 'eins'
    call tstOmet e2, 'zwei'
    call tstOmet e, 'nein'
    call tstOmet 'noObj', 'nein'
    tElf = classNew('n? TstOElf u TstOEins, f FELF r', 'm',
        , 'zwei call tstOut t, "  met Elf.zwei" m',
        , 'drei call tstOut t, "  met Elf.drei" m')
    call tstOut t, 'class method calls of TstOEins'
    interpret oClaMet('TstOElf', 'zwei')
    f = oNew('TstOElf')
    call mAdd t.trans, f '<obj f of TstOElf>'
    call tstOut t, 'FLDS of' f mCat(oFlds(f), '%qn, %s')
    call tstOut t, 'methodcalls of object f of TstOElf'
    call tstOmet f, 'eins'
    call tstOmet f, 'zwei'
    call tstOmet f, 'drei'
/*  call tstOut t, 'methodcalls of object f cast To TstOEins'
    call tstOmet oCast(f, 'TstOEins'), 'eins'
    call tstOmet oCast(f, 'TstOEins'), 'zwei'
    call tstOut t, 'FLDS of <cast(f, TstOEins)>',
        mCat(oFlds(oCast(f, 'TstOEins')), '%qn, %s')
 */
    call oMutatName c1, 'TstOEins'
    call tstOut t, 'oCopy c1 of class TstOEins, c2'
    call tstClassOut t, tEins, c1
    call oCopy c1, c2
    call tstClassOut t, tEins, c2
    call tstOut t, 'oCopy c3 of class TstOElf, c4'
    call oMutatName c3, 'TstOElf'
    call oCopy c3, c4
    call tstClassOut t, tElf, c4

/*    tEinsDop = classNew('n TstOEins u f FEINS v,f FZWEI v', 'm',
           , 'eins call tstOut t, "  met Eins.eins" m',
           , 'zwei call tstOut t, "  met Eins.zwei" m')
*/ tEinsDop = tEins
    call tstOut t, 'tEinsDop' tEinsDop
    e3 = oNew('TstOEins')
    if e3 <<= e | e3 <<= e2 then
        call err 'doppelt reinitialised objects'
    rr = oRunner('return 7 * 3')
    call tstOut t, 'oRun 7*3' oRun(rr)
    r12 = oRunner('return 12 * 12')
    call tstOut t, 'oRun 12*12' oRun(r12)
    call tstEnd t
    return
endProcedure tstOEins

tstOmet: procedure expose m.
parse arg m, met
    interpret objMet(m, met)
    return
endProcedure tstOmet

tstOGet: procedure expose m.
/*
$=/tstOGet/
    ### start tst tstOGet #############################################
    class.NAME= class
    class.NAME= class : w
    class|    = u
    *** err: bad stem index 91>7 @ CLASS.4 class class in oGet(CLASS.4,+
    . 91)
    class.91  = 0
    class.1   = CLASS.1 |= u
    class.2   = CLASS.5 |= c
$/tstOGet/ */
    call oIni
    call tst t, 'tstOGet'
    cc = m.class.class
    call tstOut t, 'class.NAME=' oGet(cc, 'NAME')
    o = oGetO(cc, 'NAME')
    call tstOut t, 'class.NAME=' o2String(o) ':' className(objClass(o))
    call tstOut t, 'class|    =' oGet(cc, '|')
    call tstOut t, 'class.91  =' className(oGet(cc, 91))
    call tstOut t, 'class.1   =' oGetO(cc, '1') '|=' oGet(cc, '1||')
    call tstOut t, 'class.2   =' className(oGetO(cc, '2')) ,
            '|=' oGet(cc, '2||')
    call tstEnd t
/*
$=/tstOGet2/
    ### start tst tstOGet2 ############################################
    tstOGet1            get1 w
    tstOGet1.f1         get1.f1 v
    tstOGet1.f2         get1.f2 w
    tstOGet1.F3|        get1.f3 v
    tstOGet1.f3.fEins   get1.f3.fEins v
    tstOGet1.f3.fZwei   get1.f3.fZwei w
    tstOGet1.f3%fDrei   !get1.f3.fDrei w
    tstOGet1.f3.fDrei   get1.f3.fDrei w
    tstOGet1.f3%1       get1.f3.fDrei.1 w
    tstOGet1.f3.2       TSTOGET1
    tstOGet1.f3.2|f1    get1.f1 v
    tstOGet1.f3.2|f3.2|f2 get1.f2 w
    *** err: bad stem index 4>3 @ TSTOGET1.F3 class TstOGet0 in oGet(TS+
    TOGET1, F3.4)
    tstOGet1.f3.4       0
    tstOGet1.f3.3       get1.f3.fDrei.3 w
    *** err: bad stem index 3>3A @ TSTOGET1.F3 class TstOGet0 in oGet(T+
    STOGET1, F3.3)
    tstOGet1.f3.2       0
$/tstOGet2/

 */
    c0 = classNew('n? TstOGet0 u f FEINS v,f FZWEI w,f FDREI r,v,' ,
            's r TstOGet0')
    cl = classNew('n? TstOGet u r, f F1 v, f F2 r, f F3 TstOGet0')
    call oMutate tstOGet1, cl
    m.tstOGet1    = s2o('get1 w')
    m.tstOGet1.f1 = 'get1.f1 v'
    m.tstOGet1.f2 = s2o('get1.f2 w')
    m.tstOGet1.f3 = 'get1.f3 v'
    m.tstOGet1.f3.fEins = 'get1.f3.fEins v'
    m.tstOGet1.f3.fZwei = s2o('get1.f3.fZwei w')
    m.tstOGet1.f3.fDrei = s2o('get1.f3.fDrei w')
    m.tstOGet1.f3.0 = 3
    m.tstOGet1.f3.1 = s2o('get1.f3.fDrei.1 w')
    m.tstOGet1.f3.2 = tstOGet1
    m.tstOGet1.f3.3 = s2o('get1.f3.fDrei.3 w')

    call tst t, 'tstOGet2'
    call tstOut t, 'tstOGet1           ' oGet(tstOGet1,   )
    call tstOut t, 'tstOGet1.f1        ' oGet(tstOGet1, f1)
    call tstOut t, 'tstOGet1.f2        ' oGet(tstOGet1, f2)
    call tstOut t, 'tstOGet1.F3|       ' oGet(tstOGet1, 'F3|')
    call tstOut t, 'tstOGet1.f3.fEins  ' oGet(tstOGet1, f3.fEins)
    call tstOut t, 'tstOGet1.f3.fZwei  ' oGet(tstOGet1, f3.fZwei)
    call tstOut t, 'tstOGet1.f3%fDrei  ' oGetO(tstOGet1, 'F3%FDREI')
    call tstOut t, 'tstOGet1.f3.fDrei  ' oGet(tstOGet1, f3.fDrei)
    call tstOut t, 'tstOGet1.f3%1      ' oGet(tstOGet1, 'F3%1')
    call tstOut t, 'tstOGet1.f3.2      ' oGetO(tstOGet1, 'F3.2')
    call tstOut t, 'tstOGet1.f3.2|f1   ' oGet(tstOGet1, 'F3.2|F1')
    call tstOut t, 'tstOGet1.f3.2|f3.2|f2' ,
                                oGet(tstOGet1, 'F3.2|F3.2|F2')
    call tstOut t, 'tstOGet1.f3.4      ' oGet(tstOGet1, 'F3.4')
    call tstOut t, 'tstOGet1.f3.3      ' oGet(tstOGet1, 'F3.3')
    m.tstOGet1.f3.0 = 3a
    call tstOut t, 'tstOGet1.f3.2      ' oGet(tstOGet1, 'F3.3')
    call tstEnd t
/*
$=/tstOPut3/
    ### start tst tstOPut3 ############################################
    tstOGet1.f1         get1.f1 v
    tstOGet1.f1   aPut1 f1.put1
    tstOGet1.f2   aPut2 f2.put2
    tstOGet1.f3.fEins  p3 f3.fEins,p3
    tstOGet1.f3%0       3A
    tstOGet1.f3%0    =4 4
    tstOGet1.f3.4.feins val f3.4|feins
$/tstOPut3/
 */
    call tst t, 'tstOPut3'
    call tstOut t, 'tstOGet1.f1        ' oGet(tstOGet1, f1)
    call oPut tstOget1, f1, 'f1.put1'
    call tstOut t, 'tstOGet1.f1   aPut1' oGet(tstOGet1, f1)
    call oPut tstOget1, f2, 'f2.put2'
    call tstOut t, 'tstOGet1.f2   aPut2' oGet(tstOGet1, f2)
    call oPut tstOget1, f3.fEins, 'f3.fEins,p3'
    call tstOut t, 'tstOGet1.f3.fEins  p3' oGet(tstOGet1, f3.fEins)
    call tstOut t, 'tstOGet1.f3%0      ' oGet(tstOGet1, 'F3%0')
    call oPut tstOget1, f3.0, 4
    call tstOut t, 'tstOGet1.f3%0    =4' oGet(tstOGet1, 'F3%0')
    call oPutO tstOget1, 'F3.4', ''
    call oPut tstOget1, 'F3.4|FEINS', 'val f3.4|feins'
    call tstOut t, 'tstOGet1.f3.4.feins'    ,
          oGet(tstOGet1, 'F3.4|FEINS')
    call tstEnd t
    return
endProcedure tstOGet

tstJSay: procedure expose m.
/*
$=/tstJSay/
    ### start tst tstJSay #############################################
    *** err: bad option openArg in jOpen(<obj j of JRW>, openArg)
    *** err: jWrite(<obj j of JRW>, writeArg) but not opened w
    *** err: can only write JSay.jOpen(<obj s of JSay>, <)
    *** err: jWrite(<obj s of JSay>, write s vor open) but not opened+
    . w
    *** err: can only read JRWEof.jOpen(<obj e of JRWEof>, >)
    *** err: jRead(<obj e of JRWEof>, XX) but not opened r
    read e vor open 0 m.xx valueBefore
    read e nach open 0 m.xx M.XX
    out eins
    #jIn 1# tst in line 1 eins ,
    out zwei in 1 vv=readAdrVV
    #jIn 2# tst in line 2 zwei ;   .
    out drei in 1 vv=readAdrVV Schluss
$/tstJSay/ */

    call jIni
    call tst t, 'tstJSay'
    jrw = oNew('JRW')
    call mAdd t'.TRANS', jrw '<obj j of JRW>'
    call jOpen jrw, 'openArg'
    call jWrite jrw, 'writeArg'
    s = oNew('JSay')
    call mAdd t'.TRANS', s '<obj s of JSay>'
    call jOpen s, m.j.cRead
    s = oNew('JSay')
    call mAdd t'.TRANS', s '<obj s of JSay>'
    call jWrite s, 'write s vor open'
    call jOpen s, '>'
    call jWrite s, 'write s nach open'
    e = oNew('JRWEof')
    call mAdd t'.TRANS', e '<obj e of JRWEof>'
    call jOpen e, '>'
    e = oNew('JRWEof')
    call mAdd t'.TRANS', e '<obj e of JRWEof>'
    m.xx = 'valueBefore'
    call tstOut t, 'read e vor open' jRead(e, xx) 'm.xx' m.xx
    call jOpen e, m.j.cRead
    call tstOut t, 'read e nach open' jRead(e, xx) 'm.xx' m.xx
    call out 'out eins'
    vv = 'readAdrVV'
    m.vv = 'readAdrVVValueBefore'
    call out 'out zwei in' in(vv) 'vv='vv
    m.vv = 'readAdrVVValueBefore'
    call out 'out drei in' in(vv) 'vv='vv 'Schluss'
    call tstEnd t
    return
endProcedure tstJSay

tstJ: procedure expose m.
/*
$=/tstJ/
    ### start tst tstJ ################################################
    out eins
    #jIn 1# tst in line 1 eins ,
    1 in() tst in line 1 eins ,
    #jIn 2# tst in line 2 zwei ;   .
    2 in() tst in line 2 zwei ;   .
    #jIn 3# tst in line 3 drei .schluss..
    3 in() tst in line 3 drei .schluss..
    #jIn eof 4#
    in() 3 reads vv VV
    line buf line one
    line buf line two
    line buf line three
    line buf line four
    *** err: jWrite(<buf b>, buf line five while reading) but not opene+
    d w
$/tstJ/ */

    call jIni
    call tst t, "tstJ"
    b = jOpen(jBuf(), '>')
    call mAdd t'.TRANS', b '<buf b>'
    call out 'out eins'
    do lx=1 by 1 while in(var)
        call out lx 'in()' m.var
        end
    call out 'in()' (lx-1) 'reads vv' vv
    call jOpen b, '>'
    call jWrite b, 'buf line one'
    call jClose b
    call mAdd m.b.stem, 'buf line two', 'buf line three'
    call jWrite b, 'buf line four'
    call jClose b
    call jOpen b, m.j.cRead
    do while (jRead(b, line))
        call out 'line' m.line
        end
    call jWrite b, 'buf line five while reading'
    call jClose b
    call tstEnd t
    return
endProcedure tstJ

tstJ2: procedure expose m.
/*
$=/tstJ2/
    ### start tst tstJ2 ###############################################
    class1 <Tst?1 class> <Tst?1 name>
    class2 <Tst?1 class> <Tst?1 name>
    class3 <Tst?1 class> <Tst?1 name>
    b read EINS feld eins, ZWEI feld zwei, DREI feld drei
    b read EINS feld eins, ZWEI feld zwei 2, DREI feld drei
    c read EINS feld eins, ZWEI feld zwei, DREI drei cat 1
    tstR: @tstWriteoV3 isA :<Tst?1 name>
    tstR:  .EINS = feld eins
    tstR:  .ZWEI = feld zwei
    tstR:  .DREI = drei cat 1
    c read EINS feld eins, ZWEI feld zwei 2, DREI drei cat 2
    tstR: @tstWriteoV4 isA :<Tst?1 name>
    tstR:  .EINS = feld eins
    tstR:  .ZWEI = feld zwei 2
    tstR:  .DREI = drei cat 2
$/tstJ2/ */

    call tst t, "tstJ2"
    ty = classNew('n* Tst u f EINS v, f ZWEI v, f DREI v')
    call mAdd t'.TRANS', ty '<Tst?1 class>'
    call mAdd t'.TRANS', m.ty.name '<Tst?1 name>'
    call tstOut t, 'class1' ty m.ty.name
    ty = classNew('n* Tst u f EINS v, f ZWEI v, f DREI v')
    call tstOut t, 'class2' ty m.ty.name
    ty = classNew('n* Tst u f EINS v, f ZWEI v, f DREI v')
    call tstOut t, 'class3' ty m.ty.name
    call oMutate qq, ty
    m.qq.eins = 'feld eins'
    m.qq.zwei = 'feld zwei'
    m.qq.drei = 'feld drei'
    b = jBuf()
    call jOpen b, '>'
    call jWriteO b, oCopy(qq)
    m.qq.zwei = 'feld zwei 2'
    call jWriteO b, qq
    call jOpen jClose(b), m.j.cRead
    c = jOpen(jBuf(), '>')
    do xx=1 while assNN('res', jReadO(b))
        call out 'b read EINS' m.res.eins', ZWEI' m.res.zwei,
                                     || ', DREI' m.res.drei
        m.res.drei = 'drei cat' xx
        call jWriteO c, res
        end
    call jOpen jClose(c), m.j.cRead
    do while assNN('ccc', jReadO(c))
        call out 'c read EINS' m.ccc.eins', ZWEI' m.ccc.zwei,
                                     || ', DREI' m.ccc.drei
        call outO ccc
        end
    call tstEnd t
    return
endProcedure tstJ2

tstCat: procedure expose m.
/*
$=/tstCat/
    ### start tst tstCat ##############################################
    catRead 1 line 1
    catRead 2 line 2
    catRead 3 line 3
    appRead 1 line 1
    appRead 2 line 2
    appRead 3 line 3
    appRead 4 append 4
    appRead 5 append 5
$/tstCat/ */
    call catIni
    call tst t, "tstCat"
    i = cat(jBuf('line 1', 'line 2'), jBuf('line 3'))
    call jOpen i, m.j.cRead
    do lx=1 by 1 while jRead(i, v)
        call tstOut t, 'catRead' lx m.v
        end
    call jOpen jClose(i), m.j.cApp
    call jWrite i, 'append 4'
    call jWrite i, 'append 5'
    call jOpen jClose(i), m.j.cRead
    do lx=1 by 1 while jRead(i, v)
        call tstOut t, 'appRead' lx m.v
        end
    call tstEnd t
    return
endProcedure tstCat

tstEnv: procedure expose m.
    call pipeIni
/*
$=/tstEnv/
    ### start tst tstEnv ##############################################
    before pipeBeLa
    after pipeEnd
    *** err: jWrite(<jBuf c>, write nach pop) but not opened w
    #jIn 1# tst in line 1 eins ,
    #jIn 2# tst in line 2 zwei ;   .
    #jIn 3# tst in line 3 drei .schluss..
    #jIn eof 4#
    before writeNow 2 c --> std
    before writeNow 1 b --> c
    b line eins
    b zwei |
    nach writeNow 1 b --> c
    add nach pop
    after push c only
    tst in line 1 eins ,
    tst in line 2 zwei ;   .
    tst in line 3 drei .schluss..
    nach writeNow 2 c --> std
    *** err: jWrite(<jBuf c>, ) but not opened w
$/tstEnv/ */

    call tst t, "tstEnv"
    c = jBuf()
    call mAdd t'.TRANS', c '<jBuf c>'
    call out 'before pipeBeLa'
    b = jBuf("b line eins", "b zwei |")
    call pipe '+Ff', c, b
    call out 'before writeNow 1 b --> c'
    call pipeWriteNow
    call out 'nach writeNow 1 b --> c'
    call pipe '-'
    call out 'after pipeEnd'
    call jWrite c, 'write nach pop'
    call mAdd c'.BUF', 'add nach pop'
    call pipe '+A', c
    call out 'after push c only'
    call pipeWriteNow
    call pipe '-'
    call pipe '+f', , c
    call out 'before writeNow 2 c --> std'
    call pipeWriteNow
    call out 'nach writeNow 2 c --> std'
    call pipe '-'
    call jWrite c
    call tstEnd t
    return
endProcedure tstEnv

tstEnvCat: procedure expose m.
    call pipeIni
/*
$=/tstEnvCat/
    ### start tst tstEnvCat ###########################################
    c1 contents
    c1 line eins |
    before writeNow 1 b* --> c*
    b1 line eins|
    b2 line eins
    b2 zwei |
    c2 line eins |
    after writeNow 1 b* --> c*
    c2 contents
    c2 line eins |
$/tstEnvCat/ */

    call tst t, "tstEnvCat"

    b0= jBuf()
    b0= jBuf()
    b1= jBuf("b1 line eins|")
    b2 = jBuf("b2 line eins", "b2 zwei |")
    c1 = jBuf("c1 line eins |")
    c2 = jBuf("c2 line eins |")
    call pipe '+Af', c1, b0, b1, b2, c2
    call out 'before writeNow 1 b* --> c*'
    call pipeWriteNow
    call out 'after writeNow 1 b* --> c*'
    call pipe '-'
    call out 'c1 contents'
    call pipe '+f' , , c1
    call pipeWriteNow
    call pipe '-'
    call pipe '+f' , , c2
    call out 'c2 contents'
    call pipeWriteNow
    call pipe '-'
    call tstEnd t
    return
endProcedure tstEnvCat

tstPipe: procedure expose m.
    call pipeIni
/*
$=/tstPipe/
    ### start tst tstPipe #############################################
    .+0 vor pipeBegin
    #jIn 1# tst in line 1 eins ,
    #jIn 2# tst in line 2 zwei ;   .
    #jIn 3# tst in line 3 drei .schluss..
    #jIn eof 4#
    .+7 nach pipeLast
    ¢7 +6 nach pipe 7!
    ¢7 +2 nach pipe 7!
    ¢7 +4 nach nested pipeLast 7!
    ¢7 (4 +3 nach nested pipeBegin 4) 7!
    ¢7 (4 (3 +1 nach pipeBegin 3) 4) 7!
    ¢7 (4 (3 tst in line 1 eins , 3) 4) 7!
    ¢7 (4 (3 tst in line 2 zwei ;    3) 4) 7!
    ¢7 (4 (3 tst in line 3 drei .schluss. 3) 4) 7!
    ¢7 (4 (3 +1 nach writeNow vor pipe 3) 4) 7!
    ¢7 (4 +3 nach preSuf vor nested pipeLast 4) 7!
    ¢7 +4 nach preSuf vor nested pipeEnd 7!
    ¢7 +5 nach nested pipeEnd vor pipe 7!
    ¢7 +6 nach writeNow vor pipeLast 7!
    .+7 nach writeNow vor pipeEnd
    .+8 nach pipeEnd
$/tstPipe/ */

    say 'x0' m.pipe.0
    call tst t, 'tstPipe'
    call out '+0 vor pipeBegin'
    say 'x1' m.pipe.0
    call pipe '+N'
    call out '+1 nach pipeBegin'
    call pipeWriteNow
    call out '+1 nach writeNow vor pipe'
    call pipe 'N|'
    call out '+2 nach pipe'
    call pipe '+N'
    call out '+3 nach nested pipeBegin'
    call pipePreSuf '(3 ', ' 3)'
    call out '+3 nach preSuf vor nested pipeLast'
    call pipe 'P|'
    call out '+4 nach nested pipeLast'
    call pipePreSuf '(4 ', ' 4)'
    call out '+4 nach preSuf vor nested pipeEnd'
    call pipe '-'
    call out '+5 nach nested pipeEnd vor pipe'
    call pipe 'N|'
    call out '+6 nach pipe'
    call pipeWriteNow
    say 'out +6 nach writeNow vor pipeLast'
    call out '+6 nach writeNow vor pipeLast'
    call pipe 'P|'
    call out '+7 nach pipeLast'
    call pipePreSuf '¢7 ', ' 7!'
    call out '+7 nach writeNow vor pipeEnd'
    call pipe '-'
    call out '+8 nach pipeEnd'
    say 'xx' m.pipe.0
    call tstEnd t
    return
endProcedure tstPipe

tstPipeS: procedure expose m.
/*
$=/tstPipeS/
    ### start tst tstPipeS ############################################
    eine einzige zeile
    nach all einzige Zeile
    select strip(creator) cr, strip(name) tb,
    (row_number()over())*(row_number()over()) rr
    from sysibm.sysTables
$/tstPipeS/
*/
    call tst t, "tstPipeS"
    call pipe '+s',, 'eine einzige zeile'
    call pipeWriteAll
    call out 'nach all einzige Zeile'
    call pipe 's',,
              , "select strip(creator) cr, strip(name) tb," ,
              ,      "(row_number()over())*(row_number()over()) rr" ,
              ,      "from sysibm.sysTables"
    call pipeWriteAll
    call pipe '-'
    call tstEnd t
    return
endProcedure tstPipeS

tstEnvVars: procedure expose m.
    call pipeIni
/*
$=/tstEnvVars/
    ### start tst tstEnvVars ##########################################
    put v1 value eins
    v1 hasKey 1 get value eins
    v2 hasKey 0
    one to theBur
    two to theBuf
$/tstEnvVars/ */
    call tst t, "tstEnvVars"
    call envRemove 'v2'
    m.tst.adr1 = 'value eins'
    put1 = envPutO('v1', oMutate(tst'.'adr1, m.class.classV))
    call tstOut t, 'put v1' m.put1
    call tstOut t, 'v1 hasKey' envHasKey('v1') 'get' envGet('v1')
    call tstOut t, 'v2 hasKey' envHasKey('v2')
    if 0 then
        call tstOut t, 'v2 get'    envGet('v2')
    call pipe '+F' , envGetO('theBuf', '-b')
    call out 'one to theBur'
    call out 'two to theBuf'
    call pipe '-'
    call pipe '+f',, envGetO('theBuf')
    call pipeWriteNow
    call pipe '-'
    call tstEnd t
    return
endProcedure tstEnvVars

tstEnvWith: procedure expose m.
/*
$=/tstEW2/
    ### start tst tstEW2 ##############################################
    tstK1|            get1 w
    tstK1%f1          get1.f1 v
    tstK1.f2          get1.f2 w
    tstK1%F3          get1.f3 v
    ttstK1.F3.FEINS   get1.f3.fEins v
    tstK1%F3%FZWEI    get1.f3.fZwei w
    tstK1.F3.FDREI    !get1.f3.fDrei w
    tstK1%F3%FDREI|   get1.f3.fDrei w
    tstK1.F3.1        get1.f3.1 w
    tstK1%F3%2        TSTEW1
    tstK1.F3.2|F1     get1.f1 v
    tstK1%F3%2|F3.2|F2 get1.f2 w
    *** err: undefined variable F1 in envGet(F1)
    F1          0
    F1          get1.f1 v
    f2          get1.f2 w
    F3          get1.f3 v
    F3.FEINS    get1.f3.fEins v
    F3.FZWEI    get1.f3.fZwei w
    F3%FDREI    !get1.f3.fDrei w
    F3%FDREI|   get1.f3.fDrei w
    F3%1        get1.f3.1 w
    pu1 F1      get1.f1 v
    pu2 F1      get2.f1 v
    po-2 F1     get1.f1 v
    *** err: undefined variable F1 in envGet(F1)
    po-1 F1     0
$/tstEW2/  */
    call pipeIni
    c0 = classNew('n? TstEW0 u f FEINS v,f FZWEI w, f FDREI r,v,s r')
    cl = classNew('n? TstEW u r TstEW0, f F1 v, f F2 r, f F3 TstEW0')
    call oMutate tstEW1, cl
    m.tstEW1    = s2o('get1 w')
    m.tstEW1.f1 = 'get1.f1 v'
    m.tstEW1.f2 = s2o('get1.f2 w')
    m.tstEW1.f3 = 'get1.f3 v'
    m.tstEW1.f3.fEins = 'get1.f3.fEins v'
    m.tstEW1.f3.fZwei = s2o('get1.f3.fZwei w')
    m.tstEW1.f3.fDrei = s2o('get1.f3.fDrei w')
    m.tstEW1.f3.0 = 3
    m.tstEW1.f3.1 = s2o('get1.f3.1 w')
    m.tstEW1.f3.2 = tstEW1
    m.tstEW1.f3.3 = s2o('get1.f3.3 w')
    call oMutate tstEW2, cl
    m.tstEW2    = s2o('get2 w')
    m.tstEW2.f1 = 'get2.f1 v'
    m.tstEW2.f2 = s2o('get2.f2 w')
    call envPutO 'tstK1', tstEW1

    call tst t, 'tstEW2'
    call tstOut t, 'tstK1|           ' envGet('tstK1|')
    call tstOut t, 'tstK1%f1         ' envGet('tstK1%F1')
    call tstOut t, 'tstK1.f2         ' envGet('tstK1.F2')
    call tstOut t, 'tstK1%F3         ' envGet('tstK1%F3|')
    call tstOut t, 'ttstK1.F3.FEINS  ' envGet('tstK1.F3.FEINS')
    call tstOut t, 'tstK1%F3%FZWEI   ' envGet('tstK1%F3%FZWEI')
    call tstOut t, 'tstK1.F3.FDREI   ' envGetO('tstK1.F3.FDREI')
    call tstOut t, 'tstK1%F3%FDREI|  ' envGet('tstK1%F3%FDREI')
    call tstOut t, 'tstK1.F3.1       ' envGet('tstK1.F3.1')
    call tstOut t, 'tstK1%F3%2       ' envGetO('tstK1%F3%2')
    call tstOut t, 'tstK1.F3.2|F1    ' envGet('tstK1.F3.2|F1')
    call tstOut t, 'tstK1%F3%2|F3.2|F2' ,
                                envGet('tstK1%F3%2|F3%2|F2')
    call tstOut t, 'F1         ' envGet('F1')
    call envPushWith tstEW1
    call tstOut t, 'F1         ' envGet('F1')
    call tstOut t, 'f2         ' envGet('F2')
    call tstOut t, 'F3         ' envGet('F3|')
    call tstOut t, 'F3.FEINS   ' envGet('F3.FEINS')
    call tstOut t, 'F3.FZWEI   ' envGet('F3.FZWEI')
    call tstOut t, 'F3%FDREI   ' envGetO('F3%FDREI')
    call tstOut t, 'F3%FDREI|  ' envGet('F3%FDREI|')
    call tstOut t, 'F3%1       ' envGet('F3%1')
    call tstOut t, 'pu1 F1     ' envGet('F1')
    call envPushWith tstEW2
    call tstOut t, 'pu2 F1     ' envGet('F1')
    call envPopWith
    call tstOut t, 'po-2 F1    ' envGet('F1')

    call envPopWith
    call tstOut t, 'po-1 F1    ' envGet('F1')
    call tstEnd t
/*
$=/tstEW3/
    ### start tst tstEW3 ##############################################
    .          s c3.F1          = v(c3.f1)
    *** err: no reference @ <c3>.F1 class CLASS.1 in envGet(c3.F1.FEINS+
    )
    .          s c3.F1.FEINS    = 0
    .          s c3.F3.FEINS    = .
    .          s c3.F3.FEINS    = val(c3.F3.FEINS)
    *** err: no field FEINS @ <c3> class TstEW in envGet(c3.FEINS)
    .          s c3.FEINS       = 0
    *** err: null @ <c3> class TstEW in envGet(c3|FEINS)
    .          s c3|FEINS       = 0
    aft Put   s c3|FEINS       = val(c3|FEINS)
    Push c3   s F3.FEINS       = val(c3.F3.FEINS)
    *** err: no field FEINS aftPuP= pushPut(F3 @ <c3>.F3 class TstEW0 i+
    n envGet(F3.FEINS aftPuP= pushPut(F3.FEINS))
    .          s F3.FEINS aftPuP= 0
    push c4   s F1             = v(c4.f1)
    put f2    s F2             = put(f2)
    *** err: no field F222 in class TstEW in EnvPut(F222, f222 stopped,+
    . 1)
    put ..    s F3.FEINS       = put(f3.fEins)
    popW c4   s F1             = v(c3.f1)
    *** err: undefined variable F1 in envGet(F1)
    popW c3   s F1             = 0
    .          s F222           = f222 pop stop
$/tstEW3/
*/
    call tst t, 'tstEW3'
    c3 = oNew('TstEW')
    call mAdd t.trans, c3 '<c3>'
    m.c3.f1 = 'v(c3.f1)'
    call envPutO 'c3', c3
    call tstEnvSG , 'c3.F1'
    call tstEnvSG , 'c3.F1.FEINS'
    call tstEnvSG , 'c3.F3.FEINS'
    call envPut 'c3.F3.FEINS', 'val(c3.F3.FEINS)'
    call tstEnvSG , 'c3.F3.FEINS'
    call tstEnvSG , 'c3.FEINS'
    call tstEnvSG , 'c3|FEINS'
    call envPut 'c3|FEINS', 'val(c3|FEINS)'
    call tstEnvSG 'aft Put', 'c3|FEINS'
    call envPushWith c3
    call tstEnvSG 'Push c3', 'F3.FEINS'
    call envPut 'F3.FEINS', 'pushPut(F3.FEINS)'
    call tstEnvSG , 'F3.FEINS aftPuP=' envGet('F3.FEINS')

    c4 = oNew('TstEW')
    call mAdd t.trans, c4 '<c4>'
    m.c4.f1 = 'v(c4.f1)'
    call envPut f222, 'f222 no stop'
    call envPushWith c4
    call tstEnvSG 'push c4', f1
    call envPut f2, 'put(f2)'
    call tstEnvSG 'put f2', f2
    call envPut f222, 'f222 stopped', 1
    call envPut f3.fEins, 'put(f3.fEins)'
    call tstEnvSG 'put .. ', f3.fEins
    call envPopWith
    call tstEnvSG 'popW c4', f1
    call envPopWith
    call envPut f222, 'f222 pop stop'
    call tstEnvSG 'popW c3', f1
    call tstEnvSG          , f222
    call tstEnd t

/*
$=/tstEW4/
    ### start tst tstEW4 ##############################################
    tstO4 S.0 0 R.0 0 class TstEW4
    *** err: no field FZWEI in class  in EnvPut(FZWEI, v 1.fZwei, 1)
    1 fEins   s FEINS          = v 1.fEins
    1 fZwei   s FZWEI          = .
    2 fEins   s FEINS          = .
    2 fZwei   s FZWEI          = v 2.fZwei
    v 1.fEins .# 1 vor
    v 1.fEins .# 2 nach withNext e
    *** err: undefined variable FEINS in envGet(FEINS)
    ? fEins   s FEINS          = 0
    1 fEins   s FEINS          = v 1|fEins
    1 fZwei   s FZWEI          = .
    2 fEins   s FEINS          = .
    2 fZwei   s FZWEI          = v 2.fZwei
    v 1|fEins .# 2
$/tstEW4/
*/
    c4 = classNew('n? TstEW4 u f S s TstEW0, f R s r TstEW0')
    o4 = oClear(oMutate('tstO4', c4))
    call tst t, 'tstEW4'
    call tstout t, o4 'S.0' m.o4.s.0 'R.0' m.o4.r.0 ,
        'class' className(objClass(o4))
    call envPushWith o4'.S', m.c4.f2c.s, 'asM'
    call envPut fZwei, 'v 1.fZwei', 1
    call envWithNext 'b'
    call envPut feins, 'v 1.fEins', 1
    call tstEnvSG '1 fEins ', fEins
    call tstEnvSG '1 fZwei ', fZwei
    m.o4.s.2.feins = 'vorher'
    m.o4.s.2.fZwei = s2o('vorher')
    call envWithNext
    call envPut fZwei, 'v 2.fZwei', 1
    call tstEnvSG '2 fEins ', fEins
    call tstEnvSG '2 fZwei ', fZwei
    call tstOut t, m.o4.s.1.fEins '.#' m.o4.s.0 'vor'
    call envWithNext 'e'
    call tstOut t, m.o4.s.1.fEins '.#' m.o4.s.0 'nach withNext e'
    call envPopWith
    call tstEnvSG '? fEins ', fEins
    call envPushWith o4'.R', m.c4.f2c.r, 'asM'
    call envWithNext 'b'
    call envPut fEins, 'v 1|fEins', 1
    call tstEnvSG '1 fEins ', fEins
    call tstEnvSG '1 fZwei ', fZwei
    call envWithNext
    call envPut fZwei, 'v 2.fZwei', 1
    call tstEnvSG '2 fEins ', fEins
    call tstEnvSG '2 fZwei ', fZwei
    call envWithNext 'e'
    call envPopWith
    o41r = m.o4.r.1
    call tstOut t, m.o41r.fEins '.#' m.o4.r.0
    call tstEnd t

    return
endProcedure tstEnvWith

tstEnvSG: procedure expose m. t
parse arg txt, nm
    call tstOut t, left(txt,10)'s' left(nm, 15)'=' envGet(nm)
    return

tstPipeLazy: procedure expose m.
    call pipeIni
/*
$=/tstPipeLazy/
    ### start tst tstPipeLazy #########################################
    a1 vor pipeBegin loop lazy 0 writeNow *** <class TstPipeLazyBuf>
    bufOpen <
    bufClose
    #jIn 2# tst in line 2 zwei ;   .
    #jIn 3# tst in line 3 drei .schluss..
    #jIn eof 4#
    a5 vor 2 writeNow in inIx 4
    a2 vor writeNow jBuf
    jBuf line 1
    jBuf line 2
    a3 vor writeNow in inIx 1
    tst in line 2 zwei ;   .
    tst in line 3 drei .schluss..
    a4 vor barLast inIx 4
    a6 vor barEnd inIx 4
    a7 nach barEnd lazy 0 writeNow ***
    b1 vor barBegin lazy 0 writeNow *** <class TstPipeLazyRdr>
    RdrOpen <
    #jIn 3# tst in line 3 drei .schluss..
    #jIn eof 4#
    rdrClose
    b4 vor writeNow
    b2 vor writeNow rdr inIx 2
    jRead lazyRdr
    tst in line 3 drei .schluss..
    jRead lazyRdr
    b3 vor barLast inIx 4
    b5 vor barEnd inIx 4
    b6 nach barEnd lazy 0 writeNow ***
    a1 vor pipeBegin loop lazy 1 writeAll *** +
        .<class TstPipeLazyBuf>
    a5 vor 2 writeAll in inIx 0
    a2 vor writeAll jBuf
    bufOpen <
    jBuf line 1
    jBuf line 2
    bufClose
    a3 vor writeAll in inIx 0
    #jIn 1# tst in line 1 eins ,
    tst in line 1 eins ,
    #jIn 2# tst in line 2 zwei ;   .
    tst in line 2 zwei ;   .
    #jIn 3# tst in line 3 drei .schluss..
    tst in line 3 drei .schluss..
    #jIn eof 4#
    a4 vor barLast inIx 0
    a6 vor barEnd inIx 4
    a7 nach barEnd lazy 1 writeAll ***
    b1 vor barBegin lazy 1 writeAll *** <class TstPipeLazyRdr>
    b4 vor writeAll
    b2 vor writeAll rdr inIx 1
    RdrOpen <
    jRead lazyRdr
    #jIn 2# tst in line 2 zwei ;   .
    tst in line 2 zwei ;   .
    jRead lazyRdr
    #jIn 3# tst in line 3 drei .schluss..
    tst in line 3 drei .schluss..
    jRead lazyRdr
    #jIn eof 4#
    rdrClose
    b3 vor barLast inIx 1
    b5 vor barEnd inIx 4
    b6 nach barEnd lazy 1 writeAll ***
$/tstPipeLazy/ */
    call tst t, "tstPipeLazy"
    do lz=0 to 1
        if lz then
            w = 'writeAll'
        else
            w = 'writeNow'
        m.t.inIx = 1-lz
        ty = class4Name('TstPipeLazyBuf', '')
        if ty == '' then do
            ty = classNew('n TstPipeLazyBuf u JRWDeleg', 'm',
            , 'jOpen call tstOut "T", "bufOpen" opt;',
              'call jOpen m.m.deleg, opt',
            , 'jClose call tstOut "T", "bufClose";',
              'call jClose m.m.deleg')
            end
        if \ lz then
             call mAdd t'.TRANS', ty '<class TstPipeLazyBuf>'
        call out 'a1 vor pipeBegin loop lazy' lz w '***' ty
        call pipe '+N'
        call out 'a2 vor' w 'jBuf'
        b = oNew('TstPipeLazyBuf', jBuf('jBuf line 1','jBuf line 2'))
        interpret 'call pipe'w 'b'
        call out 'a3 vor' w 'in inIx' m.t.inIx
        interpret 'call pipe'w
        call out 'a4 vor barLast inIx' m.t.inIx
        call pipe 'P|'
        call out 'a5 vor 2' w 'in inIx' m.t.inIx
        interpret 'call pipe'w
        call out 'a6 vor barEnd inIx' m.t.inIx
        call pipe '-'
        call out 'a7 nach barEnd lazy' lz w '***'

        ty = class4Name('TstPipeLazyRdr', '')
        if ty == '' then
            ty = classNew('n TstPipeLazyRdr u JRW', 'm',
            , 'jOpen call tstOut "T", "RdrOpen" opt',
            , 'jRead call out "jRead lazyRdr";' ,
                  'return jRead(m.m.rdr, var);',
            , 'jClose call tstOut "T",  "rdrClose";')
        if \ lz then
             call mAdd t'.TRANS', ty '<class TstPipeLazyRdr>'

        r = oNew('TstPipeLazyRdr')
            m.r.rdr = m.j.in
        if lz then
            call mAdd t'.TRANS', r '<lazyRdr>'
     m.t.inIx = 2-lz
     call out 'b1 vor barBegin lazy' lz w '***' ty
     call pipe '+N'
     call out 'b2 vor' w 'rdr inIx' m.t.inIx
     interpret 'call pipe'w 'r'
     call out 'b3 vor barLast inIx' m.t.inIx
     call pipe 'P|'
        call out 'b4 vor' w
        interpret 'call pipe'w
        call out 'b5 vor barEnd inIx' m.t.inIx
        call pipe '-'
     call out 'b6 nach barEnd lazy' lz w '***'
        end
    call tstEnd t
    return
endProcedure tstPipeLazy

tstEnvClass: procedure expose m.
    call pipeIni
/*
$=/tstEnvClass/
    ### start tst tstEnvClass #########################################
    a0 vor pipeBegin loop lazy 0 writeNow *** TY
    #jIn 2# tst in line 2 zwei ;   .
    #jIn 3# tst in line 3 drei .schluss..
    #jIn eof 4#
    a5 vor writeNow
    a1 vor jBuf()
    a2 vor writeNow b
    tstR: @<o20 of TstEnvClass10> isA :TstEnvClass10
    tstR:  .f11 = .
    tstR:  .F12 = value F12 of o1 <o20 of TstEnvClass10>
    tstR:  .f13 = .
    WriteO o2
    tstR: @<oc0 of TstEnvClass20> isA :TstEnvClass20 = valueO2Lazy0
    tstR:  .f24 = .
    tstR:  .F25 = value F25 of o20 <o20 of TstEnvClass20>
    a3 vor writeNow
    tst in line 2 zwei ;   .
    tst in line 3 drei .schluss..
    a4 vor barLast inIx 4
    a6 vor barEnd
    a7 nach barEnd lazy 0 writeNow ***
    a0 vor pipeBegin loop lazy 1 writeAll *** TY
    a5 vor writeAll
    a1 vor jBuf()
    a2 vor writeAll b
    tstR: @<o21 of TstEnvClass10> isA :TstEnvClass10
    tstR:  .f11 = .
    tstR:  .F12 = value F12 of o1 <o21 of TstEnvClass10>
    tstR:  .f13 = .
    WriteO o2
    tstR: @<oc1 of TstEnvClass20> isA :TstEnvClass20 = valueO2Lazy1
    tstR:  .f24 = .
    tstR:  .F25 = value F25 of o21 <o21 of TstEnvClass20>
    a3 vor writeAll
    #jIn 1# tst in line 1 eins ,
    tst in line 1 eins ,
    #jIn 2# tst in line 2 zwei ;   .
    tst in line 2 zwei ;   .
    #jIn 3# tst in line 3 drei .schluss..
    tst in line 3 drei .schluss..
    #jIn eof 4#
    a4 vor barLast inIx 0
    a6 vor barEnd
    a7 nach barEnd lazy 1 writeAll ***
$/tstEnvClass/ */

    call tst t, "tstEnvClass"
    t10 = classNew('n? TstEnvClass10 u f f11 v, f F12 v, f f13 v')
    t20 = classNew('n? TstEnvClass20 u v, f f24 v, f F25 v')
    do lz=0 to 1
        if lz then
            w = 'writeAll'
        else
            w = 'writeNow'
        m.t.inIx = 1-lz
        call out 'a0 vor pipeBegin loop lazy' lz w '***' ty
        call pipe '+N'
        call out 'a1 vor jBuf()'
        b = jOpen(jBuf(), m.j.cWri)
        o1 = oNew('TstEnvClass10')
        m.o1.F12 = 'value F12 of o1' o1
        call mAdd t'.TRANS', o1 '<o2'lz 'of TstEnvClass10>'
        call jWriteO b, o1
        call jWrite b, 'WriteO o2'
        o2 = oNew('TstEnvClass20')
        m.o2 = 'valueO2Lazy'lz
        m.o2.F25 = 'value F25 of o2'lz o2
        oc = oCopy(oCopy(o2))
        call mAdd t'.TRANS', o2 '<o2'lz 'of TstEnvClass20>'
        call mAdd t'.TRANS', oc '<oc'lz 'of TstEnvClass20>'
        call jWriteO b, oc
        call out 'a2 vor' w 'b'
        interpret 'call pipe'w jClose(b)
        call out 'a3 vor' w
        interpret 'call pipe'w
        call out 'a4 vor barLast inIx' m.t.inIx
        call pipe 'P|'
        call out 'a5 vor' w
        interpret 'call pipe'w
        call out 'a6 vor barEnd'
        call pipe '-'
        call out 'a7 nach barEnd lazy' lz w '***'
        end
    call tstEnd t
    m.t.trans.0 = 0
    return
endProcedure tstEnvClass

tstFile: procedure expose m.
    call catIni
/*
$=/tstFile/
    ### start tst tstFile #############################################
    write read 0 last 10 vor anfang
    write read 1 last 80  links1 1   und rechts |  ..
    write read 2 last 80 liinks2 2   und rechts |  ..
    write read 5 last 80 links5 5 rechts5
    write read 99 last 80 links99 99 rechts
    write read 100 last 80 links100 100 rechts
    write read 101 last 80 links101 101 rechts
    write read 999 last 80 links999 999 rechts
    write read 1000 last 80 links1000 1000 rechts
    write read 1001 last 80 links1001 1001 rechts
    write read 2109 last 80 links2109 2109 rechts
    out > eins 1                                                       +
    .             .
    out > eins 2 schluss.                                              +
    .             .
    buf eins
    buf zwei
    buf drei
    out > zwei mit einer einzigen Zeile                                +
    .             .
    . links1 1   und rechts |  .                                       +
    .              .
$/tstFile/ */
    call tst t, "tstFile"
    pds = tstFilename('lib', 'r')
    call tstFileWr pds, 0, ' links0', '  und rechts |  .  '
    call tstFileWr pds, 1, ' links1', '  und rechts |  .  '
    call tstFileWr pds, 2, 'liinks2', '  und rechts |  .  '
    call tstFileWr pds, 5, 'links5', 'rechts5'
    call tstFileWr pds, 99, 'links99', 'rechts'
    call tstFileWr pds, 100, 'links100', 'rechts'
    call tstFileWr pds, 101, 'links101', 'rechts'
    call tstFileWr pds, 999, 'links999', 'rechts'
    call tstFileWr pds, 1000, 'links1000', 'rechts'
    call tstFileWr pds, 1001, 'links1001', 'rechts'
    call tstFileWr pds, 2109, 'links2109', 'rechts'
    pd2 = tstFilename('li2', 'r')
    call pipeIni
    call pipe '+F', s2o(tstPdsMbr(pd2, 'eins'))
    call out tstFB('out > eins 1') /* simulate fixBlock on linux */
    call out tstFB('out > eins 2 schluss.')
    call pipe '-'
    call pipe '+F', s2o(tstPdsMbr(pd2, 'zwei'))
    call out tstFB('out > zwei mit einer einzigen Zeile')
    call pipe '-'
    b = jBuf("buf eins", "buf zwei", "buf drei")
    call pipe '+f', , s2o(tstPdsMbr(pd2, 'eins')), b,
                    ,jBuf(),
                    ,s2o(tstPdsMbr(pd2, 'zwei')),
                    ,s2o(tstPdsMbr(pds, 'wr0')),
                    ,s2o(tstPdsMbr(pds, 'wr1'))
    call pipeWriteNow
    call pipe '-'
    call tstEnd t
    return
endProcedure tstFile

/*--- simulate fixBlock 80 on linux ---------------------------------*/
tstFB: procedure expose m.
parse arg line, recL
    if m.err.os \== 'LINUX' then
        return line
    else if recL == '' then
        return left(line, 80)
    else
        return left(line, recL)
endProcedure tstFB

tstPdsMbr: procedure expose m.
parse arg pds, mbr
    if m.err.os = 'TSO' then
        return pds'('mbr') ::F'
    if m.err.os = 'LINUX' then
        return pds'.'mbr
    call err 'tstPdsMbr implement os' m.err.os
endProcedure tstPdsMbr

tstFileWR: procedure expose m.
parse arg dsn, num, le, ri
    io = file(tstPdsMbr(dsn, 'wr'num))
    call jOpen io, m.j.cWri
    do x = 1 to num /* simulate fixBlock 80 on LINUX*/
        call jWrite io, tstFB(le x ri)
        end
    call jClose io
    if num > 100 then
        call jReset io, tstPdsMbr(dsn, 'wr'num)

    call jOpen io, m.j.cRead
    m.vv = 'vor anfang'
    do x = 1 to num
        if \ jRead(io, vv) then
            call err x 'not jRead'
        else if m.vv <> le x ri then
            call err x 'read mismatch' m.vv
        end
    if jRead(io, vv) then
        call err x 'jRead but should be eof 1'
    if jRead(io, vv) then
        call err x'+1 jjRead but should be eof 2'
    call jClose io
    call tstOut t, 'write read' num 'last' length(m.vv) strip(m.vv,'t')
    return
endProcedure tstFileRW

tstFileList: procedure expose m.
    call catIni
/*
$=/tstFileList/
    ### start tst tstFileList #########################################
    empty dir
    filled dir
    <<pref 2 List>>eins
    <<pref 2 List>>zwei
    <<pref 2 List>>drei
    <<pref 2 List>>vier
    filled dir recursive
    <<pref 2 List>>eins
    <<pref 2 List>>zwei
    <<pref 2 List>>drei
    <<pref 2 List>>vier
    <<pref 1 vier>>eins
    <<pref 1 vier>>zwei
    <<pref 1 vier>>drei
$/tstFileList/ */
/*
$=/tstFileListTSO/
    ### start tst tstFileListTSO ######################################
    empty dir
    filled dir
    <<pref 2 LIST>>DREI
    <<pref 2 LIST>>EINS
    <<pref 2 LIST>>ZWEI
    filled dir recursive
    <<pref 2 LIST>>DREI
    <<pref 2 LIST>>EINS
    <<pref 1 VIER>>DREI
    <<pref 1 VIER>>EINS
    <<pref 1 VIER>>ZWEI
    <<pref 2 LIST>>ZWEI
$/tstFileListTSO/ */
    if m.err.os = 'TSO' then
        call tst t, "tstFileListTSO"
    else
        call tst t, "tstFileList"
    fi = file(tstFileName('FileList', 'r'))
    call fileMkDir fi
    fl = fileList(fi)
    call tstOut t, 'empty dir'
    call jWriteNow t, fl
    call tstFileListMake t, fi, 2
    call tstOut t, 'filled dir'
    call jWriteNow t, fl
    call tstOut t, 'filled dir recursive'
    call jWriteNow t, fileList(fi, 'r')
    call tstEnd t
    return
endProcedure tstFileList

tstFileListMake: procedure expose m.
parse arg t, fi, lev
    if \ fileIsDir(fi) then
        call fileMkDir fi
    call mAdd t'.TRANS', filePath(fi) || m.file.sep ,
                '<<pref' lev right(filePath(fi),4)'>>'
    call jCat fileChild(fi, 'eins','::F'),jBuf('zeile eins','eins' lev)
    call jCat fileChild(fi, 'zwei','::F'),jBuf('zeile zwei','zwei' lev)
    call jCat fileChild(fi, 'drei','::F'),jBuf('zeile drei','drei' lev)
    if lev > 1 then
        call tstFileListMake t, fileChild(fi, 'vier'), lev-1
    return
endProcedure tstFileListMake

tstF: procedure expose m.
/*
$=/tstF/
    ### start tst tstF ################################################
    f(1\s23%s345%s67\%8, eins,  zwei ) =1 23eins345 zwei 67%8;
    f(1\S23%s345%S67\%8, eins,  zwei ) =1\S23eins345zwei67%8;
    f(1\s23%s345%s67\%8, eins,  zwei ) =1 23eins345 zwei 67%8;
    f(1\s23%s345%S67\%8, eins,  zwei ) =1 23eins345zwei67%8;
    f(1%S2%s3@2%S4@%s5, eins,  zwei ) =1eins2 zwei 3zwei4 zwei 5;
    f(1%-2C2%3C3@2%3.2C4, eins,  zwei ) =1ei2ei 3zwe4;
    f(1@F1%s2@f2%s3@F3%s4, eins,  zwei ) =1fEins2fZwei3fDrei4;
    tstF2 _ %-9C @%5i @%8i @%+8i @%-8i -----
    _ 0             0        0       +0 0       .
    _ -1.2         -1       -1       -1 -1      .
    _ 2.34          2        2       +2 2       .
    _ -34.8765    -35      -35      -35 -35     .
    _ 567.91234   568      568     +568 568     .
    _ -8901     -8901    -8901    -8901 -8901   .
    _ 23456     23456    23456   +23456 23456   .
    _ -789012   *****  -789012  -789012 -789012 .
    _ 34e6      ***** 34000000 ******** 34000000
    _ -56e7     ***** ******** ******** ********
    _ 89e8      ***** ******** ******** ********
    _ txtli     txtli    txtli    txtli txtli   .
    _ undEinLan Text? gerText? gerText? undEinLa
    tstF2 _ %-9C @%5.2i @%12.2i @%+12.2i @%-12.2i -----
    _ 0          0.00         0.00        +0.00 0.00        .
    _ -1.2      -1.20        -1.20        -1.20 -1.20       .
    _ 2.34       2.34         2.34        +2.34 2.34        .
    _ -34.8765  *****       -34.88       -34.88 -34.88      .
    _ 567.91234 *****       567.91      +567.91 567.91      .
    _ -8901     *****     -8901.00     -8901.00 -8901.00    .
    _ 23456     *****     23456.00    +23456.00 23456.00    .
    _ -789012   *****   -789012.00   -789012.00 -789012.00  .
    _ 34e6      *****  34000000.00 +34000000.00 34000000.00 .
    _ -56e7     ***** ************ ************ ************
    _ 89e8      ***** ************ ************ ************
    _ txtli     txtli        txtli        txtli txtli       .
    _ undEinLan Text? nLangerText? nLangerText? undEinLanger
    tstF2 _ %-9C @%7e @%8E @%9.2e @%11.3E -----
    _ 0         0.00e00  0.00E00  0.00e+00  0.000E+000
    _ -1.2      -1.2e00 -1.20E00 -1.20e+00 -1.200E+000
    _ 2.34      2.34e00  2.34E00  2.34e+00  2.340E+000
    _ -34.8765  -3.5e01 -3.49E01 -3.49e+01 -3.488E+001
    _ 567.91234 5.68e02  5.68E02  5.68e+02  5.679E+002
    _ -8901     -8.9e03 -8.90E03 -8.90e+03 -8.901E+003
    _ 23456     2.35e04  2.35E04  2.35e+04  2.346E+004
    _ -789012   -7.9e05 -7.89E05 -7.89e+05 -7.890E+005
    _ 34e6      3.40e07  3.40E07  3.40e+07  3.400E+007
    _ -56e7     -5.6e08 -5.60E08 -5.60e+08 -5.600E+008
    _ 89e8      8.90e09  8.90E09  8.90e+09  8.900E+009
    _ txtli     txtli   txtli    txtli     txtli      .
    _ undEinLan undEinL undEinLa undEinLan undEinLange
    _ 8.76e-07  8.76e-7  8.76E-7  8.76e-07  8.760E-007
    _ 5.43e-11  0.05e-9  0.05E-9  5.43e-11  5.430E-011
    _ -8.76e-07 -8.8e-7 -8.76E-7 -8.76e-07 -8.760E-007
    _ -5.43e-11 -0.1e-9 -0.05E-9 -5.43e-11 -5.430E-011
$/tstF/ */
    call tst t, 'tstF'
    call tstF1 '1\s23%s345%s67\%8'
    call tstF1 '1\S23%s345%S67\%8'
    call tstF1 '1\s23%s345%s67\%8'
    call tstF1 '1\s23%s345%S67\%8'
    call tstF1 '1%S2%s3@2%S4@%s5'
    call tstF1 '1%-2C2%3C3@2%3.2C4'
    call tstF1 '1@F1%s2@f2%s3@F3%s4'
    nums = '0 -1.2 2.34 -34.8765 567.91234 -8901 23456' ,
                '-789012 34e6 -56e7 89e8 txtli undEinLangerText?'
    call tstF2 '_ %-9C @%5i @%8i @%+8i @%-8i', nums
    call tstF2 '_ %-9C @%5.2i @%12.2i @%+12.2i @%-12.2i', nums
    num2 = ' 8.76e-07  5.43e-11 -8.76e-07  -5.43e-11'
    call tstF2 '_ %-9C @%7e @%8E @%9.2e @%11.3E', nums num2
    call tstEnd t
    return
endProcedure tstF

tstF1: procedure expose m.
parse arg fmt
    e='eins'
    z=' zwei '
    f2 = 'f2'
    m.e.f1 = 'fEins'
    m.e.f2 = 'fZwei'
    m.e.f3 = 'fDrei'
    call out "f("fmt"," e"," z") ="f(fmt, e, z)";"
    return
endProcedure tstF1

tstF2: procedure expose m.
parse arg fmt, vals
    call out 'tstF2' fmt '-----'
    do vx=1 to words(vals)
        call out f(fmt, word(vals, vx))
        end
    return
endProcedure tstF2

tstFmt: procedure expose m.
    call pipeIni
/*
$=/tstFmt/
    ### start tst tstFmt ##############################################
    =   a2i b3b   d4                       fl5          ex6
    -11 -11 b3    d4-11+d4++++    -111.1000000 -1.11000E-12
    -1  -10 b     d4-10+d4+++            null1        null3
    -    -9 b3b-9 d4-9+d4+++       -11.0000000 -1.11900E-10
    -8+  -8 b3b-  d4-8+d4++        -18.0000000 -1.18000E010
    -7   -7 b3b   d4-7+d4+          -7.0000000 -1.70000E-07
    -    -6 b3    d4-6+d4           -0.1111160 -6.00000E006
    -5+  -5 b     d4-5+d                 null2        null2
    -4   -4 b3b-4 d4-4+         -11114.0000000 -1.11140E008
    -    -3 b3b-  d4-3              -0.1130000 -1.13000E-04
    -2+  -2 b3b   d4-               -0.1200000 -1.20000E001
    -1   -1 b3    d4                -0.1000000 -1.00000E-02
    0     0 b     d                      null1        null1
    1+    1 b3    d4                 0.1000000  1.00000E-02
    2++   2 b3b   d42                0.1200000  1.20000E001
    3     3 b3b3  d43+               0.1130000  1.13000E-04
    4+    4 b3b4+ d44+d          11114.0000000  1.11140E008
    5++   5 b     d45+d4                 null2        null2
    6     6 b3    d46+d4+            0.1111160  1.11116E005
    7+    7 b3b   d47+d4++           0.1111117  7.00000E-08
    8++   8 b3b8  d48+d4+++          8.0000000  1.80000E009
    9     9 b3b9+ d49+d4++++         0.9000000  1.19000E-08
    10   10 b     d410+d4++++            null1        null3
    11+  11 b3    d411+d4+++++       0.1110000  1.00000E-12
    1    12 b3b   d412+d4++++++  11112.0000000  2.00000E012
    13   13 b3b1  d               1111.3000000  1.13000E-12
    14+  14 b3b14 d4            111111.0000000  1.40000E013
    1    15 b     d41                    null2        null1
    16   16 b3    d416               6.0000000  1.16000E003
    17+  17 b3b   d417+              0.7000000  1.11170E-03
    1    18 b3b1  d418+d            11.0000000  1.11800E003
    19   19 b3b19 d419+d4            0.1190000  9.00000E-05
    20+  20 b     d420+d4+               null1        null2
    2    21 b3    d421+d4++         11.1210000  1.11000E-05
    22   22 b3b   d422+d4+++     11111.2000000  2.00000E007
    23+  23 b3b2  d423+d4++++        0.1111123  1.11230E-09
    c3L      a2i drei  d4                 fl5          ex6
    -11 -1.10E01 b3    d4-11+d   -111.1000000 -1.11000E-12
    -1  -1.00E01 b     d4-10+d          null1        null3
    -   -9.00E00 b3b-9 d4-9+d4    -11.0000000 -1.11900E-10
    -8+ -8.00E00 b3b-  d4-8+d4    -18.0000000 -1.18000E010
    -7  -7.00E00 b3b   d4-7+d4     -7.0000000 -1.70000E-07
    -   -6.00E00 b3    d4-6+d4     -0.1111160 -6.00000E006
    -5+ -5.00E00 b     d4-5+d           null2        null2
    -4  -4.00E00 b3b-4 d4-4+   -11114.0000000 -1.11140E008
    -   -3.00E00 b3b-  d4-3        -0.1130000 -1.13000E-04
    -2+ -2.00E00 b3b   d4-         -0.1200000 -1.20000E001
    -1  -1.00E00 b3    d4          -0.1000000 -1.00000E-02
    0    0.00E00 b     d                null1        null1
    1+   1.00E00 b3    d4           0.1000000  1.00000E-02
    2++  2.00E00 b3b   d42          0.1200000  1.20000E001
    3    3.00E00 b3b3  d43+         0.1130000  1.13000E-04
    4+   4.00E00 b3b4+ d44+d    11114.0000000  1.11140E008
    5++  5.00E00 b     d45+d4           null2        null2
    6    6.00E00 b3    d46+d4+      0.1111160  1.11116E005
    7+   7.00E00 b3b   d47+d4+      0.1111117  7.00000E-08
    8++  8.00E00 b3b8  d48+d4+      8.0000000  1.80000E009
    9    9.00E00 b3b9+ d49+d4+      0.9000000  1.19000E-08
    10   1.00E01 b     d410+d4          null1        null3
    11+  1.10E01 b3    d411+d4      0.1110000  1.00000E-12
    1    1.20E01 b3b   d412+d4  11112.0000000  2.00000E012
    13   1.30E01 b3b1  d         1111.3000000  1.13000E-12
    14+  1.40E01 b3b14 d4      111111.0000000  1.40000E013
    1    1.50E01 b     d41              null2        null1
    16   1.60E01 b3    d416         6.0000000  1.16000E003
    17+  1.70E01 b3b   d417+        0.7000000  1.11170E-03
    1    1.80E01 b3b1  d418+d      11.0000000  1.11800E003
    19   1.90E01 b3b19 d419+d4      0.1190000  9.00000E-05
    20+  2.00E01 b     d420+d4          null1        null2
    2    2.10E01 b3    d421+d4     11.1210000  1.11000E-05
    22   2.20E01 b3b   d422+d4  11111.2000000  2.00000E007
    23+  2.30E01 b3b2  d423+d4      0.1111123  1.11230E-09
$/tstFmt/ */

    call tst t, "tstFmt"
    b = jBuf()
    st = b'.BUF'
    call pipe '+F', b
    call tstDataClassOut '. c3 a2i i b3b c5 d4 c13 fl5 f8n2 ex6 e9n3',
        , -11, + 23
    call pipe '-'
    call fmtFTab abc, b
    call fmtFAddFlds fmtFReset(abc), oFlds(m.st.1)
    m.abc.1.tit = 'c3L'
    m.abc.2.fmt = 'e'
    m.abc.3.tit = 'drei'
    m.abc.4.fmt = 'l7'
    call fmtFWriteSt abc, b'.BUF'
    call tstEnd t
    return
endProcedure tstFmt

tstFTab: procedure expose m.
    call pipeIni
/*
$=/tstFTab/
    ### start tst tstFTab #############################################
    testData begin
    ..---------a2i-b3b------------------d4------fl5-ex6-------
    -11       -11 b3           -11+d4++++ -111.100 0.00e-9
    -1        -10 b            4-10+d4+++    null1 null3  .
    -          -9 b3b-9        d4-9+d4+++  -11.000 -0.1e-9
    -8+        -8 b3b-          d4-8+d4++  -18.000 -1.2e10
    -7         -7 b3b            d4-7+d4+   -7.000 -1.7e-7
    -          -6 b3              d4-6+d4   -0.111 -6.0e06
    -5+        -5 b                d4-5+d    null2 null2  .
    -4         -4 b3b-4             d4-4+ ******** -1.1e08
    -          -3 b3b-               d4-3   -0.113 -1.1e-4
    -2+        -2 b3b                 d4-   -0.120 -1.2e01
    -1         -1 b3                   d4   -0.100 -1.0e-2
    0           0 b                     d    null1 null1  .
    1+          1 b3                   d4    0.100 1.00e-2
    2++         2 b3b                 d42    0.120 1.20e01
    3           3 b3b3               d43+    0.113 1.13e-4
    4+          4 b3b4+             d44+d ******** 1.11e08
    5++         5 b                d45+d4    null2 null2  .
    6           6 b3              d46+d4+    0.111 1.11e05
    7+          7 b3b            d47+d4++    0.111 7.00e-8
    8++         8 b3b8          d48+d4+++    8.000 1.80e09
    9           9 b3b9+        d49+d4++++    0.900 1.19e-8
    10         10 b            410+d4++++    null1 null3  .
    11+        11 b3           11+d4+++++    0.111 0.00e-9
    1          12 b3b          2+d4++++++ ******** 2.00e12
    13         13 b3b1                  d 1111.300 0.00e-9
    14+        14 b3b14                d4 ******** 1.40e13
    1          15 b                   d41    null2 null1  .
    16         16 b3                 d416    6.000 1.16e03
    17+        17 b3b               d417+    0.700 1.11e-3
    1          18 b3b1             d418+d   11.000 1.12e03
    19         19 b3b19           d419+d4    0.119 9.00e-5
    20+        20 b              d420+d4+    null1 null2  .
    2          21 b3            d421+d4++   11.121 1.11e-5
    22         22 b3b          d422+d4+++ ******** 2.00e07
    23+        23 b3b2         423+d4++++    0.111 1.11e-9
    ..---------a2i-b3b------------------d4------fl5-ex6-------
    testData end
$/tstFTab/ */

    call tst t, "tstFTab"
    b = jBuf()
    st = b'.BUF'
    call pipe '+F', b
    call tstDataClassOut '. c3 a2i i b3b c5 d4 c13 fl5 f8n2 ex6 e9n3',
        , -11, + 23
    call pipe 'P|'
    call fTabReset ft, 2 1, 1 3
    call fTabAdd   ft, '.'   , '%-6C' , '.', 'testData begin',
                                            , 'testData end'
    call fTabAdd   ft, 'a2i' , ' %6i'
    call fTabAdd   ft, 'b3b' , ' %-12C'
    call fTabAdd   ft, 'd4'  , ' %10C'
    call fTabAdd   ft, 'fl5' , ' %8.3i'
    call fTabAdd   ft, 'ex6' , ' %7e'
    call fTab ft
    call pipe '-'
    call tstEnd t
    return
endProcedure tstFTab


tstfmtUnits: procedure
/*
$=/tstFmtUnits/
    ### start tst tstFmtUnits #########################################
    .            .3 ==>  0s30 ++>   0s30 -+> -0s30 -->  -0s30
    .            .8 ==>  0s80 ++>   0s80 -+> -0s80 -->  -0s80
    .             1 ==>  1s00 ++>   1s00 -+> -1s00 -->  -1s00
    .           1.2 ==>  1s20 ++>   1s20 -+> -1s20 -->  -1s20
    .            59 ==> 59s00 ++>  59s00 -+> -59s0 --> -59s00
    .         59.07 ==> 59s07 ++>  59s07 -+> -59s0 --> -59s07
    .        59.997 ==>  1m00 ++>   1m00 -+> -1m00 -->  -1m00
    .            60 ==>  1m00 ++>   1m00 -+> -1m00 -->  -1m00
    .          60.1 ==>  1m00 ++>   1m00 -+> -1m00 -->  -1m00
    .           611 ==> 10m11 ++>  10m11 -+> -10m1 --> -10m11
    .        3599.4 ==> 59m59 ++>  59m59 -+> -59m5 --> -59m59
    .        3599.5 ==>  1h00 ++>   1h00 -+> -1h00 -->  -1h00
    .          3661 ==>  1h01 ++>   1h01 -+> -1h01 -->  -1h01
    .         83400 ==> 23h10 ++>  23h10 -+> -23h1 --> -23h10
    .         84700 ==> 23h32 ++>  23h32 -+> -23h3 --> -23h32
    .         86400 ==>  1d00 ++>   1d00 -+> -1d00 -->  -1d00
    .         89900 ==>  1d01 ++>   1d01 -+> -1d01 -->  -1d01
    .       8467200 ==> 98d00 ++>  98d00 -+> -98d0 --> -98d00
    .    8595936.00 ==> 99d12 ++>  99d12 -+> -99d1 --> -99d12
    .    8638704.00 ==>  100d ++>   100d -+> -100d -->  -100d
    .       8640000 ==>  100d ++>   100d -+> -100d -->  -100d
    .     863913600 ==> 9999d ++>  9999d -+> ----d --> -9999d
    .     863965440 ==> ++++d ++> 10000d -+> ----d --> -----d
    .     8.6400E+9 ==> ++++d ++> +++++d -+> ----d --> -----d
    .            .3 ==>   0.300 ++>    0.300 -+>  -0.300 -->   -0.300
    .            .8 ==>   0.800 ++>    0.800 -+>  -0.800 -->   -0.800
    .             1 ==>   1.000 ++>    1.000 -+>  -1.000 -->   -1.000
    .           1.2 ==>   1.200 ++>    1.200 -+>  -1.200 -->   -1.200
    .            59 ==>  59.000 ++>   59.000 -+> -59.000 -->  -59.000
    .         59.07 ==>  59.070 ++>   59.070 -+> -59.070 -->  -59.070
    .        59.997 ==>  59.997 ++>   59.997 -+> -59.997 -->  -59.997
    .            60 ==>  60.000 ++>   60.000 -+> -60.000 -->  -60.000
    .          60.1 ==>  60.100 ++>   60.100 -+> -60.100 -->  -60.100
    .           611 ==> 611.000 ++>  611.000 -+> -611.00 --> -611.000
    .        3599.4 ==>   3k599 ++>    3k599 -+>  -3k599 -->   -3k599
    .        3599.5 ==>   3k600 ++>    3k600 -+>  -3k600 -->   -3k600
    .          3661 ==>   3k661 ++>    3k661 -+>  -3k661 -->   -3k661
    .         83400 ==>  83k400 ++>   83k400 -+> -83k400 -->  -83k400
    .     999999.44 ==> 999k999 ++>  999k999 -+> -999k99 --> -999k999
    .      999999.5 ==>   1M000 ++>    1M000 -+>  -1M000 -->   -1M000
    .    567.6543E6 ==> 567M654 ++>  567M654 -+> -567M65 --> -567M654
    .    .9999991E9 ==> 999M999 ++>  999M999 -+> -999M99 --> -999M999
    .    .9999996E9 ==>   1G000 ++>    1G000 -+>  -1G000 -->   -1G000
    .   .9999991E12 ==> 999G999 ++>  999G999 -+> -999G99 --> -999G999
    .   .9999996E12 ==>   1T000 ++>    1T000 -+>  -1T000 -->   -1T000
    .   567.6543E12 ==> 567T654 ++>  567T654 -+> -567T65 --> -567T654
    .   .9999991E15 ==> 999T999 ++>  999T999 -+> -999T99 --> -999T999
    .   .9999996E15 ==>   1P000 ++>    1P000 -+>  -1P000 -->   -1P000
    .   .9999991E18 ==> 999P999 ++>  999P999 -+> -999P99 --> -999P999
    .   .9999996E18 ==>   1E000 ++>    1E000 -+>  -1E000 -->   -1E000
    .   567.6543E18 ==> 567E654 ++>  567E654 -+> -567E65 --> -567E654
    .   .9999991E21 ==> 999E999 ++>  999E999 -+> -999E99 --> -999E999
    .   .9999996E21 ==>   1000E ++>    1000E -+>  -1000E -->   -1000E
    .   .9999992E24 ==> 999999E ++>  999999E -+> ------E --> -999999E
    .   .9999995E24 ==> ++++++E ++> 1000000E -+> ------E --> -------E
    .    10.6543E24 ==> ++++++E ++> +++++++E -+> ------E --> -------E
$/tstFmtUnits/ */
    call jIni
    call tst t, "tstFmtUnits"
    d = 86400
    lst = .3 .8 1 1.2 59 59.07 59.997 60 60.1 611 ,
          3599.4 3599.5 3661 d-3000 d-1700 d d+3500 ,
          d * 98 d * 99.49 d * 99.985 d*100 d * 9999 d * 9999.6 ,
          d * 1e5
    do wx=1 to words(lst)
        call tstOut t, right(word(lst, wx), 14) ,
                 '==>' fmtTime(   word(lst, wx)   ) ,
                 '++>' fmtTime(   word(lst, wx), 1),
                 '-+>' fmtTime('-'word(lst, wx),  ),
                 '-->' fmtTime('-'word(lst, wx), 1)
        end
    lst = subword(lst, 1, 14) 999999.44 999999.5,
        567.6543e6 .9999991e9 .9999996e9 .9999991e12 .9999996e12 ,
        567.6543e12 .9999991e15 .9999996e15 .9999991e18 .9999996e18 ,
        567.6543e18 .9999991e21 .9999996e21 .9999992e24 .9999995e24 ,
         10.6543e24
    do wx=1 to words(lst)
        call tstOut t, right(word(lst, wx), 14) ,
                 '==>' fmtDec(    word(lst, wx)   ) ,
                 '++>' fmtDec(    word(lst, wx), 1),
                 '-+>' fmtDec('-'word(lst, wx),   ),
                 '-->' fmtDec('-'word(lst, wx), 1)
        end
    call tstEnd t
    return
endProcedure tstfmtUnits

tstSb: procedure expose m.
/*
$=/tstSb/
    ### start tst tstSb ###############################################
    end        : 0
    char  3    : 1 abc
    lit   d?   : 0 .
    lit   de   : 1 de
    lit   de ? fg fgh: 1 fg
    while HIJ  : 0 .
    end        : 0
    while Jih  : 1 hi
    while ? klj: 1 jklkl ?
    end        : 1
    while ? klj: 0 .
    char  3    : 0 .
    lit        : 0 .
    until cba  : 0 .
    until ?qd  : 1 abc
    until ?qr  : 1 defdef .
    until ?qr  : 0 .
    strEnd ?   : 1 ?
    strEnd ?   : 0 .
    strEnd ?   : 1 ab??cd????gh?
    strEnd ") ": 1 ab) .
    strEnd ") ": 1 cd) ) gh) .
$/tstSb/ */
    call tst t, 'tstSb'
    call scanSBSrc s, 'abcdefghijklkl ?'
    call out 'end        :' scanSBEnd(s)
    call out 'char  3    :' scanChar(s, 3) m.s.tok
    call out 'lit   d?   :' scanLit(s, 'd?') m.s.tok
    call out 'lit   de   :' scanLit(s, 'de') m.s.tok
    call out 'lit   de ? fg fgh:',
            scanLit(s, 'de', '?', 'fg', 'fgh') m.s.tok
    call out 'while HIJ  :' scanWhile(s, 'HIJ') m.s.tok
    call out 'end        :' scanSBEnd(s)
    call out 'while Jih  :' scanWhile(s, 'Jih') m.s.tok
    call out 'while ? klj:' scanWhile(s, '? klj') m.s.tok
    call out 'end        :' scanSBEnd(s)
    call out 'while ? klj:' scanWhile(s, '? klj') m.s.tok
    call out 'char  3    :' scanChar(s, 3) m.s.tok
    call out 'lit        :' scanLit(s) m.s.tok
    call scanSBSrc s, 'abcdefdef ?'
    call out 'until cba  :' scanUntil(s, 'cba') m.s.tok
    call out 'until ?qd  :' scanUntil(s, '?qd') m.s.tok
    call out 'until ?qr  :' scanUntil(s, '?qr') m.s.tok
    call out 'until ?qr  :' scanUntil(s, '?qr') m.s.tok
    call out 'strEnd ?   :' scanStrEnd(s, '?') m.s.tok
    call out 'strEnd ?   :' scanStrEnd(s, '?') m.s.tok
    call scanSBSrc s, 'ab??cd????gh?ijk'
    call out 'strEnd ?   :' scanStrEnd(s, '?') m.s.tok
    call scanSBSrc s, 'ab) cd) ) gh) jk) )'
    call out 'strEnd ") ":' scanStrEnd(s, ') ') m.s.tok
    call out 'strEnd ") ":' scanStrEnd(s, ') ') m.s.tok
    call tstEnd t
    return
endProcedure tstSb

tstSb2: procedure expose m.
/*
$=/tstSb2/
    ### start tst tstSb2 ##############################################
    end        : 0
    char  3    : 1 abc
    lit   d?   : 0 .
    lit   de   : 1 de
    lit   de ? fg fgh: 1 fg
    while HIJ  : 0 .
    end        : 0
    while Jih  : 1 hi
    while ? klj: 1 jklkl ?
    end        : 1
    while ? klj: 0 .
    char  3    : 0 .
    lit        : 0 .
    until cba  : 0 .
    until ?qd  : 1 abc
    until ?qr  : 1 defdef .
    until ?qr  : 0 .
    strEnd ?   : 1 ?
    strEnd ?   : 0 .
    strEnd ?   : 1 ab??cd????gh?
    strEnd ") ": 1 ab) .
    strEnd ") ": 1 cd) ) gh) .
$/tstSb2/ */
    call tst t, 'tstSb2'
    call scanIni
    call scanSrc s, 'abcdefghijklkl ?'
    call out 'end        :' scanEnd(s)
    call out 'char  3    :' scanChar(s, 3) m.s.tok
    call out 'lit   d?   :' scanLit(s, 'd?') m.s.tok
    call out 'lit   de   :' scanLit(s, 'de') m.s.tok
    call out 'lit   de ? fg fgh:',
            scanLit(s, 'de', '?', 'fg', 'fgh') m.s.tok
    call out 'while HIJ  :' scanWhile(s, 'HIJ') m.s.tok
    call out 'end        :' scanEnd(s)
    call out 'while Jih  :' scanWhile(s, 'Jih') m.s.tok
    call out 'while ? klj:' scanWhile(s, '? klj') m.s.tok
    call out 'end        :' scanEnd(s)
    call out 'while ? klj:' scanWhile(s, '? klj') m.s.tok
    call out 'char  3    :' scanChar(s, 3) m.s.tok
    call out 'lit        :' scanLit(s) m.s.tok
    call scanSrc s, 'abcdefdef ?'
    call out 'until cba  :' scanUntil(s, 'cba') m.s.tok
    call out 'until ?qd  :' scanUntil(s, '?qd') m.s.tok
    call out 'until ?qr  :' scanUntil(s, '?qr') m.s.tok
    call out 'until ?qr  :' scanUntil(s, '?qr') m.s.tok
    call out 'strEnd ?   :' scanStrEnd(s, '?') m.s.tok
    call out 'strEnd ?   :' scanStrEnd(s, '?') m.s.tok
    call scanSrc s, 'ab??cd????gh?ijk'
    call out 'strEnd ?   :' scanStrEnd(s, '?') m.s.tok
    call scanSrc s, 'ab) cd) ) gh) jk) )'
    call out 'strEnd ") ":' scanStrEnd(s, ') ') m.s.tok
    call out 'strEnd ") ":' scanStrEnd(s, ') ') m.s.tok
    call tstEnd t
    return
endProcedure tstSb2

tstScan: procedure expose m.
/*
$=/tstScan.1/
    ### start tst tstScan.1 ###########################################
    scan src a034,Und hr123sdfER"st1" 'str2''mit''apo''s' .
    scan n tok 4: a034 key  val .
    scan , tok 1: , key  val .
    scan n tok 3: Und key  val .
    scan v tok 1:   key  val .
    scan n tok 10: hr123sdfER key  val .
    scan q tok 5: "st1" key  val st1
    scan v tok 1:   key  val st1
    scan a tok 19: 'str2''mit''apo''s' key  val str2'mit'apo's
    scan v tok 1:   key  val str2'mit'apo's
$/tstScan.1/ */
    call scanIni
    call tst t, 'tstScan.1'
    call tstScan1 ,'l"litEins"l"litZwei"ndv" "aq1' ,
        ,"a034,Und hr123sdfER""st1"" 'str2''mit''apo''s' "
    call tstEnd t

/*
$=/tstScan.2/
    ### start tst tstScan.2 ###########################################
    scan src a034,Und hr123sdfER"st1" 'str2''mit''apo''s' .
    scan n tok 4: a034 key  val .
    scan , tok 1: , key  val .
    scan n tok 3: Und key  val .
    scan b tok 1:   key  val .
    scan n tok 10: hr123sdfER key  val .
    scan " tok 5: "st1" key  val st1
    scan b tok 1:   key  val st1
    scan ' tok 19: 'str2''mit''apo''s' key  val str2'mit'apo's
    scan b tok 1:   key  val str2'mit'apo's
$/tstScan.2/ */
    call tst t, 'tstScan.2'
    call tstScan1 , 'ndsb1' ,
        ,"a034,Und hr123sdfER""st1"" 'str2''mit''apo''s' "
    call tstEnd t

/*
$=/tstScan.3/
    ### start tst tstScan.3 ###########################################
    scan src a034,'wie 789abc
    scan n tok 4: a034 key  val .
    scan , tok 1: , key  val .
    *** err: scanErr ending Apostroph(') missing
    .    e 1: last token  scanPosition 'wie 789abc
    .    e 2: pos 6 in string a034,'wie 789abc
    scan ' tok 1: ' key  val .
    scan n tok 3: wie key  val .
    scan s tok 1:   key  val .
    *** err: scanErr illegal number end after 789
    .    e 1: last token 789 scanPosition abc
    .    e 2: pos 14 in string a034,'wie 789abc
    scan d tok 3: 789 key  val .
    scan n tok 3: abc key  val .
$/tstScan.3/ */
    call tst t, 'tstScan.3'
    call tstScan1 , 'nds1' ,
        ,"a034,'wie 789abc"
    call tstEnd t

/*
$=/tstScan.4/
    ### start tst tstScan.4 ###########################################
    scan src litEinsefr 23 sdfER'str1'litZwei "str2""mit quo"s .
    scan l tok 7: litEins key  val .
    scan n tok 3: efr key  val .
    scan b tok 1:   key  val .
    scan d tok 2: 23 key  val .
    scan b tok 1:   key  val .
    scan n tok 5: sdfER key  val .
    scan a tok 6: 'str1' key  val str1
    scan l tok 7: litZwei key  val str1
    scan b tok 1:   key  val str1
    scan q tok 15: "str2""mit quo" key  val str2"mit quo
    scan n tok 1: s key  val str2"mit quo
    scan b tok 1:   key  val str2"mit quo
$/tstScan.4/ */
    call tst t, 'tstScan.4'
    call tstScan1 , 'l"litEins"l"litZwei"ndbaq1' ,
           ,"litEinsefr 23 sdfER'str1'litZwei ""str2""""mit quo""s "
    call tstEnd t

/*
$=/tstScan.5/
    ### start tst tstScan.5 ###########################################
    scan src  aha;+-=f ab=cdEf eF='strIng' .
    scan b tok 1:   key  val .
    scan k tok 4:  no= key aha val def
    scan ; tok 1: ; key aha val def
    scan + tok 1: + key aha val def
    scan - tok 1: - key aha val def
    scan = tok 1: = key aha val def
    scan k tok 4:  no= key f val def
    scan k tok 4: cdEf key ab val cdEf
    scan b tok 1:   key ab val cdEf
    scan k tok 8: 'strIng' key eF val strIng
    scan b tok 1:   key eF val strIng
$/tstScan.5/ */
    call tst t, 'tstScan.5'
    call tstScan1 , 'bk1'," aha;+-=f ab=cdEf eF='strIng' "
    call tstEnd t
    return
endProcedure tstScan

tstScanRead: procedure expose m.
/*
$=/tstScanRead/
    ### start tst tstScanRead #########################################
    name erste
    space
    name Zeile
    space
    nextLine
    nextLine
    space
    name dritte
    space
    name Zeile
    space
    name schluss
    space
$/tstScanRead/ */
    call scanReadIni
    call tst t, 'tstScanRead'
    b = jBuf('erste Zeile  ',,'  dritte Zeile  schluss  ')
    s = jOpen(scanRead(b), m.j.cRead)
    do while \scanEnd(s)
        if scanName(s) then             call tstOut t, 'name' m.s.tok
        else if scanVerify(s, ' ') then call tstOut t, 'space'
        else if scanReadNL(s) then      call tstOut t, 'nextLine'
        else if \scanEnd(s) then        call scanErr s, 'cannot scan'
        end
    call jClose s
    call tstEnd t

/*
$=/tstScanReadMitSpaceLn/
    ### start tst tstScanReadMitSpaceLn ###############################
    name erste
    spaceLn
    name Zeile
    spaceLn
    name dritte
    spaceLn
    name Zeile
    spaceLn
    name schluss
    spaceLn
$/tstScanReadMitSpaceLn/ */
    call tst t, 'tstScanReadMitSpaceLn'
    s = scanOpen(scanRead(b))
    do forever
        if scanName(s) then         call out 'name' m.s.tok
        else if scanSpace(s) then call out 'spaceLn'
        else if \scanEnd(s) then        call scanErr s, 'cannot scan'
        else                        leave
        end
    call scanClose s
    call tstEnd t

/*
$=/tstScanJRead/
    ### start tst tstScanJRead ########################################
    1 jRead n tok erste val .
    2 jRead s tok   val .
    3 jRead n tok Zeile val .
    4 jRead s tok   val .
    5 jRead n tok dritte val .
    6 jRead s tok   val .
    7 jRead n tok Zeile val .
    8 jRead s tok   val .
    9 jRead n tok schluss val .
    10 jRead s tok   val .
    11 jRead 0 tok 1 val 1
    12 jRead s tok   val 1
    13 jRead + tok + val 1
    14 jRead s tok   val 1
    15 jRead 0 tok 2. val 2..
    16 jRead s tok   val 2..
    17 jRead + tok + val 2..
    18 jRead . tok . val 2..
    19 jRead s tok   val 2..
    20 jRead 0 tok +.3 val +.3
    21 jRead 0 tok -45e-3 val -45E-3
    22 jRead s tok   val -45E-3
    23 jRead " tok "a""b" val a"b
    24 jRead s tok   val a"b
    25 jRead ' tok 'c''d' val c'd
    className 1: ScanRes 18: ScanRes
$/tstScanJRead/ */

    call tst t, 'tstScanJRead'
    call jWrite jOpen(b,'>>'), '1  + 2. +. +.3-45e-3 "a""b"' "'c''d'"
    s = jOpen(scanRead(jClose(b)), '<')
    do x=1 while ass('v', jReadO(s))  \== ''
        call out x 'jRead' m.v.type 'tok' m.v.tok 'val' m.v.val
        v.x = v
        end
    call jClose s
    call out 'className 1:' className(objClass(v.1)),
                    '18:' className(objClass(v.18))
    call tstEnd t
    return
endProcedure tstScanRead

tstScanUtilInto: procedure expose m.
/*
$=/tstScanUtilIntoL/
TEMPLATE P3
     DSN('DBAF.DA540769.A802A.P00003.BV5I3NRN.REC')
     DISP(OLD,KEEP,KEEP)
TEMPLATE P4
     DSN('DBAF.DA540769.A802A.P00004.BV5I3NTK.REC')
     DISP(OLD,KEEP,KEEP)
LOAD DATA        LOG NO RESUME NO REPLACE COPYDDN(TCOPYD)
           STATISTICS INDEX(ALL) REPORT NO UPDATE ALL
 EBCDIC  CCSID(00500,00000,00000)
 SORTKEYS
  -- ENFORCE NO
  SORTDEVT DISK
  SORTNUM 160
  WORKDDN(TSYUTD,TSOUTD)
  INTO TABLE OA1P.TWB981 PART 1 INDDN TREC134
 WORKDDN(TSYUTS,TSOUTS)
 INTO TABLE "A540769"
   ."TWK802A1"
 PART 00001 INDDN P0
 WHEN(00001:00002) = X'0041'
 ( "DE1"
  POSITION(  00003:00010) DECIMAL
 , "CH2"
  POSITION(  00011:00015) CHAR(00005)
 , "TS3"
  POSITION(  00016:00041) TIMESTAMP EXTERNAL
 , "TI4"
  POSITION(  00042:00049) TIME EXTERNAL
 , "DA5"
  POSITION(  00050:00059) DATE EXTERNAL
 , "IN6"
  POSITION(  00060:00063) INTEGER
 , "RE7"
  POSITION(  00064:00067) FLOAT(21)
 )
 INTO TABLE "A540769"."TWK802A1"
 PART 00002 INDDN P0
 WHEN(00001:00002) = X'0041'
 ( "DE1"
  POSITION(  00003:00010) DECIMAL
 , "CH2"
  POSITION(  00011:00015) CHAR(00005)
 )
 dobido
$/tstScanUtilIntoL/
$=/tstScanUtilInto/
  ### start tst tstScanUtilInto #####################################
  -- 1 scanUtilInto
  . ( "DE1"
  .  POSITION(  00003:00010) DECIMAL
  . , "CH2"
  .  POSITION(  00011:00015) CHAR(00005)
  . , "TS3"
  .  POSITION(  00016:00041) TIMESTAMP EXTERNAL
  . , "TI4"
  .  POSITION(  00042:00049) TIME EXTERNAL
  . , "DA5"
  .  POSITION(  00050:00059) DATE EXTERNAL
  . , "IN6"
  .  POSITION(  00060:00063) INTEGER
  . , "RE7"
  .  POSITION(  00064:00067) FLOAT(21)
  . ) .
  .  -- table OA1P.TWB981 part 00001
  -- 2 scanUtilInto
  . ( "DE1"
  .  POSITION(  00003:00010) DECIMAL
  . , "CH2"
  .  POSITION(  00011:00015) CHAR(00005)
  . ) .
  .  -- table A540769.TWK802A1 part 00002
  -- 3 scanUtilInto
$/tstScanUtilInto/ */

    call scanReadIni
    b = jBuf()
    call mAddst b'.BUF', mapInline('tstScanUtilIntoL')
    call tst t, 'tstScanUtilInto'
    s = jOpen(scanUtilReset(ScanRead(b)), '<')
    do ix=1
        call out '--' ix 'scanUtilInto'
        if \ scanUtilInto(s) then
            leave
        call out '  -- table' m.s.tb 'part' m.s.part
        end
    call tstEnd t
    return
endProcedure tstSCanUtilInto

tstScanWin: procedure expose m.
/*
$=/tstScanWin/
    ### start tst tstScanWin ##########################################
    info 0: last token  scanPosition erste     Zeile                 dr+
    itteZe\npos 1 in line 1: erste     Zeile
    name erste
    spaceNL
    name Zeile
    spaceNL
    name dritteZeeeile
    info 5: last token dritteZeeeile scanPosition    zeile4            +
    .    fuenfueberSechs\npos 1 in line 4:    zeile4
    spaceNL
    name zeile4
    spaceNL
    name fuenfueberSechsUnddSiebenUNDundUndUAcht
    spaceNL
    info 10: last token   scanPosition undZehnueberElfundNochWeiterZwoe+
    lfundim1\npos 9 in line 10:         undZehn
    name undZehnueberElfundNochWeiterZwoelfundim13
    spaceNL
    name Punkt
    infoE 14: last token Punkt scanPosition \natEnd after line 13: im13+
    .      Punkt
$/tstScanWin/ */
    call scanWinIni
    call tst t, 'tstScanWin'
    b = jBuf('?erste     Zeile?',,'?  dritteZeeeile?', '?   zeile4 ',
       ,'?          fuenf?', '?ueberSechsUnddS?', '?iebenUNDundUndU?',
       ,'?Acht           ?', '?               ?', '?        undZehn?',
       ,'?ueberElfundNoch?', '?WeiterZwoelfund?', '?im13      Punkt?')
    s = jOpen(scanWin(b, , , 2, 15), m.j.cRead)
    call tstOut t, 'info 0:' scanInfo(s)
    do sx=1 while \scanEnd(s)
        if scanName(s) then             call tstOut t, 'name' m.s.tok
        else if scanSpace(s) then call tstOut t, 'spaceNL'
        else if \scanEnd(s) then        call scanErr s, 'cannot scan'
        if sx // 5 = 0 then
            call tstOut t, 'info' sx':' scanInfo(s)
        end
    call tstOut t, 'infoE' sx':' scanInfo(s)
    call tstEnd t

/*
$=/tstScanWinRead/
    ### start tst tstScanWinRead ######################################
    info 0: last token  scanPosition erste     Zeile                z3 +
    com Ze\npos 1 in line 1: erste     Zeile
    name erste
    spaceNL
    name Zeile
    spaceNL
    name z3
    info 5: last token z3 scanPosition  com Zeeeile z4 come4          f+
    uenf\npos 4 in line 3:  z3 com Zeeeile
    spaceNL
    name z4
    spaceNL
    name fuenf
    spaceNL
    info 10: last token   scanPosition com    Sechs  com  sieben   comA+
    cht  com\npos 15 in line 5:     fuenf     c
    name com
    spaceNL
$/tstScanWinRead/ */
    call tst t, 'tstScanWinRead'
    call mAdd t.cmp,
       ,  "name Sechs",
       ,  "spaceNL",
       ,  "name com",
       ,  "info 15: last token com scanPosition   sieben   comAcht  c",
       || "om com    com\npos 2 in line 7: m  sieben   com" ,
       ,  "spaceNL",
       ,  "name sieben",
       ,  "spaceNL",
       ,  "name Acht",
       ,  "spaceNL",
       ,  "info 20: last token   scanPosition ueberElfundNochWeit com ",
       || "elfundim13\npos 1 in line 11: ueberElfundNoch",
       ,  "name ueberElfundNochWeit",
       ,  "spaceNL",
       ,  "name im13",
       ,  "spaceNL",
       ,  "name Punkt",
       ,  "info 25: last token Punkt scanPosition \natEnd after line ",
       || "13: im13      Punkt",
       ,  "infoE 26: last token Punkt scanPosition \natEnd after line",
       || " 13: im13      Punkt"
    b = jBuf('?erste     Zeile?',,'? z3 com Zeeeile?', '? z4 come4 ',
       ,'?    fuenf     c?', '?om    Sechs  co?', '?m  sieben   com?',
       ,'?Acht  com com  ?', '?  com          ?', '?  com   undZehn?',
       ,'?ueberElfundNoch?', '?Weit com elfund?', '?im13      Punkt?')
    s = scanWin(b, , , 2, 15)
    call scanOpts s, , , 'com'
    call tstOut t, 'info 0:' scanInfo(jOpen(s, m.j.cRead))
    do sx=1 while \scanEnd(s)
        if scanName(s) then             call tstOut t, 'name' m.s.tok
        else if scanSpace(s) then call tstOut t, 'spaceNL'
        else if \scanEnd(s) then        call scanErr s, 'cannot scan'
        if sx // 5 = 0 then
            call tstOut t, 'info' sx':' scanInfo(s)
        end
    call tstOut t, 'infoE' sx':' scanInfo(s)
    call tstEnd t
    return
endProcedure tstScanWin

tstjCatSql: procedure expose m.
/*
$=/tstJCatSql/
    ### start tst tstJCatSql ##########################################
    cmd1 select     current time                 stamp from s.1
    cmd2 update ";--""'/*"
    cmd3 delete '*/''"' / 3 - 1
    cmd4 .
$/tstJCatSql/ */
    call tst t, 'tstJCatSql'
    b = jBuf('select -- /* c1', ' /* c1 */ current/* c2 " '' ',
       ,'c3"', '  c4   */time', 'stamp-- c5', 'from s.1; /* c6 */ ;' ,
       ,';update ";--""''/*";;       del123',
       , 'ete ''*/''''"'' / 3 - 1  -- c7', '/*c8 */   ')
    call jCatSqlReset tstJCat, , jOpen(b, '<'), 30
    do sx=1 until nx = ''
        nx = jCatSqlNext(tstJCat, ';')
        call tstOut t, 'cmd'sx nx
        end
    call jClose b
    call tstEnd t
    return
endProcedure tstJCatSql

tstScanSql: procedure expose m.
    call scanWinIni
/*
$=/tstScanSqlId/
    ### start tst tstScanSqlId ########################################
    sqlId ABC
    spaceNL
    sqlId AB__345EF
    spaceNL
$/tstScanSqlId/ */
    call tst t, 'tstScanSqlId'
    b = jBuf('abc  --  kommentar', right('ab_', 72), '_345ef-- kom')
    s = jOpen(scanSql(b), m.j.cRead)
    do sx=1 while \scanEnd(s)
        if scanSqlID(s) then       call tstOut t, 'sqlId' m.s.val
        else if scanSpace(s) then call tstOut t, 'spaceNL'
        else                            call scanErr s, 'cannot scan'
        end
    call tstEnd t
/*
$=/tstScanSqlDelimited/
    ### start tst tstScanSqlDelimited #################################
    sqlDeId ABC
    spaceNL
    sqlDeId AB_3F
    spaceNL
    sqlDeId abc
    spaceNL
    sqlDeId ab_Ef
    spaceNL
$/tstScanSqlDelimited/ */
    call tst t, 'tstScanSqlDelimited'
    b = jBuf('abc  --  kommentar',,'  -- ',,right('ab_', 72),'3F-- kom',
           , '"abc"  --  ko', ' -- ',,right('"ab_', 72),'Ef"-- kom')
    s = jOpen(scanSql(b), m.j.cRead)
    do sx=1 while \scanEnd(s)
        if scanSqlDeID(s) then       call tstOut t, 'sqlDeId' m.s.val
        else if scanSpace(s) then call tstOut t, 'spaceNL'
        else                            call scanErr s, 'cannot scan'
        end
    call tstEnd t
/*
$=/tstScanSqlQualified/
    ### start tst tstScanSqlQualified #################################
    sqlQuId ABC 1 ABC
    sqlQuId AB_3F 1 AB_3F
    sqlQuId abc 1 abc
    sqlQuId ab_Ef 1 ab_Ef
    sqlQuId EINS.Zwei.DREI 3 EINS
    sqlQuId vi er.fu  enf 2 vi er
$/tstScanSqlQualified/ */
    call tst t, 'tstScanSqlQualified'
    b = jBuf('abc  --  kommentar',,'  -- ',,right('ab_', 72),'3F-- kom',
           , '"abc"  --  ko', ' -- ',right('"ab_', 72),'Ef"-- kom',
           , 'eins."Zwei', '" -- com', ' . -- com', '  -- com',
           , 'drei -- ko', '"vi er"."fu  enf   " -- co')
    s = jOpen(scanSql(b), m.j.cRead)
    do sx=1 while \scanEnd(s)
        if scanSqlQuID(s) then
            call tstOut t, 'sqlQuId' m.s.val m.s.val.0 m.s.val.1
        else if scanSpace(s) then call tstOut t, 'spaceNL'
        else                            call scanErr s, 'cannot scan'
        end
    call tstEnd t
/*
$=/tstScanSqlNum/
    ### start tst tstScanSqlNum #######################################
    sqlNum 1
    spaceNL
    sqlNum 2..
    spaceNL
    sqlNum .3
    spaceNL
    sqlNum 4.5
    spaceNL
    sqlNum +6
    spaceNL
    sqlNum +7.03
    spaceNL
    sqlNum -8
    spaceNL
    sqlNum -.9
    spaceNL
    sqlNum 1E2
    spaceNL
    sqlNum -2.E-2
    spaceNL
    sqlNum +.3E+3
    spaceNL
$/tstScanSqlNum/ */
    call tst t, 'tstScanSqlNum'
    b = jBuf('1 2. .3 4.5 +6 + --kom', , ' -- com ', , ' 7.03 -8 -  .9',
             '1e2 - 2.e-2 + .3e+3')
    s = jOpen(scanSql(b), m.j.cRead)
    do sx=1 while \scanEnd(s)
        if scanSqlNum(s) then
            call tstOut t, 'sqlNum' m.s.val
        else if scanSpace(s) then call tstOut t, 'spaceNL'
        else                            call scanErr s, 'cannot scan'
        end
    call tstEnd t
/*
$=/tstScanSqlNumUnit/
    ### start tst tstScanSqlNumUnit ###################################
    sqlNumUnit 1 KB
    spaceNL
    sqlNumUnit .3 MB
    sqlNumUnit .5
    sqlNumUnit +6.E-5 B
    spaceNL
    sqlNumUnit -7
    char *
    spaceNL
    sqlNumUnit -.8
    char T
    char B
    spaceNL
    *** err: scanErr scanSqlNumUnit after +9. bad unit TB
    .    e 1: last token Tb scanPosition .
    .    e 2: pos 41 in line 1: 1 kb .3mB.5 +   6.e-5B -7* -.8 TB + 9.T+
    b
    sqlNumUnit +9..
    spaceNL
$/tstScanSqlNumUnit/ */
    call tst t, 'tstScanSqlNumUnit'
    b = jBuf('1 kb .3mB.5 +   6.e-5B -7* -.8 TB + 9.Tb')
    s = jOpen(scanSql(b), m.j.cRead)
    do sx=1 while \scanEnd(s)
        if scanSqlNumUnit(s, 0, 'B KB MB') then
            call tstOut t, 'sqlNumUnit' m.s.val
        else if scanSpace(s) then call tstOut t, 'spaceNL'
        else if scanChar(s ,1) then call tstOut t, 'char' m.s.tok
        else call scanErr s, 'cannot scan'
        end
    call tstEnd t
    return
endProcedure tstScanSql

/*--- one single test scan with lines to scan in stem ln -------------*/
tstScan1:
parse arg sc, classs, ln
    if sc == '' then do
        call tstOut t, 'scan src' ln
        call scanSrc scanOpts(s), ln
        end
    else do
        call tstOut t, 'scan scanner' sc
        s = sc
        end
    m.s.key = ''
    m.s.val = ''
    do forever
        x = tstScanType(s, classs)
        if x == '' then
           leave
        call tstOut t, 'scan' x 'tok' length(m.s.tok)':' m.s.tok ,
                  'key' m.s.key 'val' m.s.val
        end
    return
endProcedure tstScan1

tstScanType: procedure expose m.
parse arg s, opt
    cx = 1
    a2 = ''
    res = 0
    do while cx <= length(opt)
        f = substr(opt, cx, 1)
        cx = cx + 1
        if pos(substr(opt, cx, 1), "'""") > 0 then do
            m.tstScanType.src = opt
            m.tstScanType.pos = cx
            call scanString tstScanType
            a2 = m.tstScanType.val
            cx = m.tstScanType.pos
            end
        if      f == 'a' then
            res = scanString(s, "'")
        else if f == 'b' then
            res = scanSpace(s)
        else if f == 'c' then
            res = scanChar(s, a2)
        else if f == 'd' then
            res = scanNat(s, a2)
        else if f == 'k' then
            res = scanKeyValue(s, 'def')
        else if f == 'l' then
            res = scanLit(s, a2)
        else if f == 'q' then
            res = scanString(s, '"')
        else if f == 'v' then
            res = scanVerify(s, a2)
        else if f == 'w' then
            res = scanWord(s)
        else if f == 'y' then
            res = scanVerify(s, a2, 'm')
        if res then
            return f
        end
    return scanType(s)
endProcedure tstScanType

/* copx tstBase end   *************************************************/

/* copx tst begin ****************************************************
      test infrastructure
***********************************************************************/
/*--- migrate all compares to new ones:
        tstCI input compare
        tstCO ouput migrated compares
        tstCIO input and output -------------------------------------*/
tstCI: procedure expose m.
parse arg m, nm
    m.m.CIO = 0
    signal tstCIwork
tstCIO: procedure expose m.
parse arg m, nm
    m.m.CIO = 1
tstCIwork:
    m.m.name = nm
    m.m.cmp.1 = left('### start tst' nm '', 67, '#')

    do ix=2 to arg()-1
        m.m.cmp.ix = arg(ix+1)
        end
    m.m.cmp.0 = ix-1
    if m.m.CIO then
        call tstCO m
    return

tstCO: procedure expose m.
parse arg m
    call tst2dpSay m.m.name, m'.CMP', 68
    return
/*--- initialise m as tester with name nm
        use inline input nm as compare lines -----------------------*/
tstReset: procedure expose m.
parse arg m, nm
    call tstIni
    m.m.name = nm
    m.m.inIx  = 0
    m.m.out.0 = 0
    m.m.err   = 0
    m.m.errHand = 0
    m.tst.act = m
    if \ datatype(m.m.trans.0, 'n') then
        m.m.trans.0 = 0
    m.m.trans.old = m.m.trans.0
    return
endProcedure tstReset

tst: procedure expose m.
parse arg m, nm, cmpSt
    call tstReset m, nm
    m.tst.tests = m.tst.tests+1
    if cmpSt == '' then do
        cmpSt = mCut(t'.CMP', 0)
        call tst4dp cmpSt, mapInline(nm)
        end
    m.m.cmp = cmpSt
    m.m.moreOutOk = 0
    call mAdd mCut(m'.IN', 0), 'tst in line 1 eins ,'    ,
                     , 'tst in line 2 zwei ;   ' ,
                     , 'tst in line 3 drei .schluss.'
    call tstOut m, left('### start tst' nm '', 67, '#')
    call errReset 'h', 'return tstErrHandler(ggTxt)'
    m.m.errCleanup = m.err.cleanup
    if m.tst.ini.j \== 1 then do
/*      call err implement outDest 'i', 'call tstOut' quote(m)', msg'
*/      end
    else do
        call oMutatName m, 'Tst'
        call oMutatName m'.IN', 'Tst'
        m.m.jReading = 1
        m.m.jWriting = 1
        m.m.jUsers = 0
        m.m.in.jReading = 1
        m.m.in.jWriting = 1
        m.m.in.jUsers = 0
        if m.tst.ini.e \== 1 then do
            m.m.oldJin = m.j.in
            m.m.oldOut = m.j.out
            m.j.in = m
            m.j.out = m
            end
        else do
            if m.pipe.0 <> 2 then
                call tstErr m, 'm.pipe.0' m.pipe.0 '<> 2'
            call pipe '+Ff', m , m'.IN'
            end
        end
    return m
endProcedure tst

tstEnd: procedure expose m.
parse arg m, opt opt2
    cmp = m.m.cmp
    m.m.jReading = 0
    m.m.jWriting = 0
    if m.tst.ini.j == 1 then do
        m.m.jReading = 0
        m.m.jWriting = 0
           if m.tst.ini.e \== 1 then do
            m.j.in = m.m.oldJin
            m.j.out = m.m.oldOut
            end
        else do
            if m.j.in \== m'.IN' | m.j.out \== m then
                call tstErr m, m.j.in '\==' m '|' m.j.out '\==' m
            call pipe '-'
            if m.pipe.0 <> 2 then
                call tstErr m, 'm.pipe.0' m.pipe.0 '<> 2'
            end
        end
    if m.m.err = 0 then
        if m.m.errCleanup \= m.err.cleanup then
            call tstErr m, 'err.Cleanup' m.err.cleanup '<> old',
                        m.m.errCleanup
    if m.m.out.0 \= m.cmp.0 & \ (m.m.moreOutOk,
            &  m.m.out.0 > m.cmp.0) then do
        call tstErr m, 'old' m.cmp.0 'lines \= new' m.m.out.0
        do nx = m.m.out.0 + 1 to min(m.m.out.0+10, m.cmp.0)
            say 'old -  ' m.cmp.nx
            end
        end
    call errReset 'h'
    m.tst.act = ''
    soll = 0
    if opt = 'err' then do
        soll = opt2
        if m.m.err \= soll then
            call err soll 'errors expected, but got' m.m.err
        end
    if m.m.err \= soll then do
        say 'new lines:' (m.m.out.0 - 1)
           call tst2dpSay m.m.name, m'.OUT', 68
        end
    say left('###' m.m.name 'end with' m.m.err 'errors ', 67, '#')

    if 1 & m.m.err \= soll then
        call err 'dying because of' m.m.err 'errors'
    m.m.trans.0 = m.m.trans.old
    return
endProcedure tstEnd

tst2dp: procedure expose m.
parse arg st, dp, ml
    dx = m.dp.0
    do sx=1 to m.st.0
        li = m.st.sx
        cx = 1
        do until cx > length(li)
            c = substr(li, cx, 1)
            ou = left('.', strip(c) == '' | pos(c, '.+') > 0)
            ex = min(length(li),cx+ml-length(ou)-2)
            ou = ou || substr(li, cx, ex+1-cx)
            dx = dx + 1
            c = right(ou, 1)
            if ex < length(li) then
                m.dp.dx = ou || '+'
            else if strip(c) == '' | pos(c, '.+') > 0 then
                m.dp.dx = ou || '.'
            else
                m.dp.dx = ou
            cx = ex +1
            end
        end
    m.dp.0 = dx
    return
endProcedure tst2dp

tst2dpSay: procedure expose m.
parse arg name, st, ml
    say '$=/'name'/'
    call tst2dp st, mCut('TST.TMP', 0), 68
    do nx=1 to m.tst.tmp.0
           say '   ' m.tst.tmp.nx
           end
     say '$/'name'/'
return tst2dpSay

tst4dp: procedure expose m.
parse arg st, dp
    sx = m.st.0
    inData = 0
    data = ''
    do dx=1 to m.dp.0
        li = strip(m.dp.dx)
        if pos(left(li, 1), '.+') > 0 then
         li = substr(li, 2)
        if right(li, 1) == '+' then do
            inData = 1
            data = data || left(li, length(li)-1)
            iterate
            end
        if right(li, 1) == '.' then
            li = left(li, length(li)-1)
        sx = sx + 1
        m.st.sx = repAll(data || li, '$ä', '/*', '$ö', '*/')
        inData = 0
        data = ''
        end
    m.st.0 = sx
    if inData then
        call err 'end inData'
    return
endProcedure tst4dp

/*--- write to test: say lines and compare them ----------------------*/
tstWrite: procedure expose m.
parse arg m, arg
    call tstOut m, 'out:' arg
    return
endProcedure tstWrite

tstOut: procedure expose m.
parse arg m, arg
    do tx=m.m.trans.0 by -1 to 1
        arg = repAll(arg, word(m.m.trans.tx, 1),
            , subword(m.m.trans.tx, 2))
        end
    call mAdd m'.OUT', arg
    nx = m.m.out.0
    cmp = m.m.cmp
    c = m.cmp.nx
    if nx > m.cmp.0 then do
        if nx = m.cmp.0+1 & \ m.m.moreOutOK then
            call tstErr m, 'more new Lines' nx
        end
    else if c \== arg then do
        do cx=1 to min(length(c), length(arg)) ,
             while substr(c, cx, 1) == substr(arg, cx, 1)
             end
         msg = 'old line' nx '<> new overnext, firstDiff' cx',',
                 'len old' length(c)', new' length(arg)

        if cx > 10 then
            msg = overlay('|', msg, cx-10)
        call tstErr m, msg
        say c
        end
    say arg
    return 0
endProcedure tstOut

tstWriteO: procedure expose m.
parse arg m, var
    cl = objClass(var, '')
    if cl == '' then do
        if var == '' then
            call tstOut t, 'tstR: @ obj null'
        else
            call tstOut t, 'no class for' var 'in tstWriteO|'
        end
    else if abbrev(var, m.o.escW) then do
        call tstOut t, o2String(var)
        end
    else if cl == m.class.classV then do
        call tstOut t, m.var
        end
    else if oKindOf(var, 'JRW') then do
        call tstOut t, 'tstWriteO kindOf JRW jWriteNow begin <<<'
        call jWriteNow m, var
        call tstOut t, 'tstWriteO kindOf JRW jWriteNow end   >>>'
        end
    else if oKindOf(var, 'ORun') then do
        call tstOut t, 'tstWriteO kindOf ORun oRun begin <<<'
        call oRun var
        call tstOut t, 'tstWriteO kindOf ORun oRun end   >>>'
        end
    else do
        do tx=m.m.trans.0 by -1 to 1 ,
                while word(m.m.trans.tx, 1) \== var
            end
        if tx < 1 then
            call mAdd M'.TRANS', var 'tstWriteoV' || (m.m.trans.0+1)
        call classOut , var, 'tstR: '
        end
    return
endProcedure tstWriteO

tstReadO: procedure expose m.
parse arg m, arg
    if right(m, 3) == '.IN' then
       m = left(m, length(m)-3)
    else
        call err 'tstReadO bad m' m
    ix = m.m.inIx + 1
    m.m.inIx = ix
    if ix <= m.m.in.0 then do
        call tstOut m, '#jIn' ix'#' m.m.in.ix
        return s2o(m.m.in.ix)
        end
    call tstOut m, '#jIn eof' ix'#'
    return ''
endProcedure tstReadO

tstFilename: procedure expose m.
parse arg suf, opt
    if m.err.os == 'TSO' then do
        dsn = dsn2jcl('~tmp.tst.'suf)
        if opt = 'r' then do
            if sysDsn("'"dsn"'") \== 'DATASET NOT FOUND' then
                call adrTso "delete '"dsn"'"
            call csiOpen 'TST.CSI', dsn'.**'
            do while csiNext('TST.CSI', 'TST.FINA')
                say 'deleting csiNext' m.tst.fina
                call adrTso "delete '"m.tst.fina"'"
                end
            end
        return dsn
        end
    else if m.err.os == 'LINUX' then do
        if abbrev(suf, '/') then
            fn = suf
        else
            fn = .Stream%%new('~/tmp/tst/'suf)%%qualify /* full path */
        cx = lastPos('/', fn)
        if cx > 0 then do
            dir = left(fn, cx-1)
            if \sysIsFileDirectory(dir) then
                call adrSh "mkdir -p" dir
            if \sysIsFileDirectory(dir) then
                call err 'tstFileName could not create dir' dir
            end
        if opt \= 'r' then
            nop
        else if sysIsFile(fn) then
            call sysFileDelete fn
        else if sysIsFileDirectory(fn) then
            call adrSh 'rm -r' fn
        return fn
        end
    else
        call err 'tstFilename does not implement os' m.err.os
endProcedure tstFilename

/*--- say total errors and fail if not zero --------------------------*/
tstTotal: procedure expose m.
    say '######'
    say '######'
    say '######' m.tst.tests 'tests with' ,
                 m.tst.err 'errors in' m.tst.errNames
    say '######'
    say '######'
    if m.tst.err \== 0 then
        call err m.tst.err 'errors total'
    return
endProcedure tstTotal

/*--- test err: message, count it and continue -----------------------*/
tstErr: procedure expose m.
parse arg m, msg
    say '### error' msg
    m.m.err = m.m.err + 1
    m.tst.err = m.tst.err + 1
    nm = m.m.name
    if wordPos(nm, m.tst.errNames) < 1 then
        m.tst.errNames = m.tst.errNames nm
    return 0
endProcedure tstErr

/*--- tstErrHandler: intercept errors --------------------------------*/
tstErrHandler: procedure expose m.
parse arg ggTxt
    m = m.tst.act
    if m == '' then
        call err ggTxt
    m.m.errHand = m.m.errHand + 1
    call errMsg ' }'ggTxt
    call tstOut m.tst.act, '*** err:' m.err.1
        do x=2 to m.err.0
            call tstOut m, '    e' (x-1)':' m.err.x
            end
    return 0
endSubroutine tstErrHandler

tstTrc: procedure expose m.
parse arg msg
    m.tst.trc = m.tst.trc + 1
    say 'tstTrc' m.tst.trc msg
    return m.tst.trc
endProcedure tstTrc

/*--- tstIni: global initialization ----------------------------------*/
tstIni: procedure expose m.
    if m.tst.ini \== 1 then do
        m.tst.ini = 1
        call mapIni
        m.tst.err = 0
        m.tst.trc = 0
        m.tst.errNames = ''
        m.tst.tests = 0
        m.tst.act = ''
        end
    if m.tst.ini.j \== 1 & m.j.ini == 1 then do
        m.tst.ini.j = 1
          call classNew 'n Tst u JRWO', 'm',
             , "jReadO return tstReadO(m)",
             , "jWrite call tstOut m, line",
             , "jWriteO call tstWriteO m, var"
        end
    if m.tst.ini.e \== 1 & m.pipe.ini == 1 then do
        m.tst.ini.e = 1
        end
    return
endProcedure tstIni
/* copx tst    end   **************************************************/
/* copx tstData begin *************************************************/
tstData: procedure expose m.
parse arg ty 2 le 'n' nu, l, r, num
    abs = abs(num)
    if nu \== '' then do
        if abs // 5 = 0 then
            return 'null' || (abs % 5 // nu + 1)
        end
    if ty = 'c' then do
        if le = '' then
            le = 8
        le = abs // le + 1
        if r = '' then
            r = '+'
        return left(l || num || r, le, right(r, 1))
        end
    if pos(ty, 'ief') < 1 then
        call err 'bad type' ty
    nn = abs
    if abbrev(num, '-') | abbrev(num, '+') then
        parse var num si 2 nn
    else
        si = ''
    if ty == 'e' then
        ex = 'e' || left('-', abs // 2) || (abs // 15)
    else
        ex = ''
    if le \== '' then
        nn = right(nn, abs // max(1, le - length(si||ex)) + 1, 1)
    if ty \== 'i' & (abs // 4) \= 0 & length(nn) > 1 then
            nn = overlay('.', nn, length(nn) - abs // length(nn))
     return si || nn || ex
endProcedure tstData

tstDataClassFo: procedure expose m.
parse arg flds
    ty = ''
    do fx=1 by 2 to words(flds)
        if word(flds, fx) = '.' then
            ty = ty', v'
        else
            ty = ty', f' word(flds, fx) 'v'
        end
    t = classNew('n* tstData u' substr(ty, 2))
    fo = oNew(m.t.name)
    fs = oFlds(fo)
    do fx=1 to m.fs.0
        f = fo || m.fs.fx
        m.f = word(flds, 2*fx)
        end
    return fo
endProcedure tstDataClassFo


tstDataClassOut: procedure expose m.
parse arg flds, f, t
    fo = tstDataClassFo(flds)
    fs = oFlds(fo)
    do x=f to t
        o = oCopy(fo)
        do fx=1 to m.fs.0
            na = substr(m.fs.fx, 2)
            f = o || m.fs.fx
            m.f = tstData(m.f, na, '+'na'+', x)
            end
        call outO o
        end
    return
endProcedure tstDataClassOut
/* copx tstData end ***************************************************/
/* copy tstAll end   **************************************************/
/* copy time begin -----------------------------------------------------
 11.05.23 wk: numeric digits transparent: in jeder Procedure drin
              time2jul, tst externalisiert
----------------------------------------------------------------------*/
/*--- read timeZoneOffset and leapSeconds registers
        and set variables for uniq ----------------------------------*/
timeReadCvt: procedure expose m.
parse arg debug
    numeric digits 15
    /* offsets documented in z/OS Data Areas  Vol.1 */
    cvtOH      = '00000010'          /* cvt control block Address */
    cvtext2O   = x2d('00000560') /* offset  to extension 2    */
    cvtldtoO   = x2d('00000038') /* offset to timezone    */
    cvtlsoO    = x2d('00000050') /* offset to leapSeconds */

    /* CVT CB        address               + extention2   */
    cvtExt2A       = C2D(STORAGE(cvtOH,4)) + cvtext2O
    /* cvtLdto timeZone              address +offset      */
    m.timeZone     = c2d(STORAGE(d2x(cvtext2A+cvtldtoO, 8), 8))
    m.timeStckUnit = 1e-6 / 256 / 16
    /* cvtLso LeapSecs               address +offset      */
    m.timeLeap     = C2D(STORAGE(d2x(cvtext2A+cvtlsoO, 8), 8))
    m.timeUQDigits = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ012345678'
                         /* find lrsn of day 0 */
    m.timeUQZero = timeGmt2Lrsn('2004-12-31-00.00.22.000000')
                         /* 0 out last 6 bits  */
    m.timeUQZero = b2x(overlay('000000', x2b(m.timeUQZero), 43))
    if debug == 1 then do
      say 'stckUnit          =' m.timeStckUnit
      say 'timeLeap          =' d2x(m.timeLeap,16) '=' m.timeLeap ,
                   '=' format(m.timeLeap * m.timeStckUnit, 9,3) 'secs'
      say 'timeZone          =' d2x(m.timeZone,16) '=' m.timeZone,
                   '=' format(m.timeZone  * m.timeStckUnit, 6,3) 'secs'
      say "cvtext2_adr       =" d2x(cvtExt2A, 8)
      say 'timeUQZero        =' m.timeUQZero
      say 'timeUQDigis       =' ,
                    length(m.timeUQDigits) 'digits' m.timeUQDigits
    end
    m.timeReadCvt = 1
    return
endSubroutine timeReadCvt

timestampParse:
    parse arg yyyy'-'mo'-'dd'-'hh'.'mm'.'ss'.'ffffff
    return

/*--- GMT timestamp yyyy-mm.... -> stck value char(8)
         BLSUXTID is described in z/OS V1R7.0 MVS IPCS Customization
         BLSUXTID format : mo/dd/yyyy hh:mm:ss.ffffff ---------------*/
timeGmt2Stck: procedure expose m.
    parse arg tst
    call timestampParse tst
    tDate = mo'/'dd'/'yyyy' 'hh':'mm':'ss'.'ffffff
    ACC=left('', 8, '00'x)
    ADDRESS LINKPGM "BLSUXTID TDATE ACC"
    RETURN acc
endProcedure timeGmt2Stck

/*--- GMT timestamp yyyy-mm.... -> stck value in hex(16) ------------*/
timeGmt2LRSN: procedure expose m.
    return c2x(left(timeGmt2Stck(arg(1)), 6))
endProcedure timeGmt2LRSN

/*--- LZT (Locale Zurich Tst -> stck value in hex(16) ---------------*/
timeLZT2LRSN: procedure expose m.
parse arg tst
    numeric digits 23
    if m.timeReadCvt \== 1 then
        call timeReadCvt
    return left(d2x(c2d(timeGmt2Stck(tst)) ,
                     - m.timeZone + m.timeLeap, 16), 12)
endProcedure timeLZT2LRSN
/*--- conversion from Stck Clock Value to GMT Timestamp
        BLSUXTOD is described in z/OS V1R7.0 MVS IPCS Customization
        input -> + leapseconds -> output ----------------------------*/
timeStck2Gmt: PROCEDURE expose m.
parse arg stck
  stck = left(stck, 8, '00'x)
  TDATE = COPIES('0' , 26)
  ADDRESS LINKPGM "BLSUXTOD stck TDATE"
  /* return format   : mo/dd/yyyy hh:mm:ss.ffffff */
  /* Timestamp format: yyyy-mm-dd-hh.mm.ss.ffffff */
  parse var TDATE mo '/' dd '/' yyyy hh ':' mm ':' ss '.' ffffff
RETURN yyyy'-'mo'-'dd'-'hh'.'mm'.'ss'.'ffffff
endProcedure timeStck2Gmt

/*--- conversion from Lrsn Clock Value to GMT Timestamp -------------*/
timeLrsn2Gmt:
    return timeStck2Gmt(x2c(arg(1)))
endProcedure timeLrsn2Gmt

/*--- conversion from Lrsn Clock Value to LZT Local Zurich Time -----*/
timeLrsn2LZT: procedure expose m.
parse arg lrsn
    numeric digits 23
    if m.timeReadCvt \== 1 then
        call timeReadCvt
    return timeStck2Gmt(d2c(x2d(left(lrsn, 16, 0)) ,
                           + m.timeZone-m.timeLeap))
endProcedure timeLrsn2LZT

/*--- timestamp to julian --------------------------------------------*/
time2jul: procedure expose m.
parse arg yyyy '-' mm '-' dd '-'
        /* date function cannot convert to julian, only from julian
            ==> guess a julian <= the correct and
                try the next values
        */
    j = trunc((mm-1) * 29.5) + dd
    yy = right(yyyy, 2)
    do j=j by 1
        j = right(j, 3, 0)

        d = date('s', yy || j, 'j')
        if substr(d, 3) = yy || mm || dd then
            return yy || j
        end
    return
endProcedure time2jul
/* copy time end -----------------------------------------------------*/
/* copy fmt    begin **************************************************/
/*--- format the first arg by the format in the second ---------------*/
fmt: procedure
parse arg v, f 2 l
    if abbrev('-', f) then
        return v
    else if f == 'l' then
        return left(v, l)
    else if f == 'r' then
        return right(v, l)
    else if f == 'f' then do
        parse value l'.0.0.' with b '.' a '.' e '.'
        return format(v, b, a, e, 0)
        end
    else if f == 'e' then do
        parse var l b '.' a '.' e '.'
        if b == '' then b = 2
        if a == '' then a = 2
        if e == '' then e = 2
        res = format(v, b, a, e, 0)
        y = length(res)-e-1
        if substr(res, y) = '' then
            return left(res, y-1)left('E', e+1, 0)
        else if substr(res, y+1, 1) == '+' then
            return left(res, y)substr(res, y+2)
        else if substr(res, y+2, 1) == '0' then
            return left(res, y+1)substr(res, y+3)
        else
            call err 'formatoverflow' f || l 'for' v '-->' res
        end
     else if f = 's' then
        if l == '' then
            return strip(v, 't')
        else
            return strip(v, l)
    else if f == 'w' then do
        parse var l st ',' le
        return substr(v, st, le)
        end
    else
        call err 'bad format' f l 'for' v
endProcedure fmt

/*--- format special (title, null Value also for numbers) ------------*/
fmtS: procedure expose m.
parse arg v, ty 2 l
    if ty == 'f' then do
        if \ dataType(v, 'n') then do
            parse value l'.0.0.' with b '.' a '.' e '.'
            return right(v, b + a + (a \== 0) + e + 2 * (e > 0))
            end
        end
    else if ty == 'e' then do
        if \ dataType(v, 'n') then do
            parse var l b '.' a '.' e '.'
            if b == '' then b = 2
            if a == '' then a = 2
            if e == '' then e = 2
            return right(v, b + a + (a \== 0) + e + (e > 0))
            end
        end
    return fmt(v,  ty || l)
endProcedure fmtS
fmtTime: procedure expose m.
parse arg s, signed
    return fmtUnits(s, 't', signed==1)
endProcedure fmtTime

fmtDec: procedure expose m.
parse arg s, signed
    return fmtUnits(s, 'd', signed==1)
endProcedure fmtDec

fmtUnits: procedure expose m.
parse arg s, scale, signed
    if s >= 0 then
        res = fmtUnitsNN(s, scale, wi)
    else
        res = '-'fmtUnitsNN(abs(s), scale, wi)
    len = m.fmt.units.scale.f.length + signed
    if length(res) <= len then
       return right(res, len)
    if \ abbrev(res, '-') then
        return right(right(res, 1), len, '+')
    if length(res) = len+1 & datatype(right(res, 1), 'n') then
        return left(res, len)
    return right(right(res, 1), len, '-')
endProcedure fmtUnits

fmtUnitsNN: procedure expose m.
parse arg s, scale
    sf = 'FMT.UNITS.'scale'.F'
    sp = 'FMT.UNITS.'scale'.P'
    if m.sf \== 1 then do
        call fmtIni
        if m.sf \== 1 then
            call err 'fmtUnitsNN bad scale' scale
        end

    do q=3 to m.sp.0 while s >= m.sp.q
        end
    do forever
        qb = q-2
        qu = q-1
        r = format(s / m.sp.qb, ,0)
        if q > m.sf.0 then
            return r || substr(m.sf.units, qb, 1)
        if r < m.sf.q * m.sf.qu then
            return (r % m.sf.qu) || substr(m.sf.units, qu, 1) ,
                              || right(r //m.sf.qu, m.sf.width, 0)
            /* overflow because of rounding, thus 1u000: loop back */
        q = q + 1
        end
endProcedure fmtUnitsNN

fmtIni: procedure expose m.
    if m.fmt.ini == 1 then
        return
    m.fmt.ini = 1
    call fmtIniUnits 't', '?smhd', 0 100 60 60 24 100, 0.01, 2
    call fmtIniUnits 'd', '?.kMGTPE', 0 copies('1000 ',8), 0.001, 3
    return
endProcedure fmtIni

fmtIniUnits: procedure expose m.
parse arg sc, us, fact, prod, wi
    sf = 'FMT.UNITS.'sc'.F'
    sp = 'FMT.UNITS.'sc'.P'
    m.sf.0 = words(fact)
    if length(us) + 1 <> m.sf.0 then
        call err 'fmtIniUnits mismatch' us '<==>' fact
    m.sf.1 = word(fact, 1)
    m.sp.1 = prod
    do wx=2 to m.sf.0
        wx1 = wx-1
        m.sf.wx = word(fact, wx)
        m.sp.wx = m.sp.wx1 * m.sf.wx
        end
    m.sp.0 = m.sf.0
    m.sf.units = us
    m.sf.width = wi
    m.sf.length= 2 * wi + 1
    m.sf = 1
    return
endProcedure fmtIniUnits

/* copy fmt    end   **************************************************/
/* copy fmtF   begin **************************************************/
fmtFCsvAll: procedure expose m.
parse arg fSep
    if fSep = '' then
        fSep = ','
    if \ inO(i) then
        return
    f = oFlds(i)
    li = ''
    do fx=1 to m.f.0
        li = li',' substr(m.f.fx, 2)
        end
    call out substr(li, 3)
    do until \ inO(i)
        li = ''
        do fx=1 to m.f.0
            if m.f.fx = '' then do
                li = li',' m.i
                end
            else do
                fld = substr(m.f.fx, 2)
                li = li',' m.i.fld
                end
            end
        call out substr(li, 3)
        end
    return
endProcedure fmtFCsvAll

fmtFAdd: procedure expose m.
parse arg m
    fx = m.m.0
    do ax=2 to arg()
        fx = fx + 1
        parse value arg(ax) with m.m.fx.fld m.m.fx.fmt m.m.fx.tit
        end
    m.m.0 = fx
    return m
endProcedure fmtFAdd

fmtFAddFlds: procedure expose m.
parse arg m, st
    fx = m.m.0
    do sx=1 to m.st.0
        fx = fx + 1
        parse value m.st.sx with m.m.fx.fld m.m.fx.fmt m.m.fx.tit
        end
    m.m.0 = fx
    return m
endProcedure fmtFAddFlds

fmtF: procedure expose m.
parse arg m, st
    if arg() >= 3 then
        mid = arg(3)
    else
        mid = ' '
    li = ''
    do fx=1 to m.m.0
        f = st || m.m.fx.fld
        li = li || mid || fmtS(m.f, m.m.fx.fmt)
        end
    return substr(li, 1 + length(mid))
endProcedure fmtF

fmtFTab: procedure expose m.
parse arg m, rdr, wiTi
    if m == '' then
        m = 'FMTF.F'
    return fmtFWriteSt(fmtFReset('FMTF.F'), j2Buf(rdr)'.BUF', wiTi)
endProcedure fmtFTab

fmtFReset: procedure expose m.
parse arg m
    m.m.0 = 0
    return m
endProcedure fmtFReset

fmtFWriteSt: procedure expose m.  ?????????
parse arg m, st, wiTi
    if m.st.0 < 1 then
        return 0
    if m.m.0 < 1 then
        call fmtFAddFlds m, oFlds(m.st.1)
    call fmtFDetect m, st
    if wiTi \== 0 then
        call out fmtFTitle(m)
    do sx=1 to m.st.0
        call out fmtF(m, m.st.sx)
        end
    return st.0
fmtFWriteSt

fmtFTitle: procedure expose m.
parse arg m
    if arg() >= 2 then
        mid = arg(2)
    else
        mid = ' '
    li = ''
    do fx=1 to m.m.0
        if m.m.fx.tit \= '' then
            t = m.m.fx.tit
        else if m.m.fx.fld = '' then
            t = '='
        else
            t = substr(m.m.fx.fld, 1+abbrev(m.m.fx.fld, '.'))
        li = li || mid || fmtS(t, m.m.fx.fmt)
        end
    return substr(li, 1 + length(mid))

    res = ''
    fs = m.form.FLDS
    do ix=1 to m.fs.0
        res = res fmtS(m.fs.ix, m.form.ix)
        end
    return substr(res, 2)
endProcedure fmtFldTitle


fmtFldTitle: procedure expose m.
parse arg form
    res = ''
    fs = m.form.FLDS
    do ix=1 to m.fs.0
        res = res fmtS(m.fs.ix, m.form.ix)
        end
    return substr(res, 2)
endProcedure fmtFldTitle

fmtFld: procedure expose m.
parse arg form, st
    res = ''
    fs = m.form.FLDS
    do ix=1 to m.fs.0
        f = m.fs.ix
        res = res fmt(m.st.f, m.form.ix)
        end
    return substr(res, 2)
endProcedure fmtData

fmtFldSquash: procedure expose m.
parse arg newFo, class, src
    fs = oFlds(class)
    do fx = 1 to m.fs.0
        fd = m.fs.fx
        lMi = 9e9
        lMa = 0
        rMi = 9e9
        rMa = 0
        len = 0
        do sx = 1 to m.src.0
            x = verify(m.src.sx.fd, ' ', 'n')
            if x < 1 then
                iterate
            lMi = min(lMi, x)
            lMa = max(lMa, x)
            x = length(strip(m.src.sx.fd, 't'))
            rMi = min(rMi, x)
            rMa = max(rMa, x)
            end
        if rMa = 0  then
            m.newFo.fx = 'w1,1'len
        else
            m.newFo.fx = 'w'lMi',' || (rMa+1-lMi)
        end
    m.newFo.0 = m.fs.0
    m.newFo.flds = fs
    return newFo
endProcedure fmtFldSquash

fmtFDetect: procedure expose m.
parse arg m, st
    do fx=1 to m.m.0
        if m.m.fx.fmt = '' then
            m.m.fx.fmt = fmtFDetect1(st, m.m.fx.fld)
        end
    return m
endProcedure fmtDetect

fmtFDetect1: procedure expose m.
parse arg st, suf
    aMa = -1
    aCnt = 0
    aDiv = 0
    nCnt = 0
    nMi = ''
    nMa = ''
    nDi = -1
    nBe = -1
    nAf = -1
    eMi = ''
    eMa = ''
    do sx=1 to m.st.0
        f = m.st.sx || suf
        v = m.f
        aMa = max(aMa, length(v))
        if \ dataType(v, 'n') then do
            aCnt = aCnt + 1
            if length(v) > 100 then
                aDiv = 99
            else if aDiv <=3 then
                if aDiv.v \== 1 then do
                    aDiv.v = 1
                    aDiv = aDiv + 1
                    end
            iterate
            end
        nCnt = nCnt + 1
        if nMi == '' then
            nMi = v
        else
            nMi = min(nMi, v)
        if nMa == '' then
            nMa = v
        else
            nMa = max(nMa, v)
        parse upper var v man 'E' exp
        if exp \== '' then do
            en = substr(format(v, 2, 2, 9, 0), 7)
            if en = '' then
                en = exp
            if eMi == '' then
                eMi = en
            else
                eMi = min(eMi, en)
            if eMa == '' then
                eMa = en
            else
                eMa = max(eMa, en)
            end
        parse upper var man be '.' af
        nBe = max(nBe, length(be))
        nAf = max(nAf, length(af))
        nDi = max(nDi, length(be || af))
        end
/*  say 'suf' suf aCnt 'a len' aMa 'div' aDiv
    say '   ' nCnt 'n' nMi'-'nMa 'be' nBe 'af' nAf,
            'di' nDi 'ex' eMi'-'eMa */
    if nCnt = 0 | aDiv > 3 then
        newFo = 'l'max(0, aMa)
    else if eMi \== '' then do
        f1  = substr(format(nMa, 2, 2, 9, 0), 7)
        if f1 \= '' then
            eMa = max(eMa, f1)
        newFo = 'e' || (1+(eMi < 0)) || '.' || (max(0, nDi-1))'.' ,
            || max(length(eMa+0), length(eMi+0))
        end
    else if nAf > 0 then
        newFo ='f'nBe'.'nAf
    else
        newFo ='f'nBe'.0'
/*  say '   ' newFo  */
   return newFo
endProcedure fmtFDetect1

fmtFldRW: procedure expose m.
parse arg fo
    ty = oGetClassPara(m.j.in)
    call assert 'oFlds(ty) == m.fo.flds', 'fo different flds than class'
    call out fmtFldTitle(fo)
    do while in(ii)
        call out fmtFld(fo, ii)
        end
    return
endProcedure fmtClassRW

fmtFldSquashRW: procedure expose m.
parse arg in, opCl
    if in = '' then
        in = m.j.in
    if opCl == 'opCl' then
        call jOpen in, 'r'
    ty = oGetClassPara(in)
    flds = oFlds(ty)
    st = 'FMT.CLASSAD'
    do ix=1 while jRead(in, st'.'ix)
        end
    m.st.0 = ix - 1
    fo = fmtFldSquash(sqFo, ty, st)
    call out fmtFldTitle(fo)
    do ix = 1 to m.st.0
        call out fmtFld(fo, st'.'ix)
        end
    if opCl == 'opCl' then
        call jClose in
    return
endProcedure fmtFldSquashRW
/* copy fmtF  end  * **************************************************/
/* copy sort begin ****************************************************/
sort: procedure expose m.
parse arg i, o, cmp
    if cmp == '' then
        m.sort.comparator = "cmp = m.l.l0 <<= m.r.r0"
    else if length(cmp) < 6 then
        m.sort.comparator = "cmp = m.l.l0" cmp "m.r.r0"
    else if pos(';', cmp) < 1 then
        m.sort.comparator = "aLe = l'.'l0; aRi = r'.'r0; cmp =" cmp
    else
        m.sort.comparator = "aLe = l'.'l0; aRi = r'.'r0;" cmp
    call sort1 i, 1, m.i.0, o, 1, sort.work, 1
    m.o.0 = m.i.0
    return
endProcedure sort

sort1: procedure expose m.
parse arg i, i0, le, o, o0, w, w0
    if le <= 3 then do
        if le = 3 then do
            call sortMerge i, i0, i0+1, i, i0+1, i0+2, w, w0
            call sortMerge i, i0+2, i0+3, w, w0, w0+2, o, o0
            end
        else if le = 2 then
            call sortMerge i, i0, i0+1, i, i0+1, i0+2, o, o0
        else if le = 1 then
            m.o.o0 = m.i.i0
        return
        end
    h = (le + 1) % 2
    call sort1 i, i0,   h,    o, o0+le-h, w, w0
    call sort1 i, i0+h, le-h, w, w0,      o, o0
    call sortMerge o, o0+le-h, o0+le, w, w0, w0+le-h, o, o0
    return
endProcedure sort1

sortMerge: procedure expose m.
parse arg l, l0, le, r, r0, re, o, o0
    do while l0 < le & r0 < re
        interpret m.sort.comparator
        if cmp then do
            m.o.o0 = m.l.l0
            l0 = l0 + 1
            end
        else do
            m.o.o0 = m.r.r0
            r0 = r0 + 1
            end
        o0 = o0 + 1
        end
    do while l0 < le
        m.o.o0 = m.l.l0
        l0 = l0 + 1
        o0 = o0 + 1
        end
    do while r0 < re
        m.o.o0 = m.r.r0
        r0 = r0 + 1
        o0 = o0 + 1
        end
    return
endProcedure sortMerge
/* copy sort end   ****************************************************/
/* copy match begin ***************************************************/
/************************************* begin     copy      match ******/
/*--- wildCard matching with the following wildchars:
          * 0-n chars
          ? 1 char
      fill matched expressions instem st if st is non empty
      return 1 if mask matches wert ----------------------------------*/
match: procedure expose m.
parse arg wert, mask, st
    if st == '' then
        return matchRO(wert, mask)
    m.st.0 = -9
    return matchSt(wert, mask, st, 0)
endProcedure match

/*--- return the fixed prefix of maskt -------------------------------*/
matchPref: procedure
arg mask, suff
    ix = verify(mask, '*?', 'm')
    if ix = 0 then
        return mask
    else
        return left(mask, ix-1)suff
endProcedure matchPref

/*--- return true if mask matches wert -------------------------------*/
matchRO: procedure
arg wert, mask
    ix = verify(mask, '*?', 'm')
    if ix < 1 then return (mask == wert)
    if length(wert) < ix-1 then return 0
    if left(mask, ix-1) \== left(wert, ix-1) then return 0
    if substr(mask, ix, 1) == '?' then do
        if length(wert) < ix then return 0
        return matchRO(substr(wert, ix+1), substr(mask, ix+1))
        end
    mask = substr(mask, ix+1)                /* * 0 - n Chars */
    do ex = 1+length(wert) to ix by -1
        if matchRO(substr(wert, ex), mask) then return 1
        end
    return 0
endProcedure matchRO

/*--- wildCard matching: fill matched expressions instem st
      return 1 if mask matches wert ----------------------------------*/
matchSt: procedure expose m.
parse arg wert, mask, st, sx
    ix = verify(mask, '*?', 'm')
    if ix < 1 then do
        if mask \== wert then
            return 0
        m.st.0 = sx
        return 1
        end
    if \ abbrev(wert, left(mask, ix-1)) then
        return 0
    reMa = substr(mask, ix+1)
    sx = sx + 1
    if substr(mask, ix, 1) == '?' then do /* ? 1 Character */
        if length(wert) < ix then
            return 0
        m.st.sx = substr(wert, ix, 1)
        return matchSt(substr(wert, ix+1), reMa, st, sx)
        end
    do lx = 1+length(wert) to ix by -1 /* greedy: from all to empty */
        if matchSt(substr(wert, lx), reMa, st, sx) then do
            m.st.sx = substr(wert, ix, lx-ix)
            return 1
            end
        end
    return 0
endProcedure matchSt

matchTrans: procedure expose m.
parse arg mask, st
    r = ''
    ox = 1
    sx = 0
    ix = verify(mask, '*?', 'm')
    do sx=1 to m.st.0 while ix > 0
        if sx > m.st.0 then
            call err 'matchTrans('mask',' st') has only' ,
                                     m.st.0 'variables'
        r = r || substr(mask, ox, ix-ox)m.st.sx
        ox = ix+1
        ix = verify(mask, '*?', 'm', ox)
        end
    if ix > 0 then
        call err 'matchTrans('mask',' st') has only' ,
                                     m.st.0 'variables'
    return r || substr(mask, ox)
endProcedure matchTrans
/* copy match end *****************************************************/
/* copy comp begin *****************************************************
    the shell compiler
         syntax and semantics of the shell language see javaDoc
***********************************************************************/
/***** initialisation *************************************************/
/*--- module initialisation ------------------------------------------*/
compIni: procedure expose m.
    if m.compIni = 1 then
        return
    m.compIni = 1
    call pipeIni
    call scanReadIni
    cc = classNew('n Compiler u')
    call mNewArea 'COMP.AST', '='
    m.comp.stem.0 = 0
    m.comp.idChars = m.ut.alfNum'@_'
    call compIniKI '=', "skeleton", "expression or block"
    call compIniKI '.', "object", "expression or block"
    call compIniKI '-', "string", "expression or block"
    call compIniKI '@', "shell", "pipe or $;"
    call compIniKI ':', "assignAttributes", "assignment or statement"
    call compIniKI '|', "assignTable", "header, sfmt or expr"
    call compIniKI '#', "text", "literal data"
    return
endProcedure compIni

compReset: procedure expose m.
parse arg m
    m.m.scan = scanRead(,,'|0123456789')
    m.m.chDol = '$'
    m.m.chSpa = ' ' || x2c('09')
    m.m.chNotBlock = '${}='
    m.m.chNotWord = m.m.chNotBlock || m.m.chSpa
    m.m.chKind = '.-=#@:|'
    m.m.chKin2 = '.-=#;:|'
    m.m.chKinC = '.-=@'
    m.m.chOp = '.-<@|?'
    m.m.chOpNoFi = '.-@|?'
    return m
endProcedure compReset

compIniKI: procedure expose m.
parse arg ki, m.comp.kind.ki.name, m.comp.kind.ki.expec
return

/*--- constructor of Compiler ----------------------------------------*/
comp: procedure expose m.
parse arg src
    nn = oNew('Compiler')
    if src \== '' then
        m.nn.cmpRdr = o2File(src)
    else
        m.nn.cmpRdr = ''
    return nn
endProcedure comp

/**** user interface **************************************************/
/*--- compile and run ------------------------------------------------*/
compRun: procedure expose m.
parse arg spec, inO, ouO, infoA
    cmp = comp(inO)
    r = compile(cmp, spec)
    if infoA \== '' then
        m.infoA = 'run'
    if ouO \== '' then
        call pipe '+F', ouO
    call oRun r
    if ouO \== '' then
        call pipe '-'
    return 0
endProcedure compRun

/*--- compile the source and return an oRunner with the code ---------*/
compile: procedure expose m.
parse arg m, spec
    call compReset m
    kind = '@'
    spec = strip(spec)
    do while pos(left(spec, 1), m.m.chKind) > 0
       kind = left(spec, 1)
       spec = strip(substr(spec, 2))
       end
    call scanSrc m.m.scan, spec
    m.m.compSpec = 1
    res = compCUnit(m, kind, 1)
    do while abbrev(m.m.dir, '$#')
        call envPutO substr(m.m.dir, 3, length(m.m.dir)-4),
            , compCUnit(m, right(m.m.dir, 1))
        end
    if \ m.m.compSpec then
        call jClose m.m.scan
    return res
endProcedure compile

/*--- cUnit = compilation Unit = separate compilations
              no nesting| --------------------------------------------*/
compCUnit: procedure expose m.
parse arg m, ki, isFirst
    s = m.m.scan
    code = ''
    do forever
        m.m.dir = ''
        src = compUnit(m, ki, '$#')
        if \ compDirective(m) then
            return scanErr(s, m.comp.kind.ki.expec "expected: compile",
                 m.comp.kind.ki.name "stopped before end of input")
        if \ compIsEmpty(m, src) then do
                /*wkTst??? allow assTb in separatly compiled units */
            if isFirst == 1 & m.src.type == ':' ,
              & pos(' ', src) < 1 &  abbrev(src, 'COMP.AST.') then
                call mAdd src, '', ''
            code = code || ';'compAst2code(m, src, ';')
            end
        if m.m.dir == 'eof' then do
            if \ m.m.compSpec | m.m.cmpRdr == '' then
                return oRunner(code)
            call scanReadReset s, m.m.cmpRdr
            call jOpen s, m.j.cRead
            m.m.compSpec = 0
            end
        else if length(m.m.dir) == 3 then
            ki = substr(m.m.dir, 3, 1)
        else
            return oRunner(code)
        end
endProcedure compCUnit

/*--- directives divide cUnits ---------------------------------------*/
compDirective: procedure expose m.
parse arg m
    m.m.dir = ''
    s = m.m.scan
    lk = scanLook(s)
    cx = pos('#', lk, 3)
    if \ abbrev(lk, '$#') then do
        if \ scanEnd(m.m.scan) then
            return 0
        m.m.dir = 'eof'
        return 1
        end
    else if scanLit(s, '$#end' , '$#out') then do
        m.m.dir = 'eof'
        return 1
        end
    else if pos(substr(lk, 3, 1), m.m.chKinD) > 0 then do
        m.m.dirKind = substr(lk, 3, 1)
        m.m.dir = left(lk, 3)
        end
    else if cx > 3 & pos(substr(lk, cx+1, 1), m.m.chKinD) > 0 then do
        m.m.dirKind = substr(lk, 3, 1)
        m.m.dir = left(lk, cx+1)
        end
    else
        call scanErr s, 'bad directive:' word(lk, 1)
    if \ scanLit(s, m.m.dir) then
            call scanErr m.m.scan, 'directive mismatch' m.m.dir
    return 1
endProcedure compDirective

/**** parse the whole syntax *******************************************
          currently, with the old code generation,
              parsing and code generation is intermixec
              migrating to AST should will separate these tasks
***********************************************************************/
compUnit: procedure expose m.
parse arg m, kind, stopper
    s = m.m.scan
    if pos(kind, m.m.chKind';') < 1 then
        return scanErr(s, 'bad kind' kind 'in compUnit(...'stopper')')
    if stopper == '}' then do
        if kind \== '#' then do
            one = compExpr(m, 'b', translate(kind, ';', '@'))
            if compisEmpty(m, one) then
                return compAST(m, 'block')
            else
                return compAST(m, 'block', one)
            end
        tx = '= '
        cb = 1
        do forever /* scan nested { ... } pairs */
            call scanVerify s, '{}', 'm'
            tx = tx || m.s.tok
            if scanLit(s, '{') then
                cb = cb + 1
            else if scanLook(s, 1) \== '}' then
                call scanErr s, 'closing } expected'
            else if cb <= 1 then
                leave
            else if scanLit(s, '}') then
                cb = cb - 1
            else
                call scanErr s, 'closing } programming error'
            tx = tx || m.s.tok
            end
        return compAst(m, 'block', tx)
        end
    else if pos(kind, '.-=') > 0 then do
        return compData(m, kind)
        end
    else if pos(kind, '@;') > 0 then do
        call compSpNlComment m
        return compShell(m)
        end
    else if kind == '|' | kind == ':' then do
        if kind == '|' then
            res = compAssTab(m)
        else
            res = compAssAtt(m)
        if abbrev(res, '#') then
            return compAst(m, ':', substr(res, 3))
        else
            return compAst(m, ';', substr(res, 3))
        end
    else if kind == '#' then do
        res = compAST(m, 'block')
        call compSpComment m
        if \ scanNL(s) then
            call scanErr s,
                , 'space nl expected in heredata until' stopper
        do while \ abbrev(m.s.src, stopper)
            call mAdd res, '=' strip(m.s.src, 't')
            if \ scanNL(s, 1) then do
                if stopper = '$#' then
                    leave
                call scanErr s, 'eof in heredata until' stopper
                end
            end
        return res
        end
endProcedure compUnit

/*--- compile data lines return stmts or expr ------------------------*/
compData: procedure expose m.
parse arg m, ki
    s = m.m.scan
    lines = compAST(m, 'block')
    do forever
        state = 'f'
        do forever
            l = compExpr(m, 'd', ki)
            if \ scanNL(s) then
                state = 'l'
            if \ compIsEmpty(m, l) | (state=='' &\abbrev(l, 'c')) then
                call mAdd lines, l
            if state == 'l' then
                leave
            call compComment m
            state = ''
            end
        one = compStmt(m)
        if one == '' then
            leave
        call mAdd lines, one
        call compComment m
        end
    return lines
endProcedure compData

/*--- compile shell and return code ----------------------------------*/
compShell: procedure expose m.
parse arg m
    a = compAst(m, ';')
    m.a.text = ''
    do forever
        one = compPipe(m)
        if one \== '' then
            m.a.text = m.a.text || one
        if \ scanLit(m.m.scan, '$;') then
            return a
        call compSpNlComment m
        end
endProcedure compShell

/*--- compile an expression, type d=data, b=block w=word, s=strip ---*/
compExpr: procedure expose m.
parse arg m, type, ki
    s = m.m.scan
    if length(type) \== 1 | pos(type, 'dsbw') < 1 then
        call scanErr s, 'bad type' type 'in compExpr(,' type','ki ')'
    if length(ki) \== 1 | pos(ki, m.m.chKind';') < 1 then
        call scanErr s, 'bad kind' ki 'in compExpr(,' type','ki ')'
    charsNot = if(type=='b', m.m.chNotBlock,
            , if(type=='w', m.m.chNotWord,m.m.chDol))
    laTx = 9e9
    st = compNewStem(m)
    gotCom = 0
    if pos(type, 'sb') > 0 then do
        call compSpComment m
        gotCom = gotCom | m.m.gotComment
        end
    ki2 = if(ki=='=', '-=', ki)
    do forever
        if scanVerify(s, charsNot, 'm') then do
            call mAdd st, ki2 m.s.tok
            laTx = min(laTx, m.st.0)
            end
        else do
            pr = compPrimary(m, ki, 1)
            if pr = '' then
                leave
            call mAdd st, pr
            laTx = 9e9
            end
        gotCom = gotCom | compComment(m)
        end
    do rx = m.st.0 by -1 to laTx while m.st.rx = ki2
        end
    if pos(type, 'bs') > 0 then do
       if rx >= laTx then
           m.st.rx = strip(m.st.rx, 't')
       m.st.0 = rx
       end
   if ki == '=' then
       if m.st.0 < 1 then
           return 'e='
       else
           ki = '-'
    return substr('ce', 2-gotCom, rx < 1)ki'0*' st
endProcedure compExpr

/*--- compile a primary and return code ------------------------------*/
compPrimary: procedure expose m.
parse arg m, ki, withChain
    s = m.m.scan
    if \ scanLit(s, '$') then
        return ''
    if scanString(s) then     /*wkTst??? brauchts beides? */
        return translate(ki, '.--', '@;=')'=' m.s.val
    if withChain then do
        if scanLit(s, '.', '-') then do
            op = m.s.tok
            return op'('compCheckNN(m, compObj(m, op),
                , 'objRef expected after $'op)
            end
        end
    if pos(ki, '.<') >= 1 then
        f = '. envGetO'
    else
        f = '- envGet'
    if scanLit(s, '{') then do
        if scanLit(s, '?') then
            f = '- envIsDefined'
        else if scanLit(s, '>') then
            f = '- envReadO'
        res = compCheckNE(m, compExpr(m, 'b', '='), 'var name')
        if \scanLit(s, '}') then
            call scanErr s, 'closing } missing after ${'
        return f'(' || comp2Code(m, '-'res)')'
        end
    if scanName(s) then
        return f"('"m.s.tok"')"
    call scanBack s, '$'
    return ''
endProcedure compPrimary

compObj: procedure expose m.
parse arg m, ki
    s = m.m.scan
    pk = compOpKi(m, '?')
    one = compBlock(m, ki pk)
    if one \== '' then
        return compAstAddOp(m, one, ki)
    pp = ''
    if pk \== '' then do
        ki = right(pk, 1)
        pp = left(pk, length(pk)-1)
        end
    one = compPrimary(m, translate(ki, '.', '@'), 0)
    if one \== '' then
        return pp || one
    if ki == '.' then do
        if scanLit(s, 'compile') then do
            if pos(scanLook(s, 1), m.m.chKinC) < 1 then
                call scanErr s, 'compile kind expected'
            call scanChar s, 1
            return pp'. compile(comp(j2Buf()), "'m.s.tok'")'
            end
        end
    call scanBack s, pk
    return ''
endProcedure compObj

compFile: procedure expose m.
parse arg m
    res = compCheckNE(m, compExprBlock(m, '='),
        , 'block or expr expected for file')
    if \ abbrev(res, '.') then do
        end
    else if substr(res, verify(res, '.', n), 3) == '0* ' then do
        st = word(res, 2)
        if m.st.0 = 1 & abbrev(m.st.1, '. envGetO(') then
                /* if undefined variable use new jbuf */
            if pos(')', m.st.1) == length(m.st.1) then
                m.st.1 = left(m.st.1, length(m.st.1)-1) ,
                         || ", '-b')"
        end
    return compASTAddOp(m, res, '<')
endProcedure compFile

/*--- scan an operator chain and a kind ------------------------------*/
compOpKi: procedure expose m.
parse arg m, opt
    s = m.m.scan
    op = ''
    if opt == '<' then do
        call scanVerify s, m.m.chOpNoFi
        op = m.s.tok
        if scanLit(s, '<') then
            return op'<'
        end
    call scanVerify s, m.m.chOp
    op = op || m.s.tok
    k1 = scanLook(s, 1)
    if k1 \== '' & pos(k1, m.m.chKind) > 0 then do
        call scanLit s, k1
        return op || k1
        end
    if opt == '?' | op == '' | pos(right(op, 1), m.m.chKind) > 0 then
        return op
    call scanErr s, 'no kind after ops' op
endProcedure compOpKi

/*--- block or expression --------------------------------------------*/
compExprBlock: procedure expose m.
parse arg m, ki
    s = m.m.scan
    pk = compOpKi(m, '<')
    if right(pk, 1) == '<' then
        return compAstAddOp(m, compFile(m), pk)
    res = compBlock(m, ki pk)
    if res \== '' then
        return res
    if pk \== '' then
        lk = right(pk, 1)
    else
        lk = translate(ki, '.', '@')
    res = compExpr(m, 's', lk)
    if res \== '' then
        return compASTAddOp(m, res, pk)
    call scanBack s, pk
    return res
endProcedure compExprBlock

/*--- compile a pipe and return code ---------------------------------*/
compPipe: procedure expose m.
parse arg m
    s = m.m.scan
    inp = ''
    out = ''
    stmts = ''
    sBef = ''
    do forever
        if scanLit(s, '$<') then
            inp = inp',' comp2Code(m, compFile(m))
        else if scanLit(s, '$>>', '$>') then
            if out <> '' then
                call scanErr s, 'duplicate output'
            else
                out = substr('?FA', length(m.s.tok), 1) ,
                      comp2Code(m, compFile(m))
        else if scanLit(s, '$|') then do
            if stmts == '' then
                call scanErr s, 'stmts expected before $|'
            sBef = sBef"; call pipe 'N|'" || stmts
            stmts = ''
            end
        else do
            one = comp2code(m, ';'compStmts(m))
            if one == '' then
                leave
            stmts = stmts';' one
            end
        call compSpNlComment m
        end
    if sBef == '' then do
        if inp == '' & out == '' then
            return stmts
        if stmts == '' then do
            call scanErr s,'no statemtents in pipe'
            stmts = '; call pipeWriteAll'
            end
        end
    else if stmts == '' then
        call scanErr s, 'stmts expected after $|'
    inO = left('f', inp \== '')
    inp = substr(inp, 3)
    parse var out ouO out
    if sBef == '' then
        return "; call pipe '+"ouO || strip(inO"',"out","inp, "T", ","),
                || stmts"; call pipe '-'"
    else
        return "; call pipe '+N" || strip(inO"',,"inp, "T", ",") ,
               || substr(sBef, 17),
               || "; call pipe '"left(ouO'P', 1)"|'" ,
                  strip(","out,"T", ",") || stmts"; call pipe '-'"
endProcedure compPipe

/*--- compile stmts (stmt or java) -----------------------------------*/
compStmts: procedure expose m.
parse arg m
    lst = compNewStem(m)
    do forever
        one = compStmt(m)
        if one == '' then do
            do forever
                la = compExpr(m, 's', ';')
                if compIsEmpty(m, la) then
                    leave
                la = strip(comp2code(m, ';'la))
                if right(la, 1) \== ',' then do
                    one = one la
                    leave
                    end
                one = one strip(left(la, length(la)-1))
                call compSpNlComment m
                end
             if one = '' then
                 return 'l*' lst
             one = ';' one
             end
        call mAdd lst, one
        call compSpNlComment m
        end
endProcedure compStmts

/*--- compile a single statement -------------------------------------*/
compStmt: procedure expose m.
parse arg m
    s = m.m.scan
    if scanLit(s, "$=") then do
        res = compAss(m)
        if res == '' then
            call scanErr s, 'assignment expected after $='
        return res
        end
    if scanLit(s, '$@') then do
        if \ scanName(s) then
            return 'l;' comp2Code(m,
                , '@'compCheckNE(m, compExprBlock(m, '@'),
                , "block or expr expected after $@"))
        fu = m.s.tok
        if fu == 'for' | fu == 'with' | fu == 'forWith' then do
            v = comp2Code(m, '-'compCheckNE(m, compExpr(m, 'b', '='),
                   , "variable name after $@for"))
            call compSpComment m
            st = comp2Code(m, ';'compCheckNN(m, compStmt(m, 'with'),
                     , "statement after $@for" v))
            if fu == 'forWith' then
                st = 'call envSetWith envGetO('v');' st
            if abbrev(fu, 'for') then
                st = 'do while envReadO('v');' st'; end'
            if fu == 'forWith' then
                st = 'call envPushWith "";' st '; call envPopWith'
            else if fu == 'with' then
                st = 'call envPushName' v';' st '; call envPopWith'
            return ';' st
            end
        if fu == 'do' then do
            call compSpComment m
            var = if(scanName(s), m.s.tok, '')
            pre = var
            call compSpComment m
            if scanLook(s, 1) \== '=' then
                var = ''
            call compSpComment m
            suf = compExpr(m, 's', ';')
            if \ compIsEmpty(m, suf) then
                suf = comp2Code(m, ':'suf)
            else if var \== '' then
                call scanErr s, "$@do control construct expected"
            else
                suf = ''
            call compSpComment m
            st = comp2Code(m, ";"compCheckNN(m, compStmt(m),
                     , "$@do statement"))
            return "; do" pre suf";",
                if(var \== "", "call envPut '"var"'," var";") st"; end"
            end
        if fu == 'ct' then do
            call compSpComment m
            call compInter(comp2Code(m, ';'compCheckNN(m, compStmt(m),
                , 'ct statement')));
            return '; '
            end
        if fu == 'proc' then do
            nm = compCheckNE(m, compExpr(m, 'b', '='), "proc name")
            call compSpComment m
            st = oRunner(comp2Code(m, ';'compCheckNN(m, compStmt(m),
                , 'proc statement')));
            call envPutO compInter('return' comp2Code(m, '-'nm)), st
            return '; '
            end
        if scanLit(s, '(') then do
            call compSpComment m
            if \ scanLit(s, ')') then
                call scanErr s, 'closing ) expected after $@'fu'('
            return '; call oRun envGetO("'fu'")'
            end
        if scanLit(s, '{', '.{', '-{', '={') then do
            br = m.s.tok
            a = compExpr(m, 'b', if(br == '{', '-', left(br, 1)))
            if \ scanLit(s, '}') then
                call scanErr s, 'closing } expected after $@'fu || br
            res = '; call oRun envGetO("'fu'")'
            if pos(left(a, 1), 'ec') < 1 then
                res = res',' comp2code(m, a)
            return res
            end
        call scanErr s, 'procCall, for, do, ct, proc' ,
                 'or objRef expected after $@'
        end
    if scanLit(s, '$$') then
        return  compCheckNN(m, compExprBlock(m, '='),
            , 'block or expression expected after $$')
    return ''
endProcedure compStmt

compAss: procedure expose m.
parse arg m, aExt
    s = m.m.scan
    sla = scanLook(s)
    slx = verify(sla, m.m.chKind'/'m.m.chOp, 'n')
    if slx > 0 then
       sla = left(sla, slx-1)
    sla = pos('/', sla) > 0
    nm = ''
    if \ sla then do
        nm = compExpr(m, 'b', '=')
        if compIsEmpty(m, nm) then
            return ''
        nm = comp2Code(m, '-'nm)
        if \ scanLit(s, "=") then
            return scanErr(s, '= expected after $=' nm)
        end
    m.m.bName = ''
    vl = compCheckNE(m, compExprBlock(m, '='),
        , 'block or expression after $=' nm '=')
    if sla then
        if m.m.bName == '' then
            call scanErr s, 'missing blockName'
        else
            nm = "'"m.m.bName"'"
    va = compAstAftOp(m, vl)
    if va \== '' & m.va.type == ':' then do
        pu = "call envPushName" nm
        if abbrev(m.m.astOps, '<') then
            call mAdd va, pu ", 'asM'", "call envPopWith"
        else if abbrev(m.m.astOps, '<<') then
            call mAdd va, pu ", 'asM'", "call envPopWith"
        else
            call mAdd va, pu ", 'as1'", "call envPopWith"
        return va
        end
    if compAstKind(m, vl) == '-' then
        return '; call envPut' nm',' comp2Code(m, vl)aExt
    else
        return '; call envPutO' nm',' comp2Code(m, '.'vl)aExt
endProcedure compAss

/*--- block deals with the correct kind and operators
      the content is parsed by compUnit ------------------------------*/
compBlock: procedure expose m.
parse arg m, dKi ops
    s = m.m.scan
    if \ scanLit(s, '{', '¢', '/') then
        return ''
    start = m.s.tok
    if (ops \== '' & pos(right(ops, 1), m.m.chKind) < 1) ,
        | pos(dKi, m.m.chKind) < 1 then
        return scanErr(s, 'bad kind' ops 'for block (def' dKi')')
    if ops == '' then do
        ki = dKi
        end
    else do
       ki = right(ops, 1)
       ops = left(ops, length(ops)-1)
       end
    starter = start
    if start == '{' then
        stopper = '}'
    else if start == '¢' then
        stopper = '$!'
    else do
        call scanVerify s, '/', 'm'
        starter = '/'m.s.tok'/'
        stopper = '$'starter
        if \scanLit(s, '/') then
            call scanErr s, 'ending / after stopper' stopper 'expected'
        end
    res = compUnit(m, ki, stopper)
    if \ scanLit(s, stopper) then do
        if pos(ki, ':|') < 1 | \ abbrev(stopper, '$') then
            call scanErr s, 'ending' stopper 'expected after' starter
        else if \ scanLit(s, substr(stopper, 2)) then
            call scanErr s, 'ending' stopper 'or' substr(stopper, 2),
                    'expected after' starter
        end
    if abbrev(starter, '/') then
        m.m.bName = substr(starter, 2, length(starter)-2)
    else
        m.m.bName = ''
    if m.res.text == '' then
        m.res.text = ' '
    return compAstAddOp(m, res, ops)
endProcedure compBlock

compAssAtt: procedure expose m. aClass
parse arg m
    res = ''
    aClass = ''
    s = m.m.scan
    last = ''
    do forever
        if compSpNlComment(m, '*') then do
            end
        else if pos(scanLook(s, 1), '/!}') > 0 then do
            leave
            end
        else if scanLit(s, ';', '$;') then do
            if last = ';' then
                res = res'; call envWithNext'
            last = ';'
            end
        else do
            s1 = compAss(m, ", 1")
            if s1 == '' then do
                s1 = compStmt(m)
                if s1 == '' then
                    leave
                end
            else do
                if last == ';' then
                    res = res'; call envWithNext'
                last = 'a'
                end
            res = res';' comp2code(m, ';'s1)
            end
        if res ==  '' then
            res = ';'
        end
    if last == '' then
        return res
    else
        return '# call envWithNext "b";' res ,
               '; call envWithNext "e";'
endProcedure compAssAtt

compAssTab: procedure expose m. aClass
parse arg m
    s = m.m.scan
    call compSpNlComment m, '*'
    hy = 0
    tab = ''
    do forever
        bx = m.s.pos
        if \ scanName(s) then
            leave
        hx = hy + 1
        h.hx.beg = bx
        if hx > 1 & bx <= h.hy.end then
            call scanErr s, 'header overlap' m.s.tok 'pos' bx
        h.hx = m.s.tok
        tab = tab', f' m.s.tok 'v'
        h.hx.end = m.s.pos
        hy = hx
        call compSpComment m, '*'
        end
    if tab \== '' then
       aClass = classNew('n* Ass u' substr(tab, 3))
    res = ''
    isFirst = 1
    do while scanNL(s)
        do forever
            call compSpNlComment m, '*'
            s1 = compStmt(m)
            if s1 == '' then
                leave
            res = res';' comp2code(m, ';'s1)
            last = 's'
            end
        if pos(scanLook(s, 1), '/!}') > 0 then
            leave

        do qx=1
            bx = m.s.pos
            s1 = compExpr(m, 'w', '=')
            if compIsEmpty(m, s1) then
                leave
            ex = m.s.pos
            if ex <= bx then
                return scanErr(s, 'colExpr backward')
            do hy=1 to hx while bx >= h.hy.end
                end
            hz = hy+1
            if hz <= hx & ex > h.hz.beg then
                call scanErr s, 'value on hdr' h.hy 'overlaps' h.hz
            else if hy > hx | bx >= h.hy.end | ex <= h.hy.beg then
                call scanErr s, 'value from' bx 'to' ex ,
                    'no overlap with header' h.hy
            if qx > 1 then
                nop
            else if isFirst then do
                res = res"; call envWithNext 'b', '"aClass"'"
                isFirst = 0
                end
            else
                res = res"; call envWithNext"
            res = res"; call envPut '"h.hy"'," comp2Code(m, "-"s1)", 1"
            call compSpComment m, '*'
            end
        end
    if isFirst then
        return res
    else
        return '#' res"; call envWithNext 'e'"
endProcedure compassTab

/**** lexicals ********************************************************/
/*--- skip a comment. return 0 if there is none ----------------------*/
compComment: procedure expose m.
parse arg m
    s = m.m.scan
    res = 0
    do forever
        if scanLit(s, '$**') then
            m.s.pos = 1 + length(m.s.src) /* before next nl */
        else if scanLit(s, '$*+') then
            call scanNL s, 1
        else if scanLit(s, '$*(') then do
            do forever
                if scanVerify(s, m.m.chDol, 'm') then iterate
                if scanNL(s) then iterate
                if compComment(m) then iterate
                if \ scanLit(s, '$') then
                    call scanErr s, 'source end in comment'
                if scanLit(s, '*)') then
                    return 1
                if scanLit(s, '$') then iterate
                if scanString(s) then iterate
                end
            end
        else
            return res
        res = 1
        end
endProcedure compComment

/*--- skip spaces and comments ---------------------------------------*/
compSpComment: procedure expose m.
parse arg m, xtra
    s = m.m.scan
    sp = 0
    co = 0
    do forever
        if scanVerify(s, m.m.chSpa) then
            sp = 1
        else if compComment(m) then
            co = 1
        else if xtra == '' then
            leave
        else if \ scanLit(s, xtra) then
            leave
        else do
            co = 1
            m.s.pos = 1+length(m.s.src)
            end
        end
    m.m.gotComment = co
    return co | sp
endProcedure compSpComment

/*--- skip spaces, NLs and comments ----------------------------------*/
compSpNlComment: procedure expose m.
parse arg m, xtra
    found = 0
    do forever
        if compSpComment(m, xtra) then
            found = 1
        else if scanNL(m.m.scan) then
            found = 1
        else
            return found
        end
endProcedure compSpComment
/**** small helper routines ******************************************/
compInter: procedure expose m.
    interpret arg(1)
    return
endProcedure compInter

/*--- if va == null then issue an error with msg --------------------*/
compCheckNN: procedure expose m.
parse arg m, va, msg
    if va == '' then
        call scanErr m.m.scan, msg 'expected'
    return va
endProcedure compCheckNN

/*--- return true iff expression is empty ---------------------------*/
compIsEmpty: procedure expose m.
parse arg m, ex
    if pos(' ', ex) < 1 & pos('COMP.AST.', ex) > 0 then do
         a = substr(ex, pos('COMP.AST.', ex))
         a = compAstAftOp(m, a)
         if m.a.type = 'block' then
             return 0 /* m.a.0 == 0 */
         else
             return m.a.text == ''
         end
    e1 = word(ex, 1)
    return ex = '' | verify(e1, 'ec', 'm') > 0
endProcedure compIsEmpty

/*--- if va == null or empty then issue an error with msg -----------*/
compCheckNE: procedure expose m.
parse arg m, ex, msg
    e1 = left(ex, 1)
    if compIsEmpty(m, ex) then
        call scanErr m.m.scan, msg 'expected'
    return ex
endProcedure compCheckNE

/**** AST = Astract Syntax Graph ***************************************
          goal is to migrate to migrate to old codeGenerator to AST
***********************************************************************/
/*--- create a new AST -----------------------------------------------*/
compAST: procedure expose m.
parse arg m, tp
    n = mNew('COMP.AST')
    m.n.type = tp
    if wordPos(tp, 'block') > 0 then do
        do cx=1 to arg()-2
            m.n.cx = arg(cx+2)
            end
        m.n.0 = cx-1
        end
    else do
        m.n.text = arg(3)
        m.n.0 = 0
        end
    m.a.isAnnotated = 1
    return n
endProcedure compAST

/*--- add operandands to an AST -------------------------------------*/
compASTAddOp: procedure expose m.
parse arg m, a, ops
    if ops == '' then
        return a
    if pos('COMP.AST.', a) < 1 then
        return ops || a
    if m.a.type = 'ops' then do
        m.a.text = ops || m.a.text
        return a
        end
    n = compAst(m, 'ops', ops)
    call mAdd n, a
    return n
endProcedure compAstAddOp

/*--- return the first AST after the operand chain
          put the operands into m.m.astOps ---------------------------*/
compASTaftOp: procedure expose m.
parse arg m, a
    m.m.astOps = ''
    if \ abbrev(a, 'COMP.AST.') then
        return ''
    do while m.a.type == 'ops'
        m.m.astOps = m.a.text || m.m.astOps
        a = m.a.1
        end
    return a
endProcedure compASTAftOpType

/*--- return the kind of an AST --------------------------------------*/
compASTKind: procedure expose m.
parse arg m, a
    m.m.astOps = ''
    if \ abbrev(a, 'COMP.AST.') then
        return left(a, 1)
    c = a
    do while m.c.type == 'ops'
        if m.c.text \== '' then
            return left(m.c.text, 1)
        c = m.c.1
        end
    if a == c then
        return '?'
    return compAstKind(m, c)
endProcedure compASTKind

/*--- return the code for an AST with operand chain trg --------------*/
compAst2Code: procedure expose m.
parse arg m, a, aTrg
    if pos(' ', a) > 0 | \ abbrev(a, 'COMP.AST.') then
        return comp2Code(m, aTrg || a)
    if \ abbrev(a, 'COMP.AST.') then
        call err 'bad ast' a
    do while m.a.type == 'ops'
        aTrg = aTrg || m.a.text
        a = m.a.1
        end
    trg = compAstOpsReduce(m, aTrg)
    if m.a.type == translate(right(trg, 1), ';', '@') then do
        if length(trg) == 1 then do
            if pos(trg, ';@') > 0  then
                return 'do;' m.a.text ';end'
            else
                return m.a.text
            end
        else
            return compAST2Code(m, a, left(trg, length(trg)-1))
        end
    if m.a.type == 'block' then do
        op = right(trg, 1)
        tLe = left(trg, length(trg)-1)
        call compASTAnnBlock m, a
        if pos(m.a.maxKind, '.-<') > 0 & pos(op, '.-|?') > 0 then do
            if m.a.0 = 1 then do
                o1 = if(op=='-', '-', '.')
                r = compAst2Code(m, m.a.1, o1)
                r = compC2C(m, o1, compAstOpsReduce(m, tLe||o1), r)
                if pos(op, '.-<') > 0 then
                    return '('r')'
                else
                    return r
                end
            if m.a.0 = 0 & op == '?' then
                return compC2C(m, '.', compAstOpsReduce(m, tLe'.'))
            if op == '-' then do
                cd = ''
                do cx = 1 to m.a.0
                    cd = cd '('compAst2Code(m, m.a.cx, '-')')'
                    end
                return compC2C(m, '-', trg, substr(cd, 2))
                end
            call scanErr m.m.scan, 'bad block cardinality' aTrg
            end
        cd = ''
        do cx = 1 to m.a.0
            cd = cd';' compAst2Code(m, m.a.cx, ';')
            end
        if right(trg, 1) == '@' then
            trg = overlay(';', trg, length(trg))
        return compC2C(m, ';', trg, 'do;' cd'; end')
        end
    else if m.a.type == ';' then do
        return compC2C(m, ';', trg, m.a.text)
        if right(trg, 1)  == '-' then
            return compAst2Code(m, "- o2String('"oRunner(m.a.text)"')",
                , trg)
        if right(trg, 1)  == '<' then
            return compAst2Code(m, "< o2File('"oRunner(m.a.text)"')",
                , trg)
        end
    else if m.a.type == ':' then do
        if m.a.0 = 0 then
            call mAdd a, 'call envPushWith', 'call envPopWith'
        return compC2C(m, ';', trg,
            , 'do;' m.a.1';' m.a.text';' m.a.2'; end')
        end
    call scanErr m.m.scan, 'implement type' m.a.type 'for' a 'trg' trg
endProcedure compAst2Code

/*--- do a chain of code transformations
          from code of kind fr by opList


    op  as from kind               operand
     =  constant                   -
     -  rexx string Expr           cast to string/ concat file/output
     .  rexx object Expr           cast to object
     <  rexx file   Expr           cast to file
     ;  rexx Statements            execute, write obj, Str
     @  -                          cast to ORun, run an obj, write file
     |  -                          extract exactlyOne
     ?  -                          extract OneOrNull
----------------------------------------------------------------------*/

compC2C: procedure expose m.
parse arg m, fr, opList, code
oldCode = fr':' code '==>' opList '==>'
    do tx=length(opList) by -1 to 1
        to = substr(opList, tx, 1)
        if fr == to then
            iterate
        nn = '||||'
        if to == '-' then do
            if fr == '=' then
                 nn = quote(code)
            else if abbrev(fr code, '. envGetO(') then
                nn =  'envGet(' || substr(code, 9)
            else if fr == ';' then
                nn = "o2String('"oRunner(code)"')"
            else if pos(fr, '.<') > 0 then
                nn = "o2String("code")"
            end
        else if to == '.' then do
            if fr == '=' then
                 nn = quote(s2o(code))
            else if abbrev(fr expr, '- envGet(') then
                nn = 'envGetO('substr(expr, 8)
            else if fr == '-' then
                nn = 's2o('code')'
            else if fr == '<' then
                 nn = code
            else if fr == ';' then
                nn = quote(oRunner(code))
            end
        else if to == '@' then do
            if fr == '.' then
                nn = 'call oRun' code
            else if fr == '<' then
                nn = 'call pipeWriteAll' code
            else if fr == ';' then
                nn = code
            to = ';'
            end
        else if to == ';' then do
            if fr == '=' then
                nn = 'call out' quote(code)
            else if fr == '-' then
                nn = 'call out' code
            else if fr == '.' | fr == '<' then
                nn = 'call outO' code
            end
        else if to == ':' then do
            if fr == '=' then
                 nn = quote(code)
            else
                nn = code
            to = ';'
            end
        else if to == '<' then do
            if fr == '-' then
                 nn = 'file('code')'
            else if fr == '=' then
                 nn = "file("quote(code)")"
            else if fr == '.' then
                nn = 'o2File('code')'
            else if fr == ';' then
                nn = 'o2File('oRunner(code)')'
            end
        else if to == '|' | to == '?' then do
            if fr == '<' | fr == '.' then
                nn = 'fileSingle('code if(to == '|','', ", ''")')'
            else if fr == '@' | fr == ';' then
                      /* ???wkTst optimize: do it directly */
                nn = compC2C(m, fr, to'<', code)
            to = '.'
            end
        if nn == '||||' then
            return scanErr(m.m.scan,
                ,'compC2C bad fr' fr 'to' to 'list' opList)
        fr = to
        code = nn
        end
    return code
endProcedure compC2C

/*--- reduce a chain of operands -------------------------------------*/
          eliminate duplicates and identity transformations ----------*/
compAstOpsReduce: procedure expose m.
parse arg m, ops
    ki = ops
    ki  = space(translate(ops, ' ', 'e('), 0)
    fr = ';<; <;< -.- <@<'
    to = ';   <   -   <  '
    fr = fr '== -- .. << ;; @@ @('
    to = to '=  -  .  <  ;  @  (@'
    wc = words(fr)
    do until ki = oldKi
        oldKi = ki
        do wx=1 to wc
            do forever
                wf = word(fr, wx)
                cx = pos(wf, ki)
                if cx < 1 then
                    leave
                ki = left(ki, cx-1) || word(to, wx) ,
                                    || substr(ki, cx+length(wf))
                end
            end
        end
    return ki
endProcedure compASTOpsReduce

/*--- annotate a block if necessary ----------------------------------*/
compASTAnnBlock: procedure expose m.
parse arg m, a
    if m.a.isAnnotated == 1 then
        return
    mk = ''
    do cx=1 to m.a.0
       c = m.a.cx
       if pos(' ', c) > 0 | \ abbrev(c, 'COMP.AST.') then
           ki = left(c, 1)
       else if \ abbrev(c, 'COMP.AST.') then
           return scanErr(m.m.scan, 'bad ast' c 'parent' a) /0
       else
           call scanErr m.m.scan, 'implement kind of' c 'type' m.c.type
       if pos(ki, '=-.<;@:|') < 1 then do
           if pos(ki, 'el0') < 1 then
               call err 'bad kind' ki
           end
       else if mk == '' | pos(ki, '=-.<;@:|') > pos(mk, '=-.<;@:|') then
           mk = ki
       end
    m.a.maxKind = mk
    m.a.isAnnotated = 1
    return
endProcedrue compASTAnnBlock
/**** old code generator ***********************************************
          plan is to replace it with AST ******************************/
/*--- transform abstract syntax tree to code ------------------------
  wkTst??? codeTree besser dokumentieren
           optimizer an/und/abschaltbar machen
                (test sollte laufen, allenfalls gehen rexx variabeln
                                       verloren)
        syntax tree is simple, only where
        * a transformation is needed from several places or
        * must be deferred for possible optimizations

sn = ops*                 syntax node            op or syntax function
    ( '=' constant                            none
    | '-' rexxExpr     yielding string            cast to string
    | '.' rexxExpr     yielding object            cast to object
    | '<' rexxExpr     yielding file            cast to file
    | ';' rexxStmts                            execute, write obj, Str
    | '*' stem         yielding multiple sn    none
    )

ops = '@'                                    cast to ORun
    | '|'                                    single
    | 'e'                                    empty = space only
    | 'c'                                    empty = including a comment
    | '0'                                    cat expression parts
    | 'l'                                    cat lines
    | '('                                    add ( ... ) or do ... end
---------------------------------------------------------------------*/

comp2Code: procedure expose m.
parse arg m, ki expr
    if expr == '' & pos(' ', ki) < 1 & pos('COMP.AST.', ki) > 0 then do
         cx = pos('COMP.AST.', ki)
         return compAst2Code(m, substr(ki, cx), left(ki, cx-1))
         end
    /* wkTst??? optimize: use stem with code and interpret */
    if expr = '' & pos(right(ki, 1), '@;=') < 1 then
        return scanErr(m.m.scan, 'comp2Code empty expr' ki expr)
    do forever
        ki = comp2CodeKind(m, ki)
        if length(ki) <= 1 then
            if pos(ki, m.m.chKind';<') > 0 then
                return expr
            else
                call err 'comp2Code bad return' ki expr
        fr = right(ki, 1)
        to = substr(ki, length(ki)-1, 1)
        opt = ''
        if pos(to, 'l0') > 0 | (to == '*' & fr == '*') then do
            opt = to
            to = substr(ki, length(ki)-2, 1)
            end
        toBef = to
        nn = '||||'
        if fr == '*' then do
            if opt == '' then
                call scanErr m.m.scan, 'no sOp for * kind' ki expr
            cat = comp2CodeCat(m, expr, opt, to)
            parse var cat to nn
            end
        else if to == '-' then do
            if fr == '=' then
                 nn = quote(expr)
            else if abbrev(fr expr, '. envGetO(') then
                nn =  'envGet(' || substr(expr, 9)
            else if fr == ';' then
                nn = "o2String('"oRunner(expr)"')"
            else if pos(fr, '.<') > 0 then
                nn = "o2String("expr")"
            end
        else if to == '.' then do
            if fr == '=' then
                 nn = quote(s2o(expr))
            else if abbrev(fr expr, '- envGet(') then
                nn = 'envGetO('substr(expr, 8)
            else if fr == '-' then
                nn = 's2o('expr')'
            else if fr == '<' then
                 nn = expr
            else if fr == ';' then
                nn = quote(oRunner(expr))
            end
        else if to == '@' then do
            if fr == '.' then
                nn = 'call oRun' expr
            else if fr == '<' then
                nn = 'call pipeWriteAll' expr
            else if fr == ';' then
                nn = expr
            to = ';'
            end
        else if to == ';' then do
            if fr == '=' then
                nn = 'call out' quote(expr)
            else if fr == '-' then
                nn = 'call out' expr
            else if fr == '.' | fr == '<' then
                nn = 'call outO' expr
            else if fr == '#' then
                nn = 'call envPushWith ;'expr'; call envPopWith'
            end
        else if to == ':' then do
            if fr == '=' then
                 nn = quote(expr)
            else
                nn = expr
            to = ';'
            end
        else if to == '<' then do
            if fr == '-' then
                 nn = 'file('expr')'
            else if fr == '=' then
                 nn = "file("quote(expr)")"
            else if fr == '.' then
                nn = 'o2File('expr')'
            else if fr == ';' then
                nn = 'o2File('oRunner(expr)')'
            end
        else if to == '(' then do
            nn = compAddBracks(m, fr, expr)
            to = fr
            end
        else if to == '|' | to == '?' then do
            if fr == '<' | fr == '.' then do
                nn = 'fileSingle('expr if(to == '|','', ", ''")')'
                to = '.'
                end
            else if fr == '@' | fr == ';' then do
                to = to'<'fr
                nn = expr
                end
            end
        if nn == '||||' then
            return scanErr(m.m.scan,
                ,'comp2code bad fr' fr 'to' toBef 'for' ki expr)
        ki = left(ki, length(ki)-2-length(opt))to
        expr = nn
        end
endProcedure comp2Code

/*--- optimize operands: eliminate duplicates and
                         identity transformations -------------------*/
comp2CodeKind: procedure expose m.
parse arg m, ki
    ki = '$'space(translate(ki, '  ', 'ce'), 0)
    fr.2 = '== -- .. << ;; (( -( .(  ;( (< @;  @@ ;@ @( $l $0 @#'
    to.2 = '=   -  .  <  ;  ( (- (.  (; <  ;   @  @  (@ $  $  ;#'
    fr.3 = ';0; ;l; -.- -;- .-. .;. ;<; ;<( <(; @(- @(l |(l ?(l'
    to.3 = ' 0;  l;   -   -   .   .   ; ;<  <;  ;(- ;(l (|l (?l'
    do until ki = oldKi
        oldKi = ki
        do le=3 by-1 to 2
            do cx=1 while cx <= length(ki)+1-le
                wx = wordPos(substr(ki, cx, le), fr.le)
                if wx > 0 then
                    ki = left(ki, cx-1) || ,
                        word(to.le, wx) || substr(ki, cx+le)
                end
            end
        end
    return substr(ki, 2)
endProcedure comp2CodeKind

/*--- generate one codeString for one stem -------------------------*/
comp2CodeCat: procedure expose m.
parse arg m, st, sOp, trgt
    toCode = trgt == '@' | trgt == ';'
    if m.st.0 < 1 & trgt \== '<' then
        return trgt
    tr1 = trgt
    if \ toCode then do
                        /* check wether we need to evaluate statements
                            and cast the outptut to an object */
        maxTy = 0
         do x=1 to m.st.0
            maxTy = max(maxTy, pos(left(m.st.x, 1), '=-.<;@'))
            end
        if trgt \== '<' then do
            if maxTy >= 5 then do
                tr1 = ';'
                toCode = 1
                end
            end
        else do                        /* handle files */
            if maxTy > 1 then do    /* not constant */
                res = ';'
                do sx=1 to m.st.0
                    res = res';' comp2Code(m, ';'m.st.sx)
                    end
                return '<'res
                end
                                    /* constant file write to jBuf */
            buf = jOpen(jBuf(), m.j.cWri)
            do sx=1 to m.st.0
                call jWrite buf, substr(m.st.sx, 3)
                end
            return '<' quote(jClose(buf))
            end
        end

    if m.st.0 = 1 then do
        if trgt == '|' | trgt == '?' then
            return left(m.st.1, 1)  comp2Code(m, m.st.1)
        else if trgt \== '<' then
            return trgt comp2Code(m, trgt || m.st.1)
        end
    tr2 = tr1
    if toCode then do
        mc = '; '
        if sOp == 0 then do
            mc = ''
            tr2 = ':'
            end
        end
    else if sOp == '0' then
        mc = if(tr1 == '.' | tr1 == '-', '', ' || ')
    else if sOp == 'l' then
        mc = ' '
    else
        call scanErr m.m.scan, 'bad sOp' sOp ,
            'in comp2CodeCat('m',' st',' sOp',' trgt')'
    if symbol('m.st.1') \== 'VAR' then
        return err("bad m."st'.1')
    sep = if(tr1 == '.' | tr1 == '-' | tr1 == '=', ' || ', ' ')
    sep = if(sOp = 0, ' || ', ' ')
    tr3 = left(tr2, sOp \== 0)
    res = comp2Code(m, tr3 || m.st.1)
    do sx = 2 to m.st.0
        if (tr2 == '.' | tr2 == '-') ,
            & (m.st.sx = '-' | m.st.sx = '.') then do
                /* empty expr is simply a rexx syntax space */
            if right(res, 1) \== ' ' then
                res = res' '
            end
        else do
            act = comp2Code(m, tr3 || m.st.sx)
            res = compCatRexx(res, act, mc, sep)
            end
        end
    return copies(trgt || sOp, tr1 \== trgt)tr1 res
endProcedure comp2CodeCat

/*--- add expression brackets if necessary --------------------------*/
compAddBracks: procedure expose m.
parse arg m, ki, ex
    if ki == ';' then
         return 'do;' ex || left(';', ex \= '') 'end'
    if \ (ki == '.' | ki == '-') then
        return ex
    ex = strip(ex)
    e1 = left(ex, 1)
    if e1 == '(' & pos('(', ex, 2) = 0 & pos(')', ex) = length(ex) then
        return ex
    if pos(e1, '"''') > 0  & pos(e1, ex, 2) = length(ex) then
        return ex
    return '('ex')'
endProcedure compAddBracks

/*--- cat two rexx parts, avoid strange effects--------------------*/
compCatRexx: procedure expose m.
parse arg le, ri, mi, sep
    if mi \== '' then
        return le || mi || ri
    lr = right(le, 1)
    rl = left(ri, 1)
    if (lr == "'" | lr == '"') then do
        if rl == lr then                /* "a","b" -> "ab" */
            return left(le, length(le)-1) || substr(ri, 2)
        else if  rl == '(' then            /* "a",( -> "a" || ( */
            return le||sep||ri            /* avoid function call    */
        end
    else if pos(lr, m.comp.idChars) > 0 then
        if pos(rl, m.comp.idChars'(') > 0 then
            return le || sep || ri        /* a,b -> a || b */
    return le || mi || ri
endProcedure compCatRexx

/*--- push an empty stem on the stack --------------------------------*/
compNewStem: procedure expose m.
parse arg m
    st = mAdd('COMP.STEM', '')
    do ix=1 to arg()-1
        m.st.ix = arg(ix+1)
        end
    m.st.0 = ix-1
    return st
endProcedure compNewStem

/* copy comp end ******************************************************/
/* copy scanSB begin ***************************************************
     Achtung: inc generiert SB aus scanSB, Aenderungen nur in scanSB|
ScanSB: basic scan
    scanLook(m,len) : returns next len chars, pos is not moved
    scanChar(m,len) : scans next len chars
    scanString(m,q): scan a String with quote q. (with doubble = 1)
    scanVerify(m,c,o): verify(...,c,o,...)
    scanWord(m,u)  : scan a space delimited word or a string,
                          if u=1 then uppercase non-strings
variable interface
    scanSrc(m, source) starts scanning a single line
    scanEnd(m)     : returns whether we reached end of input
    scanErr(m, txt): error with current scan location

    m is an address, to store our state
    if a scan function succeeds, the scan posititon is moved

returns: true if scanned, false otherwise
         m.m.tok  ==> last token
         m.m.val  ==> last value for scanString/Word
         m.m.pos ==> scan position
         m.m.src ==> scan source
***********************************************************************/
/*--- return the next len characters until end of src ----------------*/
scanLook: procedure expose m.
parse arg m, len
    if len == '' then
        return substr(m.m.src, m.m.pos)
    else
        return substr(m.m.src, m.m.pos,
                     , min(len, 1 + length(m.m.src) - m.m.pos))
endProcedure scanLook

/*--- scan len chararcters, atmost to end of src ---------------------*/
scanChar: procedure expose m.
parse arg m, len
    m.m.tok = scanLook(m, len)
    m.m.pos = m.m.pos + length(m.m.tok)
    return m.m.tok \== ''
endProcedure scanChar

/*--- scan the literal lit ------------------------------------------*/
scanLit: procedure expose m.
parse arg m
    do ax=2 to arg()
        if abbrev(substr(m.m.src, m.m.pos), arg(ax)) then do
            m.m.tok = arg(ax)
            m.m.pos = m.m.pos + length(arg(ax))
            return 1
            end
        end
    m.m.tok = ''
    return 0
endProcedure scanLit

/*--- scan with verify, vOpt is passed to verify ---------------------*/
scanVerify: procedure expose m.
parse arg m, alpha, vOpt, onlyIfMatch
    if arg() > 3 then
        call err 'deimplement onlyIfMatch???'
    if vOpt == '' then   /* empty string does not take default */
        nx = verify(m.m.src, alpha, , m.m.pos)
    else
        nx = verify(m.m.src, alpha, vOpt, m.m.pos)
    if nx = 0 then
        if onlyIfMatch == 1 then
            nx = m.m.pos
        else
            nx = length(m.m.src) + 1
    m.m.tok = substr(m.m.src, m.m.pos, nx - m.m.pos)
    m.m.pos = nx
    return m.m.tok \== ''
endProcedure scanVerify

/*--- scan while in charset ------------------------------------------*/
scanWhile: procedure expose m.
parse arg m, chSet
    return scanVerify(m, chSet, 'n')

/*--- scan until in charset ------------------------------------------*/
scanUntil: procedure expose m.
parse arg m, chSet
    return scanVerify(m, chSet, 'm')

/*--- scan until (and over) string End -------------------------------*/
scanStrEnd: procedure expose m.
parse arg m, sep
    px = m.m.pos
    do forever
        px = pos(sep, m.m.src, px)
        if px = 0 then do
            m.m.tok = ''
            return 0
            end
        px = px + length(sep)
        if \ abbrev(substr(m.m.src, px), sep) then do
            m.m.tok = substr(m.m.src, m.m.pos, px-m.m.pos)
            m.m.pos = px
            return 1
            end
        px = px + length(sep)
        end
endProcedure scanStrEnd

/*--- scan a string with quote char qu -------------------------------*/
scanString: procedure expose m.
parse arg m, prefs
    if prefs = '' then do
        call scanLit m, "'", '"'
        end
    else do
        do px=1 to words(prefs) until scanLit(m, word(prefs, px))
            end
        end
    if m.m.tok == '' then
        return 0
    t1 = m.m.tok
    qu = right(t1, 1)
    if \ scanStrEnd(m, qu) then do
        m.m.pos = m.m.pos - length(t1)
        return scanErr(m, 'ending Apostroph('qu') missing')
        end
    m.m.val = repAll(left(m.m.tok, length(m.m.tok)-1), qu||qu, qu)
    m.m.tok = t1 || m.m.tok
    return 1
endProcedure scanString

/*--- scan a word and put value into *.val
           a word is either delimited by space or stopper
                     or a string (with single or double quotes -------*/
scanWord: procedure expose m.
parse arg m, stopper, ucWord
    if scanString(m) then
        return 1
    if stopper == '' then
        stopper = ' '
    if \scanUntil(m, stopper) then
        return 0
    m.m.val = m.m.tok
    if ucWord == 1 then
        upper m.m.val
    return 1
endProcedure scanWord

/*--- skip, scan and return next word --------------------------------*/
scanSkWord: procedure expose m.
parse arg m, stopper, ucWord, eMsg
    if scanWord(scanSkip(m), stopper, ucWord) then
        return m.m.val
    else if eMsg == '' then
        return ''
    else
        call scanErr m, eMsg 'expected'
endProcedure scanSkWord

/*--- go back the current token --------------------------------------*/
scanBack: procedure expose m.
parse arg m, tok
    if m.m.pos <= length(tok) then
        call scanErr sc, 'cannot back "'tok'" length'
    cx = m.m.pos - length(tok)
    if substr(m.m.src, cx, length(tok)) \== tok then
        call scanErr sc, 'cannot back "'tok'" value'
    m.m.pos = cx
    return
endProcedure scanBack

/*--- set new src - allow scanning without open ----------------------*/
scanSBSrc: procedure expose m.
parse arg m, m.m.src
    return scanSBOpen(m)
endProcedure scanSBSrc

/*--- start scanning with a new single src ---------------------------*/
scanSBOpen: procedure expose m.
parse arg m
    m.m.pos = 1
    m.m.tok = ''
    return m
endProcedure scanSBOpen

/*--- start scanning with a new single src ---------------------------*/
scanSBClose: procedure expose m.
parse arg m
    m.m.pos = length(m.m.src) + 1
    m.m.tok = '--- closed ---'
    return m
endProcedure scanSBClose

scanSBSpace: procedure expose m.
parse arg m
    nx = verify(m.m.src, ' ', , m.m.pos)
    if nx = 0 then
        nx = length(m.m.src) + 1
    res = nx <> m.m.pos
    m.m.tok = left(' ', res)
    m.m.pos = nx
    return res
endProcedure scanSBSpace

/*--- skip over space, nl and comments and return m -----------------*/
scanSkip: procedure expose m.
parse arg m
    call scanSpace m
    return m
endProcedure scanSkip

scanErr: procedure expose m.
parse arg m, txt
    return err('s}'txt'\n'scanInfo(m))
endProcedure scanErr

scanSBInfo: procedure expose m.
parse arg m
    return 'last token' m.m.tok 'scanPosition' ,
        strip(substr(m.m.src, m.m.pos, 40), 't') ,
        || '\npos' m.m.Pos 'in string' strip(m.m.src, 't')
endProcedure scanSBInfo

/*--- return position in simple format -------------------------------*/
scanSBPos: procedure expose m.
parse arg m
    return if(m.m.pos > length(m.m.src), 'E', 'singleSrc' m.m.pos)

/*--- return true if at end of src -----------------------------------*/
scanSBEnd: procedure expose m.
parse arg m
    return m.m.pos > length(m.m.src)
/* copy scanSB end ****************************************************/
/* copy scan begin ****************************************************
Scan: scan an input: with multiple lines
    ==> all of scanSB
    scanEnd(m)     : returns whether we reached end of input
    scanLit(m,lit) : scan Literal lit if present or return 0
    scanChar(m,n)  : scan next n characters
    scanName(m)    : scan a name
    ScanNat(m)     : scan a natural number (without sign)
    scanString(m,q): scan a String with quote q. (with doubble = 1)
    scanVerify(m,c,o): verify(...,c,o,...)
    scanKeyValue(m): scan a key = value clause (with spaces)
    scanWord(m,u)  : scan a space delimited word or a string,
                          if u=1 then uppercase non-strings
    scanErr(m, txt): error with current scan location

    m is an address, to store our state
    if a scan function succeeds, the scan posititon is moved

returns: true if scanned, false otherwise
         m.m.tok  ==> last token
         m.m.val  ==> last value for scanString/Word/KeyValue
         m.key    ==> key for scanKeyValue
         m.m.pos ==> scan position
         m.m.src ==> scan source
***********************************************************************/
scanIni: procedure expose m.
    if m.scan.ini = 1 then
        return
    m.scan.ini = 1
    call jIni
    ts = classNew('n ScanRes u f TOK v, f VAL v, f KEY v, f TYPE v')
    call classNew 'n ScanSB u JRWO', 'm',
        , 'scanEnd  return 1',
        , 'scanNL   m.m.tok = ""; return 0',
        , 'scanCom  m.m.tok = ""; return 0',
        , 'scanInfo return scanSBInfo(m)' ,
        , 'jReset call scanSbSrc m, arg;' ,
                  'call scanOpts m, arg2, arg3, arg(4)',
        , "jOpen call scanSBOpen scanOC(m, opt, 'ScanSBR')" ,
        , "jClose call scanSBClose scanOC(m, , 'ScanSB')",
        , 'scanPos scanSBPos(m)'
    call classNew 'n ScanSBR u ScanSB', 'm',
        , "jReadO if scanType(m) == '' then return '';" ,
                    " else return oClaCopy('"ts"', m, '')"
    return
endProcedure scanIni
/*--- check open opt is read and mutate ------------------------------*/
scanOC: procedure expose m.
parse arg m, opt, cla
    if \ abbrev(m.j.cRead, opt) then
        call err 'scanOpen opt must be' m.j.cRead 'not' opt
    return oMutatName(m, cla)
endProcedure scanOC
/*--- start scanning with a new single src ---------------------------*/
scanSrc: procedure expose m.
parse arg m, src
    return scanSbSrc(oMutatName(m, 'ScanSB'), src)

scanOpen: procedure expose m.
parse arg m
    opt = ''
    interpret objMet(m, 'jOpen')
    return m
endProcedure scanOpen

scanClose: procedure expose m.
parse arg m
    interpret objMet(m, 'jClose')
    return m
endProcedure scanOpen

scanInfo: procedure expose m.
parse arg m
    interpret objMet(m, 'scanInfo')

/*--- return true if at end of src -----------------------------------*/
scanEnd: procedure expose m.
parse arg m
    if m.m.pos <= length(m.m.src) then
        return 0
    interpret objMet(m, 'scanEnd')

/*--- scan over white space, nl, comments ...-------------------------*/
scanSpace: procedure expose m.
parse arg m
    fnd = 0
    do while scanSBSpace(m) | scanCom(m) | scanNl(m)
        fnd = 1
        end
    m.m.tok = left(' ', fnd)
    return fnd
endProcedure scanSpace

/*--- scan next line -------------------------------------------------*/
scanNL: procedure expose m.
parse arg m, unCond
    interpret objMet(m, 'scanNL')

/*--- scan one comment -----------------------------------------------*/
scanCom: procedure expose m.
parse arg m
    interpret objMet(m, 'scanCom')

scanPos: procedure expose m.
parse arg m
    interpret 'return' objMet(m, 'scanPos')
endProcedure scanPos

scanOpts: procedure expose m.
parse arg m, m.m.scanName1, namePlus, m.m.scanComment
    if m.m.scanName1 == '' then
        m.m.scanName1 = m.ut.alfa
    if namePlus == '' then
        m.m.scanNameR = m.m.scanName1 || '0123456789'
    else
        m.m.scanNameR = m.m.scanName1 || namePlus
    return m
endProcedure scanOpts

/*--- begin scanning a single line -----------------------------------*/
scanSrc: procedure expose m.
parse arg m, m.m.src
    return scanOpen(m)
endProcedure scanSrc

/*--- scan a Name, first char in *.scanName1, rest in *.scanNameR ----*/
scanName: procedure expose m.
parse arg m
    if pos(substr(m.m.src, m.m.pos, 1),
                 , m.m.scanName1) <= 0 then do
        m.m.tok = ''
        return 0
        end
    return scanVerify(m, m.m.scanNameR)
endProcedure scanName

/*--- scan a natural number (no sign, decpoint ...) ------------------*/
scanNat: procedure expose m.
parse arg m, chEn
    if \ scanVerify(m, '0123456789') then
        return 0
    if chEn \== 0 then
        if pos(scanLook(m , 1), m.m.scanNameR) > 0 then
            call scanErr m, 'illegal number end after' m.m.tok
    return 1
endProcedure ScanNat

/*--- scan an integer (optional sign, no decpoint ...) ---------------*/
scanInt: procedure expose m.
parse arg m, chEn
    call scanLit m, '+', '-'
    si = m.m.tok
    if \ scanNat(m, chEn) then do
        m.m.pos = m.m.pos - si
        return 0
        end
    m.m.tok = si || m.m.tok
    return 1
endProcedure scanInt

/*--- scan a number (optional sign, decpoint, exponent) ------------*/
scanNum: procedure expose m.
parse arg m, chEn
    sx = m.m.pos
    call scanLit m, '+', '-'
    po = scanLit(m, '.')
    if \ scanNat(m, 0) then do
        m.m.pos = sx
        return 0
        end
    if \ po then
        if scanLit(m, '.') then
            call scanNat m, 0
        if scanLit(m, 'e', 'E') then
            if \ scanInt(m, 0) then
                call scanErr m, 'exponent expected after' ,
                             substr(m.m.src, sx, m.m.pos-sx)
    m.m.tok = substr(m.m.src, sx, m.m.pos-sx)
    m.m.val = translate(m.m.tok)
    if chEn \== 0 then
        if pos(scanLook(m , 1), m.m.scanNameR) > 0 then
            call scanErr m, 'illegal number end after' m.m.tok
    return 1
endProcedure scanNum

scanType: procedure expose m.
parse arg m, opt
    m.m.tok = ''
    if scanName(m) then
        m.m.type = 'n'
    else if scanNum(m) then
        m.m.type = 0
    else if scanString(m) then
        m.m.type = left(m.m.tok, 1)
    else if scanSpace(m) then
        m.m.type = 's'
    else do
        call scanChar m, 1
        m.m.type = m.m.tok
        end
    return m.m.type
endProcedure scanType

/*--- scan a key = word phrase
          put key into m.key and word into m.m.val -------*/
scanKeyValue: procedure expose m.
parse arg m, def
    if \ scanName(m) then
        return 0
    m.m.key = m.m.tok
    if \ scanLit(scanSkip(m), '=') then do
        m.m.val = def
        m.m.tok = ' no='
        end
    else if \scanWord(scanSkip(m)) then
        return scanErr(m, 'word expected after' m.m.key '=')
    return 1
endProcedure scanKeyValue

/*--- emit an error with current scan pos ----------------------------*/
/* copy scan end   ****************************************************/
/* copy scanRead begin ************************************************/
scanReadIni: procedure expose m.
    if m.scanRead.ini = 1 then
        return
    m.scanRead.ini = 1
    call scanIni
 /* ts = classNew('n Scan u f TOK v, f VAL v, f KEY v, f TYPE v') */
    call classNew 'n ScanRead u ScanSB', 'm',
        , 'scanEnd return m.m.atEnd' ,
        , 'scanNL return scanReadNL(m, unCond)',
        , 'scanCom return scanReadCom(m)',
        , 'scanInfo return scanReadInfo(m)',
        , 'scanPos return scanReadPos(m)',
        , "jOpen   call scanReadOpen scanOC(m, opt, 'ScanReadR')",
        , "jClose  call scanReadClose scanOc(m, , 'ScanRead')"
    call classNew 'n ScanReadR u ScanRead', 'm',
        , 'jReadO' oClaMet(class4Name('ScanSBR'), 'jReadO')
    call classNew "n EditRead u JRW", "m",
        , "jRead  return editRead(m, var)",
        , "jOpen" ,
        , "jReset m.m.linex = arg - 1"
    return
endProcedure scanReadIni

/*--- begin scanning the lines of a reader ---------------------------*/
scanRead: procedure expose m.
parse arg rdr, n1, np, co
    return scanReadReset(oNew('ScanRead'), rdr, n1, np, co)

scanReadReset: procedure expose m.
parse arg m, m.m.rdr, n1, np, co
    call oMutatName m, 'ScanRead'
    call scanOpts m, n1, np, co
    return m
endProcedure scanReadReset

scanReadOpen: procedure expose m.
parse arg m
    m.m.atEnd = 0
    m.m.lineX = 0
    m.m.val = ''
    m.m.key = ''
    call jOpen m.m.rdr, '<'
    call scanReadNL m, 1
    return m
endProcedure scanReadOpen

scanReadClose: procedure expose m.
parse arg m
    call jClose m.m.rdr
    m.m.atEnd = 'closed'
    return scanSBClose(m)
endProcedure scanReadClose

/*--- scan over next newLine
        if unCond \== 1 only if we are already at endOfLine
         return true if we scanned a NL ------------------------------*/
scanReadNL: procedure expose m.
parse arg m, unCond
    if unCond \== 1 then
        if m.m.pos <= length(m.m.src) then
            return 0
    if m.m.atEnd then
        return 0
    m.m.atEnd = \ jRead(m.m.rdr, m'.SRC')
    if m.m.atEnd then do
        m.m.pos = 1 + length(m.m.src)
        return 0
        end
    m.m.pos = 1
    m.m.lineX = m.m.lineX + 1
    return 1
endProcedure scanReadNl

scanReadCom: procedure expose m.
parse arg m
    m.m.tok = ''
    if m.m.scanComment == '' then
        return 0
    if \ abbrev(substr(m.m.src, m.m.pos), m.m.scanComment) then
        return 0
    m.m.pos = 1 + length(m.m.src)
    m.m.tok = ' '
    return 1
endProcedure scanReadCom

scanReadPos: procedure expose m.
parse arg m, msg
    if scanEnd(m) then
        return 'E'
    else
        return m.m.lineX m.m.pos
endProcedure scanReadPos

scanReadInfo: procedure expose m.
parse arg m
    msg = 'last token' m.m.tok 'scanPosition' ,
        strip(substr(m.m.src, m.m.pos, 40), 't')
    if scanEnd(m) then
        msg = msg'\natEnd after'
    else
        msg = msg'\npos' m.m.pos 'in'
    return msg 'line' m.m.lineX':' strip(m.m.src, 't')
endProcedure scanReadInfo

/*--- use scan sqlEdit macro --> temporarily here --------------------*/
/*--- read next line from edit data ----------------------------------*/
editRead: procedure expose m.
parse arg m, var
    m.m.lineX = m.m.lineX + 1
    if adrEdit('(ll) = line' m.m.lineX, 12) ^= 0 then
        return 0
    m.var = ll
    return 1
endProcedure editRead
/*--- search loop in edit macro --------------------------------------*/
scanSqlSeekId: procedure expose m.
parse arg m, lx, cmd, opts
    if opts = '' then
        opts = word
                     /* line 1 col 0, otherwise first word is skipped*/
    if adrEdit("cursor =" max(trunc(lx), 1) 0, 12) = 12 then
        return -1
    do while adrEdit("seek" cmd opts, 4) = 0 /* find each command*/
        call adrEdit "(fx) = cursor"
        if m.debug then do
            call adrEdit "(LI) = LINE" fx
            call debug 'scanSqlSeekId after' lx 'found' cmd 'at' fx li
            end
        call jReset m.m.rdr, fx
        call jOpen m, '<'
        m.m.lineX = fx
        do while word(scanPos(m), 1) <= fx & scanSqlClass(m)
            if m.m.sqlClass = 'i' & m.m.val == cmd then
                return fx
            end
        call jClose m
        end
    return -1
endProcedure scanSqlSeekId
/* copy scanRead end **************************************************/
/* copy scanWin begin *************************************************
     scan the the concatenation of the lines of a reader
         any token my be split over several line
         except the end-of-line-comment-token
***********************************************************************/
scanWinIni: procedure expose m.
    if m.scanWin.ini = 1 then
        return
    m.scanWin.ini = 1
    call scanReadIni
    call classNew 'n ScanWin u ScanSB', 'm',
        , 'jReset call scanWinReset m, arg, arg2, arg3',
        , "jOpen call scanWinOpen scanOC(m, opt, 'ScanWinR'), arg(3)",
        , "jClose call scanReadClose scanOC(m, , 'ScanWin')",
        , 'scanNL return scanWinNl(m, unCond)',
        , 'scanCom return scanWinCom(m)',
        , 'scanInfo return scanWinInfo(m)',
        , 'scanPos  return scanWinPos(m)'
    call classNew 'n ScanWinR u ScanWin', 'm',
        , 'jReadO' oClaMet(class4Name('ScanSBR'), 'jReadO')
    return
endProcedure scanWinIni

/*--- instanciate a new window scanner, open rdr ---------------------*/
scanWin: procedure expose m.
parse arg rdr, wiSz, wiBa, cuPo, cuLe
    return scanWinOpts(oNew('ScanWin', rdr), wiSz, wiBa, cuPo, cuLe)

/*--- set the reader and attributes of window scanner m -------------*/
scanWinReset: procedure expose m.
parse arg m, m.m.rdr, wiSz, wiGa, cuPo, cuLe
    m.m.atEnd = 'closed after reset'
    return scanWinOpts(scanOpts(m), wiSz, wiGa, cuPo, cuLe)
endProcedure scanWinReset

/*--- set the attributes of window scanner m ------------------------*/
scanWinOpts: procedure expose m.
parse arg m, wiSz, wiGa, cuPo, cuLe
    wiSz = word(wiSz 5, 1)
    wiGa = word(wiGa 1, 1)
    m.m.cutPos = word(cuPo 1, 1)
    m.m.cutLen = word(cuLe 72, 1)
    m.m.winTot = (wiSz * 2 + wiGa) * m.m.cutLen
    m.m.posLim = (wiSz     + wiGa) * m.m.cutLen
    m.m.posOff =  wiGa * m.m.cutLen
    return m
endProcedure scanWinOpts

/*--- open reader and start scanning --------------------------------*/
scanWinOpen: procedure expose m.
parse arg m, lx
    m.m.atEnd = 0
    if lx = '' then
        m.m.lineX = 1
    else
        m.m.lineX = lx
    call scanSBOpen m
    m.m.val = ''
    m.m.key = ''
    m.m.pos = 1
    m.m.src = ''
    call jOpen m.m.rdr, m.j.cRead
    call scanWinRead m
    return m
endProcedure scanWinOpen

/*--- move the source window: cut left side and append at right side
      return number of characters cut at left ------------------------*/
scanWinRead: procedure expose m.
parse arg m
    dlt = 0
    if m.m.atEnd then
        return 0
    if m.m.pos >= m.m.posLim then do     /*  cut left side */
        dlt = m.m.pos - (m.m.pos // m.m.cutLen + m.m.posOff)
        m.m.src = substr(m.m.src, dlt+1)
        m.m.pos = m.m.pos - dlt
        m.m.lineX = m.m.lineX + dlt % m.m.cutLen
        end
    do while length(m.m.src) < m.m.winTot /* read and fill to len */
        if \ jRead(m.m.rdr, m'.'one) then do
            m.m.atEnd = 1
            return dlt
            end
        m.m.src = m.m.src || substr(m.m.one, m.m.cutPos, m.m.cutLen)
        end
    call assert 'length(m.m.src) = m.m.winTot'
    return dlt
endProcedure scanWinRead

/*--- return position of next line start -----------------------------*/
scanWinNLPos: procedure expose m.
parse arg m
    return m.m.pos + m.m.cutLen - ((m.m.pos - 1) // m.m.cutLen)

/*--- scan comment ---------------------------------------------------*/
scanWinCom: procedure expose m.
parse arg m
    call scanWinRead m
    if scanLit(m, '/*') then do
        ex = pos('*/', m.m.src, m.m.pos+2)
        if ex <= m.m.pos then
            return scanErr(m, '*/ missing after /*')
        m.m.pos = ex+2
        call scanWinRead m
        end
    else do
        cl = length(m.m.scanComment)
        np = scanWinNlPos(m)
        if \ ( cl>0 & m.m.pos+cl <= np & m.m.scanComment ,
                == substr(m.m.src, m.m.pos, cl)) then do
            m.m.tok = ''
            return 0
            end
        m.m.pos = np
        end
    m.m.tok = ' '
    return 1
endProcedure scanWinCom

/*--- scan nl --------------------------------------------------------*/
scanWinNL: procedure expose m.
parse arg m, unCond
    call scanWinRead m
    if unCond \== 1 then
       return 0
    np = scanWinNLPos(m)
    if np \= m.m.pos then
        return 0
    m.m.pos = np
    return 1
endProcedure scanWinNl

/*--- return current position in input ------------------------------*/
scanWinPos: procedure expose m.
parse arg m
    if scanEnd(m) then
        return 'E'
    ps = m.m.pos - 1
    return (m.m.lineX + (ps % m.m.cutLen)) (ps // m.m.cutLen + 1)
endProcedure scanWinPos

/*--- return a description of the current scan position --------------*/
scanWinInfo: procedure expose m.
parse arg m
    p = scanWinPos(m)
    if p == 'E' then do
        res = 'atEnd after'
        p = m.m.lineX - 1 + length(m.m.src) % m.m.cutLen
        end
    else do
        res = 'pos' word(p, 2) 'in'
        p = word(p, 1)
        end
    return 'last token' m.m.tok 'scanPosition' ,
          strip(left(substr(m.m.src, m.m.pos), 40), 't') ,
        || '\n'res 'line' p':' strip(substr(m.m.src,
          , 1 + (p - m.m.lineX) * m.m.cutLen, m.m.cutLen), 't')
endProcedure scanWinInfo
/* copy scanWin end   *************************************************/
/* copy scanSql begin *************************************************/
/*--- initialize with reader inRdr ----------------------------------*/
scanSql: procedure expose m.
parse arg inRdr
    return scanSqlReset(scanWin(inRdr), inRdr)

scanSqlReset: procedure expose m.
parse arg m, r, scanWin
    if scanWin \== 0 then
        call scanWinOpts m, 5, 2, 1, 72
    m.m.rdr = r
    return scanOpts(m, , '0123456789_' , '--')
endProcedure scanSqlReset

/*--- scan a sql token put class in m.sqlclass:
      'i': ordinary identifier   e.g. Name
      'd': delimited identifier  e.g. "Delimited"
      'q': qualified identifier  e.g. abc."efg"
      'u': integer units         e.g. 8G
      'n': number                e.g. -234 or .2e3
      's': string                e.g. 'abc''ef'
      '' : at end
         : any other character   e.g. ;
      ----------------------------------------------------------------*/
scanSqlClass: procedure expose m.
parse arg m, retSpace
    m.m.val = ''
    if scanSpace(m) & retSpace = 1 then do
        m.m.sqlClass = 'b'
        return 1
        end
    c2 = scanLook(m ,2)
    if scanString(m, "' x' X'") then do
        m.m.sqlClass = 's'
        if \abbrev(m.m.tok, "'") then
            m.m.val = x2c(m.m.val)
        end
    else if scanSqlQuId(m) then do
        if m.m.val.0 > 1 then
            m.m.sqlClass = 'q'
        else if abbrev(m.m.tok, '"') then
            m.m.sqlClass = 'd'
        else
            m.m.sqlClass = 'i'
        end
    else if scanSqlNum(m, 0)  then
        m.m.sqlClass = 'n'
    else if scanChar(m, 1) then
        m.m.sqlClass = m.m.tok
    else if scanEnd(m) then do
        m.m.sqlClass = ''
        return 0
        end
    else
        call scanErr m, 'cannot scan sql'
    return 1
endProcedure scanSqlClass

scanSqlSkipBrackets: procedure expose m.
parse arg m, br
    if br \== '' then
        nop
    else if scanLit(m, '(') then
        br = 1
    else
        return 0
    do while scanSqlClass(m) & m.m.sqlClass \== ';'
        if m.m.sqlClass = '('        then br = br + 1
        else if m.m.sqlClass \== ')' then iterate
        else if br > 1              then br = br - 1
        else                             return 1
        end
    call scanErr m, '; or eof, but' br 'closing ) expected'
endProcedure skipBrackets
/*--- scan an ordinary sql identifier e.g. abc, ef_12 ----------------*/
scanSqlId: procedure expose m.
parse arg m
    if \ scanName(m) then
        return 0
    m.m.val = translate(m.m.tok)
    return 1
endProcedure scanSqlId

/*--- scan a delimited or ordinay sql identifier ---------------------*/
scanSqlDeId: procedure expose m.
parse arg m
    if scanSqlId(m) then
        return 1
    if \ scanString(m, '"') then
        return 0
    m.m.val = strip(m.m.val, 't')
    return 1
endProcedure scanSqlDeId

/*--- scan a qualified sql identifier --------------------------------*/
scanSqlQuId: procedure expose m.
parse arg m
    res = ''
    rto = ''
    do qx=1
        if \ scanSqlDeId(m) then do
            if qx <> 1 then
                call scanErr m, 'id expected after .'
            return 0
            end
        m.m.val.qx = m.m.val
        res = res'.'m.m.val
        rto = rto'.'m.m.tok
        if \ scanLit(scanSkip(m), '.') then
            leave
        call scanSpace m
        end
    m.m.val.0 = qx
    m.m.val = substr(res, 2)
    m.m.tok = substr(rto, 2)
    return 1
endProcedure scanSqlQuId

/*--- scan a sql number ----------------------------------------------*/
scanSqlNum: procedure expose m.
parse arg m, checkEnd, noSp
    si = ''
    if noSp == 1 then
        call err 'deimplement noSp, use scanNum instead'
    if scanLit(m, '+', '-') then do
        si = m.m.tok
        call scanSpace m
        ch = scanLook(m, 2)
        if left(ch, 1) == '.' then
            ch = substr(ch, 2)
        if pos(left(ch, 1), '0123456789') < 1 then do
            call scanBack m, si
            m.m.val = ''
            return 0
            end
        end
    res = scanNum(m, checkEnd)
    m.m.val = si || m.m.val
    return res

endProcedure scanSqlNum

/*--- scan a sql number with a unit which may follow without space ---*/
scanSqlNumUnit: procedure expose m.
parse arg m, both, units
    if \ scanSqlNum(m, 0) then
        return 0
    nu = m.m.val
    sp = scanSpace(m)
    if scanSqlId(m) then do
        if units == '' | wordpos(m.m.val, units) > 0 then
            nu = nu m.m.val
        else if both | \ sp then
            call scanErr m, 'scanSqlNumUnit after' nu 'bad unit' m.m.val
        else
            call scanBack m, m.m.tok
        end
    else if both then
        call scanErr m, 'scanSqlNumUnit no unit after' nu
    else if \sp & pos(scanLook(m, 1), m.m.scanNameR) > 0 then
        call scanErr m, 'scanSqlNumUnit bad number end after' nu
    m.m.val = nu
    return 1
endProcedure scanSqlNumUnit

scan2Trgs: procedure expose m.
parse arg m, t1, t2
    cx = m.m.pos - 1
    do forever
        cx = verify(m.m.src, t1 || t2, 'm', cx + 1)
        if cx = 0 then do
            m.m.pos = length(m.m.src) + 1
            return ''
            end
        if pos(substr(m.m.src, cx, 1), t1) > 0 then do
            m.m.pos = cx
            return substr(m.m.src, cx, 1)
            end
        do ax=4 to arg()
            if arg(ax) == substr(m.m.src, cx, length(arg(ax))) then do
                m.m.pos = cx
                return arg(ax)
                end
            end
        end
endProcedure scan2Trgs

scanSql2Stop: procedure expose m.
parse arg m, sta, stop
    sta = substr(sta, 2)
    c1 = left(sta, 1)
    if c1 == 't' then do
        bx = m.m.pos
        c1 = scan2Trgs(m, '"'''stop, '-/', '--', '/*')
        if bx < m.m.pos then
            return 't'sta
        m.m.pos = m.m.pos + length(c1)
        c1 = left(c1, 1)
        sta = c1 || sta
        end
    if c1 == '/' then do
        bx = m.m.pos
        c1 = scan2Trgs(m, '"''', '-*', '--', '*/')
        if bx < m.m.pos then
            return '+'sta
        m.m.pos = m.m.pos + length(c1)
        if c1 == '*/' then
            return sta
        c1 = left(c1, 1)
        sta = c1 || sta
        end
    if abbrev(sta, "'") | abbrev(sta, '"') then do
         if scanStrEnd(m, c1) then
             return sta
         m.m.pos = 1 + length(m.m.src)
         return '+'sta
         end
    if pos(c1,  '-'stop) > 0 then do
        if c1 == '-' then
            m.m.pos = length(m.m.src) + 1
        return sta
        end
    if \ abbrev(sta, '/') then
        call err 'bad sta2' sta 'for scanSql2Stop'
    call err implement
        res = res || substr(m.m.src, bx, m.m.pos-bx)' '
        do forever
            px = pos('*/', m.m.src, m.m.pos)
            if px > 0 then
                leave
            if \ jCatSqlNL(m) then
                return res
            end
        bx = px+2
        m.m.pos = bx
    end
endProcedure scanSql2Stop

/* copy scanSql end   *************************************************/
/* copy scanUtil begin *************************************************
    scan db2 utility input statements using scan and a reader
**********************************************************************/
/*--- initialize with reader inRdr ----------------------------------*/
scanUtilReader: procedure expose m.
parse arg m, inRdr
    call scanReader m, inRdr
    call scanOptions sc, , , '--'
    call scanUtilReset m
    return m
endProcedure scanUtilReader

scanUtilSql: procedure expose m.
parse arg inRdr
    m = scanSql(inRdr)
    call scanUtilReset m
    return m
endProcedure scanUtilReader

scanUtilReset: procedure expose m.
parse arg m
    m.m.utilBrackets = 0
    m.scanUtil =  'BACKUP CATENFM CATMAINT CHECK' ,
                  'COPY COPYTOCOPY DIAGNOSE EXEC LISTDEF LOAD' ,
                  'MERGECOPY MODIFY OPTIONS QUIESCE REBUILD' ,
                  'RECOVER REORG REPAIR REPORT RESTORE' ,
                  'RUNSTATS STOSPACE TEMPLATE UNLOAD'
    return m
endProcedure scanUtilReset
/*--- scan next token and put its class in m.sc.utilClass:
      'u' a utility name
      'n' a name
      '"' a quoted name
      "'" an apostroph'd string
      '.' a .
      ',' a ,
      'v' a value
      ''  at end
      ---------------------------------------------------------------*/
scanUtil: procedure expose m.
parse arg sc
    m.sc.utilSpace = scanSpace(sc)
    ty = '?'
    if scanLit(sc, '(') then do
        m.sc.utilBrackets = m.sc.utilBrackets + 1
        end
    else if scanLIT(sc, ')') then do
        m.sc.utilBrackets = m.sc.utilBrackets - 1
        if m.sc.utilBrackets < 0 then
           call scanErr sc, 'unmatched closing bracket )'
        end
    else if scanLit(sc, ',') then do
        end
    else if scanLit(sc, '.') then do
        end
    else if scanString(sc, "'") then do
        end
    else if scanString(sc, '"') then do
        end
    else if scanName(sc) then do
        m.sc.val = translate(m.sc.tok)
        if m.sc.utilBrackets > 0 then
            ty = 'n'
        else if 0 < wordPos(m.sc.val, m.scanUtil) then
            ty = 'u'
        else
            ty = 'n'
        end
    else if scanVerify(sc, ' (),''"', 'm') then do
        ty = 'v'
        m.sc.val = translate(m.sc.tok)
        end
    else if \scanEnd(sc) then do
            call scanErr sc, 'scanUtil stopped before end'
        end
    else do
        ty = ''
        m.sc.val = ''
        end
    if ty == '?' then
        m.sc.utilClass = left(m.sc.tok, 1)
    else
        m.sc.utilClass = ty
    return m.sc.utilClass
endProcedure scanUtil

/*--- scan a value or a bracketed list of values ---------------------*/
scanUtilValue: procedure expose m.
parse arg sc, remApo, nl
    if remApo = '' | rempApo = 0 then
        remApo = "nv"
    else if rempApo = 1 then
        remApo = "nv'"
    if '(' \== scanUtil(sc) then
         return scanUtilValueOne(sc, remApo)
    v = ''
    brx = m.sc.utilBrackets
    oLine = word(scanPos(sc), 1)
    do forever
        call scanUtil sc
        one = scanUtilValueOne(sc, remApo)
        if one == '' then
           call scanErr sc, 'eof in brackets'
        else if brx > m.sc.utilBrackets then
           return v
        nLine = word(scanPos(sc), 1)
        if \ m.sc.utilSpace then
            v = v || one
        else if nl \== '' & oLine <> nLine then
            v = v || nl || one
        else
            v = v' 'one
        oLine = nLine
        end
endProcedure scanUtilValue

scanUtilValueOne: procedure expose m.
parse arg sc, valTy
    if m.sc.utilClass == '' then
        return ''
    else if m.sc.utilClass == 'u' then
        call scanErr sc, 'util in scanUtilValueOne'
    if pos(m.sc.utilClass, valTy) > 0 then
        return m.sc.val
    else
        return m.sc.tok
endProcedure scanUtilValueOne

/*--- skip over nested brackets --------------------------------------*/
scanUtilSkipBrackets: procedure expose m.
parse arg m, br, doCat
    if br \== '' then
        lim = m.m.utilBrackets - br
    else if scanLit(m, '(') then do
        lim = m.m.utilBrackets
        m.m.utilBrackets = lim + 1
        end
    else
        return 0
    doCat = doCat == 1
    res = ''
    do while scanUtil(m) \== ''
        if m.m.utilBrackets <= lim then do
            if doCat then
                m.m.val = res
            return 1
            end
        if doCat then
            res = res m.m.tok
        end
    return scanErr(m, 'eof with' m.m.utilBrackets 'open (')
endProcedure skipBrackets

/*--- analyze a punch file write intoField to stdOut -----------------*/
scanUtilInto: procedure expose m.
parse arg m
    if m.m.utilBrackets \== 0 then
        call scanErr m, 'scanUtilInto with brackets' m.m.utilBrackets
  /*sc = scanUtilReader(m.j.in)
    call jOpen sc, 'r'
 */ do forever
        cl = scanUtil(m)
        if cl == '' then
            return 0
        if cl = 'n' & m.m.tok == 'INTO' then
            leave
        end
    if scanUtil(m) \== 'n' | m.m.tok \== 'TABLE' then
        call scanErr m, 'bad into table '
    if \ scanSqlQuId(scanSkip(m)) then
        call scanErr m, 'table name expected'
    if m.m.utilBrackets \== 0 then
        call scanErr m, 'into table in brackets' m.m.utilBrackets
    m.m.tb = m.m.val
    m.m.part = ''
    m.m.when = ''
    do forever
        cl = scanUtil(m)
        if cl == '' then
            call scanErr m, 'eof after into'
        if cl == 'n' & m.m.tok == 'PART' then do
            if scanUtil(m) == 'v' then
                m.m.part = m.m.val
            else
                call scanErr m, 'bad part'
            end
        else if cl == 'n' & wordPos(m.m.val, 'WHEN WORKDDN') > 0 then do
            call scanUtilSkipBrackets m
            end
        else if cl == '(' then do
           leave
           end
        end
    oX =  m.m.lineX
    oL =  overlay('', m.m.src, 1, m.m.pos-2)
    do while m.m.utilBrackets > 0
        call scanUtil m
        if oX \== m.m.lineX then do
            call out strip(oL, 't')
            oX =  m.m.lineX
            oL =  m.m.src
            end
        end
    call out left(oL, m.m.pos)
 /* call jClose sc
 */ return 1
endProcedure scanUtilInto
/* copy scanUtil end **************************************************/
/* copy pipe begin *****************************************************
***********************************************************************/
pipeIni: procedure expose m.
    if m.pipe.ini == 1 then
        return
    m.pipe.ini = 1
    call catIni
    call mapReset env.vars
    m.env.with.0 = 0
    call mapReset env.c2w
    call mNewArea 'ENV.WICO', '='
    m.pipe.0 = 1
    m.pipe.1.in  = jOpen(oNew('JRWEof'), '<')
    m.pipe.1.out = jOpen(oNew('JSay'), '>')
    call pipe '+'
    return
endProcedure pipeIni

/*-------------------------------
  +-       push pop frame
  PYNFA    ouput Parent saY Newcat File, Appendtofile
  psf|     parent string file oldOut
  old          --> new
  pipeBegin    --> pipe '+N'
  pipeBeLa f   --> pipe '+F'
  pipeLast     --> pipe 'P|'
  pipeLast f   --> pipe 'F|', f
  pipeEnd      --> pipe '-'
--------------------------------*/
pipe: procedure expose m.
parse arg opts, aO, aI
    ox = 1; oc = substr(opts, ox, 1)
    ax = m.pipe.0
    px = ax -1
    if oc == '-' then do
        if px < 2 then
            call err 'pipe pop empty'
        call jClose m.pipe.ax.out
        call jClose m.pipe.ax.in
        ax = px
        m.pipe.0 = ax
        px = ax-1
        ox = ox+1; oc = substr(opts, ox, 1)
        end
    if oc == '+' then do
        px = ax
        ax = ax+ 1
        m.pipe.0 = ax
        m.pipe.ax.in  = jOpen(m.pipe.px.in, '<')
        m.pipe.ax.out = jOpen(m.pipe.px.out, '>')
        ox = ox+1; oc = substr(opts, ox, 1)
        end
    oOut = m.pipe.ax.out
    if pos(oc, 'NYPFA') > 0 then do
        call jClose oOut
        if oc == 'Y' then
            m.pipe.ax.out = jOpen(m.pipe.1.out, '>')
        else if oc == 'P' then
            m.pipe.ax.out = jOpen(m.pipe.px.out, '>')
        else if oc == 'N' then
            m.pipe.ax.out = jOpen(Cat(), '>')
        else if oc == 'F' then
            m.pipe.ax.out = jOpen(o2file(aO), '>')
        else if oc == 'A' then
            m.pipe.ax.out = jOpen(o2file(aO), '>>')
        ox = ox+1; oc = substr(opts, ox, 1)
        end
    if pos(oc, 's|fp') > 0 then do
        call jClose m.pipe.ax.in
        if oc == 'p' then
            m.pipe.ax.in = jOpen(m.pipe.px.in, '<')
        else if oc == '|' then
            m.pipe.ax.in = jOpen(oOut, '<')
        else if oc == 'f' then do
            if arg() <= 3 then
                m.pipe.ax.in = jOpen(o2file(aI), '<')
            else do
                ct = jOpen(Cat(), '>')
                do lx = 3 to arg()
                    call jWriteAll ct, arg(lx)
                    end
                m.pipe.ax.in = jOpen(jclose(ct), '<')
                end
            end
        else if arg() <= 3 then
            m.pipe.ax.in = jOpen(jBuf(aI), '<')
        else do
            bu = jOpen(jBuf(), '>')
            do lx = 3 to arg()
                call jWrite bu, arg(lx)
                end
            m.pipe.ax.in = jOpen(jclose(bu), '<')
            end
        ox = ox+1; oc = substr(opts, ox, 1)
        end
    if oc \== ' ' then
        call err 'implement' substr(opts, ox) 'in pipe' opts
    m.j.in  = m.pipe.ax.in
    m.j.out = m.pipe.ax.out
    return
endProcedure pipe

/*--- write all from rdr (rsp in) to out, not lazy ----------------*/
pipeWriteNow: procedure expose m.
    parse arg rdr
    call jWriteNow m.j.out, if(rdr == '', m.j.in, rdr)
    return
endProcedure pipeWriteNow

/*--- write all from rdr (rsp in) to out, possibly lazy -----------*/
pipeWriteAll: procedure expose m.
parse arg rdr
    call jWriteAll m.j.out, if(rdr == '', m.j.in, rdr)
    return
endProcedure pipeWriteAll

pipePreSuf: procedure expose m.
parse arg le, ri
    do while in(v)
        call out le || m.v || ri
        end
    return
endProcedure pipePreSuf

envIsDefined: procedure expose m.
parse arg na
    return   '' \== mapValAdr(env.vars, na)
endProcedure envIsDefined

envPushWith: procedure expose m.
parse arg obj, cl, fn, elCl
    tos = m.env.with.0 + 1
    m.env.with.0 = tos
    m.env.with.tos.fun = fn
    m.env.with.tos.muElCl = ''
    if fn == '' then do
        call envSetWith obj, cl
        return
        end
    if cl == '' then
        cl = objClass(obj)
    if fn == 'as1' then do
        call envSetWith obj, cl
        m.env.with.tos.muElRef = m.cl.valueCl \== '',
                               & m.cl.valueCl \== m.class.classV
        if m.env.with.tos.muElRef then
            m.env.with.tos.muElCl = m.cl.valueCl
        else
            m.env.with.tos.muElCl = cl
        return
        end
    else if fn \== 'asM' then
        call err 'bad fun' fn
    ff = oClaMet(cl, 'oFlds')  /*just be sure it's initialised */
    if m.cl.stemCl == '' then
        call err 'class' className(cl) 'not stem'
    cc = m.cl.stemCl
    isRef = m.cc == 'r'
    m.env.with.tos.muElRef = isRef
    if m.cc \== 'r' then
        m.env.with.tos.muElCl = cc
    else if elCl \== '' then
        m.env.with.tos.muElCl = elCl
    else if m.cc.class == '' then
        call err 'elCl null for envPushWith('obj ','cl ','multi', ...)'
    else
        m.env.with.tos.muElCl = m.cc.class
    m.env.with.tos.class = ''
    m.env.with.tos.muCla = cl
    m.env.with.tos.muObj = obj
    return
endProcedure envPushWith

envSetWith: procedure expose m.
parse arg obj, cl
    if cl == '' & obj \== '' then
        cl = objClass(obj)
    tos = m.env.with.0
    m.env.with.tos = obj
    m.env.with.tos.class = cl
    return
endProcedure envSetWith

envWithObj: procedure expose m.
    tos = m.env.with.0
    if tos < 1 then
        call err 'no with in envWithObj'
    return m.env.with.tos
endProcedure envWithObj

envAccPath: procedure expose m. m cl
parse arg pa, stop, nllNw
    nullNew = nllNw == 1
    dx = verify(pa, m.class.cPath, 'm')
    if dx = 0 then do
        n1 = pa
        p2 = ''
        end
    else do
        n1 = left(pa, dx-1)
        p2 = substr(pa, dx)
        end
    wCla = ''
    do wx = m.env.with.0 by -1 to if(stop==1, m.env.with.0, 1)
        wCla = m.env.with.wx.class
        if symbol('m.wCla.f2c.n1') == 'VAR' then
            return oAccPath(m.env.with.wx, pa, m.env.with.wx.class)
        end
    if stop == 1 then
        return 'no field' n1 'in class' className(wCla)
    vv =  mapValAdr(env.vars, n1)
    if vv \== '' then
        if p2 == '' then
            return oAccPath(vv, '', m.class.classR)
        else
            return oAccPath(vv, '|'p2, m.class.classR)
    else if nullNew & p2 == '' then
        return oAccPath(mapValAdr(env.vars, n1,'a'), p2,m.class.classR)
    else
        return 'undefined variable' pa
endProcedure envAccPath

envWithNext: procedure expose m.
parse arg beEn, defCl, obj
    tos = m.env.with.0
    if tos < 1 then
        call err 'envWithNext with.0' tos
    st = m.env.with.tos.muObj
    if beEn  == 'b' then do
        if m.env.with.tos.fun == 'asM' then
            m.st.0 = 0
        if m.env.with.tos.muElCl == '' then
            m.env.with.tos.muElCl = defCl
        end
    else if m.env.with.tos.fun == 'asM' then
        m.st.0 = m.st.0 + 1
    else if m.env.with.tos.fun == '' then
        call outO m.env.with.tos
    else if beEn = '' then
        call err 'no multi allowed'
    if beEn == 'e' then
        return
    if m.env.with.tos.fun == 'as1' then do
         if m.env.with.tos == '' then
             call err 'implement withNext null'
         return
         end
/*  if obj \== '' then do
        if \ m.env.with.tos.muElRef then
            call err 'obj but not ref'
        m.nn = obj
        call envSetWith obj
        end
*/
    if m.env.with.tos.fun == '' then do
        call envSetWith oNew(m.env.with.tos.muElCl)
        return
        end
    nn = st'.' || (m.st.0 + 1)
    if m.env.with.tos.muElRef then do
        m.nn = oNew(m.env.with.tos.muElCl)
        call envSetWith m.nn
        end
    else do
        call oClear oMutate(nn, m.env.with.tos.muElCl)
        call envSetWith nn
        end
    return
endProcedure envWithNext

envPushName: procedure expose m.
parse arg nm, multi, elCl
    res = envAccPath(nm, , 1)
    if res \== 1 then
        return err(res 'in envPushName('nm',' multi')')
    do while m.cl == 'r'
        if m.m == '' then do
            res = oRefSetNew(m, cl)
            if res \== 1 then
                call err res 'in envPushName('nm',' multi')'
            end
        m = m.m
        cl = objClass(m)
        end
    call envPushWith m, cl, multi, elCl
    return
endProcedure envPushName

envNewWiCo: procedure expose m.
parse arg co, cl
    k1 = strip(co cl)
    n = mapGet('ENV.C2W', k1, '')
    if n \== '' then
        return n
    k2 = k1
    if co \== '' then do
        k2 = strip(m.co.classes cl)
        n = mapGet('ENV.C2W', k2, '')
        end
    k3 = k2
    if n == '' then do
        cx = wordPos(cl, m.co.classes)
        if cx > 0 then do
            k3 = space(subWord(m.co.classes, 1, cx-1),
                     subWord(m.co.classes, cx+1) cl, 1)
            n = mapGet('ENV.C2W', k3, '')
            end
        end
    if n == '' then
        n = envNewWico2(co, k3)
    call mapAdd 'ENV.C2W', k1, n
    if k2 \== k1 then
        call mapPut 'ENV.C2W', k2, n
    if k3 \== k2 & k3 \== k1 then
        call mapPut 'ENV.C2W', k3, n
    return n
endProcedure envNewWiCo

envNewWiCo2: procedure expose m.
parse arg co, clLi
    n = mNew('ENV.WICO')
    if co == '' then
        m.n.level = 1
    else
        m.n.level = m.co.level + 1
    m.n.classes = clLi
    na = ''
    do cx = 1 to words(clLi)
        c1 = word(clLi, cx)
        na = na className(c1)
        do qx=1 to 2
            ff = c1 || word('.FLDS .STMS', qx)
            do fx = 1 to m.ff.0
                fn = m.ff.fx
                if fn == '' then
                    iterate
                fn = substr(fn, 2)
                m.n.f2c.fn = cx
                end
            end
        end
    m.n.classNames = space(na, 1)
    return n
endProcedure envNewWiCo2

envPopWith:procedure expose m.
    tos = m.env.with.0
    m.env.with.0 = tos - 1
    return
endProcedure envPopWith

envGet: procedure expose m.
parse arg na
    res = envAccPath(na)
    if res == 1 then
        res = oAccStr(m, cl)
    if res == 1 then
        return str
    return err(res 'in envGet('na')')
endProcedure envGet

envGetO: procedure expose m.
parse arg na, opt
    res = envAccPath(na, , opt == '-b')
    if res == 1 then
        res = oAccO(m, cl, opt)
    if res == 1 then
        return ref
    return err(res 'in envGetO('na')')
endProcedure envGetO

envPutO: procedure expose m.
parse arg na, ref, stop
    res = envAccPath(na, stop, 1)
    if res == 1 then
        res = ocPutO(m, cl, ref)
    if res = 1 then
        return ref
    return err(res 'in envPutO('na',' ref',' stop')')
endProcedure envPutO

envPut: procedure expose m.
parse arg na, va, stop
    res = envAccPath(na, stop , 1)
    if res == 1 then
        res = ocPut(m, cl, va)
    if res == 1 then
        return va
    return err(res 'in EnvPut('na',' va',' stop')')
endProcedure envPut

envRead: procedure expose m.
parse arg na
    return in("ENV.VARS."na)

envReadO: procedure expose m.
parse arg na
    res = inO()
    if res == '' then
        return 0
    call envPutO na, res
    return 1
endProcedure envReadO

envHasKey: procedure expose m.
parse arg na
    return mapHasKey(env.vars, na)

envRemove: procedure expose m.
parse arg na
    return mapRemove(env.vars, na)
/* copy pipe end ******************************************************/
/* copy cat  begin ****************************************************
***********************************************************************/
/*--- create a new cat -----------------------------------------------*/
cat: procedure expose m.
    m = oNew('Cat') /* calls catReset */
    do ax=1 to arg()
        call catWriteAll m, arg(ax)
        end
    return m
endProcedure cat

catReset: procedure expose m.
parse arg m
    m.m.RWs.0 = 0
    m.m.catWr = ''
    m.m.catRd = ''
    m.m.catIx = -9e9
    m.m.catKeepOpen = ''
    return m
endProcedure catReset

catClose: procedure expose m.
parse arg m
    if m.m.catWr \== '' then do
        call jClose m.m.catWr
        call mAdd m'.RWS', m.m.catWr
        m.m.catWr = ''
        end
    if m.m.catRd \== '' then do
        call jClose m.m.catRd
        m.m.catRd = ''
        end
    m.m.catIx = -9e9
    return m
endProcedure catClose

catOpen: procedure expose m.
parse arg m, oo
    if oo == m.j.cRead then do
        m.m.catIx = 0
        call catNextRdr m
        m.m.jReading = 1
        end
    else if oo == m.j.cWri | oo == m.j.cApp then do
        if oo == m.j.cWri then
            m.m.RWs.0 = 0
        m.m.catIx = -9e9
        m.m.jWriting = 1
        end
    else do
        call err 'catOpen('m',' oo') bad opt'
        end
    return m
endProcedure catOpen

/*--- return and open next reader ------------------------------------*/
catNextRdr: procedure expose m.
parse arg m
    if m.m.catRd \== '' then
        call jClose m.m.catRd
    cx = m.m.catIx + 1
    m.m.catIx = cx
    if cx > m.m.RWs.0 then do
        m.m.catRd = ''
        return 0
        end
    m.m.catRd = m.m.RWs.cx
    if cx = word(m.m.catKeepOpen, 1) then
        m.m.catKeepOpen = subWord(m.catKeepOpen, 2)
    else
        call jOpen m.m.catRd , m.j.cRead
    return 1
endProcedure catNextRdr

catReadO: procedure expose m.
parse arg m
    do while m.m.catRd \== ''
        res = jReadO(m.m.catRd)
        if res \== '' then
            return res
        call catNextRdr m
        end
    return ''
endProcedure catReadO

catWrite: procedure expose m.
parse arg m, line
    if m.m.catWr == '' then
        m.m.catWr = jOpen(jBuf(), m.j.cWri)
    call jWrite m.m.catWr, line
    return
endProcedure catWrite

catWriteO: procedure expose m.
parse arg m, var
    if m.m.catWr == '' then
        m.m.catWr = jOpen(jBuf(), m.j.cWri)
    call jWriteO m.m.catWr, var
    return
endProcedure catWriteO

/*--- write contents of a reader to cat
          or keep it for later reading -------------------------------*/
catWriteAll: procedure expose m.
parse arg m
    if m.m.catWr \== '' then do
        call mAdd m'.RWS', jClose(m.m.catWr)
        m.m.catWr = ''
        end
    do ax=2 by 1 to arg()
        r = o2File(arg(ax))
        call mAdd m'.RWS', r
        if m.r.jReading then do
            m.m.catKeepOpen = m.m.rws.0 m.m.catKeepOpen
            call jOpen r, m.j.cRead
            end
        end
    return
endProcedure catWriteAll

/*--- create a reader/WriteO for an external file --------------------*/
file: procedure expose m.
parse arg str
    return oNew('File', str)
endProcedure file

fileChild: procedure expose m.
parse arg m, name, opt
    interpret objMet(m, 'fileChild')
endProcedure fileChild

fileRm: procedure expose m.
parse arg m
    interpret objMet(m, 'fileRm')
    return
endProcedure fileRm

filePath: procedure expose m.
parse arg m
    interpret objMet(m, 'filePath')
endProcedure filePath

fileIsFile: procedure expose m.
parse arg m
    interpret objMet(m, 'fileIsFile')
endProcedure fileIsFile

fileIsDir: procedure expose m.
parse arg m
    interpret objMet(m, 'fileIsDir')
endProcedure fileIsDir

fileMkDir: procedure expose m.
parse arg m, opt
    interpret objMet(m, 'fileMkDir')
    return
endProcedure fileRm

fileRmDir: procedure expose m.
parse arg m, opt
    interpret objMet(m, 'fileRmDir')
    return
endProcedure fileRm

/*--- create a reader/WriteO for the filelist of a directory----------*/
fileList: procedure expose m.
parse arg m, opt
    str = oIfStr(m, '')
    if str == '' then
        return oNew('FileList', filePath(m),  opt)
    else
        return oNew('FileList', dsn2Jcl(str),  opt)
endProcedure fileList

fileSingle: procedure expose m.
parse arg m
    call jOpen m, '<'
    res = jReadO(m)
    two = jReadO(m)
    call jClose m
    if res == '' then
        if arg() < 2 then
             call err 'empty file in fileSingle('m')'
        else
            res = arg(2)
    if two \== '' then
        call err '2 or more recs in fileSingle('m')'
    return res
endProcedure fileSingle

catIni: procedure expose m.
    if m.cat.ini == 1 then
        return
    m.cat.ini = 1
    call jIni
    call classNew "n Cat u JRWO", "m",
        , "jOpen  call catOpen m, opt",
        , "jReset call catReset m, arg",
        , "jClose call catClose m",
        , "jReadO return catReadO(m)",
        , "jWrite call catWrite m, line; return",
        , "jWriteO call catWriteO m, var; return",
        , "jWriteAll call catWriteAll m, rdr; return"

    call classAddMet m.class.classV, 'o2File return file(m.m)'
    call classAddMet m.class.classW, 'o2File return file(substr(m,2))'
    if m.err.os == 'TSO' then
        call fileTsoIni
    else if m.err.os == 'LINUX' then
        call fileLinuxIni
    else
        call err 'file not implemented for os' m.err.os
    return
endProcedure catIni
/* copy cat  end   ****************************************************/
/* copy fiLinux begin *************************************************/
/*--- send ggShCmd to shell bash,
        fail if rc <> 0 or not listed in ggRet -----------------------*/
adrSh: procedure expose m.  /* really no need for variables???? */
    parse arg ggShCmd, ggRet
    address 'bash' ggShCmd
    if rc == 0                     then return 0
    else if ggRet == '*'           then return rc
    else if wordPos(rc, ggRet) > 0 then return rc
    else
        call err 'adrSh rc' rc 'for' ggShCmd
endProcedure adrSh

fileLinuxReset: procedure expose m.
parse arg m, nm
    m.m.spec = nm
    if abbrev(nm, '&') then do
        if nm == '&in' then do
            m.m.stream = .input
            m.m.jReading = 1
            end
        else if nm == '&out' then do
            m.m.stream = .output
            m.m.jWriting = 1
            end
        else do
            call err 'bad spec' nm
            end
        end
    else do
        m.m.stream = .Stream%%new(nm)
        m.m.stream%%init(m.m.stream%%qualify)
        end
    return m
endProcedure fileLinuxReset

fileLinuxOpen: procedure expose m.
parse arg m, opt
    if opt == m.j.cRead then do
        res = m.m.stream%%open(read shareread)
        m.m.jReading = 1
        end
    else do
        if opt == m.j.cApp then
            res = m.m.stream%%open(write append)
        else if opt == m.j.cWri then
            res = m.m.stream%%open(write replace)
        else
            call err 'fileLinuxOpen('m',' opt') with bad opt'
        m.m.jWriting = 1
        end
    if res \== 'READY:' then
        call err 'fileLinuxOpen fails' res':' opt ,
        "'"m.m.stream%%qualify"'"
    return m
endProcedure fileLinuxOpen

fileLinuxClose:
parse arg m
    res = m.m.stream%%close
    if res \== 'READY:' then
        call err 'fileLinuxClose' res':' m.m.stream%%qualify
    return m
endProcedure fileLinuxClose

fileLinuxRead: procedure expose m.
parse arg m, var
    res = m.m.stream%%lineIn
    if res == '' then
        if m.m.stream%%state \== 'READY' then
            return 0
    m.var = res
       m.o.o2c.var = m.class.classV
    return 1
endProcedure fileLinuxRead

fileLinuxWrite: procedure expose m.
parse arg m, line
    if m.m.stream%%lineOut(line) then
        call err 'fileLinuxWrite'
    return
endProcedure fileLinuxWrite

fileLinuxRmDir: procedure expose m.
parse arg m, opt
    if opt == '' then
        return adrSh('rmdir' m.m.spec)
    else if opt == '-r' then
        return adrSh('rm -r' m.m.spec)
    else
        call err 'bad opt' opt 'in fileLinuxRmDir'
endProcedure fileLInuxRmDir

fileLinuxListReset: procedure expose m.
parse arg m, m.m.spec, o
    if o == 'r' then
        m.m.opt = 'S'
    else if o == '' then
        m.m.opt = ''
    else
        call err 'bad opt' o 'in fileLinuxListReset'
    m.m.rx = 'closed'
    return m
endProcedure fileLinuxListReset

fileLinuxListOpen: procedure expose m.
parse arg m
    if m \== translate(m) then
        call err 'bad m for fileLinuxList:' m
    if m.m.opt == '' then
        rc = sysFileTree(m.m.spec'/*', 'm.'m'.LIST')
    else
        rc = sysFileTree(m.m.spec'/*', 'm.'m'.LIST', m.m.opt)
    if rc \== 0 then
        call err 'rc' rc 'in sysFileTree('m.m.spec', m.'m'.LIST)'
    m.m.rx = 0
    m.m.jReading = 1
    return m
endProcedure fileLinuxListOpen

fileLinuxListRead: procedure expose m.
parse arg m, var
    x = m.m.rx + 1
    if x > m.m.list.0 then
        return 0
    m.var = substr(m.m.list.x, 43)
    m.m.rx = x
    call oMutate var, m.class.classV
    return 1
endProcedure fileLinuxListRead

fileLinuxIni: procedure expose m.
    if m.fileLinux.ini == 1 then
        return
    m.fileLinux.ini = 1
    m.file.sep = '/'
    call jIni
    call classNew "n File u JRW", "m",
        , "jReset call fileLinuxReset m, arg",
        , "jOpen  call fileLinuxOpen m, opt",
        , "jClose call fileLinuxClose m",
        , "jRead return fileLinuxRead(m, var)",
        , "jWrite call fileLinuxWrite m, line",
        , "jWriteO call jWrite m, o2String(var)",
        , "filePath return m.m.stream%%qualify",
        , "fileIsFile return sysIsFile(m.m.stream%%qualify)" ,
        , "fileIsDir return sysIsFileDirectory(m.m.stream%%qualify)" ,
        , "fileChild return file(m.m.stream%%qualify'/'name)",
        , "fileRm return adrSh(m.m.spec)",
        , "fileMkDir return adrSh('mkdir' m.m.stream%%qualify)" ,
        , "fileRmDir return fileLinuxRmDir(m, opt)"
    call classNew "n FileList u JRW", "m",
        , "jReset call fileLinuxListReset m, arg, arg2",
        , "jOpen  call fileLinuxListOpen m, opt",
        , "jClose m.m.rx = 'closed'",
        , "jRead return fileLinuxListRead(m, var)"
    return
endProcedure fileLinuxIni
/* copy fiLinux end   *************************************************/
/* copy fileTso begin *************************************************/
fileTsoReset: procedure expose m.
parse arg m, sp
    m.m.readIx = 'c'
    if symbol('m.m.defDD') \== 'VAR' then do
        m.m.defDD = 'CAT*'
        m.fileTso.buf = m.fileTso.buf + 1
        m.m.buf = 'FILETSO.BUF'm.fileTso.buf
        m.m.spec = sp
        end
    if sp \== '' then do
        m.m.spec = dsnSpec(sp)
        rr = translate(subword(m.m.spec, 4))
        m.m.stripT = \ (pos(':V', rr) > 0 | pos('RECFM(V', rr) > 0)
        end
    return m
endProcedure fileTsoReset

fileTsoOpen: procedure expose m.
parse arg m, opt
    buf = m.m.buf
    if opt == m.j.cRead then do
        aa = dsnAlloc(m.m.spec, 'SHR', m.m.defDD)
        if m.dsnAlloc.dsn <> '' then
            if sysDsn("'"m.dsnAlloc.dsn"'") <> 'OK' then
                call err 'cannot read' m.dsnAlloc.dsn':',
                               sysDsn("'"m.dsnAlloc.dsn"'")
        call tsoOpen word(aa, 1), 'R'
        m.m.jReading = 1
        m.buf.0 = -1
        m.m.readIx = 0
        end
    else do
        if opt == m.j.cApp then
            aa = dsnAlloc(m.m.spec, 'MOD', m.m.defDD)
        else if opt == m.j.cWri then
            aa = dsnAlloc(m.m.spec, 'OLD', m.m.defDD)
        else
            call err 'fileTsoOpen('m',' opt') with bad opt'
        call tsoOpen word(aa, 1), 'W'
        m.m.jWriting = 1
        m.buf.0 = 0
        m.m.readIx = 'w'
        end
    parse var aa m.m.dd m.m.free
    m.m.dsn = m.dsnAlloc.dsn
    return m
endProcedure fileTsoOpen

fileTsoClose: procedure expose m.
parse arg m
    buf = m.m.buf
    if m.m.readIx \== 'c' then do
        if m.m.readIx == 'w' & m.buf.0 > 0 then
            call writeDD m.m.dd, 'M.'BUF'.'
        call tsoClose m.m.dd
        call tsoFree  m.m.free
        end
    m.buf.0 = 'closed'
    m.m.readIx = 'c'
    m.m.free  = ''
    m.m.dd    = ''
    return m
endProcedure fileTsoClose

fileTsoRead: procedure expose m.
parse arg m, var
    ix = m.m.readIx + 1
    buf = m.m.buf
    if ix > m.buf.0 then do
        res = readDD(m.m.dd, 'M.'buf'.')
        if \ res then
            return 0
        ix = 1
        end
    m.m.readIx = ix
    m.var = m.buf.ix
    call oMutate var, m.class.classV
    return 1
endProcedure fileTsoRead

fileTsoWrite: procedure expose m.
parse arg m, var
    buf = m.m.buf
    ix = m.buf.0 + 1
    m.buf.0 = ix
    if m.m.stripT then
        m.buf.ix = strip(var, 't')
    else
        m.buf.ix = var
    if ix > 99 then do
        call writeDD m.m.dd, 'M.'buf'.'
        m.buf.0 = 0
        end
    return
endProcedure fileTsoWrite

fileTsoWriteO: procedure expose m.
parse arg m, var
    if objClass(var, m.class.classV) == m.class.classV then do
        call fileTsoWrite m, m.var
        return
        end
    call err 'fileTsoWriteO('m',' var') cannot write objects of class',
                              objClass(var)
endProcedure fileTsoWriteO

fSub: procedure expose m.
    return file('.sysout(T) writer(intRdr)')
endProcedure fSub

fEdit: procedure expose m.
parse arg spec, vw
    if spec == '' then
        spec = 'new ::f'
    else if abbrev(spec, '::') then
        spec = 'new' spec
    else if abbrev(spec, ':') then
        spec = 'new' ':'spec
    f  = oNew('FileEdit', spec)
    m.f.editType = if(abbrev(translate(vw), 'V'), 'view', 'edit')
    return f
endProcedure fEdit

fileTsoEditClose: procedure expose m.
parse arg m
    dsn = m.m.dsn
    if dsn \== '' then do
        call fileTsoClose m
        call adrIsp m.m.editType "dataset('"dsn"')", 4
        return
        end
    fr = m.m.free
    dd = m.m.dd
    m.m.free = ''
    call fileTsoClose m
    call adrIsp "LMINIT DATAID(lmmId) ddName("dd") ENQ(SHRW)"
    eRc = adrIsp(m.m.editType "dataid("lmmId")", '*')
    lRc = adrIsp("LMFree DATAID("lmmId")", '*')
    interpret fr
    if (eRc \== 0 & eRc \== 4) | lRc \== 0 then
        call err m.m.editType 'rc' eRc', lmFree rc' lRc
    return
endProcedure fileTsoEditClose

fileTsoIni: procedure expose m.
    if m.fileTso.ini == 1 then
        return
    m.fileTso.ini = 1
    m.file.sep = '.'
    m.fileTso.buf = 0
    call jIni
    um = "call err 'for tso undefined method'"
    call classNew "n File u JRW", "m",
        , "jOpen  call fileTsoOpen m, opt",
        , "jReset call fileTsoReset m, arg",
        , "jClose call fileTsoClose m",
        , "jRead return fileTsoRead(m, var)",
        , "jWrite call fileTsoWrite m, line",
        , "jWriteO call fileTsoWriteO m, var",
        , "filePath return word(m.m.spec, 1)"           ,
        , "fileIsFile" um "'fileIsFile'"      ,
        , "fileIsDir   return 1"              ,
        , "fileChild   return file(word(m.m.spec, 1)'.'name opt)",
        , "fileRm"     um "'fileRm'"          ,
        , "fileMkDir"  ,
        , "fileRmDir"  um "'fileRmDir'"
 /*     , "filePath return m.m.stream%%qualify",
        , "fileIsFile return sysIsFile(m.m.stream%%qualify)" ,
        , "fileIsDir return sysIsFileDirectory(m.m.stream%%qualify)" ,
        , "fileChild return file(m.m.stream%%qualify'/'name)",
        , "fileRm return adrSh(m.m.spec)",
        , "fileMkDir return adrSh('mkdir' m.m.stream%%qualify)" ,
        , "fileRmDir return fileLinuxRmDir(m, opt)" */
    call classNew "n FileList u JRW", "m",
        , "jReset if arg2 == 'r' then m.m.dsnMask=arg'.**';",
                                "else m.m.dsnMask=arg'.*';",
        , "jOpen  call csiOpen m, m.m.dsnMask",
        , "jClose" ,
        , "jRead return csiNext(m, var)"
    call classNew "n FileEdit u File", "m",
        , "jClose call fileTsoEditClose m"
    return
endProcedure fileTsoIni
/* copy fileTso end   *************************************************/
/* copy sqlDiv begin **************************************************/
/*--- generate the format m for a sql cx as specified in sp
          use the information from the sqlDa -------------------------*/
sqlFTabReset: procedure expose m.
parse arg ff, cx, tBef, tAft, m.ff.maxChar, m.ff.blobMax, m.ff.maxDec
    if m.ff.maxChar == '' then
        m.ff.maxChar == 32
    if m.ff.blobMax == '' then
        m.ff.blobMax = 200
    bf = '%-'max(m.ff.blobMax, 4)'C'
    m.ff.flds = ''
    m.ff.sqlX = cx
    call fTabReset ff, tBef, tAft
    m.ff.sql2fmt.384 = '%-10C' /* date    */
    m.ff.sql2fmt.388 = '%-8C'  /* time    */
    m.ff.sql2fmt.392 = '%-26C' /* timestamp */
    m.ff.sql2fmt.400 = 'c'     /* graphic string */
    m.ff.sql2fmt.404 = bf      /* BLOB           */
    m.ff.sql2fmt.408 = bf      /* CLOB           */
    m.ff.sql2fmt.412 = bf      /* DBCLOB         */
    m.ff.sql2fmt.448 = 'c'     /* varchar        */
    m.ff.sql2fmt.452 = 'c'     /* char           */
    m.ff.sql2fmt.452 = 'c'     /* long varchar   */
    m.ff.sql2fmt.460 = 'c'     /* null term. string */
    m.ff.sql2fmt.464 = 'c'     /* graphic varchar   */
    m.ff.sql2fmt.468 = 'c'     /* graphic char      */
    m.ff.sql2fmt.472 = 'c'     /* long graphic varchar   */
    m.ff.sql2fmt.480 = '%7e'   /* float                  */
    m.ff.sql2fmt.484 = 'd'     /* packed decimal         */
    m.ff.sql2fmt.492 = '%20i'  /* bigInt                 */
    m.ff.sql2fmt.496 = '%11i'  /* int                    */
    m.ff.sql2fmt.500 = '%6i'   /* smallInt               */
    m.ff.sql2fmt.904 = '%-34H' /* rowID 17 Byte Binary   */
    return
endProcedure sqlFTabReset
/*--- set a defaultFormat for type tx in fTab ff ---------------------*/
sqlFTabDef: procedure expose m.
parse arg ff, tx, m.ff.sql2fmt.tx
return ff

sqlFTabAdd: procedure expose m.
parse arg m, c1 aDone, f1, l1
    if symbol('m.m.set.c1') == 'VAR' then do
        sx = m.m.set.c1
        if word(m.m.set.sx, 1) == c1 & sx <= m.m.set.0 then do
            parse var m.m.set.sx c1 aDone
            f1 = m.m.set.sx.fmt
            l1 = m.m.set.sx.label
            end
        end
    cx = m.m.sqlX
    kx = sqlCol2kx(cx, c1)
    if kx == '' then
        call err 'colName not found' c1
    do tx=2 to arg()-3
        if arg(tx+3) \== '' then
            call fTabAddTit m, tx, arg(tx+3)
        end
    if f1 \== '' then do
        if right(f1, 1) \== ' ' then
            f1 = f1' '
        return fTabAdd(m, c1 aDone, f1, l1)
        end
    ty = m.sql.cx.d.kx.sqlType
    le = m.sql.cx.d.kx.sqlLen
    withNulls = ty // 2
    ty = ty - withNulls
    if symbol('m.m.sql2fmt.ty') <> 'VAR' then
        call err 'sqlType' ty 'col' c1 'not supported'
    f2 = m.m.sql2fmt.ty
    if f2 == 'c' then
        f2 = '%-'min(le, m.m.maxChar)'C'
    else if f2 == 'd' then do
        trace ?r
        pr =  le % 256
        de =  le // 256
        f2 = '%'pr'.'de'i'
        end
    if \ abbrev(f2, '%') then
        call err 'sqlType' ty 'col' c1 'bad format' f2
    return fTabAdd(m, c1 aDone, f2' ', l1)
endProcedure sqlFTabAdd

sqlFTabOthers: procedure expose m.
parse arg m, doNot
    cx = m.m.sqlX
    call sqlRxFetchVars cx
    do kx=1 to m.sql.cx.d.sqlD
        c1 = m.sql.cx.col.kx
        wx = wordPos(c1, m.m.cols)
        if (wx < 1 | m.m.wx.done \== 1) & wordPos(c1, doNot) < 1 then
            call sqlFTabAdd m, m.sql.cx.col.kx
        end
    return
endProcedure sqlFTabOthers

sqlFTab: procedure expose m.
parse arg m
    call fTabBegin m
    do while sqlRxFetch(m.m.sqlX, 'sqlFTab')
        call out f(m.m.fmt, 'sqlFTab')
        end
    return fTabEnd(m)
endProcedure sqlFTab

sqlFTabCol: procedure expose m.
parse arg m
    do rx=1 while sqlRxFetch(m.m.sqlX, 'sqlFTab')
        call out left('--- row' rx '', 100, '-')
        call fTabCol m, 'sqlFTab'
        end
    call out left('--- end of' (rx-1) 'rows ', 100, '-')
    return
endProcedure sqlFTabCol

/*--- generate the format ff for a sql cx as specified in sp
          use the information from the sqlDa -------------------------*/
deleteSqlGenFmt: procedure expose m.
parse arg ff, cx, sp
    if abbrev(sp, '=') then
        return substr(sp, 2)
    if sp = '' then
        sp = '*st'
    m.ff.0 = m.sql.cx.d.sqlD
    m.ff.flds = oFlds(sqlType(cx))
    if abbrev(sp, '*') then do
        do ix=1 to m.ff.0
            m.ff.ix = substr(sp, 2)
            end
        return ff
        end
    if abbrev(fmts, '=') then
        m.Sql.cx.FMT = substr(fmts, 2)
    defs = 'ir7 fr9 sl12 Tl26' sp
    do wx = 1 to words(defs)
        parse value word(defs, wx) with ty 2 fo
        select
            when ty = 'd' then      t.384 = fo
            when ty = 'f' then      t.480 = fo'/f'
            when ty = 'i' then      t.496 = fo'/i'
            when ty = 'n' then      t.484 = fo'/n'
            when ty = 's' then      t.448 = fo
            when ty = 't' then      t.388 = fo
            when ty = 'T' then      t.392 = fo
            otherwise          call err 'bad type' ty 'for format' fo
            end
        end
    if symbol('t.496') == 'VAR' then
        t.500 = t.496
    if symbol('t.448') == 'VAR' then do
        t.452 = t.448
        t.456 = t.448
        t.464 = t.448
        end
    do wx = 1 to m.ff.0
        ty = m.sql.cx.d.wx.sqlType
        le = m.sql.cx.d.wx.sqlLen
        withNulls = ty // 2
        ty = ty - withNulls
        if symbol('t.ty') <> 'VAR' then
            call err 'sqlType' ty 'not supported'
        parse var t.ty fo 2 fl '/' op
        if op = 'i' then
             if le = 2 then le = 6
             else           le = 12
        else if op <> '' then
            call err 'length for sqlType' ty 'op' op 'not implemented'
        if fl = '=' then
            fl = le
        else if abbrev(fl, '<') then
            fl = min(le, substr(fl, 2))
        m.ff.wx = fo || fl
        end
    return ff
endProcedure sqlGenFmt

tstCatTb:
/*
$=/tstCatTb/
    ### start tst tstCatTb ############################################
    ..
    select * from sysibm.SYSDUMMY1  .
    IBMREQD
    I .
    Y .
    I .
    IBMREQD
$/tstCatTb/
*/
    call sqlConnect
    call tst t, 'tstCatTb'
    call sqlCatTb 'sysDummy1'
    call sqlCatTb 'SYSTableSpaceStats',
             , "name = 'A403A1' and dbName = 'DA540769'"
    call tstEnd t
    return
endProcedure tstCatTb

sqlCatTb: procedure expose m.
parse arg ty gOnly, wh, ord, fTab, paPlus
    tb = tkrTable(, ty)
    if gOnly == 1 then
        edFun = ''
    else
        edFun = tkrTable(, ty, 'e')
    cx = 1
    ft = 'ft'm.tb.alias
    call sqlFTabReset ft, cx, 'c 1', '1 c', 12, if(fTab, , 2000)
    call sqlFTabDef      ft, 492, '%7e'
    call FTabSet         ft, 'CONTOKEN'  , '%-16H'
    call FTabSet         ft, 'DBNAME'    , '%-8C', 'db'
    call FTabSet         ft, 'DSNAME'    , '%-44C'
    call FTabSet         ft, 'DSNUM'     , '%5i'
    call FTabSet         ft, 'PARTITION' ,'%5i' , 'part'
    call FTabSet         ft, 'PIT_RBA'   , '%-12H'
    call FTabSet         ft, 'RBA1'      , '%-12H'
    call FTabSet         ft, 'RBA2'      , '%-12H'
    call FTabSet         ft, 'START_RBA' ,'%-12H'
    call FTabSet         ft, 'TSNAME'    , '%-8C', 'ts'
    call FTabSet         ft, 'VERSION'   , '%-28C'
    if edFun \== '' then do
        interpret 'sq =' edFun'(ft, tb, wh, ord)'
        end
    else do
        cl = sqlColList(m.tb.table, m.ft.blobMax)
        sq = 'select' cl tkrTable( , tb, 'f') wh ,
             'order by' if(ord=='', m.tb.order, ord)
        call sqlPreOpen cx, sq
        call sqlFTabOthers ft
        end
    if fTab then
        call sqlFTab ft
    else
        call sqlFTabCol ft
    call sqlRxClose cx
    call sqlCatTbTrailer space(m.TKR.path paPlus, 1), sq
    return 0
endProcedure sqlCatTb

sqlCatTbTrailer: procedure expose m.
parse arg pa, sq
    ox = lastPos(' order by ', sq)
    if ox < 1 then
        call err 'order by not found in' sq
    ord = substr(sq, ox+10)
    sq = left(sq, ox-1)
    sqUp = translate(sq)
    call out ''
    call out 'dbSys:' m.sql.conDbSys
    call out 'path:' pa
    int = ''
    iNx = '  '
    br = ''
    cx = 1
    stops = '(select from where'
    do while cx < length(sq)
        nx = -1
        do sx=1 to words(stops)
            n2 = pos(word(stops, sx), sq, cx+1)
            if n2 > cx & (nx < 1 | n2 < nx) then
                nx = n2
            end
        if nx < 0 then
            leave
        call out int || substr(sq, cx, nx-cx)
        int = iNx
        if substr(sq, nx, 3) = '(se' then do
            iNx = iNx'  '
            br = left(br, length(int))')'
            end
        cx = nx
        end
    ll =  strip(substr(sq, cx))
    bq = strip(br)
    do while bq <> ''
        if right(bq, 1) \== ')' | right(ll, 1) \== ')' then
           call err 'missing ) bq:' bq', ll:' ll
        ll = strip(left(ll, length(ll) - 1))
        bq = strip(left(bq, length(bq) - 1))
        end
    call out int || ll
    if br <> '' then
        call out br
    if ord <> '' then
        call out '  order by' ord
    return
endProcedure sqlCatTbTrailer

sqlCatIxKeys: procedure expose m.
parse arg ft, tb, wh, ord
    sq = 'select ikK.colSeq, ikK.colName, ikK.ordering, ikK.period' ,
             ', ik.creator, ik.name, ik.tbCreator, ik.tbName, ikC.*'  ,
          tkrTable(, tb ,'f') wh,
          'order by' if(ord == '', m.tb.order, ord)
    call sqlPreOpen m.ft.sqlX, sq
    call sqlFTabAdd      ft, CREATOR, '%-8C', 'creator'
    call sqlFTabAdd      ft, NAME   , '%-16C','index'
    call sqlFTabAdd      ft, colSeq  , '%5i',  'coSeq'
    call sqlFTabAdd      ft, colName, '%-16C', 'column'
    call sqlFTabAdd      ft, ordering
    call sqlFTabAdd      ft, period
    call sqlFTabAdd      ft, COLNO
    call sqlFTabAdd      ft, COLTYPE
    call sqlFTabAdd      ft, LENGTH
    call sqlFTabAdd      ft, SCALE
    call sqlFTabAdd      ft, NULLS
    call sqlFTabOthers ft, 'COL9 COL10 COL11 COL47'
    return sq
endProcedure sqlCatIxKeys

sqlCatIXStats: procedure expose m.
parse arg ft, tb, wh, ord
    sq = 'select *' tkrTable( , tb, 'f') wh ,
         'order by' if(ord == '', m.tb.order, ord)
    call sqlPreOpen m.ft.sqlX, sq
    call sqlFTabAdd      ft, CREATOR, '%-8C', 'creator'
    call sqlFTabAdd      ft, NAME   ,       , 'index'
    call sqlFTabAdd      ft, INSTANCE   , '%1i' , 'i'
    call sqlFTabAdd      ft, PARTITION , , 'part'
    call sqlFTabOthers ft
    return sq
endProcedure sqlCatIXStats

sqlCatTables: procedure expose m.
parse arg ft, tb, wh, ord
    al = m.tb.alias
    sq = 'select' al'.*, tsX.type tsType, tsX.partitions',
            ', tsX.pgSize, tsX.dsSize' ,
            ', timestamp(rba1 || x''0000'') rba1Tst' ,
            ', timestamp(rba2 || x''0000'') rba2Tst' ,
          'from' m.tb.table 'left join sysibm.sysTablespace tsX',
            'on' al'.dbName = tsx.dbName and' al'.tsName = tsX.name',
            'where' m.tb.cond wh ,
            'order by'  if(ord == '', m.tb.order, ord)
    call sqlPreOpen m.ft.sqlX, sq
    call sqlFTabAdd      ft, creator   , '%-8C', 'creator'
    call sqlFTabAdd      ft, NAME      , '%-16C', 'table'
    call sqlFTabAdd      ft, type
    call sqlFTabAdd      ft, dbNAME    , '%-8C', 'db'
    call sqlFTabAdd      ft, tsNAME    , '%-8C', 'ts'
    call sqlFTabAdd      ft, tsType
    call sqlFTabAdd      ft, partitions,       , 'parts'
    call sqlFTabAdd      ft, pgSize
    call sqlFTabAdd      ft, dsSize
    call sqlFTabOthers ft, 'RBA1 RBA1TST RBA2 RBA2TST'
    call sqlFTabAdd      ft, rba1      , '%-12H'
    call sqlFTabAdd      ft, rba1Tst   ,       , 'rba1Timestamp:GMT'
    call sqlFTabAdd      ft, rba2      , '%-12H'
    call sqlFTabAdd      ft, rba2Tst   ,       , 'rba2Timestamp:GMT'
    return sq
endProcedure sqlCatTables

sqlCatTSStats: procedure expose m.
parse arg ft, tb, wh, ord
    sq = 'select' m.tb.alias'.*' ,
           tkrTable( , tb, 'f') wh ,
           'order by' if(ord == '', m.tb.order , ord)
    call sqlPreOpen m.ft.sqlX, sq
    call sqlFTabAdd      ft, DBNAME, '%-8C', 'db'
    call sqlFTabAdd      ft, NAME   , '%-8C', 'ts'
    call sqlFTabAdd      ft, INSTANCE   , '%1i' , 'i'
    call sqlFTabAdd      ft, PARTITION , , 'part'
    call sqlFTabAdd      ft, NACTIVE   , , 'nActive'
    call sqlFTabAdd      ft, NPAGES    , , 'nPages'
    call sqlFTabAdd      ft, SPACE       , , 'spaceKB'
    call sqlFTabAdd      ft, TOTALROWS   , , 'totRows'
    call sqlFTabAdd      ft, DATASIZE         , , 'dataSz'
    call sqlFTabAdd      ft, LOADRLASTTIME    , , 'loadRLasttime'
    call sqlFTabAdd      ft, REORGLASTTIME    , , 'reorgLasttime'
    call sqlFTabAdd      ft, REORGINSERTS     , , 'inserts'
    call sqlFTabAdd      ft, REORGDELETES     , , 'deletes'
    call sqlFTabAdd      ft, REORGUPDATES     , , 'updates'
    call sqlFTabAdd      ft, REORGUNCLUSTINS  , , 'unClIns'
    call sqlFTabAdd      ft, REORGDISORGLOB   , , 'disorgL'
    call sqlFTabAdd      ft, REORGMASSDELETE  , , 'massDel'
    call sqlFTabAdd      ft, REORGNEARINDREF  , , 'nearInd'
    call sqlFTabAdd      ft, REORGFARINDREF   , , 'farInd'
    call sqlFTabAdd      ft, REORGCLUSTERSENS , , 'cluSens'
    call sqlFTabAdd      ft, REORGSCANACCESS  , , 'scanAcc'
    call sqlFTabAdd      ft, REORGHASHACCESS  , , 'hashAcc'
    call sqlFTabAdd      ft, STATSLASTTIME    , , 'statsLasttime'
    call sqlFTabAdd      ft, STATSINSERTS     , , 'inserts'
    call sqlFTabAdd      ft, STATSDELETES     , , 'deletes'
    call sqlFTabAdd      ft, STATSUPDATES     , , 'updates'
    call sqlFTabAdd      ft, STATSMASSDELETE  , , 'massDel'
    call sqlFTabAdd      ft, COPYLASTTIME     , , 'copyLasttime'
    call sqlFTabAdd      ft, COPYUPDATETIME   , , 'copyUpdatetime'
    call sqlFTabAdd      ft, COPYUPDATELRSN   , '%-12H', 'updateLRSN'
    call sqlFTabAdd      ft, COPYUPDATEDPAGES , , 'updaPgs'
    call sqlFTabAdd      ft, COPYCHANGES      , , 'changes'
    call sqlFTabOthers ft
    return sq
endProcedure sqlCatTSStats

sql4obj: procedure expose m.
parse arg m, tb
    call out 'insert into' tb '--' className(objClass(m))
    line = ''
    ff = oFlds(m)
    pr = '   ('
    do fx=1 to m.ff.0
        call sql4ObjOut substr(m.ff.fx, 2)
        end
    call sql4ObjOut , 1
    call out '   ) values '
    pr = '   ('
    do fx=1 to m.ff.0
        f1 = substr(m.ff.fx, 2)
        v = m.m.f1
        if dataType(v, n) then
            call sql4ObjOut v
        else do qx=1 until v == ''
            vx = verify(v, m.ut.alfPrint)
            if vx = 0 then do
                l1 = min(60, length(v))
                w = quote(left(v, l1), "'")
                end
            else if vx > 29 | vx = 0 then do
                l1 = min(60, vx)
                w = quote(left(v, l1), "'")
                end
            else do
                l1 = min(29, length(v))
                w = 'x'quote(c2x(left(v, l1)), "'")
                end
            if qx == 1 then
                call sql4ObjOut w
            else do
                if qx = 2 then
                    call sql4ObjOut , 1
                call out '   ||' w
                end
            v = substr(v, l1+1)
            end
        end
    call sql4ObjOut , 1
    call out '   ) ; '
    return
endProcedure
sql4objOut:
parse arg t1, force
    if (force == 1 & line \== '') | length(line t1) > 65 then do
        call out pr  substr(line, 3)
        pr = '   ,'
        line = ''
        end
    if force \== 1 then
        line = line',' t1
    return
endProcedure sql4objOut
/* copy sqlDiv end   **************************************************/
/* copy db2Cat begin **************************************************/
catTbLastCol: procedure expose m.
parse upper arg cr, tb
    return sql2one( ,
          "select strip(char(colcount)) || ' ' || strip(c.name) one"  ,
              "from sysibm.sysTables t left join sysibm.sysColumns c" ,
                  "on c.tbCreator = t.creator and c.tbName = t.name"  ,
                       "and c.colNo = t.colCount"                     ,
               "where t.creator = '"cr"' and t.name = '"tb"'", ,'')
endProcedure catTbLastCol

catTbCols: procedure expose m.
parse upper arg cr, tb
    if sql2St("select strip(name) name "     ,
          "from sysibm.sysColumns " ,
          "where tbcreator = '"cr"' and tbname='"tb"'",
          "order by colNo", ggSt) < 1 then
        return ''
    res = m.ggst.1.name
    do cx=2 to m.ggst.0
        res = res m.ggst.cx.name
        end
    return res
endProcedure catTbCols

catTbColsTrunc: procedure expose m.
parse upper arg cr, tb, maxL
    if sql2St("select strip(name) name, colType, length, length2"     ,
          "from sysibm.sysColumns " ,
          "where tbcreator = '"cr"' and tbname='"tb"'",
          "order by colNo", ggSt) < 1 then
        return ''
    res = ''
    do cx=1 to m.ggst.0
        ty = m.ggSt.cx.colType
        if pos('LOB', ty) > 0 then
            res = res', substr('m.ggSt.cx.name', 1,' ,
                 min(maxL, m.ggSt.cx.length2)') 'm.ggSt.cx.name
        else if pos('CHAR', ty) > 0 & m.ggSt.cx.length > maxL then
            res = res', substr('m.ggSt.cx.name', 1,' maxL')',
                 m.ggSt.cx.name
        else
            res = res',' m.ggSt.cx.name
        end
    return substr(res, 3)
endProcedure catTbColsTrunc

catIxKeys: procedure expose m.
parse upper arg cr, ix
    sql = "select colSeq, colName, ordering"                          ,
              "from sysibm.sysKeys"                                   ,
               "where ixCreator = '"cr"' and ixName = '"ix"'" ,
               "order by colSeq"
    call sqlPreOpen 1, sql
    res = ''
    do kx=1 while sqlFetchInto(1, ':sq, :col, :ord')
        if sq \= kx then
            call err 'expected' kx 'but got colSeq' sq ,
                     'in index' cr'.'ix'.'col
        res = res || strip(col) || translate(ord, '<>?', 'ADR')
        end
    call sqlClose 1
    return res
endProcedure catIxKeys

catColCom: procedure expose m.
parse upper arg fCr, fTb, tCr, tTb
    sql = "select t.name, t.colType, t.nulls, t.""DEFAULT"""        ,
                    ", coalesce(f.nulls, 'new')"                    ,
              "from sysibm.sysColumns t"                            ,
                "left join sysibm.sysColumns f"                     ,
                  "on f.tbCreator = '"fCr"' and f.tbName = '"fTb"'" ,
                    "and f.name = t.name"                           ,
              "where t.tbCreator = '"tCr"' and t.tbName = '"tTb"'"  ,
              "order by t.colNo"
    call sqlPreOpen 1, sql
    pr = ' '
    do kx=1 while sqlFetchInto(1, ':na, :ty, :nu, :de, :nn')
        /* say kx na ty nu de 'nn' nn */
        if pos('CHAR', ty) > 0 then
            dv = "''"
        else if pos('INT' ,ty) > 0 | wordPos(ty, 'REAL FLOAT') > 0 then
            dv = 0
        else if ty == 'TIMESTMP' then
            dv = '0001-01-01-00.00.00'
        else if pos('LOB', ty) > 0 then
            dv = ty"('')"
        else
            dv = '???'
        if nu = 'Y' then
            dv = 'case when 1=0 then' dv 'else null end'
        r = '???'
        if ty = 'ROWID' then do
            r = '--'
            end
        else if nn == 'new' then do
            if de = 'Y' then
                r = '--'
            else if nu == 'N' then
                r = dv
            else
                r = 'case when 1=0 then' dv 'else null end'
            end
        else do
            if nu = 'Y' | (nu = nn) then
                r = ''
            else
                r = 'coalesce('na',' dv')'
            end
        if abbrev(r, '--') then do
            r = ' ' r
            end
        else do
            r = pr r
            pr = ','
            end
        if pos('???', r) > 0 then
            call err 'no default for type' ty 'in' tCr'.'tTb'.'na
        call out r na
        end
    call sqlClose 1
    return
endProcedure catColCom
/* copy db2Cat end   **************************************************/
/* copy sqlO   begin ***************************************************
    sql interface  mit  o und j Anbindung
***********************************************************************/
sqlOini: procedure expose m.
    if m.sqlO.ini == 1 then
        return
    call sqlIni
    m.sqlO.ini = 1
    call jIni
    m.sqlO.cursors  = left('', 200)
    call classNew 'n SqlResultRdr u JRWO', 'm',
        , "jReset m.m.cursor = arg; m.m.type = arg2;",
        , "jOpen  call sqlResultRdrOpen m, opt",
        , "jClose call sqlClose m.m.cursor",
        , "jReadO return sqlSelReadO(m)"
    call classNew 'n SqlSel u JRWO', 'm',
        , "jReset m.m.src = arg; m.m.type = arg2;",
        , "jOpen  call sqlSelOpen m, opt",
        , "jClose call sqlSelClose m",
        , "jReadO return sqlSelReadO(m)"
    call classNew 'n SqlDRS u SqlSel', 'm',
        , "jReset m.m.loc = arg; m.m.type = arg2;",
        , "jOpen  call sqlDRSOpen m, opt",
        , "jClose call sqlSelClose m",
        , "jReadO return sqlSelReadO(m)"
    call classNew 'n SqlRxConnection u', 'm',
        , "sqlQuery  return sqlRxQuery(cx, src, retOk, resTy)",
        , "sqlFetch  return sqlRxFetch(cx, dst, retOk)",
        , "sqlClose  return sqlRxClose(cx, retOk)",
        , "sqlUpdate return sqlRxUpdate(cx, src, retOk)",
        , "sqlCall   call err 'implement sqlRxCall"
    call classNew 'n SqlRxStatement u', 'm',
        , "sqlQuery  return sqlRxQuery(m.cx.cursor, src, retOk,resTy)",
        , "sqlFetch  return sqlRxFetch(m.cx.cursor, dst, retOk)",
        , "sqlClose  return sqlRxClose(m.cx.cursor, retOk)",
        , "sqlUpdate return sqlRxUpdate(m.cx.cursor, src, retOk)",
        , "sqlCall   call err 'implement sqlRxCall"
    call classNew 'n SqlCsmConnection u', 'm',
        , "sqlQuery  return sqlCsmQuery(cx, src, retOk, resTy)",
        , "sqlFetch  return sqlCsmFetch(cx, dst)",
        , "sqlClose  return 0",
        , "sqlUpdate call err 'implement sqlCsmUpdate'"   ,
        , "sqlCall   call err 'implement sqlCsmCall'"
    call classNew 'n SqlCsmStatement u', 'm',
        , "sqlQuery  return sqlCsmQuery(m.cx.cursor, src, retOk,resTy)",
        , "sqlFetch  return sqlCsmFetch(m.cx.cursor, dst)",
        , "sqlClose  return 0",
        , "sqlUpdate call err 'implement sqlCsmUpdate'"   ,
        , "sqlCall   call err 'implement sqlCsmCall'"
    return 0
endProcedure sqlOini
/*--- connect and/or disconnect to DB2 -------------------------------*/
sqlConnect: procedure expose m.
parse upper arg sys, retOk
    call sqlOIni
    if pos('/', sys) > 0 then do
        parse value space(sys, 0) with hst '/' sys
        cTy = 'Csm'
        end
    else do
        hst = ''
        cTy = 'Rx'
        end
    if m.sql.conType==cTy & m.sqlHost==hst & m.sqlconDbSYs == sys then
        return 0
    if m.sql.conType \== '' then
        call sqlDisconnect
    res = 0
    if cTy = 'Rx' then
        res = sqlRxConnect(sys, retOk)
    else
        m.sql.conDbSys = sys
    if res < 0 then
        return res
    m.sql.conType = cTy
    m.sql.conhost = hst
    m.sql.connection = oNew('Sql'cTy'Connection')
    return res
endProcedure sqlConnect

sqlDisconnect: procedure expose m.
parse arg retOk
    if m.sql.conType == 'Rx' then
        call sqlRxDisconnect
    m.sql.conType = ''
    m.sql.conDbSys = ''
    return 0
endProcedure sqlDisonnect

/*--- execute a query from sql, with one resultset -------------------*/
sqlQuery: procedure expose m.
parse arg cx, src, retOk, resTy
    if datatype(cx, 'n') then
        interpret objMet(m.sql.connection, 'sqlQuery')
    else
        interpret objMet(cx, 'sqlQuery')
/*--- fetch next row to m.dst.* at end return false ------------------*/
sqlFetch: procedure expose m.
parse arg cx, dst, retOk
    if datatype(cx, 'n') then
        interpret objMet(m.sql.connection, 'sqlFetch')
    else
        interpret objMet(cx, 'sqlFetch')
/*--- close cursor 'c'cx ---------------------------------------------*/
sqlClose: procedure expose m.
parse arg cx, retOk
    if datatype(cx, 'n') then
        interpret objMet(m.sql.connection, 'sqlClose')
    else
        interpret objMet(cx, 'sqlClose')
    return 0
/*-- execute an sql with no resultset, but possibly outParms ---------*/
sqlUpdate: procedure expose m.
parse arg cx, src, retOk
    if cx == '' | datatype(cx, 'n') then
        interpret objMet(m.sql.connection, 'sqlUpdate')
    else
        interpret objMet(cx, 'sqlUpdate')
endProcedue sqlUpdate

/*-- execute an sql call with outParms and multiple resultSets -------*/
sqlCall: procedure expose m.
parse arg cx, src, retOk
    if cx == '' | datatype(cx, 'n') then
        interpret objMet(m.sql.connection, 'sqlCall')
    else
        interpret objMet(cx, 'sqlCall')
endProcedure sqlCall

sqlSel: procedure expose m.
parse arg src, type
     s = oNew('SqlSel', inp2str(src, '-sql'), type)
     call pipeWriteAll s
     return m.s.rowCount
endProcedure sqlSel

/*--- return a free cursor -------------------------------------------*/
sqlGetCursor: procedure expose m.
parse arg rng
    if rng == '' then
        return sqlGetCursorRng(rng, 10, 48)
    else if rng == 'h' then
        return sqlGetCursorRng(rng, 60, 99)
    else if rng == 'a' then
        return sqlGetCursorRng(rng, 110, 199)
    else
        call err 'bad cursor range' rng
endProcedure sqlGetCursor

sqlGetCursorRng: procedure expose m.
parse arg rng, fr, to
    cx = pos(' ', m.sqlO.cursors, fr)
    if cx < fr & cx > to then
        call err "no more '"rng"' cursors between" fr "and" to,
                 ":"m.sqlO.cursors
    m.sqlO.cursors = overlay('u', m.sqlO.cursors, cx)
    return cx
endProcedure sqlGetCursorRNG

/*--- mark a cursor as closed ----------------------------------------*/
sqlFreeCursor: procedure expose m.
parse arg cx
    if substr(m.sqlO.cursors, cx, 1) \== 'u' then
         call err 'sqlFreeCursor('cx') not in use :'m.sqlO.cursors
    m.sqlO.cursors = overlay(' ', m.sqlO.cursors, cx)
    return
endProcedure sqlFreeCursor

sqlStmtsOpt: procedure expose m.
parse arg src, opts
    upper opts
    sub = ''
    o = ''
    retOk = ''
    do wx=1 to words(opts)
        w = word(opts, wx)
        if abbrev(w, '-SQL') then
            o = o'-sql'substr(w, 5)
        else if w == '-O' | w == 'O' then
            o = o'-o'
        else if w = '*' | datatype(w, 'n') then
            retOk = retOk w
        else if length(w) == 4 then
            sub = w
        else
            call err 'bad opt' w 'in opts' opts 'not -sql? -o or subsys'
        end
    call sqlOIni
    if   (sub == '' & m.sql.conDbSys== '') ,
       | (sub \== '' & m.sql.conDbSys \== sub) then
        call sqlConnect sub
    return sqlStmts(src, strip(retOk), strip(o))
endProcedure sqlStmtsOpt

/*** execute sql's in a stream (separated by ;)
       opt: 'o' ==> write objects, otherwise fmtFTab
            'sql72' ==> spufi formatting (window 72) else linebreaks */
sqlStmts: procedure expose m.
parse arg sqlSrc, retOk, opt
   dlm = ';'
   isStr = oStrOrObj(sqlSrc, m.j.in)
   fLen = ''
   if pos('sql', opt) > 0 then
       fLen = word(substr(opt, pos('sql', opt)+3), 1)
   if isStr then do
       m.sqlStmts.rdr = ''
       call scanSrc sqlStmts, ggStr
       end
   else do
       fi = jOpen(o2File(ggObj), '<')
       call jCatSqlReset sqlStmts, , fi, fLen
       end
   do forever
       s1 = jCatSqlNext(sqlStmts, dlm)
       if s1 = '' then
           leave
       if translate(left(s1, 10)) == 'TERMINATOR' then do
            dlm = strip(substr(s1, 11))
            if length(dlm) \== 1 then
                call scanErr sqlStmts, 'bad terminator' dlm
            iterate
            end
       call outSt(splitNl(sqlTmp, sqlStmt(s1, retOk, opt)))
       end
   if \ isStr then
       call jClose fi
   return 0
endProcedure sqlStmts

sqlStmt: procedure expose m.
parse arg src, retOk, opt
    cx = sqlGetCursor()
    r1 = sqlExecute(cx, src, retOK)
    res = m.sql.sqlHaHi || sqlMsgLine(r1, m.sql.cx.updateCount, src)
    if m.sql.cx.resultSet \== '' then do
        rdr = sqlResultRdr(cx)
        if pos('o', opt) > 0 then
            call pipeWriteAll rdr
        else
            call fmtFTab sqlStmtFmt, rdr
        res = sqlMsgLine(m.rdr.rowCount 'rows fetched', , src)
        end
    call sqlFreeCursor cx
    return res
endProcedure sqlStmt

/*--- execute the given sql plus a commit
         until no more rows are updated -----------------------------*/
sqlUpdComLoop: procedure expose m.
parse arg src, retOk, opt
    src = inp2Str(src)
    crs = sqlGetCursor()
    upds = 0
    if retOk == '' then
        retOk = 100
    do coms=0
        cd = sqlExecute(crs, src, retOk)
        if m.sql.crs.updateCount < 1 then
            return sqlMsgLine( , upds, src, coms 'commits')
        upds = upds + m.sql.crs.updateCount
        call sqlCommit
        if coms // 20 = 19 then
            say sqlMsgLine(time(), upds, src, (coms+1) 'commits')
        end
endProcedure sqlUpdComLoop

removeSqlStmt: procedure expose m.
parse arg src, ggRet, opt
    bx = verify(src, '( ')
    if bx < 1 then
        return ''
    fun = translate(word(substr(src, bx), 1))
    w2  = translate(word(substr(src, bx), 2))
    res = ''
    if fun == 'SELECT' | fun = 'WITH' then do
        s = oNew('SqlSel', inp2str(src, '%S%+Q\s'))
        if pos('o', opt) > 0 then
            call pipeWriteAll s
        else
            call fmtFTab sqlStmtFmt, s
        res = m.s.rowCount 'rows fetched'
        end
    else if  fun = 'SET' &  abbrev(w2, ':') then do
        ex = pos('=', w2)
        if ex > 2 then
            var = strip(substr(w2, 2, ex-2))
        else
            var = strip(substr(w2, 2))
        if var = '' then
            var = 'varUnbekannt'
        call sqlExec src, ggRet
        res = 'sqlCode' sqlCode var'='value(var)
        end
    else if fun = 'SET' | (fun = 'DECLARE' & w2 = 'GLOBAL') then do
        call sqlExImm src, ggRet
        res = 'sqlCode' sqlCode
        end
    else if fun = 'CALL' then do
        res = sqlStmtCall(src, ggRet, opt)
        end
    else do
        call sqlExec src, ggRet
        res = 'sqlCode' sqlCode
        if wordPos(fun, 'DELETE INSERT UPDATE') > 0 THEN
            res = res',' sqlErrd.3 'rows' ut2Lc(fun)'d'
        end
    aa = strip(src)
    ll = 75 - length(res)
    if length(aa) > ll then
        aa = space(aa, 1)
    if length(aa) > ll then
        aa = left(aa,  ll-3)'...'
    return res':' aa
endProcedure removeSqlStmt

sqlStmtCall: procedure expose m.
parse arg src, retOk, opt
    s = scanSrc(scanSqlReset(sqlstmtcall, ,0), src)
    if \ scanSqlId(scanSkip(s)) | m.s.val \== 'CALL' then
        call scanErr s, 'not a call'
    if \ scanSqlQuId(scanSkip(s)) then
        call scanErr s, 'qualified id missing after call'
    loc = ''
    if m.s.val.0 = 1 then
        wh = 'name =' quote(m.s.val.1, "'")
    else if m.s.val.0 = 2 then
        wh = "schema = '"strip(m.s.val.1)"'" ,
             "and name = '"strip(m.s.val.2)"'"
    else if m.s.val.0 = 3 then do
        loc = m.s.val.1
        wh = "schema = '"strip(m.s.val.2)"'" ,
             "and name = '"strip(m.s.val.3)"'"
        end
    else
        call scanErr s, 'storedProcedureName' m.s.val ,
               'has' m.s.val.0 'parts, should have 1, 2 or 3'
    pn = m.s.val
    da = sqlStmtCallDa(sqlStmtCall, loc, wh)
    if \ scanLit(scanSkip(s), '(') then
        call scanErr s, '( expected after call' pn
    varChars = f
    do ax=1
        m.da.ax.varName = ''
        isEmpty = 0
        if scanLit(scanSkip(s), ':') then do
             if \ scanVerify(scanSkip(s), m.ut.alfDot) then
                 call scanErr s, 'variable expected after : in call' pn
             m.da.ax.varName = m.s.tok
             if m.da.ax.io == 'i' | m.da.ax.io == 'b' then
                 m.da.ax.sqlData = envGet(m.da.ax.varName)
             end
        else if scanString(s) then
            m.da.ax.sqlData = m.s.val
        else if scanVerify(s, ',):;', 'm') then
            m.da.ax.sqlData = strip(m.s.tok)
        else
            isEmpty = 1
        if scanLit(scanSkip(s), ')') then
            leave
        if \ scanLit(s, ',') then
            call scanErr s, if(isEmpty, 'value, var, ') ,
                         || "',' or ')' expected"
        end
    if ax \= m.da.sqlD then
        if \ (ax=1 & m.da.sqlD = 0 & isEmpty) then
            call scanErr s, 'call with' ax 'parms but' ,
                                pn 'needs' m.da.sqld
    caCo = sqlExec('call' pn 'using descriptor :M.'da, 466)
    call out '--- called' pn', sqlCode' caCo
    do ax=1 to m.da.sqlD
        call Out '  parm' ax m.da.ax.io m.da.ax.parmName,
                 || if(m.da.ax.varName \== '',' $'m.da.ax.varName),
               '=' m.da.ax.sqlData
        if m.da.ax.varName \== '' then
            call envPut m.da.ax.varName, m.da.ax.sqlData
        end
    if caCo = 466 then do
        drop sqlDP
        call sqlExec 'describe procedure :pn into :m.sqlDp'
        if m.sqldp.sqlD < 1 then
             call err 'bad sqldp sqlD='m.sqldp.sqlD 'for sqlCode' caCo
        do dx=1 to m.sqldp.sqlD
            call out '  dynamic result set' dx m.sqldp.dx.sqlName ,
                     'locator='m.sqldp.dx.sqlLocator
            end
        do dx=1 to m.sqldp.sqlD
            drs = 'dynamic result set' dx'='m.sqldp.dx.sqlName 'of' pn
            call out '--- begin of' drs
            rdr = sqlDRS(m.sqldp.dx.sqlLocator)
            if pos('o', opt) > 0 then
                call pipeWriteAll rdr
            else
                call fmtFTab sqlStmtFmt, rdr
            call out '---' m.rdr.rowCount 'rows fetched from' drs
            end
        end
    return 'sqlCode' caCo
endProcedure sqlStmtCall

sqlStmtCallDa: procedure expose m.
parse arg da, loc, wh
    cr = if(loc=='',,loc'.')'sysIbm'
    sql = "select 'SCHEMA=''' || strip(schema) || ''''",
             "|| ' and name='''   || strip(name  ) || ''''",
             "|| ' and specificName=''' || strip(specificName) || ''''",
             "|| ' and routineType =''' || strip(routineType ) || ''''",
             "|| ' and VERSION     =''' || strip(VERSION     ) || ''''",
          "from" cr".SysRoutines ",
          "where" wh "and active = 'Y'"
    if sqlpreAllCl(49, sql, rou, ':m.rou') <> 1 then
        call err m.rou.0 'routines found for' wh
    rdr = jOpen(sqlRdr('select * from' cr'.sysParms where' m.rou,
         'order by ordinal'), '<')
    do ix=1 while assNN('A', jReadO(rdr))
         if m.a.ordinal <>  ix then
             call err 'ix' ix 'mismatch ordinal' m.a.ordinal
         ty = m.a.dataTypeId
         m.da.ix.sqlType = ty
         m.da.ix.sqlLen  = m.a.length
         m.da.ix.sqlLen.sqlPrecision = m.a.length
         m.da.ix.sqlLen.sqlScale     = m.a.scale
         if wordPos(ty, 384 385) > 0 then        /* date */
             m.da.ix.sqlLen  = 10
         else if wordPos(ty, 388 389) > 0 then   /* time */
             m.da.ix.sqlLen  = 8
         else if wordPos(ty, 392 393) > 0 then   /* timestamp */
             m.da.ix.sqlLen  = 26
         m.da.ix.sqlData = ''
         m.da.ix.parmName= m.a.parmName
         m.da.ix.io      = translate(m.a.rowType, 'iob', 'POB')
         m.da.ix.sqlInd  = 1
         end
    m.da.sqlD = ix - 1
    return da
endProcedure sqlStmtCallDa

sqlResultRdr: procedure expose m.
parse arg cx, type
     return oNew('SqlResultRdr', cx, type)
endProcedure sqlRdr

sqlRdr: procedure expose m.
parse arg src, type
     return oNew('SqlSel', inp2str(src, '%S%qn %S'), type)
endProcedure sqlRdr

sqlResultRdrOpen: procedure expose m.
parse arg m, opt
    if opt\== m.j.cRead then
        call err 'opt not' m.j.cRead 'sqlResultRdrOpen('m',' opt')'
    m.m.jReading = 1
    m.m.rowCount = 0
    return m
endProcedure sqlResultRdrOpen

/*--- prepare and open cursor
      generate type and fetchList ------------------------------------*/
sqlSelOpen: procedure expose m.
parse arg m, opt
    m.m.cursor = sqlGetCursor()
    call sqlQuery m.m.cursor, m.m.src, ,m.m.type  /* ????? */
    return sqlResultRdrOpen(m, opt)
endProcedure sqlOpen

/*--- dynamic result sets --------------------------------------------*/
sqlDRS: procedure expose m.
parse arg loc, type
     return oNew('SqlDRS', loc, type)
endProcedure sqlDRS

sqlDRSOpen: procedure expose m.
parse arg m, opt
    if opt\== m.j.cRead then
        call err 'opt not' m.j.cRead 'sqlDRSOpen('m',' opt')'
    crs = sqlGetCursor('a')
    crN = 'C'crs
    m.m.cursor = crs
    call sqlReset crs
    call sqlexec 'allocate C'crs 'cursor for result set :m.m.loc'
    call sqlExec 'describe cursor c'crs 'into :m.sql.'crs'.D'
    m.m.jReading = 1
    m.m.rowCount = 0
    return m
endProcedure sqlDRSOpen

/*--- create the type, fetch vars etc. from the sqlDA ---------------*/
sqlFetchClass: procedure expose m.
parse arg cx
    if m.sql.cx.type = '' then do
        ff = mCat('SQL.'cx'.COL', '%qn v, f %s')
        m.sql.cx.type = classNew('n* SQL u f' ff 'v')
        end
    return m.sql.cx.type
endProcedure sqlFetchClass

/*--- fetch cursor for this sqlSel -----------------------------------*/
sqlSelReadO: procedure expose m.
parse arg m
    cx = m.m.cursor
    v = oNew(sqlFetchClass(cx))
    if \ sqlFetch(cx, v) then
        return ''
    m.m.rowCount = m.m.rowCount + 1
    return v
endProcedure sqlSelReadO

/*--- close sql Cursor -----------------------------------------------*/
sqlSelClose: procedure expose m.
parse arg m, v
    call sqlClose m.m.cursor
    call sqlFreeCursor m.m.cursor
    m.m.cursor = ''
    return m
endProcedure sqlSelClose
/* copy sqlO   end   **************************************************/
/* copy sqlC   begin ***************************************************
    sql interface Compatibility mode
***********************************************************************/
/*--- prepare and declare 'c'cx from sql src -------------------------*/
sqlPreDeclare: procedure expose m.
parse arg cx, src, ggRetOk, descOut
     m.sql.cx.type = ''
     res = sqlPrepare(cx, src, ggRetOk, descOut)
     if res >= 0 then
         return sqlExec('declare c'cx 'cursor for s'cx)
     return res
endProcedure sqlPreDeclare

/*--- prepare, declare and open 'c'cx from sql src -------------------*/
sqlPreOpen: procedure expose m.
parse arg cx, src, descOut, descInp
     res = sqlPreDeclare(cx, src, descOut, descInp)
     if res >= 0 then
         return sqlOpen(cx)
     return res
endProcedure sqlPreOpen

/*--- fetch cursor 'c'cx into variables ggVars -----------------------*/
sqlFetchInto:
parse arg ggCx, ggVars
    if ggVars == '' then
        ggVars = 'descriptor :M.SQL.'ggCX'.D'
                        /* accept sqlCodes > 0 except 100 */
    ggRes = sqlExec('fetch c'ggCx 'into' ggVars, 100)
    if ggRes == 0 then
        return 1
    if ggRes == 100 then
        return 0
    return ggRes
endProcedure sqlFetchInto

/*--- return sql variable list for stem st and fields the word in vars
          if withInd == 1 then with sqlIndicator variables
        sqlVars('S', 'A B') --> ':S.A, :S.B'
        sqlVars('S', 'A B', 1) --> ':S.A :S.A.SQLIND, :S.B :S.B.SQLIND'
----------------------------------------------------------------------*/
sqlVars: procedure expose m.
parse arg st, vars, withInd
    res = ''
    if st ^== '' then
        st = st'.'
    do ix=1 to words(vars)
        res = res', :'st || word(vars, ix)
        if withInd == 1 then
             res = res ':'st || word(vars, ix)'.sqlInd'
        end
    return substr(res, 3)
endProcedure sqlVars

/*--- open cursor 'c'cx fetch all into variables vars and close
      st = passed stem, sx = row number
      return number of rows fetched ----------------------------------*/
sqlOpAllCl:
parse arg ggCx, st, ggVars
    if arg() >= 4 then do
        call sqlDescribeInput ggCx
        do ggAx=4 to arg()
            call sqlDASet ggCx, 'I', ggAx-3, arg(ggAx)
            end
        ggRes = sqlOpen(ggCx use)
        end
    else do
        ggRes = sqlOpen(ggCx)
        end
    if ggRes < 0 then
        return ggRes
    do sx = 1 until ggRes \== 1
        ggRes = sqlFetchInto(ggCx, ggVars)
        end
    m.st.0 = sx - 1
    call sqlRxClose ggCx
    if ggRes == 0 then
        return m.st.0
    return ggRes
endProcedure sqlOpAllCl

/*--- prepare, declare open cursor 'c'cx, fetch all and close
      return number of rows fetched ----------------------------------*/
sqlPreAllCl:
parse arg ggCx, ggSrc, st, ggVars
    ggRes = sqlPreDeclare(ggCx, ggSrc)
    if ggRes >= 0 then
        return sqlOpAllCl(ggCx, st, ggVars)
    return ggRes
endProcedure sqlPreAllCl

/*--- execute statement 's'cx using arguments arg(2), arg(3)... ------*/
sqlExecStmt:
parse arg ggCx ggRetOk  /* no , for ggRetOk, arg(2) is used already| */
    if ggAx > 1 then
        call sqlDescribeInput ggCx
    do ggAx=2 to arg()
        call sqlDASet ggCx, 'I', ggAx-1, arg(ggAx)
        end
     return sqlExec('execute s'ggCx 'using descriptor :M.SQL.'ggCx'.I',
                   , ggRetOk)
endProcedure execStmt

/*--- execute immediate the sql src ----------------------------------*/

/* copy sqlC   end   **************************************************/
/* copy sqlCsm begin **************************************************/
/*--- send an sql to csm an handle sqlCode ---------------------------*/
sqlCsmExe:
parse arg cx, ggSqlStmt, ggRetOk
    sql_HOST =  m.sql.conHost
    SQL_DB2SSID = m.sql.conDbSys
    sql_query = ggSqlStmt
    address tso "CSMAPPC START PGM(CSMASQL)"
    if \ (rc = 0 |  rc = 4) then
        call err 'csmappc rc' rc
    if sqlCode = 0 then
        return 0
    else if pos('*', ggRetOk) > 0 | wordPos(sqlCode, ggRetOk) > 0 ,
            then do
        if sqlCode < 0 & pos('say', ggRetOk) > 0 then
            call errSay ' }'sqlmsg(sqlCA2Rx(sqlCa))
        return sqlCode
        end
    else if sqlCode < 0 then
        call err sqlmsg(sqlCA2rx(sqlCa))
    else if pos('w', ggRetOk) < 1 then
        if sqlCode = 100 then
            call errSay ' }sqlCode +100 row not found\nsql =' ggSqlStmt
        else
            call errSay 'w}'sqlMsg(sqlCA2rx(sqlCa))
    return sqlCode
endProcedure sqlCsmExe

/*--- execute a query from sql, with one resultset -------------------*/
sqlCsmQuery: procedure expose m.
parse arg cx, sqlSrc, retOk, resTy, src
    res = sqlCsmExe(cx, sqlSrc, 100 retOk)
    if res < 0 then
        return res
    if src == '' then
        src = 'SQL.'cx'.DATA'
    m.sql.cx.data = src
    f = ''
    if resTy \== '' then do
        f = oClaMet(class4Name(resTy), 'oFlds')
        if m.f.0 < sqlD then
            call err 'not enough fields in type'
        end
    do kx=1 to sqlD
        rxNa = SQLDA_REXXNAME.kx
        cn = sqlVarName(f, kx, sqlDa_name.kx)
        m.sql.cx.col.kx = cn
        do rx=1 to sqlRow#
            if substr(sqlIndicator.rx, kx ,1) == 'ff'x then
                m.src.rx.cn = m.sqlNull
            else
                m.src.rx.cn = value(rxNa'.'rx)
            end
        end
    m.src.0 = sqlRow#
    m.sql.cx.col.0 = sqlD
    m.sql.cx.daIx = 0
    return 0
endProcedure sqlCsmQuery

sqlCsmFetch: procedure expose m.
parse arg cx, dst
    src = m.sql.cx.data
    rx = m.sql.cx.daIx + 1
    if rx > m.sql.cx.data.0 then
        return 0
    m.sql.cx.daIx = rx
    do kx = 1 to m.sql.cx.col.0
        c = m.sql.cx.col.kx
        m.dst.c = m.src.rx.c
        end
    return 1
endProcedure sqlCsmFetch
/* copy sqlCsm end   **************************************************/
/* copy sqlRx  begin ***************************************************
       Achtung: inc generiert sql aus sqlRx, Aenderungen nur in sqlRx|
    sql interface
***********************************************************************/
/*--- initialize sqlRx -----------------------------------------------*/
sqlIni: procedure expose m.
    if m.sql.ini == 1 then
        return
    m.sqlNull = '---'
    m.sqlInd = 'sqlInd'
    m.sql.defCurs= 49
    m.sqlCAMsg = 0
    m.sqlSuMsg = 2
    m.sql.ini = 1
    m.sql.conType = ''
    m.sql.conDbSys = ''
    m.sql.conhost = ''
    isInProd = wordPos(sysvar(sysNode), 'RZ2 RZ4') > 0
    m.sqlRetOK = 'dne' copies('rod', \ isInProd)
    return 0
endProcedure sqlIni

/*--- connect to the db2 subsystem sys -----------------------------*/
sqlRxConnect: procedure expose m.
parse upper arg sys, ggRetOk
    call sqlIni
    address tso "SUBCOM DSNREXX"
    if rc <> 0 then do
       sRc = RXSUBCOM('ADD','DSNREXX','DSNREXX') /* ADD HOST CMD ENV  */
       if sRc <> 0 then
           call err 'rc' sRc 'from RXSUBCOM(ADD, DSNREXX, DSNREXX)'
       end
    if sys = '-' then
        return 0
    if sys \== '' then
        nop
    else if sysvar(sysnode) == 'RZ1' then
        sys = 'DBAF'
/*  else if sysvar(sysnode) == 'RZ4' then
        sys = 'DP4G'
*/  else
        call err 'no default subsys for' sysvar(sysnode)
    m.sql.conDbSys = sys
    ggSqlStmt =  'connect' sys
    address dsnRexx ggSqlStmt
    if rc = 0 then
        return 0
    interpret sqlErrorHandler(rc, ggRetOk, ggSqlStmt)
endProcedure sqlRxConnect

/*--- diconnect from db2 ---------------------------------------------*/
sqlRxDisconnect: procedure expose m.
parse arg retOk
    ggSqlStmt =  'disconnect'
    m.sql.conDbSys = ''
    address dsnRexx ggSqlStmt
    if rc = 0 then
        return 0
    interpret sqlErrorHandler(rc, ggRetOk, ggSqlStmt)
endProcedure sqlDisconnect

/*--- execute a query from sql, with one resultset -------------------*/
sqlRxQuery: procedure expose m.
parse arg cx, src, retOk, resTy
     res = sqlPrepare(cx, src, retOk, 1)
     if res < 0 then
         return res
     if resTy \== '' then
        m.sql.cx.type = class4Name(resTy)
     res = sqlExec('declare c'cx 'cursor for s'cx, retOk)
     if res < 0 then
         return res
     res = sqlExec('open c'cx, retOk)
     if res < 0 then
         return res
     call sqlRxFetchVars cx
     m.sql.cx.updateCount = sqlErrd.3
     m.sql.cx.resultSet = cx
     return res
endProcedure sqlRxQuery

/*--- fetch next row to m.dst.* at end return false ------------------*/
sqlRxFetch: procedure expose m.
parse arg cx, dst, retOk
    fetCode = sqlExec('fetch c'cx 'into' sqlRxFetchVars(cx), 100 retOk)
    if fetCode == 100 then
        return 0
    if fetCode < 0 then
        return fetCode
    call sqlSetNull cx, dst
    return 1
endProcedure sqlRxFetch

/*--- close cursor 'c'cx ---------------------------------------------*/
sqlRxClose: procedure expose m.
parse arg cx, retOk
     return sqlExec('close c'cx, retOk)
endProcedure sqlRxClose

/*-- execute an sql with no resultset, but possibly outParms ---------*/
sqlRxUpdate: procedure expose m.
parse arg cx, src, retOk
    m.sql.cx.updateCount = ''
    m.sql.cx.resultSet   = ''
    bx = verify(src, '( ')
    if bx > 0 then
        fun = translate(word(substr(src, bx), 1))
    if  fun = 'SET' then do
        w2 = translate(word(substr(src, bx), 2))
        if \ abbrev(w2, ':') then
            return sqlExImm(src, retOk)
        trace ?r
        ex = pos('=', w2)
        if ex = 0 then
            ex = length(w2)+1
        var = strip(substr(w2, 2, ex-2))
        if var = '' then
            call err 'bad hostVar in' src
        m.sql.outVar = var
        src2 = 'set :M.sql.out.'var substr(w, ex) subword(src, 3)
        return sqlExec(src2, retOk)
        end
    if fun == 'DECLARE'  then do
        if 'GLOBAL' == translate(word(substr(src, bx), 2)) then
            return sqlExImm(src, retOk)
        end
    res = sqlExec(src, retOk)
    if wordPos(fun, 'DELETE INSERT UPDATE') > 0 then
        m.sql.cx.updateCount = sqlErrd.3
    return res
endProcedure sqlRxUpdate

/*-- execute a query, update or call ---------------------------------*/
sqlExecute: procedure expose m.
parse arg cx, src, retOk
    src = inp2Str(src, '-sql')
    f = translate(word(substr(src, max(verify(src, '( '), 1)), 1))
    m.sql.cx.fun = f
    if f == 'SELECT' | f == 'WITH' then
        return sqlQuery(cx, src, retOk)
    else if f == 'CALL' then
        call err 'implement sql call for:' src
    else
        return sqlUpdate(cx, src, retOk)
endProcedure sqlExecute

/*-- execute a query, copy result to stem ----------------------------*/
sql2St: procedure expose m.
parse arg src, dst, retOk, type
    cx = m.sql.defCurs
    res = sqlQuery(cx, src, retOk, type)
    if res >= 0 then do
        do sx=1 while sqlFetch(cx, dst'.'sx)
           end
        res = sx-1
        end
    m.dst.0 = res
    call sqlRxClose cx
    return res
endProcedure sql2St

/*-- execute a query and return value of the first column
           if > 1 row fail, if 0 rows return arg(3) or fail ----------*/
sql2One: procedure expose m.
parse arg src, dst
    cx = m.sql.defCurs
    call sqlQuery cx, src
    if \ sqlFetch(cx, dst) then
        if arg() > 2 then
            return arg(3)
        else
            call err 'no row returned for:' src
    if sqlFetch(cx, dst.2) then
        call err '2 or more rows for' src
    c1 = m.sql.cx.col.1
    res = m.dst.c1
    call sqlRxClose cx
    return res
endProcedure sql2One

/*--- reset sql cursor 'c'cx fields ----------------------------------*/
sqlReset: procedure expose m.
parse arg cx
     m.sql.cx.updateCount = ''
     m.sql.cx.resultSet   = ''
     m.sql.cx.needDesc    = 1
     m.sql.cx.d.sqlD = 'noSqlDA'
     m.sql.cx.i.sqlD = 'noDescInp'
     m.sql.cx.fetchVars = ''
     m.sql.cx.type  = ''
     m.sql.cx.col.0 = ''
     m.sql.cx.into = ''
     return
endProcedue sqlReset

/*--- prepare statement 's'cx from sql src into descriptor desc ------*/
sqlPrepare: procedure expose m.
parse arg cx, src, retOk, descOut
     src = inp2str(src, '%qn%s ')
     s = ''
     if descOut == 1 then
         s = 'into :M.SQL.'cx'.D'
     call sqlReset cx
     return sqlExec('prepare s'cx s 'from :src', retOk)
endProcedure sqlPrepare

/*--- open cursor 'c'cx using arguments arg(2), arg(3)... ------------*/
sqlOpen: procedure expose m.
parse arg cx us
    if us == '' then do
        if arg() <=  1 then
            return sqlExec('open c'cx)
        call sqlDescribeInput cx
        do ix=1 to arg()-1
            call sqlDASet cx , 'I', ix, arg(ix+1)
            end
        end
    return sqlExec('open c'cx 'using descriptor :M.SQL.'cx'.I')
endProcedure sqlOpen

/*--- execute a prepared statement with arg(2), arg(3)... ------------*/
sqlExePreSt: procedure expose m.
parse arg cx retOk
    if arg() <=  1 then
        return sqlExec('execute s'cx, retOk)
    call sqlDescribeInput cx
    do ix=1 to arg()-1
        call sqlDASet cx , 'I', ix, arg(ix+1)
        end
    return sqlExec('execute s'cx 'using descriptor :M.SQL.'cx'.I',
                   , retOk)
endProcedure sqlExePreSt
/*--- describe output (if not already done)
         and return size of sqlDa ------------------------------------*/
sqlDescribeOutput: procedure expose m.
parse arg cx, force
    if force == 1 | \ datatype(m.sql.cx.d.sqlD, 'n') then
         call sqlExec 'describe s'cx 'into :M.SQL.'cx'.D', 0
    return m.sql.cx.d.sqlD
endProcedure sqlDescribeOutput

/*--- describe input (if not already done)
         and return size of input sqlDA ------------------------------*/
sqlDescribeInput: procedure expose m.
parse arg cx, force
    if force == 1 | \ datatype(m.sql.cx.i.sqlD, 'n') then
         call sqlExec 'describe input s'cx 'into :M.SQL.'cx'.I'
    return m.sql.cx.i.sqlD
endProcedure sqlDescribeInput

/*--- describe table and return sqlDA --------------------------------*/
sqlDescribeTable: procedure expose m.
parse upper arg tb, force
    if force == 1 | \ datatype(m.sql.table.tb.sqlD, 'n') then
         call sqlExec 'describe table :tb into :M.SQL.TABLE.'tb
    return 'SQL.TABLE.'tb
endProcedure sqlDescribeTable

/*--- return select column list for table tb
      omit Blobs (blobMax < 0) or substr(blob, 1, blobMax) ----------*/
sqlColList: procedure expose m.
parse arg tb al, blobMax
    sd = sqlDescribeTable(tb)
    bs = ''
    lst = ''
    if al \== '' & right(al, 1) \== '.' then
        al = al'.'
    do sx=1 to m.sd.sqld
        if wordPos(m.sd.sx.sqlType, '404 405 408 409 412 413') < 1 then
            lst = lst',' al || m.sd.sx.sqlName
        else do
            bs = bs m.sd.sx.sqlName
            if blobMax >= 0 then
                lst = lst', length('al || m.sd.sx.sqlName')' ,
                                          m.sd.sx.sqlName'Len' ,
                     || ', substr('al  || m.sd.sx.sqlName ,
                     || ', 1,' blobMax')' m.sd.sx.sqlName
            end
        end
    m.sd.colList = substr(lst, 3)
    m.sd.blobs = strip(bs)
    return substr(lst, 3)
endProcedure sqlColList

/*--- put sqlNull in all vars where indicator says so ---------------*/
sqlSetNull: procedure expose m.
    parse arg cx, dst
    do nx=1 to m.sql.cx.sqlNull.0
        col = m.sql.cx.sqlNull.nx
        if m.dst.col.sqlInd < 0 then
            m.dst.col = m.sqlNull
        end
    return
endProcedure sqlSetNull

/*--- use describe output to generate column names,
                fetchVariables and sqlNull names ---------------------*/
sqlRxFetchVars: procedure expose m.
parse arg cx
    if m.sql.cx.fetchVars \== '' then
        return m.sql.cx.fetchVars
    call sqlDescribeOutput cx
    f = m.sql.cx.type
    if f \== '' then do
        f = oClaMet(f, 'oFlds')
        if m.f.0 < m.sql.cx.d.sqlD then
            call err 'not enough column names'
        end
    m.sql.cx.col.0 = m.sql.cx.d.sqlD
    nx = 0
    vars = ''
    do kx=1 to m.sql.cx.d.sqlD
        cn = sqlVarName(f, kx, m.sql.cx.d.kx.sqlName)
        m.sql.cx.col.kx = cn
        m.sql.cx.col2kx.cn = kx
        vars = vars', :m.dst.'cn
        if m.sql.cx.d.kx.sqlType // 2 = 1 then do
            vars = vars' :m.dst.'cn'.sqlInd'
            nx = nx + 1
            m.sql.cx.sqlNull.nx = cn
            end
        end
    m.sql.cx.sqlNull.0 = nx
    m.sql.cx.fetchVars = substr(vars, 3)
    return m.sql.cx.fetchVars
endProcedure sqlRxFetchVars

sqlCol2kx: procedure expose m.
parse arg cx, nm
    call sqlRxFetchVars cx
    if symbol('M.SQL.CX.COL2KX.NM') \== 'VAR' then
        return ''
    kx = m.sql.cx.col2kx.nm
    if m.sql.cx.col.kx == nm then
        return kx
    drop m.sql.cx.col.kx
    return ''
endProcedure sqlCol2kx

sqlVarName: procedure expose m. sqlVarName.
parse arg f, kx, sNa
    if f == '' then do
        cx = verifId(sNa)
        if cx > 0 then /* avoid bad characters for classNew| */
           sNa = left(sNa, cx-1)
        upper sNa
        if sNa == '' | symbol('sqlVarName.sNa') == 'VAR' then
                sNa = 'COL'kx
        sqlVarName.sNa = 1
        return sNa
        end
    else do
        if m.f.kx == '' then
            call err 'implement empty varName'
        return substr(m.f.kx, 2)
        end
endProcedure sqlVarName

/*--- set one value in a DA, handle nulls ----------------------------*/
sqlDASet: procedure expose m.
parse arg cx, da, ix, val
    m.sql.cx.da.ix.sqlData = val
    m.sql.cx.da.ix.sqlInd = - (val == m.sqlNull)
    /* data types schienen einmal nicht zu funktionieren .......
    if wordPos(m.da.ix.sqlType, '384 385 388 389 392 393') > 0 then
        m.da.ix.sqlType = 448 + (m.da.ix.sqlType // 2) */
    return
endProcedure sqlDASet

sqlExImm:
parse arg ggSrc, ggRetOk
     return sqlExec('execute immediate :ggSrc', ggRetOk)
endProcedure sqlExImm

sqlCommit: procedure expose m.
parse arg src
     return sqlExec('commit')
endProcedure sqlCommit

/*--- execute sql thru the dsnRexx interface -------------------------*/
sqlExec: /* no procedure, to keep variables sql... */
    parse arg ggSqlStmt, ggRetOk
    m.sql.sqlHaHi = ''
    address dsnRexx 'execSql' ggSqlStmt
    /* say 'sqlCode' sqlCode 'rc' rc 'for' ggSqlStmt ggNo */
    if rc = 0 then
        return 0
    interpret sqlErrorHandler(rc, ggRetOk, ggSqlStmt)
endProcedure sqlExec

sqlErrorHandler: procedure expose m. ,
                   sqlCode sqlErrMc sqlErrP sqlErrD. sqlWarn. sqlState
parse arg drC, retOk, verb rest
    if drC == 0 then
        return 'return 0'
    if wordPos(drC, '1 -1') < 0 then
        return "call err 'dsnRexx rc" drC"' sqlmsg()"
    if pos('-', retOK) < 1 then
        retOK = retOk m.sqlRetOk
    if pos('*', retOK) > 0 | wordPos(sqlCode, retOK) > 0 then do
        if sqlCode < 0 & pos('say', retOK) > 0 then
            return "call outSt errMsg(' }'sqlMsg()); return" sqlCode
        else
            return "return" sqlCode
        end
    upper verb
    if verb == 'DROP' then do
        if sqlCode == -204 & wordPos('dne', retok) > 0 then
            return 'return' sqlCode
        if sqlCode = -672 & verb=='DROP' ,
               & wordPos('rod', retok) > 1 then do
            hahi = m.sql.sqlHaHi ,
                 || sqlMsgLine(sqlCode, 'tb='sqlErrMc ,verb rest)'\n'
            call sqlExec 'alter table' SqlErrMc ,
                    'drop restrict on drop'
            hahi = hahi || m.sql.sqlHaHi ,
                        || sqlMsgLine(sqlCode, , ggSqlStmt)'\n'
            call sqlExec verb rest
            m.sql.sqlHaHi = hahi
            return 'return' sqlCode
            end
        end
    if drC < 0 then
         return "call err sqlmsg(); return" sqlCode
    if (sqlCode <> 0 | sqlWarn.0 ^==' ') & pos('w',retOK) < 1 then
        return "call outSt errMsg(' }'sqlMsg()); return" sqlCode
    return 'return' sqlCode
endProcedure sqlErrorHandler

sqlMsgLine: procedure expose m. sqlErrD.
parse arg res, cnt, src, plus
    verb = translate(word(src, 1))
    if datatype(res, 'n') then
        res = 'sqlCode' res
    if cnt \== '' then do
        res = res',' cnt
        vx = wordPos(translate(word(src,1)), 'DELETE INSERT UPDATE')
        if datatype(cnt, 'n') then
            if vx > 0 then
               res = res 'rows' word('deleted inserted updated', vx)
            else if cnt <> 0 then
                res = res 'rows updated'
        end
    if plus \== '' then
        res = res',' plus
    if abbrev(res, ', ') then
        res = substr(res, 3)
    if src \== '' then do
        ll = 75 - length(res)
        aa = strip(src)
        if length(aa) > ll then
            aa = space(aa, 1)
        if length(aa) > ll then
           aa = left(aa,  ll-3)'...'
        res = res':' aa
        end
    return res
endProcedure sqlMsgLine

/*--- send a command to db2 through the TSO dsn processor ------------*/
sqlDsn: procedure expose m.
parse arg st, sys, cmd, rcOk
    x = outtrap('M.'st'.')
    push 'END'
    push cmd
    address tso 'DSN SYSTEM('sys')'
    rr = rc
    x = outtrap(off)
    if rr = 0 | rcOk = '*' | wordPos(rr, rcOk) > 0 then
        return rr
    fl = max(1, m.st.0 - 10)
    em = 'rc' rr 'for DSN SYSTEM('sys') cmd' cmd,
          '\nOuputlines' fl '-' m.st.0':'
    do lx=fl to m.st.0
        em = em '\n' strip(m.st.lx, 't')
        end
    call err em
endProcedure sqlDsn
/*--- issue an sql error message -------------------------------------*/
sqlMsg: /* no procedure, to keep variables sql... */
    if \ dataType(sqlCode, 'n') then do
        ggRes = 'sqlCode' sqlCode 'not numeric\n'sqlCaMsg()
        end
    else do
        ggRes = sqlDsntiar(sqlRx2CA())
        ggWa = sqlMsgWarn()
        if ggWa \= '' then
            ggRes = ggRes'\nwarnings' ggWa
        if m.sqlCAMsg == 1 then
           ggRes = ggRes'\n'sqlCaMsg()'\n'sqlCaMsg(sqlCa2Rx(sqlCa))
        end
    ggSt = 'SQL.HOST'
    ggVa = 'SQL.HOST.VAR'
    ggBe = 'SQL.HOST.BEF'
    call sqlHostVars ggSqlStmt, 12, ggSt
    ggFrom = 'ggSqlStmt'
    ggW1 = translate(word(ggSqlStmt, 1))
    ggW2 = translate(word(ggSqlStmt, 2))
    if ggW1 == 'PREPARE' then
        ggFrom = sqlHostVarFind(ggSt, 'FROM')
    else if ggW1 ggW2 == 'EXECUTE IMMEDIATE' then
        ggFrom = sqlHostVarFind(ggSt, 1)
    ggPos = 0
    if datatype(sqlErrd.5, 'n') & sqlErrd.5 > 0 then do
        ggPos = sqlErrd.5
        ggRes = ggRes || sqlMsgSrcPos(value(ggFrom), sqlErrd.5)
        end
    if ggFrom == 'ggSqlStmt' then do
        ggRes = ggRes'\nsql =' sqlShorten(ggSqlStmt, 2000, ggPos)
        end
    else do
        ggRes = ggRes'\nsql =' sqlShorten(value(ggFrom), 2000, ggPos)
        ggRes = ggRes'\nstmt =' sqlShorten(ggSqlStmt, 2000)
        end
    ggPref = '\nwith'
    do ggXX=1 to m.ggSt.0
        if ggFrom = m.ggVa.ggXX then
            iterate
        ggRes = ggRes || ggPref m.ggBe.ggXX ':'m.ggVa.ggXX ,
                      '=' sqlShorten(value(m.ggVa.ggXX), 210)
        ggPref = '\n    '
        end
    if m.sqlSuMsg == 1 | (m.sqlSuMsg == 2 & m.sql.conHost \== '') then
        ggRes = ggRes'\nsubsys =' m.sql.conDbSys ,
             || ', host =' m.sql.conHost', interfaceType' m.sql.conType
    return  ggRes
endSubroutine sqlMsg

sqlShorten: procedure expose m.
parse arg txt, maxL, pos
    if length(txt) <= maxL then
        return txt
    if \ datatype(pos, 'n') | pos < 1 then
        pos = 1
    ex = pos + min(60, maxL%7)
    if ex <= maxL - 4 then
        return left(txt, maxL-4) '...'
    if ex >= length(txt) then
        return left(txt, 67) '...\n'substr(txt, length(txt)-maxL+72)
    else
        return left(txt, 67) '...\n'substr(txt, ex-maxL+76, maxL-75) ,
                       '...'
endProcedure sqlShorten
/*--- use dsnTiar to translate sql Info to error text ----------------*/
sqlDsnTiar: procedure expose m.
parse arg ca
    if -438  = sqlCa2Rx(ca) then
        return '\nSQLCODE = -438:',
           'APPLICATION RAISED ERROR WITH sqlState' sqlState ,
           'and DIAGNOSTIC TEXT:' sqlErrMc
    liLe = 78
    msLe = liLe * 10
    msg = d2c(msLe,2) || left('', msLe)
    len = d2c(liLe, 4)
    ADDRESS LINKPGM "DSNTIAR ca msg len"
    if rc = 0      then nop
    else if rc = 4 then say 'warn linkPgm dsnTiar rc' rc 'sqlCa' ca
    else                call err 'linkPgm dsnTiar rc' rc 'sqlCa' ca
    res = strip(substr(msg, 13, liLe-10))
    cx = pos(', ERROR: ', res)
    if cx > 0 then
        res = left(res, cx-1)':' strip(substr(res, cx+9))
    do c=3+liLe by liLe to msLe while substr(msg, c, 10) = ''
            res = res'\n    'strip(substr(msg, c+10, liLe-10))
        end
    return res
endProcedure sqlDsnTiar

/*--- format all rexx sqlCa fields into a message --------------------*/
sqlCaMsg:
    return 'sqlCode' sqlCode 'sqlState='sqlState                    ,
           '\n    errMC='translate(sqlErrMc, ',', 'ff'x)            ,
           '\n    warnings='sqlWarnCat('+') 'erP='sqlErrP           ,
           '\n    errD.1='sqlErrD.1 '2='sqlErrD.2 '3='sqlErrD.3     ,
           '\n    errD.4='sqlErrD.4 '5='sqlErrD.5 '6='sqlErrD.6
endProcedure sqlCaMsg

/*--- format the sqlCA into the dsnTiar SQLCA ------------------------*/
sqlRx2Ca: procedure expose m. ,
                   sqlCode sqlErrMc sqlErrP sqlErrD. sqlWarn. sqlState
    if \ (datatype(sqlcode, 'n') & datatype(sqlErrD.1, 'n') ,
                                 & datatype(sqlErrD.3, 'n')) then
        return err('sqlCode etc. not numeric\nsqlCa =' sqlCaMsg())
    if digits() < 10 then
        numeric digits 10
    sqlCa = 'SQLCA   ' || d2c(136, 4) || d2c(sqlCode, 4) ,
            || d2c(min(70, length(sqlErrMc)), 2)left(sqlErrMc, 70) ,
            || left(sqlErrP, 8) ,
            || d2c(sqlErrD.1, 4)d2c(sqlErrD.2, 4)d2c(sqlErrD.3, 4) ,
            || d2c(sqlErrD.4, 4)d2c(sqlErrD.5, 4)d2c(sqlErrD.6, 4) ,
            || sqlWarnCat() || sqlState
    if length(sqlCa) <> 136 then
        call err 'sqlCa length' length(sqlCa) 'not 136' ,
                 '\n'sqlCaMsg() '==>'  ca', hex='c2x(ca)
    return sqlCa
endProcedure sqlRx2Ca

/*--- extract the fields from the SqlCA and put it to rexx vars ------*/
sqlCA2Rx: procedure expose m. ,
       sqlCode sqlErrMc sqlErrP sqlErrD. sqlWarn. sqlState
parse arg ca
    numeric digits 10
    if length(ca) < 136 | c2d(substr(ca, 9, 4), 4) <> 136 then
        call err 'bad sqlCa len' length(ca) 'not 136:' ca', hex='c2x(ca)
    sqlCode  = c2d(substr(ca, 13 ,4), 4)
    sqlErrMC = substr(ca, 19, c2d(substr(ca, 17, 2), 2))
    sqlErrP  = substr(ca, 89, 8)
    do ix=1 to 6
        sqlErrD.ix = c2d(substr(ca, 93 + 4 * ix, 4), 4)
        end
    do ix=0 to 10
        sqlWarn.ix = substr(ca, 121 + ix, 1)
        end
    sqlState = substr(ca, 132, 5)
    return sqlCode
endProcedure sqlCA2Rx

/*--- concat the sql warnings with Separator sep --------------------*/
sqlWarnCat: procedure expose m. sqlWarn.
parse arg sep
    return sqlWarn.0 || sep,
        || sqlWarn.1||sqlWarn.2||sqlWarn.3||sqlWarn.4||sqlWarn.5||sep ,
        || sqlWarn.6||sqlWarn.7||sqlWarn.8||sqlWarn.9||sqlWarn.10||sep
endProcedure sqlWarnCat

/*--- make the text for sqlWarnings ----------------------------------*/
sqlMsgWarn: procedure expose m. sqlWarn.
     r = ''
     text =' 1=W var truncated, 1=S scrollable, 1=N nonScrollable,'  ,
            '2=W nulls in aggregate,'                                ,
            '3=W more cols than vars,'                               ,
                             '3=Z more result sets than locators,'   ,
            '4=W no where, 4=D sensitive dynamic, 4=I insensitive,'  ,
                          '4=S sensitive static,'                    ,
            '5=W not valid sql, 5=1 readOnly, 5=2 readDelete,'       ,
                          '5=3 readDeleteUpdate,'                    ,
            '6=W day changed to month range,'                        ,
            '7=W dec digits truncated,'                              ,
            '8=W char substituted,'                                  ,
            '9=W arith excep in count, 9=Z multipe result sets,'     ,
            '10=W char conversion err in ca,'
     do wx = 1 to 10
         w = sqlWarn.wx
         if w = ' ' then
             iterate
         t = wx'='w
         cx = pos(' 'wx'='w' ', text)
         ex = pos(','         , text, cx + 1)
         if cx > 0 & ex > cx then
             r = r substr(text, cx+1, ex-cx)
         else
             r = r wx'='w '?,'
         end
     r = strip(r, 't', ',')
     if r = '' & sqlwarn.0 <> '' then
        call err 'sqlWarn.0='sqlWarn.0 'but all warns empty'
     return r
endProcedure sqlMsgWarn

/*--- show in the source src the point pos  (where error occured)
          a few lines from src around pos and arrow to pos ----------*/
sqlMsgSrcPos: procedure expose m.
parse arg src, pos
    liLe = 68
    liCn = 3
    afLe = 25
    t1 = space(left(src, pos), 1)
    t2 = left(' ', substr(src, pos, 1) == ' ' ,
                 | substr(src, pos+1, 1) == ' ') ,
         || space(substr(src, pos+1), 1)
    afLe = min(afLe, length(t2))
    if length(t1) + afLe > liLe * liCn then
        t1 = '...'right(t1, liLe * liCn - afLe -3)
    else if length(t1)+length(t2) > liLe then
        t1 = left(' ', (liCn * liLe - length(t1) -afLe) // liLe)||t1
    pL = length(t1) // liLe
    if length(t2) <= liLe-pL then
        tx = t1 || t2
    else
        tx = t1 || left(t2, liLe-pL-3)'...'
    res = '\nsrc' strip(substr(tx, 1, liLe), 't')
    do cx=1+liLe by liLe to length(tx)
        res = res || '\n  +' strip(substr(tx, cx, liLe), 't')
        end
    loc = 'pos' pos 'of' length(src)
    if length(loc)+6 < pL then
        return res'\n  >' right('>>>'loc'>>>', pL)
    else
        return res'\n  >' left('', pL-1)'<<<'loc'<<<'
endProcdedure sqlMsgSrcPos

/*--- get the hostVars in the sql in src and the word before ---------*/
sqlHostVars: procedure expose m.
parse arg src, cnt, st
    cx = 1
    sx = 1
    do cnt
        cx = pos(':', src, cx) + 1
        if cx < 2 then
           leave
        if pos(substr(src, cx, 1), m.ut.alfRexN1) > 0 then
            iterate
        ex = verify(src, m.ut.alfRex, 'n', cx)
        if ex < 1 then
            m.st.var.sx = substr(src, cx)
        else
            m.st.var.sx = substr(src, cx, ex - cx)
        if m.st.var.sx == '' | length(m.st.var.sx) > 100 then
            iterate
                       /* search word before */
        do bE = cx-2 by -1 to 1 ,
                while substr(src, bE, 1) == ' '
            end
        do bB = bE by -1 to max(1, bE-20),
                while pos(substr(src, bB, 1), m.ut.alfa) > 0
            end
        if bB < bE & bB >= 0 then
            m.st.bef.sx = substr(src, bB+1, bE-bB)
        else
            m.st.bef.sx = ''
        sx = sx + 1
        end
    m.st.0 = sx-1
    return sx
endProcedure sqlHostVars

/*--- find the name of hostvar, by index or by before ----------------*/
sqlHostVarFind: procedure expose m.
parse arg st, fnd
    if datatype(fnd, 'n') & fnd <= m.st.0 then
        return m.st.var.fnd
    do ix=1 to m.st.0
        if translate(m.st.bef.ix) = fnd then
            return m.st.var.ix
        end
    return ''
endSubroutine sqlHostVarFind
/* copy sqlRx  end   **************************************************/
/* copy csi begin    ***************************************************
     csi interface: see dfs managing catalogs appendix c
         returncode/reason see message IDC3009I
**********************************************************************/
/*--- specify dsn mask and fields to start a csi catalog search --------
      arguments:
          m       objectPointer
          dsnMask specifies the dsns with wildcards:
              %  1 character
              *  0 - n character in one level
              ** 0 - n levels
          fields a (space separated) list of field names -------------*/
csiOpen: procedure expose m.
parse arg m, dsnMask, fields
    m.m.fld.0 = words(fields)
    ffix = d2c(m.m.fld.0, 2)
    do x=1 to m.m.fld.0
        m.m.fld.x = translate(word(fields, x))
        ffix = ffix || left(m.m.fld.x, 8)
        end
    if dsnMask \== '' & pos('*', dsnMask) < 1 then
        dsnMask = dsnMask'.**'
    m.m.filt = left(dsnMask, 149) ,
             || left('Y', 3) ,        /* resume offset 149      */
             || ffix                  /* csiNumEn offset 152    */

    WORKLEN = 1024 * 64
    m.m.work = D2C(WORKLEN,4) || COPIES('00'X,WORKLEN-4)
    m.m.pos = workLen + 1
    return
endProcedure csiOpen

/*--- put the next dsn into m.o and m.o.* (for other fields)
      return 1 if next dsn exists 0 otherwise ------------------------*/
csiNext: procedure expose m.
parse arg m, o
    usedL = C2D(SUBSTR(m.m.work,9,4)) /* GET AMOUNT OF WORK AREA USED */
    px = m.m.pos
    do forever
        if px > usedL then do
            if substr(m.m.filt, 150, 1) \== 'Y' then do
                m.m.pos = px
                m.o = ''
                return 0
                end
            reason = left('', 4)
            ADDRESS LINKPGM 'IGGCSI00  reason m.'m'.filt  m.'m'.work'
            if rc == 0 & substr(reason, 3, 2) == '0000'x then
                nop
            else if rc == 4 & substr(reason, 3, 2) == '0464'x then
                say 'data set entry with error'
            else
                call err 'call csi returns' rc,
                             'rc' c2d(substr(reason, 4,1)),
                             'reason' c2d(substr(reason, 3,1)),
                             'module' substr(reason, 1,2)
            usedL = C2D(SUBSTR(m.m.work,9,4)) /* GET WORK AREA USED */
            numFD = C2D(SUBSTR(m.m.work,13,2)) /* no flds + 1 */
            if numFd <> m.m.fld.0 + 1 then
                call err 'csiNumFd' numFd 'not' m.m.fld.0 '+' 1
            px = 15
            iterate
            end
        eType =  substr(m.m.work, px+1, 1)
        m.o = strip(substr(m.m.work, px+2, 44), 't')
        flag = substr(m.m.work, px, 1)
        /* say 'eType' eType m.o 'flag' c2x(flag) */
        if eType == '0' then do
            if flag \== '00'x & flag \== '40'x then
                call err 'flag' c2x(flag) 'for catalog' m.o
            px = px + 50    /* length of catalog entry  */
            iterate
            end
        else do
            if \ abbrev(x2b(c2x(flag)), '101') then
                call err 'call csi entry flag' x2b(c2x(flag)),
                             'rc' c2d(substr(m.m.work, px+49,1)),
                             'reason' c2d(substr(m.m.work, px+48,1)),
                             'module' substr(m.m.work, px+46, 2),
                             'for entry' m.o,
                             'see qw IDC3009I'
            py = px + 46
            tl = c2d(substr(m.m.work, py, 2))
            pl = py + 4
            pf = py + m.m.fld.0 * 2 + 4
            do fx = 1 to m.m.fld.0
                fi = m.m.fld.fx
                fl = c2d(substr(m.m.work, pl, 2))
                m.o.fi = substr(m.m.work, pf, fl)
                if fi = 'MGMTCLAS' then
                    m.o.fi = substr(m.o.fi, 3, c2d(left(m.o.fi ,2)))
                else if wordPos(fi, 'COMUDSIZ NOBYTTRK') > 0 then
                    m.o.fi = c2d(m.o.fi)
                pf = pf + fl
                pl = pl + 2
                end
            if py + tl <> pf then
                call err 'length mismatch for entry' m.o
            m.m.pos = pf
            return 1
            end
        end
endProcedure csiNext
/*--- if dsn is arcived return 'arcive'
      if dsn is tape return 'tape'
      otherwise return managment class ------------------------------*/
csiArcTape: procedure expose m.
parse arg vo, cl, dt, dsn
        if vo = '' then
            say err '||| no volume for dsn' dsn
        else if vo = 'ARCIVE' then
            res = 'arcive'
        else if cl <> '' then
            res = cl
        else if abbrev(vo, 'SHR') then
            res = 'SHR'
        else
            res = 'tape'
        if   res = 'arcive' then
            return res
      /*if   abbrev(res, 'ar') \= abbrev(dt, '00'x) , */
        if   abbrev(res, 'ta') \= abbrev(c2x(left(dt, 1)), '7') ,
           | (left(res, 1) >= 'A') \= abbrev(dt, '30'x) then
           say '||| mismatch cl' cl 'vo' vo 'dt' c2x(dt) 'dsn' dsn
        return res
endProcedure csiArcTape
/* copy csi end ******************************************************/
/* copy csm begin ******************************************************
    interface to csm,
        it is integrate with adrTso, eg. dsnAlloc , 'RZ3/..' uses csm
***********************************************************************/
adrCsm:
    return adrTso('csmExec' arg(1), arg(2))
endProcedure adrCsm

csmCopy: procedure expose m.
parse arg csnFr, csnTo, retOk
    if dsnGetMbr(csnTo) \= '' ,
         & dsnGetMbr(csnFr) <> dsnGetMbr(csnTo) then
        call err 'member rename' csnFr 'to' csnTo
    parse value csmSysDsn(csnFr) with sysFr '/' dsnFr
    parse value csmSysDsn(csnTo) with sysTo '/' dsnTo
    if sysTo = '*' then do
        old = sysDsn("'"dsnTo"'")
        end
    else if sysFr = '*' then do
        pdsTo = dsnSetMbr(dsnTo)
        al = "SYSTEM("sysTo") DDNAME(COPYTo)",
             "DATASET('"pdsTo"') DISP(SHR)"
        alRes = dsnAlloc(systo'/'pdsTo, ,'COPYTO', '*')
        if datatype(alRes, 'n') then do
                   /* wir müssen es selbst allozieren csmxUtil
                      vergisst management class ||||| */
            say 'could not allocate' al
            say 'trying to create'
            rc = listDsi("'"dsnSetMbr(dsnFr)"' SMSINFO")
            if rc = 0 then
                mv = ''
            else if rc = 4 & sysReason = 19 then do
                mv = 'UNITCNT(30)'
                say 'multi volume' mv
                end
            else if rc \= 0 then
                call err 'listDsi rc' rc 'reason' sysReason,
                                     sysMsgLvl1 sysMsgLvl2
            al = left(al, length(al)-4)'CAT)'
            if right(sysDsSms, 7) == 'LIBRARY' ,
                | abbrev(sysDsSms, 'PDS') then
                 al = al 'DSNTYPE(LIBRARY)'
            if sysUnits = 'TRACK' then
                sysUnits = 'TRACKS'
            al = al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
                "RECFM("sysREcFM") LRECL("SYSLRECL")",
                "blksize("sysBLkSIZE")",
                "SPACE("sysPrimary"," sysSeconds")" sysUnits mv
            call adrCsm "allocate" al
            end
        call tsoFree word(alRes, 2)
        end
    c = "'COPY" sysFr"/''"dsnFr"'' TO" ,
                        sysTo"/''"dsnSetMbr(dsnTo)"'' REPLACE'"
    csmRc = adrTso("exec 'CSM.RZ1.P0.EXEC(CSRXUTIL)'" c , retOk)
    if sysTo = '*' & old <> 'OK' then do
        /* csm normally does not set mgmtclass - avoid delete | */
        call adrTso "ALTER '"dsnTo"' mgmtclas(COM#A091)"
        end
    return csmRc
endProcedure csmCopy

csmAlloc: procedure expose m.
parse arg dsn dd disp rest ':' nn, retRc
    sys = ''
    a2 = ''
    parse value csmSysDsn(dsn) with sys '/' dsn
    if disp = '' then
        disp = 'shr'
    al = "SYSTEM("sys") DDNAME("dd")"
    if dsn <> '' then do
        a2 = "DATASET('"dsnSetMbr(dsn)"')"
        mbr = dsnGetMbr(dsn)
        if mbr <> '' then
            a2 = a2 'MEMBER('mbr')'
        end
    if abbrev(disp, 'SYSOUT(') then
        a2 = a2 disp
    else
        a2 = a2 "DISP("disp")"
    if disp = 'NEW' and nn \== '' then
        a2 = a2 dsnCreateAtts( , nn, 1)
    if retRc <> '' | nn = '' then
        return adrCsm('allocate' al a2 rest, retRc)
    do retry=0 by 1
        alRc = adrCsm('allocate' al a2 rest, '*')
        if alRc = 0 then
            return 0
        if retry > 0 | nn = '' | wordPos(disp, 'OLD SHR') < 1 then
            return err('cmsAlloc rc' alRc 'for' al rest)
        say 'csmAlloc rc' alRc 'for' al a2 rest '...trying to create'
        nn = al 'disp(cat)' dsnCreateAtts(dsn, nn, 1)
        call adrCsm 'allocate' nn
        call adrTso 'free  dd('dd')'
        end
endProcedure csmAlloc

csmSysDsn: procedure expose m.
parse upper arg dsn, withStar
    if pos('/', dsn) < 1 then
        sys = '*'
    else
        parse var dsn sys '/' dsn
    if sys <> '' & sys <> '*' & sys <> sysvar(sysnode) then
        return sys'/'dsn
    else if withStar == 0 then
        return dsn
    else
        return '*/'dsn
endProcedure csmSysDsn

/*--- execute a rexx (under tso) in another rz
           here we use rexx TPSYSIKJ which was written for
           jcl procedure RM@IKJ01
arguments
rz   which rz to run rexx
proc the (remote) procedure library to use
opt  options
cmd  the tso command to execute
----------------------------------------------------------------------*/
/*--- execute a rexx (under tso) in another rz
          directly (without TPSYSIKJ) --------------------------------*/
csmExRx: procedure expose m.
parse arg rz, proc, opt, cmd
    do cx=1 to (length(cmd)-1) % 68
        cmd.cx = substr(cmd, 68*cx-67,68)'-'
        end
    cmd.cx = substr(cmd, 68*cx-67)
    cmd.0 = cx
    timeout = 111
    if 0 then do
        call adrTso  'free ed(rmtSys)'  ,'*'
        call tsoFree tsoDD(rmtsPrt, 'a')
        call adrTso  'free dd(rmtsIn)','*'
        call adrTso  'free dd(sysproc)' ,'*'
        end
    call dsnAlloc rz"/"proc "dd(rmSyPro) rmtDDn(sysProc)"
    call dsnAlloc rz"/tmp.tsin new dd(rmTsIn) rmtDdn(sysTsIn) ::f "
    call tsoOpen rmTsIn, 'w'
    call writeDD rmTsIn, cmd.
    call tsoClose rmtsin
    call dsnAlloc rz"/tmp.prt new dd(rmtsprt) rmtDdn(sysTsPrt)",
                    "::f133"
    call dsnAlloc rz"/tmp.rmt new dd(rmtSys) timeout("timeout")"
say '??? cmsappc start' timeout
    call adrtso "csmappc start pgm(csmexec)" ,
           "parm('select tsocmd(''csmappc allocate plu(*.rmtSys)" ,
                 "tpname(sysikj) dealloc '')')",
           "timeout("timeOut")", '*'
    if rc <> 0 | appc_rc <> 0 then do
        ee = 'csm tso exec rc='rc 'appc_rc='appc_rc
        say ee
        say '  rexx rz='rz 'proc='proc 'opt=opt'
        say '  cmd='cmd
        call csmappcRcSay ggTsoCmd
        call readDD 'rmTsPrt', p.
        call tsoClose rmtsPrt
        say p.0 'tso output lines'
        do px=1 to p.0
            say ' ' strip(p.px, 't')
            end
        call err ee
        end
    call tsoFree rmSyPro rmtsPrt rmtSys rmtsIn
    return
/*--- sys the re and result variables from csmAppcRc -----------------*/
 csmappcRcSay: procedure expose appc_rc appc_reason appc_msg. ,
           appc_state_c appc_state_f
 parse arg cmd
     say 'rc='appc_rc 'reason='appc_reason ,
         'state_c='appc_state_c appc_state_f
     say '  for' cmd
     do ix=1 to appc_msg.0
         say ' ' appc_msg.ix
         end
     return appc_rc
 endProcedure csmappcRcSay
/* copy csm end *******************************************************/
/* copy adrIsp begin *************************************************/
/**********************************************************************
    lmd: catalog read
    call sequence: lmdBegin, lmdNext*, lmdEnd
        mit lmd service (mit save in file und read,
                         weil list zu langsam und listcat abstürzt)
        1. arg (grp)     als group dataset für lmd save
                         und dd name für file read
***********************************************************************/
lmdBegin: procedure expose m.
    parse arg grp, lev
    call adrIsp 'lmdinit listid(lmdId) level('lev')'
    res = adrIsp('lmdlist listid(&lmdId) option(save) group('grp')', 4)
    call adrIsp 'lmdfree listid(&lmdId)'
    if res = 0 then do
        call trc timing() 'lmdlist save' grp lev
        call adrTso 'alloc dd('grp') shr dsn('grp'.datasets)'
        end
    else do
        call trc 'no datasets found' timing() 'lmdlist save' grp lev
        call adrTso 'alloc dd('grp') dummy'
        end
    call tsoOpen grp, 'R'
return /* end lmdBegin */

lmdNext:
    parse arg ggGrp, ggSt, withVolume
    if \ readDD(ggGrp, ggSt) then
         return 0
    if withVolume \== 1 then
        do ggIx=1 to value(ggSt'0')
            x = value(ggSt || ggIx, word(value(ggSt || ggIx), 1))
            end
    return 1
endSubroutin lmdNext

lmdEnd: procedure expose m.
    parse arg grp
    call tsoClose grp
    call adrTso 'free dd('grp')'
return /* end lmdEnd */

lmd: procedure expose m.
    parse arg lev, withVol
    call lmdBegin gg1, lev
    do while lmdNext(gg1, q., withVol)
        do x=1 to q.0
           call out q.x
           end
        end
    call lmdEnd gg1
    return
endProcedure lmd
/**********************************************************************
    member list of a pds:
        call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmm: procedure expose m.
parse arg dsn
    id = lmmBegin(dsn)
    do ix=1 by 1
        m = lmmNext(id)
        if m = '' then
            leave
        call out m
        end
    call lmmEnd id
    return
endProcedure lmm

lmmBegin: procedure expose m.
parse arg dsn
    mbr = dsnGetMbr(dsn)
    pds = dsnSetMbr(dsn, )
    call adrIsp "LMINIT DATAID(lmmId) DATASET('"pds"') ENQ(SHRW)"
    call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
    res = lmmId
    if mbr <> '' then
        res = res 'pattern('mbr')'
    return res
endProcedure lmmBegin

lmmEnd: procedure expose m.
parse arg lmmId opt
    call adrIsp "LMMLIST DATAID("lmmId") option(free)", 8
    call adrIsp "LMCLOSE DATAID("lmmId")"
    call adrIsp "LMFREE DATAID("lmmId")"
    return
endProcedure lmmEnd

lmmNext: procedure expose m.
parse arg lmmId opt
    if adrIsp("LMMLIST DATAID("lmmid")" ,
               "OPTION(LIST) MEMBER(Mbr)" opt, 4 8) = 0 then
        return strip(mbr)
    else
        return ''
endProcedure lmmNext

lmmRm: procedure expose m.
parse arg dsn, mbrs
    mbrs = dsnGetMbr(dsn) mbrs
    pds = dsnSetMbr(dsn, )
    call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
    call adrIsp "LMOPEN DATAID("lmmId") OPTION(OUTPUT) "
    err = ''
    do wx=1 to words(mbrs)
        m1 = word(mbrs, wx)
        rr = adrIsp("lmmDel dataid("lmmId") member("m1")", 0 8 12)
        if rc = 0 then
            say 'removed' m1 'from' pds
        else if rc = 8 then
            say 'not found' m1 'in' pds
        else do
            err = 'error deleting' m1 'in' pds 'rc' rr strip(zerrlm)
            say err
            leave
            end
        end
    call adrIsp "LMCLOSE DATAID("lmmId")"
    call adrIsp "LMFREE DATAID("lmmId")"
    if err <> '' then
        call err err
    return
endProcedure lmmRm
/*--- address ispf with error checking -------------------------------*/
adrIsp:
    parse arg ggIspCmd, ggRet
    address ispexec ggIspCmd
    if rc = 0 then return 0
    else if ggRet == '*' then return rc
    else if wordPOS(rc, ggRet) > 0 then return rc
    else
        call err 'adr ispExec rc' rc 'in' ggIspCmd':' strip(zerrlm)
endSubroutine adrIsp

/*--- address editor with error checking -----------------------------*/
adrEdit:
    parse arg ggEditCmd, ggRet
    address isrEdit ggEditCmd
    if rc = 0 then return 0
    else if ggRet == '*' then return rc
    else if wordPOS(rc, ggRet) > 0 then return rc
    else
        call err 'adr isrEdit rc' rc 'for' ggEditCmd
endSubroutine adrEdit
/* copy adrIsp end   *************************************************/
/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
    parse arg ggTsoCmd, ggRet
    address tso ggTsoCmd
    if rc == 0                     then return 0
    else if ggRet == '*'           then return rc
    else if wordPos(rc, ggRet) > 0 then return rc
    else
        call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */

/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure expose m.
parse upper arg dsn ., addPrefix
    if left(dsn,1) = "'" then
        return strip(dsn, 'b', "'")
    sp = sysvar('SYSPREF')
    if sp == '' then
        sp = userid()
    cx = pos('~', dsn)
    if cx < 1 & addPrefix == 1 then
        return sp'.'dsn
    do while cx \== 0
        le = left(dsn, cx-1)
        ri = substr(dsn, cx+1)
        if right(le, 1) == '.' | left(ri, 1) == '.' then
            dsn = le || sp || ri
        else
            dsn = le || left('.', le \== '') || sp ,
                     || left('.', ri \== '') || ri
        cx = pos('~', spec, cx)
        end
    return dsn
endProcedure dsn2Jcl

/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure expose m.
parse arg dsn .
    return "'"dsn"'"
endProcedure jcl2dsn

dsnSetMbr: procedure expose m.
parse arg dsn, mbr
     bx = pos('(', dsn)
     if bx > 0 then
         dsn = strip(left(dsn, bx-1))
     if mbr <> '' then
         dsn = dsn'('strip(mbr)')'
     return dsn
endProcedure dsnSetMbr

dsnGetMbr: procedure expose m.
parse arg dsn
     lx = pos('(', dsn)
     rx = pos(')', dsn, lx+1)
     if lx < 1 then
         return ''
     else if lx < rx then
         return substr(dsn, lx+1, rx-lx-1)
     else
         return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
    io: read or write a dataset with the following callsequences:
        read:  tsoOpen...'R', readDD*,  tsoClose
        write: tsoOpen...'W', writeDD*, tsoClose

        readDD returns true if data read, false at eof
        do not forget that open is mandatory to write empty file|
***********************************************************************/

/*--- open dd for read (rw='R') or write (rw='W') --------------------*/
tsoOpen: procedure expose m.
parse upper arg dd, rw
    return adrTso('execio' 0 'disk'RW tsoDD(dd, 'o') '(open)')
return /* end tsoOpen */

/*--- close dd -----------------------------------------------------*/
tsoClose: procedure expose m.
    parse upper arg dd
    return adrTso('execio 0 diskW' dd '(finis)')
endProcedure tsoClose

/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt = '' then
        ggCnt = 100
    call adrTso 'execio' ggCnt 'diskR' ggDD '(stem' ggSt')', 2
    return (value(ggSt'0') > 0)
return /* end readDD */

/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    call adrTso 'execio' ggCnt 'diskW' ggDD '(stem' ggSt')'
    return
endSubroutine writeDD

/*--- readNx: read next line, using buffer ---------------------------*/
/*--- begin: allocate dsnSpec and ini ------------------------ -------*/
readNxBegin: procedure expose m.
    parse arg m, m.m.dsn, m.m.dd, m.m.Cnt
    if m.m.dd = '' then
        m.m.dd = 'DDNX*'
    if m.m.cnt = '' then
        m.m.cnt = 1000
    m.m.cx = m.m.cnt + 999
    m.m.buf0x = 0
    m.m.0 = 0
    parse value dsnAlloc('dd('m.m.dd')' m.m.dsn) with m.m.dd m.m.free
    call tsoOpen m.m.dd, 'R'
    return m
endProcedure readDDNxBegin

/*--- return the stem of the next line, or '' at end -----------------*/
readNx: procedure expose m.
parse arg m
    m.m.cx = m.m.cx + 1
    if m.m.cx <= m.m.0 then
        return m'.'m.m.cx
    m.m.buf0x = m.m.buf0x + m.m.0
    if \ readDD(m.m.dd, 'M.'m'.', m.m.cnt)then
        return ''
    m.m.cx = 1
    return m'.1'
endProcedure readDDNx
/*--- return the stem of the curr line, '' at end --------------------*/
readNxCur: procedure expose m.
parse arg m
    if m.m.cx <= m.m.0 then
        return m'.'m.m.cx
    else
        return ''
endProcedure readNxCur

/*--- return the position (line number) of reader
           plus le characters of the current line (default 50) ------*/
readnxPos: procedure expose m.
parse arg m, le
    li = m'.'m.m.cx
    li = strip(m.li, 't')
    if arg() < 2 then
        le = 50
    if le < 1 then
        li = ''
    else if length(li) <= le then
        li = ':' li
    else
        li = ':' left(li, le-3)'...'
    return 'line' (m.m.buf0x + m.m.cx)li
endProcedure readnxPos

/*--- close and deallocate ------------------------------------------*/
readNxEnd: procedure expose m.
parse arg m
    call tsoClose m.m.dd
    call tsoFree m.m.free
    return
endProcedure readDDNxEnd

/*--- standardise a dsn spec
       word1             dsName or -
       word2             dd     or -
       word3             disp   or -
       word4 to first :  attributes in tso format
       after first :     attributes for new allocation
----------------------------------------------------------------------*/
dsnSpec: procedure expose m.
parse upper arg spec
    rr = ''      /* put leading - in separate words */
    do sx=1 while words(rr) < 3 & wx \= ''
        wx = word(spec, sx)
        do while abbrev(wx, '-') & words(rr) < 3
            wx = substr(wx, 2)
            rr = rr '-'
            end
        rr = rr wx
        end
    spec = rr subWord(spec, sx)
    na = ''
    dd = ''
    di = ''
    if left(spec, 1) = '&' then /* external spec is handled ok */
        spec = strip(substr(spec, 2))
    do wx=1 by 1
        w = word(spec, wx)
        if w = '' | abbrev(w, '.') | abbrev(w, ':') then
            leave
        else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
            di = w
        else if w = 'CATALOG' then
            di = di w
        else if abbrev(w, 'DD(') then
            dd = substr(w, 4, length(w)-4)
        else if abbrev(w, 'DSN(') then
            na = strip(substr(w, 5, length(w)-5))
        else if na == '' then
            na = dsn2jcl(w)
        else if pos('(', w) > 0 then
            leave
        else if dd == '' then
            dd = w
        else if di == '' then
            di = w
        else
            leave
        end
    if na == '' then
        na = '-'
    else if abbrev(na, "'") then
        na = substr(na, 2, length(na)-2)
    if dd == '' then dd = '-'
    if di == '' then di = '-'
    re = subword(spec, wx)
    if abbrev(re, '.') then
        re = substr(re, 2)
    return na dd di re
endProcedure dsnSpec

/*--- alloc a dsn with dsnAlloc
          if the dsn is inuse wait and retry
          until either the allocation is successfull
          or the timeout occurs --------------------------------------*/
dsnAllocWait: procedure expose m.
parse upper arg spec, pDi, pDD, timeOut
    x = max(1, arg() - 1)
    do rt=0
        m.adrTsoAl.1 = ''
        m.adrTsoAl.2 = ''
        m.adrTsoAl.3 = ''
        call outtrap m.adrTsoAl.
        res = dsnAlloc(spec, pDi, pDD, '*')
        call outtrap off
        if \ datatype(res, 'n') then
            return res
        msg = m.adrTsoAl.1'\n'm.adrTsoAl.2'\n'm.adrTsoAl.3
        if rt > timeOut & timeOut \== '' then
            return err('timeout allocating' spec time() '\n'msg)
        if pos('DATA SET IS ALLOCATED TO ANOTHER', msg) < 1 then
            return err('allocating' spec'\n'msg)
        say time() 'sleep and retry alloc' spec
        call sleep 1, 0
        end
endProcedure dsnAllocWait

/*--- alloc a dsn or a dd
          spec '-'<ddName>
               datasetName? disposition? '.'? attributes? (':' newAtts)?
          disp default disposition
          dd   default dd name
          retRc   erlaubte ReturnCodes (leer = 0)
          returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, pDi, pDD, retRc
    parse value dsnSpec(spec) with na dd di rest
    if na = '-' then
        m.dsnAlloc.dsn = ''
    else
        m.dsnAlloc.dsn = na
    if dd == '-' & pDD \== '' then
        dd = pDD
    if dd == '-' then
        dd = 'DD*'
    dd = tsoDD(dd, 'a')
    if na == '-' & di == '-' & rest = '' then
        return dd
    if di = '-' then
        if pDi == '' then
            di = 'SHR'
        else
            di = pDi
    if pos('(', na) < 1 then
        nop
    else if di = 'MOD' then
        call err 'disp mod for' na
    else
        di = 'SHR'
    if pos('/', na) > 0 then
        rx = csmAlloc(na dd di rest, retRc)
    else
        rx = tsoAlloc(na dd di rest, retRc)
    if rx = 0 then
        return dd dd
    else
        return rx
endProcedure dsnAlloc

/*--- find a free dd with prefix dd ----------------------------------*/
tsoDD: procedure expose m.
parse arg dd, f
    if symbol('m.tso.ddAlloc') \== 'VAR' then do
        call errIni
        m.tso.ddAlloc = ''
        m.tso.ddOpen  = ''
        end
    if m.err.ispf then
        address ispExec 'vget wshTsoDD shared'
    else
        wshTsoDD = m.tso.ddAlloc
    if f == '-' then do
        ax = wordPos(dd, m.tso.ddAlloc)
        if ax > 0 then
            m.tso.ddAlloc = delWord(m.tso.ddAlloc, ax, 1)
        ox = wordPos(dd, m.tso.ddOpen)
        if ox > 0 then
            m.tso.ddOpen  = delWord(m.tso.ddOpen , ox, 1)
        if ax < 1 & ox < 1 then
            call err 'tsoDD dd' dd 'not used' m.tso.ddAlloc m.tso.ddOpen
        sx = wordPos(dd, wshTsoDD)
        if sx > 0 then
            wshTsoDD  = delWord(wshTsoDD , sx, 1)
        end
    else if f == 'o' then do
        if wordPos(dd, m.tso.ddOpen m.tso.ddAlloc) < 1 then
            m.tso.ddOpen = strip(m.tso.ddOpen dd)
        end
    else if f <> 'a' then do
        call err 'tsoDD bad fun' f
        end
    else do
        if right(dd, 1) = '*' then do
            dd = left(dd, length(dd)-1) || m.err.screen
            cx = lastPos(' 'dd, ' 'm.tso.ddAlloc)
            if cx > 0 then do
                old = word(substr(m.tso.ddAlloc, cx), 1)
                if old = dd then
                    dd = dd'1'
                else if datatype(substr(old, length(dd)+1), 'n') then
                    dd = dd || (substr(old, length(dd)+1) + 1)
                else
                    call err 'tsoDD old' old 'suffix not numeric dd' dd
                end
            end
        if wordPos(dd, m.tso.ddAlloc) < 1 then
            m.tso.ddAlloc = strip(m.tso.ddAlloc dd)
        if wordPos(dd, wshTsoDD) < 1 then
            wshTsoDD = strip(wshTsoDD dd)
        end
    if m.err.ispf then
        address ispExec 'vPut wshTsoDD shared'
    return dd
endProcedure tsoDD

tsoAlloc: procedure expose m.
parse arg na dd disp rest ':' nn, retRc
    c = 'alloc dd('dd')' disp
    if na \== '-' then
        c = c "DSN('"na"')"
    else if disp = 'NEW' and nn \== '' then
        c = c dsnCreateAtts(,nn)
    call outtrap m.adrTsoAl.
    alRc = adrTso(c rest, '*')
    call outtrap off
    if alRc =  0 then
        return 0
    if nn \= '' & wordPos(disp, 'OLD SHR') > 0 ,
          & sysDsn("'"m.dsnAlloc.dsn"'") == 'DATASET NOT FOUND' then do
        say 'tsoAlloc creating' c rest ':'nn
        call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(na, nn)
        call adrTso 'free  dd('dd')'
        return tsoAlloc(na dd disp rest, retRc)
        end
    say 'rc='alRc 'for' c rest
    call saySt adrTsoal
    if retRc = '*' | wordPos(alRc, retRc) > 0 then
        return alRc
    call err 'tsoAlloc rc' alRc 'for' c rest
endProcedure tsoAlloc

tsoAtts: procedure expose m.
parse arg dsn
    rc = listDsi("'"dsn"' SMSINFO")
    if rc = 0 then
        mv = ''
    else if rc = 4 & sysReason = 19 then do
        mv = 'UNITCNT(30)'
        say 'multi volume' mv
        end
    else if rc ^= 0 then
        call err 'listDsi rc' rc 'reason' sysReason,
                             sysMsgLvl1 sysMsgLvl2
    al = 'CAT'
    al = ''
    if right(sysDsSms, 7) == 'LIBRARY' ,
        | abbrev(sysDsSms, 'PDS') then
         al = al 'DSNTYPE(LIBRARY)'
    if sysUnits = 'TRACK' then
        sysUnits = 'TRACKS'
    return al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
        "DATACLAS("sysDataClass")" ,
        "RECFM("translate('1 2 3', ' 'sysREcFM, ' 123')")",
        "LRECL("SYSLRECL")",
        "SPACE("sysPrimary"," sysSeconds")" sysUnits mv
    /*  "blksize("sysBLkSIZE")" removed 3.4.13: let sms do the magic */
endProcedure tsoAtts

tsoFree: procedure expose m.
parse arg ddList, ggRet
    do dx=1 to words(ddList)
        dd = word(ddList, dx)
        call adrTso 'free dd('dd')', ggRet
        call tsoDD dd, '-'
        end
    return
endProcedure tsoFree

tsoFreeAll: procedure expose m.
    all = m.tso.ddAlloc m.tso.ddOpen
    do ax = 1 to words(all)
        call adrTso 'execio 0 diskW' word(all, ax) '(finis)', '*'
        end
    m.tso.ddOpen = ''
    call tsoFree m.tso.ddAlloc, '*'
    return
endProcedure tsoFreeAll

dsnCreateAtts: procedure expose m.
parse arg dsn, atts, forCsm
    forCsm = forCsm == 1
    aU = ' 'translate(atts)
    res = ''
    if dsn \== '' then
        res = "dataset('"dsnSetMbr(dsn)"')"
    if abbrev(atts, '~') then
        return res tsoAtts(substr(atts, 2))
    if abbrev(atts, ':') then do
        parse var atts a1 atts
        rl = substr(a1, 3)
        if abbrev(a1, ':F') then do
            if rl = '' then
                rl = 80
            recfm='f b'
            end
        else do
            if rl = '' then
                rl = 32756
            recfm = substr(a1, 2, 1) 'b'
            end
        res =  res "recfm("space(recfm, 1-forCsm)") lrecl("rl")"
        end
    if pos('(', dsn) > 0 & pos(' DSNTYPE(', aU) < 1 ,
                         & pos(' DSORG(',   aU) < 1 then
        res = res 'dsntype(library) dsorg(po)'
    if pos(' MGMTCLAS(', aU) < 1 then
        res = res 'mgmtclas(COM#A091)'
    if pos(' SPACE(', aU) < 1 then
        res = res 'space(10, 1000) cyl' || copies('inder', forCsm)
    return res atts
endProcedure dsnCreateAtts
/*--- check if a dataset is archive ------------------------------------
          returns 'ok'                    if dataset on disk
                  'not'                   if dataset is not catalogued
                  'arc'                   if dataset archived
                  listDsi errorMsg        otherwise ------------------*/
dsnArc: procedure expose m.
parse upper arg dsn
    lc = listDsi("'"strip(dsn)"' noRecall")
    if lc = 0 then
        return 'ok'
    else if lc=4 & sysReason = 19 then  /* multiple volumes */
        return 'ok'
    else if lc=16 & sysReason = 5 then
        return 'notCat'
    else if lc=16 & sysReason = 9 then
        return 'arc'
    else
        return 'listDsi cc='lc', sysReason='sysReason ,
                          'm2='sysMsgLvl2', m1='sysMsgLvl1
endProcedure dsnArc
/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
    ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
    call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
    call tsoFree word(ggAlloc, 2)
    return
endSubroutine readDsn

/*--- write the dataset specified in ggDsnSpec from stem ggSt
          write ggCnt records if not empty otherwise ggst0
          if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
    call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
            '(stem' ggSt 'open finis)'
    call tsoFree word(ggAlloc, 2)
    if ggSay == 1 | m.debug == 1 then
       say ggCnt 'records written to' ggDsnSpec
    return
endSubroutine writeDsn

copyDSN: procedure expose m.
parse arg frSpec, toSpec, ggSay
    parse value dsnAlloc(frSpec, 'SHR', 'FRDD') with frDD frFr
    parse value dsnAlloc(toSpec, 'OLD', 'TODD') with toDD toFr
    call tsoOpen frDD, 'R'
    call tsoOpen toDD, 'W'
    cnt = 0
    do while readDD(frDD, r.)
        call writeDD toDD, r.
        cnt = cnt + r.0
        end
    call tsoClose frDD
    call tsoClose toDD
    call tsoFree frFr toFr
    if ggSay == 1 | m.debug == 1 then
       say cnt 'records copied from' frSpec 'to' to toSpec
    return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
/* copy csv begin *****************************************************/
csvIni: procedure expose m.
    if m.csv.ini == 1 then
        return
    m.csv.ini = 1
    call jIni
    call classNew "n CsvRdr u JRWO, f RDR r", "m",
        , "jReset m.m.rdr = arg",
        , "jOpen call csvRdrOpen m, opt",
        , "jClose call jClose m.m.rdr; call oMutatName m, 'CsvRdr'"
    call classNew "n CsvRdrR u CsvRdr", "m",
        , "jReadO return csvRdrReadO(m)"
    call classNew "n CsvWrt u JRW, f RDR r", "m",
        , "jReset m.m.rdr = arg",
        , "jOpen call csvWrtOpen m, opt",
        , "jClose call jClose m.m.rdr; call oMutatName m, 'CsvWrt'"
    call classNew "n CsvWrtR u CsvWrt", "m",
        , "jRead return csvWrtRead(m, var)"
    return
endProcedure csvIni

/*--- create a new csvRdr --------------------------------------------*/
csvRdr: procedure expose m.
parse arg rdr
    return jReset(oNew('CsvRdr'), rdr)
endProcedure csvRdr

/*--- open csvRdr: read first line and create dataClass --------------*/
csvRdrOpen: procedure expose m.
parse arg m
    call jOpen m.m.rdr, '<'
    if jRead(m.m.rdr, m'.LINE') then do
        ff = 'f' repAll(m.m.line, ',', ' v, f ') 'v'
        m.m.class = classNew("n* CsvF u" ff)
        end
    call oMutatName m, 'CsvRdrR'
    return
endProcedure csvRdrOpen

/*--- read next line and return derived object -----------------------*/
csvRdrReadO: procedure expose m.
parse arg m
    do until m.m.line <> ''

        if \ jRead(m.m.rdr, m'.LINE') then
            return ''
        end
    var = oNew(m.m.class)
    ff = oClaMet(m.m.class, 'oFlds')
    s = m'.SCAN'
    call scanSrc s, m.m.line
    do fx=1
        f1 = substr(m.ff.fx, 2)
        if scanString(s, '"') then
            m.var.f1 = m.s.val
        else do
            call scanUntil s, ','
            m.var.f1 = m.s.tok
            end
        if scanEnd(s) then
            leave
        if \ scanLit(s, ',') then
            call scanErr s, ',' expected
        end
    if fx <> m.ff.0 then
        call scanerr s, 'csv cla' m.ff.0 'fields but' cx 'in line'
    return var
endProcedure csvRdrReadO

/*--- create a new csvRdr --------------------------------------------*/
csvWrt: procedure expose m.
parse arg rdr
    return jReset(oNew('CsvWrt'), rdr)
endProcedure csvWrt

/*--- open csvRdr: read first line and create dataClass --------------*/
csvWrtOpen: procedure expose m.
parse arg m
    call jOpen m.m.rdr, '<'
    m.m.class = ''
    m.m.o1    = ''
    call oMutatName m, 'CsvWrtR'
    return
endProcedure csvWrtOpen

/*--- read next line and return derived object -----------------------*/
csvWrtRead: procedure expose m.
parse arg m, var
    if m.m.o1 == '' then
        i1 = jReadO(m.m.rdr)
    else do
        i1 = m.m.o1
        m.m.o1 = ''
        end
    if i1 == '' then
        return 0
    if m.m.class == '' then do
        m.m.class = objClass(i1)
        m.m.o1 = i1
        t = ''
        ff = oFlds(i1)
        do fx=1 to m.ff.0
            t = t','substr(m.ff.fx, 2)
            end
        m.var = substr(t, 2)
        return 1
        end
    else do
        t = ''
        ff = oFlds(i1)
        do fx=1 to m.ff.0
            f1 = i1 || m.ff.fx
            val = m.f1
            if pos(',', val) > 0 | pos('"', val) > 0 then
                t = t','quote(val, '"')
            else
                t = t','val
            end
        m.var = substr(t, 2)
        return 1
        end
endProcedure csvWrtRead

/* copy csv end   *****************************************************/
/* copy j begin *******************************************************
    the j framework
         jReset
         jOpen
         jClose
         jRead
         jWrite
***********************************************************************/
jRead: procedure expose m.
parse arg m, var
    met = objMet(m, 'jRead')
    if m.m.jReading then
        interpret met
    else
        return err('jRead('m',' var') but not opened r')
endProcedure jRead

jReadO: procedure expose m.
parse arg m
if arg() > 1 then call err '???  old interface'
    met = objMet(m, 'jReadO')
    if m.m.jReading then
        interpret met
    else
        return err('jReadO('m',' var') but not opened r')
endProcedure jReadO

jWrite: procedure expose m.
parse arg m, line
    met = objMet(m, 'jWrite')
    if \ m.m.jWriting then
        return err('jWrite('m',' line') but not opened w')
    interpret met
    return
endProcedure jWrite

jWriteO: procedure expose m.
parse arg m, var
    met = objMet(m, 'jWriteO')
    if \ m.m.jWriting then
        return err('jWriteO('m',' var') but not opened w')
    interpret met
    return
endProcedure jWriteO

jWriteAll: procedure expose m.
parse arg m, rdr
    rdr = o2file(rdr)
    met = objMet(m, 'jWriteAll')
    if \ m.m.jWriting then
        return err('jWriteAll('m',' rdr') but not opened w')
    interpret met
    return
endProcedure jWriteAll

jWriteNow: procedure expose m.
parse arg m, rdr
    rdr = o2file(rdr)
    interpret objMet(m, 'jWriteNow')
    return
endProcedure jWriteNow

jCat: procedure expose m.
parse arg opt m
    if m = '' then do
        m = opt
        opt = m.j.cWri
        end
    call jOpen m, opt
    do ax=2 to arg()
        call jWriteAll m, arg(ax)
        end
    call jClose m
    return m
endProcedure jCat

jWriteNowImpl: procedure expose m.
parse arg m, rdr
    call jOpen rdr, m.j.cRead
    do while jRead(rdr, line)
        call jWrite m, m.line
        end
    call jClose rdr
    return
endProcedure jWriteNow

jWriteNowImplO: procedure expose m.
parse arg m, rdr
    call jOpen rdr, m.j.cRead
    do while assNN('li', jReadO(rdr))
        call jWriteO m, li
        end
    call jClose rdr
    return
endProcedure jWriteNow

/*--- reset JRW: fail if open, initialise ---------------------------*/
jReset: procedure expose m.
parse arg m, arg, arg2, arg3
    if m.m.jReading == 1 | m.m.jWriting == 1 then
        return err('still open jReset('m',' arg2')')
    m.m.jReading = 0
    m.m.jWriting = 0
    m.m.jUsers = 0
    interpret objMet(m, 'jReset')
    return m
endProcedure jReset

jOpen: procedure expose m.
parse arg m, opt
    met = objMet(m, 'jOpen')
    oUsers = m.m.jUsers
    if opt = m.j.cRead then do
        if m.m.jReading then
            nop
         else if m.m.jWriting then
            return err('already opened for writing jOpen('m',' opt')')
        else do
            interpret met
            m.m.jReading = 1
            end
        end
    else if \ abbrev('>>', opt, 1) then do
        return err('bad option' opt 'in jOpen('m',' opt')')
        end
    else do
        if m.m.jWriting then
            nop
         else if m.m.jReading then
            return err('already opened for reading jOpen('m',' opt')')
        else do
            interpret met
            m.m.jWriting = 1
            end
        end
    m.m.jUsers = oUsers + 1
    return m
endProcedure jOpen

jClose: procedure expose m.
parse arg m
    met = objMet(m, 'jClose')
    oUsers = m.m.jUsers
    if oUsers = 1 then do
        interpret met
        m.m.jReading = 0
        m.m.jWriting = 0
        end
    else if oUsers < 1 then
        call err 'jClose' m 'but already closed'
    m.m.jUsers = oUsers - 1
    return m
endProcedure jClose

/*--- cat the lines of the file together, with mid between lines,
                fail if not all lines are strings -------------------*/
jCatLines: procedure expose m.
parse arg m, fmt
    if abbrev(fmt, '-sql') then
        return jCatSql(m, substr(fmt, 5))
    else
        fmt = '%s%qn %s%qe%q^'fmt
    call jOpen m, m.j.cRead
    if \ jRead(m, line) then do
        call jClose m
        return ''
        end
    res = f(fmt, m.line)
    do while jRead(m, line)
        res = res || f(fmt'%Qn', m.line)
        end
    call jClose m
    return res || f(fmt'%Qe')
endProcedure jCatLines

/*--- cat the line of a file, using comments
               fixline (with token wrapping) or separate lines -------*/
jCatSql: procedure expose m.
parse arg m, fLen
    call jCatSqlReset m'.JCATSQL', , jOpen(m, '<'), fLen
    res = jCatSqlNext(m'.JCATSQL')
    call jClose m
    return res
endProcedure jCatSql

jCatSqlReset: procedure expose m.
parse arg m, aSrc, m.m.rdr, m.m.fLen
    call jCatSqlNL m, aSrc
    return m
endProcedure jCatSqlReset

jCatSqlNL: procedure expose m.
parse arg m
    if m.m.rdr \== '' then
      if jRead(m.m.rdr, m'.SRC') then do
        if m.m.fLen \== '' then
            m.m.src = left(m.m.src, m.m.fLen)
        else if m.m.src == '' then
            m.m.src = ' '
        else if substr(m.m.src, length(m.m.src), 1) \== ' ' then
            m.m.src = m.m.src' '
        m.m.pos = 1
        return 1
        end
    m.m.pos = length(m.m.src)+1
    return 0
endProcedure jCatSqlNl

jCatSqlNext: procedure expose m.
parse arg m, stop
    sta = 'tt'
    res = ''
    do forever
        do while scanSBEnd(m)
            if \ jCatSqlNl(m) then
                return strip(res)
            end
        bx = m.m.pos
        sta = scanSql2Stop(m, sta, stop)
        s1 = left(sta, 1)
        if pos(s1, stop) > 0 then do
            if res <> '' then
                return strip(res)
            end
        else if s1 == '-' | s1 == '/' then
            res = res' '
        else if pos('/', sta) = 0 then
            res = res || substr(m.m.src, bx, m.m.pos - bx)
        end
/*-------- ?????????????????????
jCatSqlNext?: procedure expose m.
parse arg m, stop
    res = ''
    bx = m.m.pos
    do forever
        call scanUntil m, '"''-/'stop
        if scanSBEnd(m) then do
            res = res || substr(m.m.src, bx)
            bx = 0
            end
        else if substr(m.m.src, m.m.pos, 2) = '--' then do
            res = res || substr(m.m.src, bx, m.m.pos-bx)' '
            bx = 0
            end
        else if substr(m.m.src, m.m.pos, 2) = '/*' then do
            res = res || substr(m.m.src, bx, m.m.pos-bx)' '
            do forever
                px = pos('*/', m.m.src, m.m.pos)
                if px > 0 then
                    leave
                if \ jCatSqlNL(m) then
                    return res
                end
            bx = px+2
            m.m.pos = bx
            end
        else if scanLit(m, "'", '"') then do
            c1 = m.m.tok
            do while \ scanStrEnd(m, c1)
                res = res || substr(m.m.src, bx)
                if m.m.fLen \== '' then
                    if jCatSqlNl(m) then do
                        bx = m.m.pos
                        iterate
                        end
                call err 'unclosed' c1 'string:' m.m.src
                end
            end
        else if pos(substr(m.m.src, m.m.pos, 1), stop) > 0 then do
            res = strip(res||substr(m.m.src, bx, m.m.pos-bx), 't')
            call scanChar m, 1
            if res <> '' then
                return strip(res)
            bx = m.m.pos
            end
        else if \ scanLit(m, '-', '/') then do
            call err 'bad char at' substr(m.m.src, m.m.pos) 'in' m.m.src
            end
        if bx = 0 then
            if jCatSqlNl(m) then
                bx = m.m.pos
            else
                return strip(res)
        end
endProcedure jCatSqlNext
??????????????*/
jIni: procedure expose m.
    if m.j.ini == 1 then
        return
    m.j.ini = 1
    m.j.cRead = '<'
    m.j.cWri = '>'
    m.j.cApp = '>>'
    call classIni
    am = "call err 'call of abstract method"
    c1 = classNew('n JRW u ORun, f JREADING v, f JWRITING v', 'm',
        , "new return jReset("m.class.basicNew", arg, arg2, arg3)",
        , "jRead"   am "jRead('m',' var')'" ,
        , "jReadO if \ jRead(m, 'J.GGVAR') then return '';",
                "return s2o(m.j.ggVar)" ,
        , "jWrite" am "jWrite('m',' line')'" ,
        , "jWriteO call jWrite(m, o2string(var))" ,
        , "jWriteAll call jWriteNowImpl m, rdr",
        , "jWriteNow call jWriteNowImpl m, rdr",
        , "jReset",
        , "jOpen" am" jOpen('m',' opt')'" ,
        , "jClose" ,
        , "oRun call pipeWriteAll m",
        , "o2String return jCatLines(m, fmt)",
        , "o2File return m")
    m.class.forceDown.c1 = c1'#new'
    c2 = classNew('n JRWDeleg u JRW', 'm',
        , "new return jReset("m.class.basicNew", arg)",
        , "jRead return jRead(m.m.deleg, var)" ,
        , "jReadO return jReadO(m.m.deleg)" ,
        , "jWrite  call jWrite(m.m.deleg, line)" ,
        , "jWriteO call jWrite(m.m.deleg, var)" ,
        , "jWriteAll call jWriteAll m.m.deleg, rdr",
        , "jWriteNow call jWriteNow m.m.deleg, rdr",
        , "jReset    if arg \== '' then m.m.deleg = arg;",
                                   "else call jReset m.m.deleg;",
        , "jOpen     call jOpen m.m.deleg,' opt; return m" ,
        , "jClose    call jClose m.m.deleg; return m" )
    m.class.forceDown.c2 = c2'#new'
    call classNew 'n JRWO u JRW', 'm',
        , "jRead res = jReadO(m); if res == '' then return 0;" ,
                "m.var = o2string(res); return 1" ,
        , "jReadO"   am "jReadO('m')'" ,
        , "jWrite  call jWriteO(m, s2o(var))" ,
        , "jWriteO" am "jWriteO('m',' line')'",
        , "jWriteAll call jWriteNowImplO m, rdr",
        , "jWriteNow call jWriteNowImplO m, rdr",

    am = "call err 'call errObject"
    call classNew 'n JRWErr u JRW', 'm',
        , "jWriteAll" er "jWriteAll 'm', rdr'",
        , "jWriteNow" er "jWriteNow 'm', 'rdr'",
        , "jClose" er "jClose 'm'"
    call classNew 'n JSay u JRW', 'm',
        , "jWrite say line" ,
        , "jWriteO call classOut , var, 'outO: '",
        , "jOpen if \ abbrev(opt, m.j.cWri) then",
            "call err 'can only write JSay.jOpen('m',' opt')';" ,
            "else m.m.jWriting = 1"
    call classNew 'n JStem u JSay', 'm',
        , "jReset m.m.stem = arg;",
               "if \ dataType(m.arg.0, 'n') then m.arg.0 = 0" ,
        , "jWrite call mAdd m.m.stem, line"
    call classNew 'n JRWEof u JRW', 'm',
        , "jRead drop m.var; return 0",
        , "jOpen if pos('>', opt) > 0 then",
            "call err 'can only read JRWEof.jOpen('m',' opt')';" ,
            "else m.m.jReading = 1"
    m.j.in = jOpen(oNew('JRWEof'), m.j.cRead)
    m.j.errRead  = "return err('jRead('m',' var') but not opened r')"
    m.j.errReadO = "return err('jReadO('m',' var') but not opened r')"
    m.j.errWrite = "return err('jWrite('m',' line') but not opened w')"
    m.j.errWriteO= "return err('jWriteO('m',' var') but not opened w')"
    call classNew "n JBuf u JRWO, f BUF s r", "m",
        , "jOpen call jBufOpen m, opt",
        , "jClose call oMutatName m, 'JBuf'",
        , "jReset call jBufReset m, arg",
        , "jRead" m.j.errRead ,
        , "jReadO" m.j.errReadO ,
        , "jWrite" m.j.errWrite ,
        , "jWriteO" m.j.errWriteO
    call classNew "n JBufOR u JBuf", "m",
        , "jRead return jBufORead(m, var)",
        , "jReadO return jBufOReadO(m)"
    call classNew "n JBufSR u JBuf", "m",
        , "jRead return jBufSRead(m, var)",
        , "jReadO return jBufSReadO(m)"
    call classNew "n JBufOW u JBuf", "m",
        , "jWrite call jBufOWrite m, line",
        , "jWriteO call jBufOWriteO m, var"
    call classNew "n JBufSW u JBuf", "m",
        , "jWrite call jBufSWrite m, line",
        , "jWriteO call jBufSWriteO m, var"
    call classNew "n JBufTxt u JBuf, f MAXL v ", "m",
        , "jReset call jBufReset m, arg; m.m.maxl = 80",
        , "jWriteO call jBufWrite m, o2Text(var, m.m.maxl)"
    return
endProcedure jIni

/*--- return a JRW from rdr or in ------------------------------------*/
j2Rdr: procedure expose m.
    parse arg rdr
    if oStrOrObj(rdr, m.j.in) then
        return jBuf(ggStr)
    else
        return o2file(ggObj)
endProcedure j2Rdr
      /* jstr is part of out interface --> inp2str */
inp2str: procedure expose m.
    parse arg rdr, fmt
    if oStrOrObj(rdr, m.j.in) then
        return ggStr
    else
        return o2String(ggObj, fmt)
endProcedure inp2str

j2Buf: procedure expose m.
    parse arg rdr
    if oStrOrObj(rdr, m.j.in) then
        return jBuf(ggStr)
    if oClaInheritsOf(ggCla, 'JBuf') & m.ggObj.jUsers < 1 then
        return ggObj
    b = jOpen(jBuf(), m.j.cWri)
    call jWriteNow b, o2File(ggObj)
    return jClose(b)
endProcedure j2Buf

in: procedure expose m.
parse arg arg
    return jRead(m.j.in, arg)
endProcedure in

inO: procedure expose m.
    if arg() > 0 then call err '??? old interface'
    return jReadO(m.j.in)
endProcedure in

out: procedure expose m.
parse arg line
    call jWrite m.j.out, line
    return 0
endProcedure out

outO: procedure expose m.
parse arg arg
    call jWriteO m.j.out, arg
    return
endProcedure outO

JRWDeleg: procedure expose m.
parse arg arg
    return oNew('JRWDeleg', arg)
endProcedure JRWDeleg

/*--- jBuf: buffer read or write (supports datataypes) ---------------*/
jBuf: procedure expose m.
    m = oNew('JBuf') /* calls jBufReset */
    do ax=1 to arg()
        m.m.buf.ax = arg(ax)
        end
    m.m.buf.0 = ax-1
    m.m.allS = 1
    return m
endProcedure jBuf
/*--- jBuf: buffer read or write (supports datataypes) ---------------*/
jBufTxt: procedure expose m.
    m = oNew('JBufTxt') /* calls jBufReset */
    do ax=1 to arg()
        m.m.buf.ax = arg(ax)
        end
    m.m.buf.0 = ax-1
    m.m.allS = 1
    return m
endProcedure jBufTxt

jBufReset: procedure expose m.
parse arg m
    m.m.stem = m'.BUF'
    do ax=1 to arg() - 1
        m.m.buf.ax = arg(ax+1)
        end
    m.m.buf.0 = ax-1
    m.m.allS = 1
    return m
endProcedure jBufReset

jBufOpen: procedure expose m.
parse arg m, opt
    if opt == m.j.cRead then do
        m.m.readIx = 0
        if m.m.allS then
            call oMutatName m, 'JBufSR'
        else
            call oMutatName m, 'JBufOR'
        return m
        end
    if opt == m.j.cWri then do
        m.m.buf.0 = 0
        m.m.allS = 1
        end
    else if opt \== m.j.cApp then
         call err 'jBufOpen('m',' opt') with bad opt'
    if m.m.allS then
        call oMutatName m, 'JBufSW'
    else
        call oMutatName m, 'JBufOW'
    return m
endProcedure jBufOpen

jBufOWrite: procedure expose m.
parse arg m, line
    call mAdd m'.BUF', s2o(line)
    return
endProcedure jBufOWrite
jBufSWrite: procedure expose m.
parse arg m, line
    call mAdd m'.BUF', line
    return
endProcedure jBufWrite

jBufWriteStem: procedure expose m.
parse arg m, st
    ax = m.m.buf.0
    if m.m.allS then do
        do sx=1 to m.st.0
            ax = ax + 1
            m.m.buf.ax = m.st.sx
            end
        end
    else do
        do sx=1 to m.st.0
            ax = ax + 1
            m.m.buf.ax = o2String(m.st.sx)
            end
       end
       m.m.buf.0 = ax
    return m
endProcedure jBufWrite

jBufOWriteO: procedure expose m.
parse arg m, ref
    call mAdd m'.BUF', ref
    return
endProcedure jBufOWriteO

jBufSWriteO: procedure expose m.
parse arg m, ref
    cl = objClass(ref)
    if cl = m.class.classV then do
        call mAdd m'.BUF', m.ref
        return
        end
    if cl == m.class.classW then do
        call mAdd m'.BUF', substr(ref, 2)
        return
        end
    do ax=1 to m.m.buf.0
        m.m.buf.ax = s2o(m.m.buf.ax)
        end
    m.m.allS = 0
    call oMutatName m, 'JBufOW'
    call mAdd m'.BUF', ref
    return
endProcedure jBufWriteO

jBufOReadO: procedure expose m.
parse arg m
    nx = m.m.readIx + 1
    if nx > m.m.buf.0 then
        return ''
    m.m.readIx = nx
    return m.m.buf.nx
endProcedure jBufOReadO

jBufSReadO: procedure expose m.
parse arg m
    nx = m.m.readIx + 1
    if nx > m.m.buf.0 then
        return ''
    m.m.readIx = nx
    return s2o(m.m.buf.nx)
endProcedure jBufSReadO

jBufORead: procedure expose m.
parse arg m, var
    nx = m.m.readIx + 1
    if nx > m.m.buf.0 then
        return 0
    m.m.readIx = nx
    m.var = o2String(m'.BUF.'nx)
    return 1
endProcedure jBufORead

jBufSRead: procedure expose m.
parse arg m, var
    nx = m.m.readIx + 1
    if nx > m.m.buf.0 then
        return 0
    m.m.readIx = nx
    m.var = m.m.buf.nx
    return 1
endProcedure jBufRead

jBufTxtWriteO: procedure expose m.
parse arg m, ref
    if m.m.allS \== 1 then
        call err '1 \== allS' m.m.allS 'in jBufTxtWriteO('m',' ref')'
    cl = objClass(ref, '?')
    if cl = m.class.classV then
        call mAdd m'.BUF', m.ref
    else if cl == m.class.classW then
        call mAdd m'.BUF', substr(ref, 2)
    else if ref == '' then
        call mAdd m'.BUF', '@ null object'
    else if cl == '?' then
        call mAdd m'.BUF', '@'ref 'class=???'
    else do
        l = '@'ref 'class='className(cl)
        ff = oFlds(ref)
        do fx=1 to m.ff.0 while length(l) < m.m.maxl + 3
            if m.ff.fx == '' then
                 l = l', .='m.ref
            else do
                 f1 = substr(m.ff.fx, 2)
                 l = l',' f1'='m.ref.f1
                 end
            end
        if length(l) > m.m.maxl then
            l = left(l, m.m.maxl-3)'...'
        call mAdd m'.BUF', l
        end
    return
endProcedure jBufTxtWriteO

/* copy j end *********************************************************/
/* copy o begin ******************************************************
    an object is register for a class in o2c
    a class has a list of parents in cParent
    a class has a methodTable cMet with lazy initialization
        if the parent is class OLazyMet, a methof found there is
             a method generator
        otherwise an existing method is simply copied
***********************************************************************/
oIni: procedure expose m.
    if m.o.ini == 1 then
        return
    m.o.ini = 1
    call mIni
    m.o.escW = '!'
    m.o.lazyGen = 'OLazyMetGen' /* lazy method generator */
    call oAddCla m.o.lazyGen
    return
endProcedure oIni

/*--- return whether cl is a currently defined class ----------------*/
oIsCla: procedure expose m.
parse arg cl
    return symbol('m.o.cParent.cl') == 'VAR'
endProcedure oIsCla

/*--- add class cl with the given parents ---------------------------*/
oAddCla: procedure expose m.
parse arg cl, parents
    if verifId(cl, '.') > 0 | pos('.', cl) <> lastPos('.', cl) then
        call err 'bad class name' cl 'in oAddCla('cl',' parents')'
    if oIsCla(cl) then
        call err 'duplicate class' cl 'in oAddCla('cl',' parents')'
    do px=1 to words(parents)
        if \ oIsCla(word(parents, px)) then
            call err word(parents, px) 'is no class' ,
                    'in oAddCla('cl',' parents')'
        end
    m.o.cParent.cl = parents
    return
endProcedure oAddCla

/*--- add to class cl method met ------------------------------------*/
oAddMet: procedure expose m.
parse arg cl, met, cont
    if \ oIsCla(cl) then
        call err 'undefined class' cl 'in oAddMet('cl',' met',' cont')'
    if symbol('m.o.cMet.cl.met') == 'VAR' then
       call err 'duplicate method' met 'in oAddMet('cl',' met',' cont')'
    m.o.cMet.cl.met = cont
    return
endProcedure oAddMet
/*--- create an an object of the class className
        and call it's new method ------------------------------------*/
oNew: procedure expose m.
parse arg cl, arg, arg2, arg3
    if symbol('m.o.cParent.cl') \== 'VAR' then
        cl = class4name(cl)
    interpret oClaMet(cl, 'new')
endProcedure oNew

/*--- return the class of object obj --------------------------------*/
objClass: procedure expose m.
parse arg m
    if symbol('m.o.o2c.m') == 'VAR' then
         return m.o.o2c.m
    else if abbrev(m, m.o.escW) then
         return m.class.classW
    else if arg() >= 2 then
        return arg(2)
    else
        return err('no class found for object' m)
endProcedure objClass

oKindOf: procedure expose m.
parse arg obj, sup
    cl = objClass(obj, '')
    if cl == '' then
        return 0
    return oClaInheritsOf(cl, sup)
endProcedure oKindOf

oClaInheritsOf: procedure expose m.
parse arg cl, sup    /* wkTst optimierung in classAdded */
    if symbol('m.o.cParent.cl') \== 'VAR' then
         cl = class4name(cl)
    if symbol('m.o.cParent.sup') \== 'VAR' then
         sup = class4name(sup)
    if cl == sup then
        return 1
    do sx=1 to words(m.o.cParent.cl)
        if oClaInheritsOf(word(m.o.cParent.cl, sx), sup) then
            return 1
        end
    return 0
endProcedure oClaInheritsOf
/*--- return the code of method me of object m
         set m to the address and ggClass to the class ---------------*/
objMet: procedure expose m. m ggClass
parse arg m, me
    if symbol('m.o.o2c.m') == 'VAR' then
         ggClass = m.o.o2c.m
    else if abbrev(m, m.o.escW) then
         ggClass = "w"
    else if arg() >= 3 then
        return arg(3)
    else
        return err('no class found for object' m)
    if symbol('m.o.cMet.ggClass.me') == 'VAR' then
       return m.o.cMet.ggClass.me
    code = oClaMet(ggClass, me, '---')
    if code \== '---' then
        return code
    else if arg() >= 3 then
         return arg(3)
    return err('no method' me 'in class' className(ggClass) ,
               'of object' m)
endProcedure objMet

oClaMet: procedure expose m.
parse arg cl, me
    if symbol('m.o.cMet.cl.me') == 'VAR' then
       return m.o.cMet.cl.me
    if \ oIsCla(cl) then do
        c2 = class4Name(cl, '')
        if c2 \== ''  & oIsCla(c2) then do
            cl = c2
            if symbol('m.o.cMet.cl.me') == 'VAR' then
                return m.o.cMet.cl.me
            end
        else do
            if arg() >= 3 then
                return arg(3)
            else
                return err('no class' cl 'in oClaMet('cl',' me')')
            end
        end
    code = oLazyMetGen(m.o.lazyGen, cl, me)
    do px = 1 to words(m.o.cParent.cl) while code == '---'
        code = oClaMet(word(m.o.cParent.cl, px), me, '---')
        end
    if code == '---' then do
        if arg() >= 3 then
            return arg(3)
        else
            return err('no met' me 'in class' cl)
        end
    m.o.cMet.cl.me = code
    return code
endProcedure oClaMet

oLazyMetGen: procedure expose m.
parse arg lg, cl, me
    if symbol('m.o.cMet.lg.me') \== 'VAR' then
        return '---'
    interpret m.o.cMet.lg.me
endProcedure oLazyMetGen

/*--- return the stem of fieldnames of object m ---------------------*/
oFlds: procedure expose m.
parse arg m
    return objMet(m, 'oFlds')
endProcedure oFlds

oPrint: procedur expose m.
parse arg m
    ff = oFlds(m)
    t = ''
    do fx=1 to m.ff.0
        f1 = m || m.ff.fx
        t = t',' substr(m.ff.fx, 2)'='m.f1
        end
    return m'='className(objClass(m))'('substr(t, 3)')'
endProcedure oPrint

/*--- return the contents of field f navigation along path ----*/
oGet: procedure expose m.
parse arg obj, path, clazz
    nullNew = 0
    ret = oAccPath(obj, path, clazz)
    if ret == 1 then
        ret = oAccStr(m, cl)
    if ret == 1 then
        return str
    return err(ret 'in oGet('obj',' path')')
endProcedure oGet

oAccStr: procedure expose m. str
parse arg m, cl
    if cl == m.class.classV then
        str = m.m
    else if m.cl.valueCl == '' then
        return 'no value @' m 'class' className(cl)
    else if m.m == '' then
        return 'null @' m 'class' className(cl)
    else if abbrev(m, m.o.escW) then
        str = substr(m ,2)
    else
        str = o2String(m.m)
    return 1
endProcedure oAccStr

oGetO: procedure expose m.
parse arg obj, path, opt, clazz
    nullNew = pos('n', opt) > 0
    ret = oAccPath(obj, path, clazz)
    if ret == 1 then
        ret = oAccO(m, cl, opt)
    if ret == 1 then
        return ref
    else
        return err(ret 'in oGetO('obj',' path')')
endProcedure oGetO

oAccO: procedure expose m. ref
parse arg m, cl, opt
    if cl == m.class.classV then do
        ref = s2o(m.m)
        end
    else if m.cl \== 'r' then do
        ref = m
        end
    else if m.m == '' then do
        if opt == '-b' then do
            m.m = jBuf()
            end
        else if opt == '-n' then do
            rsn = oRefSetNew(m, cl)
            if rsn \==1 then
               return rsn
            end
        ref = m.m
        end
    else if objClass(m.m, 0) \== 0 then do
        ref = m.m
        end
    else do
        return 'no class for' m.m '@' m 'class' cl
        end
    return 1
endProcedure oAccO

oPut: procedure expose m.
parse arg obj, path, str
    nullNew = 1
    res = oAccPath(obj, path)
    if res == 1 then
        res = ocPut(m, cl, str)
    if res == 1 then
        return str
    return err(res 'in oPut('obj',' path',' str')')
endProceudre oPut

ocPut: procedure expose m.
parse arg m, cl, str
    if m.cl.valueCl == m.class.classV then
        m.m = str
    else if m.cl.valueCl \== '' then
        m.m = s2o(str)
    else
        return 'no value @' m 'class' className(cl)
    return 1
endProcedure ocPut

oPutO: procedure expose m.
parse arg obj, path, ref
    nullNew = 1
    res = oAccPath(obj, path)
    if res == 1 then
        res = ocPutO(m, cl, ref)
    if res == 1 then
        return ref
    return err(ret 'in oPut('obj',' path',' ref')')
endProcedure oPutO

ocPutO: procedure expose m.
parse arg m, cl, ref
    if m.cl.valueCl == m.class.classV then
        m.m = o2string(ref)
    else if m.cl.valueCl \== '' then
        m.m = ref
    else if m.cl.stemCl \== '' then
        return 'implement put to stem'
    else
        return 'no value @' m 'class' className(cl)
    return 1
endProcedure ocPutO

oClear: procedure expose m.
parse arg m
    interpret objMet(m, 'oClear')
    return m
endProcedure oClear

oClaClear: procedure expose m.
parse arg cla, m
    interpret "drop cla;" oClaMet(cla, 'oClear')
    return m
endProcedure oClaClear

oAccPath: procedure expose m. m cl nullNew
parse arg m, pa, cl
    if cl == '' & m \== '' then do
        cl = objClass(m)
        end
    if pa == '' then
        return 1
    call oClaMet cl, 'oFlds'
    if abbrev(pa, m.class.cRef) ,
            | (\ m.cl.hasFlds & abbrev(pa, m.class.cNav)) then do
        if pa == m.class.cRef & m.cl.valueCl == m.class.classV then do
            cl = m.class.classV
            return 1
            end
        if (m.cl.valueCl == '' | m.cl.valueCl == m.class.classV) ,
              & m.cl \== 'r' then
            return 'no reference @' m 'class' cl
        if m.m = '' then do
            if \ nullNew then
                return 'null @' m 'class' className(cl)
            rsn = oRefSetNew(m, cl)
            if rsn \== 1 then
                return rsn
            end
        return oAccPath(m.m, substr(pa, 2))
        end
    if pos(left(pa, 1), m.class.cPath) > 0 then
        return oAccPath(m, substr(pa, 2), cl)
    px = verify(pa, m.class.cPath, 'm')
    if px < 1 then
        px = length(pa)+1
    fn = left(pa, px-1)
    pa = substr(pa, px)
    if symbol('m.cl.f2c.fn') == 'VAR' then
        return oAccPath(m'.'fn, pa, m.cl.f2c.fn)
    if m.cl.stemCl=='' | fn=='' | verify(fn, '0123456789','n')>0 then
        return 'no field' fn '@' m 'class' className(cl)
    if fn == 0 then
        return oAccPath(m'.0', pa, m.class.classV)
    if abbrev(fn, 0) | verify(m.m.0, '0123456789', 'n') > 0,
            | fn > m.m.0 then
        return 'bad stem index' fn'>'m.m.0 '@' m 'class' className(cl)
    return oAccPath(m'.'fn, pa, m.cl.stemCl)
endProcedure oAccPath

oRefSetNew: procedure expose m.
parse arg m, cl
    cr = m.cl.valueCl
    if m.cr.class = '' then
        return 'no class for null @' m 'class' className(cl)
    if m.cr.class = m.class.classW then
        m.m = o2s()
    else if m.cr \== 'r' then
        return 'class' className(cl) 'not ref'
    else
        m.m = oNew(m.cr.class)
    return 1
endProcedure oRefSetNew


/*--- mutate object m to the class cl -------------------------------*/
oMutate: procedure expose m.
parse arg m, cl
    m.o.o2c.m = cl
    return m
endProcedure oMutate

/*--- mutate object m to the class named name -----------------------*/
oMutatName: procedure expose m.
parse arg m, nm
    m.o.o2c.m = class4Name(nm)
    return m
endProcedure oMutatName

/*--- copy object m of class cl to t --------------------------------*/
oClaCopy: procedure expose m.
parse arg cl, m, t
    interpret "drop cl;" oClaMet(cl, 'oCopy')
endProcedure oClaCopy

/*--- copy object m to t / create a new object if t=='' -------------*/
oCopy: procedure expose m.
parse arg m, t
    interpret objMet(m, 'oCopy')
endProcedure oCopy

/*--- return a new instance of a subclass of Run
        with code code in method oRun -------------------------------*/
oRunner: procedure expose m.
    if arg() >= 1 then
           r = oNew(classNew('n* ORun u ORun, m oRun' arg(1)))
    else
           r = oNew(classNew('n| ORun u ORun'))
    return r
endProcedure oRunner

/*--- set code for runner -------------------------------------------*/
oRunnerCode: procedure expose m.
parse arg r, code
    call classSetMet objClass(r), 'oRun', code
    return r
endProcedure oRunnerCode

/*--- run method oRun of object m -----------------------------------*/
oRun: procedure expose m.
parse arg m, arg, arg2, arg3
    interpret objMet(m, 'oRun')
    return
endProcedure oRun

/*--- run method oRun and return output in new JBuf ------------------*/
oRun2File: procedure expose m.
parse arg rn
    b = jBuf()
    call pipe '+F' , b
    call oRun rn
    call pipe '-'
    return b
endProcedure oRun2File

/*--- cast the object to a file -------------------------------------*/
o2File: procedure expose m.
parse arg m
    interpret objMet(m, 'o2File')
    call err 'o2file did not return'
endProcedure o2File

/*--- cast the object to a String -----------------------------------*/
o2String: procedure expose m.
parse arg m, fmt
    if opt == '' then
        opt = '-b '
    interpret objMet(m, 'o2String')
    return err('o2String did not return')
endProcedure o2String

/*--- return true if object is kind of String------------------------*/
oStrOrObj: procedure expose m. ggStr ggObj ggCla
parse arg ggObj, def
    if ggObj == '' then
        ggObj = def
    ggCla = objClass(ggObj, '')

    if ggCla == '' then do
        ggStr = ggObj
        ggObj = ''
        return 1
        end
    else if wordPos(ggCla, m.class.classV m.class.classW) > 0 then do
        ggStr = o2String(ggObj)
        ggObj = ''
        return 1
        end
    else do
        ggStr = ''
        return 0
        end
endProcedure oStrOrObj

/*--- return true if object is kind of String ----- ???? -------------*/
oStrOrFile: procedure expose m. ggStr ggObj ggCla
parse arg m, def
    if oStrOrObj(m, def) then
        return 1
    ggObj = o2File(ggObj)
    return 0
endProcedure oStrOrFile

/*--- return a short string representation of an object -------------*/
o2Text: procedure expose m.
parse arg m, maxL
    if m == '' then
        return '@ null object'
    if maxL == '' then
        maxL = 80
    cl = objClass(m, '?')
    if cl = m.class.classV then
        l = m.m
    else if cl == m.class.classW then
        l = substr(m, 2)
    else if cl == '?' then
        l = '@'m 'class=???'
    else do
        l = '@'m 'class='className(cl)
        ff = oFlds(m)
        do fx=1 to m.ff.0 while length(l) < maxL + 3
            if m.ff.fx == '' then
                 l = l', .='m.m
            else do
                 f1 = substr(m.ff.fx, 2)
                 l = l',' f1'='m.m.f1
                 end
            end
        end
    if length(l) <= maxL then
        return l
    return left(l, maxL-3)'...'
endProcedure o2Text

/*--- cast a String to an object -----------------------------------*/
s2o: procedure expose m.
parse arg str
    return m.o.escW || str
    return r
endProcedure s2o

oIfStr: procedure expose m.
parse arg m
    if length(m) > 200 then
        return m
    cl = objClass(m, '')
    if cl = '' then
        return m
    else if cl = m.class.classV then
        return = m.m
    else if cl == m.class.classW then
        return = substr(m, 2)
    else if arg() >= 2 then
        return arg(2)
    else
        call err m 'of class' className(cl) 'not kind of string'
endProcedure oIfStr

/* copy o end *******************************************************/
/* copy class begin **************************************************
    a class has fields and methods,
    the class module handles only the metadata,
    object handling (instanciation, methodcalls etc.) is in O

    classes are represented by a metadata tree,
        its nodes of class class have diffenrent types:

class subTypes (implemented as choices)
    'u'    = union:    NAME -> name of class if <> '',
                    stem -> references component classes
    'f' = field:      NAME -> fieldName (x.name),
                    CLASSS -> reference to class of fieldValue
    's' = stem:     class -> ref to class at each stem element
    'c' = choice:   NAME -> selection value,
                    CLASS -> ref to class of choice
    'm' = method:    NAME -> methodName,
                    MET -> rexxCode
    'r' = reference CLASS -> ref to type at reference
special classes
    'v'    = Value     String Value
    'w'    = ValueAsA  StringValue packed into an address (prefix escW)
    'o' = AnyClass    any class with dynamic classLookup on object
formal definition, see classIni

class expression (ce) allow the following syntax
    ce = className | classAdr | 'n'('?','*','|')? name union | union
        | 'f' name ce | 's' ce | 'c' name ce | 'm' name code | r ce?
    union = 'u' (ce (',' ce)*)?

    the modifiers of 'n' means
        none:    create new class, fail if name already defined
        '?':    create new class or return old of that name
        '*':    use an exisiting class of that definition
                or create new class with a unique name
        '|':    create a new class with a unique name
    'm' extends to then end of the ce (line)
    'u' allows several components, in classNew also multiple args
                Achtung, aber NICHT rekursiv|
***********************************************************************/
classIni: procedure expose m.
    if m.class.ini == 1 then
        return
    m.class.ini = 1
    m.class.in2 = 0
    call oIni
    call mapIni
    call mNewArea 'CLASS', 'CLASS'
    call mapReset 'CLASS.N2C'  /* name to class */
    m.class.classV = classBasicNew('u', 'v')
    m.class.classW = classBasicNew('u', 'w')
    m.class.classO = classBasicNew('u', 'o')

    m.class.class = classNew('n class u v',
            , 'c u u f NAME v, s r class',
            , 'c f u f NAME v, f CLASS r class',
            , 'c s f CLASS r class' ,
            , 'c c u f NAME v, f CLASS r class',
            , 'c m u f NAME v, f MET  v' ,
            , 'c r f CLASS r class' )
    m.class.cNav = '.'
    m.class.cRef = '|'
    m.class.cDot = '%'
    m.class.cPath = m.class.cNav || m.class.cRef || m.class.cDot
    m.class.classR = classNew('r')
    m.class.basicNew = "oMutate(mNew(cl), cl)"
    call oAddMet m.o.lazyGen, 'new', "return classGenNew(cl, me)"
    call oAddMet m.o.lazyGen,'oClear',"return classGenClear(cl, me)"
    call oAddMet m.o.lazyGen,'oFlds',"return classGenFlds(cl, me)"
    call oAddMet m.o.lazyGen, 'oCopy', "return classGenCopy(cl, me)"

    cr = mIterBegin('CLASS')
    do while assNN('cr', mIter(cr))
        call classFinish cr
        call oClaMet cr, 'oFlds' /* generate flds */
        end
    m.class.in2 = 1

    call oAddMet m.class.classV, 'oCopy', "return oCopyV(m, t)"
    call classAddMet m.class.classV, 'o2String return m.m'
    call classAddMet m.class.classW, 'o2String return substr(m, 2)'
    call classNew 'n ORun u',
         , 'm oRun call err "call of abstract method oRun"',
         , 'm o2File return oRun2File(m)',
         , 'm o2String return jCatLines(oRun2File(m), fmt)'

    return
endProcedure classIni


/*--- return the name of a class if it exists otherwise the class ---*/
className: procedure expose m.
parse arg cl
    if m.cl = 'u' & m.cl.name \= '' then
        return m.cl.name
    else
        return cl
endProcedure className

/*--- return class of given name or class ---------------------------*/
class4Name: procedure expose m.
parse arg nm
    if symbol('m.class.n2c.nm') == 'VAR' then
        return m.class.n2c.nm
    if arg() > 1 then
        return arg(2)
    call err 'no class' nm
endProcedure class4Name

classBasicNew: procedure expose m.
parse arg ty, nm, cl, nmTy
    n = mNew('CLASS')
    m.n = ty
    m.n.name = nm
    m.n.nameComp = nm
    if ty == 'u' & nm \== '' then do
        if pos(nmTy, '*|') > 0 then do
            m.n.name = nm || substr(n, 1+lastPos('.', n))
            if nmTy == '*' then
                m.n.nameComp = nm'*'
            else
                m.n.nameComp = m.n.name
            end
        call mapAdd class.n2c, m.n.name, n
        end
    call mapAdd class.n2c, n, n
    m.n.class = ''
    m.n.met = ''
    m.n.0 = 0
    if length(ty) \== 1 | pos(ty, 'ufscrm') < 1 then
        call err 'bad type' ty': classBasicNew('ty',' nm',' cl')'
    else if nm == '' & pos(ty, 'fm') > 0 then
        call err 'empty name: classBasicNew('ty',' nm',' cl')'
    else if nm \== '' & ty \== 'c' & verifId(nm) > 0 then
        call err 'bad name' nm': classBasicNew('ty',' nm',' cl')'
    else if nm \= '' & pos(ty, 'rs') > 0 then
        call err 'name for type' ty': classBasicNew('ty',' nm',' cl')'
    else if pos(ty, 'fcrs') > 0 then do
        if cl \== '' then
            m.n.class = mapGet(class.n2c, cl)
        else if ty == 'r' then
            m.n.class = m.class.classO
  /*    else say 'cl leer' ty nm nmTy   ???????*/
        end
    else if ty == 'm' then
        m.n.met = cl
    else if cl \== '' then
        call err 'class for type' ty': classBasicNew('ty',' nm',' cl')'
    return n
endProcedure classBasicNew


classNew: procedure expose m.
parse arg clEx 1 ty rest
    if abbrev(ty, 'n') then do
        if wordPos(ty, 'n n? n* n|') < 1 then
            call err 'bad type' ty': classNew('clEx')'
        nmTy = right(ty, 1)
        parse var rest nm ty rest
        if ty \== 'u' then
            call err 'class name' nm 'without u: classNew('clEx')'
        if nmTy == 'n' then do
             if mapHasKey(class.n2c, nm) then
                call err 'class' nm 'already defined: classNew('clEx')'
            end
        else if nmTy == '?' then do
            if mapHasKey(class.n2c, nm) then
                return mapGet(class.n2c, nm)
            end
        else if nmTy == '*' then do
            if arg() \== 1 then
                call err 'arg()='arg() 'for n* : classNew('clEx')'
            if mapHasKey(class.n2c, clEx) then
                return mapGet(class.n2c, clEx)
            end
        n = classBasicNew('u', nm, , nmTy)
        end
    else do
        nmTy = ''
        if arg() \== 1 then
            call err 'arg()='arg() 'without name: classNew('clEx')'
        if mapHasKey(class.n2c, clEx) then
               return mapGet(class.n2c, clEx)
        if length(ty) <> 1 | pos(ty, 'ufscmr') < 1 then
            call err 'bad type' ty': classNew('clEx')'
        nm = ''
        if pos(ty, 'usr') < 1 then
            parse var rest nm rest
        if ty = 'u'  then do
            n = classBasicNew(ty)
            end
        else if    ty = 'm' then do
            n = classBasicNew(ty, nm, rest)
            rest = ''
            end
        else do
            parse var rest t1 rest
            if wordPos(t1, 'u f s c m r') > 0 then do
                n = classBasicNew(ty, nm)
                m.n.class = classNew(t1 rest)
                rest = ''
                end
            else do
                n = classBasicNew(ty, nm, t1)
                end
            end
        end
    if ty \== 'u' then do
        if rest \== '' then
            call err 'rest' rest 'but end of classExp expected:' clEx
        end
    else do
        lx = 0
        do while lx < length(rest)
            cx = pos(',', rest, lx+1)
            if cx <= lx | word(substr(rest, lx+1), 1) == 'm' then
                cx = length(rest)+1
            a = mAdd(n, classNew(strip(substr(rest, lx+1, cx-lx-1))))
            lx=cx
            end
        pref = ''
        do ax=2 to arg()
            if length(arg(ax)) == 1 & arg(ax) \== ' ' then
                pref = arg(ax)' '
            else
                call mAdd n, classNew(pref || arg(ax))
            end
        end
    cr = mIterBegin('CLASS')
    do while assNN('cr', mIter(cr)) & \ classEqual(n, cr)
        end
    isNew = cr == n
    if \ isNew then do
        if mapRemove(class.n2c, n) \== n then
            call err 'mapRemove('n') mismatch'
        if m.n == 'u' & m.n.name \== '' then
            if mapRemove(class.n2c, m.n.name) \== n then
                call err 'mapRemove('m.n.name') mismatch'
        call mFree n
        n = cr
        end
    if isNew & m.class.in2 then
        call classFinish n
    if nmTy == '' | nmTy == '*' then
        call mapAdd class.n2c, clEx, n
    return n
endProcedure classNew

/*--- to the finish for new class cl -------------------------------*/
classFinish: procedure expose m.
parse arg cl, force
    call oMutate cl, m.class.class
                        /* find super and sub classes */
    m.cl.sub = ''
    sups = ''
    do ux=1 to m.cl.0
        u1 = m.cl.ux
        if m.u1 \== 'u' then
            iterate
        if wordPos(u1, sups) > 0 then
            call err u1 'already in sups' sups': classSuperSub('cl')'
        sups = sups u1
        if wordPos(m.cl.SUB, cl) > 0 | symbol('m.u1.sub') \== 'VAR' then
            call err cl 'is already in' u1'.sub' u1.SUB  ,
                || ': classSuperSub('cl')'
        m.u1.sub = strip(m.u1.sub cl)
        end
    m.cl.super = sups
                        /* add class to o */
    call oAddCla cl, sups
    if pos(m.cl, 'mfrsv') < 1 then do
        allMets = ''
        forceMets = ''
        do cx=1 to m.cl.0
            ch = m.cl.cx
            if m.ch == 'm' then do
                call oAddMet cl, m.ch.name, m.ch.met
                allMets = allMets m.ch.name
                end
            else if symbol('m.class.forceDown.ch') == 'VAR' then
                forceMets = forceMets m.class.forceDown.ch
            end
        myForce = ''
        do fx=1 to words(forceMets)
            parse value word(forceMets, fx) with fCla '#' fMet
            if wordPos(fMet, allMets) < 1 then do
                call oAddMet cl, fMet, m.o.cMet.fCla.fMet
                myForce = myForce cl'#'fMet
                allMets = allMets fMet
                end
            end
        if myForce \== '' then
            m.class.forceDown.cl = strip(myForce)
        end
    if cl == m.class.class then
        call mAlias 'CLASS', cl
    else  /* object addresses */
        call mNewArea cl, 'O.'substr(cl,7)
    if m.cl \== 'u' | m.cl.name == '' then
        return
    call mAlias cl, m.cl.name
    return
endProcedure classFinish

classAddMet: procedure expose m.
parse arg clNm, met code
    cl = class4Name(clNm)
    if pos(m.cl, 'uvw') < 1 then
        call err 'class not nvw but' m.cl,
            'in classAdd1Method('clNm',' met code')'
    call mAdd cl, classNew('m' met code)
    call oAddMet cl, met, code
    return cl
endProcedure classAddMet
/*--- return true iff the two classes are equal -------------------*/
classEqual: procedure expose m.
parse arg l, r
    if m.l \== m.r | m.l.nameComp \== m.r.nameComp ,
            | m.l.class \== m.r.class | m.l.0 \== m.r.0  then
        return 0
    if m.l.met \== m.r.met  then
        return 0
    do sx=1 to m.l.0
        if m.l.sx \== m.r.sx then
            return 0
        end
    return 1
endProcedure classEqual

classGenNew: procedure expose m.
parse arg cl, met
     return  "m=" m.class.basicNew";" oClaMet(cl, 'oClear') ";" ,
             "return m"
endProcedure classGenNew

classGenFlds: procedure expose m.
parse arg cl, met
    m.cl.flds.0 = 0
    m.cl.stms.0 = 0
    m.cl.stemCl = ''
    m.cl.valueCl = ''
    call classGenFldsAdd cl, cl
    m.cl.hasFlds = m.cl.flds.0 > 1 ,
        | (m.cl.flds.0 == 1 & m.cl.flds.1 \== '') | m.cl.stms.0 > 0
    return cl'.FLDS'
endProcedure classGenFlds

/*--- add the the fields of class cl to stem f ----------------------*/
classGenFldsAdd: procedure expose m.
parse arg f, cl, nm
    n1 = substr(nm, 1+abbrev(nm, '.') )
    if symbol('m.f.f2c.n1') \== 'VAR' then
        m.f.f2c.n1 = cl
    if cl == m.class.classV | cl == m.class.classW | m.cl=='r' then do
        if nm == '' then do
            if m.f.valueCl \== '' then
                return  err('value mistmatch')
            m.f.valueCl = cl
            end
        if nm == '' then do
             call mMove f'.FLDS', 1, 2
             m.f.flds.1 = ''
             end
        else do
            call mAdd f'.FLDS', nm
            end
        return 0
        end
    if m.cl = 's' then do
        if m.cl.class == '' then
            call err 'stem null class'
        a1 = mAdd(f'.STMS', nm)
        m.a1.class = m.cl.class
        if nm == '' then
            m.f.stemCl = m.cl.class
        return 0
        end
    if m.cl = 'f' then
        return classGenFldsAdd(f, m.cl.class, nm'.'m.cl.name)
    if m.cl.class \== '' then
        return classGenFldsAdd(f, m.cl.class, nm)
    do tx=1 to m.cl.0
        call classGenFldsAdd f, m.cl.tx, nm
        end
    return 0
endProcedure classGenFldsAdd

classGenClear: procedure expose m.
parse arg cl, met
    r = ''
    call oClaMet cl, 'oFlds'
    do fx=1 to m.cl.flds.0
        f1 = m.cl.flds.fx
        if f1 == '' then
            c1 = cl
        else do
            c1 = substr(f1, 2)
            c1 = m.cl.f2c.c1
            end
        if c1 == m.class.classW then
            r = r classGenStmt(f1, "m.m~ = '"m.o.escW"';")
        else
            r = r classGenStmt(f1,  "m.m~ = '';")
        end
    do sx=1 to m.cl.stms.0
        r = r classGenStmt(m.cl.stms.sx, "m.m~.0 = 0;")
        end
    return r
endProcedure classGenClear

classGenStmt: procedure expose m.
parse arg f, st, resWo
    isNice = translate(f) == f
    resWo = translate(resWo) 'GGFF M'
    fDod = '.'f'.'
    do wx=1 to words(resWo) while isNice
        isNice = pos('.'word(resWo, wx)'.', fDot) < 1
        end
    if isNice then
        return repAll(st, '~', f)
    else
        return "ggFF = '"substr(f, 2)"';" repAll(st, '~', '.ggFF')
endProceduer classGenAss

classGenCopy: procedure expose m.
parse arg cl, me
    r = repAll("if t == '' then t =" m.class.basicNew ";" ,
               "else call oMutate t, cl;", 'cl', "'"cl"'")
    ff = oClaMet(cl, 'oFlds')            /* build code for copy */
    do fx=1 to m.cl.flds.0
        r = r classGenStmt(m.cl.flds.fx, 'm.t~ = m.m~;', 't')
        end
    do fx=1 to m.cl.stms.0
        nm = m.cl.stms.fx
        sc = m.cl.stms.fx.class
        if nm == '' then
            st = ''
        else do
            r = r "st = '"substr(nm, 2)"';"
            st = '.st'
            end
        r = r "m.t"st".0 = m.m"st".0;" ,
               "do sx=1 to m.m"st".0;" ,
                 "call oClaCopy '"sc"', m"st".sx, t"st".sx; end;"
        end
    return r 'return t;'
endProcedure classGenCopy

/*--- oCopy for classW ----------------------------------------------*/
oCopyW: procedure expose m.
trace ?r
parse arg m, t
    if t == '' then
        return m
    m.t = o2String(m)
    return oMutate(t, m.class.classV)
endProcedure oCopyW
/*--- print object ---------------------------------------------------*/
objOut: procedure expose m.
parse arg m, pr, p1
   c = objClass(m, '')
   if c == '' then
       call out p1 'no class for' m
   else if c == m.class.classV then
       call out p1 || m.m
   else if c == m.class.classW then
       call out p1 || o2String(m)
   else
       call classOutDone c, m, pr, p1
   return
endProcedure objOut

/*--- recursively output (with out:) the object a with class t -------*/
classOut: procedure expose m.
parse arg t, a, pr, p1
    return classOutDone(if(t=='',m.class.classO, t), a, pr, p1)
endProcedure classOut

/*--- ouput object a with class t and stopper done ------------------*/
classOutDone: procedure expose m. done.
parse arg t, a, pr, p1
    if p1 == '' then
        p1 = pr
    if right(p1, 1) \== ' ' then
        p1 = p1' '
    if done.ini \== 1 then do
        done.ini = 1
        t = class4Name(t, t)
        p1 = p1'@'a' '
        end
    if done.t.a == 1 then
        return out(p1'done :'className(t) '@'a)
    done.t.a = 1
    if t = m.class.classO then do
        if a == '' then
            return out(p1'obj null')
        t = objClass(a, '')
        if t = '' then
            return out(p1'obj has no class @'m.a)
        else
            return classOutDone(t, a, pr, p1'isA')
        end

    if t == m.class.classV then
        return out(p1'=' m.a)
    if t == m.class.classW == 'w' then
        return out(p1'}' substr(a, 2))
    if m.t == 'f' then
        return classOutDone(m.t.class, a'.'m.t.name, pr, p1'.'m.t.name)
    if m.t == 'r' then do
        if m.a == '' then
            return out(p1'refTo :'className(m.t.class) '@null@')
        else
            return classOutDone(m.t.class, m.a, pr,
                    , p1'refTo @'m.a)
        end
    if m.t = 'u' then do
        t1 = m.t.1
        vv = m.t.0 > 0 & m.t.1 == m.class.classV
        call out p1 || if(m.t.name == '', 'union', ':'m.t.name) ,
             || copies(' =' m.a, vv)
        do ux=1+vv to m.t.0
            call classOutDone m.t.ux, a, pr' '
            end
        return 0
        end
    if m.t = 's' then do
        call out p1'stem' m.a.0
        do ux=1 to m.a.0
            call classOutDone m.t.class, a'.'ux, pr' ', pr' .'ux
            end
        return 0
        end
    if m.t = 'c' then do
        if m.t.name = m.a then
            call classOutDone m.t.class, a, pr, p1'choice' m.a
        return 0
        end
    if m.t = 'm' then
        return 0
    return err('bad class type' m.t)
endProcedure classOutDone
/* copy class end   ***************************************************/
/* copy mapExp begin **************************************************/
mapVia: procedure expose m.
parse arg a, ky
    sx = pos('|', ky)
    if sx < 1 then
        return mapGet(a, ky)
    via = mapGet(a, left(ky, sx-1))
    do while sx <= length(ky)
        fx = sx+1
        sx = pos('|', ky, fx)
        if sx < 1 then
            sx = length(ky) + 1
        if sx = fx then do
            if symbol('m.via') \== 'VAR' then
                call err 'missing m.'via 'at' sx 'in mapVia('a',' ky')'
            via = m.via
            end
        else do
            f = substr(ky, fx, sx - fx)
            if symbol('m.via.f') \== 'VAR' then
                call err 'missing m.'via'.'f ,
                     'at' sx 'in mapVia('a',' ky')'
            via = m.via.f
            end
        end
    return via
endProcedure mapVia

mapExpAt: procedure expose m.
parse arg a, src, sx
    m.map.ExpAt = 0
    cx = pos('$', src, sx)
    if cx < 1 then
        return substr(src, sx)
    res = substr(src, sx, cx-sx)
    do forever
        if substr(src, cx+1, 1) = '{' then do
            ex = pos('}', src, cx+2)
            if ex < 1 then
                call err 'missing } after' substr(src, cx) 'in' src
            res = res || mapVia(a, strip(substr(src, cx+2, ex-cx-2)))
            ex = ex + 1
            end
        else do
            ex = verify(src, m.ut.alfDot, 'n', cx+1)
            if ex < 1 then
                return res || mapVia(a, substr(src, cx+1))
            if ex = cx+1 then do
                m.map.ExpAt = cx
                return res
                end
            res = res || mapVia(a, substr(src, cx+1, ex-cx-1))
            end
        cx = pos('$', src, ex)
        if cx < 1 then
            return res || substr(src, ex)
        res = res || substr(src, ex, cx-ex)
        end
endProcedure mapExpAt

mapExp: procedure expose m.
parse arg a, src
    res = mapExpAt(a, src, 1)
    if m.map.ExpAt \== 0 then
        call err 'mapExp stopped at' substr(src, map.ExpAt) 'in' src
    return res
endProcedure mapExp

mapExpAllAt: procedure expose m.
parse arg a, dst, src, sx, cx
    do while sx <= m.src.0
        li = mapExpAt(a, m.src.sx, cx)
        dx = m.map.ExpAt
        if (cx=1 & dx = 0) | li \= '' then
            call mAdd dst, li
        if dx = 0 then do
            cx = 1
            sx = sx+1
            end
        else do
            return sx dx
            end
        end
    return ''
endProcedure mapExpAllAt

mapExpAll: procedure expose m.
parse arg a, dst, src
    sto = mapExpAllAt(a, dst, src, 1, 1)
    if sto == '' then
         return
    lx = word(sto, 1)
    call err 'mapExpAll stopped at' sto':' m.src.lx
endProcedure mapExpAll
/* copy mapExp end ****************************************************/
/* copy map begin ******************************************************
    a map stores values at keys
    it may also maintain a list of keys
    the basic ideas are similar to the java Interface java.util.Map
    contrary to stems we also handle keys longer then 250 bytes
***********************************************************************/
/*--- initialize the module ------------------------------------------*/
mapIni: procedure expose m.
    if m.map.ini = 1 then
        return
    m.map.ini = 1
    call mIni
    m.map.0 = 0
    m.map.inlineSearch = 1
    call mapReset map.inlineName, map.inline
    return
endProcedure mapIni

mapInline: procedure expose m.
parse arg pName, opt
    if mapHasKey(map.inlineName, pName) then do
        im = mapGet(map.inlineName, pName)
        if pos('l', opt) < 1 & symbol('m.im.0') \== 'VAR' then do
            m.im.0 =  m.im.lEnd - m.im.lBegin - 1
            do ix=1 to m.im.0
                m.im.ix = strip(sourceline(ix+m.im.lBegin), 't')
                end
            end
        return im
        end
    name = '/'
    do lx = m.map.inlineSearch to sourceline()
        if \ abbrev(sourceline(lx), '$') then
            iterate
        li = sourceline(lx)
        s1 = pos('/', li)+ 1
        if s1 < 3 | s1 > 4 then
            iterate
        s2 = pos('/', li, s1)
        if s2 <= s1 then
            iterate
        if s1 == 3 then do
            if name \== substr(li, s1, s2-s1) then
                iterate
            im = 'MAP.INLINE.' || (m.map.inline.0+1)
            call mapAdd map.inlineName, name, im
            m.im.lBegin = lBeg
            m.im.lEnd = lx
            m.im.mark = mrk
            if name == pName then do
                m.map.inlineSearch = lx+1
                return mapInline(pName)
                end
            name = '/'
            end
        else if \ mapHasKey(map.inlineName,
                , substr(li, s1, s2-s1)) then do
            lBeg = lx
            mrk = substr(li, 2, s1-3)
            name = substr(li, s1, s2-s1)
            end
        else do
            name = '/'
            end
        end
    if pos('r', opt) > 0 then
        return ''
    return err('no inline data /'pName'/ found')
endProcedure mapInline

/*--- create a new map ----------------------------------------------*/
mapNew: procedure expose m.
parse arg opt
    m.map.0 = m.map.0 + 1
    return mapReset('MAP.'m.map.0 , opt)
endProcedure mapNew

/*--- make an empty map, if opt <> '' maintain stem of keys
                ('K' in map.keys, '=' in a else in opt) --------------*/
mapReset: procedure expose m.
    parse arg a, opt
    if symbol('m.map.keys.a') == 'VAR' then
        call mapClear a
    if opt = '=' then
        st = a
    else if translate(opt) = 'K' then
        st = 'MAP.KEYS.'a
    else
        st = opt
    m.map.keys.a = st
    if st \== '' then
        m.st.0 = 0
    return a
endProcedure

/*--- add a new key value pair to the map ----------------------------*/
mapAdd: procedure expose m.
parse arg a, ky, val
    vv = mapValAdr(a, ky, 'a')
    m.vv = val
    return val
endProcedure mapAdd

/*--- change the value at a key or add key value ---------------------*/
mapPut: procedure expose m.
parse arg a, ky, val
    vv = mapValAdr(a, ky, 'p')
    m.vv = val
    return val
endProcedure mapPut

/*--- return 1 if key ky exists in map a, 0 otherwise ----------------*/
mapHasKey: procedure expose m.
parse arg a, ky
    return mapValAdr(a, ky) \== ''
endProcedure mapHasKey

/*--- return the value of key ky in map a if it exists,
          else if called with a third argument return third argument
          else issue an error ----------------------------------------*/
mapGet: procedure expose m.
parse arg a, ky
    vv =  mapValAdr(a, ky)
    if vv \== '' then
        return m.vv
    else if arg() > 2 then
        return arg(3)
    else
        return err('missing key in mapGet('a',' ky')')
endProcedure mapGet

/*--- return a stem of all keys --------------------------------------*/
mapKeys: procedure expose m.
parse arg a
    if m.map.keys.a == '' then
        call err 'mapKeys('a') with no keys'
     return m.map.keys.a
endProcedure mapKeys

/*--- remove a key from the map, do nothing if it is missing ---------*/
mapRemove: procedure expose m.
parse arg a, ky
    vv = mapValAdr(a, ky)
    if vv == '' then
        return ''
    if m.map.keys.a \== '' then do
        trace ?R /* not tested yet ???wkTest */
        k = m.map.keys.a
        mx = m.k.0
        do i=1 to mx
            if m.k.i == ky then do
                m.k.i = m.k.mx
                m.k.0 = mx - 1
                return
                end
            end
        end
    val = m.vv
    drop m.a.ky
    return val
endProcedure mapRemove

/*--- remove all entries ---------------------------------------------*/
mapClear: procedure expose m.
parse arg a
    st = mapKeys(a)
    liLe = 243 - length(a)
    do kx=1 to m.st.0
        ky = m.st.kx
        drop m.st.kx
        if length(ky) <= liLe then do
            drop m.a.ky
            end
        else do
            adr = mapValAdr(a, ky)
            if adr \== '' then do
                ha = left(adr, lastPos('.', adr) - 3)
                do i = 1 to m.ha.k.0
                     drop m.ha.k.i m.ha.v.i
                     end
                 drop m.ha.k.0
                 end
            end
        end
    m.st.0 = 0
    return a
endProcedure mapClear

/*--- return the value pointer for a key, '' if non existing
             with fun = 'a' add a key, with 'p' put a key ------------*/
mapValAdr: procedure expose m.
parse arg a, ky, fun
    if length(ky) + length(a) <= 243 then do
        res = a'.'ky
         if symbol('m.res') == 'VAR' then do
            if fun == 'a' then
                call err 'duplicate key' ky 'in map' a
            return res
            end
        else if fun == '' then
            return ''
        end
    else do
        len = 243 - length(a)
        q = len % 4
        ha = a'.'left(ky, len - 2 * q) || substr(ky,
            , (length(ky)-len) % 2 + 2 * q, q) || right(ky, q)
        if symbol('M.ha.k.0') == 'VAR' then do
            do i=1 to m.ha.k.0
                if m.ha.k.i == ky then do
                    if fun == 'a' then
                        call err 'duplicate key' ky ,
                            'map' a 'hash' ha'.K.'i
                    return ha'.V.'i
                    end
                end
            end
        else do
            i = 1
            end
        if fun == '' then
            return ''
        if i > 9 then
            call err 'overflow long key' y 'in map' a 'hash' ha'.K.'i
        m.ha.k.0 = i
        m.ha.k.i = ky
        res = ha'.V.'i
        end
    if m.map.keys.a \== '' then
        call mAdd m.map.Keys.a, ky
    m.res = ''
    return res
endProcedure mapValAdr

/* copy map end *******************************************************/
/* copy m begin ********************************************************
  we use variables as follows
    m. stem m: all global data and object data that must survive
               a procedure call  (m for memory in Memoria of B5000)
        m.<mbr>.** to avoid conflicts: every rexx Module (copy) should
               only allocate addresses m.<mbr>.** with <mbr> the name of
               the rexx module
        we pass parameters around (e.g. a=address, m=memory, st=stem)
            and the called function may use m.a or m.a.subField etc.
    gg*: local variable in subroutines without procedure
    everything else: temporary data within procedure

  every subroutine is declared as procedure expose m.
        (also if no m. variable is used, because e.g. of error handling)
  the few subroutines that cannot use procedure, should use only
        variables starting with gg
***********************************************************************/
/*---make an area -----*/

mNewArea: procedure expose m.
parse arg nm, adr
    m.m.area.0 = m.m.area.0 + 1
    a = 'M.AREA.'m.m.area.0
    if adr == '=' then
        adr = nm
    else if adr == '' then
        adr = 'M.'m.m.area.0
    if symbol('m.m.n2a.adr') == 'VAR' then
        call err 'adr' adr 'for area' nm 'already used'
    m.m.n2a.adr = a
    call mAlias adr, nm
    m.m.p2a.adr = a

    m.a.0 = 0
    m.a.free.0 = 0
    m.a.address = adr
    return nm
endProcedure mNewArea

mAlias: procedure expose m.
parse arg oldNa, newNa
    if symbol('m.m.n2a.oldNa') \== 'VAR' then
        call err 'area' oldNa 'does not exist'
    if oldNa == newNa then
        return
    if symbol('m.m.n2a.newNa') == 'VAR' then
        call err 'newName' newNa 'for old' oldNa 'already used'
    m.m.n2a.newNa = m.m.n2a.oldNa
    return
endProcedure mAlias

mNew: procedure expose m. ggArea
parse arg name
    if symbol('m.m.n2a.name') \== 'VAR' then
        call err 'area' name 'does not exists'
    ggArea = m.m.n2a.name
    if m.ggArea.free.0 > 0 then do
        fx = m.ggArea.free.0
        m.ggArea.free.0 = fx-1
        m = m.ggArea.free.fx
        end
    else do
        m.ggArea.0 = m.ggArea.0 + 1
        m = m.ggArea.address'.'m.ggArea.0
        end
    return m
endProcedure mNew

mFree: procedure expose m.
parse arg m
    p = 'M.P2A.'left(m, lastPos('.', m)-1)
    area = m.p
    fx = m.area.free.0 + 1
    m.area.free.0 = fx
    m.area.free.fx = m
    return
endProcedure mFree
/*--- iterate over all allocate elements of an area ------------------*/
mIterBegin: procedure expose m.
parse arg nm
    a = m.m.n2a.nm
    return m.a.address'.0'
endProcedure mIterBegin

mIter: procedure expose m.
parse arg cur
    if cur == '' then
        return ''
    lx = lastPos('.', cur)
    p = 'M.P2A.'left(cur, lx-1)
    a = m.p
    ix = substr(cur, lx+1)
    do ix=ix+1 to m.a.0
        n = m.a.address'.'ix
        do fx=1 to m.a.free.0 while m.a.free \== n
            end
        if fx > m.a.free.0 then
            return n
        end
    return ''
endProcedure mIter

/*--- get m.a --------------------------------------------------------*/
mGet: procedure expose m.
parse arg a
    return m.a
endProcedure mGet

/*--- put value v into m.a -------------------------------------------*/
mPut: procedure expose m.
parse arg a, v
    m.a = v
    return
endProcedure mPut

/*--- cut stem a to length len ---------------------------------------*/
mCut: procedure expose m.
parse arg a, len
    m.a.0 = len
    return a
endProcedure mCut

/*--- add one or several arguments to stem m.a -----------------------*/
mAdd: procedure expose m.
parse arg a
    ix = m.a.0
    do ax = 2 to arg()
        ix = ix + 1
        m.a.ix = arg(ax)
        end
    m.a.0 = ix
    return a'.'ix
endProcedure mAdd

/*--- pop last element from stem m.a ---------------------------------*/
mPop: procedure expose m.
parse arg a
    ix = m.a.0
    if ix < 1 then
        call err 'pop from empty stem' a
    m.a.0 = ix-1
    return m.a.ix
endProcedure mPop

/*--- add to m.dst.* a (sub)sequence of m.src.* ----------------------*/
mAddSt: procedure expose m.
    parse arg dst, src, fx , tx
    dx = m.dst.0
    if fx == '' then
        fx = 1
    if tx == '' then
        tx = m.src.0
    do sx = fx to tx
        dx = dx + 1
        m.dst.dx = m.src.sx
        end
    m.dst.0 = dx
    return
endProcedure mAddSt

/*--- find position of first occurrence of ele in stem m,
        return 0 if nonemove a part of a stem -----------------------*/
mPos: procedure expose m.
parse arg m, ele, sx
    if sx == '' then
        sx = 1
    do x=sx to m.m.0
        if m.m.x = ele then
            return x
        end
    return 0
endProcedure mPos

/*--- move a part of a stem ------------------------------------------*/
mMove: procedure expose m.
parse arg m, sx, dx
    if dx < sx then do
        y = dx
        do x=sx to m.m.0
            m.m.y = m.m.x
            y = y + 1
            end
        end
    else if dx > sx then do
        y = m.m.0 + dx - sx
        do x=m.m.0 by -1 to sx
            m.m.y = m.m.x
            y = y - 1
            end
        end
    m.m.0 = m.m.0 + dx - sx
    return
endProcedure mMove

/*--- insert a stem into another ------------------------------------*/
mInsert: procedure expose m.
parse arg m, tx, st
    call mMove m, tx, tx+m.st.0
    do sx=1 to m.st.0
        dx = tx-1+sx
            m.m.dx = m.st.sx
            end
    return
endProcedure mInsert

/*--- strip all elements of a stem -----------------------------------*/
mStrip: procedure expose m.
parse arg st, opt
    if opt == '' then
        opt = 'b'
    do x=1 to m.st.0
        m.st.x = strip(m.st.x, opt)
        end
    return st
endProcedure mStrip


/* cat the lines of a stem, possibly repeated --------------------------
       args: stem, fmt see fGen: -------------------------------------*/
mCat: procedure expose m.
parse arg st, fmt
    return mCatFT(st, 1, m.st.0, fmt)

mCatFT: procedure expose m.
parse arg st, fx, tx, fmt
    if tx < fx then
        return ''
    fmt = '%s%qn%s%qe%q^'fmt
    res = f(fmt, m.st.fx)
    do sx=fx+1 to tx
        res = res || f(fmt'%Qn', m.st.sx)
        end
    return res || f(fmt'%Qe')
endProcedure mCatFT

mIni: procedure expose m.
    if m.m.ini == 1 then
        return
    m.m.ini = 1
    call utIni
    m.mBase64 = m.ut.alfUC || m.ut.alfLc || m.ut.digits'+-'
    m.m.area.0 = 0
    call mNewArea
    return
endProcedure mIni

/* copy m end *********************************************************/
/* copy fTab begin ****************************************************/
fTabReset: procedure expose m.
parse arg m, m.m.titBef, m.m.titAft
    m.m.generated = ''
    m.m.0 = 0
    m.m.len = 0
    m.m.cols = ''
    m.m.tit.0 = words(m.m.titBef m.m.titAft) + 5
    m.m.set.0 = 0
    do tx=1 to m.m.tit.0
        m.m.tit.tx = ''
        end
    return m
endProcedure fTabReset

/* add a piece to title tx at current pos */
fTabAddTit: procedure expose m.
parse arg m, tx, t1
    m.m.generated = ''
    m.m.tit.tx = left(m.m.tit.tx, m.m.len) || t1
    return m
endProcedure fTabAddTit

/*--- set the infos for one column -----------------------------------*/
fTabSet: procedure expose m.
parse arg m, c1 aDone, f1, l1
    sx = m.m.set.0 + 1
    m.m.set.0 = sx
    m.m.set.sx = c1 aDone
    m.m.set.sx.fmt = f1
    m.m.set.sx.label = l1
    m.m.set.c1 = sx
    return
endProcedure fTabSet

fTabAdd: procedure expose m.
parse arg m, c1 aDone, f1, l1
    cx = m.m.0 + 1
    m.m.generated = ''
    m.m.0 = cx
    m.m.cols = m.m.cols c1
    if words(m.m.cols) <> cx then
        call err 'mismatch of column number' cx 'col' c1
    if length(aDone) > 1 | wordPos('<'aDone'>', '<> <0> <1>') < 1 then
        call err 'bad done' length(aDone) '<'aDone'> after c1' c1
    m.m.cx.col = c1
    m.m.cx.done = aDone \== 0
    if l1 == '' then
        m.m.cx.label = c1
    else
        m.m.cx.label = l1
    px = pos('%', f1)
    ax = pos('@', f1)
    if px < 1 | (ax > 0 & ax < px) then
        m.m.cx.fmt = f1
    else
        m.m.cx.fmt = left(f1, px-1)'@'c1 || substr(f1, px)
    m.fTabTst.c1 = m.m.cx.label
    t1 = f(f1, m.m.cx.label)
    if pos(strip(t1), m.m.cx.label) < 1 then
        t1 = left(left('', max(0, verify(t1, ' ') -1))m.m.cx.label,
           , length(t1))
    m.m.cx.len = length(t1)
    call fTabAddTit m, 1, t1
    do tx=2 to arg()-3
        if arg(tx+3) \== '' then
            call fTabAddTit m, tx, arg(tx+3)
        end
    m.m.len = m.m.len + length(t1)
    return m
endProcedure fTabAdd

fTabGenerate: procedure expose m.
parse arg m
    f = ''
    do kx=1 to m.m.0
        f = f || m.m.kx.fmt
        end
    m.m.fmt = m'.fmtKey'
    call fGen f, m.m.fmt

    cSta = m.m.tit.0+3
    do cEnd=cSta until kx > m.m.0
        cycs = ''
        do cx=cSta to cEnd
            m.m.tit.cx = ''
            cycs = cycs cx
            end
        cx = cSta
        ll = 0
        do kx=1 to m.m.0 while length(m.m.tit.cx) < max(ll,1)
            m.m.tit.cx = left(m.m.tit.cx, ll)m.m.kx.col
            cx = cx + 1
            if cx > cEnd then
                cx = cSta
            ll = ll + m.m.kx.len
            end
        end
    m.m.cycles = strip(cycs)
    m.m.tit.1 = translate(lefPad(m.m.tit.1, m.m.len), '-', ' ')'---'
    m.m.generated = m.m.generated't'
    return
endProcedure fTabGenerate

fTabColGen: procedure expose m.
parse arg m
    do kx=1 to m.m.0
        l = if(m.m.kx.label == m.m.kx.col, , m.m.kx.label)
        f = lefPad(l, 10) lefPad(m.m.kx.col, 18)
        if length(f) > 29 then
           if length(l || m.m.kx.col) < 29 then
               f = l || left('', 29 - length(l||m.m.kx.col))m.m.kx.col
           else
               f = lefPad(strip(l m.m.kx.col), 29)
        g = strip(m.m.kx.fmt)
        o = right(g, 1)
        if pos(o, 'dief') > 0 then
            f = f '@'m.m.kx.col'%12e @'m.m.kx.col'%18c'
        else if o = 'C' then
            f = f left(g, length(g)-1)'c'
        else
            f = f g
        m.m.kx.colFmt = f
        end
    m.m.generated = m.m.generated'c'
    return
endProcedure fTabColGen

fTab: procedure expose m.
parse arg m
    call fTabBegin m
    do forever
        i = inO()
        if i == '' then
           leave
        call out f(m.m.fmt, i)
        end
    return fTabEnd(m)
endProcedure fTab

fTabCol: procedure expose m.
parse arg m, i
    if pos('c', m.m.generated) < 1 then
        call fTabColGen m
    do cx=1 to m.m.0
        call out f(m.m.cx.colFmt, i)
        end
    return 0
endProcedure fTabCol

fTabBegin: procedure expose m.
parse arg m
    if pos('t', m.m.generated) < 1 then
        call fTabGenerate m
    return fTabTitles(m, m.m.titBef)

fTabEnd: procedure expose m.
parse arg m
    return fTabTitles(m, m.m.titAft)

fTabTitles: procedure expose m.
parse arg m, list
    list = repAll(list, 'c', m.m.cycles)
    do tx=1 to words(list)
        t1 = word(list, tx)
        call out m.m.tit.t1
        end
    return m
endProcedure fTabTitles
/* copy fTab end   ****************************************************/
/* copy f begin *******************************************************/
f: procedure expose m.
parse arg ggFmt, ggA1, ggA2
    if symbol('M.f.fmt.ggFmt') == 'VAR' then
        interpret M.f.fmt.ggFmt
    else
        interpret fGen(ggFmt)
endProcedure f

fAll: procedure expose m.
parse arg fmt
    do forever
        o = inO()
        if o == '' then
            return
        call out f(fmt, o)
        end
endProcedure f

/*--- format character2hex (if not sql null) -------------------------*/
fH: procedure expose m.
parse arg v, l
    if v \== m.sqlNull then
        v = c2x(v)
    if l >= 0 then
        return right(v, l)
    else
        return left(v, -l)
endProcedure fH

/*--- format integer or fixPoint Decimal -----------------------------*/
fI: procedure expose m.
parse arg v, l, d
    if datatype(v, 'n') then do
        if d == '' then
            v = format(v, ,0,0)
        else
            v = format(v, ,d,0)
        if abbrev(l, '+') then
            if \ abbrev(v, '-') then
                v = '+'v
        if length(v) > abs(l) then
            return right('', abs(l), '*')
        end
    if l >= 0 then
        return right(v, l)
    else
        return left(v, -l)
endProcedure fI

/*--- format floating point in E notitaion ---------------------------*/
fE: procedure expose m.
parse arg v, l, d, eChar
    if eChar == '' then
        eChar = 'e'
    if \ datatype(v, 'n') then
        return left(v, l)
    else if l = 7 then
        return fEStrip(format(v, 2, 2, 2, 0), 0, 2, 0, 2, eChar)
    else if l = 8 then
        return fEStrip(format(v, 2, 2, 2, 0), 1, 2, 0, 2, eChar)
    else if l < 7 then
        call err 'bad width fE('v',' l',' d')'
    else if d == '' then
        return fEStrip(format(v, 2, l-6, 2, 0), 1, l-6, 0, 2, eChar)
    else if l - d - 5 < 1 then
        call err 'bad prec fE('v',' l',' d')'
    else
        return fEStrip(format(v, 2, d, l-d-5, 0), 1, d, 1, l-d-5, eChar)
endProcedure fE

fEStrip: procedure expose m.
parse arg v, mSi, de, eSi, ePr, eChar
    parse var v ma 'E' ex
    if ex == '' then do
        ma = strip(ma, 't')
        ex = '+'left('', ePr, 0)
        end
    if eSi == 0 then do
        if abbrev(ex, '+') then
            ex = substr(ex, 2)
        else if abbrev(ex, '-0') then
            ex = '-'substr(ex, 3)
        else do
            exO = ex
            ex = left('-9', ePr, '9')
       /*   say 'format('ma '* (1E'exO') / (1E'ex'), 2,' de', 0)' */
            ma = format(ma * ('1E'exO) / ('1E'ex), 2, de, 0)
            end
        end
    if mSi == 0 then
        if abbrev(ma, ' ') then
            ma = substr(ma, 2)
        else
            ma = format(ma, 2, de-1)
    r = ma || eChar || ex
    if length(r) - length(eChar) <> 2 + mSi + de + eSi + ePr then
        call err 'bad fEStrip('v',' mSi',' de',' eSi',' ePr',' eChar ,
             || ') ==>' r 'bad len' length(r)
    return r
endProcedure fEStrip
/*--------------------------------------------------------------------
fGen: Format generator    should be compatible with fPrint|
 <<<< + extension of fPrint, - in fPrint but not implemented

 + \s   a single space
 + \n   a newLine
 + \%  \@ \\ the escaped char
   ('@' argN? '.'? field)?'%' flags? width? ('.' precision)? specifier
 specifier: is the most significant one and defines the type

 - c Character a
 - C Cut %-nC = left(v,n), %nC = right(v,n) %n.mC = substr(m, n)
 - d or i Signed decimal integer
 - e Scientific notation (mantissa/exponent) using e character 3.9265e+2
 - E Scientific notation (mantissa/exponent) using E character 3.9265E+2
 - f Decimal floating point
 - g Use the shorter of %e or %f
 - G Use the shorter of %E or %f
 - h Characters in hex
 - o Unsigned octal 610
 - S Strip(..., both)
 - u Unsigned decimal integer
 - x Unsigned hexadecimal integer
 - X Unsigned hexadecimal integer (capital letters)
 - p Pointer address
 - n Nothing printed. The argument must be a pointer to a signed int, wh
 + % A % followed by another % character will write % to stdout. %
 + Q for iterator first nxt end
 Flags:
 - - Left-justify within the given field width; Right justification is
 - + Forces to precede the result with a plus or minus sign (+ or -)
 - (space) If no sign is going to be written, a blank space is inserte
 - # Used with o, x or X specifiers the value is preceeded with 0, 0x
         force decimalpoint ...
 - 0 Left-pads the number with zeroes (0) instead of spaces, where pad
 + = reuse previous input argument

 length not implemented
----------------------------------------------------------------------*/
fGen: procedure expose m.
parse arg src, key
    if key == '' then do
        qSuf = right(src, 3)
        if length(qSuf) == 3 & abbrev(qSuf, '%Q') then
            s2 = left(src, length(src) - 3)
        else
            s2 = src
        call fGen s2, s2
        if symbol('m.f.fmt.src') == 'VAR' then
            return m.f.fmt.src
        call err fGen 'format' src 'still undefined'
        end
    call scanIni
    cx = 1
    ky = key
    do forever
        cy = pos('%q', src, cx)
        if cy < 1 then do
            m.f.fmt.ky = fGenCode(substr(src, cx), 'F.INFO.'ky)
            leave
            end
        m.f.fmt.ky = fGenCode(substr(src, cx, cy-cx), 'F.INFO.'ky)
        if substr(src, cy, 3) == '%q^' then do
            if substr(src, cy, 5) == '%q^%q' then
                cy = cy+3
            else if length(src) = cy + 2 then
                leave  /* do not overrite existing fmt | */
            end
        if cy > length(src)-2 then
            call err 'bad final %q in' src
        if substr(src, cy, 3) == '%q^' then
            ky = key
        else
            ky = key'%Q'substr(src, cy+2, 1)
        m.f.tit.ky.0 = 0
        cx = cy+3
        end
    if symbol('m.f.fmt.key') == 'VAR' then
        return m.f.fmt.key
    call scanErr fGen 'format' src 'still undefined'
endProcedure fGen

fGenCode: procedure expose m.
parse arg aS, jj
    jx = 0
    call scanSrc fGen, aS
    call scanSrc fGen, aS
    ax = 0
    cd = ''
    do forever
        txt = fText()
        if txt \== '' then
            cd = cd '||' quote(txt, "'")
        if scanEnd(fGen) then do
            m.jj.0 = jx
            if cd \== '' then
                return "return" substr(cd, 4)
            else
                return "return ''"
            end
        an = ''
        af = '-'
        if \ scanLit(fGen, '@') then do
            ax = ax + 1
            end
        else do
            if scanWhile(fGen, '0123456789') then
                ax = m.fGen.tok
            else if ax < 1 then
                ax = 1
            if substr(m.fGen.src, m.fGen.pos, 1) \== '%' then do
                call scanLit fGen, '.'
                af = fText()
                end
            end
        if \ scanLit(fGen, '%') then
            call scanErr fGen, 'missing %'
        call scanWhile fGen, '-+'
        flags = m.fGen.tok
        call scanWhile fGen, '0123456789'
        len   = m.fGen.tok
        siL = len
        if len \== '' & flags \== '' then
            siL = left(flags, 1)len
        prec  = ''
        if scanLit(fGen, '.') then do
            if len == '' then
                call scanErr fGen, 'empty len'
            call scanWhile fGen, '0123456789'
            prec = m.fGen.tok
            end
        call scanChar fGen, 1
        sp = m.fGen.tok
        if ax < 3 then
            aa = 'ggA'ax
        else
            aa = 'arg(' || (ax+1) || ')'
        if af \== '-' then do
            if af \== '' then
                af = '.'af
            if abbrev(aa, 'ggA') & pos('.GG', af) < 1 ,
                 & translate(af) == af then
                aa = 'm.'aa || af
            else
                aa = 'mGet('aa '||' quote(af, "'")')'
            end
        if sp = 'c' then do
            pd = word('rigPad lefPad', (pos('-', flags) > 0)+1)
            if prec \== '' then
                cd = cd '||' pd'(substr('aa',' prec'),' len')'
            else
                cd = cd '||' pd'('aa',' len')'
            end
        else if sp = 'C' then do
            if prec \== '' then
                cd = cd '|| substr('aa',' prec',' len')'
            else if pos('-', flags) > 0 then
                cd = cd '|| left('aa',' len')'
            else
                cd = cd '|| right('aa',' len')'
            end
        else if sp == 'H' then
            cd = cd "|| fH("aa", '"siL"')"
        else if sp == 'h' then
            cd = cd "|| translate(fH("aa", '"siL"'), 'abcdef','ABCDEF')"
        else if sp == 'i' then do
            cd = cd "|| fI("aa", '"siL"'"
            if prec == '' then
                cd = cd')'
            else
                cd = cd',' prec')'
            end
        else if sp == 'E' | sp == 'e' then
            cd = cd "|| fE("aa"," len"," prec", '"sp"')"
        else if sp == 's' then
            cd = cd '||' aa
        else if sp = 'S' then
            cd = cd '|| strip('aa')'
        else
            call scanErr fGen, 'bad specifier' sp
        jx = jx + 1
        m.jj.jx.arg = ax
        m.jj.jx.name = af
        end
endProcedure fGenCode

fText: procedure expose m. ft.
    res = ''
    do forever
        if scanUntil(fGen, '\@%') then
            res = res || m.fGen.tok
        if \ scanLit(fGen, '\') then
            return res
        call scanChar fGen, 1
        if pos(m.fGen.tok, 's\@%') < 1 then
            res = res'\' || m.fGen.tok
        else
            res = res || translate(m.fgen.tok, ' ', 's')
        end
endProcedure fText

/* copy f end   *******************************************************/
/* copy err begin *** errorhandling, messages, help    ****************/
errIni: procedure expose m.
    if m.err.ini == 1 then
        return
    m.err.ini     = 1
    m.err.handler = ''
    m.err.cleanup = ';'
    m.err.opt     = ''
    parse source m.err.os .
    m.err.ispf    = 0
    m.err.screen  = 0
    if m.err.os \== 'LINUX' then
        if sysVar('sysISPF') = 'ACTIVE' then do
            m.err.ispf = 1
            address ispExec 'vget zScreen shared'
            m.err.screen = zScreen
            end
    return
endProcedure errIni

/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
    call errIni
    parse arg m.err.opt, m.err.handler
    if pos('I', translate(m.err.opt)) > 0 & m.err.ispf then
        address ispExec 'control errors return'
    return
endSubroutine errReset

/*--- error routine: abend with message ------------------------------*/
err:
    parse arg ggTxt, ggOpt
    call errIni
    drop err handler cleanup opt call return
    if ggOpt == '' & m.err.handler \== '' then
        interpret m.err.handler
    call errSay 'f}'ggTxt
    call errCleanup
    if ggOpt == '' then
        ggOpt = m.err.opt
    upper ggOpt
    if pos('T', ggOpt) > 0  then do
        trace ?r
        say 'trace ?r in err'
        end
    if pos('H', ggOpt) > 0 & m.err.eCat == 'f' then do
        call errSay ' }errorhandler exiting with divide by zero' ,
                                   'to show stackHistory'
        x = 1 / 0
        end
    call errSay ' }errorhandler exiting with exit(12)'
    exit errSetRc(12)
endSubroutine err

/*--- set rc for ispf: -------------------------------------------------
    if a cmd is run by ispStart, its RC is ignored,
         but ISPF passes the value of the shared variable zIspfRc
         back as return code
----------------------------------------------------------------------*/
errSetRc: procedure expose m.
parse arg zIspfRc
    if m.err.ispf then
        address ispExec vput 'zIspfRc' shared
    return zIspfRc
endProcedure errSetRc

/*--- error routine: user message cleanup exit -----------------------*/
errAddCleanup: procedure expose m.
parse arg code
    call errIni
        /* concatenate backwards, then it is executed also backwards */
    m.err.cleanup = ';'code || m.err.cleanup
    return
endProcedure errAddCleanup

errRmCleanup: procedure expose m.
parse arg code
    call errIni
    cx = pos(';'code';', m.err.cleanup)
    if cx > 0 then
        m.err.cleanup = left(m.err.cleanup, cx) ,
                     || substr(m.err.cleanup, cx + length(code)+2)
    return
endProcedure errRmCleanup

errCleanup: procedure expose m.
    call errIni
    errCleanup = m.err.cleanup
    if errCleanup <> ';' then do
        m.err.cleanup = ';'
        say 'err cleanup begin' errCleanup
        interpret errCleanup
        say 'err cleanup end' errCleanup
        end
    if symbol('m.tso.ddAlloc') == 'VAR' then
        call tsoFreeAll
    return
endProcedure errCleanup

/*--- say an errorMessage msg with pref and linesplits --------------*/
errSay: procedure expose m.
parse arg msg
    return saySt(errMsg(msg))

/*--- prefix an errormessage with pref,
          split it into lines at \n to stem m.err -------------------*/
errMsg: procedure expose m.
parse arg msg
    m.err.eCat = 'f'
    do while substr(msg, 2, 1) == '}'
        parse var msg m.err.eCat '}' msg
        end
    res = msg
    if m.err.eCat <> '' then do
       pTxt = ',error,fatal error,input error,s-}scanErr,warning,'
 /*    pTxt = ',error,fatal error,input error,syntax error,warning,' */
       px = pos(','m.err.eCat, pTxt)
       if px < 1 then do
           m.err.eCat = 'f'
           px = pos(','m.err.eCat, pTxt)
           end
       res = substr(pTxt, px+1, pos(',', pTxt, px+2)-px-1)
       if substr(res, 3, 1) == '}' then
           parse var res 2 opt 3 br 4 res
       if opt == '-' then
           res = res msg
       else do
           parse source . . s3 .              /* current rexx */
           res = res 'in' s3':' msg
           end
       end
    return splitNl(err, res)           /* split lines at \n */
endProcedure errMsg

splitNL: procedure expose m.
parse arg st, msg
    bx = 1
    do lx=1 to 20
        ex = pos('\n', msg, bx)
        if ex < bx then
            leave
        m.st.lx = substr(msg, bx, ex-bx)
        bx = ex+2
        end
    m.st.lx = substr(msg, bx)
    m.st.0 = lx
    return st
endProcedure splitNL

/*--- say (part of) the lines of a stem ----------------------------*/
saySt: procedure expose m.
parse arg st, fx, tx
    do lx=word(fx 1, 1) to word(tx m.st.0, 1)
        say m.st.lx
        end
    return st
endProcedure saySt

/*--- out (part of) the lines of a stem ----------------------------*/
outSt: procedure expose m.
parse arg st, fx, tx
    do lx=word(fx 1, 1) to word(tx m.st.0, 1)
        call out m.st.lx
        end
    return st
endProcedure outSt

/*--- say a trace message if m.trace is set --------------------------*/
debug: procedure expose m.
parse arg msg
    if m.debug == 1 then
        say 'debug:' msg
    return
endProcedure debug

/*--- output a trace if m.trace is set -------------------------------*/
trc: procedure expose m.
parse arg msg
    if m.trace == 1 then
        call out 'trc:' msg
    return
endProcedure trc

/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
    interpret 'assertRes =' arg(1)
    if assertRes \==1 then
        call err 'assert failed' arg(1) '==>' assertRes':' arg(2)
    return
endProcedure assert

/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg
    call errSay 'i}'msg
    call help 0
    call err 'i}'msg
endProcedure errHelp

/*--- display the first comment block of the source as help ----------*/
help: procedure expose m.
parse arg doClear
    if doClear \== 0 then
        address tso 'clear'
    parse source . . s3 .
    say right(' help for rexx' s3, 72, '*')
    do lx=1 while pos('/*', sourceLine(lx)) < 1
        if lx > 10 then
            return err('initial commentblock not found for help')
        end
    doInc = 1
    ho = m.err.helpOpt
    do lx=lx+1 to sourceline() while pos('*/', sourceline(lx)) = 0
        li = strip(sourceLine(lx), 't')
        cx = lastPos('{', li)
        if cx > 0 then do
            if length(ho) = 1 then
                doInc = cx = length(li) | pos(ho, li, cx+1) > 0
            li = left(li, cx-1)
            end
        if doInc then
            say li
        end
    say right(' end help for rexx' s3, 72, '*')
    return 4
endProcedure help

/* copy err end   *****************************************************/
/* copy ut begin  *****************************************************/
utIni: procedure expose m.
    if m.ut.ini == 1 then
        return
    m.ut.ini = 1
    m.ut.digits = '0123456789'
    m.ut.alfLC  = 'abcdefghijklmnopqrstuvwxyz'
    m.ut.alfUC  = translate(m.ut.alfLc)
    m.ut.Alfa   = m.ut.alfLc || m.ut.alfUC
    m.ut.alfNum = m.ut.alfa || m.ut.digits
    m.ut.alfDot = m.ut.alfNum || '.'
    m.ut.alfId  = m.ut.alfNum'_' /* avoid rexx allowed @ # $ ¬ . | ? */
    m.ut.alfIdN1 = m.ut.digits    /* not as first character */
    m.ut.alfRex  = m.ut.Alfa'.0123456789@#$?' /* charset puff mit ¬*/
    m.ut.alfRexN1= '.0123456789'
    m.ut.alfPrint = m.ut.alfNum'+-*/=()¢!{}<> .:,;?|''"%&#@$£\_'
    return
endProcedure utIni
/*--- if function  warning all3 arguments get evaluated|
                   e.g if(x=0, 'infinity', 1/0) will fail| -----------*/
if: procedure expose m.
parse arg co, ifTrue, ifFalse
    if co then
        return ifTrue
    else
        return ifFalse
endProcedure if
/*--- embedded ASSignement:
      assign the second argument to the variable with name in first arg
      and return the value assigned ----------------------------------*/
ass:
    call value arg(1), arg(2)
    return arg(2)
/*--- embedded ASSignement return NotNull:
      assign the second argument to the variable with name in first arg
      and return 1 if value not null, 0 if null ----------------------*/
assNN:
    call value arg(1), arg(2)
    return arg(2) \== ''

/*--- return current time and cpu usage ------------------------------*/
utTime: procedure expose m.
    return time() 'ela='time('E') 'cpu='sysvar('syscpu'),
            'su='sysvar('syssrv')

tstUtTime: procedure expose m.
    say 'begin' utTime()  sysvar('sysnode')
    do 3000000
       end
    say 'end  ' utTime()
return

/*--- sleep several seconds ------------------------------------------*/
sleep: procedure expose m.
parse arg secs, sayIt
    if sayit <> 0 then
        say 'sleeping' secs 'secs' time()
    CALL SYSCALLS 'ON'
    ADDRESS SYSCALL "sleep" secs
    CALL SYSCALLS 'OFF'
    if sayit <> 0 then
        say 'slept' secs 'secs' time()
    return
endProcedure sleep

/*--- left without truncation ----------------------------------------*/
lefPad: procedure expose m
parse arg s, len
    if length(s) >= len then
        return s
    return left(s, len)
endProcedure lefPad

/*--- right without truncation ---------------------------------------*/
rigPad: procedure expose m
parse arg s, len
    if length(s) >= len then
        return s
    return right(s, len)
endProcedure rigPad

/*--- quote string txt using quoteChar qu ("" ==> ") -----------------*/
quote: procedure expose m.
parse arg txt, qu
    if qu = '' then
        qu = '"'
    res = qu
    ix = 1
    do forever
        qx = pos(qu, txt, ix)
        if qx = 0 then
            return res || substr(txt, ix) || qu
        res = res || substr(txt, ix, qx-ix) || qu || qu
        ix = qx + length(qu)
        end
endProcedure quote

/*--- translate to lowercase -----------------------------------------*/
ut2lc: procedure expose m.
parse arg s
    return translate(s, m.ut.alfLc, m.ut.alfUc)

/*--- verify an id ---------------------------------------------------*/
verifId: procedure expose m.
    parse arg src, extra
    if pos(left(src, 1), m.ut.alfIdN1) > 0 then
        return 1
    else
        return verify(src, m.ut.alfId || extra, 'n')

/*--- return the count of occurrences of needle in heyStack ----------*/
posCount: procedure expose m.
parse arg needle, hayStack, start, fin
    if start = '' then
        start = 1
    if fin = '' then
        fin = length(hayStack) + 1 - length(needle)
    do cnt = 0 by 1
        start = pos(needle, haystack, start)
        if start < 1 | start > fin then
             return cnt
        start = start + length(needle)
        end
endProcedure posCount

repAll: procedure expose m.
parse arg src
    do ax = 2 by 2 to arg()
        src = repAl2(src, src, arg(ax), arg(ax+1))
        end
    return src
endProcedure repAll

repAl2: procedure expose m.
parse arg src, sPos, old, new
    res = ''
    cx = 1
    do forever
        nx = pos(old, sPos, cx)
        if nx < 1 then
            return res || substr(src, cx)
        res = res || substr(src, cx, nx-cx) || new
        cx = nx + length(old)
        end
endProcedure repAl2

repAllWords: procedure expose m.
parse arg src, w, new
    res = ''
    wx = 0
    cx = 1
    do forever
        wx = wordPos(w, src, wx+1)
        if wx < 1 then
            return res || substr(src, cx)
        nx = wordindex(src, wx)
        res = res || substr(src, cx, nx-cx) || new
        cx = nx + length(w)
        end
endProcedure repAllWords
/* 6opy ut end ********************************************************/
}¢--- A540769.WK.REXX.O13(DDLX) cre=2013-06-12 mod=2013-06-12-14.29.09 A540769 ---
/* rexx ****************************************************************
  ddlx edit macro to exclude less important lines from ddlCheck report
       argument: W for W-changes: show object to change or drop
                 C for C-changes: show objects to create or drop
--- history ------------------------------------------------------------
12. 6.13 walter neu
 ********/ /*** end of help ********************************************
***********************************************************************/
    call errReset 'hI'
    if adrEdit('macro (spec) PROCESS', '*') \== 0 then
        exit err(' }not used as editmacro rc='rc )
    sp = ut2lc(spec)
    if sp == 'w' then
        showNewOld = '=-'
    else if sp == 'c' | spec == '' then
        showNewOld = '+-'
    else
        call errHelp "s}bad macro argument '"spec"'"
    call adrEdit 'reset'
    call adrEdit '(ll) = lineNum .zl'
    fnd = 0
    do lx=ll by -1 to 4
        call adrEdit '(li) = line' lx
        cat = strip(substr(li, 5, 2))
        if abbrev(cat, 's') then do
            if cat == 's' & pos(left(li, 1), showNewOld) < 1 ,
                    & \ fnd  then
                call adrEdit 'xstatus' lx '= x'
            fnd = 0
            end
        else if wordPos(strip(cat), 'o a') > 0 then
             call adrEdit 'xstatus' lx '= x'
        else
            fnd = 1
        end
    exit
/* copy adrIsp begin *************************************************/
/**********************************************************************
    lmd: catalog read
    call sequence: lmdBegin, lmdNext*, lmdEnd
        mit lmd service (mit save in file und read,
                         weil list zu langsam und listcat abstürzt)
        1. arg (grp)     als group dataset für lmd save
                         und dd name für file read
***********************************************************************/
lmdBegin: procedure expose m.
    parse arg grp, lev
    call adrIsp 'lmdinit listid(lmdId) level('lev')'
    res = adrIsp('lmdlist listid(&lmdId) option(save) group('grp')', 4)
    call adrIsp 'lmdfree listid(&lmdId)'
    if res = 0 then do
        call trc timing() 'lmdlist save' grp lev
        call adrTso 'alloc dd('grp') shr dsn('grp'.datasets)'
        end
    else do
        call trc 'no datasets found' timing() 'lmdlist save' grp lev
        call adrTso 'alloc dd('grp') dummy'
        end
    call tsoOpen grp, 'R'
return /* end lmdBegin */

lmdNext:
    parse arg ggGrp, ggSt, withVolume
    if \ readDD(ggGrp, ggSt) then
         return 0
    if withVolume \== 1 then
        do ggIx=1 to value(ggSt'0')
            x = value(ggSt || ggIx, word(value(ggSt || ggIx), 1))
            end
    return 1
endSubroutin lmdNext

lmdEnd: procedure expose m.
    parse arg grp
    call tsoClose grp
    call adrTso 'free dd('grp')'
return /* end lmdEnd */

lmd: procedure expose m.
    parse arg lev, withVol
    call lmdBegin gg1, lev
    do while lmdNext(gg1, q., withVol)
        do x=1 to q.0
           call out q.x
           end
        end
    call lmdEnd gg1
    return
endProcedure lmd
/**********************************************************************
    member list of a pds:
        call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmm: procedure expose m.
parse arg dsn
    id = lmmBegin(dsn)
    do ix=1 by 1
        m = lmmNext(id)
        if m = '' then
            leave
        call out m
        end
    call lmmEnd id
    return
endProcedure lmm

lmmBegin: procedure expose m.
parse arg dsn
    mbr = dsnGetMbr(dsn)
    pds = dsnSetMbr(dsn, )
    call adrIsp "LMINIT DATAID(lmmId) DATASET('"pds"') ENQ(SHRW)"
    call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
    res = lmmId
    if mbr <> '' then
        res = res 'pattern('mbr')'
    return res
endProcedure lmmBegin

lmmEnd: procedure expose m.
parse arg lmmId opt
    call adrIsp "LMMLIST DATAID("lmmId") option(free)", 8
    call adrIsp "LMCLOSE DATAID("lmmId")"
    call adrIsp "LMFREE DATAID("lmmId")"
    return
endProcedure lmmEnd

lmmNext: procedure expose m.
parse arg lmmId opt
    if adrIsp("LMMLIST DATAID("lmmid")" ,
               "OPTION(LIST) MEMBER(Mbr)" opt, 4 8) = 0 then
        return strip(mbr)
    else
        return ''
endProcedure lmmNext

lmmRm: procedure expose m.
parse arg dsn, mbrs
    mbrs = dsnGetMbr(dsn) mbrs
    pds = dsnSetMbr(dsn, )
    call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
    call adrIsp "LMOPEN DATAID("lmmId") OPTION(OUTPUT) "
    err = ''
    do wx=1 to words(mbrs)
        m1 = word(mbrs, wx)
        rr = adrIsp("lmmDel dataid("lmmId") member("m1")", 0 8 12)
        if rc = 0 then
            say 'removed' m1 'from' pds
        else if rc = 8 then
            say 'not found' m1 'in' pds
        else do
            err = 'error deleting' m1 'in' pds 'rc' rr strip(zerrlm)
            say err
            leave
            end
        end
    call adrIsp "LMCLOSE DATAID("lmmId")"
    call adrIsp "LMFREE DATAID("lmmId")"
    if err <> '' then
        call err err
    return
endProcedure lmmRm
/*--- address ispf with error checking -------------------------------*/
adrIsp:
    parse arg ggIspCmd, ggRet
    address ispexec ggIspCmd
    if rc = 0 then return 0
    else if ggRet == '*' then return rc
    else if wordPOS(rc, ggRet) > 0 then return rc
    else
        call err 'adr ispExec rc' rc 'in' ggIspCmd':' strip(zerrlm)
endSubroutine adrIsp

/*--- address editor with error checking -----------------------------*/
adrEdit:
    parse arg ggEditCmd, ggRet
    address isrEdit ggEditCmd
    if rc = 0 then return 0
    else if ggRet == '*' then return rc
    else if wordPOS(rc, ggRet) > 0 then return rc
    else
        call err 'adr isrEdit rc' rc 'for' ggEditCmd
endSubroutine adrEdit
/* copy adrIsp end   *************************************************/
/* copy adrTso begin *************************************************/
/*--- send ggTsoCmd to tso, fail if rc <> 0 or not listed in ggRet ---*/
adrTso:
    parse arg ggTsoCmd, ggRet
    address tso ggTsoCmd
    if rc == 0                     then return 0
    else if ggRet == '*'           then return rc
    else if wordPos(rc, ggRet) > 0 then return rc
    else
        call err 'adrTso rc' rc 'for' ggTsoCmd
return /* end adrTso */

/*--- format dsn from tso format to jcl format -----------------------*/
dsn2jcl: procedure expose m.
parse upper arg dsn ., addPrefix
    if left(dsn,1) = "'" then
        return strip(dsn, 'b', "'")
    sp = sysvar('SYSPREF')
    if sp == '' then
        sp = userid()
    cx = pos('~', dsn)
    if cx < 1 & addPrefix == 1 then
        return sp'.'dsn
    do while cx \== 0
        le = left(dsn, cx-1)
        ri = substr(dsn, cx+1)
        if right(le, 1) == '.' | left(ri, 1) == '.' then
            dsn = le || sp || ri
        else
            dsn = le || left('.', le \== '') || sp ,
                     || left('.', ri \== '') || ri
        cx = pos('~', spec, cx)
        end
    return dsn
endProcedure dsn2Jcl

/*--- format dsn from jcl format to tso format -----------------------*/
jcl2dsn: procedure expose m.
parse arg dsn .
    return "'"dsn"'"
endProcedure jcl2dsn

dsnSetMbr: procedure expose m.
parse arg dsn, mbr
     bx = pos('(', dsn)
     if bx > 0 then
         dsn = strip(left(dsn, bx-1))
     if mbr <> '' then
         dsn = dsn'('strip(mbr)')'
     return dsn
endProcedure dsnSetMbr

dsnGetMbr: procedure expose m.
parse arg dsn
     lx = pos('(', dsn)
     rx = pos(')', dsn, lx+1)
     if lx < 1 then
         return ''
     else if lx < rx then
         return substr(dsn, lx+1, rx-lx-1)
     else
         return strip(substr(dsn,lx+1))
endProcedure dsnGetMbr
/**********************************************************************
    io: read or write a dataset with the following callsequences:
        read:  tsoOpen...'R', readDD*,  tsoClose
        write: tsoOpen...'W', writeDD*, tsoClose

        readDD returns true if data read, false at eof
        do not forget that open is mandatory to write empty file|
***********************************************************************/

/*--- open dd for read (rw='R') or write (rw='W') --------------------*/
tsoOpen: procedure expose m.
parse upper arg dd, rw
    return adrTso('execio' 0 'disk'RW tsoDD(dd, 'o') '(open)')
return /* end tsoOpen */

/*--- close dd -----------------------------------------------------*/
tsoClose: procedure expose m.
    parse upper arg dd
    return adrTso('execio 0 diskW' dd '(finis)')
endProcedure tsoClose

/*--- read from DD ggDD into ggSt, return false at eof ---------------*/
readDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt = '' then
        ggCnt = 100
    call adrTso 'execio' ggCnt 'diskR' ggDD '(stem' ggSt')', 2
    return (value(ggSt'0') > 0)
return /* end readDD */

/*--- write to gg ggDD from stem ggSt, ggCnt records -----------------*/
writeDD:
    parse arg ggDD, ggSt, ggCnt
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    call adrTso 'execio' ggCnt 'diskW' ggDD '(stem' ggSt')'
    return
endSubroutine writeDD

/*--- readNx: read next line, using buffer ---------------------------*/
/*--- begin: allocate dsnSpec and ini ------------------------ -------*/
readNxBegin: procedure expose m.
    parse arg m, m.m.dsn, m.m.dd, m.m.Cnt
    if m.m.dd = '' then
        m.m.dd = 'DDNX*'
    if m.m.cnt = '' then
        m.m.cnt = 1000
    m.m.cx = m.m.cnt + 999
    m.m.buf0x = 0
    m.m.0 = 0
    parse value dsnAlloc('dd('m.m.dd')' m.m.dsn) with m.m.dd m.m.free
    call tsoOpen m.m.dd, 'R'
    return m
endProcedure readDDNxBegin

/*--- return the stem of the next line, or '' at end -----------------*/
readNx: procedure expose m.
parse arg m
    m.m.cx = m.m.cx + 1
    if m.m.cx <= m.m.0 then
        return m'.'m.m.cx
    m.m.buf0x = m.m.buf0x + m.m.0
    if \ readDD(m.m.dd, 'M.'m'.', m.m.cnt)then
        return ''
    m.m.cx = 1
    return m'.1'
endProcedure readDDNx
/*--- return the stem of the curr line, '' at end --------------------*/
readNxCur: procedure expose m.
parse arg m
    if m.m.cx <= m.m.0 then
        return m'.'m.m.cx
    else
        return ''
endProcedure readNxCur

/*--- return the position (line number) of reader
           plus le characters of the current line (default 50) ------*/
readnxPos: procedure expose m.
parse arg m, le
    li = m'.'m.m.cx
    li = strip(m.li, 't')
    if arg() < 2 then
        le = 50
    if le < 1 then
        li = ''
    else if length(li) <= le then
        li = ':' li
    else
        li = ':' left(li, le-3)'...'
    return 'line' (m.m.buf0x + m.m.cx)li
endProcedure readnxPos

/*--- close and deallocate ------------------------------------------*/
readNxEnd: procedure expose m.
parse arg m
    call tsoClose m.m.dd
    call tsoFree m.m.free
    return
endProcedure readDDNxEnd

/*--- standardise a dsn spec
       word1             dsName or -
       word2             dd     or -
       word3             disp   or -
       word4 to first :  attributes in tso format
       after first :     attributes for new allocation
----------------------------------------------------------------------*/
dsnSpec: procedure expose m.
parse upper arg spec
    rr = ''      /* put leading - in separate words */
    do sx=1 while words(rr) < 3 & wx \= ''
        wx = word(spec, sx)
        do while abbrev(wx, '-') & words(rr) < 3
            wx = substr(wx, 2)
            rr = rr '-'
            end
        rr = rr wx
        end
    spec = rr subWord(spec, sx)
    na = ''
    dd = ''
    di = ''
    if left(spec, 1) = '&' then /* external spec is handled ok */
        spec = strip(substr(spec, 2))
    do wx=1 by 1
        w = word(spec, wx)
        if w = '' | abbrev(w, '.') | abbrev(w, ':') then
            leave
        else if wordPos(w, 'OLD SHR MOD NEW')>0 | abbrev(w, 'SYSO') then
            di = w
        else if w = 'CATALOG' then
            di = di w
        else if abbrev(w, 'DD(') then
            dd = substr(w, 4, length(w)-4)
        else if abbrev(w, 'DSN(') then
            na = strip(substr(w, 5, length(w)-5))
        else if na == '' then
            na = dsn2jcl(w)
        else if pos('(', w) > 0 then
            leave
        else if dd == '' then
            dd = w
        else if di == '' then
            di = w
        else
            leave
        end
    if na == '' then
        na = '-'
    else if abbrev(na, "'") then
        na = substr(na, 2, length(na)-2)
    if dd == '' then dd = '-'
    if di == '' then di = '-'
    re = subword(spec, wx)
    if abbrev(re, '.') then
        re = substr(re, 2)
    return na dd di re
endProcedure dsnSpec

/*--- alloc a dsn with dsnAlloc
          if the dsn is inuse wait and retry
          until either the allocation is successfull
          or the timeout occurs --------------------------------------*/
dsnAllocWait: procedure expose m.
parse upper arg spec, pDi, pDD, timeOut
    x = max(1, arg() - 1)
    do rt=0
        m.adrTsoAl.1 = ''
        m.adrTsoAl.2 = ''
        m.adrTsoAl.3 = ''
        call outtrap m.adrTsoAl.
        res = dsnAlloc(spec, pDi, pDD, '*')
        call outtrap off
        if \ datatype(res, 'n') then
            return res
        msg = m.adrTsoAl.1'\n'm.adrTsoAl.2'\n'm.adrTsoAl.3
        if rt > timeOut & timeOut \== '' then
            return err('timeout allocating' spec time() '\n'msg)
        if pos('DATA SET IS ALLOCATED TO ANOTHER', msg) < 1 then
            return err('allocating' spec'\n'msg)
        say time() 'sleep and retry alloc' spec
        call sleep 1, 0
        end
endProcedure dsnAllocWait

/*--- alloc a dsn or a dd
          spec '-'<ddName>
               datasetName? disposition? '.'? attributes? (':' newAtts)?
          disp default disposition
          dd   default dd name
          retRc   erlaubte ReturnCodes (leer = 0)
          returns if ok then ddName <rexx for free> otherwise rc -----*/
dsnAlloc: procedure expose m.
parse upper arg spec, pDi, pDD, retRc
    parse value dsnSpec(spec) with na dd di rest
    if na = '-' then
        m.dsnAlloc.dsn = ''
    else
        m.dsnAlloc.dsn = na
    if dd == '-' & pDD \== '' then
        dd = pDD
    if dd == '-' then
        dd = 'DD*'
    dd = tsoDD(dd, 'a')
    if na == '-' & di == '-' & rest = '' then
        return dd
    if di = '-' then
        if pDi == '' then
            di = 'SHR'
        else
            di = pDi
    if pos('(', na) < 1 then
        nop
    else if di = 'MOD' then
        call err 'disp mod for' na
    else
        di = 'SHR'
    if pos('/', na) > 0 then
        rx = csmAlloc(na dd di rest, retRc)
    else
        rx = tsoAlloc(na dd di rest, retRc)
    if rx = 0 then
        return dd dd
    else
        return rx
endProcedure dsnAlloc

/*--- find a free dd with prefix dd ----------------------------------*/
tsoDD: procedure expose m.
parse arg dd, f
    if symbol('m.tso.ddAlloc') \== 'VAR' then do
        call errIni
        m.tso.ddAlloc = ''
        m.tso.ddOpen  = ''
        end
    if m.err.ispf then
        address ispExec 'vget wshTsoDD shared'
    else
        wshTsoDD = m.tso.ddAlloc
    if f == '-' then do
        ax = wordPos(dd, m.tso.ddAlloc)
        if ax > 0 then
            m.tso.ddAlloc = delWord(m.tso.ddAlloc, ax, 1)
        ox = wordPos(dd, m.tso.ddOpen)
        if ox > 0 then
            m.tso.ddOpen  = delWord(m.tso.ddOpen , ox, 1)
        if ax < 1 & ox < 1 then
            call err 'tsoDD dd' dd 'not used' m.tso.ddAlloc m.tso.ddOpen
        sx = wordPos(dd, wshTsoDD)
        if sx > 0 then
            wshTsoDD  = delWord(wshTsoDD , sx, 1)
        end
    else if f == 'o' then do
        if wordPos(dd, m.tso.ddOpen m.tso.ddAlloc) < 1 then
            m.tso.ddOpen = strip(m.tso.ddOpen dd)
        end
    else if f <> 'a' then do
        call err 'tsoDD bad fun' f
        end
    else do
        if right(dd, 1) = '*' then do
            dd = left(dd, length(dd)-1) || m.err.screen
            cx = lastPos(' 'dd, ' 'm.tso.ddAlloc)
            if cx > 0 then do
                old = word(substr(m.tso.ddAlloc, cx), 1)
                if old = dd then
                    dd = dd'1'
                else if datatype(substr(old, length(dd)+1), 'n') then
                    dd = dd || (substr(old, length(dd)+1) + 1)
                else
                    call err 'tsoDD old' old 'suffix not numeric dd' dd
                end
            end
        if wordPos(dd, m.tso.ddAlloc) < 1 then
            m.tso.ddAlloc = strip(m.tso.ddAlloc dd)
        if wordPos(dd, wshTsoDD) < 1 then
            wshTsoDD = strip(wshTsoDD dd)
        end
    if m.err.ispf then
        address ispExec 'vPut wshTsoDD shared'
    return dd
endProcedure tsoDD

tsoAlloc: procedure expose m.
parse arg na dd disp rest ':' nn, retRc
    c = 'alloc dd('dd')' disp
    if na \== '-' then
        c = c "DSN('"na"')"
    else if disp = 'NEW' and nn \== '' then
        c = c dsnCreateAtts(,nn)
    call outtrap m.adrTsoAl.
    alRc = adrTso(c rest, '*')
    call outtrap off
    if alRc =  0 then
        return 0
    if nn \= '' & wordPos(disp, 'OLD SHR') > 0 ,
          & sysDsn("'"m.dsnAlloc.dsn"'") == 'DATASET NOT FOUND' then do
        say 'tsoAlloc creating' c rest ':'nn
        call adrTso 'alloc dd('dd') new catalog' dsnCreateAtts(na, nn)
        call adrTso 'free  dd('dd')'
        return tsoAlloc(na dd disp rest, retRc)
        end
    say 'rc='alRc 'for' c rest
    call saySt adrTsoal
    if retRc = '*' | wordPos(alRc, retRc) > 0 then
        return alRc
    call err 'tsoAlloc rc' alRc 'for' c rest
endProcedure tsoAlloc

tsoAtts: procedure expose m.
parse arg dsn
    rc = listDsi("'"dsn"' SMSINFO")
    if rc = 0 then
        mv = ''
    else if rc = 4 & sysReason = 19 then do
        mv = 'UNITCNT(30)'
        say 'multi volume' mv
        end
    else if rc ^= 0 then
        call err 'listDsi rc' rc 'reason' sysReason,
                             sysMsgLvl1 sysMsgLvl2
    al = 'CAT'
    al = ''
    if right(sysDsSms, 7) == 'LIBRARY' ,
        | abbrev(sysDsSms, 'PDS') then
         al = al 'DSNTYPE(LIBRARY)'
    if sysUnits = 'TRACK' then
        sysUnits = 'TRACKS'
    return al "DSORG("sysDSorg") MGMTCLAS("sysMgmtClass")",
        "DATACLAS("sysDataClass")" ,
        "RECFM("translate('1 2 3', ' 'sysREcFM, ' 123')")",
        "LRECL("SYSLRECL")",
        "SPACE("sysPrimary"," sysSeconds")" sysUnits mv
    /*  "blksize("sysBLkSIZE")" removed 3.4.13: let sms do the magic */
endProcedure tsoAtts

tsoFree: procedure expose m.
parse arg ddList, ggRet
    do dx=1 to words(ddList)
        dd = word(ddList, dx)
        call adrTso 'free dd('dd')', ggRet
        call tsoDD dd, '-'
        end
    return
endProcedure tsoFree

tsoFreeAll: procedure expose m.
    all = m.tso.ddAlloc m.tso.ddOpen
    do ax = 1 to words(all)
        call adrTso 'execio 0 diskW' word(all, ax) '(finis)', '*'
        end
    m.tso.ddOpen = ''
    call tsoFree m.tso.ddAlloc, '*'
    return
endProcedure tsoFreeAll

dsnCreateAtts: procedure expose m.
parse arg dsn, atts, forCsm
    forCsm = forCsm == 1
    aU = ' 'translate(atts)
    res = ''
    if dsn \== '' then
        res = "dataset('"dsnSetMbr(dsn)"')"
    if abbrev(atts, '~') then
        return res tsoAtts(substr(atts, 2))
    if abbrev(atts, ':') then do
        parse var atts a1 atts
        rl = substr(a1, 3)
        if abbrev(a1, ':F') then do
            if rl = '' then
                rl = 80
            recfm='f b'
            end
        else do
            if rl = '' then
                rl = 32756
            recfm = substr(a1, 2, 1) 'b'
            end
        res =  res "recfm("space(recfm, 1-forCsm)") lrecl("rl")"
        end
    if pos('(', dsn) > 0 & pos(' DSNTYPE(', aU) < 1 ,
                         & pos(' DSORG(',   aU) < 1 then
        res = res 'dsntype(library) dsorg(po)'
    if pos(' MGMTCLAS(', aU) < 1 then
        res = res 'mgmtclas(COM#A091)'
    if pos(' SPACE(', aU) < 1 then
        res = res 'space(10, 1000) cyl' || copies('inder', forCsm)
    return res atts
endProcedure dsnCreateAtts
/*--- check if a dataset is archive ------------------------------------
          returns 'ok'                    if dataset on disk
                  'not'                   if dataset is not catalogued
                  'arc'                   if dataset archived
                  listDsi errorMsg        otherwise ------------------*/
dsnArc: procedure expose m.
parse upper arg dsn
    lc = listDsi("'"strip(dsn)"' noRecall")
    if lc = 0 then
        return 'ok'
    else if lc=4 & sysReason = 19 then  /* multiple volumes */
        return 'ok'
    else if lc=16 & sysReason = 5 then
        return 'notCat'
    else if lc=16 & sysReason = 9 then
        return 'arc'
    else
        return 'listDsi cc='lc', sysReason='sysReason ,
                          'm2='sysMsgLvl2', m1='sysMsgLvl1
endProcedure dsnArc
/*--- read the dataset specified in ggDsnSpec to stem ggSt -----------*/
readDSN:
parse arg ggDsnSpec, ggSt
    ggAlloc = dsnAlloc(ggDsnSpec, 'SHR', 'readDsN')
    call adrTso 'execio * diskr' word(ggAlloc, 1) '(stem' ggSt' finis)'
    call tsoFree word(ggAlloc, 2)
    return
endSubroutine readDsn

/*--- write the dataset specified in ggDsnSpec from stem ggSt
          write ggCnt records if not empty otherwise ggst0
          if ggSay 1 then say ... records written to ... -------------*/
writeDSN:
parse arg ggDsnSpec, ggSt, ggCnt, ggSay
    if ggCnt == '' then
        ggCnt = value(ggst'0')
    ggAlloc = dsnAlloc(ggDsnSpec, 'OLD', 'readDsN')
    call adrTso 'execio' ggCnt 'diskw' word(ggAlloc, 1) ,
            '(stem' ggSt 'open finis)'
    call tsoFree word(ggAlloc, 2)
    if ggSay == 1 | m.debug == 1 then
       say ggCnt 'records written to' ggDsnSpec
    return
endSubroutine writeDsn

copyDSN: procedure expose m.
parse arg frSpec, toSpec, ggSay
    parse value dsnAlloc(frSpec, 'SHR', 'FRDD') with frDD frFr
    parse value dsnAlloc(toSpec, 'OLD', 'TODD') with toDD toFr
    call tsoOpen frDD, 'R'
    call tsoOpen toDD, 'W'
    cnt = 0
    do while readDD(frDD, r.)
        call writeDD toDD, r.
        cnt = cnt + r.0
        end
    call tsoClose frDD
    call tsoClose toDD
    call tsoFree frFr toFr
    if ggSay == 1 | m.debug == 1 then
       say cnt 'records copied from' frSpec 'to' to toSpec
    return
endSubroutine writeDsn
/* copy adrTso end ****************************************************/
/* copy err begin *** errorhandling, messages, help    ****************/
errIni: procedure expose m.
    if m.err.ini == 1 then
        return
    call utIni
    m.err.ini     = 1
    m.err.handler = ''
    m.err.cleanup = ';'
    m.err.opt     = ''
    parse source m.err.os .
    m.err.ispf    = 0
    m.err.screen  = 0
    if m.err.os \== 'LINUX' then
        if sysVar('sysISPF') = 'ACTIVE' then do
            m.err.ispf = 1
            address ispExec 'vget zScreen shared'
            m.err.screen = zScreen
            end
    return
endProcedure errIni

/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
    call errIni
    parse arg m.err.opt, m.err.handler
    if pos('I', translate(m.err.opt)) > 0 & m.err.ispf then
        address ispExec 'control errors return'
    return
endSubroutine errReset

/*--- error routine: abend with message ------------------------------*/
err:
    parse arg ggTxt, ggOpt
    call errIni
    drop err handler cleanup opt call return
    if ggOpt == '' & m.err.handler \== '' then
        interpret m.err.handler
    call errSay 'f}'ggTxt
    call errCleanup
    if ggOpt == '' then
        ggOpt = m.err.opt
    upper ggOpt
    if pos('T', ggOpt) > 0  then do
        trace ?r
        say 'trace ?r in err'
        end
    if pos('H', ggOpt) > 0 & m.err.eCat == 'f' then do
        call errSay ' }errorhandler exiting with divide by zero' ,
                                   'to show stackHistory'
        x = 1 / 0
        end
    call errSay ' }errorhandler exiting with exit(12)'
    exit errSetRc(12)
endSubroutine err

/*--- set rc for ispf: -------------------------------------------------
    if a cmd is run by ispStart, its RC is ignored,
         but ISPF passes the value of the shared variable zIspfRc
         back as return code
----------------------------------------------------------------------*/
errSetRc: procedure expose m.
parse arg zIspfRc
    if m.err.ispf then
        address ispExec vput 'zIspfRc' shared
    return zIspfRc
endProcedure errSetRc

/*--- error routine: user message cleanup exit -----------------------*/
errAddCleanup: procedure expose m.
parse arg code
    call errIni
        /* concatenate backwards, then it is executed also backwards */
    m.err.cleanup = ';'code || m.err.cleanup
    return
endProcedure errAddCleanup

errRmCleanup: procedure expose m.
parse arg code
    call errIni
    cx = pos(';'code';', m.err.cleanup)
    if cx > 0 then
        m.err.cleanup = left(m.err.cleanup, cx) ,
                     || substr(m.err.cleanup, cx + length(code)+2)
    return
endProcedure errRmCleanup

errCleanup: procedure expose m.
    call errIni
    errCleanup = m.err.cleanup
    if errCleanup <> ';' then do
        m.err.cleanup = ';'
        say 'err cleanup begin' errCleanup
        interpret errCleanup
        say 'err cleanup end' errCleanup
        end
    if symbol('m.tso.ddAlloc') == 'VAR' then
        call tsoFreeAll
    return
endProcedure errCleanup

/*--- say an errorMessage msg with pref and linesplits --------------*/
errSay: procedure expose m.
parse arg msg
    return saySt(errMsg(msg))

/*--- prefix an errormessage with pref,
          split it into lines at \n to stem m.err -------------------*/
errMsg: procedure expose m.
parse arg msg
    m.err.eCat = 'f'
    do while substr(msg, 2, 1) == '}'
        parse var msg m.err.eCat '}' msg
        end
    res = msg
    if m.err.eCat <> '' then do
       pTxt = ',error,fatal error,input error,syntax error,warning,'
       px = pos(','m.err.eCat, pTxt)
       if px < 1 then do
           m.err.eCat = 'f'
           px = pos(','m.err.eCat, pTxt)
           end
       res = substr(pTxt, px+1, pos(',', pTxt, px+2)-px-1)
       if substr(res, 3, 1) == '}' then
           parse var res 2 opt 3 br 4 res
       if opt == '-' then
           res = res msg
       else do
           parse source . . s3 .              /* current rexx */
           res = res 'in' s3':' msg
           end
       end
    return splitNl(err, res)           /* split lines at \n */
endProcedure errMsg

splitNL: procedure expose m.
parse arg st, msg
    bx = 1
    do lx=1 to 20
        ex = pos('\n', msg, bx)
        if ex < bx then
            leave
        m.st.lx = substr(msg, bx, ex-bx)
        bx = ex+2
        end
    m.st.lx = substr(msg, bx)
    m.st.0 = lx
    return st
endProcedure splitNL

/*--- say (part of) the lines of a stem ----------------------------*/
saySt: procedure expose m.
parse arg st, fx, tx
    do lx=word(fx 1, 1) to word(tx m.st.0, 1)
        say m.st.lx
        end
    return st
endProcedure saySt

/*--- out (part of) the lines of a stem ----------------------------*/
outSt: procedure expose m.
parse arg st, fx, tx
    do lx=word(fx 1, 1) to word(tx m.st.0, 1)
        call out m.st.lx
        end
    return st
endProcedure outSt

/*--- say a trace message if m.trace is set --------------------------*/
debug: procedure expose m.
parse arg msg
    if m.debug == 1 then
        say 'debug:' msg
    return
endProcedure debug

/*--- output a trace if m.trace is set -------------------------------*/
trc: procedure expose m.
parse arg msg
    if m.trace == 1 then
        call out 'trc:' msg
    return
endProcedure trc

/*--- assert that the passed rexx expression evaluates to true -------*/
assert:
    interpret 'assertRes =' arg(1)
    if assertRes \==1 then
        call err 'assert failed' arg(1) '==>' assertRes':' arg(2)
    return
endProcedure assert

/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg
    call errSay 'i}'msg
    call help 0
    call err 'i}'msg
endProcedure errHelp

/*--- display the first comment block of the source as help ----------*/
help: procedure expose m.
parse arg doClear
    if doClear \== 0 then
        address tso 'clear'
    parse source . . s3 .
    say right(' help for rexx' s3, 72, '*')
    do lx=1 while pos('/*', sourceLine(lx)) < 1
        if lx > 10 then
            return err('initial commentblock not found for help')
        end
    doInc = 1
    ho = m.err.helpOpt
    do lx=lx+1 to sourceline() while pos('*/', sourceline(lx)) = 0
        li = strip(sourceLine(lx), 't')
        cx = lastPos('{', li)
        if cx > 0 then do
            if length(ho) = 1 then
                doInc = cx = length(li) | pos(ho, li, cx+1) > 0
            li = left(li, cx-1)
            end
        if doInc then
            say li
        end
    say right(' end help for rexx' s3, 72, '*')
    return 4
endProcedure help

/* copy err end   *****************************************************/
/* copy ut begin  *****************************************************/
utIni: procedure expose m.
    if m.ut.ini == 1 then
        return
    m.ut.ini = 1
    m.ut.digits = '0123456789'
    m.ut.alfLC  = 'abcdefghijklmnopqrstuvwxyz'
    m.ut.alfUC  = translate(m.ut.alfLc)
    m.ut.Alfa   = m.ut.alfLc || m.ut.alfUC
    m.ut.alfNum = m.ut.alfa || m.ut.digits
    m.ut.alfDot = m.ut.alfNum || '.'
    m.ut.alfId  = m.ut.alfNum'_' /* avoid rexx allowed @ # $ ¬ . | ? */
    m.ut.alfIdN1 = m.ut.digits    /* not as first character */
    m.ut.alfRex  = m.ut.Alfa'.0123456789@#$?' /* charset puff mit ¬*/
    m.ut.alfRexN1= '.0123456789'
    m.ut.alfPrint = m.ut.alfNum'+-*/=()¢!{}<> .:,;?|''"%&#@$£\_'
    return
endProcedure utIni
/*--- if function  warning all3 arguments get evaluated|
                   e.g if(x=0, 'infinity', 1/0) will fail| -----------*/
if: procedure expose m.
parse arg co, ifTrue, ifFalse
    if co then
        return ifTrue
    else
        return ifFalse
endProcedure if
/*--- embedded ASSignement:
      assign the second argument to the variable with name in first arg
      and return the value assigned ----------------------------------*/
ass:
    call value arg(1), arg(2)
    return arg(2)
/*--- embedded ASSignement return NotNull:
      assign the second argument to the variable with name in first arg
      and return 1 if value not null, 0 if null ----------------------*/
assNN:
    call value arg(1), arg(2)
    return arg(2) \== ''

/*--- return current time and cpu usage ------------------------------*/
utTime: procedure expose m.
    return time() 'ela='time('E') 'cpu='sysvar('syscpu'),
            'su='sysvar('syssrv')

tstUtTime: procedure expose m.
    say 'begin' utTime()  sysvar('sysnode')
    do 3000000
       end
    say 'end  ' utTime()
return

/*--- sleep several seconds ------------------------------------------*/
sleep: procedure expose m.
parse arg secs, sayIt
    if sayit <> 0 then
        say 'sleeping' secs 'secs' time()
    CALL SYSCALLS 'ON'
    ADDRESS SYSCALL "sleep" secs
    CALL SYSCALLS 'OFF'
    if sayit <> 0 then
        say 'slept' secs 'secs' time()
    return
endProcedure sleep

/*--- left without truncation ----------------------------------------*/
lefPad: procedure expose m
parse arg s, len
    if length(s) >= len then
        return s
    return left(s, len)
endProcedure lefPad

/*--- right without truncation ---------------------------------------*/
rigPad: procedure expose m
parse arg s, len
    if length(s) >= len then
        return s
    return right(s, len)
endProcedure rigPad

/*--- quote string txt using quoteChar qu ("" ==> ") -----------------*/
quote: procedure expose m.
parse arg txt, qu
    if qu = '' then
        qu = '"'
    res = qu
    ix = 1
    do forever
        qx = pos(qu, txt, ix)
        if qx = 0 then
            return res || substr(txt, ix) || qu
        res = res || substr(txt, ix, qx-ix) || qu || qu
        ix = qx + length(qu)
        end
endProcedure quote

/*--- translate to lowercase -----------------------------------------*/
ut2lc: procedure expose m.
parse arg s
    return translate(s, m.ut.alfLc, m.ut.alfUc)

/*--- verify an id ---------------------------------------------------*/
verifId: procedure expose m.
    parse arg src, extra
    if pos(left(src, 1), m.ut.alfIdN1) > 0 then
        return 1
    else
        return verify(src, m.ut.alfId || extra, 'n')

/*--- return the count of occurrences of needle in heyStack ----------*/
posCount: procedure expose m.
parse arg needle, hayStack, start, fin
    if start = '' then
        start = 1
    if fin = '' then
        fin = length(hayStack) + 1 - length(needle)
    do cnt = 0 by 1
        start = pos(needle, haystack, start)
        if start < 1 | start > fin then
             return cnt
        start = start + length(needle)
        end
endProcedure posCount

repAll: procedure expose m.
parse arg src
    do ax = 2 by 2 to arg()
        src = repAl2(src, src, arg(ax), arg(ax+1))
        end
    return src
endProcedure repAll

repAl2: procedure expose m.
parse arg src, sPos, old, new
    res = ''
    cx = 1
    do forever
        nx = pos(old, sPos, cx)
        if nx < 1 then
            return res || substr(src, cx)
        res = res || substr(src, cx, nx-cx) || new
        cx = nx + length(old)
        end
endProcedure repAl2

repAllWords: procedure expose m.
parse arg src, w, new
    res = ''
    wx = 0
    cx = 1
    do forever
        wx = wordPos(w, src, wx+1)
        if wx < 1 then
            return res || substr(src, cx)
        nx = wordindex(src, wx)
        res = res || substr(src, cx, nx-cx) || new
        cx = nx + length(w)
        end
endProcedure repAllWords
/* copy ut end ********************************************************/
}¢--- A540769.WK.REXX.O13(DEL) cre=2011-09-27 mod=2011-09-27-15.40.01 A540769 ---
$#@
call sqlConnect dbaf
call sqlPreOpen 51, 'select i1, i2 from A540769.twk600a040'
do cx=1 while sqlFetchInto(51, ':i1, :i2')
    say i1 i2
    if cx // 2 = 0 then do
    call sqlExec 'delete from A540769.twk600a040 where current of c51'
    say 'deleted' sqlCode
    end
    if cx // 8 = 0 then do
    call sqlcommit
    say 'commited' sqlCode
    end
    end
$#out                                              20110927 15:37:45
*** run error ***
SQLCODE = -504: CURSOR NAME C51 IS NOT DECLARED
stmt =  execSql fetch c51 into :i1, :i2
with i1 = I1
     i2 = I2
$#out                                              20110927 15:30:02
*** run error ***
SQLCODE = -518: THE EXECUTE STATEMENT DOES NOT IDENTIFY A
    VALID PREPARED STATEMENT
stmt =  execSql fetch c1 into :i1, :i2
with i1 = 62
     i2 = -194297
$#out                                              20110927 15:29:02
*** run error ***
SQLCODE = -518: THE EXECUTE STATEMENT DOES NOT IDENTIFY A
    VALID PREPARED STATEMENT
stmt =  execSql fetch c1 into :i1, :i2
with i1 = 54
     i2 = 344185
$#out                                              20110927 15:24:50
*** run error ***
SQLCODE = -104: ILLEGAL SYMBOL "HOLD". SOME SYMBOLS THAT
    MIGHT BE LEGAL ARE: RR, RS, CS, UR
src select i1, i2 from A540769.twk600a040 with hold
  >                           >>>pos 44 of 47>>>
stmt =  execSql prepare s1  from :src
with src = select i1, i2 from A540769.twk600a040 with hold
$#out                                              20110927 15:23:53
*** run error ***
SQLCODE = -104: ILLEGAL SYMBOL "HOLD". SOME SYMBOLS THAT
    MIGHT BE LEGAL ARE: RR, RS, CS, UR
src select i1, i2 from A540769.twk600a040 with hold
  >                           >>>pos 44 of 47>>>
stmt =  execSql prepare s1  from :src
with src = select i1, i2 from A540769.twk600a040 with hold
$#out                                              20110927 15:22:30
}¢--- A540769.WK.REXX.O13(DIFF) cre= mod= --------------------------------------
/*REXX*****************************************************************
       OMS.DIV.P0.STAT.RZ2.Y04M11
       OMS.DIV.P0.STAT.RZ2.SOR.Y04M11
 **********************************************************************/
parse arg left right
if left = '' then
    left = "'OMS.DIV.P0.STAT.RZ1.Y04M12'"
    /* left = 'POVDOKU.des.y04m09' */
if right = '' then
    right = "'OMS.DIV.P0.STAT.RZ1.Y04M12.SV041218'"
    /* right = 'POVDOKU.old.y04m09' */
call diffThree left, right
exit
call diffOne 'POVDOKU.lib(dif04X10)'

diffThree: procedure
parse arg left, right
    sayCnt = 0
    call adrTso "ALLOC DS("left") F(fiLe) REU SHR "
    call adrTso "ALLOC DS("right") F(fiRi) REU SHR "
    laDiff = ''
    leFi = 1
    leX = 0
    leRc = leRead()
    riX = 0
    riRc = riRead()
    toLeSk = 0
    toRiSk = 0
    to0 = 0
    to10 = 0
    toXX = 0
    toSub = 0
    toLeDay = 0
    toRiDay = 0
    laSay = ''
    do while leRc = 0 & riRc = 0
        if leKey <> riKey then do
            diff = ''
            call addDiff
            leSk = 0
            riSk = 0
            do while leRc = 0 & riRc = 0
                if leKey = riKey then
                    leave
                else if leKey = riKey1 | leKey = riKey2 | leKey=riKey3 ,
                      | leKey = riKey4 then do
                    if leRead() = 0 then
                        leSk = leSk + 1
                    end
                else if riKey = leKey1 | riKey = leKey2 | riKey=leKey4 ,
                      | riKey = leKey4 then do
                    if riRead() = 0 then
                        riSk = riSk + 1
                    end
                else if left(reRi1, 8) = 'SUBFILE=' then do
                      call riRead
                      toSub = toSub + 1
                    end
                else if left(leKey, 3) > left(riKey, 3) then do
                    if laLeDay <> left(leKey, 3) then do
                        say 'skip left begin day' left(leKey, 3)
                        laLEDay = left(LEKey, 3)
                        end
                    call LeRead
                    toLeDay = toLeDay + 1
                    end
                else if left(leKey, 3) < left(riKey, 3) then do
                    if laRiDay <> left(riKey, 3) then do
                        say 'skip right begin day' left(riKey, 3)
                        laRiDay = left(riKey, 3)
                        end
                    call riRead
                    toRiDay = toRiDay + 1
                    end
                else do
                    say 'key not found' leX riX 'key' leKey riKey
                    call leRead
                    leSk = leSk + 1
                    end
                end
          /* say 'skipped left' leSk 'to' leX 'right' riSk 'to' riX */
            toLeSk = toLeSk + leSk
            toRiSk = toRiSk + riSk
            leFi = leX
            end
        if laSay <> left(leKey, 3) then do
            say time() leX riX 'skip' toLeSk toRiSk 'sub' toSub ,
                  'day' toLeDay toRiDay 'after day' laSay
            laSay = left(leKey, 3)
            end
        diff = diff(reLe1, reRi1)
        if diff <> laDiff then
            call addDiff
        call leRead
        call riRead
        end
    if leRc = 0 then
         call addDiff 1
    else do
         leX = leX + 1
         call addDiff
         leX = leX - 1
         end
    say 'end left' leX 'rc' leRc 'right' riX 'rc' riRc
    say 'tot = ' to0 ', <10' to10 ', >' toXX
    say 'skip left ' toLeSk 'right' toRiSk ,
               'sub' toSub 'day' toLeDay toRiDay
return /* diffThree */

addDiff:
parse arg sayIt
    if leFi < leX & sayIt = '1' then do
        say time() forRange(leFi, leX-1, 15) laDiff
        sayCnt = sayCnt + 1
        end
    if length(laDiff) < 1 then
        to0 = to0 + leX - leFi
    else if length(laDiff) < 10 then
        to10 = to10 + leX - leFi
    else
        toXX = toXX + leX - leFi
    laDiff = diff
    leFi = leX
return /* end addDiff */

diffTwo: procedure
parse arg left, right
    sayCnt = 0
    call adrTso "ALLOC DS("left") F(fiLe) REU SHR "
    call adrTso "ALLOC DS("right") F(fiRi) REU SHR "
    laDiff = ''
    leFi = 1
    leRc = adrTsoRc("EXECIO 1 DISKRU fiLe (STEM reLe)")
    leX = 1
    riRc = adrTsoRC("EXECIO 1 DISKRU fiRi (STEM reRi)")
    riX = 1
    toLeSk = 0
    toRiSk = 0
    to0 = 0
    to10 = 0
    toXX = 0
    do while lx < 300000 & sayCnt < 300 & leRc = 0 & riRc = 0
        diff = diff(reLe1, reRi1)
        leRc = adrTsoRc("EXECIO 1 DISKRU fiLe (STEM reLe)")
        riRc = adrTsoRC("EXECIO 1 DISKRU fiRi (STEM reRi)")
        if diff <> laDiff then do
            if laDiff <> '' then do
                say time() forRange(leFi, leX-1, 15) laDiff
                sayCnt = sayCnt + 1
                if length(laDiff) < 10 then
                    to10 = to10 + leX - leFi
                else
                    toXX = toXX + leX - leFi
                end
            else
                to0 = to0 + leX - leFi
            leKey = bitXor(substr(reLe1, 124, 3),,'ff'x) ,
                        || substr(reLe1,5,44)
            riKey = bitXor(substr(reRi1, 124, 3),,'ff'x) ,
                       ||  substr(reRi1,5,44)
            leSk = 0
            riSk = 0
            do while leRc = 0 & riRc = 0
                if leKey < riKey then do
                    leRc = adrTsoRc("EXECIO 1 DISKRU fiLe (STEM reLe)")
                    leKey = bitXor(substr(reLe1, 124, 3),,'ff'x) ,
                               || substr(reLe1,5,44)
                    leSK = leSk + 1
                    end
                else if leKey > riKey then do
                    riRc = adrTsoRc("EXECIO 1 DISKRU fiRi (STEM reRi)")
                    riSk = riSk + 1
                    riKey = bitXor(substr(reRi1, 124, 3),,'ff'x) ,
                               || substr(reRi1,5,44)
                    end
                else
                    leave
                end
            leX = leX + leSk
            toLeSk = toLeSk + leSk
            riX = riX + riSk
            toRiSk = toRiSk + riSk
            if leSk = 0 & riSk = 0 then do
                laDiff = diff
                end
            else do
                say 'skipped left ' leSk 'to' (leX + 1) ,
                       'right ' riSk 'to' (riX + 1)
                laDiff = diff(reLe1, reRi1)
                end
            leFi = leX
            end
        else if (leX-leFi) // 10000 = 0 then
            say time() leX riX 'laDiff' laDiff
        leX = leX + 1
        riX = riX + 1
        end
    if leX > leFi then do
        say time() forRange(leFi, leX-1, 15) laDiff
        if length(laDiff) < 1  then
            to0 = to0 + leX - leFi
        else if length(laDiff) < 10 then
            to10 = to10 + leX - leFi
        else
            toXX = toXX + leX - leFi
        end
    if leRc <> 0 then
        leX = leX - 1
    if riRc <> 0 then
        riX = riX - 1
    say 'end left' leX 'rc' leRc 'right' riX 'rc' riRc
    say 'tot = ' to0 ', <10' to10 ', >' toXX
    say 'skip left ' toLeSk 'right' toRiSk
return /* diffTwo */

leRead:
    leRc = adrTsoRc("EXECIO 1 DISKRU fiLe (STEM reLe)")
    if leRc <> 0 then
        return leRc
    leX = leX + 1
    key = substr(reLe1, 124, 3)substr(reLe1,5,44)
    if leKey <> key then do
        leKey4 = leKey3
        leKey3 = leKey2
        leKey2 = leKey1
        leKey1 = leKey
        leKey = key
        end
return 0; /* leRead */

riRead:
    riRc = adrTsoRc("EXECIO 1 DISKRU fiRi (STEM reRi)")
    if riRc <> 0 then
        return riRc
    riX = riX + 1
    key = substr(reRi1, 124, 3)substr(reRi1,5,44)
    if riKey <> key then do
        riKey4 = riKey3
        riKey3 = riKey2
        riKey2 = riKey1
        riKey1 = riKey
        riKey = key
        end
return 0; /* riRead */

diffOne: procedure
parse arg left
    call adrTso "ALLOC DS("left") F(fiLe) REU SHR "
    laDiff = ''
    rf = 1
    call adrTSO "EXECIO 1 DISKRU fiLe (STEM reLe)"
    call adrTSO "EXECIO 1 DISKRU fiLe (STEM reRi)"
    do rx=2 by 1 while (reRi0 = 1)
        if (rx // 50000) < 20 | rx > 250000 then do
        diff = diff(reLe1, reRi1)
        if diff <> laDiff then do
            if laDiff <> '' then
                say time() forRange(rf, rx-1, 15) laDiff
            laDiff = diff
            rf = rx
            end
        reLe1 = reRi1
        end
        call adrTSO "EXECIO 1 DISKRU fiLe (STEM reRi)"
        end
    if laDiff <> '' then
        say forRange(rf, rx-1, 15) laDiff
return /* diffTwo */

forRange: procedure
parse arg rf, rt, le
    if rf = rt then
        res = rf
    else
        res = rf'-'rt
    if le = '' then
        return res
    if le <= length(res) then
        return res
    else
        return left(res, le)
/* end forRange */

diff: procedure
parse arg le, ri
    if length(le) < length(ri) then
        cz = length(le)
    else
        cz = length(ri)
    cx = 1
    diff = ''
    do while(cx <= cz)
        cy = compare(substr(le, cx), substr(ri, cx))
        if cy = 0 then
            leave
        cy = cx + cy - 1
        do cx = cy + 1 to cz while substr(le, cx, 1)<>substr(ri, cx, 1)
            end
        diff = diff forRange(cy, cx-1)
        end
    if length(le) < length(ri) then
        diff = diff "right" (length(le)+1) || '-' || length(ri)
    else if length(le) > length(ri) then
        diff = diff "left" (length(ri)+1) || '-' || length(le)
return diff /* end diff */

showtime:
parse arg showmsg
    say time() sysvar('syscpu') sysvar('syssrv') showmsg
return 0

adrTsoRc:
    parse arg adrCmd
    address tso adrCmd
return rc  /* end adrTsoRc */

adrTso:
    parse arg adrCmd
    address tso adrCmd
    if rc <> 0 then
        call err 'adrTso rc' rc 'for' adrCmd
return /* end adrTso */

adrIspRc:
    parse arg adrCmd
    address ispexec adrCmd
return rc /* end adrIspRc */

adrIsp:
    parse arg adrCmd
    address ispexec adrCmd
    if rc <> 0 then
        call err 'adrIsp rc' rc 'for' adrCmd
return /* end adrIsp */

adrEdit:
    parse arg adrCmd, ret
    address isrEdit adrCmd
    if rc <> 0 then
        call err 'adr isrEdit rc' rc 'for' adrCmd
return /* end adrEdit */

adrEditRc:
    parse arg adrCmd
    address isrEdit adrCmd
return rc /* end adrEditRc */

err:
    parse arg txt
    say 'fatal error in ??:' txt
exit 12
}¢--- A540769.WK.REXX.O13(DODREORG) cre= mod= ----------------------------------
/* rexx ****************************************************************

DodReorg     Rexx for monthly ReorgJob for dod-log-Tabel tid150a1
********

Function:
    generate 6 sysin files for db2 load jobs
    to drop partitions (with old data) from dod-log-table tid150a1

    the following partitions are selected:
        * not empty and
        * tid150tst older than 270 days and
        * partition not used between yesterday and next 5 days

Input:
    Arguments: none
    dd partIn
        an sql report (=> dod...parm(sqlPart)) generated by dsntiaul
        the following columns are used (extracted with word(line,x))
            xNam = 1      name of the table      --+
            xCre = 2      creator of the table     +-- catalog info
            xPar = 5      partition number       --+
            xMD  = 6      tid150md               --+
            xCnt = 7      number of rows           +-- table data
            xTst1 = 11    minimum tid150tst        ¨
            xTst2 = 12    maximum tid150tst      --+

Output:
    return code:
        0:  ok, 1-6 partitions selected for drop
        4:  ok, 0   partitions selected for drop
      >=8:  error
    dd ddUtil1, ddUtil2, ..., ddUtil6
        each file contails
            either input statements for DSNUTILB
                to load on partition xPar of xCre.xNam
                (with an empty inputfile this empties the partition|)
            or an empty line (so DSNUTILB does nothing with rc=4)
    dd SYSREC00: a copy of the sql report (dd partIn)
    dd SYSPRT:   some messages

History:
    13.01.04 created Walter Keller, KPCO4
***********************************************************************/
    say date('e') time() 'start rexx dodReorg'
    call analysePartRep 'partIn', 'sysRec00', 'ddUtil'
    say 'written' uCnt 'utilFile for delete of a partition'
    u.1 = ''
    do i=uCnt+1 to 6
        call adrTso 'execio 1 diskW ddUtil'i '(stem u.)'
        end
    say date('e') time() 'end   rexx dodReorg'
    if uCnt = 0 then
        exit 4
    else
        exit 0
exit

analysePartRep:
parse arg paIn, paOut, util
/*----------------------------------------------------------------------
    analyse the sql partition report in dd paIn and copy it to dd paOut
    write dd DSNUTILB statements to dd util'1', util'2' etc
----------------------------------------------------------------------*/
    xNam = 1                           /* report layout */
    xCre = 2
    xPar = 5
    xMD  = 6
    xCnt = 7
    xTst1 = 11
    xTst2 = 12
    call makeDates date('s')    /* comput dates dKeep pKeepV pKeepB */
                                /* read an write partition report */
    call adrTso 'execio * diskr' paIn '(stem pr.)'
    say 'read' pr.0 'lines'
    call adrTso 'execio' pr.0 'diskW' paOut '(stem pr.)'

    uCnt = 0
    do i=1 to pr.0                     /* each line of the report */
        pr.i = strip(pr.i, 't', '00'x) /* remove zeros */
        md = word(pr.i, xMD)
        r = ''
        if pKeepV < pKeepB then do     /* check partition limit */
            if pKeepV <= md & pKeepB >= md then
                r = '<md>'
                end
        else if pKeepV <= md | pKeepB >= md then
                r = '>md<'

        if word(pr.i, xCnt) = 0 then
            say 'empty' r' partition' md,
                 word(pr.i, xCre)'.'word(pr.i, xNam)'.'word(pr.i, xPar)
        else do
            if word(pr.i, xTst2) > dKeep then
                r = r 'tst2'           /* data too young */
            say r 'partition' md,
                 word(pr.i, xCre)'.'word(pr.i, xNam)'.'word(pr.i, xPar),
                 'cnt' word(pr.i, xCnt),
                 word(pr.i, xTst1) '-' word(pr.i, xTst2)
            if r = '' then do          /* delete partition */
                uCnt = uCnt + 1
                call writeUtil util || uCnt, ,
                    word(pr.i, xCre)'.'word(pr.i, xNam), ,
                    word(pr.i, xPar)
                end
            end
        end
return /* end analysePartRep */

writeUtil: procedure
parse arg dd, table, part
/*----------------------------------------------------------------------
    write to dd dd the statement to load part part of table table
----------------------------------------------------------------------*/
    say '>>> write dd' dd 'for drop table' table 'partition' part
    u.1 = 'LOAD DATA LOG YES'
    u.2 = '    INTO TABLE' table 'PART' part
    u.3 = '    INDDN SYSREC00 REPLACE'
    call adrTso 'execio 3 diskW' dd '(stem u.)'
return /* end util */

makeDates:
parse arg dt
/*----------------------------------------------------------------------
    compute the 3 dates
        dKeep: keep date younger than this date, db2-timestamp format
        pKeepV: yesterday in format mmdd
        pKeepB: today+21  in format mmdd
----------------------------------------------------------------------*/
    pKeepV = substr(dateAdd(dt, -1), 5, 4)
    pKeepB = substr(dateAdd(dt, 21), 5, 4) /* ensure next partition| */
    dKeep  = dateAdd(dt, -270)
    dKeep = left(dKeep, 4)'-'substr(dKeep, 5, 2)'-'right(dKeep,2)
    say dKeep 'from' dt 'part' pKeepV '-' pKeepB
    say 'criteria TST <=' dKeep ,
         'and limit (MD) not between' pKeepV 'and' pKeepB
return /* end makeDates  */

dateAdd: procedure
parse arg dt, nu
/*----------------------------------------------------------------------
    add nu days to date dt in format yyyymmdd, nu may be negative
----------------------------------------------------------------------*/
return date('s', (date('b', dt, 's') + nu), 'b')

testDateAdd: procedure
parse arg d
    say d '+1' dateAdd(d, 1) '+40' dateAdd(d, 40) '+70' dateAdd(d, 70) ,
                          '+365' dateAdd(d,365) '+366' dateAdd(d, 366)
    say d '-1' dateAdd(d,-1) '-40' dateAdd(d,-40) '-70' dateAdd(d,-70) ,
                          '-365' dateAdd(d,-365) '-366' dateAdd(d,-366)
return

err: procedure expose m.
parse arg txt
    say 'fatal error' txt
    if m.pipe.errDump = '1' then
        call pipeDump
    say 'exiting rexx dodreorg'
exit 8

adrTsoRc:
    parse arg tsoCmd
    address tso tsoCmd
return rc  /* end adrTsoRc */

adrTso:
    parse arg tsoCmd
    address tso tsoCmd
    if rc <> 0 then
        call err 'adrTso rc' rc 'for' tsoCmd
return /* end adrTso */

adrIspRc:
    parse arg ispCmd
    address ispexec ispCmd
return rc /* end adrIspRc */

}¢--- A540769.WK.REXX.O13(DOPWEG) cre=2010-02-15 mod=2010-02-15-17.35.36 A540769 ---
/* REXX *************************************************************

    dopweg    ¢f!¢s!

    doppelte Zeilen löschen (falls direkt hintereindander)
        use q or qq lineCommand to select part of the file
    f do not delete only find first pair of equal lines
    s squash: map mulitple space to one (space(line, 1))

***********************************************************************/
/**** Test Data  *******************************************************

  1 jcl  = abx(jclm) * sdf
  2 jcl  = abx(2clm) * sdf
  3
  4 abc(jclm) * sdf
  5 abc 6 abc 7 abc 8 abc 9 abc
 10 abc

**********************************************************************/
call errReset hi
call adrEdit('macro (args) NOPROCESS')
squash = verify(args, 'sS', 'm') > 0
find   = verify(args, 'fF', 'm') > 0
say 'macro args' args 'squash='squash 'find='find
parse var args delta fnd
if left(args, 1) = '?' | translate(left(args, 4)) = 'HELP' then
    exit help()
call adrEdit 'process range Q R', 4
call adrEdit '(lf) = linenum .zfrange'
call adrEdit '(lT) = linenum .zLrange'
say 'dopWeg from line' lf 'to' lt
lStop = lT
call adrEdit "(laLi) = line" lf
lnx = lf + 1
cnt = 0
do while lnx <= lStop
    call adrEdit "(nxLi) = line" lnx
    if squash then
        dop = space(laLi, 1) == space(nxLi, 1)
    else
        dop = laLi == nxLi
    if dop then do
        if find then do
            say 'doppelte Zeilen' (lnx-1) lnx
            call adrEdit 'locate' (lnx-1)
            exit
            end
        else do
            call adrEdit 'delete' lnx
            lStop = lSTop - 1
            cnt = cnt + 1
            end
        end
    else do
        lnx = lnx + 1
        laLi = nxLi
        end
    end
say 'deleted' cnt 'duplicate lines'
exit
/* copy adrIsp begin *************************************************/
/**********************************************************************
    lmd: catalog read
    call sequence: lmdBegin, lmdNext*, lmdEnd
        mit lmd service (mit save in file und read,
                         weil list zu langsam und listcat abstürzt)
        1. arg (grp)     als group dataset für lmd save
                         und dd name für file read
***********************************************************************/
lmdBegin: procedure
    parse arg grp, lev
    call adrIsp 'lmdinit listid(lmdId) level('lev')'
    res = adrIsp('lmdlist listid(&lmdId) option(save) group('grp')', 4)
    call adrIsp 'lmdfree listid(&lmdId)'
    if res = 0 then do
        call trc timing() 'lmdlist save' grp lev
        call adrTso 'alloc dd('grp') shr dsn('grp'.datasets)'
        end
    else do
        call trc 'no datasets found' timing() 'lmdlist save' grp lev
        call adrTso 'alloc dd('grp') dummy'
        end
    call readDDBegin grp
return /* end lmdBegin */

lmdNext:
    parse arg ggGrp, ggSt, withVolume
    if ^ readDD(ggGrp, ggSt) then
         return 0
    if withVolume ^== 1 then
        do ggIx=1 to value(ggSt'0')
            x = value(ggSt || ggIx, word(value(ggSt || ggIx), 1))
            end
    return 1
endSubroutin lmdNext

lmdEnd: procedure
    parse arg grp
    call readDDEnd grp
    call adrTso 'free dd('grp')'
return /* end lmdEnd */

lmd: procedure expose m.
    parse arg lev, withVol
    call lmdBegin gg1, lev
    do while lmdNext(gg1, q., withVol)
        do x=1 to q.0
           call jOut q.x
           end
        end
    call lmdEnd gg1
    return
endProcedure lmd
/**********************************************************************
    member list of a pds:
        call sequence x=lmmBegin(dsn) lmmNext(x) * lmmEnd(x)
***********************************************************************/
lmm: procedure expose m.
parse arg dsn
    id = lmmBegin(dsn)
    do ix=1 by 1
        m = lmmNext(id)
        if m = '' then
            leave
        call jOut m
        end
    call lmmEnd id
    return
endProcedure lmm

lmmBegin: procedure
parse arg dsn
    mbr = dsnGetMbr(dsn)
    pds = dsnSetMbr(dsn, )
    call adrIsp "LMINIT DATAID(lmmId) DATASET('"pds"') ENQ(SHRW)"
    call adrIsp "LMOPEN DATAID("lmmId") OPTION(INPUT) "
    res = lmmId
    if mbr <> '' then
        res = res 'pattern('mbr')'
    return res
endProcedure lmmBegin

lmmEnd: procedure
parse arg lmmId opt
    call adrIsp "LMMLIST DATAID("lmmId") option(free)", 8
    call adrIsp "LMCLOSE DATAID("lmmId")"
    call adrIsp "LMFREE DATAID("lmmId")"
    return
endProcedure lmmEnd

lmmNext: procedure
parse arg lmmId opt
    if adrIsp("LMMLIST DATAID("lmmid")" ,
               "OPTION(LIST) MEMBER(Mbr)" opt, 4 8) = 0 then
        return strip(mbr)
    else
        return ''
endProcedure lmmNext

lmmRm: procedure
parse arg dsn, mbrs
    mbrs = dsnGetMbr(dsn) mbrs
    pds = dsnSetMbr(dsn, )
    call adrIsp "LMINIT DATAID(lmmId) DATASET("pds") ENQ(SHRW)"
    call adrIsp "LMOPEN DATAID("lmmId") OPTION(OUTPUT) "
    err = ''
    do wx=1 to words(mbrs)
        m1 = word(mbrs, wx)
        rr = adrIsp("lmmDel dataid("lmmId") member("m1")", 0 8 12)
        if rc = 0 then
            say 'removed' m1 'from' pds
        else if rc = 8 then
            say 'not found' m1 'in' pds
        else do
            err = 'error deleting' m1 'in' pds 'rc' rr strip(zerrlm)
            say err
            leave
            end
        end
    call adrIsp "LMCLOSE DATAID("lmmId")"
    call adrIsp "LMFREE DATAID("lmmId")"
    if err <> '' then
        call err err
    return
endProcedure lmmRm
/*--- address ispf with error checking -------------------------------*/
adrIsp:
    parse arg ggIspCmd, ggRet
    address ispexec ggIspCmd
    if rc = 0 then return 0
    else if ggRet == '*' then return rc
    else if wordPOS(rc, ggRet) > 0 then return rc
    else
        call err 'adr ispExec rc' rc 'in' ggIspCmd':' strip(zerrlm)
endSubroutine adrIsp

/*--- address editor with error checking -----------------------------*/
adrEdit:
    parse arg ggEditCmd, ggRet
    address isrEdit ggEditCmd
    if rc = 0 then return 0
    else if ggRet == '*' then return rc
    else if wordPOS(rc, ggRet) > 0 then return rc
    else
        call err 'adr isrEdit rc' rc 'for' ggEditCmd
endSubroutine adrEdit
/* copy adrIsp end   *************************************************/
/* copy err begin ******************************************************
    messages, errorhandling,help
***********************************************************************/
/* configure err -----------------------------------------------------*/
errReset: procedure expose m.
parse arg oo, ha
    if pos('I', translate(oo)) > 0 then
        call adrIsp 'control errors return'
    m.err.opt = translate(oo, 'h', 'H')
    if ha == '' then
        drop m.err.handler
    else
        m.err.handler = ha
    return
endSubroutine errReset

/*--- error routine: abend with message ------------------------------*/
err:
    parse arg ggTxt, ggStem, ggOpt
    drop err handler opt
    if ggOpt == '' & symbol('m.err.handler') == 'VAR' then
        interpret m.err.handler
    say 'fatal error:' ggTxt
    if ggOpt == '' | ggOpt == '*' then
        ggOpt = translate(value('m.err.opt'), 'ht', 'HT')
    if ggStem ^== '' then do
        do ggXX=1 to m.ggStem.0
            say ' ' m.ggStem.ggXX
            end
        if ggXX > 3 then
            say 'fatal error in' ggS3':' ggTxt
        end
    parse source . . ggS3 .                           /* current rexx */
    if pos('h', ggOpt) > 0  then do
        say 'fatal error in' ggS3': divide by zero to show stackHistory'
        x = 1 / 0
        end
    say 'fatal error in' ggS3': exit(12)'
    exit errSetRc(12)
endSubroutine err

/*--- abend with Message after displaying help -----------------------*/
errHelp: procedure expose m.
parse arg msg, st, op
    say 'fatal error:' msg
    call help
    call err msg, st, op
endProcedure errHelp

/*--- set rc for ispf: -------------------------------------------------
    if a cmd is run by ispStart, its RC is ignored,
         but ISPF passes the value of the shared varible 3IspfRc
         back as return code
----------------------------------------------------------------------*/
errSetRc: procedure
parse arg zIspfRc
    if sysVar('sysISPF') = 'ACTIVE' then do
        address ispExec vput 'zIspfRc' shared
        end
    return zIspfRc
endProcedure errSetRc

/*--- output a trace message if m.trace is set -----------------------*/
trc: procedure expose m.
parse arg msg
    if m.trace == 1 then
        say 'trc:' msg
    return
endProcedure trc

/*--- quote string txt using quoteChar qu ("""" ==> ") ---------------*/
quote: procedure
parse arg txt, qu
    if qu = '' then
        qu = '"'
    res = qu
    ix = 1
    do forever
        qx = pos(qu, txt, ix)
        if qx = 0 then
            return res || substr(txt, ix) || qu
        res = res || substr(txt, ix, qx-ix) || qu || qu
        ix = qx + length(qu)
        end
endProcedure quote

/*--- return current time and cpu usage ------------------------------*/
timing: procedure
return time() time('E') sysvar('syscpu') /* sysvar('syssrv') */

/--- display the first comment block of the source as help -----------*/
help: procedure
    parse source . . s3 .
    say right(' help for rexx' s3, 79, '*')
    do lx=1 by 1
        if pos('/*', sourceLine(lx)) > 0 then
            leave
        else if lx > 10 then do
            say 'initial commentblock not found for help'
            return
            end
        end
    do lx=lx+1 by 1
        li = strip(sourceLine(lx), 't', ' ')
        if pos('*/', li) > 0 then
            leave
        say li
        end
    say right(' end help for rexx' s3, 79, '*')
    return 4
endProcedure help
/* copy err end   *****************************************************/
}¢--- A540769.WK.REXX.O13(DRDA) cre=2010-06-08 mod=2010-06-08-17.32.24 A540769 ---
$=fun=reb
$;
$<=¢
REBIND PACKAGE(TP.TP0920.(TP00000058));
REBIND PACKAGE(TP.TP0900.(TP00000058));
REBIND PACKAGE(TP.TP0910.(TP00000058));
REBIND PACKAGE(TP.TP0920.(TP00000055));
REBIND PACKAGE(TP.TP0910.(TP00000055));
REBIND PACKAGE(TP.TP0900.(TP00000055));
REBIND PACKAGE(TP.YTPFLAG.(TP000000555E1DA28A));
REBIND PACKAGE(TP.TP0900.(TP00000053));
REBIND PACKAGE(TP.TP0910.(TP00000053));
REBIND PACKAGE(TP.YTPFLAG.(TP000000535D8C94BA));
REBIND PACKAGE(TP.TP0900.(TP00000050));
REBIND PACKAGE(TP.TP0910.(TP00000050));
REBIND PACKAGE(TP.TP0900.(TP00000046));
REBIND PACKAGE(TP.YTPFLAG.(TP000000465C97A6D8));
REBIND PACKAGE(TP.TP0910.(TP00000046));
REBIND PACKAGE(TP.TP0900.(TP00000044));
REBIND PACKAGE(TP.TP0910.(TP00000044));
REBIND PACKAGE(TP.YTPFLAG.(TP000000445C404AE1));
REBIND PACKAGE(TP.TP0900.(TP00000034));
REBIND PACKAGE(TP.TP0910.(TP00000034));
REBIND PACKAGE(TP.TP0910.(TP00000041));
REBIND PACKAGE(TP.TP0900.(TP00000041));
REBIND PACKAGE(TP.TP0910.(TP00000040));
REBIND PACKAGE(TP.TP0900.(TP00000040));
REBIND PACKAGE(TP.TP0900.(TP00000038));
REBIND PACKAGE(TP.TP0900.(TP00000031));
REBIND PACKAGE(XXWKTST.TP0900.(TP00000031));
REBIND PACKAGE(TP.TP0910.(TP00000031));
REBIND PACKAGE(TP.YTPFLAG.(TP000000315B27B768MVS));
REBIND PACKAGE(TP.YTPFLAG.(TP000000315B27B768));
REBIND PACKAGE(TP.TP0900.(TP00000028));
REBIND PACKAGE(TP.TP0910.(TP00000028));
REBIND PACKAGE(TP.YTPFLAG.(TP000000285ABA2274MVS));
REBIND PACKAGE(TP.YTPFLAG.(TP000000285ABA2274));
REBIND PACKAGE(TP.TP0910.(A18Q002828));
REBIND PACKAGE(TP.TP0900.(A18Q002828));
REBIND PACKAGE(TP.TP0910.(TP00000026));
REBIND PACKAGE(TP.TP0900.(TP00000026));
REBIND PACKAGE(TP.YTPFLAG.(TP000000265A26AB1B));
REBIND PACKAGE(TP.TP0900.(TP00000023));
REBIND PACKAGE(TP.TP0910.(TP00000023));
REBIND PACKAGE(TP.TP0910.(TP00000020));
REBIND PACKAGE(TP.TP0900.(TP00000020));
REBIND PACKAGE(TP.YTPFLAG.(TP00000020594B8605));
REBIND PACKAGE(TP.TP0910.(DE00000073));
REBIND PACKAGE(TP.TP0910.(TP00000018));
REBIND PACKAGE(TP.TP0900.(TP00000018));
REBIND PACKAGE(TP.TP0900.(TP00000016));
REBIND PACKAGE(TP.TP0910.(TP00000016));
REBIND PACKAGE(TP.TP0900.(TP00000011));
REBIND PACKAGE(TP.TP0910.(TP00000011));
REBIND PACKAGE(TP.TP0900.(TP00000008));
REBIND PACKAGE(TP.TP0910.(TP00000008));
REBIND PACKAGE(TP.YTPFLAG.(TP000000025682A753));
$!
$@=¢
//A540769L  JOB (CP00,KE50),
//*       RESTART=STEPNAME, <== FOR RESTART REMOVE * AND ENTER STEP NAME
//         MSGCLASS=T,TIME=1440,
//         NOTIFY=&SYSUID
//*MAIN CLASS=LOG
//E01    EXEC PGM=IKJEFT01,DYNAMNBR=30
//SYSTSPRT DD SYSOUT=*
//SYSTSIN  DD *
   DSN S(DBOF)
$!
$@for li $@¢
    parse value $li with rp '(' col '.' pkg '.(' vrs '));'
    $=col =-col
    $=pkg =-pkg
    $=vrs =-vrs
    say 'col' $col 'pkg' $pkg 'vrs' $vrs'|'
    if $fun = 'cop' then $@=¢
  BIND PACKAGE(CHSKA000DBOL.$col) -
       copy($col.$pkg) -
       copyver($vrs) -
       DBPROTOCOL(DRDA) qualifier(OA1P) action(replace)
    $!
    else $@=¢
  REBIND PACKAGE($col.$pkg.($vrs)) -
       DBPROTOCOL(DRDA)
    $!
    $!
$#end
//A540769L  JOB (CP00,KE50),
//*       RESTART=STEPNAME, <== FOR RESTART REMOVE * AND ENTER STEP NAME
//         MSGCLASS=T,TIME=1440,
//         NOTIFY=&SYSUID
//*MAIN CLASS=LOG
//*
//*
//**********************************************************************
//*
//* DB2 BATCH MONITOR
//*
//* DB2 ADMIN GENERATED BATCH JOB.
//*
//************************************************************ADB2WL4**
//DB2B EXEC PGM=IKJEFT01,DYNAMNBR=100
//STEPLIB  DD DISP=SHR,DSN=DB2@.RZ2.P0.DSNLOAD
//         DD DISP=SHR,DSN=DSN.TOOLS.RZ2.P0.SADBLLIB
//SYSEXEC  DD DISP=SHR,DSN=DSN.TOOLS.RZ2.C0.SADBEXEC
//         DD DISP=SHR,DSN=DSN.TOOLS.RZ2.P0.SGOCEXEC
//         DD DISP=SHR,DSN=DSN.TOOLS.RZ2.P0.SADBEXEC
//MSGLIB   DD DISP=SHR,DSN=DSN.TOOLS.RZ2.C0.SADBLLIB
//         DD DISP=SHR,DSN=DSN.TOOLS.RZ2.P0.SGOCLLIB
//         DD DISP=SHR,DSN=DSN.TOOLS.RZ2.P0.SADBLLIB
//ADBALIB  DD DISP=SHR,DSN=DSN.TOOLS.RZ2.P0.SADBLLIB
//DB2RLIB  DD DISP=SHR,DSN=DB2@.RZ2.P0.DSNLOAD
//         DD DISP=SHR,DSN=DSN.TOOLS.RZ2.P0.SADBLLIB
//SYSTSPRT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*,DCB=(LRECL=137,BLKSIZE=141)
//UTPRINT  DD SYSOUT=*
//RNPRIN01 DD SYSOUT=*
//STPRIN01 DD DUMMY
//ADBDIAG  DD SYSOUT=*
//ADBRPTSM DD SYSOUT=*
//SYSTSIN  DD *
  DSN SYSTEM(DBOF)
 RUN  PROGRAM(ADBTEP2) PLAN(ADB) -
   LIB('DSN.TOOLS.RZ2.P0.SADBLLIB')  -
   PARMS('/WORKLIST(RBTBL1) SSID(DBOF)   -
 RESTART(YES),MAXE(-1)')
 END
//ADBTEPIN DD *
BINDERROR='SAVE'
,AC='NO'
;
//SYSIN    DD *
-- Created by A540769 on 2010/06/08 at 16:44 by REBIND Package;
REBIND PACKAGE(TP.TP0920.(TP00000058));
REBIND PACKAGE(TP.TP0900.(TP00000058));
REBIND PACKAGE(TP.TP0910.(TP00000058));
REBIND PACKAGE(TP.TP0920.(TP00000055));
REBIND PACKAGE(TP.TP0910.(TP00000055));
REBIND PACKAGE(TP.TP0900.(TP00000055));
REBIND PACKAGE(TP.YTPFLAG.(TP000000555E1DA28A));
REBIND PACKAGE(TP.TP0900.(TP00000053));
REBIND PACKAGE(TP.TP0910.(TP00000053));
REBIND PACKAGE(TP.YTPFLAG.(TP000000535D8C94BA));
REBIND PACKAGE(TP.TP0900.(TP00000050));
REBIND PACKAGE(TP.TP0910.(TP00000050));
REBIND PACKAGE(TP.TP0900.(TP00000046));
REBIND PACKAGE(TP.YTPFLAG.(TP000000465C97A6D8));
REBIND PACKAGE(TP.TP0910.(TP00000046));
REBIND PACKAGE(TP.TP0900.(TP00000044));
REBIND PACKAGE(TP.TP0910.(TP00000044));
REBIND PACKAGE(TP.YTPFLAG.(TP000000445C404AE1));
REBIND PACKAGE(TP.TP0900.(TP00000034));
REBIND PACKAGE(TP.TP0910.(TP00000034));
REBIND PACKAGE(TP.TP0910.(TP00000041));
REBIND PACKAGE(TP.TP0900.(TP00000041));
REBIND PACKAGE(TP.TP0910.(TP00000040));
REBIND PACKAGE(TP.TP0900.(TP00000040));
REBIND PACKAGE(TP.TP0900.(TP00000038));
REBIND PACKAGE(TP.TP0900.(TP00000031));
REBIND PACKAGE(XXWKTST.TP0900.(TP00000031));
REBIND PACKAGE(TP.TP0910.(TP00000031));
REBIND PACKAGE(TP.YTPFLAG.(TP000000315B27B768MVS));
REBIND PACKAGE(TP.YTPFLAG.(TP000000315B27B768));
REBIND PACKAGE(TP.TP0900.(TP00000028));
REBIND PACKAGE(TP.TP0910.(TP00000028));
REBIND PACKAGE(TP.YTPFLAG.(TP000000285ABA2274MVS));
REBIND PACKAGE(TP.YTPFLAG.(TP000000285ABA2274));
REBIND PACKAGE(TP.TP0910.(A18Q002828));
REBIND PACKAGE(TP.TP0900.(A18Q002828));
REBIND PACKAGE(TP.TP0910.(TP00000026));
REBIND PACKAGE(TP.TP0900.(TP00000026));
REBIND PACKAGE(TP.YTPFLAG.(TP000000265A26AB1B));
REBIND PACKAGE(TP.TP0900.(TP00000023));
REBIND PACKAGE(TP.TP0910.(TP00000023));
REBIND PACKAGE(TP.TP0910.(TP00000020));
REBIND PACKAGE(TP.TP0900.(TP00000020));
REBIND PACKAGE(TP.YTPFLAG.(TP00000020594B8605));
REBIND PACKAGE(TP.TP0910.(DE00000073));
REBIND PACKAGE(TP.TP0910.(TP00000018));
REBIND PACKAGE(TP.TP0900.(TP00000018));
REBIND PACKAGE(TP.TP0900.(TP00000016));
REBIND PACKAGE(TP.TP0910.(TP00000016));
REBIND PACKAGE(TP.TP0900.(TP00000011));
REBIND PACKAGE(TP.TP0910.(TP00000011));
REBIND PACKAGE(TP.TP0900.(TP00000008));
REBIND PACKAGE(TP.TP0910.(TP00000008));
REBIND PACKAGE(TP.YTPFLAG.(TP000000025682A753));
/*
//*
$#out                                              20100608 17:19:54
//A540769L  JOB (CP00,KE50),
//*       RESTART=STEPNAME, <== FOR RESTART REMOVE * AND ENTER STEP NAME
//         MSGCLASS=T,TIME=1440,
//         NOTIFY=&SYSUID
//*MAIN CLASS=LOG
//E01    EXEC PGM=IKJEFT01,DYNAMNBR=30
//SYSTSPRT DD SYSOUT=*
//SYSTSIN  DD *
   DSN S(DBOF)
  REBIND PACKAGE(TP.TP0920.(TP00000058)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.TP0900.(TP00000058)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.TP0910.(TP00000058)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.TP0920.(TP00000055)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.TP0910.(TP00000055)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.TP0900.(TP00000055)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.YTPFLAG.(TP000000555E1DA28A)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.TP0900.(TP00000053)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.TP0910.(TP00000053)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.YTPFLAG.(TP000000535D8C94BA)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.TP0900.(TP00000050)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.TP0910.(TP00000050)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.TP0900.(TP00000046)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.YTPFLAG.(TP000000465C97A6D8)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.TP0910.(TP00000046)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.TP0900.(TP00000044)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.TP0910.(TP00000044)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.YTPFLAG.(TP000000445C404AE1)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.TP0900.(TP00000034)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.TP0910.(TP00000034)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.TP0910.(TP00000041)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.TP0900.(TP00000041)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.TP0910.(TP00000040)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.TP0900.(TP00000040)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.TP0900.(TP00000038)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.TP0900.(TP00000031)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(XXWKTST.TP0900.(TP00000031)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.TP0910.(TP00000031)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.YTPFLAG.(TP000000315B27B768MVS)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.YTPFLAG.(TP000000315B27B768)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.TP0900.(TP00000028)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.TP0910.(TP00000028)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.YTPFLAG.(TP000000285ABA2274MVS)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.YTPFLAG.(TP000000285ABA2274)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.TP0910.(A18Q002828)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.TP0900.(A18Q002828)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.TP0910.(TP00000026)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.TP0900.(TP00000026)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.YTPFLAG.(TP000000265A26AB1B)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.TP0900.(TP00000023)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.TP0910.(TP00000023)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.TP0910.(TP00000020)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.TP0900.(TP00000020)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.YTPFLAG.(TP00000020594B8605)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.TP0910.(DE00000073)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.TP0910.(TP00000018)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.TP0900.(TP00000018)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.TP0900.(TP00000016)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.TP0910.(TP00000016)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.TP0900.(TP00000011)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.TP0910.(TP00000011)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.TP0900.(TP00000008)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.TP0910.(TP00000008)) -
       DBPROTOCOL(DRDA)
  REBIND PACKAGE(TP.YTPFLAG.(TP000000025682A753)) -
       DBPROTOCOL(DRDA)
}¢--- A540769.WK.REXX.O13(DRDACOMP) cre=2010-06-21 mod=2010-08-01-12.04.45 A540769 ---
$@loadNew()
call sqlConnect DBOF
call sqlPreOpen 1, 'select collid, name, hex(contoken), version',
         ', valid || operative' ,
     'from sysibm.sysPackage',
     "where dbProtocol = 'P'" $** "and(valid<>'N' or operative<>'N')"
new = 0
old = 0
co = xx
do while sqlFetchInto(1, ':coll, :pkg, :co, :vers, :vo')
     if symbol('m.co2last.co') == 'VAR' then do
         new = new + 1
         end
     else do
         old = old + 1
         end
     if 0 then do
         p='    '
         if strip(coll) ='HPS' then
             p = p 'explain(n)'
         $$ REBIND PACKAGE($-{strip(coll)'.'strip(pkg)'.(' $*+
                           || strip(vers)})) -
         $$ $-{p} DBPROTOCOL(DRDA)
         end
     $$- vo co strip(coll) strip(pkg) vers
     if old // 1000 = 1 then
         say 'new' new 'old' old
     end
say 'new' new 'old' old
call sqlDisconnect
$@proc loadNew $@¢
st = 0
$;
$<A540769.WK.REXX(DRDALAST)
$@for li $@¢
    if abbrev($li, $'$#out ') then do
        if st=1 then
            leave
        st = 1
        iterate
        end
    if st = 0 then
        iterate
    parse value $li  with co 'pkg' pkg 'last' la .
    co = strip(co)
    pkg = strip(pkg)
    m.co2pkg.co = pkg
    m.co2last.co = la
    $!
$!
$#out                                              20100801 12:00:52
NY 164DE2480C0C3FEF A1P CI8520 A12M001522
NY 164E114300A2F5AF A1P CI8520 A12M001531
NY 1655E97B1D4F063E A1P CI8520 A12M001797
NN 15C5EB241FB02C12 A1P KD0500 19970207084703S101702A061408AKD0500
NN 1615EEB7011D2F50 A1P KD0540 19980701134213S101702A073364AKD0540
NN 161878261BA05DF7 A1P KD0540 19980717170619S101702Z383268AKD0540
NN 161A571710CA3A50 A1P KD0540 CRMC000003
NY 168970141A69707D A1P KS5310 A13X000472
NY 16958203060813AF A1P KS5310 A13X000591
NY 169F460705B0D87F A1P KS5310 A13X000651
NY 16882B0B0AD331E7 A1P KS5320 A13X000532
NY 167AFE2009CED156 A1P KS5320 A13X000536
NY 169582050BAA22D4 A1P KS5320 A13X000591
NY 1687667206659803 A1P KS5330 A13X000546
NY 16BCF7E30CCDA0BA A1P KS5330 A13X000735
NY 16BE63EE1EE8EF03 A1P KS5330 A13X000740
NY 16BA31CF077C15DB A1P KS5780 A13X000732
NY 16BE63E31073D6CF A1P KS5780 A13X000740
NY 16C0A07C10EB4AFD A1P KS5780 A13X000746
NY 16BA31E4006FBFBF A1P KS5800 A13X000732
NY 16BE63E213025363 A1P KS5800 A13X000740
NY 16C0A0810A5B6988 A1P KS5800 A13X000746
NY 16A152110B9FF6A6 A1P PARTANA1 A18Q000804
NY 164516BC0D280818 A1P RR8420 CRMA000539
NY 1648353F07EC4E1F A1P RR8420 CRMA000574
NY 166D04F50F6980D8 A1P RR8420 CRMA001016
NY 165CB0F905C59250 A1P XP8600 CRME000264
NY 165D75940B31D4EC A1P XP8600 CRME000268
NY 165D8AE21837148F A1P XP8600 CRME000269
NY 1676EF371EFB3B51 A1P YCI009 A12M002427
NY 1676EF371BB2AF9C A1P YCI009A A12M002427
NN 15FF2F5A02CF9692 A1P YECGRI 19980206175312S101702A070225AYECGRI
NN 160041540F0188B0 A1P YECGRI 19980213132027S101702A070420AYECGRI
NN 1604875E13ACF042 A1P YECGRI 19980312175705S101702A070997AYECGRI
NN 15C5EB1509074F78 A1P YKD0500 19970207084459S101702A061408AYKD0500
NN 15C7FD8D1B047776 A1P YKD0500 19970220131055S101702A061859AYKD0500
NN 15CD85F103D59AAC A1P YKD0500 19970327180544S101702A062772AYKD0500
NN 15E37FE91C7B23D4 A1P YKD0500 19970814140402S101702M000800AYKD0500
NN 15E6CEF11FA4B640 A1P YKD0500 19970904152318S101702A066089AYKD0500
NN 15E88BA11939633E A1P YKD0500 19970915163933S101702A066826AYKD0500
NN 15E8FE3F13644320 A1P YKD0500 19970918130127S101702A066876AYKD0500
NN 15F2EEB91D073CD8 A1P YKD0500 19971120185108S101702M000818AYKD0500
NN 15F3646E1EA25C0A A1P YKD0500 19971123170525S101702Z346148AYKD0500
NN 15F3662E1D147D34 A1P YKD0500 19971123180702S101702Z346152AYKD0500
NN 15F369CE0D0F47CA A1P YKD0500 19971123194631S101702Z346164AYKD0500
NN 15F3AC9012C73DA2 A1P YKD0500 19971125120634S101702Z346700AYKD0500
NN 15F51AAE092A4BFA A1P YKD0500 19971204142946S101702Z348815AYKD0500
NN 15F5E973080E51E4 A1P YKD0500 19971209175158S101702Z349699AYKD0500
NN 15F603781AF2232E A1P YKD0500 19971210092215S101702Z349795AYKD0500
NN 15FBBA170A2A671E A1P YKD0500 19980115174941S101702M000856AYKD0500
NN 15FF2F5D15AE1F82 A1P YKD0500 19980206175332S101702A070225AYKD0500
NN 1600415710BDCF88 A1P YKD0500 19980213132025S101702A070420AYKD0500
NN 16048755010B03D8 A1P YKD0500 19980312175740S101702A070997AYKD0500
NN 1607F2CF0A1FA4F4 A1P YKD0500 19980403141032S101702A071472AYKD0500
NN 160A06261A472F65 A1P YKD0500 19980416190530S101702M000898AYKD0500
NN 1612E4F30FCA96DA A1P YKD0500 19980612054559S101702M000922AYKD0500
NN 161310A30C678722 A1P YKD0500 19980613074807S101702Z378634AYKD0500
NN 1613E4AC0B090F20 A1P YKD0500 19980618141748S101702A073266AYKD0500
NN 1615EAC01A922BBA A1P YKD0500 19980701111931S101702A073364AYKD0500
NN 1615EEA60F9DED86 A1P YKD0500 19980701133922S101702A073364AYKD0500
NN 16161DF5150335D8 A1P YKD0500 19980702175321S101702Z381719AYKD0500
NN 161731E90D5CB082 A1P YKD0500 19980709142935S101702A073757AYKD0500
NN 16187CA10D0C1682 A1P YKD0500 19980717194602S101702Z383292AYKD0500
NN 161D4EAD04459518 A1P YKD0500 CRMA000067
NN 162D33470952FFA6 A1P YKD0500 CRMA000128
NN 161B18A00CA11C64 A1P YKD0500 CRMC000003
NN 162D5C5A0908A3AD A1P YKD0500 CRMD000263
NN 162E4AD31D2BD121 A1P YKD0500 CRMD000281
NN 162E6FE715DC4FF4 A1P YKD0500 CRMD000283
NY 1613E56F1740210C A1P YKS0813 19980618144536S101702A073286AYKS0813
NY 163491EB01FDB20E A1P YKS0813 A13X000041
NY 1646550719DBBDAC A1P YKS0813 A13X000301
NY 165330C00D7AB867 A1P YKS0813 A13X000352
NY 16513271056C9880 A1P YKS0813 A13X000362
NY 166D9AB11FA33E50 A1P YKS0813 A13X000436
NY 1677859011B643E5 A1P YKS0813 A13X000508
NY 1676E88707F1D935 A1P YKS0813 A13X000530
NY 1695821F098DD6EA A1P YKS0813 A13X000591
NY 1630A9DA12572F56 A1P YKS5551 A13X000153
NY 1634B7A00A6AC118 A1P YKS5551 A13X000155
NY 163745B70B5F6610 A1P YKS5551 A13X000177
NY 163E846315E5EFF5 A1P YKS5551 A13X000194
NY 1640FE87029F28D2 A1P YKS5551 A13X000269
NY 164AE8141397EFC6 A1P YKS5551 A13X000321
NY 165243271B36AE1D A1P YKS5551 A13X000368
NY 16932BF11BF1D6FA A1P YKS5551 A13X000597
NY 1630A9DF1565AD62 A1P YKS5552 A13X000153
NY 1634B7A9147E2684 A1P YKS5552 A13X000155
NY 16932C9D020E69F9 A1P YKS5552 A13X000597
NY 1630A9E30D269CF6 A1P YKS5553 A13X000153
NY 1634B7A21AFC2256 A1P YKS5553 A13X000155
NY 163745CE170BF742 A1P YKS5553 A13X000177
NY 163AE0290CA67CFE A1P YKS5553 A13X000194
NY 1640DDA6001FB321 A1P YKS5553 A13X000249
NY 1643CD8D13A137CA A1P YKS5553 A13X000279
NY 16501614117EAAEE A1P YKS5553 A13X000339
NY 16932C4511DF1A14 A1P YKS5553 A13X000597
NY 164445390715E376 A1P YSAT058 A16M000359
NN 15F2EEB81F753348 A1P YYECGRI 19971120185114S101702M000818AYYECGRI
NN 15F369CC0439D86A A1P YYECGRI 19971123194631S101702Z346164AYYECGRI
NN 15F519F619C6885F A1P YYECGRI 19971204140411S101702Z348800AYYECGRI
NN 15FBB9F00F950012 A1P YYECGRI 19980115174545S101702M000856AYYECGRI
NY 164DE2480C0C3FEF A2P CI8520 A12M001522
NY 164E114300A2F5AF A2P CI8520 A12M001531
NY 1655E97B1D4F063E A2P CI8520 A12M001797
NN 15C467A81072B294 A2P FD0350 19970128173847S101702Z293371AFD0350
NN 15CFB3DA0DA10990 A2P FD0350 19970410145407S101702A062970AFD0350
NN 160041A1013AD3F8 A2P FD0350 19980213133248S101702A070466AFD0350
NN 15C5EB241FB02C12 A2P KD0500 19970207084703S101702A061408AKD0500
NN 1615EEB7011D2F50 A2P KD0540 19980701134213S101702A073364AKD0540
NN 161878261BA05DF7 A2P KD0540 19980717170619S101702Z383268AKD0540
NN 161A571710CA3A50 A2P KD0540 CRMC000003
NY 168970141A69707D A2P KS5310 A13X000472
NY 16958203060813AF A2P KS5310 A13X000591
NY 169F460705B0D87F A2P KS5310 A13X000651
NY 16882B0B0AD331E7 A2P KS5320 A13X000532
NY 167AFE2009CED156 A2P KS5320 A13X000536
NY 169582050BAA22D4 A2P KS5320 A13X000591
NY 1687667206659803 A2P KS5330 A13X000546
NY 16BCF7E30CCDA0BA A2P KS5330 A13X000735
NY 16BE63EE1EE8EF03 A2P KS5330 A13X000740
NY 16BA31CF077C15DB A2P KS5780 A13X000732
NY 16BE63E31073D6CF A2P KS5780 A13X000740
NY 16C0A07C10EB4AFD A2P KS5780 A13X000746
NY 16BA31E4006FBFBF A2P KS5800 A13X000732
NY 16BE63E213025363 A2P KS5800 A13X000740
NY 16C0A0810A5B6988 A2P KS5800 A13X000746
NY 164B053E00772199 A2P RR8270 CRMA000504
NY 166D04ED01A34479 A2P RR8270 CRMA001016
NY 164516BC0D280818 A2P RR8420 CRMA000539
NY 1648353F07EC4E1F A2P RR8420 CRMA000574
NY 166D04F50F6980D8 A2P RR8420 CRMA001016
NY 165CB0F905C59250 A2P XP8600 CRME000264
NY 165D75940B31D4EC A2P XP8600 CRME000268
NY 165D8AE21837148F A2P XP8600 CRME000269
NY 1676EF371EFB3B51 A2P YCI009 A12M002427
NY 1676EF371BB2AF9C A2P YCI009A A12M002427
NN 15FF2F5A02CF9692 A2P YECGRI 19980206175312S101702A070225AYECGRI
NN 160041540F0188B0 A2P YECGRI 19980213132027S101702A070420AYECGRI
NN 1604875E13ACF042 A2P YECGRI 19980312175705S101702A070997AYECGRI
NN 15C5EB1509074F78 A2P YKD0500 19970207084459S101702A061408AYKD0500
NN 15C7FD8D1B047776 A2P YKD0500 19970220131055S101702A061859AYKD0500
NN 15CD85F103D59AAC A2P YKD0500 19970327180544S101702A062772AYKD0500
NN 15E37FE91C7B23D4 A2P YKD0500 19970814140402S101702M000800AYKD0500
NN 15E6CEF11FA4B640 A2P YKD0500 19970904152318S101702A066089AYKD0500
NN 15E88BA11939633E A2P YKD0500 19970915163933S101702A066826AYKD0500
NN 15E8FE3F13644320 A2P YKD0500 19970918130127S101702A066876AYKD0500
NN 15F2EEB91D073CD8 A2P YKD0500 19971120185108S101702M000818AYKD0500
NN 15F3646E1EA25C0A A2P YKD0500 19971123170525S101702Z346148AYKD0500
NN 15F3662E1D147D34 A2P YKD0500 19971123180702S101702Z346152AYKD0500
NN 15F369CE0D0F47CA A2P YKD0500 19971123194631S101702Z346164AYKD0500
NN 15F3AC9012C73DA2 A2P YKD0500 19971125120634S101702Z346700AYKD0500
NN 15F51AAE092A4BFA A2P YKD0500 19971204142946S101702Z348815AYKD0500
NN 15F5E973080E51E4 A2P YKD0500 19971209175158S101702Z349699AYKD0500
NN 15F603781AF2232E A2P YKD0500 19971210092215S101702Z349795AYKD0500
NN 15FBBA170A2A671E A2P YKD0500 19980115174941S101702M000856AYKD0500
NN 15FF2F5D15AE1F82 A2P YKD0500 19980206175332S101702A070225AYKD0500
NN 1600415710BDCF88 A2P YKD0500 19980213132025S101702A070420AYKD0500
NN 16048755010B03D8 A2P YKD0500 19980312175740S101702A070997AYKD0500
NN 1607F2CF0A1FA4F4 A2P YKD0500 19980403141032S101702A071472AYKD0500
NN 160A06261A472F65 A2P YKD0500 19980416190530S101702M000898AYKD0500
NN 1612E4F30FCA96DA A2P YKD0500 19980612054559S101702M000922AYKD0500
NN 161310A30C678722 A2P YKD0500 19980613074807S101702Z378634AYKD0500
NN 1613E4AC0B090F20 A2P YKD0500 19980618141748S101702A073266AYKD0500
NN 1615EAC01A922BBA A2P YKD0500 19980701111931S101702A073364AYKD0500
NN 1615EEA60F9DED86 A2P YKD0500 19980701133922S101702A073364AYKD0500
NN 16161DF5150335D8 A2P YKD0500 19980702175321S101702Z381719AYKD0500
NN 161731E90D5CB082 A2P YKD0500 19980709142935S101702A073757AYKD0500
NN 16187CA10D0C1682 A2P YKD0500 19980717194602S101702Z383292AYKD0500
NN 161D4EAD04459518 A2P YKD0500 CRMA000067
NN 162D33470952FFA6 A2P YKD0500 CRMA000128
NN 161B18A00CA11C64 A2P YKD0500 CRMC000003
NN 162D5C5A0908A3AD A2P YKD0500 CRMD000263
NN 162E4AD31D2BD121 A2P YKD0500 CRMD000281
NN 162E6FE715DC4FF4 A2P YKD0500 CRMD000283
NY 16BA30A41C0F6F67 A2P YKS0801 A13X000702
NY 16C07605061FBB71 A2P YKS0801 A13X000736
NY 1613E56F1740210C A2P YKS0813 19980618144536S101702A073286AYKS0813
NY 163491EB01FDB20E A2P YKS0813 A13X000041
NY 1646550719DBBDAC A2P YKS0813 A13X000301
NY 165330C00D7AB867 A2P YKS0813 A13X000352
NY 16513271056C9880 A2P YKS0813 A13X000362
NY 166D9AB11FA33E50 A2P YKS0813 A13X000436
NY 1677859011B643E5 A2P YKS0813 A13X000508
NY 1676E88707F1D935 A2P YKS0813 A13X000530
NY 1695821F098DD6EA A2P YKS0813 A13X000591
NY 1630A9DA12572F56 A2P YKS5551 A13X000153
NY 1634B7A00A6AC118 A2P YKS5551 A13X000155
NY 163745B70B5F6610 A2P YKS5551 A13X000177
NY 163E846315E5EFF5 A2P YKS5551 A13X000194
NY 1640FE87029F28D2 A2P YKS5551 A13X000269
NY 164AE8141397EFC6 A2P YKS5551 A13X000321
NY 165243271B36AE1D A2P YKS5551 A13X000368
NY 16932BF11BF1D6FA A2P YKS5551 A13X000597
NY 1630A9DF1565AD62 A2P YKS5552 A13X000153
NY 1634B7A9147E2684 A2P YKS5552 A13X000155
NY 16932C9D020E69F9 A2P YKS5552 A13X000597
NY 1630A9E30D269CF6 A2P YKS5553 A13X000153
NY 1634B7A21AFC2256 A2P YKS5553 A13X000155
NY 163745CE170BF742 A2P YKS5553 A13X000177
NY 163AE0290CA67CFE A2P YKS5553 A13X000194
NY 1640DDA6001FB321 A2P YKS5553 A13X000249
NY 1643CD8D13A137CA A2P YKS5553 A13X000279
NY 16501614117EAAEE A2P YKS5553 A13X000339
NY 16932C4511DF1A14 A2P YKS5553 A13X000597
NY 164445390715E376 A2P YSAT058 A16M000359
NY 16435A6F11693957 A2P YSAT061 A16M000359
NN 15F2EEB81F753348 A2P YYECGRI 19971120185114S101702M000818AYYECGRI
NN 15F369CC0439D86A A2P YYECGRI 19971123194631S101702Z346164AYYECGRI
NN 15F519F619C6885F A2P YYECGRI 19971204140411S101702Z348800AYYECGRI
NN 15FBB9F00F950012 A2P YYECGRI 19980115174545S101702M000856AYYECGRI
NY 150316DB1D65BC0E AC YACM002
NY 1535B571062A8382 AC YACM002 19940804182728S101702A036204AYACM002
YY 176164B10AD93BB4 ADBL ADB2PRP
NY 15722F7818523CAA AL AL7501 19950824S101702A047042AAL7501
NY 1583CDBC12FD69C8 AL AL7501 19951214S101702A050076AAL7501
NY 17C52B9F140DD234 AN ANNA001 CIIN000149MVS
NY 17F26CEC1BAB8C79 AP YAPUTGK APEN00003558075175
NY 17EC9A750B3B4966 AP YAPUTGK APEN00003657D67A8A
NY 1800EB9C1E4F0DCB AP YAPUTGK APEN0000385880DAE5
NY 18027D7C14A3884A AP YAPUTGK APEN000039588E05DF
NY 18104EBD04339C10 AP YAPUTGK APEN0000405901FCB8
NY 1819175D1DF020AF AP YAPUTGK APEN000042594BAB6AMVS
NY 18139AF81D465774 AP YAPUTGK APEN000046591DA6B5
NY 1822D8CB0B3D7465 AP YAPUTGK APEN000048599D816AMVS
NY 182835EF138E560D AP YAPUTGK APEN00004959CA802BMVS
NY 18356347080AFC3C AP YAPUTGK APEN0000505A38FBC3MVS
NY 17E08BA80A27FC86 AS AS0050 KABG000038
NY 17C9C23B0EA9675A AS AS0100 KABG000030
NY 17D3559116861C28 AS AS0100 KABG000032
NY 17E1A51A17E0F50C AS AS0100 KABG000038
NY 17D3558A0C154045 AS AS0101I KABG0000325702815B
NY 17C9C23C12AF79BC AS AS0610 KABG000030
NY 17D3559519C2E6E1 AS AS0610 KABG000032
NY 17E1A52218671DC2 AS AS0610 KABG000038
NY 160E69CA19939C46 AS AS8992 19980514171537S101702M000860AAS8992
NY 161B932817CAEAAE AS AS8992 A15T000038
NY 1641EA5C07BD0976 AT AT0090 A12M001166
NY 16701F2E068440B8 AT AT0090 A20Y000239
NY 1684DF0C1CAAE6CA AT AT0090 A20Y000364
NY 17A5446209C50C0A AT AT0097 IMS0000013
NY 1780D2BC184B4289 AT AT0099 A20Y001519544E5A50
NY 1802F62718C20B26 AT AT0099 ACS00000115891FA54
NY 181A390E14673B05 AT AT0099 ACS0000015595529B8
NY 181E9EFE19152277 AT AT0099 ACS0000017597A0EC1
NY 169584351662C65F AT AT0100 A20Y000431
NY 178558EC0450FFF6 AT AT0620 A20Y001564
NN 161752A819909F4A AT AT7010 19980710095644S101702Z382648AAT7010
NN 1617536E04B0F3C2 AT AT7010 19980710102939S101702Z382654AAT7010
NN 159216F71F876EB6 AT AT7060 19960314140003S101702A052607AAT7060
NN 15967D67056F4424 AT AT7060 19960411135637S101702A053258AAT7060
NN 15B897D016771B92 AT AT7060 19961114135124S101702A058435AAT7060
NY 17867C0D14590A59 AT AT7110 A20Y001564
NN 15E497E61F0D4E14 AT AT7200 19970821130820S101702A065919AAT7200
NY 16804E200C818C3D AT AT7222 A20Y000328
NY 167052EB121BF030 AT AT7224 A20Y000111
NY 16804E280E27D697 AT AT7224 A20Y000328
NY 160E69CD130FE694 AT AT7225 19980514171958S101702A072293AAT7225
NY 16804E4C09EB407F AT AT7225 A20Y000328
NY 17DA424D068E89BE AT AT7500 ACS0000009
NY 1804098110C21912 AT AT7500 ACS0000011
NY 1644F3CA173A61B0 AT AT8100 A12M001144
NY 1648DBBC02AB08EC AT AT8100 A12M001366
NY 164F2A4B0F8D30EC AT AT8100 A12M001566
NY 1804D5561875E4E5 AT AT8500 ACS0000011
NY 1808E90A06AD4C3F AT AT8500 ACS0000012
NY 1808EEA306001923 AT AT8500 ACS0000013
NN 159F4AC31EED2BB6 AT AT9000 19960606140803S101702A054557AAT9000
NN 16124BD61907BF70 AT AT9000 19980608102520S101702Z377704AAT9000
NN 1612799103DC119E AT AT9000 19980609134214S101702Z377955AAT9000
NN 159F4AC41BD178A0 AT AT9002 19960606140805S101702A054557AAT9002
NN 159F4AC31F9F0C82 AT AT9010 19960606140801S101702A054557AAT9010
NY 157B028C0F2080C4 AT YAT7010 19951019S101702A047927AYAT7010
NY 157F16DF06FB2C46 AT YAT7010 19951114S101702Z218883AYAT7010
NY 15807BE3061C6BE0 AT YAT7010 19951123S101702A049711AYAT7010
NY 15AD972311C5029A AT YAT7010 19960905133829S101702A056753AYAT7010
NY 17D199770CEF0B1C AU YAU180D AURA00004356F3E622
NY 17ECA23A082F19C6 AU YAU180D AURA00005057D6BBB4
NY 17ECA23A0C6EB668 AU YAU180F AURA00005057D6BBB7
NY 17D199791F734558 AU YAU180I AURA00004356F3E638
NY 17ECA23B145216C9 AU YAU180I AURA00005057D6BBBE
NY 17D1997B138858E0 AU YAU180S AURA00004356F3E645
NY 17ECA23C00535FE4 AU YAU180S AURA00005057D6BBC2
NY 17ECA23B1FBFA9C1 AU YAU180U AURA00005057D6BBC5
NY 17D1998A1EF2250C AU YAU181D AURA00004356F3E6C6
NY 17ECA23E09A5EBC1 AU YAU181D AURA00005057D6BBD6
NY 17ECA23E0FABF3D8 AU YAU181F AURA00005057D6BBD9
NY 17D1998B1192E592 AU YAU181I AURA00004356F3E6CB
NY 17ECA23E1E25B2EE AU YAU181I AURA00005057D6BBDA
NY 17D1998B15F5960D AU YAU181S AURA00004356F3E6CC
NY 17ECA23F077FC922 AU YAU181S AURA00005057D6BBDE
NY 17ECA23F0E1D66B0 AU YAU181U AURA00005057D6BBE0
NY 17D19991066B9C34 AU YAU190D AURA00004356F3E6FA
NY 17ECA24500EBBB18 AU YAU190D AURA00005057D6BC08
NY 17ECA2450050B44A AU YAU190F AURA00005057D6BC0A
NY 17D19991196BE2D0 AU YAU190I AURA00004356F3E6FF
NY 17ECA2441E732C65 AU YAU190I AURA00005057D6BC0B
NY 17D199911CE79E0F AU YAU190S AURA00004356F3E700
NY 17ECA24502F699F4 AU YAU190S AURA00005057D6BC0C
NY 17ECA245060F76D6 AU YAU190U AURA00005057D6BC0D
NY 17D1999210CDFF4E AU YAU191D AURA00004356F3E705
NY 17ECA2461B9D32E9 AU YAU191D AURA00005057D6BC0E
NY 17ECA2470B09C3B9 AU YAU191F AURA00005057D6BC1D
NY 17D1999509B99A7E AU YAU191I AURA00004356F3E71C
NY 17ECA2471C332E9A AU YAU191I AURA00005057D6BC20
NY 17D1999509753F81 AU YAU191S AURA00004356F3E71C
NY 17ECA2471747FF5F AU YAU191S AURA00005057D6BC24
NY 17ECA2481CF2F5C5 AU YAU191U AURA00005057D6BC27
NY 17E569120F986D09 AV AV0150 PMRT000051
NY 17E569161C2E460C AV AV0160 PMRT000051
NY 17E6F1FE00388943 AV AV0170 PMRT000051
NY 17E80DCA144420F7 AV AV0180 PMRT000064
NY 17E6F34A1C542AD2 AV AV0190 PMRT000051
NY 17E5690601453DA4 AV AV0210 PMRT000051
NY 17E5691C1FEF8F43 AV AV0220 PMRT000051
NY 17E7261E11CED4EB AV AV0250 PMRT000051
NY 17E569221CB31606 AV AV0310 PMRT000051
NY 17E569290424F92E AV AV0410 PMRT000051
NY 181D086E1A4ECCC0 AV AV8710 PMRT000087
NY 17C9679213BF125F AV AV8730 PMRT000038
NY 17D3270F03D52A4A AV AV8730 PMRT000047
NY 17E0D3341267EA4F AV AV8730 PMRT000051
NY 17F01A1317E6CC4B AV AV8730 PMRT000061
NY 15AEB8D707346442 AV AV8760 19960912182612S101702M000659AAV8760
NY 15DE01241F8A2456 AV AV8780 19970710145440S101702M000721AAV8780
NY 160E86341A290D7D AV AV8780 19980515101750S101702M000839AAV8780
NN 16175AA10B3A7C03 AV AV8810 19980710144536S101702M000841AAV8810
NY 15F1CDA61F5655E8 AV PB7100 19971113142535S101702A068238APB7100
NY 160C09871F9001F2 AV PB7100 19980429143617S101702Z372375APB7100
NY 15FCCE141AF5E25E AV YAV0491 19980122142900S101702M000889AYAV0491
NY 16001B8F0EA53D76 AV YAV0491 19980212144909S101702M000834AYAV0491
NY 1600B3EE11290746 AV YAV0491 19980216094309S101702Z360000AYAV0491
NY 1600BF7D1404B85A AV YAV0491 19980216163702S101702Z360000AYAV0491
NY 1600CAFD18A258AA AV YAV0491 19980216232923S101702Z360000AYAV0491
NY 1600EBE8145E9F50 AV YAV0491 19980217190729S101702Z360614AYAV0491
NY 16010E541A175F54 AV YAV0491 19980218153923S101702Z360822AYAV0491
NY 16013C930285B008 AV YAV0491 19980219191321S101702A070586AYAV0491
NY 16024C24072CD91A AV YAV0491 19980226131304S101702A070685AYAV0491
NY 16036E7B169C9BD6 AV YAV0491 19980305182245S101702M000837AYAV0491
NY 160527120CD1FE62 AV YAV0491 19980316171545S101702Z365002AYAV0491
NY 16059D8E01DEE026 AV YAV0491 19980319155434S101702M000894AYAV0491
NY 1607CCAC09C7A50C AV YAV0491 19980402152529S101702A071451AYAV0491
NY 1607D0CE0B4721CA AV YAV0491 19980402174755S101702A071451AYAV0491
NY 160A0CBE1D77D87E AV YAV0491 19980416230442S101702M000838AYAV0491
NY 160A27690E1AAF44 AV YAV0491 19980417145713S101702M000838AYAV0491
NY 160F546B090D6BAA AV YAV0491 19980520132114S101702M000911AYAV0491
NY 1612CDA703B93646 AV YAV0491 19980611154441S101702M000840AYAV0491
NY 1613B369128241CA AV YAV0491 19980617085448S101702Z379436AYAV0491
NY 1613E6D00583D5FF AV YAV0491 19980618153333S101702A072820AYAV0491
NY 1613EA7F03A57AF7 AV YAV0491 19980618174545S101702A072820AYAV0491
NY 15FC7C8015088BF0 AV YAV0492 19980120134946S101702Z356212AYAV0492
NY 15FCCE141FD171CA AV YAV0492 19980122142900S101702M000889AYAV0492
NY 16001B8E18CF2BEC AV YAV0492 19980212144910S101702M000834AYAV0492
NY 1600B3EE109EBF4E AV YAV0492 19980216094354S101702Z360001AYAV0492
NY 1600EBED0F410816 AV YAV0492 19980217190815S101702Z360615AYAV0492
NY 16013C910AA3ADF6 AV YAV0492 19980219191324S101702A070586AYAV0492
NY 16024C2203916548 AV YAV0492 19980226131307S101702A070685AYAV0492
NY 16036EA9020D1582 AV YAV0492 19980305182323S101702M000837AYAV0492
NY 1605271C18775376 AV YAV0492 19980316171625S101702Z365003AYAV0492
NY 16059D8F01CA216B AV YAV0492 19980319155435S101702M000894AYAV0492
NY 1607CCAE0F0B319A AV YAV0492 19980402152532S101702A071451AYAV0492
NY 1607D0A60D2960CC AV YAV0492 19980402174757S101702A071451AYAV0492
NY 160A0CBF09C6F1B4 AV YAV0492 19980416230443S101702M000838AYAV0492
NY 160A2768153C9AC8 AV YAV0492 19980417145714S101702M000838AYAV0492
NY 160F546709B5FEF6 AV YAV0492 19980520132114S101702M000911AYAV0492
NY 17E065AB1E85A8D5 AV YAV1002 AIS0000095577015F3
NY 17DC47FA1390D6C0 AV YAVNV10 AIS0000095574D8EE1
NY 17EFCD88088B7283 AV YAVNV10 AIS000009757F15171
NY 17F8BFDF19563581 AV YAVNV10 AIS0000118583C5023
NY 17DC485E0B0B1C08 AV YAVNV50 AIS0000095574D922B
NY 17ECF5620CF828B7 AV YAVNV50 AIS000009757D9753E
NY 17F8BFE11B8CF802 AV YAVNV50 AIS0000118583C503B
NY 17A58E1516E5BA26 AV YAVTOTX AIS000002855827B69
NY 17E3CF6C11F54D9D AZ AZ0210 AWZA000036
NY 1805C70F119FB4AC AZ AZ0210 AWZA000052
NY 17F65B73080F54FE AZ AZ0210 AWZA000054
NY 17D2AD0107D064B9 AZ YAZ0906 AWZA00003556FCFB81
NN 15FCEA5A0A642344 BB BB0610 19980123072119S101702A069974ABB0610
NN 160367661777B7FA BB BB0610 19980305141209S101702A070764ABB0610
NN 160A031D0D9A1220 BB BB0610 19980416171757S101702M000874ABB0610
NN 14FEB040124F01EC BB BB0620
NN 1525374C1A6758F8 BB BB0620 19940421195008S101702A033635ABB0620
NN 157464C8115986E4 BB BB0630 19950907S101702A047247ABB0630
NN 15A06AB904A0B1A4 BB BB0630 19960613175401S101702A054931ABB0630
NN 15E38BA81ABEAD50 BB BB0630 19970814210720S101702A065981ABB0630
NN 1522AAC808CA5442 BB0610 BB0610 E
NY 170C7AEC1C51C551 BC BC0004 A20Y001119507E65B1
NY 170C7AEE09225240 BC BC0005 A20Y001119507E65BC
NY 150F4BA41E900E9A BF BF5200
NY 15C281291C65DA6C BF BF5210 19970116152548S101702A059717ABF5210
NY 15E7E5361957B936 BF BF5210 19970911132316S101702A066068ABF5210
NY 15EB32C21FF75BF7 BF BF5210 19971002134504S101702A067141ABF5210
NY 153902F6137C8A30 BF BF5220 19940825185414S101702A036438ABF5220
NY 15E7E5370F068ADE BF BF5220 19970911132317S101702A066068ABF5220
NY 15EB32C41C4B73B4 BF BF5220 19971002134518S101702A067141ABF5220
NY 153902F700814934 BF BF5230 19940825185417S101702A036438ABF5230
NY 15EB32BF04D1918E BF BF5230 19971002134524S101702A067141ABF5230
NN 15F635010D0A5D46 BF BF5800 19971211145411S101702A068424ABF5800
NN 15DE014E04577D2C BF BF5820 19970710145443S101702M000721ABF5820
NN 15F634FE137FA476 BF BF5820 19971211145412S101702A068424ABF5820
NY 159BAB9B0A182D28 BF BF6090 19960514130419S101702Z248334ABF6090
NY 159BAD8813D65D82 BF BF6090 19960514141319S101702Z248334ABF6090
NY 159BADE616475D14 BF BF6090 19960514142627S101702Z248334ABF6090
NY 155389391E7448C2 BF BF6093 19950210132753S101702Z176750ABF6093
NY 159DE1540BE5E038 BF BF6094 19960528143214S101702Z250204ABF6094
NY 159DE36206C41602 BF BF6094 19960528154545S101702Z250204ABF6094
NY 159E5A841F3B0042 BF BF6094 19960531144954S101702Z250854ABF6094
NY 17C9B91418F8CED6 BF BF7110 DBH0000054
NY 15D0F1D91905D620 BF BF7155 19970418123528S101702Z306908ABF7155
NY 169B32D400FC7E4F BF BF8651 A06M014649
NY 16A2BF941EFADE7F BF BF8651 A06M015279
NY 16C8F25E01CF6F97 BF BF8651 A06M018600
NY 167A09691326E76E BF BF8655 A06M010498
NY 169C55070A2B53F1 BF BF8655 A06M014649
NY 16C919050C1F9F1D BF BF8655 A06M018600
NY 1582B4CA08C9FFD8 BF YBF530A 19951207S101702M000634AYBF530A
NY 158ECF6214B03EEC BF YBF530A 19960222171024S101702A052072AYBF530A
NY 15902FD502A31894 BF YBF530A 19960302112542S101702Z236662AYBF530A
NY 1591002A01037F40 BF YBF530A 19960307154206S101702Z237597AYBF530A
NY 1596837113C0C91A BF YBF530A 19960411173314S101702A053271AYBF530A
NY 15B8AA8F02CE70A0 BF YBF530A 19961115010108S101702M000661AYBF530A
NY 15D0CE0D19C13B8A BF YBF530A 19970417151313S101702M000718AYBF530A
NY 15FBD3FB1547C6FC BF YBF530A 19980116091802S101702A069606AYBF530A
NY 160A0CBE0C8067EA BF YBF530A 19980416230450S101702M000838AYBF530A
NY 160A275B1FFBCE22 BF YBF530A 19980417145719S101702M000838AYBF530A
NY 160E6991020CE58A BF YBF530A 19980514170908S101702A072190AYBF530A
NY 1582B4CF107AF85A BF YBF530C 19951207S101702M000634AYBF530C
NY 158366D90A273776 BF YBF530C 19951212S101702Z224164AYBF530C
NY 158ECF62134EFED2 BF YBF530C 19960222171021S101702A052072AYBF530C
NY 15C70985032B4F18 BF YBF530C 19970214113528S101702M000716AYBF530C
NY 15D0CE3F180E9E6C BF YBF530C 19970417152008S101702M000718AYBF530C
NY 15D76735093AE61C BF YBF530C 19970529145110S101702M000773AYBF530C
NY 15DAB28210DBC286 BF YBF530C 19970619135415S101702A064827AYBF530C
NY 160A0CB0047FDAC8 BF YBF530C 19980416230451S101702M000838AYBF530C
NY 160A2758111F9E66 BF YBF530C 19980417145719S101702M000838AYBF530C
NY 160E699B00605186 BF YBF530C 19980514171120S101702A072190AYBF530C
NY 160A0FFB14698DD0 BG BG5030 19980417004708S101702M000838ABG5030
NY 160A2A331314C09A BG BG5030 19980417164021S101702M000838ABG5030
NY 160E86301107EC02 BG BG5030 19980515101751S101702M000839ABG5030
NY 15B8BADD12C21910 BG YBG0532 19961115104536S101702M000774AYBG0532
NY 15B9DACA017F6818 BG YBG0532 19961122143048S101702Z278945AYBG0532
NY 15BD06F402869D92 BG YBG0532 19961212185135S101702A059774AYBG0532
NY 15CA3899152E40AA BG YBG0532 19970306174909S101702A062187AYBG0532
NY 15CE9E49181FB8B2 BG YBG0532 19970403171955S101702A062906AYBG0532
NY 15B8BADD1AA85D42 BG YBG0533 19961115104534S101702M000774AYBG0533
NY 15B9DACB0CF401B4 BG YBG0533 19961122143047S101702Z278945AYBG0533
NY 15BD06E10C9D2BCA BG YBG0533 19961212184920S101702A059774AYBG0533
NY 15CA389910E791DC BG YBG0533 19970306174905S101702A062187AYBG0533
NY 15D0CE4A19DD3F2A BG YBG0533 19970417152106S101702M000718AYBG0533
NY 15D9C24213072E21 BG YBG0533 19970613143606S101702Z316345AYBG0533
NY 15DAB43604062EC2 BG YBG0533 19970619145541S101702A064697AYBG0533
NY 17F6AA560A34ED8A BP BP5020 BPST000045
NY 17C57B9F08EB0C71 BP BP5030 BPST000037
NY 1832DC7A18736311 BP BP5030 BPST000092
NY 17C57B9713F86E82 BP BP5060 BPST000037
NY 1506668818CF2372 BP BP5110
NY 1535B51614B1A26A BP BP5110 19940804181814S101702M000488ABP5110
NN 150666840082209C BP BP5300
NN 1577B0C60EBA90F4 BP BP5300 19950928S101702A048040ABP5300
NN 1515CB39102F3BAC BP BP6000
NN 14DEC9231A6F93D6 BP BP6020
NN 1515CB251704A156 BP BP6060
NN 15F633A91B86136E BP BP7000 19971211140642S101702A069088ABP7000
NN 15F657CF166B9186 BP BP7000 19971212114155S101702Z350210ABP7000
NN 15F721140F5090C2 BP BP7000 19971217114439S101702A069235ABP7000
NY 15A9318801F6F29C BP BP7030 19960808141137S101702A056223ABP7030
NY 15A955C60B512CE8 BP BP7030 19960809114839S101702Z261082ABP7030
NY 15AB64A015540528 BP BP7030 19960822140553S101702A056579ABP7030
NY 15A1A2D81FF23DC8 BP BP7040 19960621120626S101702Z254169ABP7040
NY 16B27B3C1630432F BP BP7042 A20Y000615
NN 148919C41FD6B1B4 BP BP7090
NN 1577B0C21280B95C BP BP7090 19950928S101702A048040ABP7090
NY 16675AC9070B1EC2 BP BP7090 A20Y000082
NY 16BA2AD11D9A7732 BP BP7120 A20Y000665
NY 16BE8CF60D490B16 BP BP7130 A20Y000665
NY 17C57B990CC74A69 BP BP7161 BPST000037
NY 17E9A6230C310A9D BP BP7161 BPST000055
NY 169B33C51657A5E1 BP BP7200 A20Y000403
NY 16B6B9F81C9E53D1 BP BP7200 A20Y000648
NY 17C57B9A18C275B0 BP BP9060 BPST000037
NY 17F6ABEC0FBFB769 BP BP9060 BPST000045
NY 17E9A64007AB96E0 BP BP9060 BPST000055
NY 1825FD9200278E86 BP BP9060 BPST000082
NY 1577B01A0ACA6D00 BP YBP01NS 19950928S101702A048005AYBP01NS
NY 157C19F315459D6C BP YBP01NS 19951026S101702Z214855AYBP01NS
NY 157C3E731202D132 BP YBP01NS 19951027S101702Z214995AYBP01NS
NY 157D30D41ECCE710 BP YBP01NS 19951102S101702A049016AYBP01NS
NY 15A066B51EF1FB26 BP YBP04NS 19960613153121S101702A055005AYBP04NS
NY 147660C41FD5D044 BP YBP7020
NY 1577B0B810DBF3CC BP YBP7020 19950928S101702A048040AYBP7020
NY 175BDAEA05D32FD9 BP YBPACF2 A12M0061025318300D
NY 1774905A02E83F85 BP YBPALTR A12M00647953E783C0
NY 15DAB24A0AF3AA74 BP YBPCRM 19970619134703S101702A064764AYBPCRM
NY 1800DF8F18D4B675 BP YBPMUT BPST000045588075D1
NY 17DD994215DF226A BP YBPMUT BPST00004857589C3C
NY 17F35E23093D0893 BP YBPMUT BPST000055580F38EA
NY 17E8843C18AB4C98 BP YBPMUT BPST00005757B43238
NY 1818F6591AC16718 BP YBPMUT BPST000079594A969E
NY 1818F65E1627C6B5 BP YBPMUT BPST000079594A969EMVS
NY 1814AE571004BA08 BP YBPMUT BPST0000805926ACAC
NY 1823001E039F38F8 BP YBPMUT BPST000087599ECB6F
NY 182300220D81C015 BP YBPMUT BPST000087599ECB6FMVS
NY 18282A1B12DD2641 BP YBPMUT BPST00008859CA1D14
NY 18282A20053408CF BP YBPMUT BPST00008859CA1D14MVS
NY 182F99880EDCE9B7 BP YBPMUT BPST0000925A086E14
NY 182F998D0987CB8B BP YBPMUT BPST0000925A086E14MVS
NY 150316DC04471502 BP YBPPID
NY 1535B5A51890624A BP YBPPID 19940804183036S101702A036204AYBPPID
NY 147692731D721634 BP YBPSHBP
NY 1795979C1E29E8A6 BP YBPSTAM BPST00002254FC858F
NY 177490BA1DC67F1D BP YBPSUCH A12M00647953E786E4
NY 177490BB13FA02E9 BP YBPSUCH A12M00647953E786E4CICS
NY 17E55ED20DFB6A26 BS BS5030 BUT0000006
NY 1503143A0A6B5CA0 BS BS7630
NY 14F6FE851244A2C6 BW YBWAAGE
NY 1598B165187DA214 BW YBWAAGE 19960425142305S101702A053631AYBWAAGE
NY 15BF591E03C77C20 BW YBWAAGE 19961227131948S101702A060345AYBWAAGE
NY 151167350EB77844 BW YBWAAGF
NY 151B218309B9B006 BW YBWAAGF 19940216154925S101702A031665A
NY 1598B167127A6A6E BW YBWAAGF 19960425142315S101702A053631AYBWAAGF
NY 15AA4B5C1E0F52D4 BW YBWAAGF 19960815141412S101702A056402AYBWAAGF
NY 15BF591F068580AC BW YBWAAGF 19961227131949S101702A060345AYBWAAGF
NY 153032E512219A9E BW YBWAAJ2 19940630170742S101702A035238AYBWAAJ2
NY 15769BEC05314EBA BW YBWAAJ2 19950921172723S101702A047654AYBWAAJ2
NY 153032E91F1F1E52 BW YBWAAJ8 19940630170744S101702A035238AYBWAAJ8
NY 1536D7310C0BC814 BW YBWAAJ8 19940811231714S101702A036260AYBWAAJ8
NY 15769BEC0CDAD2FC BW YBWAAJ8 19950921172725S101702A047654AYBWAAJ8
NY 153032EE08F705A6 BW YBWAAJ9 19940630170745S101702A035238AYBWAAJ9
NY 15769BEC14901608 BW YBWAAJ9 19950921172726S101702A047654AYBWAAJ9
NY 153032E317CD9C54 BW YBWAAJT 19940630170740S101702A035238AYBWAAJT
NY 15769BEA0C918E30 BW YBWAAJT 19950921172720S101702A047654AYBWAAJT
NY 1516E59F12C865DE BW YBWAE0H
NY 155017A01D39050E BW YBWAE3X 19950119153151S101702A041437AYBWAE3X
NY 15979A8F18623C0A BW YBWAE3X 19960418160311S101702A053532AYBWAE3X
NY 159AEDBB1049E920 BW YBWAE3X 19960509194859S101702A053995AYBWAE3X
NY 15A5E21D16F89B16 BW YBWAE3X 19960718124102S101702A056012AYBWAE3X
NY 15A6817902D78222 BW YBWAE3X 19960722114427S101702A056037AYBWAE3X
NY 15C01FBA0A72BD02 BW YBWAE3X 19970101115057S101702A060424AYBWAE3X
NN 1516E57012F552A4 BW YBWAELC
NY 155CF1350B725110 BW YBWAEW1 19950411095234S101702A043641AYBWAEW1
NY 159747811F1E9FA0 BW YBWAEW1 19960416143108S101702Z243792AYBWAEW1
NY 15976F3814F7499E BW YBWAEW1 19960417141232S101702A053473AYBWAEW1
NY 1597700603AB6250 BW YBWAEW1 19960417144123S101702A053473AYBWAEW1
NY 159AEDB910F31422 BW YBWAEW1 19960509194856S101702A053995AYBWAEW1
NY 15A5E21D193721F0 BW YBWAEW1 19960718124100S101702A056012AYBWAEW1
NY 15A68179001193D2 BW YBWAEW1 19960722114425S101702A056037AYBWAEW1
NY 15C01FB316DFC146 BW YBWAEW1 19970101115052S101702A060424AYBWAEW1
NY 15C285FD06034432 BW YBWAEW1 19970116181901S101702A060940AYBWAEW1
NY 14E5629B1F1F866E BW YBWAEW2
NY 15264E7F016424EC BW YBWAEW2 19940428182558S101702A033825AYBWAEW2
NY 159AEDBA1E955F56 BW YBWAEW2 19960509194857S101702A053995AYBWAEW2
NY 15C01FB91A932516 BW YBWAEW2 19970101115053S101702A060424AYBWAEW2
NY 14E5629F0B642836 BW YBWAEW6
NY 15264E6515A07DBA BW YBWAEW6 19940428182212S101702A033825AYBWAEW6
NY 159AEDBB02A632D0 BW YBWAEW6 19960509194857S101702A053995AYBWAEW6
NY 15C01FBA00CC09A0 BW YBWAEW6 19970101115054S101702A060424AYBWAEW6
NY 1550179903F4E224 BW YBWAEW9 19950119153157S101702A041437AYBWAEW9
NY 15979A8F07D8714A BW YBWAEW9 19960418160310S101702A053532AYBWAEW9
NY 159AEDBB0E0852FC BW YBWAEW9 19960509194858S101702A053995AYBWAEW9
NY 15A5E21C06FFD6FA BW YBWAEW9 19960718124101S101702A056012AYBWAEW9
NY 15A68179062805FA BW YBWAEW9 19960722114426S101702A056037AYBWAEW9
NY 15C01FBA07885BD4 BW YBWAEW9 19970101115056S101702A060424AYBWAEW9
NY 14E5628207E87EB4 BW YBWAEWG
NY 15264E7D1743FECA BW YBWAEWG 19940428182459S101702A033825AYBWAEWG
NY 15285AB30043DA0E BW YBWAEWG 19940511190624S101702A034204AYBWAEWG
NY 154869550BD27064 BW YBWAEWG 19941201183642S101702A040024AYBWAEWG
NY 159AEDC61C14E3D0 BW YBWAEWG 19960509194901S101702A053995AYBWAEWG
NY 15264E7402CCD4DA BW YBWAEWJ 19940428182507S101702A033825AYBWAEWJ
NY 15C01FB204A6F0BA BW YBWAEWJ 19970101115100S101702A060424AYBWAEWJ
NY 15CC6B541DF61FD8 BW YBWAEWJ 19970320173113S101702A062607AYBWAEWJ
NY 155017A00C33F4C4 BW YBWAEWL 19950119153152S101702A041437AYBWAEWL
NY 15979A9004882B82 BW YBWAEWL 19960418160303S101702A053532AYBWAEWL
NY 159AEDC509CE74BC BW YBWAEWL 19960509194902S101702A053995AYBWAEWL
NY 15A5E21D11DAD092 BW YBWAEWL 19960718124102S101702A056012AYBWAEWL
NY 15A681781DD12494 BW YBWAEWL 19960722114428S101702A056037AYBWAEWL
NY 15C01FB307AE7E58 BW YBWAEWL 19970101115101S101702A060424AYBWAEWL
NY 1550179F10DDCEF0 BW YBWAEWM 19950119153154S101702A041437AYBWAEWM
NY 15979A8F03A3DFDC BW YBWAEWM 19960418160307S101702A053532AYBWAEWM
NY 159AEDC5105C830E BW YBWAEWM 19960509194903S101702A053995AYBWAEWM
NY 15A5E21D1491CEE0 BW YBWAEWM 19960718124103S101702A056012AYBWAEWM
NY 15A681781B943B82 BW YBWAEWM 19960722114429S101702A056037AYBWAEWM
NY 15C01FB3142ED2E6 BW YBWAEWM 19970101115101S101702A060424AYBWAEWM
NY 14E562940BE19ABA BW YBWAEWN
NY 15264E720403AA7E BW YBWAEWN 19940428182543S101702A033825AYBWAEWN
NY 159AEDC50D42395C BW YBWAEWN 19960509194904S101702A053995AYBWAEWN
NY 15C01FB9140339D6 BW YBWAEWN 19970101115051S101702A060424AYBWAEWN
NY 1521B8FD15680B22 BW YBWAFI0 19940330142436S101702A032858AYBWAFI0
NY 155C2FF915283E98 BW YBWAFI0 19950406143555S101702A043513AYBWAFI0
NY 1598B1651EEB8A26 BW YBWAFI0 19960425142303S101702A053631AYBWAFI0
NY 15BF5914191E3E26 BW YBWAFI0 19961227132017S101702A060345AYBWAFI0
NY 1521B8F50DC19804 BW YBWAFI1 19940330142442S101702A032858AYBWAFI1
NY 1558E08C0887E942 BW YBWAFI1 19950316130445S101702A042903AYBWAFI1
NY 155C2FF91F11439A BW YBWAFI1 19950406143559S101702A043513AYBWAFI1
NY 1598B166063D52C8 BW YBWAFI1 19960425142304S101702A053631AYBWAFI1
NY 15BF59150CA67CE0 BW YBWAFI1 19961227132018S101702A060345AYBWAFI1
NY 1521B8FE0A17A64C BW YBWAFI2 19940330142450S101702A032858AYBWAFI2
NY 1598B1651BF11CE2 BW YBWAFI2 19960425142305S101702A053631AYBWAFI2
NY 15BF5913049FE184 BW YBWAFI2 19961227132018S101702A060345AYBWAFI2
NY 1521B8F61DAC2DC2 BW YBWAFIW 19940330142500S101702A032858AYBWAFIW
NY 1598B15B052AFE12 BW YBWAFIW 19960425142258S101702A053631AYBWAFIW
NY 15BF59141287EB16 BW YBWAFIW 19961227132013S101702A060345AYBWAFIW
NY 1521B8FE1F864D24 BW YBWAFIX 19940330142508S101702A032858AYBWAFIX
NY 1598B1641BD08E54 BW YBWAFIX 19960425142301S101702A053631AYBWAFIX
NY 15BF59161F9AD290 BW YBWAFIX 19961227132014S101702A060345AYBWAFIX
NY 1521B8FA1650FBA8 BW YBWAFIY 19940330142400S101702A032858AYBWAFIY
NY 1598B163133B9970 BW YBWAFIY 19960425142302S101702A053631AYBWAFIY
NY 15BF5914081F89C2 BW YBWAFIY 19961227132014S101702A060345AYBWAFIY
NY 1521B8FC087A0EF8 BW YBWAFIZ 19940330142416S101702A032858AYBWAFIZ
NY 1598B165105A5288 BW YBWAFIZ 19960425142302S101702A053631AYBWAFIZ
NY 15BF591708584444 BW YBWAFIZ 19961227132016S101702A060345AYBWAFIZ
NY 1511676B126756D6 BW YBWAH56
NY 151B2186118141C4 BW YBWAH56 19940216154927S101702A031665A
NY 1598B16602F6C07A BW YBWAH56 19960425142306S101702A053631AYBWAH56
NY 15AA4B58030FFDF6 BW YBWAH56 19960815141413S101702A056402AYBWAH56
NY 15BF5919053C23EE BW YBWAH56 19961227132029S101702A060345AYBWAH56
NY 14F6FEE40DDBF7D0 BW YBWAH57
NY 1598B16609D15584 BW YBWAH57 19960425142307S101702A053631AYBWAH57
NY 15BF591703F9FF84 BW YBWAH57 19961227132030S101702A060345AYBWAH57
NY 14E562FD03599EA6 BW YBWAHD4
NY 15264E7907D18426 BW YBWAHD4 19940428182421S101702A033825AYBWAHD4
NY 159AEDC61FBF7C90 BW YBWAHD4 19960509194900S101702A053995AYBWAHD4
NY 15C01FB91D5255E8 BW YBWAHD4 19970101115058S101702A060424AYBWAHD4
NY 14E563410BC15EDC BW YBWAO3W
NY 15264E7B164F3C72 BW YBWAO3W 19940428182442S101702A033825AYBWAO3W
NY 159AEDC61DFDA230 BW YBWAO3W 19960509194901S101702A053995AYBWAO3W
NY 15C01FB20734FB6C BW YBWAO3W 19970101115059S101702A060424AYBWAO3W
NY 1511678007403006 BW YBWAPVY
NY 151B21860905A464 BW YBWAPVY 19940216154930S101702A031665A
NY 1598B1660C022D8E BW YBWAPVY 19960425142311S101702A053631AYBWAPVY
NY 15AA4B571D5BBA10 BW YBWAPVY 19960815141415S101702A056402AYBWAPVY
NY 15BF591808145EDA BW YBWAPVY 19961227132031S101702A060345AYBWAPVY
NY 151167A918CC2004 BW YBWAPVZ
NY 151B218318AA6790 BW YBWAPVZ 19940216154932S101702A031665A
NY 1598B1670DBD0A2E BW YBWAPVZ 19960425142311S101702A053631AYBWAPVZ
NY 15AA4B581162478C BW YBWAPVZ 19960815141410S101702A056402AYBWAPVZ
NY 15BF591908E8C6B4 BW YBWAPVZ 19961227132032S101702A060345AYBWAPVZ
NY 151167B01D57144E BW YBWAXLQ
NY 151B21831318EFE2 BW YBWAXLQ 19940216154937S101702A031665A
NY 1598B167191D450E BW YBWAXLQ 19960425142313S101702A053631AYBWAXLQ
NY 15AA4B580AE003AE BW YBWAXLQ 19960815141411S101702A056402AYBWAXLQ
NY 15BF591F16BCCFC8 BW YBWAXLQ 19961227132033S101702A060345AYBWAXLQ
NN 14DDB433139A8DCC BX BX0330
NN 1524171A15C1F372 BX BX0330 19940414155938S101702A033405ABX0330
NN 15A938F0027489B2 BX BX0330 19960808183517S101702A056200ABX0330
NN 15E030ED03C2ED60 BX BX5100 19970724125214S101702A065494ABX5100
NN 14EAE56D0E216AAC BX BX5200
NN 154A9D950574CA9A BX BX5200 19941215191359S101702A040134ABX5200
NN 15B0E7CC19E4F582 BX BX5200 19960926155311S101702A057383ABX5200
NN 15DF17CE10E3F8E8 BX BX6400 19970717131027S101702A065289ABX6400
NN 1543FD0E0F7E84A6 BX BX6410 19941103151044S101702A038911ABX6410
NN 15B0E7D20E740CF8 BX BX6410 19960926155312S101702A057383ABX6410
NN 15BCFDB81BE1E830 BX BX6410 19961212132749S101702A059703ABX6410
NN 15A8E25E05D16382 BX BX6500 19960806145757S101702Z260717ABX6500
NN 15AFCB4B05BD16DE BX BX6500 19960919140931S101702A057271ABX6500
NN 15BCFDB30A119D48 BX BX6500 19961212132750S101702A059703ABX6500
NN 15AB6A8E1828D382 BX BX6550 19960822173742S101702Z262853ABX6550
NN 15AFCB4C074093F0 BX BX6550 19960919140932S101702A057273ABX6550
NN 15BCFDC10B7D7C14 BX BX6550 19961212132745S101702A059703ABX6550
NN 15AC0710003145C8 BX BX6560 19960826145905S101702Z263181ABX6560
NN 15AFCB4C03BF4D84 BX BX6560 19960919140932S101702A057273ABX6560
NN 15BCFDC31FB936F2 BX BX6560 19961212132746S101702A059703ABX6560
NN 15AEAB4215CC4452 BX BX6570 19960912102108S101702Z265961ABX6570
NN 15AFCB4C04085138 BX BX6570 19960919140933S101702A057273ABX6570
NN 15BCFDC311D7C1C4 BX BX6570 19961212132746S101702A059703ABX6570
NN 15EB32C617030990 BX BX6700 19971002134658S101702A067077ABX6700
NN 1611B0D41D5CB5AE BX BX6700 19980604135634S101702A072837ABX6700
NN 15D3F46103C1645C BX BX6750 19970507161423S101702Z310325ABX6750
NN 15D7638C0B0BA518 BX BX6750 19970529124001S101702A064140ABX6750
NN 1611B0D3162F8C6E BX BX6750 19980604135635S101702A072837ABX6750
NN 15486934015A2970 BX BX7150 19941201183328S101702A039829ABX7150
NN 15609512113BC514 BX BX7150 19950504S101702A044162ABX7150
NN 15B0E7CC1F685528 BX BX7150 19960926155302S101702A057383ABX7150
NN 14EB001A1851033E BX BX7200
NN 14EAFFFB1A72D1FA BX BX7400
NN 14EB000B1CEB7EE0 BX BX7410
NN 150665481D304842 BX BX7620
NN 153F94601E5A8978 BX BX7620 19941006135422S101702A037791ABX7620
NN 15B0E7CE03D083CC BX BX7620 19960926155305S101702A057383ABX7620
NN 14C8C88F1232C564 BX BX7900
NN 15EB32D00CA588A2 BX BX8000 19971002134658S101702A067077ABX8000
NN 16173BB6085000B0 BX BX8000 19980709201829S101702A073668ABX8000
NN 1617503911A3AAAD BX BX8000 19980710083334S101702A073668ABX8000
NN 156B92E51CDFF42C BX BX8100 19950713S101702Z199809ABX8100
NN 156B93B41230F73A BX BX8100 19950713S101702Z199813ABX8100
NN 15B0E7D1090EA204 BX BX8100 19960926155310S101702A057383ABX8100
NN 15BCFDB90A440BF0 BX BX8110 19961212132748S101702A059703ABX8110
NN 1611B0D51958A307 BX BX8110 19980604135636S101702A072837ABX8110
NY 17E449311286AF10 BX BX8280 CLOS000125
NN 153F9DD401823670 BX YBX0121 19941006193229S101702A037591AYBX0121
NN 155D26370DF7E3B4 BX YBX0121 19950412S101702A043533AYBX0121
NN 157D3328100B4204 BX YBX0121 19951102S101702A048803AYBX0121
NN 1596811916897804 BX YBX0121 19960411160906S101702A053228AYBX0121
NN 159682C60968F844 BX YBX0121 19960411170949S101702A053228AYBX0121
NN 15A938CA1F752144 BX YBX0121 19960808183126S101702A056200AYBX0121
NN 15B2001C089B4AAC BX YBX0121 19961003150558S101702A057489AYBX0121
NN 15B20298016DEE2C BX YBX0121 19961003163437S101702A057489AYBX0121
NN 15BD048619B26D8C BX YBX0121 19961212173258S101702A059679AYBX0121
NN 15CFB33D0A70748C BX YBX0121 19970410143059S101702A063036AYBX0121
NN 15D8853008179396 BX YBX0121 19970605172720S101702A064221AYBX0121
NN 15DCE9521D0702E4 BX YBX0121 19970703160016S101702A064922AYBX0121
NN 15DF17F107130182 BX YBX0121 19970717131555S101702A065362AYBX0121
NN 15DF18610ECD5B8C BX YBX0121 19970717133108S101702A065362AYBX0121
NN 15EF9948056B3B58 BX YBX0121 19971030134551S101702A067836AYBX0121
NN 1517FBEA1EB63092 BX YBX0311
NN 151B47C60BD65A5E BX YBX0311 19940217143350S101702A031502A
NN 153264DD01428E8A BX YBX0311 19940714161915S101702A034979AYBX0311
NN 1535ADFE06D1EBB8 BX YBX0311 19940804140337S101702A036030AYBX0311
NN 153F9DD204C38F38 BX YBX0311 19941006193204S101702A037591AYBX0311
NN 1540AEA40F98C7D2 BX YBX0311 19941013141432S101702A038234AYBX0311
NN 155D263E1A28B2F2 BX YBX0311 19950412S101702A043533AYBX0311
NN 155E1710155D711E BX YBX0311 19950418S101702Z185893AYBX0311
NN 155E80A60D44FFA0 BX YBX0311 19950421S101702Z186279AYBX0311
NN 15609509084E36C4 BX YBX0311 19950504S101702A044162AYBX0311
NN 1560C001172F0450 BX YBX0311 19950505S101702Z188373AYBX0311
NN 15617FC50D017534 BX YBX0311 19950510S101702Z189043AYBX0311
NN 1561B0C71A8B2706 BX YBX0311 19950511S101702A044343AYBX0311
NN 157D332D0550BDB2 BX YBX0311 19951102S101702A048803AYBX0311
NN 15941BBC05159502 BX YBX0311 19960327101616S101702Z240638AYBX0311
NN 159681200895446C BX YBX0311 19960411160908S101702A053228AYBX0311
NN 159682CC1D267992 BX YBX0311 19960411170950S101702A053228AYBX0311
NN 15971ECB1DA3822C BX YBX0311 19960415141359S101702Z243570AYBX0311
NN 159722F91585F2FE BX YBX0311 19960415164333S101702Z243618AYBX0311
NN 1597252E09386C10 BX YBX0311 19960415180232S101702Z243633AYBX0311
NN 15972745155833D2 BX YBX0311 19960415191722S101702Z243644AYBX0311
NN 159748B81003BA9E BX YBX0311 19960416151429S101702Z243806AYBX0311
NN 15976D991D7CDA82 BX YBX0311 19960417131431S101702Z244080AYBX0311
NN 1597903017420BBE BX YBX0311 19960418095238S101702Z244223AYBX0311
NN 159831BA0D5EE4DC BX YBX0311 19960422101406S101702Z244648AYBX0311
NN 1598332E1C29CC10 BX YBX0311 19960422110638S101702Z244671AYBX0311
NN 1599CBB81AE369D0 BX YBX0311 19960502144753S101702A053763AYBX0311
NN 15A1335E1F997436 BX YBX0311 19960618173627S101702Z253574AYBX0311
NN 15A179A51E86CDC2 BX YBX0311 19960620113120S101702Z253964AYBX0311
NN 15A3B56317BBB064 BX YBX0311 19960704163425S101702A055219AYBX0311
NN 15A4CA4A0322036E BX YBX0311 19960711134555S101702A055749AYBX0311
NN 15A7C1460378D528 BX YBX0311 19960730103037S101702Z259993AYBX0311
NN 15A7C6CC1C6A438A BX YBX0311 19960730134827S101702Z259993AYBX0311
NN 15A938CD172EC0B0 BX YBX0311 19960808183112S101702A056200AYBX0311
NN 15B200200B80CF70 BX YBX0311 19961003150552S101702A057489AYBX0311
NN 15B2029D0C7CFC30 BX YBX0311 19961003163431S101702A057489AYBX0311
NN 15B2EF2A1ED07B58 BX YBX0311 19961009134202S101702Z269958AYBX0311
NN 15B54BB705E80C82 BX YBX0311 19961024141922S101702A057873AYBX0311
NN 15BD048D164A21A0 BX YBX0311 19961212173254S101702A059679AYBX0311
NN 15CFB346118B6B8C BX YBX0311 19970410143100S101702A063036AYBX0311
NN 15D0CBB917158A90 BX YBX0311 19970417134902S101702A063207AYBX0311
NN 15D0CCBB06F0E2EA BX YBX0311 19970417142628S101702A063207AYBX0311
NN 15D8853D1F056A3A BX YBX0311 19970605172721S101702A064221AYBX0311
NN 15DCE95D18BB4012 BX YBX0311 19970703160008S101702A064922AYBX0311
NN 15DE1C6210BDD89C BX YBX0311 19970711071158S101702Z320845AYBX0311
NN 15DF180005AF0A52 BX YBX0311 19970717131546S101702A065362AYBX0311
NN 15DF185A1F941BE4 BX YBX0311 19970717133054S101702A065362AYBX0311
NN 15E002C71642A4E4 BX YBX0311 19970723092030S101702Z323871AYBX0311
NN 15E030DC18E09A2C BX YBX0311 19970724124832S101702A065494AYBX0311
NN 15E6CB4016FAA2EC BX YBX0311 19970904130822S101702A066492AYBX0311
NN 15E6CE9801253748 BX YBX0311 19970904151111S101702A066492AYBX0311
NN 1517FBD607FD5CC8 BX YBX0312
NN 153264EE08043EBE BX YBX0312 19940714161917S101702A034979AYBX0312
NN 153F9DD108F4D7C4 BX YBX0312 19941006193205S101702A037591AYBX0312
NN 1540AEA618EB03C6 BX YBX0312 19941013141433S101702A038234AYBX0312
NN 155D263E150A5D2C BX YBX0312 19950412S101702A043533AYBX0312
NN 155E622604D35082 BX YBX0312 19950420S101702A043759AYBX0312
NN 157D332B0A0B7E30 BX YBX0312 19951102S101702A048803AYBX0312
NN 15941BBB0BF5B9D6 BX YBX0312 19960327101618S101702Z240638AYBX0312
NN 1596811F09BF9F52 BX YBX0312 19960411160910S101702A053228AYBX0312
NN 159682CB0B2DF134 BX YBX0312 19960411170951S101702A053228AYBX0312
NN 1599CBBC015EEAE0 BX YBX0312 19960502144754S101702A053763AYBX0312
NN 15A179A51B20272C BX YBX0312 19960620113121S101702Z253964AYBX0312
NN 15A3B5630AF705BA BX YBX0312 19960704163425S101702A055219AYBX0312
NN 15A4CA510C99DEFE BX YBX0312 19960711134559S101702A055749AYBX0312
NN 15A7C1451DC36FD8 BX YBX0312 19960730103038S101702Z259993AYBX0312
NN 15A7C6CC16A54468 BX YBX0312 19960730134828S101702Z259993AYBX0312
NN 15A938D01CEA5422 BX YBX0312 19960808183113S101702A056200AYBX0312
NN 15B2001F0F5C32C2 BX YBX0312 19961003150554S101702A057489AYBX0312
NN 15B2029D033D3538 BX YBX0312 19961003163432S101702A057489AYBX0312
NN 15C28557101E932E BX YBX0312 19970116175259S101702A060891AYBX0312
NN 15CFB33B0B681EE6 BX YBX0312 19970410143101S101702A063036AYBX0312
NN 15D0CBB81D354FFA BX YBX0312 19970417134903S101702A063207AYBX0312
NN 15D0CCBD1491C23A BX YBX0312 19970417142629S101702A063207AYBX0312
NN 15D8853D064FD986 BX YBX0312 19970605172722S101702A064221AYBX0312
NN 15D9983E03755D82 BX YBX0312 19970612132948S101702A064570AYBX0312
NN 15DCE95A1C555F2A BX YBX0312 19970703160008S101702A064922AYBX0312
NN 15DDA34A1971DA6E BX YBX0312 19970708065743S101702Z320108AYBX0312
NN 15DDFE000D06E702 BX YBX0312 19970710130348S101702A065203AYBX0312
NN 15DF17FF01855A46 BX YBX0312 19970717131547S101702A065362AYBX0312
NN 15DF185C07C25A74 BX YBX0312 19970717133055S101702A065362AYBX0312
NN 15E002C71946719A BX YBX0312 19970723092031S101702Z323871AYBX0312
NN 15E030D51FF9926A BX YBX0312 19970724124835S101702A065494AYBX0312
NN 1516E62916E6DCBC BX YBX0313
NN 153264EC18C3BC18 BX YBX0313 19940714161918S101702A034979AYBX0313
NN 153F9DCF12275A92 BX YBX0313 19941006193206S101702A037591AYBX0313
NN 1540AEA70B5A92B4 BX YBX0313 19941013141434S101702A038234AYBX0313
NN 155D263D1BB91C1E BX YBX0313 19950412S101702A043533AYBX0313
NN 157D33291FDAFD5C BX YBX0313 19951102S101702A048803AYBX0313
NN 1582314E009C9376 BX YBX0313 19951204S101702Z222592AYBX0313
NN 1582B64D0AF8ABF8 BX YBX0313 19951207S101702A050132AYBX0313
NN 15941BBB02F08FC2 BX YBX0313 19960327101619S101702Z240638AYBX0313
NN 1596811E13F50B5C BX YBX0313 19960411160913S101702A053228AYBX0313
NN 159682CB0D6E49BE BX YBX0313 19960411170951S101702A053228AYBX0313
NN 15A4CA4F184F10C2 BX YBX0313 19960711134603S101702A055749AYBX0313
NN 15A7C1450E3FF328 BX YBX0313 19960730103039S101702Z259993AYBX0313
NN 15A7C6CC0CAD717A BX YBX0313 19960730134829S101702Z259993AYBX0313
NN 15A938CC16BE299E BX YBX0313 19960808183114S101702A056200AYBX0313
NN 15B2001F0323D070 BX YBX0313 19961003150554S101702A057489AYBX0313
NN 15B2029C1292CB4A BX YBX0313 19961003163433S101702A057489AYBX0313
NN 15CFB34314D5BFF0 BX YBX0313 19970410143102S101702A063036AYBX0313
NN 15D0CBB70926EE64 BX YBX0313 19970417134905S101702A063207AYBX0313
NN 15D0CCBC1F143758 BX YBX0313 19970417142630S101702A063207AYBX0313
NN 15D8853C122DD322 BX YBX0313 19970605172723S101702A064221AYBX0313
NN 15DCE95B0CCF5F5A BX YBX0313 19970703160009S101702A064922AYBX0313
NN 15DF17FD0DC03A52 BX YBX0313 19970717131547S101702A065362AYBX0313
NN 15DF185B19886000 BX YBX0313 19970717133056S101702A065362AYBX0313
NN 15E002C711B32726 BX YBX0313 19970723092031S101702Z323871AYBX0313
NN 15E030DB1C9062E2 BX YBX0313 19970724124837S101702A065494AYBX0313
NN 15EB32B410F0C588 BX YBX0313 19971002134434S101702A067077AYBX0313
NN 160F56EE071F7EDA BX YBX0313 19980520145159S101702A072692AYBX0313
NN 15B2002000B550CE BX YBX0320 19961003150555S101702A057489AYBX0320
NN 15B2029D0345B242 BX YBX0320 19961003163434S101702A057489AYBX0320
NN 15C285560E4FEF82 BX YBX0320 19970116175300S101702A060891AYBX0320
NN 15CFB35107DA49EC BX YBX0320 19970410143103S101702A063036AYBX0320
NN 15D8853800DAC4EA BX YBX0320 19970605172724S101702A064221AYBX0320
NN 15DCE95D0B47FDE2 BX YBX0320 19970703160010S101702A064922AYBX0320
NN 15DDA4B911D2643C BX YBX0320 19970708074923S101702Z320111AYBX0320
NN 15DDA6051ECDC0F6 BX YBX0320 19970708083532S101702Z320122AYBX0320
NN 15DDA6A517E6EA46 BX YBX0320 19970708085756S101702Z320122AYBX0320
NN 15DDA77B0568987A BX YBX0320 19970708092727S101702Z320133AYBX0320
NN 15DDFE071D0A49CE BX YBX0320 19970710130345S101702A065203AYBX0320
NN 15DF17FF112F1BE0 BX YBX0320 19970717131548S101702A065362AYBX0320
NN 15DF185B0C43B52F BX YBX0320 19970717133057S101702A065362AYBX0320
NN 15E002CF0F2B1003 BX YBX0320 19970723092127S101702Z323872AYBX0320
NN 15E030D601AD678C BX YBX0320 19970724124839S101702A065494AYBX0320
NN 1516E62C137D5C3A BX YBX0321
NN 153264EC0AA30052 BX YBX0321 19940714161919S101702A034979AYBX0321
NN 153F9DD01CA9EE92 BX YBX0321 19941006193207S101702A037591AYBX0321
NN 1540AEA716201D84 BX YBX0321 19941013141435S101702A038234AYBX0321
NN 155D263E1244FDDC BX YBX0321 19950412S101702A043533AYBX0321
NN 157D332A085A6C04 BX YBX0321 19951102S101702A048803AYBX0321
NN 1594229317A53EF6 BX YBX0321 19960327142142S101702Z240756AYBX0321
NN 1596811E0DE1D5D2 BX YBX0321 19960411160914S101702A053228AYBX0321
NN 159682CB04B3976A BX YBX0321 19960411170952S101702A053228AYBX0321
NN 1596CD6A1F32CB0C BX YBX0321 19960413134150S101702Z243379AYBX0321
NN 1596D2641F8A642E BX YBX0321 19960413163905S101702Z243384AYBX0321
NN 1599CBC411156162 BX YBX0321 19960502144748S101702A053763AYBX0321
NN 15A0662C05DCE642 BX YBX0321 19960613151234S101702A054925AYBX0321
NN 15A080C10A9A4BAC BX YBX0321 19960614070338S101702Z252740AYBX0321
NN 15A0811E1115DF82 BX YBX0321 19960614071636S101702Z252742AYBX0321
NN 15A3B55F01EC0ED2 BX YBX0321 19960704163427S101702A055219AYBX0321
NN 15A4CA480F1C4FF0 BX YBX0321 19960711134539S101702A055749AYBX0321
NN 15A7C1A2045F6494 BX YBX0321 19960730104336S101702Z259999AYBX0321
NN 15A7C6F10DBAC6B4 BX YBX0321 19960730135345S101702Z260055AYBX0321
NN 15AA50F2045D52C4 BX YBX0321 19960815173129S101702A056350AYBX0321
NN 15B2001B1AD70544 BX YBX0321 19961003150555S101702A057489AYBX0321
NN 15B2029A154E50C2 BX YBX0321 19961003163434S101702A057489AYBX0321
NN 15CFB3450ED969AC BX YBX0321 19970410143104S101702A063036AYBX0321
NN 15D0CBB80FAD6102 BX YBX0321 19970417134905S101702A063207AYBX0321
NN 15D0CCBA04FF6F9C BX YBX0321 19970417142631S101702A063207AYBX0321
NN 15D885321E817402 BX YBX0321 19970605172725S101702A064221AYBX0321
NN 15DCE95B0404DD6C BX YBX0321 19970703160011S101702A064922AYBX0321
NN 15DDA4B911C4600E BX YBX0321 19970708074924S101702Z320111AYBX0321
NN 15DDA6040C4E5E70 BX YBX0321 19970708083532S101702Z320122AYBX0321
NN 15DDA6A512ADDB70 BX YBX0321 19970708085757S101702Z320122AYBX0321
NN 15DDA77B023A932A BX YBX0321 19970708092728S101702Z320133AYBX0321
NN 15DDFE0713FD52F0 BX YBX0321 19970710130346S101702A065203AYBX0321
NN 15DF17F6166F71AF BX YBX0321 19970717131549S101702A065362AYBX0321
NN 15DF185B1E67D71A BX YBX0321 19970717133058S101702A065362AYBX0321
NN 15E002CE0290DF54 BX YBX0321 19970723092128S101702Z323872AYBX0321
NN 15E030D7095E96AF BX YBX0321 19970724124827S101702A065494AYBX0321
NN 1516E64C0425C854 BX YBX0322
NN 153264ED162856B6 BX YBX0322 19940714161906S101702A034979AYBX0322
NN 153F9DD21A270844 BX YBX0322 19941006193208S101702A037591AYBX0322
NN 1540AEA40F3B6112 BX YBX0322 19941013141416S101702A038234AYBX0322
NN 155D263F0256AA00 BX YBX0322 19950412S101702A043533AYBX0322
NN 155E622604C3A1C6 BX YBX0322 19950420S101702A043759AYBX0322
NN 157D332B13FE5C94 BX YBX0322 19951102S101702A048803AYBX0322
NN 1594226F03985B38 BX YBX0322 19960327141624S101702Z240750AYBX0322
NN 1596811F044C267E BX YBX0322 19960411160917S101702A053228AYBX0322
NN 159682C916255372 BX YBX0322 19960411170953S101702A053228AYBX0322
NN 1596CD6B0BF18AE4 BX YBX0322 19960413134151S101702Z243379AYBX0322
NN 1599CBC41E4A5392 BX YBX0322 19960502144750S101702A053763AYBX0322
NN 15A0662E03528420 BX YBX0322 19960613151235S101702A054925AYBX0322
NN 15A080C10701BF28 BX YBX0322 19960614070339S101702Z252740AYBX0322
NN 15A0811119DA5484 BX YBX0322 19960614071450S101702Z252741AYBX0322
NN 15A3B5650251D4C0 BX YBX0322 19960704163429S101702A055219AYBX0322
NN 15A4CA4811445A0E BX YBX0322 19960711134542S101702A055749AYBX0322
NN 15A7C1A208FF7610 BX YBX0322 19960730104336S101702Z259999AYBX0322
NN 15A7C6E106F235C2 BX YBX0322 19960730135122S101702Z260054AYBX0322
NN 15A938D019271ACC BX YBX0322 19960808183124S101702A056200AYBX0322
NN 1516E6481F5112F8 BX YBX0323
NN 153264EB1CB75F7E BX YBX0323 19940714161908S101702A034979AYBX0323
NN 153F9DD00CED9794 BX YBX0323 19941006193209S101702A037591AYBX0323
NN 1540AE9D08925546 BX YBX0323 19941013141420S101702A038234AYBX0323
NN 155D263D13F05A5C BX YBX0323 19950412S101702A043533AYBX0323
NN 157D332A063DC782 BX YBX0323 19951102S101702A048803AYBX0323
NN 159422991D21EB22 BX YBX0323 19960327142214S101702Z240758AYBX0323
NN 1596811C1BFEA9A8 BX YBX0323 19960411160918S101702A053228AYBX0323
NN 159682CA10363E50 BX YBX0323 19960411170953S101702A053228AYBX0323
NN 1596CD6A1B0448C6 BX YBX0323 19960413134151S101702Z243379AYBX0323
NN 1599CBBA1BEBF8CA BX YBX0323 19960502144751S101702A053763AYBX0323
NN 15A0662C06291CC2 BX YBX0323 19960613151236S101702A054925AYBX0323
NN 15A080C214C15398 BX YBX0323 19960614070339S101702Z252740AYBX0323
NN 15A0811E111DEFF2 BX YBX0323 19960614071637S101702Z252742AYBX0323
NN 15A3B5621E047D64 BX YBX0323 19960704163416S101702A055219AYBX0323
NN 15A4CA491DD17A24 BX YBX0323 19960711134551S101702A055749AYBX0323
NN 15A7C1A2007B8B2C BX YBX0323 19960730104336S101702Z259999AYBX0323
NN 15A7C6F10B10C57A BX YBX0323 19960730135346S101702Z260055AYBX0323
NN 15AA50D313BAACC8 BX YBX0323 19960815173146S101702A056350AYBX0323
NN 15B2001C0BCBC75E BX YBX0323 19961003150556S101702A057489AYBX0323
NN 15B202990AE69FD4 BX YBX0323 19961003163435S101702A057489AYBX0323
NN 15CFB33A0A9B41A8 BX YBX0323 19970410143107S101702A063036AYBX0323
NN 15D88538130A01B6 BX YBX0323 19970605172726S101702A064221AYBX0323
NN 15DCE94C10359FEE BX YBX0323 19970703160012S101702A064922AYBX0323
NN 15DF17F51C4D0118 BX YBX0323 19970717131550S101702A065362AYBX0323
NN 15DF186409B3ACAC BX YBX0323 19970717133101S101702A065362AYBX0323
NN 15E002CD1DA6D38E BX YBX0323 19970723092129S101702Z323872AYBX0323
NN 15E030DB0890851C BX YBX0323 19970724124829S101702A065494AYBX0323
NN 15EB32B4148D7FCF BX YBX0323 19971002134435S101702A067077AYBX0323
NN 160F56EA11499522 BX YBX0323 19980520145201S101702A072692AYBX0323
NN 1524170C0EFD27C2 BX YBX0341 19940414155510S101702A033405AYBX0341
NN 1527643A1C7926E6 BX YBX0341 19940505160752S101702A033611AYBX0341
NN 153F9DD504C0AC28 BX YBX0341 19941006193211S101702A037591AYBX0341
NN 155D263D15F90954 BX YBX0341 19950412S101702A043533AYBX0341
NN 155FA55E0D51C342 BX YBX0341 19950428S101702Z187241AYBX0341
NN 15609508105B9CF8 BX YBX0341 19950504S101702A044162AYBX0341
NN 15A938D0146A0122 BX YBX0341 19960808183116S101702A056200AYBX0341
NN 152416F61F5DDD16 BX YBX0342 19940414155516S101702A033405AYBX0342
NN 1527643A1702559A BX YBX0342 19940505160753S101702A033611AYBX0342
NN 153F9DD306D678DE BX YBX0342 19941006193213S101702A037591AYBX0342
NN 155D263D108760DC BX YBX0342 19950412S101702A043533AYBX0342
NN 15A938CC00667982 BX YBX0342 19960808183116S101702A056200AYBX0342
NN 152417031461C6F2 BX YBX0343 19940414155517S101702A033405AYBX0343
NN 153F9DD10CA45788 BX YBX0343 19941006193214S101702A037591AYBX0343
NN 155D263C149C5570 BX YBX0343 19950412S101702A043533AYBX0343
NN 15A938CC1579D790 BX YBX0343 19960808183117S101702A056200AYBX0343
NN 1516E6321D4DD2A8 BX YBX0361
NN 153F9DD40F45E0FE BX YBX0361 19941006193216S101702A037591AYBX0361
NN 155D263D1C5CD71E BX YBX0361 19950412S101702A043533AYBX0361
NN 157D332817D7CE46 BX YBX0361 19951102S101702A048803AYBX0361
NN 1596811C0257426A BX YBX0361 19960411160919S101702A053228AYBX0361
NN 159682C71D836602 BX YBX0361 19960411170954S101702A053228AYBX0361
NN 15A1786F08528712 BX YBX0361 19960620104731S101702Z253936AYBX0361
NN 15A3B55E1F0385B0 BX YBX0361 19960704163417S101702A055219AYBX0361
NN 15A938CE14708904 BX YBX0361 19960808183119S101702A056200AYBX0361
NN 1515CC090B9D52AC BX YBX0362
NN 153F9DD0057E2130 BX YBX0362 19941006193218S101702A037591AYBX0362
NN 155D263C1DA479CE BX YBX0362 19950412S101702A043533AYBX0362
NN 157D332819D4E5DE BX YBX0362 19951102S101702A048803AYBX0362
NN 1596811814BBA5A6 BX YBX0362 19960411160920S101702A053228AYBX0362
NN 159682C910E9890A BX YBX0362 19960411170954S101702A053228AYBX0362
NN 15A1786F07B82056 BX YBX0362 19960620104732S101702Z253936AYBX0362
NN 15A3B562165676B2 BX YBX0362 19960704163419S101702A055219AYBX0362
NN 15A938D0009B6514 BX YBX0362 19960808183120S101702A056200AYBX0362
NN 1515CC08163BC306 BX YBX0363
NN 153F9DD017F9257E BX YBX0363 19941006193219S101702A037591AYBX0363
NN 155D263E009C9196 BX YBX0363 19950412S101702A043533AYBX0363
NN 157D33231CD9725A BX YBX0363 19951102S101702A048803AYBX0363
NN 1596811B0926CAE6 BX YBX0363 19960411160921S101702A053228AYBX0363
NN 159682C90FA3739A BX YBX0363 19960411170955S101702A053228AYBX0363
NN 15A1786F07ADAD66 BX YBX0363 19960620104733S101702Z253936AYBX0363
NN 15A3B55E1EDCD382 BX YBX0363 19960704163424S101702A055219AYBX0363
NN 15A938CE11DBCD08 BX YBX0363 19960808183121S101702A056200AYBX0363
NN 1516E63609520A58 BX YBX0381
NN 153264EC014C1AD0 BX YBX0381 19940714161912S101702A034979AYBX0381
NN 153F9DD510104A74 BX YBX0381 19941006193220S101702A037591AYBX0381
NN 1540AE9D05DBC006 BX YBX0381 19941013141427S101702A038234AYBX0381
NN 155D263F06EDF958 BX YBX0381 19950412S101702A043533AYBX0381
NN 157D332B0E36B73A BX YBX0381 19951102S101702A048803AYBX0381
NN 15941D1A1D252970 BX YBX0381 19960327110524S101702Z240662AYBX0381
NN 1596811F08577916 BX YBX0381 19960411160922S101702A053228AYBX0381
NN 159682CB0E6350B6 BX YBX0381 19960411170955S101702A053228AYBX0381
NN 15A938D000ABCED8 BX YBX0381 19960808183121S101702A056200AYBX0381
NN 15CFB33A1E6D8108 BX YBX0381 19970410143108S101702A063036AYBX0381
NN 15D8853A1C0E90A4 BX YBX0381 19970605172728S101702A064221AYBX0381
NN 15DCE95B04C616B4 BX YBX0381 19970703160012S101702A064922AYBX0381
NN 15DF17F41751D58E BX YBX0381 19970717131551S101702A065362AYBX0381
NN 15DF1862019374D8 BX YBX0381 19970717133103S101702A065362AYBX0381
NN 1516E6440D80E304 BX YBX0382
NN 151B47D002F8C64A BX YBX0382 19940217143416S101702A031502A
NN 151FAFB2178CABE6 BX YBX0382 19940317152239S101702A032458AYBX0382
NN 153264D21FC2586C BX YBX0382 19940714161913S101702A034979AYBX0382
NN 153F9DD5190A965C BX YBX0382 19941006193223S101702A037591AYBX0382
NN 1540AE9D0FE4A544 BX YBX0382 19941013141428S101702A038234AYBX0382
NN 155D263F0C849DE0 BX YBX0382 19950412S101702A043533AYBX0382
NN 155E6224079BF6F8 BX YBX0382 19950420S101702A043759AYBX0382
NN 157D332B1B1D0434 BX YBX0382 19951102S101702A048803AYBX0382
NN 15941D1A1C21EDD8 BX YBX0382 19960327110525S101702Z240662AYBX0382
NN 1596811E1D9F7546 BX YBX0382 19960411160923S101702A053228AYBX0382
NN 159682C91FBEB76E BX YBX0382 19960411170956S101702A053228AYBX0382
NN 1599CBB7047028D8 BX YBX0382 19960502144752S101702A053763AYBX0382
NN 15A938D00AFBECBE BX YBX0382 19960808183122S101702A056200AYBX0382
NN 15B2001F1BFA00D6 BX YBX0382 19961003150556S101702A057489AYBX0382
NN 15B2029C05524AC2 BX YBX0382 19961003163435S101702A057489AYBX0382
NN 15C28556133EC9B8 BX YBX0382 19970116175301S101702A060891AYBX0382
NN 15CFB3450E9DAF24 BX YBX0382 19970410143109S101702A063036AYBX0382
NN 15D8853C1B6DF5B6 BX YBX0382 19970605172730S101702A064221AYBX0382
NN 15DCE94E1744EEAC BX YBX0382 19970703160012S101702A064922AYBX0382
NN 15DF17F50CF6D250 BX YBX0382 19970717131552S101702A065362AYBX0382
NN 15DF18641CBF3C6A BX YBX0382 19970717133104S101702A065362AYBX0382
NN 1516E65801A2C496 BX YBX0383
NN 153264EA03C2BE8C BX YBX0383 19940714161914S101702A034979AYBX0383
NN 153F9DD5098442D2 BX YBX0383 19941006193225S101702A037591AYBX0383
NN 1540AE9C12F0F080 BX YBX0383 19941013141431S101702A038234AYBX0383
NN 155D263B02222BD6 BX YBX0383 19950412S101702A043533AYBX0383
NN 157D33261FE0BCEC BX YBX0383 19951102S101702A048803AYBX0383
NN 15941D1A084E4444 BX YBX0383 19960327110526S101702Z240662AYBX0383
NN 1596811C0CBC01B2 BX YBX0383 19960411160927S101702A053228AYBX0383
NN 159682C50C3D2D6A BX YBX0383 19960411170956S101702A053228AYBX0383
NN 15A938CF0E5EA55C BX YBX0383 19960808183123S101702A056200AYBX0383
NN 15CFB34B19BCF5C2 BX YBX0383 19970410143110S101702A063036AYBX0383
NN 15D8853905F17870 BX YBX0383 19970605172732S101702A064221AYBX0383
NN 15DCE94C13ACAC67 BX YBX0383 19970703160013S101702A064922AYBX0383
NN 15DF17F31C504EAE BX YBX0383 19970717131553S101702A065362AYBX0383
NN 15DF18630EA3E700 BX YBX0383 19970717133105S101702A065362AYBX0383
NN 15EB32B80159F40A BX YBX0383 19971002134435S101702A067077AYBX0383
NY 17DA15530B435F0E BX YBXADBR CLOS000090573B1F04
NY 180548BF0E099B59 BX YBXADBR CLOS00014958A5761B
NY 1819DE9518757CCC BX YBXADBR CLOS0001705952328DMVS
NY 18207C8E03B40E04 BX YBXADBR CLOS0001805989B493MVS
NY 183301791923BC7D BX YBXADBR CLOS0001835A25007A
NY 1833017D0F9CD871 BX YBXADBR CLOS0001835A25007AMVS
NN 1515CC1B1AA08BAC BX YBXBI01
NN 152442BE014C38E6 BX YBXBI01 19940415175222S101702A033466AYBXBI01
NN 152497B30A4C17CA BX YBXBI01 19940417194441S101702A033466AYBXBI01
NN 152764351069AADE BX YBXBI01 19940505160733S101702A033572AYBXBI01
NN 152856A412790D32 BX YBXBI01 19940511164541S101702A034201AYBXBI01
NN 152996220CA98AFA BX YBXBI01 19940519151914S101702A034386AYBXBI01
NN 153266DA1B805386 BX YBXBI01 19940714172642S101702A035771AYBXBI01
NN 153F9DD60B8A0A02 BX YBXBI01 19941006193210S101702A037591AYBXBI01
NN 155D263C097BBD46 BX YBXBI01 19950412S101702A043533AYBXBI01
NN 157D332E09B660B6 BX YBXBI01 19951102S101702A048803AYBXBI01
NN 1596812016DBA0C8 BX YBXBI01 19960411160928S101702A053228AYBXBI01
NN 159682CC01CDCC68 BX YBXBI01 19960411170957S101702A053228AYBXBI01
NN 1599CBBB03D51896 BX YBXBI01 19960502144752S101702A053763AYBXBI01
NN 159F500F07FA42C2 BX YBXBI01 19960606171752S101702A054723AYBXBI01
NN 15A938D10D219114 BX YBXBI01 19960808183118S101702A056200AYBXBI01
NN 15B2001B1C9286C2 BX YBXBI01 19961003150557S101702A057489AYBXBI01
NN 15B2029D0BDACE34 BX YBXBI01 19961003163436S101702A057489AYBXBI01
NN 15BD048D073F608C BX YBXBI01 19961212173255S101702A059679AYBXBI01
NN 15CFB35405DFBF5A BX YBXBI01 19970410143057S101702A063036AYBXBI01
NN 15D885391779C6FB BX YBXBI01 19970605172716S101702A064221AYBXBI01
NN 15DCE95E0156E8B0 BX YBXBI01 19970703160014S101702A064922AYBXBI01
NN 15DF17F710332F76 BX YBXBI01 19970717131551S101702A065362AYBXBI01
NN 15DF186511E6C2C8 BX YBXBI01 19970717133102S101702A065362AYBXBI01
NN 15F80E06112DB78A BX YBXBI01 19971223090545S101702Z352321AYBXBI01
NN 15FBB2F7122E46C8 BX YBXBI01 19980115133559S101702A069359AYBXBI01
NN 16173B98043FD920 BX YBXBI01 19980709201647S101702A073668AYBXBI01
NN 1617501718E9DDFA BX YBXBI01 19980710082952S101702A073668AYBXBI01
NY 1515CC14146AF5C4 BX YBXBI02
NY 153266CC06950520 BX YBXBI02 19940714172643S101702A035771AYBXBI02
NY 153F9DCF159A5A4A BX YBXBI02 19941006193226S101702A037591AYBXBI02
NY 155D263A1BE3E226 BX YBXBI02 19950412S101702A043533AYBXBI02
NY 157D3321049912F8 BX YBXBI02 19951102S101702A048803AYBXBI02
NY 1596811E0E952A20 BX YBXBI02 19960411160932S101702A053228AYBXBI02
NY 159682CA15F0B836 BX YBXBI02 19960411170957S101702A053228AYBXBI02
NY 15976C0F0BF07EB4 BX YBXBI02 19960417121909S101702Z244065AYBXBI02
NY 1599CBC303481EC6 BX YBXBI02 19960502144753S101702A053763AYBXBI02
NY 159AE3411AACAFBC BX YBXBI02 19960509133250S101702A054054AYBXBI02
NY 159FE3750F03EAA2 BX YBXBI02 19960610091341S101702Z251974AYBXBI02
NY 15A065A211473E46 BX YBXBI02 19960613145220S101702A054888AYBXBI02
NY 15A938CD19801C72 BX YBXBI02 19960808183124S101702A056200AYBXBI02
NN 15B2001A082C1E72 BX YBXBI02 19961003150557S101702A057489AYBXBI02
NN 15B2029B193C9E98 BX YBXBI02 19961003163436S101702A057489AYBXBI02
NN 15BD048A0AC623A8 BX YBXBI02 19961212173256S101702A059679AYBXBI02
NN 15CFB33B1E6D46A0 BX YBXBI02 19970410143058S101702A063036AYBXBI02
NN 15D8853C0CCE4658 BX YBXBI02 19970605172718S101702A064221AYBXBI02
NN 15DCE95A166E6354 BX YBXBI02 19970703160014S101702A064922AYBXBI02
NN 15DF17FF0B5BC3B0 BX YBXBI02 19970717131554S101702A065362AYBXBI02
NN 15DF18630359F1BA BX YBXBI02 19970717133106S101702A065362AYBXBI02
NN 15F1CD80042EC1D0 BX YBXBI02 19971113142012S101702A068187AYBXBI02
NN 16173B960230D682 BX YBXBI02 19980709201648S101702A073668AYBXBI02
NN 1617502115928024 BX YBXBI02 19980710082953S101702A073668AYBXBI02
NN 1515CC161CFB69BC BX YBXBI03
NN 153266D112454074 BX YBXBI03 19940714172644S101702A035771AYBXBI03
NN 153F9DD30AA1AE10 BX YBXBI03 19941006193227S101702A037591AYBXBI03
NN 155D2638146ED044 BX YBXBI03 19950412S101702A043533AYBXBI03
NN 157D332715BEAC82 BX YBXBI03 19951102S101702A048803AYBXBI03
NN 1596811E1CE8D736 BX YBXBI03 19960411160937S101702A053228AYBXBI03
NN 159682CA0817474A BX YBXBI03 19960411170957S101702A053228AYBXBI03
NN 15A938CF0B61F9A8 BX YBXBI03 19960808183125S101702A056200AYBXBI03
NN 15B2001908A2BEF2 BX YBXBI03 19961003150558S101702A057489AYBXBI03
NN 15B202991591C6E2 BX YBXBI03 19961003163436S101702A057489AYBXBI03
NN 15BD04871D1AAE42 BX YBXBI03 19961212173257S101702A059679AYBXBI03
NN 15CFB33513CD2048 BX YBXBI03 19970410143058S101702A063036AYBXBI03
NN 15D88535191DE38F BX YBXBI03 19970605172719S101702A064221AYBXBI03
NN 15DCE95503E123A4 BX YBXBI03 19970703160015S101702A064922AYBXBI03
NN 15DF17FA13612488 BX YBXBI03 19970717131555S101702A065362AYBXBI03
NN 15DF186406354B8E BX YBXBI03 19970717133107S101702A065362AYBXBI03
NN 15EF99491675D14D BX YBXBI03 19971030134549S101702A067836AYBXBI03
NY 16D27F481B54E74C CBRHCAUD CBRHCAUD 2001-10-13-07.26.46.301597
NY 175E0A8A1FBEA5F5 CBRHCAUD CBRHCAUD 2004-03-19-05.11.59.464087
NY 168751910186F7D0 CBRHCAUD CBRHCAUD UW71236HDZ11F0
NY 16D27F490D11FA4A CBRHCLDL CBRHCLDL 2001-10-13-07.26.50.951657
NY 175E0A8B0C9C2749 CBRHCLDL CBRHCLDL 2004-03-19-05.12.02.836637
NY 168751920A386B30 CBRHCLDL CBRHCLDL UW71236HDZ11F0
NY 16D27F481B7E1A9D CBRHCLLU CBRHCLLU 2001-10-13-07.26.46.343786
NY 175E0A8C1B88A0CC CBRHCLLU CBRHCLLU 2004-03-19-05.12.15.137411
NY 16875193133CA944 CBRHCLLU CBRHCLLU UW71236HDZ11F0
NY 16D27F4A1D9CBEA0 CBRHCLMK CBRHCLMK 2001-10-13-07.27.03.676666
NY 175E0A8D0AFC4313 CBRHCLMK CBRHCLMK 2004-03-19-05.12.19.187980
NY 168751941DE271C8 CBRHCLMK CBRHCLMK UW71236HDZ11F0
NY 16D27F4B1150FE60 CBRHCLSG CBRHCLSG 2001-10-13-07.27.08.841977
NY 175E0A900636073F CBRHCLSG CBRHCLSG 2004-03-19-05.12.43.102236
NY 1687519609210A50 CBRHCLSG CBRHCLSG UW71236HDZ11F0
NY 16D27FBC15DE355A CBRHTBSV CBRHTBSV 2001-10-13-07.42.57.947861
NY 175E0AC312892ED3 CBRHTBSV CBRHTBSV 2004-03-19-05.19.54.152123
NY 168751990A0FFBF0 CBRHTBSV CBRHTBSV UW71236HDZ11F0
NY 16D27FFE1791DFB1 CBRKCMD CBRKCMD 2001-10-13-07.52.12.042110
NY 175E0AE316B8AB51 CBRKCMD CBRKCMD 2004-03-19-05.24.23.684781
NY 1687519C0D8BBF84 CBRKCMD CBRKCMD UW71236HDZ11F0
NY 16D27FFD1ED3C060 CBRKCME CBRKCME 2001-10-13-07.52.05.555969
NY 175E0AE401B3DC9A CBRKCME CBRKCME 2004-03-19-05.24.26.563442
NY 1687519E0C2D38C0 CBRKCME CBRKCME UW71236HDZ11F0
NY 16D27FFD1720EAF2 CBRKCMF CBRKCMF 2001-10-13-07.52.03.537835
NY 175E0AE31F83014F CBRKCMF CBRKCMF 2004-03-19-05.24.25.989125
NY 1687519F1B2CB520 CBRKCMF CBRKCMF UW71236HDZ11F0
NY 16D27FFD1CC97878 CBRKCMI CBRKCMI 2001-10-13-07.52.05.021153
NY 175E0AE400DA8001 CBRKCMI CBRKCMI 2004-03-19-05.24.26.340864
NY 168751A10E0673A8 CBRKCMI CBRKCMI UW71236HDZ11F0
NY 16D27FFE05A081C2 CBRKCMR CBRKCMR 2001-10-13-07.52.07.338503
NY 1772BC8E068E4349 CBRKCMR CBRKCMR UA12772HDZ11J0
NY 168751A30435DE34 CBRKCMR CBRKCMR UW71236HDZ11F0
NY 16862E761A2ED30C CBRKCMT CBRKCMT 439276300377892470
NY 16D27FFC1D9C3C4C CBRKCMT CBRKCMT 496778316382894076
NY 1772BC951EE6DC09 CBRKCMT CBRKCMT 518446089393395349
NY 16D27FFD14006BF9 CBRKISQL CBRKISQL 2001-10-13-07.52.02.718127
NY 175E0AE9193B5A99 CBRKISQL CBRKISQL 2004-03-19-05.25.14.674538
NY 168751A4197A2A6C CBRKISQL CBRKISQL UW71236HDZ11F0
NY 15BCFF9211D7D5F2 CC CC5160 19961212143434S101702A058962ACC5160
NY 17E0A83E08EB47EA CD CD2590 UPDS000031
NY 17EED333033177A6 CD CD2590 UPDS000033
NY 1802ECC90F8821AF CD CD2590 UPDS000037
NY 180FFE061346227D CD CD2590 UPDS000043
NY 1819121500D1EA9B CD CD2590 UPDS000044
NY 14BBBCEB10562DAC CD CD7060
NY 1607CC87009377F2 CD CD7360 19980402152138S101702A071420ACD7360
NY 1607D0CE1E40D76C CD CD7360 19980402174642S101702A071420ACD7360
NY 160E69CA02CA2E04 CD CD7360 19980514170508S101702M000860ACD7360
NN 1579EA0719E61C64 CD CD7400 19951012S101702A048447ACD7400
NY 15EA18DF00A0C786 CD CD8070 19970925133611S101702A066943ACD8070
NY 182056D1196487E7 CD CD8130 CIFS000202
NY 1828525B107FE520 CD CD8130 CIFS000210
NN 159F6A5202352D98 CD FC0100 19960607085733S101702A054822AFC0100
NN 15F74CAA04C50F62 CD FC0100 19971218134434S101702A069142AFC0100
NY 15B104390214625A CD KD0600 19960927085001S101702Z268024AKD0600
NY 15B1FEA60B8D931A CD KD0600 19961003141208S101702A057537AKD0600
NY 15DAB25E0DF199C4 CD KD0600 19970619134842S101702A064764AKD0600
NN 15077C791908E980 CD YCD0020
NN 151FB5DB02B76488 CD YCD0020 19940317190318S101702A032467AYCD0020
NN 15305500137FDB66 CD YCD0020 19940701132652S101702A035214AYCD0020
NN 1530F1710F009558 CD YCD0020 19940705104246S101702A035214AYCD0020
NN 1530F70614D77016 CD YCD0020 19940705140411S101702A035214AYCD0020
NN 1530F7A51AC00442 CD YCD0020 19940705142646S101702A035214AYCD0020
NN 156734E0079F570E CD YCD0020 19950615S101702A045345AYCD0020
NN 156967FE0AEFA1D0 CD YCD0020 19950629S101702A045492AYCD0020
NN 157F6A4E085AAA98 CD YCD0020 19951116S101702A049627AYCD0020
NN 158B83D1176585EC CD YCD0020 19960201S101702A051689AYCD0020
NN 159450A90E30F3E8 CD YCD0020 19960328175022S101702A053067AYCD0020
NN 15A3B5BA1726FE08 CD YCD0020 19960704164722S101702A055520AYCD0020
NN 15A3B6F901A7DD12 CD YCD0020 19960704173143S101702A055520AYCD0020
NN 15A3CF05023D424A CD YCD0020 19960705075225S101702A055520AYCD0020
NN 15AD97B41E3F7E22 CD YCD0020 19960905135843S101702A056819AYCD0020
NY 15FF00181D660876 CD YCD110 19980205134459S101702A070170AYCD110
NN 1540AE5C1A55C162 CD YCDCIFD 19941013140654S101702A038159AYCDCIFD
NN 1556AEC90FAD7926 CD YCDCIFD 19950302135905S101702A042467AYCDCIFD
NN 1568502611151630 CD YCDCIFD 19950622S101702M000590AYCDCIFD
NN 156FFEBB0A81C644 CD YCDCIFD 19950810S101702A046728AYCDCIFD
NN 15921ACF14E4FCE8 CD YCDCIFD 19960314161808S101702M000666AYCDCIFD
NN 15967DA613BB57BC CD YCDCIFD 19960411140629S101702A053344AYCDCIFD
NN 1597995A15E7FACA CD YCDCIFD 19960418152009S101702M000680AYCDCIFD
NN 159BD63C1139329C CD YCDCIFD 19960515142952S101702A054064AYCDCIFD
NN 159BD6FD14A669EE CD YCDCIFD 19960515145654S101702A054064AYCDCIFD
NN 15AD9A581B4F93A6 CD YCDCIFD 19960905153115S101702M000711AYCDCIFD
NN 15B899580C8E1338 CD YCDCIFD 19961114144241S101702M000743AYCDCIFD
NN 15B89EB512A292AE CD YCDCIFD 19961114175616S101702M000743AYCDCIFD
NN 15B8A1D910952E1A CD YCDCIFD 19961114194635S101702M000743AYCDCIFD
NN 15BBE8AC12C0D3EA CD YCDCIFD 19961205161342S101702A059523AYCDCIFD
NN 15C91AA00277CADC CD YCDCIFD 19970227151435S101702A061867AYCDCIFD
NN 15CC68351522E6DA CD YCDCIFD 19970320153542S101702M000778AYCDCIFD
NN 15E3800816237E30 CD YCDCIFD 19970814141023S101702M000800AYCDCIFD
NN 15F2E5D6066FBD54 CD YCDCIFD 19971120133445S101702A068246AYCDCIFD
NN 15FBBA17119631CA CD YCDCIFD 19980115174306S101702M000856AYCDCIFD
NY 17C52B9D06384F83 CD YCDCL01 CIIN000149
NN 1514B70C12D99AC6 CD YCDGETJ
NY 151FB0AC01F220D4 CD YCDGETJ 19940317160328S101702A032553AYCDGETJ
NY 153054EE18466F2E CD YCDGETJ 19940701132442S101702A035214AYCDGETJ
NY 1530F1490653D362 CD YCDGETJ 19940705103237S101702A035214AYCDGETJ
NY 1530F6DF06087278 CD YCDGETJ 19940705140220S101702A035214AYCDGETJ
NY 1530F7891CBA21E2 CD YCDGETJ 19940705142430S101702A035214AYCDGETJ
NY 1501FC62060A9EE0 CD YCDGETP
NN 1501FC601768D118 CD YCDGETV
NN 151FB0A70E8B697C CD YCDGETV 19940317160338S101702A032553AYCDGETV
NN 153054EE141462B6 CD YCDGETV 19940701132444S101702A035214AYCDGETV
NN 1530F14B1B482D88 CD YCDGETV 19940705103237S101702A035214AYCDGETV
NN 1530F6DF0AA29580 CD YCDGETV 19940705140221S101702A035214AYCDGETV
NN 1530F78910EB04BA CD YCDGETV 19940705142431S101702A035214AYCDGETV
NY 17B3DCA20DA4EC97 CD YCDOGEC KUBE000026
NY 17B3DCB7047D6973 CD YCDOGEM KUBE000026
NY 1587169C1C253D90 CD YCDT10 19960104S101702A050732AYCDT10
NY 158831A10E76C474 CD YCDT10 19960111S101702A050979AYCDT10
NY 159797650F79D1D2 CD YCDT10 19960418140935S101702A053432AYCDT10
NY 15A066AD1C558870 CD YCDT10 19960613152928S101702A054996AYCDT10
NY 17980CDD145D7361 CD YCDT115 UPDS000006
NY 1530F15801C41E26 CD YCDUP08 19940705103248S101702A035214AYCDUP08
NY 1530F6EB0732D234 CD YCDUP08 19940705140233S101702A035214AYCDUP08
NY 1530F7941949B6D8 CD YCDUP08 19940705142445S101702A035214AYCDUP08
NN 1501FC6F0E68F5F8 CD YCDUP10
NN 1520C9941AA56AE6 CD YCDUP10 19940324153717S101702A032715AYCDUP10
NN 1520CF8C0430E5D4 CD YCDUP10 19940324191112S101702A032715AYCDUP10
NN 1520D16C0A4DF29E CD YCDUP10 19940324201829S101702A032715AYCDUP10
NN 153054F71D673956 CD YCDUP10 19940701132538S101702A035214AYCDUP10
NN 1530F15A1892E6A2 CD YCDUP10 19940705103250S101702A035214AYCDUP10
NN 1530F6F6000FEAD4 CD YCDUP10 19940705140235S101702A035214AYCDUP10
NN 1530F78816A1F872 CD YCDUP10 19940705142447S101702A035214AYCDUP10
NN 15921ADC03986FE2 CD YCDUP10 19960314161929S101702M000666AYCDUP10
NY 15AD9A5E11A26544 CD YCDUP10 19960905153351S101702M000711AYCDUP10
NY 15B6669C1A565FA0 CD YCDUP10 19961031150558S101702M000738AYCDUP10
NY 15B8994607BDC728 CD YCDUP10 19961114144211S101702M000743AYCDUP10
NY 15B89EB501B46BC4 CD YCDUP10 19961114175618S101702M000743AYCDUP10
NY 15B8A1C010F53106 CD YCDUP10 19961114194602S101702M000743AYCDUP10
NN 1520C9B40B86C616 CD YCDUP14 19940324153826S101702A032715AYCDUP14
NN 1520CF8D13D1E3B4 CD YCDUP14 19940324191114S101702A032715AYCDUP14
NN 1520D16711261DC8 CD YCDUP14 19940324201833S101702A032715AYCDUP14
NN 153054FB064D3EEE CD YCDUP14 19940701132551S101702A035214AYCDUP14
NN 1530F15D1D69D956 CD YCDUP14 19940705103255S101702A035214AYCDUP14
NN 1530F6F81E751416 CD YCDUP14 19940705140239S101702A035214AYCDUP14
NN 1530F79D1AFD0B1A CD YCDUP14 19940705142451S101702A035214AYCDUP14
NN 15921ADE0FA3CF08 CD YCDUP14 19960314161951S101702M000666AYCDUP14
NN 15AD9A321DB80298 CD YCDUP14 19960905152821S101702M000711AYCDUP14
NN 15B666A81CF5C154 CD YCDUP14 19961031150600S101702M000738AYCDUP14
NN 15B899461C768258 CD YCDUP14 19961114144213S101702M000743AYCDUP14
NN 15B89EAC0CC4C672 CD YCDUP14 19961114175620S101702M000743AYCDUP14
NN 15B8A1C310FEE20E CD YCDUP14 19961114194605S101702M000743AYCDUP14
NY 153054ED02FB5328 CD YCDUP27 19940701132626S101702A035214AYCDUP27
NY 1530F1631F6D1C68 CD YCDUP27 19940705104208S101702A035214AYCDUP27
NY 1530F6FE0EAFF784 CD YCDUP27 19940705140313S101702A035214AYCDUP27
NY 1530F7A00F4E651A CD YCDUP27 19940705142545S101702A035214AYCDUP27
NY 1819E38913230775 CD YCDUPH0 UPDS000044
NN 15997B3D1157CD8E CD YKDX81 19960430144759S101702Z245908AYKDX81
NN 15997B6A10193FCA CD YKDX81 19960430145417S101702Z245908AYKDX81
NN 1599CDF318B0CD4E CD YKDX81 19960502160759S101702A053827AYKDX81
NN 159BD7E901D3785E CD YKDX81 19960515152931S101702M000684AYKDX81
NY 17E4F02D0B0BDEC0 CE CE0100 COPE000029
NY 17EA6663105473D3 CE CE5200 COPE000034
NY 17F29A9C0DA1F58D CE CE5200 COPE000042
NY 17F912FA1F7D6DEA CE CE5200 COPE000046
NY 17E8116E15E7B590 CE CE5230 COPE000040
NY 17F12C92081F6E58 CE CE5230 COPE000042
NY 17F6F9321A03B063 CE CE5230 COPE000046
NY 17E99EAE1F049772 CE CE5300 COPE000034
NY 17F7EFB61BA34704 CE CE5300 COPE000046
NY 17FEB0B71F27112C CE CE5300 COPE000052
NY 17F5FB170D75B342 CE CE5300 NOST000271
NY 17F68B54022CF1B7 CE CE5300 NOST000275
NY 17FAC2BA18C6C01B CE CE5300 NOST000288
NY 17E67FF71A9282F7 CE CE5730 COPE000029
NY 17F7751D0624AAC3 CE CE5730 COPE000046
NY 17EA65930A17DB5D CE CE8200 COPE000034
NY 17F4CBF21ED618C9 CE CE8200 COPE000042
NY 17F7EFB80D9351DC CE CE8200 COPE000046
NY 17FAC3ED1EF0D350 CE CE8200 COPE000049
NY 17FEB0BD0A575EE8 CE CE8200 COPE000052
NY 17EA66700BC5BF20 CE CE8440 COPE000034
NY 17F0362D18F23091 CE CE8440 COPE000042
NY 17F6F93B008FC687 CE CE8440 COPE000046
NY 17F12ABB16626554 CE CE8460 COPS000019
NY 17EA667514C0A152 CE CE8500 COPE000034
NY 17F12C9A14C6A418 CE CE8500 COPE000042
NY 17F6D5200701892E CE CE8500 COPE000046
NN 1597995A15E7FACA CE YCDCIFD 19960418152009S101702M000680AYCDCIFD
NY 17E4EFD60CB31A1E CE YCE1000 COPE00002957962ADA
NY 17EFE68C0CD2062B CE YCE1000 COPE00004257F22347
NY 17F9089E096B6A7A CE YCE1000 COPE000046583EB25C
NY 17E67FDA16C4F939 CE YCEWIAP COPE00002957A34674
NY 17F24C5E1877D4A5 CE YCEWIAP COPE0000425806405E
NY 17F9087C079722E1 CE YCEWIAP COPE000046583EB13F
NY 17E682110D59FF03 CI CI0070 KUGE000031
NY 17E6821109F016E7 CI CI0080 KUGE000031
NY 17E0A7F118E5C775 CI CI0090 GEGE000015
NY 17EF2D6F17A7C964 CI CI0090 GEGE000019
NY 17E064B005AE0F7A CI CI0100 GEGE000017
NY 17EF2D710279EDE8 CI CI0100 GEGE000019
NN 14ED14B302817AC6 CI YCI009
NN 151FB5B81F5D3A2C CI YCI009 19940317190314S101702A032565AYCI009
NN 153054DD0BE4164A CI YCI009 19940701132426S101702A035214AYCI009
NN 1530F13F0C86A2CA CI YCI009 19940705103230S101702A035214AYCI009
NN 1530F6DB02EB253A CI YCI009 19940705140212S101702A035214AYCI009
NN 1530F7790C6C3940 CI YCI009 19940705142422S101702A035214AYCI009
NY 15D0CB8004E979FE CI YCI009 19970417134326S101702A063176AYCI009
NY 15D0CC9915DD70C2 CI YCI009 19970417142223S101702A063176AYCI009
NY 15D0CD6B0DF09770 CI YCI009 19970417145207S101702A063176AYCI009
NY 160E68E812A6A060 CI YCI009 19980514165332S101702M000860AYCI009
NN 14ED14B70AC4C416 CI YCI009A
NN 151FB5E613026890 CI YCI009A 19940317190359S101702A032565AYCI009A
NN 153054DD11E8AA18 CI YCI009A 19940701132427S101702A035214AYCI009A
NN 1530F13C1951842C CI YCI009A 19940705103231S101702A035214AYCI009A
NN 1530F6DA1CF9EFDC CI YCI009A 19940705140214S101702A035214AYCI009A
NN 1530F77910DB11E8 CI YCI009A 19940705142423S101702A035214AYCI009A
NN 15921AC00EE448B4 CI YCI009A 19960314161448S101702M000666AYCI009A
NY 15D0CB8004A38E08 CI YCI009A 19970417134327S101702A063176AYCI009A
NY 15D0CC9A1FE21D84 CI YCI009A 19970417142225S101702A063176AYCI009A
NY 15D0CD6B08B0F534 CI YCI009A 19970417145208S101702A063176AYCI009A
NY 160E68FB06CB88F5 CI YCI009A 19980514165332S101702M000860AYCI009A
NY 17D4BE6119F0C03B CK CK8560 DCA0000087
NY 183634291D0D29A6 CK YCKE020 DCA0000188
NY 1836342F07F0041E CK YCKE025 DCA0000188
NY 17C7850F18022182 CK YCKMABB DCA0000079569F57BF
NY 17C7850F0E39A64E CK YCKMABC DCA0000079569F57C5
NY 176112D90A8C7BBC CK YCKMABU A12M005710534404B9
NY 17C785100E37D10D CK YCKMABU DCA0000079569F5810
NY 17C785A4143B13AB CK YCKMAPL DCA0000079
NY 17C785181484066B CK YCKMASD DCA0000079569F5827
NY 17C7851206FDAB95 CK YCKMASG DCA0000079569F57E1
NY 17C7850F0E23E03B CK YCKMASI DCA0000079569F57AA
NY 17C7851A05E79EB0 CK YCKMASL DCA0000079569F582F
NY 17B728E407CB878E CK YCKT020 DCA0000026
NY 183634371527F710 CK YCKT020 DCA0000188
NY 17B728F71778E3D9 CK YCKT025 DCA0000026
NY 180AA5EA10AA4719 CK YCKT025 DCA0000157
NY 1836343A01FC406E CK YCKT025 DCA0000188
NN 15547BB204297AD4 CO CO0020 19950216140329S101702A041670ACO0020
NN 1558E09416CC4790 CO CO0020 19950316125817S101702A042779ACO0020
NN 1561AFE40FB3FD46 CO CO0020 19950511142640S101702A044204ACO0020
NN 14DEC79F0F44B9EA CO CO0030
NN 15547BB003A9BF52 CO CO0030 19950216140330S101702A041670ACO0030
NY 14DDAE47110134CE CO CO0040
NN 15547BB10979E092 CO CO0040 19950216140333S101702A041670ACO0040
NN 1501FD0B1A94F29E CO CO0050
NN 15547BB20BB06736 CO CO0050 19950216140336S101702A041670ACO0050
NY 14C9E4321B25BBB2 CO CO5000
NN 15547BA211B83AC2 CO CO5000 19950216140316S101702A041670ACO5000
NN 14DDAE4309588CF6 CO CO8000
NN 15547BA312BE4728 CO CO8000 19950216140319S101702A041670ACO8000
NN 1516E5C215391FD0 CO CO8100
NN 15547BA61C4CC03C CO CO8100 19950216140321S101702A041670ACO8100
NN 1516E5C3182E5E5C CO CO8200
NN 15547BA610A13436 CO CO8200 19950216140324S101702A041670ACO8200
NN 16B3997B03D87FD3 CONVERT ASUCONV V6102
NN 150BE6781CFED35E CR CR5000
NN 155481450ACD38F6 CR CR5000 19950216172233S101702A042017ACR5000
NN 15C5CB77129611DE CR CR5000 19970206135312S101702A061341ACR5000
NN 152442BE014C38E6 CR YBXBI01 19940415175222S101702A033466AYBXBI01
NN 14DDB3DE0606977A CR YCRAN01
NN 152CE1E5112F22D0 CR YCRAN01 19940609143524S101702A034846AYCRAN01
NN 15A938DC1311D5A6 CR YCRAN01 19960808183350S101702A056200AYCRAN01
NN 14DDB4541BF70BE6 CR YCRAN02
NN 155D23331D1F648A CR YCRAN02 19950412S101702A043707AYCRAN02
NN 15A938EC05F068FA CR YCRAN02 19960808183522S101702A056200AYCRAN02
NY 1556900E0BBC5E4C CT CT8500 19950301194008S101702Z179440ACT8500
NY 155690511D77C482 CT CT8500 19950301194935S101702Z179441ACT8500
NY 1556AD0313EEBBA4 CT CT8500 19950302125634S101702Z179508ACT8500
NY 151FB1121C7706C8 CU CU8320 19940317161809S101702A032590ACU8320
NN 15497B6012F722AC CU CU8322 19941208140545S101702A040093ACU8322
NY 17E0ABED063F3F48 CU CU9000 CIFS000122
NY 17EED5550BC342B6 CU CU9000 CIFS000142
NY 17E684531080852A CZ CZ5150 KLOM000049
NY 17F26AFC0335606C CZ CZ5150 KLOM000054
NY 180435D91235201F CZ CZ5150 KLOM000057
NY 18116381121C24EB CZ CZ5150 KLOM000061
NY 181B2C1D0C24CE09 CZ CZ5150 KLOM000062
NY 18297691054C03D3 CZ CZ5150 KLOM000067
NY 183B2FA41E17E9A9 CZ CZ5150 KLOM000069
NY 17E85BF10F4354BC CZ CZ5190 GSER000131
NY 17F00FC210D73D05 CZ CZ5190 LOMN000025
NY 180438390F07B769 CZ CZ5190 LOMN000028
NY 1811639413083DBA CZ CZ5190 LOMN000029
NY 181FABF912C2C020 CZ CZ5190 LOMN000030
NY 182E80C112E8A2B7 CZ CZ5190 LOMN000034
NY 1839F73E1C54AB27 CZ CZ5190 LOMN000038
NY 177B502013162434 CZ CZ5200 CRMA004099
NY 17DF3EC70D75E7E9 CZ CZ5270 KLOM000049
NY 17DE79340EAF6A94 CZ CZ5280 KLOM000049
NY 17EF505D1BEC0B6C CZ CZ5280 KLOM000050
NY 1802EEA7090C9C93 CZ CZ5280 KLOM000057
NY 1810504417885C86 CZ CZ5280 KLOM000061
NY 181B2C0D175D944C CZ CZ5280 KLOM000062
NY 18287D610DBEB1F3 CZ CZ5280 KLOM000067
NY 1838691005B5F612 CZ CZ5280 KLOM000069
NY 17E64F65073B6FF1 CZ CZ5400 PIG0000008
NY 1802EFBD1392C624 CZ CZ5494 ACP0000084
NY 17F8B5C10C55D456 CZ CZ5494 ACP0000090
NY 181051A216390E05 CZ CZ5494 ACP0000098
NY 181B2B8D1D522BB4 CZ CZ5494 ACP0000103
NY 181435171840D2E8 CZ CZ5494 ACP0000107
NY 1817818400929666 CZ CZ5494 ACP0000111
NY 182C67910C6217F2 CZ CZ5494 ACP0000112
NY 182154840C727F99 CZ CZ5494 ACP0000114
NY 183538721B3EE313 CZ CZ5494 ACP0000115
NY 177D7F491C6F5900 CZ CZ5600 CRMA003972
NY 18253AD6115AE19A CZ CZ5991 GSER000191
NY 18271DFE052F9964 CZ CZ5991 GSER000200
NY 16187CF101BACF70 CZ CZ6014 19980717195822S101702Z383277ACZ6014
NY 16187E7D02A03B02 CZ CZ6014 19980717205332S101702Z383277ACZ6014
NY 1618973B014362AA CZ CZ6014 19980718113921S101702Z383299ACZ6014
NY 17EEAA7419A01AFD CZ CZ6020 LOFT000035
NY 17C93DC904E706E9 CZ CZ6030 KINF000006
NY 16D9741B01942356 CZ CZ6060 CRME000713
NY 17EADF081B9393D9 CZ CZ6300 GSER000128
NY 17FAC73809E5021C CZ CZ6300 GSER000156
NY 17F178200DCA8399 CZ CZ6300 KLOM000050
NY 180437F41774EF8E CZ CZ6300 KLOM000057
NY 17F8B9221DEAFF7E CZ CZ6300 KLOM000058
NY 180FFACB094AC581 CZ CZ6300 KLOM000061
NY 181B2BFC1ACCE4BB CZ CZ6300 KLOM000062
NY 182977D2058AE45A CZ CZ6300 KLOM000067
NY 183A1A8A1EB0E8FA CZ CZ6300 KLOM000069
NY 17F81E6003180D69 CZ CZ6400 GSER000039
NY 17E2E4E706CE7607 CZ CZ6400 GSER000112
NY 17F24A720D89D939 CZ CZ6400 GSER000123
NY 1802F33505B93D63 CZ CZ6400 GSER000152
NY 17FC82B107AD2F3A CZ CZ6400 GSER000157
NY 1810511C0834D82C CZ CZ6400 GSER000162
NY 181B2B8C007D300F CZ CZ6400 GSER000177
NY 18287BF1185A5D4A CZ CZ6400 GSER000187
NY 183A1A5F0B347825 CZ CZ6400 GSER000206
NY 183DE0621C7377DE CZ CZ6400 GSER000219
NY 17F68B1A102E6076 CZ CZ6500 GSER000039
NY 17F03B2802067F9D CZ CZ6500 GSER000109
NY 17E2E4EB17BDC9E7 CZ CZ6500 GSER000112
NY 1805C4B1046B91AD CZ CZ6500 GSER000152
NY 18105125038E7432 CZ CZ6500 GSER000162
NY 181C37BF09F26776 CZ CZ6500 GSER000177
NY 182827800307233C CZ CZ6500 GSER000187
NY 183A1A6308A8BE9E CZ CZ6500 GSER000206
NY 17A8DE0702CFD820 CZ CZ7000 IPRI000007
NY 17AFA2E61E170B30 CZ CZ7021 KUAN000023
NY 17A899A00007E47D CZ CZ7030 APEN000014
NY 17D5CEE8094CE9C8 CZ CZ7270 HOT0000018
NY 17DD6191102FC877 CZ CZ7270 HOT0000021
NY 17EFEC59032FAAB7 CZ CZ7270 HOT0000023
NY 17E519721192463B CZ CZ7270 HOT0000024
NY 17E630DD0B59F1F0 CZ CZ7270 HOT0000025
NY 17EF45B00C497A34 CZ CZ7510 APEN000035
NY 17ECC87707071F08 CZ CZ7510 APEN000036
NY 1810233B08719560 CZ CZ7510 APEN000040
NY 181B28940F777E49 CZ CZ7510 APEN000042
NY 18139AF51B561945 CZ CZ7510 APEN000046
NY 1817D4B802F927FD CZ CZ7510 APEN000047
NY 17C93DF7180711C4 CZ CZ7740 KINF000006
NY 17C18B6710085915 CZ CZ7740 KUAN000028
NY 17BEE43413AC55ED CZ CZ7740 KUAN000029
NY 17D6A53C06959321 CZ CZ7740 KUAN000033
NY 17E19C341A570461 CZ CZ8010 APEN000032
NY 17F26D6716D4FB4E CZ CZ8010 APEN000035
NY 1802EFCE0982FC5E CZ CZ8010 APEN000039
NY 181050291C2291AA CZ CZ8010 APEN000040
NY 181B289E0294210A CZ CZ8010 APEN000042
NY 1814369112862BD4 CZ CZ8010 APEN000044
NY 1828369001964AD0 CZ CZ8010 APEN000049
NY 18385E4E05B9ADD9 CZ CZ8010 APEN000050
NY 17E19C3D1A135A83 CZ CZ8020 APEN000032
NY 1810239E183B99DB CZ CZ8020 APEN000040
NY 181B28A60DE2A5A0 CZ CZ8020 APEN000042
NY 1828369105151BC7 CZ CZ8020 APEN000049
NY 18385DCE04E3A030 CZ CZ8020 APEN000050
NY 183215730FA6261A CZ CZ8980 GSER000211
NY 17E684571B5726F0 CZ CZ8980 KLOM000049
NY 17F1F4BE14B36626 CZ CZ8980 KLOM000050
NY 180436F401135C57 CZ CZ8980 KLOM000057
NY 18116383053015E9 CZ CZ8980 KLOM000061
NY 181B2C1D19AE3B15 CZ CZ8980 KLOM000062
NY 1829769B1ACCA6BA CZ CZ8980 KLOM000067
NY 1839F73D1787CCD8 CZ CZ8980 KLOM000069
NY 17AB171A0EEBDBA5 CZ CZ9991 KUAN000019
NY 17D6C4DE09142BBE CZ YCZBCAL ACP0000063571F51A9
NY 1797EDCC0351F1E8 CZ YCZGETP KUAN00001255101F7D
NY 17E0D90B0E57AC88 CZ YCZGETP KUAN0000375773DDC4
NY 17B5CCB80F3946D1 CZ YCZJ323 GSER000027560AC099
NY 17E88CAE1C1C2F51 CZ YCZJ323 GSER00010957B4790C
NY 180B4A640B9CA6FA CZ YCZJ323 GSER00017058D7E6D6
NY 180B4A66188C5FFC CZ YCZJ323 GSER00017058D7E6D6MVS
NY 17F136DA044949ED CZ YCZJ431 GSER00012257FD2866
NY 180B4A7105CC60FF CZ YCZJ431 GSER00017058D7E73D
NY 180B4A721A8A1DC9 CZ YCZJ431 GSER00017058D7E73DMVS
NY 17F3B0D708AC85EC CZ YCZJABW GSER0001095811EEAB
NY 17E2E6531E6AED59 CZ YCZJABW GSER0001115785141E
NY 17F65C6C0117D7F6 CZ YCZJABW GSER000148582846ED
NY 17F703BA0D743197 CZ YCZJABW GSER000151582DC263
NY 1802EC30120399DE CZ YCZJABW GSER0001525891A6AF
NY 181D01071EFF58FD CZ YCZJABW GSER000170596C7E08MVS
NY 1817664512385C07 CZ YCZJABW GSER000181593D7A96
NY 181C658B0CC5BF0F CZ YCZJABW GSER000185596765E3
NY 183451190FA513AF CZ YCZJABW GSER0001995A2FFFC5MVS
NY 1841363C1F8BE2C9 CZ YCZJABW GSER0002225A9C2BE5
NY 1841363F16B0BB0D CZ YCZJABW GSER0002225A9C2BE5MVS
NY 17B5D153039BCE65 CZ YCZM025 LOFT000019560AE739
NY 1822AB751B567188 CZ YCZM025 LOFT000049599C053FMVS
NY 17C85BA315EFD9AA CZ YCZM113 KINF00000656A66022
NY 17B5C73D09DFF5D0 CZ YCZM435 BEWI000004560A9276
NY 17F156F61AABFF9E CZ YCZM435 BEWI00001057FE35BE
NY 180C666B0959B4D9 CZ YCZM435 BEWI00002658E13572MVS
NY 180644230405DD09 CZ YCZMLIM KLOM00005758ADB2E7
NY 180A78E3046E08F6 CZ YCZMLIM KLOM00006158D0FB62
NY 180EB6DA09C279F4 CZ YCZMLIM KLOM00006458F49F2E
NY 182A6672101B375A CZ YCZMLIM KLOM00006759DCDE22MVS
NY 183385D71146B2C2 CZ YCZMLIM KLOM0000695A2956D9
NY 183385DA07529CD1 CZ YCZMLIM KLOM0000695A2956D9MVS
NY 17F706BE186E58BA CZ YCZPABW ACP0000086582DDBB5
NY 17EC00D70A7D8134 CZ YCZPABW BEWI00001957D171E9
NY 17EF53491427E028 CZ YCZPABW GSER00010957ED4FDC
NY 17F774BF0BB91FD7 CZ YCZPABW GSER00015158317679
NY 1802A00E191EC8DF CZ YCZPABW GSER000152588F2812
NY 17FD508B0E9EE593 CZ YCZPABW GSER00015758629BAC
NY 1817AC0B1DFF03BA CZ YCZPABW GSER000181593FC3E5
NY 1835405102269BF4 CZ YCZPABW GSER0001995A37D687MVS
NY 183F29560FF0C30D CZ YCZPABW VEFO0000455A8AF898MVS
NY 17B5CD5D07BD94DC CZ YCZT235 GSER000027560AC600
NY 180AC95716739B6D CZ YCZT235 GSER00017058D39E3D
NY 180AC959164C30CC CZ YCZT235 GSER00017058D39E3DMVS
NY 17C94C330333FA66 CZ YCZT328 GSER00009056AE4211
NY 180AC97C03C4EFC5 CZ YCZT328 GSER00017058D39F5F
NY 180AC97D1FFC807B CZ YCZT328 GSER00017058D39F5FMVS
NY 17D2417F030A32B6 CZ YCZT385 GSER00004756F975B2
NY 180AC9A004539D41 CZ YCZT385 GSER00017058D3A09C
NY 180AC9A1159B56A3 CZ YCZT385 GSER00017058D3A09CMVS
NY 17B5CC800C26CAFC CZ YCZT397 GSER000027560ABEC3
NY 180AC9B218F633C3 CZ YCZT397 GSER00017058D3A132
NY 180AC9B409BB30BC CZ YCZT397 GSER00017058D3A132MVS
NY 178BF8DA14E2F115 CZ YCZT421 GSER00001454ABD271
NY 17B5C73C10EAABBA CZ YCZT435 BEWI000004560A927D
NY 180C6654079144F5 CZ YCZT435 BEWI00002658E1347CMVS
NY 17E083F71D377199 CZ YCZT724 ACP000005657711403
NY 17E1F71912E5D9B1 CZ YCZT726 ACP0000056577D3D5C
NY 17D4C00C16D32BD1 CZ YCZTPRT BEWI000009570E6247
NY 17EC77A611F0D4B7 CZ YCZTPRT BEWI00001057D55677
NY 1699CF290AFBC42A DAA400_D_MAIN PSEBN12 V3201
NY 16B5591E07CB67B9 DAA400_D_MAIN PSEBN13 V3201
NY 1700981E0C5A22E0 DAA400_D_MAIN PSSCSQL V4000
NY 1742296C07BC9A55 DAA400_D_MAIN PSSCSQL V4100
NY 16FB8F3D0D70F824 DAA400_D_MAIN PSSHSQL V4000
NY 16F72C5202566B34 DAA400_D_MAIN PSSIMPC V4000
NY 16E6B6EC07448B74 DAA400_D_MAIN PSSRULE V3401
NY 175559D31D3385AB DAA420_D_MAIN PSSCSQL V4100
NY 1765B19A01245409 DAA420_D_MAIN PSSHSQL V4200
NY 1719479B126B4F0A DAA420_D_MAIN PSSRULE V4100
NY 176E00470E492FF4 DAA420_D_MAIN PSSXSQL V4200
NY 16CFB2AE19427F3B DB DB2REORG PROD
NY 17F9FC981BA98ADD DE DE0030 AITR000030
NY 17EA719B19389B69 DE DE0030 DE00000029
NY 17F3896418E9A100 DE DE0030 DE00000038
NY 1805C0D902D50A6A DE DE0030 DE00000043
NY 17F77ACC1DE8C19B DE DE0030 DE00000049
NY 17F664BF091393F6 DE DE0030 DE00000052
NY 17F7CC8912CEB84F DE DE0030 DE00000058
NY 1811639F1D102779 DE DE0030 DE00000061
NY 18169048009D5496 DE DE0030 DE00000063
NY 180AD3EB1A255478 DE DE0030 DE00000065
NY 181C394C1972BD5E DE DE0030 DE00000066
NY 182C9BAF10EA9250 DE DE0030 DE00000070
NY 1839EF7A1C50FC95 DE DE0030 DE00000077
NY 17EA719D1F583B5B DE DE0050 DE00000029
NY 17F1F0FD18B677B4 DE DE0050 DE00000038
NY 180430EA05006D30 DE DE0050 DE00000043
NY 17F774C7026C9EC2 DE DE0050 DE00000049
NY 181052D20CD33C51 DE DE0050 DE00000061
NY 180AD3EC1F37B12B DE DE0050 DE00000065
NY 181C38F31CA180DE DE DE0050 DE00000066
NY 182C73A519221274 DE DE0050 DE00000070
NY 183864320138C12E DE DE0050 DE00000077
NY 17E6370E14B5306D DE DE0060 DE00000033
NY 1802C8EE1F02D5BC DE DE0060 DE00000043
NY 181052B715DA14A3 DE DE0060 DE00000061
NY 181C39181DE41A89 DE DE0060 DE00000066
NY 182885EE0D9D91EB DE DE0060 DE00000070
NY 1838642B166A28FA DE DE0060 DE00000077
NY 17EA71A00103538E DE DE0090 DE00000029
NY 17F1F1000193D3BC DE DE0090 DE00000038
NY 180430EA12DC4D65 DE DE0090 DE00000043
NY 17F774C71DE4EEC3 DE DE0090 DE00000049
NY 181052D01D4BF7E0 DE DE0090 DE00000061
NY 180AD3EE0DE04B17 DE DE0090 DE00000065
NY 181C38F4084364F1 DE DE0090 DE00000066
NY 182C73AE12B1663A DE DE0090 DE00000070
NY 1838642A0B36C2FB DE DE0090 DE00000077
NY 17E6371005641EB7 DE DE0100 DE00000033
NY 1802C8E30C5EBDA2 DE DE0100 DE00000043
NY 181052B901F834DD DE DE0100 DE00000061
NY 181C39251EE20C6C DE DE0100 DE00000066
NY 182885F10797D735 DE DE0100 DE00000070
NY 1838642B1E52B078 DE DE0100 DE00000077
NY 17F3AB42022F0794 DE DE0190 DE00000038
NY 180430EA1949EB61 DE DE0190 DE00000043
NY 181052B70C357965 DE DE0190 DE00000061
NY 17E198870884B534 DE DE0400 DE00000033
NY 17EEF4D6002657B2 DE DE0400 DE00000038
NY 1802C8E40D246A84 DE DE0400 DE00000043
NY 181052C21779B1FE DE DE0400 DE00000061
NY 181C39331FFB717F DE DE0400 DE00000066
NY 182885F619AD723D DE DE0400 DE00000070
NY 183864321E43A749 DE DE0400 DE00000077
NY 17E53CC303741DDE DE DE0410 DE00000033
NY 17F011370D4D6B12 DE DE0410 DE00000038
NY 180430F204FD1AB4 DE DE0410 DE00000043
NY 17F664E2143E4C5C DE DE0410 DE00000053
NY 181052BC0C347337 DE DE0410 DE00000061
NY 181C393012C460B2 DE DE0410 DE00000066
NY 182885E600E60682 DE DE0410 DE00000070
NY 1838641D010CFA4C DE DE0410 DE00000077
NY 17F9FC9C0D8F9C14 DE DE0420 AITR000030
NY 17EA675D0A488D66 DE DE0420 DE00000029
NY 17F3896719061DE2 DE DE0420 DE00000038
NY 180430F207D9CB91 DE DE0420 DE00000043
NY 17F77B560EBFAE0B DE DE0420 DE00000049
NY 17F7CC900438FDD7 DE DE0420 DE00000058
NY 181052CB0F5FACDF DE DE0420 DE00000061
NY 1816904D1E1B6D94 DE DE0420 DE00000063
NY 180AD3F21908F9F5 DE DE0420 DE00000065
NY 181C39170A436491 DE DE0420 DE00000066
NY 182C9880013FCB5D DE DE0420 DE00000070
NY 1838641C013BB903 DE DE0420 DE00000077
NY 17E510E210B6BE25 DE DE0430 DE00000033
NY 17F0110507EE9A1D DE DE0430 DE00000038
NY 180430F215545EA6 DE DE0430 DE00000043
NY 181052B0019A4DF3 DE DE0430 DE00000061
NY 180AD3F406BFBEEE DE DE0430 DE00000065
NY 181C39050B0FD372 DE DE0430 DE00000066
NY 182885EE0928090D DE DE0430 DE00000070
NY 1838643816D05AE9 DE DE0430 DE00000077
NY 17E6822315495B6D DE DE0440 DE00000033
NY 17F1F1010DF85629 DE DE0440 DE00000038
NY 180430F20CFB6530 DE DE0440 DE00000043
NY 181052B01FA15BBC DE DE0440 DE00000061
NY 180AD3F605C47579 DE DE0440 DE00000065
NY 181C393F05B0E5A2 DE DE0440 DE00000066
NY 182885DC1456E513 DE DE0440 DE00000070
NY 1838644419C0AD4A DE DE0440 DE00000077
NY 17E19889042812F8 DE DE0490 DE00000033
NY 17EEF5B5053EEDC1 DE DE0490 DE00000038
NY 1802C8E6155FC2C3 DE DE0490 DE00000043
NY 181052BB1CFC5B79 DE DE0490 DE00000061
NY 181C39440D10F7A5 DE DE0490 DE00000066
NY 1838643615DB5DBB DE DE0490 DE00000077
NY 17F9FC9D1AFD9C55 DE DE0810 AITR000030
NY 17E6371A134F6470 DE DE0810 DE00000033
NY 17F596E01F4C525E DE DE0810 DE00000038
NY 180430F40E919E8E DE DE0810 DE00000043
NY 17F77B160DFE5E9A DE DE0810 DE00000049
NY 17F7CC920A05967B DE DE0810 DE00000058
NY 181052C5090F1E5B DE DE0810 DE00000061
NY 1816714404901F14 DE DE0810 DE00000063
NY 180AD3F70738015C DE DE0810 DE00000065
NY 181C39140CFAD8BB DE DE0810 DE00000066
NY 182C98791F3F0A34 DE DE0810 DE00000070
NY 1838641B024C4353 DE DE0810 DE00000077
NY 17EA71AC1017D74E DE DE0820 DE00000029
NY 17F3876E11C76B47 DE DE0820 DE00000038
NY 1805C0D90EDEB490 DE DE0820 DE00000043
NY 17F7795D17C451E7 DE DE0820 DE00000049
NY 17F664C504C266FE DE DE0820 DE00000052
NY 1811639F1915DC41 DE DE0820 DE00000061
NY 1815A1B41C2FF8DF DE DE0820 DE00000063
NY 180AD3F902AE1980 DE DE0820 DE00000065
NY 181C393C018307F3 DE DE0820 DE00000066
NY 182E05A0123133A9 DE DE0820 DE00000070
NY 182FBD31072FA1A1 DE DE0820 DE00000075
NY 1839EF800EAF6C4E DE DE0820 DE00000077
NY 182FEABA1F43CE80 DE DE0820 DE00000080
NY 17E19896115A1003 DE DE0830 DE00000033
NY 17F0115904984FE6 DE DE0830 DE00000038
NY 180430F51C57199F DE DE0830 DE00000043
NY 181052BB05F166D0 DE DE0830 DE00000061
NY 181C395509B589B4 DE DE0830 DE00000066
NY 182885E91FAA32D5 DE DE0830 DE00000070
NY 1838643E1A236A4F DE DE0830 DE00000077
NY 17D3C42E0C130034 DE DE0860 DE00000028
NY 181052C1121CDA6F DE DE0860 DE00000061
NY 181C38F010E7075D DE DE0860 DE00000066
NY 1829956D1501CA8D DE DE0860 DE00000070
NY 1839798C1BA8ADA8 DE DE0860 DE00000077
NY 17E1A4A109FAD59B DE DE0940 DE00000033
NY 18072F571E3CA8C9 DE DE0940 DE00000043
NY 181052C00E02499E DE DE0940 DE00000061
NY 181C39421EBF7C9C DE DE0940 DE00000066
NY 182885D91296A296 DE DE0940 DE00000070
NY 1838643603D96F33 DE DE0940 DE00000077
NY 181B2AEA04F96F90 DE DE5031 DE00000066
NY 1806494F024CADC4 DE DE5080 DE00000043
NY 1810528F0FB655C8 DE DE5080 DE00000061
NY 17E637281C6B55B5 DE DE5130 DE00000033
NY 17EFC406017DE232 DE DE5130 DE00000038
NY 180430FB13000E0D DE DE5130 DE00000043
NY 181052801526D7CE DE DE5130 DE00000061
NY 181B2AE00FD10CF5 DE DE5130 DE00000066
NY 182885C01476B147 DE DE5130 DE00000070
NY 17E3071B15992B26 DE DE5600 DE00000033
NY 17F011F31C902743 DE DE5600 DE00000038
NY 18043101039A2862 DE DE5600 DE00000043
NY 1810528008E6E8F6 DE DE5600 DE00000061
NY 181B2AE31C62940C DE DE5600 DE00000066
NY 182885C100894FE3 DE DE5600 DE00000070
NY 18386400124A13EB DE DE5600 DE00000077
NN 1511620504EC1CFE DE DE5630
NY 17E1986B019F16D9 DE DE5690 DE00000033
NY 17EFE86D13A1660A DE DE5690 DE00000038
NY 1802C8BE0D044217 DE DE5690 DE00000043
NY 181052860C2D5F16 DE DE5690 DE00000061
NY 181B2AD7040534AF DE DE5690 DE00000066
NY 183863E610EC6DBD DE DE5690 DE00000077
NY 1804310001822ED7 DE DE5900 DE00000043
NY 17CAB21417364395 DE DE7120 DE00000023
NY 17F6DA2B0AC3303D DE DE7120 DE00000030
NY 17EF1F1E165DD21C DE DE7120 DE00000038
NY 181052820F2583C1 DE DE7120 DE00000061
NY 17FF7F9F045A9FA2 DE DE7120 DE00000064
NY 181B2AF305874F6A DE DE7120 DE00000066
NY 182885BD11A7674C DE DE7120 DE00000070
NY 17E427B114DC7F76 DE DE7800 DE00000033
NY 17E19867142425A9 DE DE9992 DE00000033
NY 1802C8CF128E0800 DE DE9992 DE00000043
NY 1810529400FA47BC DE DE9992 DE00000061
NY 181B2AF7052B00F4 DE DE9992 DE00000066
NY 1839EFDC13261162 DE DE9992 DE00000077
NY 17E63702090A08C1 DE YDE0021 DE0000003357A0E330
NY 17EDDE56054FA08D DE YDE0021 DE0000003857E11728
NY 18015E540200D86F DE YDE0021 DE0000004358849D3C
NY 180B6BEC02BE25F8 DE YDE0021 DE0000006158D9002C
NY 181C38D600A7F2B4 DE YDE0021 DE000000665965EE7CMVS
NY 182E03DA01A9B86B DE YDE0021 DE0000007059FB22DBMVS
NY 183885BB12DD75FC DE YDE0021 DE000000775A53475E
NY 183885BD0A967610 DE YDE0021 DE000000775A53475EMVS
NY 155F7C6C1E180AE2 DE YDE0860 19950427S101702A044022AYDE0860
NY 1561A8500A42762E DE YDE0860 19950511S101702Z189239AYDE0860
NY 1562D01111457CC8 DE YDE0860 19950518S101702A044277AYDE0860
NY 156366B61CF57B20 DE YDE0860 19950522S101702Z190760AYDE0860
NY 15650056151C9842 DE YDE0860 19950601S101702A044799AYDE0860
NY 1566199E198DE23C DE YDE0860 19950608S101702A045100AYDE0860
NY 1567330710B49F86 DE YDE0860 19950615S101702M000591AYDE0860
NY 1568502C1F47F1A0 DE YDE0860 19950622S101702M000590AYDE0860
NY 156A83DA12D66C94 DE YDE0860 19950706S101702A045780AYDE0860
NY 156B9C8A0BCE2502 DE YDE0860 19950713S101702A046130AYDE0860
NY 156EE6770E9F8DF6 DE YDE0860 19950803S101702A046600AYDE0860
NY 15769C3D10BF06C4 DE YDE0860 19950921S101702A047786AYDE0860
NY 1579E34600FDC800 DE YDE0860 19951012S101702M000615AYDE0860
NY 17E089C91A038550 DE YDELSTO DE00000033577144E4
NY 17EDB50F19BC5143 DE YDELSTO DE0000003857DFBD27
NY 18015E5309A69D67 DE YDELSTO DE0000004358849D33
NY 1819138A0AC1B2B8 DE YDELSTO DE00000066594B8B81
NY 181AFA9508EE4408 DG YDGPORT DEPG000064
NY 15054CF11B1A0B6C DG YDGT011
NN 14F5E37B1C8D4C66 DG YDGT031
NY 17E9A480173C8D29 DI DI5200 DI00000046
NY 17EDE1540DD0C99D DI DI5200 DI00000047
NY 18199BE40A236E0E DI DI5200 DI00000064
NY 17EDB918009CA8AE DI DI7510 DI00000045
NY 17FB67501F8BE779 DI DI7510 DI00000054
NY 180BEB971B99C254 DI DI7510 DI00000058
NY 17D3C4750C448953 DI DI8290 DI00000034
NY 17D3C4770B2D72AC DI YDIDB2 DI00000034570623C3
NY 17D6BE7C089B67B1 DI YDIT015 DI00000042571F1C16
NY 17D6BE7C11CC2785 DI YDIT015 DI00000042571F1C16CICS
NY 18198C8304C23945 DI YDIT015 DI00000068594F823D
NY 18198C8507892155 DI YDIT015 DI00000068594F823DCICSMVS
NY 18198C841D3619BA DI YDIT015 DI00000068594F823DMVS
NY 17DAE088170B1DD9 DI YDITBTB DI000000425741C710
NY 18198C381FD89BCF DI YDITBTB DI00000068594F7FC8
NY 18198C3A1D3FE898 DI YDITBTB DI00000068594F7FC8CICSMVS
NY 18198C3A137B3E7F DI YDITBTB DI00000068594F7FC8MVS
NY 1775F5C9116FA845 DI YDIU015 A06M02710553F33A22
NY 181A026818EC369B DI YDIU015 DI0000006459535F3EMVS
NY 1827DF0B02EABE6E DI YDIU015 DI0000007059C7A76B
NY 1827DF0C1186792A DI YDIU015 DI0000007059C7A76BMVS
NY 1775F5CA1C99D48D DI YDIU016 A06M02710553F33A2E
NY 181A027C072235D5 DI YDIU016 DI0000006459535FDDMVS
NY 1827DF141AD8064A DI YDIU016 DI0000007059C7A7B9
NY 1827DF161093B4F8 DI YDIU016 DI0000007059C7A7B9MVS
NY 1576B79804B3E908 DN DN8020 19950922S101702Z209425ADN8020
NY 17F91940005F9BF6 DP DP0320 DI00000057
NY 1802F6590437496E DP DP0320 DP00000059
NY 180DF65010137638 DP DP0320 DP00000065
NY 181E1C5606776690 DP DP0320 DP00000067
NY 182DD5810A5D5CED DP DP0320 DP00000071
NY 182260FC0F0ECDD1 DP DP0320 DP00000072
NY 182DB2C01A4395B9 DP DP0320 DP00000076
NY 17E2E55203C7547C DP DP0920 DP00000043
NY 17EE06BF09975F2D DP DP0920 DP00000050
NY 1802F6F208AAEE2B DP DP0920 DP00000059
NY 17CFD8FC028C0581 DP DP7010 DP00000041
NY 17EB5ED91BBD159F DP DP7010 DP00000050
NY 160019B41D02BD2E DU DU7070 19980212134113S101702A070276ADU7070
NY 152995530C6787B4 DX DX0100 19940519144614S101702A034343ADX0100
NY 152F14DD070D004A DX DX0100 19940623142418S101702A035172ADX0100
NY 159796A512C93048 DX DX0100 19960418134338S101702M000672ADX0100
NY 15299A1D113F3DD4 DX DX5100 19940519174204S101702A034366ADX5100
NY 1530338B0769824C DX DX5100 19940630173128S101702A035317ADX5100
NY 1516E56C0BE01E84 DX DX5300
NY 15299A190482F6DA DX DX5300 19940519174211S101702A034369ADX5300
NN 152537051F0FFE2A DX DX5400 19940421194557S101702A033552ADX5400
NN 15D0CA270B156F6C DX DX5400 19970417125527S101702A063250ADX5400
NN 152537120A71395C DX DX5410 19940421194631S101702A033552ADX5410
NN 15D0CA28121AA544 DX DX5410 19970417125528S101702A063250ADX5410
NN 1517FD751514FA70 EA YEA0001
NN 15337F06124853A6 EA YEA0001 19940721163813S101702M000430AYEA0001
NN 15462E13037918F4 EA YEA0001 19941117135202S101702M000510AYEA0001
NN 154A9E690B82CCDC EA YEA0001 19941215193956S101702M000522AYEA0001
NN 156A81DD1473F742 EA YEA0001 19950706S101702M000589AYEA0001
NN 1572335409F1DA52 EA YEA0001 19950824S101702M000598AYEA0001
NN 1581B8DD06D68B9A EA YEA0001 19951201S101702A049916AYEA0001
NN 158B83251513C29A EA YEA0001 19960201S101702A051573AYEA0001
NN 158ECB291091D9D8 EA YEA0001 19960222143902S101702A052199AYEA0001
NN 1599CA591992D64E EA YEA0001 19960502135830S101702A053286AYEA0001
NN 159B89AA04BBEFA8 EA YEA0001 19960513164908S101702Z248111AYEA0001
NN 159BD7ED11EE1660 EA YEA0001 19960515152936S101702M000684AYEA0001
NN 159CC6371E2C7964 EA YEA0001 19960521133901S101702Z249308AYEA0001
NN 159D18E30AFB83D6 EA YEA0001 19960523145633S101702A054318AYEA0001
NN 15A7F086162D4D0C EA YEA0001 19960731143941S101702A056130AYEA0001
NN 15AEBE9D15F33A68 EA YEA0001 19960912215250S101702M000710AYEA0001
NN 15BD047B01912116 EA YEA0001 19961212173052S101702A059672AYEA0001
NN 15BF58D41079A2D0 EA YEA0001 19961227131336S101702A060313AYEA0001
NN 15BF5E0017DFF52A EA YEA0001 19961227161942S101702A060313AYEA0001
NN 15C5CEC41E1B2A90 EA YEA0001 19970206155025S101702M000764AYEA0001
NN 15E38BB20573593B EA YEA0001 19970814210804S101702A065956AYEA0001
NN 160A06290BCC9706 EA YEA0001 19980416190745S101702M000898AYEA0001
NN 16173AC21148A7DA EA YEA0001 19980709194601S101702M000923AYEA0001
NN 1617527B0AF87D0C EA YEA0001 19980710093842S101702M000923AYEA0001
NN 15BF58D609596784 EA YEA0010 19961227131338S101702A060313AYEA0010
NN 15BF5E040E491842 EA YEA0010 19961227161943S101702A060313AYEA0010
NN 15C141DE0C350344 EA YEA0010 19970108165717S101702Z289119AYEA0010
NN 15C3983016D1F88C EA YEA0010 19970123135233S101702A061046AYEA0010
NN 15C5CECA033765D4 EA YEA0010 19970206155028S101702M000764AYEA0010
NN 15CC64A311C97686 EA YEA0010 19970320132759S101702A062550AYEA0010
NN 15CE49A71ED235A6 EA YEA0010 19970401145030S101702Z304098AYEA0010
NN 15D0CFBD11B65C6C EA YEA0010 19970417154119S101702A063297AYEA0010
NN 15D1698617CD912A EA YEA0010 19970421115820S101702Z307341AYEA0010
NN 15D16BFE136277A6 EA YEA0010 19970421132703S101702Z307341AYEA0010
NN 15D1E41110045C64 EA YEA0010 19970424130254S101702A063459AYEA0010
NN 15DF1806085C11CC EA YEA0010 19970717131720S101702A065360AYEA0010
NN 15E38BB51B10836F EA YEA0010 19970814210808S101702A065956AYEA0010
NN 15E6CF6917BFF48A EA YEA0010 19970904153951S101702A066529AYEA0010
NN 15F1CEBE0774381C EA YEA0010 19971113150405S101702A068044AYEA0010
NN 15FA9CA40C77607C EA YEA0010 19980108153347S101702M000886AYEA0010
NN 15FF02A81B8BDC78 EA YEA0010 19980205151554S101702A070151AYEA0010
NN 16001B6906823AE0 EA YEA0010 19980212144146S101702M000834AYEA0010
NN 160A062B111DAC8A EA YEA0010 19980416190746S101702M000898AYEA0010
NN 160E67361D9AB912 EA YEA0010 19980514155250S101702M000913AYEA0010
NN 1612E4FE00148DF8 EA YEA0010 19980612054603S101702M000922AYEA0010
NN 16173ABD1E4AD1F6 EA YEA0010 19980709194554S101702M000923AYEA0010
NN 161752420B5511C2 EA YEA0010 19980710093614S101702M000923AYEA0010
NN 15BF58D4128C7AE8 EA YEA0011 19961227131340S101702A060313AYEA0011
NN 15BF5E020D42049A EA YEA0011 19961227161943S101702A060313AYEA0011
NN 15C141DC1A13AE6E EA YEA0011 19970108165718S101702Z289119AYEA0011
NN 15C3982E0E026572 EA YEA0011 19970123135233S101702A061046AYEA0011
NN 15C5CEC502A3D5C8 EA YEA0011 19970206155016S101702M000764AYEA0011
NN 15DF17FF001DA882 EA YEA0011 19970717131722S101702A065360AYEA0011
NN 15E38BB719377B7C EA YEA0011 19970814210813S101702A065956AYEA0011
NN 16001B65158B5B5C EA YEA0011 19980212144147S101702M000834AYEA0011
NN 160A063103FDDA9E EA YEA0011 19980416190755S101702M000898AYEA0011
NN 1612E4FC061B9217 EA YEA0011 19980612054603S101702M000922AYEA0011
NN 16173ABF00107CA0 EA YEA0011 19980709194555S101702M000923AYEA0011
NN 1617523017C7E3F2 EA YEA0011 19980710093659S101702M000923AYEA0011
NY 150200EA16D66220 EB EB5150
NY 154861AB06B76EA8 EB EB5150 19941201140340S101702A039621AEB5150
NY 17F225D31E8E6C06 EB EB6480 EXPN000051
NY 17ECF7F01BF209E4 EB EB6480 EXPN000054
NY 17F701880CC8CD9A EB EB6480 EXPN000058
NY 17C9C4A81DF216A5 EB EB8374 KLOM000043
NY 17F15B030959FF3E EB EB8374 KLOM000054
NY 17DD87DB14BB4DB9 EB EB8375 KLOM000049
NY 17F15B041BA8B699 EB EB8375 KLOM000054
NY 15E7E3D614E929D4 EB EB9000 19970911123324S101702A066672AEB9000
NN 15F32B6F18A72244 EC EC5099 19971122070527S101702Z346068AEC5099
NN 15F363BB0B30A920 EC EC5099 19971123164056S101702Z346149AEC5099
NN 15FCCEB10C9D55EE EC EC5099 19980122145046S101702A069866AEC5099
NY 17E6FD7A174794F4 EC EC5130 KLOM000049
NY 17F1F4E816485060 EC EC5130 KLOM000050
NY 180438D91C64FFB9 EC EC5130 KLOM000057
NY 180BEBC21B6D68D2 EC EC5130 KLOM000061
NY 181B2C221E63ACDA EC EC5130 KLOM000062
NY 1828F7A41A86614A EC EC5130 KLOM000067
NY 1838690B1B609F65 EC EC5130 KLOM000069
NN 15ED681E09A24E46 EC EC7103 19971016150142S101702A067558AEC7103
NN 15F3119B186B71AC EC EC7103 19971121154032S101702A068485AEC7103
NY 17C2CDA903AEEDFD EC EC7204 DLGR000022
NY 180C5B4A17C399BC EC EC7204 DLGR000039
NY 17C2CDD40B5308A3 EC EC7206 DLGR000022
NY 180C5B4D1348A5CC EC EC7206 DLGR000039
NY 17D233BB160F6221 EC EC7420 KAUS000011
NY 1614868703298A1A EC EC8062 19980622145120S101702Z380281AEC8062
NY 1614AE6D069F4589 EC EC8062 19980623143853S101702Z380537AEC8062
NY 1614CFEC18313F0C EC EC8062 19980624103834S101702Z380638AEC8062
NY 1614868E1B2D9E84 EC EC8063 19980622145205S101702Z380283AEC8063
NY 1614AE6C0563C024 EC EC8063 19980623143831S101702Z380538AEC8063
NY 1614CFF814886764 EC EC8063 19980624103859S101702Z380639AEC8063
NN 16059B1917DAB9F4 EC EC8067 19980319142758S101702A071130AEC8067
NY 1607D0BC0053FFC6 EC EC8140 19980402174847S101702A071444AEC8140
NY 160C31381514C7A2 EC EC8140 19980430141651S101702A072032AEC8140
NN 1607F23A0D2D8D08 EC EC8698 19980403135200S101702A071490AEC8698
NN 15F0B830135F9E5C EC YECAV 19971106165427S101702A068113AYECAV
NN 15F0D48B1F4427D2 EC YECAV 19971107094915S101702A068113AYECAV
NN 15F545B30A0C7088 EC YECAV 19971205161051S101702A068771AYECAV
NN 15FBBA0E07F43A00 EC YECAV 19980115174314S101702M000856AYECAV
NN 15FF2F3B1A2C9016 EC YECAV 19980206175259S101702A070225AYECAV
NN 16004156009EBBC6 EC YECAV 19980213132027S101702A070420AYECAV
NN 160484CF1FE9F394 EC YECAV 19980312162542S101702A070997AYECAV
NN 160487610B1F3D9E EC YECAV 19980312175718S101702A070997AYECAV
NN 1607F2C7192E8D04 EC YECAV 19980403141043S101702A071472AYECAV
NN 160A061B116002BC EC YECAV 19980416190501S101702M000898AYECAV
NY 15F0B76E05CF8658 EC YECAVKY 19971106162740S101702A067704AYECAVKY
NY 15FBBA000FC923D2 EC YECAVKY 19980115174842S101702M000856AYECAVKY
NY 160484BA031BAB26 EC YECAVKY 19980312162557S101702A070997AYECAVKY
NY 16048752153D688E EC YECAVKY 19980312175734S101702A070997AYECAVKY
NY 1607F2C615750B60 EC YECAVKY 19980403141026S101702A071472AYECAVKY
NY 16187C430C3C3C2C EC YECAVKY 19980717193302S101702Z383289AYECAVKY
NY 16187C9515EBB6E4 EC YECAVKY 19980717194554S101702Z383292AYECAVKY
NN 15F0B82D01D418AC EC YECCL 19971106165431S101702A068113AYECCL
NN 15F0D48C07A3F0A0 EC YECCL 19971107094920S101702A068113AYECCL
NN 15F545C1006F6182 EC YECCL 19971205161052S101702A068771AYECCL
NN 15FBB9E8013285E2 EC YECCL 19980115174315S101702M000856AYECCL
NN 15FF2F5C08CEC51E EC YECCL 19980206175302S101702A070225AYECCL
NN 160484CB09405DA6 EC YECCL 19980312162548S101702A070997AYECCL
NN 160487651199F533 EC YECCL 19980312175726S101702A070997AYECCL
NN 1607F2E713849224 EC YECCL 19980403141044S101702A071472AYECCL
NN 160A06221E744414 EC YECCL 19980416190801S101702M000898AYECCL
NN 1611DC2817134B14 EC YECCL 19980605154804S101702A072938AYECCL
NN 1616421401679618 EC YECCL 19980703152436S101702A073255AYECCL
NN 15F0B82E094D8612 EC YECCLAR 19971106165420S101702A068113AYECCLAR
NN 15F0D48B1181760E EC YECCLAR 19971107094906S101702A068113AYECCLAR
NN 15F545BA054E1286 EC YECCLAR 19971205161053S101702A068771AYECCLAR
NN 15FBBA06123E0AD2 EC YECCLAR 19980115174315S101702M000856AYECCLAR
NN 15FF2F4A016A922E EC YECCLAR 19980206175303S101702A070225AYECCLAR
NN 1607F2C41EA50197 EC YECCLAR 19980403141045S101702A071472AYECCLAR
NN 160A061805DF2698 EC YECCLAR 19980416190501S101702M000898AYECCLAR
NN 15F0B830153EB424 EC YECCLC 19971106165420S101702A068113AYECCLC
NN 15F0D48B1CA47328 EC YECCLC 19971107094907S101702A068113AYECCLC
NN 15F545BB0E124242 EC YECCLC 19971205161054S101702A068771AYECCLC
NN 15FF2F5A0246B50E EC YECCLC 19980206175303S101702A070225AYECCLC
NN 1607F2C70D40CC2E EC YECCLC 19980403141046S101702A071472AYECCLC
NN 160A060C03D40B44 EC YECCLC 19980416190502S101702M000898AYECCLC
NN 15F0B82F045E008E EC YECCLV 19971106165421S101702A068113AYECCLV
NN 15F0D48B18A41362 EC YECCLV 19971107094908S101702A068113AYECCLV
NN 15F545B80366C636 EC YECCLV 19971205161054S101702A068771AYECCLV
NN 15FF2F510865C1D4 EC YECCLV 19980206175304S101702A070225AYECCLV
NN 1607F2C607AE3242 EC YECCLV 19980403141033S101702A071472AYECCLV
NN 160A061B069AA6AE EC YECCLV 19980416190502S101702M000898AYECCLV
NN 15F0B83106C6764E EC YECCR 19971106165421S101702A068113AYECCR
NN 15F0D48A14858024 EC YECCR 19971107094908S101702A068113AYECCR
NN 15F545C100A253DE EC YECCR 19971205161055S101702A068771AYECCR
NN 15F71EFE0E9B63C2 EC YECCR 19971217103059S101702Z351294AYECCR
NN 15F7E7CA0BB619B0 EC YECCR 19971222101649S101702Z352108AYECCR
NN 15F956E80B940962 EC YECCR 19971231131652S101702Z353056AYECCR
NN 15FBB9DE1D7488C4 EC YECCR 19980115174315S101702M000856AYECCR
NN 15FF2F5D03F13F8C EC YECCR 19980206175304S101702A070225AYECCR
NN 160484D7173C5432 EC YECCR 19980312162559S101702A070997AYECCR
NN 1604875C12E9E7DC EC YECCR 19980312175737S101702A070997AYECCR
NN 16059B090567D7A6 EC YECCR 19980319142423S101702A071130AYECCR
NN 160640260A2A9EBE EC YECCR 19980323165535S101702A071245AYECCR
NN 1607F2E81A55C2E6 EC YECCR 19980403141046S101702A071472AYECCR
NN 160A062C1452E3E8 EC YECCR 19980416190503S101702M000898AYECCR
NN 1610972C0E9C23AC EC YECCR 19980528135617S101702A072724AYECCR
NN 1616420F068A6102 EC YECCR 19980703152441S101702A073255AYECCR
NY 17BB4C56179393A6 EC YECCRAC SYNC0000085638D27E
NY 1802CEB1139525E8 EC YECCRAC SYNC0000205890AF4C
NY 180B93601DBD3F83 EC YECCRAC SYNC00002558DA4B2A
NY 1819BDE801C16516 EC YECCRAC SYNC000028595120A9
NY 182DD6451B9CC616 EC YECCRAC SYNC00003059F9A49E
NY 183420040F747796 EC YECCRAC SYNC0000325A2E6436
NN 15F0B82F1F49F366 EC YECCRAR 19971106165422S101702A068113AYECCRAR
NN 15F0D48A00CA61E2 EC YECCRAR 19971107094909S101702A068113AYECCRAR
NN 15F545B409D26B5C EC YECCRAR 19971205161056S101702A068771AYECCRAR
NN 15FF2F551FB7E5EE EC YECCRAR 19980206175305S101702A070225AYECCRAR
NN 1607F2C608B1D4A2 EC YECCRAR 19980403141048S101702A071472AYECCRAR
NN 160A060906D81AD8 EC YECCRAR 19980416190504S101702M000898AYECCRAR
NN 15F0B82F12EAD36A EC YECCRC 19971106165423S101702A068113AYECCRC
NN 15F0D48A144CE4AC EC YECCRC 19971107094910S101702A068113AYECCRC
NN 15F545BA0AF8B628 EC YECCRC 19971205161056S101702A068771AYECCRC
NN 15FF2F570F10E654 EC YECCRC 19980206175306S101702A070225AYECCRC
NN 160484CF1A9BEEBA EC YECCRC 19980312162645S101702A070997AYECCRC
NN 160487510980BD14 EC YECCRC 19980312175740S101702A070997AYECCRC
NN 1607F2C608BE25AC EC YECCRC 19980403141048S101702A071472AYECCRC
NN 160A060D16C49E12 EC YECCRC 19980416190505S101702M000898AYECCRC
NN 15F0B8301141ED4C EC YECCRCR 19971106165423S101702A068113AYECCRCR
NN 15F0D48A12AEF7FA EC YECCRCR 19971107094911S101702A068113AYECCRCR
NN 15F545B71862DA86 EC YECCRCR 19971205161057S101702A068771AYECCRCR
NN 15FBB9DE0A10A518 EC YECCRCR 19980115174316S101702M000856AYECCRCR
NN 15FF2F5B09F0782E EC YECCRCR 19980206175307S101702A070225AYECCRCR
NN 1607F2C316838156 EC YECCRCR 19980403141049S101702A071472AYECCRCR
NN 160A061415820813 EC YECCRCR 19980416190505S101702M000898AYECCRCR
NN 1616421015998925 EC YECCRCR 19980703152444S101702A073255AYECCRCR
NN 15F0B83007DF8FC4 EC YECCRL 19971106165424S101702A068113AYECCRL
NN 15F0D48A07D29C26 EC YECCRL 19971107094912S101702A068113AYECCRL
NN 15F545B919345596 EC YECCRL 19971205161057S101702A068771AYECCRL
NN 15F6D603188DDDC2 EC YECCRL 19971215145836S101702Z350817AYECCRL
NN 15F956B9029215A2 EC YECCRL 19971231130928S101702Z353046AYECCRL
NN 15FBB9F819707B6D EC YECCRL 19980115174316S101702M000856AYECCRL
NN 15FF2F521788B1CC EC YECCRL 19980206175308S101702A070225AYECCRL
NN 160484CE0F9D314B EC YECCRL 19980312162647S101702A070997AYECCRL
NN 1604875F13D0FBCB EC YECCRL 19980312175741S101702A070997AYECCRL
NN 1607F2C213A6DF6E EC YECCRL 19980403141049S101702A071472AYECCRL
NN 160A06131A415106 EC YECCRL 19980416190507S101702M000898AYECCRL
NN 1616420D065CE312 EC YECCRL 19980703152444S101702A073255AYECCRL
NN 15F0B8300D5ED954 EC YECCRV 19971106165424S101702A068113AYECCRV
NN 15F0D4881021850A EC YECCRV 19971107094912S101702A068113AYECCRV
NN 15F545BA0B5DB7A2 EC YECCRV 19971205161058S101702A068771AYECCRV
NN 15FF2F581FFD9074 EC YECCRV 19980206175309S101702A070225AYECCRV
NN 160484C403CA55C4 EC YECCRV 19980312162532S101702A070997AYECCRV
NN 1604875901460CBE EC YECCRV 19980312175704S101702A070997AYECCRV
NN 1607F2C1176F4294 EC YECCRV 19980403141050S101702A071472AYECCRV
NN 160A060E18B95F84 EC YECCRV 19980416190508S101702M000898AYECCRV
NN 15F0B8300D7C7056 EC YECDCI 19971106165425S101702A068113AYECDCI
NN 15F0D48B136FDD42 EC YECDCI 19971107094913S101702A068113AYECDCI
NN 15F545BD0A1D1B02 EC YECDCI 19971205161058S101702A068771AYECDCI
NN 15FF2F5B09ED90EC EC YECDCI 19980206175310S101702A070225AYECDCI
NN 160484C60554B842 EC YECDCI 19980312162533S101702A070997AYECDCI
NN 1604875A091438D8 EC YECDCI 19980312175704S101702A070997AYECDCI
NN 1607F2CB07EA886E EC YECDCI 19980403141051S101702A071472AYECDCI
NN 160A06170BD33D3A EC YECDCI 19980416190509S101702M000898AYECDCI
NN 160A96500BAC1586 EC YECDCI 19980420091008S101702A071906AYECDCI
NN 160BBB7A05EF4EA4 EC YECDCI 19980427160238S101702A072040AYECDCI
NY 17C8A99219A4B2B0 EC YECDMAE SYNC00001056A8EDE4
NY 17C8A993064683A1 EC YECDMAE SYNC00001056A8EDE4CICS
NY 17EEF6801E478A10 EC YECDMAE SYNC00001957EA4559
NY 17EEF6810A7BE081 EC YECDMAE SYNC00001957EA4559CICS
NY 17C96ABA10AE6176 EC YECDMAU SYNC00001056AF4229
NN 160018711CE7C5AE EC YECGR2 19980212125839CGS101702A069923AYECGR2
NN 1600187000F79F58 EC YECGR2 19980212125839S101702A069923AYECGR2
NN 1600BFE91492DA18 EC YECGR2 19980216165226CGS101702A070496AYECGR2
NN 1600BFE7162F1488 EC YECGR2 19980216165226S101702A070496AYECGR2
NN 15FF2F5A02CF9692 EC YECGRI 19980206175312S101702A070225AYECGRI
NN 160041540F0188B0 EC YECGRI 19980213132027S101702A070420AYECGRI
NN 160484C40DB4FBC4 EC YECGRI 19980312162534S101702A070997AYECGRI
NN 1604875E13ACF042 EC YECGRI 19980312175705S101702A070997AYECGRI
NN 15F0B82E10911A5A EC YECIN 19971106165426S101702A068113AYECIN
NN 15F0D48B0FFBB328 EC YECIN 19971107094915S101702A068113AYECIN
NN 15F545BD0D1AF412 EC YECIN 19971205161103S101702A068771AYECIN
NN 15FF2F490C6FF92A EC YECIN 19980206175315S101702A070225AYECIN
NN 160484CB1E18039A EC YECIN 19980312162534S101702A070997AYECIN
NN 1604875C0C3A341C EC YECIN 19980312175705S101702A070997AYECIN
NN 1607F2DC09F82C28 EC YECIN 19980403141052S101702A071472AYECIN
NN 160A06171232C8CE EC YECIN 19980416190510S101702M000898AYECIN
NY 177E97CB097ACD0A EC YECLOK CRMA003976543BA4EF
NY 177E97CC012AE745 EC YECLOK CRMA003976543BA4EFCICS
NN 15F2EF330D950AE4 EC YECMUPD 19971120190914S101702M000855AYECMUPD
NN 15F387000255D614 EC YECMUPD 19971124134218S101702Z346407AYECMUPD
NN 15F3B4610C099D6C EC YECMUPD 19971125164536S101702A068569AYECMUPD
NN 15F3D3BB0BB4D45C EC YECMUPD 19971126112833S101702A068620AYECMUPD
NN 15F3D5D401BFFED8 EC YECMUPD 19971126124340S101702Z347060AYECMUPD
NN 15F545B70FB66FDC EC YECMUPD 19971205161051S101702A068771AYECMUPD
NN 15FBB9E31019A47F EC YECMUPD 19980115174318S101702M000856AYECMUPD
NN 15FF2F49181AFB64 EC YECMUPD 19980206175318S101702A070225AYECMUPD
NN 1600415403E607FA EC YECMUPD 19980213132028S101702A070420AYECMUPD
NN 161642111D850403 EC YECMUPD 19980703152435S101702A073255AYECMUPD
NN 15F0B82F152B51B2 EC YECRP 19971106165427S101702A068113AYECRP
NN 15F0D48B11FC3302 EC YECRP 19971107094916S101702A068113AYECRP
NN 15F545C01225D6AA EC YECRP 19971205161104S101702A068771AYECRP
NN 15FF2F49062A0CF8 EC YECRP 19980206175319S101702A070225AYECRP
NN 160484C41CDD0F82 EC YECRP 19980312162535S101702A070997AYECRP
NN 1604875E11025398 EC YECRP 19980312175706S101702A070997AYECRP
NN 1607F2DD0724DE18 EC YECRP 19980403141052S101702A071472AYECRP
NN 160A061612B29FE8 EC YECRP 19980416190511S101702M000898AYECRP
NN 1610972B18CC52C4 EC YECRP 19980528135618S101702A072724AYECRP
NN 15F0B82E04423B7A EC YECRPA 19971106165428S101702A068113AYECRPA
NN 15F0D48A1D480570 EC YECRPA 19971107094916S101702A068113AYECRPA
NN 15F545BB15A94788 EC YECRPA 19971205161104S101702A068771AYECRPA
NN 15FF2F4C007B2C5C EC YECRPA 19980206175319S101702A070225AYECRPA
NN 160484C3174DAEC4 EC YECRPA 19980312162535S101702A070997AYECRPA
NN 1604875B0FD6041D EC YECRPA 19980312175706S101702A070997AYECRPA
NN 1607F2DC1F8EBB30 EC YECRPA 19980403141052S101702A071472AYECRPA
NN 1609AC82002786F4 EC YECRPA 19980414134151S101702A071717AYECRPA
NN 160A060B1ED165E8 EC YECRPA 19980416190512S101702M000898AYECRPA
NN 15F0B82E04E9C92E EC YECRPAV 19971106165428S101702A068113AYECRPAV
NN 15F0D48B12E16B50 EC YECRPAV 19971107094917S101702A068113AYECRPAV
NN 15F545C0121A79C6 EC YECRPAV 19971205161105S101702A068771AYECRPAV
NN 15FF2F4C1F88B18C EC YECRPAV 19980206175320S101702A070225AYECRPAV
NN 160484CC0635351C EC YECRPAV 19980312162536S101702A070997AYECRPAV
NN 160487550C717D57 EC YECRPAV 19980312175707S101702A070997AYECRPAV
NN 1607F2CA16F8C5E6 EC YECRPAV 19980403141053S101702A071472AYECRPAV
NN 160A060C00394802 EC YECRPAV 19980416190513S101702M000898AYECRPAV
NN 1607F2CB032AD41C EC YECRPV 19980403141036S101702A071472AYECRPV
NN 1609AC820035CA36 EC YECRPV 19980414134152S101702A071717AYECRPV
NN 160A060A1E0929E8 EC YECRPV 19980416190513S101702M000898AYECRPV
NN 15F0B82E0BF34610 EC YECRT 19971106165428S101702A068113AYECRT
NN 15F0D48B0467727C EC YECRT 19971107094917S101702A068113AYECRT
NN 15F545BD0B9C052C EC YECRT 19971205161105S101702A068771AYECRT
NN 15FF2F590391F820 EC YECRT 19980206175322S101702A070225AYECRT
NN 160484C403D12582 EC YECRT 19980312162537S101702A070997AYECRT
NN 1604875F00B82508 EC YECRT 19980312175708S101702A070997AYECRT
NN 1607F2DC0A208E66 EC YECRT 19980403141054S101702A071472AYECRT
NN 160A060A034547EE EC YECRT 19980416190514S101702M000898AYECRT
NN 161642111C8054A1 EC YECRT 19980703152433S101702A073255AYECRT
NN 15F0B82D15233B98 EC YECRTV 19971106165429S101702A068113AYECRTV
NN 15F0D48A070F484A EC YECRTV 19971107094918S101702A068113AYECRTV
NN 15F545BC08DAF174 EC YECRTV 19971205161106S101702A068771AYECRTV
NN 15FF2F5A037AE4C6 EC YECRTV 19980206175323S101702A070225AYECRTV
NN 160484C40DE31684 EC YECRTV 19980312162537S101702A070997AYECRTV
NN 1604875F1A3BF29A EC YECRTV 19980312175708S101702A070997AYECRTV
NN 1607F2CB17A2D227 EC YECRTV 19980403141054S101702A071472AYECRTV
NN 160A060A1E0A437C EC YECRTV 19980416190514S101702M000898AYECRTV
NN 15FF2F490A9CA6E4 EC YECSAN 19980206175323S101702A070225AYECSAN
NN 1600415017B31312 EC YECSAN 19980213132028S101702A070420AYECSAN
NN 160484C313321A88 EC YECSAN 19980312162538S101702A070997AYECSAN
NN 160487570783DF34 EC YECSAN 19980312175709S101702A070997AYECSAN
NN 1616420E0CE0CFBF EC YECSAN 19980703152435S101702A073255AYECSAN
NN 15FF2F4C16BF00A4 EC YECSAS 19980206175324S101702A070225AYECSAS
NN 160041540F3D2242 EC YECSAS 19980213132029S101702A070420AYECSAS
NN 160484C51A2027F0 EC YECSAS 19980312162539S101702A070997AYECSAS
NN 1604875B02B0189E EC YECSAS 19980312175709S101702A070997AYECSAS
NN 16164212086E9087 EC YECSAS 19980703152436S101702A073255AYECSAS
NN 15FF2F470F39A554 EC YECSBR 19980206175325S101702A070225AYECSBR
NN 160041501368CE0A EC YECSBR 19980213132030S101702A070420AYECSBR
NN 160484C30329E5AE EC YECSBR 19980312162539S101702A070997AYECSBR
NN 160487521B312888 EC YECSBR 19980312175714S101702A070997AYECSBR
NN 15FF2F461700EBBA EC YECSDH 19980206175326S101702A070225AYECSDH
NN 16004151048CF610 EC YECSDH 19980213132030S101702A070420AYECSDH
NN 160484C81DE619D4 EC YECSDH 19980312162540S101702A070997AYECSDH
NN 160487570B55B50E EC YECSDH 19980312175716S101702A070997AYECSDH
NN 1616420E04FE214A EC YECSDH 19980703152437S101702A073255AYECSDH
NN 15FF2F5917BA309C EC YECSDOC 19980206175327S101702A070225AYECSDOC
NN 160041531948C7A2 EC YECSDOC 19980213132031S101702A070420AYECSDOC
NN 160484CD1A8B157A EC YECSDOC 19980312162536S101702A070997AYECSDOC
NN 16048756100F02D3 EC YECSDOC 19980312175707S101702A070997AYECSDOC
NN 16152AB40D046814 EC YECSDOC 19980626164741S101702A073406AYECSDOC
NN 1616421115748287 EC YECSDOC 19980703152437S101702A073255AYECSDOC
NN 15FF2F4F1510811A EC YECSDS 19980206175327S101702A070225AYECSDS
NN 160041560954D5F4 EC YECSDS 19980213132031S101702A070420AYECSDS
NN 160484C415E8CB7E EC YECSDS 19980312162540S101702A070997AYECSDS
NN 160487620F1F3ECA EC YECSDS 19980312175716S101702A070997AYECSDS
NN 1616420D04A1C21C EC YECSDS 19980703152438S101702A073255AYECSDS
NN 15FF2F5B198212D6 EC YECSEG 19980206175328S101702A070225AYECSEG
NN 1600415605BF38C8 EC YECSEG 19980213132031S101702A070420AYECSEG
NN 160484C90E7AFB84 EC YECSEG 19980312162541S101702A070997AYECSEG
NN 160487611AC4970E EC YECSEG 19980312175717S101702A070997AYECSEG
NN 1616421304F698FF EC YECSEG 19980703152438S101702A073255AYECSEG
NN 15FF2F5C11BB925C EC YECSES 19980206175329S101702A070225AYECSES
NN 1600414A1DE1C5D6 EC YECSES 19980213132036S101702A070420AYECSES
NN 160484D71DC306BC EC YECSES 19980312162542S101702A070997AYECSES
NN 16048762158B978E EC YECSES 19980312175717S101702A070997AYECSES
NN 16152AB51BABDC72 EC YECSES 19980626164741S101702A073406AYECSES
NN 161642131DB961A4 EC YECSES 19980703152438S101702A073255AYECSES
NN 15FF2F57082A662B EC YECSEX 19980206175329S101702A070225AYECSEX
NN 1600415600DF16DE EC YECSEX 19980213132037S101702A070420AYECSEX
NN 160484D608E3E36C EC YECSEX 19980312162543S101702A070997AYECSEX
NN 1604876415134F29 EC YECSEX 19980312175719S101702A070997AYECSEX
NN 161642121348C1C3 EC YECSEX 19980703152439S101702A073255AYECSEX
NN 15FF2F590C0AFBCC EC YECSFO 19980206175330S101702A070225AYECSFO
NN 160041490F2D5B4A EC YECSFO 19980213132037S101702A070420AYECSFO
NN 160484CD0BD3E7AA EC YECSFO 19980312162543S101702A070997AYECSFO
NN 1604875A07A87CEA EC YECSFO 19980312175719S101702A070997AYECSFO
NN 16164211143C049F EC YECSFO 19980703152440S101702A073255AYECSFO
NN 15F0B82E109039FC EC YECSFPR 19971106165429S101702A068113AYECSFPR
NN 15F0D48A1B6A84DE EC YECSFPR 19971107094918S101702A068113AYECSFPR
NN 15F545C0125233C2 EC YECSFPR 19971205161106S101702A068771AYECSFPR
NN 15FF2F47014A4A1C EC YECSFPR 19980206175330S101702A070225AYECSFPR
NN 1607F2CB121B4943 EC YECSFPR 19980403141055S101702A071472AYECSFPR
NN 160A06121A4A30AB EC YECSFPR 19980416190515S101702M000898AYECSFPR
NN 15FF2F5B07A35048 EC YECSHD1 19980206175331S101702A070225AYECSHD1
NN 16004155185CC706 EC YECSHD1 19980213132039S101702A070420AYECSHD1
NN 1600B45515A0C3AC EC YECSHD1 19980216095837S101702Z360013AYECSHD1
NN 1600BFE615815A32 EC YECSHD1 19980216165227S101702A070496AYECSHD1
NN 160484D31E39BD48 EC YECSHD1 19980312162544S101702A070997AYECSHD1
NN 1604876116E64CD4 EC YECSHD1 19980312175720S101702A070997AYECSHD1
NN 1616420C1FB74786 EC YECSHD1 19980703152440S101702A073255AYECSHD1
NN 15FF2F5B1D6B3BCA EC YECSHD2 19980206175332S101702A070225AYECSHD2
NN 160041531687EED4 EC YECSHD2 19980213132039S101702A070420AYECSHD2
NN 1600BFE70F114AA4 EC YECSHD2 19980216165227S101702A070496AYECSHD2
NN 160484CE162D15E5 EC YECSHD2 19980312162544S101702A070997AYECSHD2
NN 160487611FCACF76 EC YECSHD2 19980312175720S101702A070997AYECSHD2
NN 1607F2DD0C724220 EC YECSHD2 19980403141037S101702A071472AYECSHD2
NN 16152AB50A11958A EC YECSHD2 19980626164742S101702A073406AYECSHD2
NN 1616420E054F96AE EC YECSHD2 19980703152441S101702A073255AYECSHD2
NN 15F0B82E012FC6E8 EC YECSL 19971106165430S101702A068113AYECSL
NN 15F0D48B17AAB044 EC YECSL 19971107094918S101702A068113AYECSL
NN 15F545BD137FAFF4 EC YECSL 19971205161107S101702A068771AYECSL
NN 15F7008209FCAAF2 EC YECSL 19971216161903S101702Z351139AYECSL
NN 15FF2F560DAE488F EC YECSL 19980206175333S101702A070225AYECSL
NN 160041551E914834 EC YECSL 19980213132041S101702A070420AYECSL
NN 160484CF1D282D8C EC YECSL 19980312162545S101702A070997AYECSL
NN 160487610459B650 EC YECSL 19980312175721S101702A070997AYECSL
NN 160640261681A032 EC YECSL 19980323165535S101702A071245AYECSL
NN 1607F2CC0AE1ED3F EC YECSL 19980403141055S101702A071472AYECSL
NN 160A061E042CA1DA EC YECSL 19980416190516S101702M000898AYECSL
NN 160BBB7B12704280 EC YECSL 19980427160239S101702A072040AYECSL
NN 15FF2F5C15DC2968 EC YECSLV 19980206175333S101702A070225AYECSLV
NN 160041561AAC5290 EC YECSLV 19980213132041S101702A070420AYECSLV
NN 160484D806F1F62A EC YECSLV 19980312162546S101702A070997AYECSLV
NN 160487650BF685FF EC YECSLV 19980312175723S101702A070997AYECSLV
NN 16152AB601D491D6 EC YECSLV 19980626164742S101702A073406AYECSLV
NN 1616420D0AD154E0 EC YECSLV 19980703152443S101702A073255AYECSLV
NN 15FF2F5516E6C2FB EC YECSZS 19980206175335S101702A070225AYECSZS
NN 1600414E00E3ADCA EC YECSZS 19980213132043S101702A070420AYECSZS
NN 160484D21BC4957C EC YECSZS 19980312162547S101702A070997AYECSZS
NN 160487600B4AF5E8 EC YECSZS 19980312175724S101702A070997AYECSZS
NN 161642111CF02726 EC YECSZS 19980703152434S101702A073255AYECSZS
NY 17D2B1790CF11821 EC YECUCRK SYNC00001156FD2111
NY 182976891A82C016 EC YECUCRK SYNC00003059D501A0MVS
NY 17F3866D04B74B97 ED ED0830 ED00000040
NY 17E88BB70F9E3340 ED ED0830 ED00000043
NY 17F6DA811FC7E9FF ED ED0830 ED00000044
NY 17F664581D55D4C5 ED ED0830 ED00000049
AY 17E9A0A514429F90 ED ED0850 ED00000039
NY 17E4CCBA14127BDB ED ED0950 ED00000036
NY 17F036DD0D7F8420 ED ED0950 ED00000040
NY 17F6B26F1423814C ED ED0950 ED00000044
NY 1804A5A1054035F8 ED ED0950 ED00000047
NY 1810C2C401716D32 ED ED0950 ED00000052
NY 181CE48101B6A554 ED ED0950 ED00000056
NY 182A8F8C17CC8305 ED ED0950 ED00000062
NY 1839ED0D0A42A304 ED ED0950 ED00000071
NY 17F77E3A00D6B07E ED ED0960 DE00000049
NY 17F664CE19051000 ED ED0960 DE00000052
NY 17E9A0B6041BC336 ED ED0960 ED00000039
NY 17F4566D0A848A80 ED ED0960 ED00000040
NY 17F910D61ED793D1 ED ED0960 ED00000044
NY 1805CA9616A34104 ED ED0960 ED00000047
NY 180A596C0C38914E ED ED0960 ED00000058
NY 1810C2B0193ACBC4 ED ED5231 ED00000052
NY 1566417010DB145A ED YED0034 19950609S101702A044988AYED0034
NY 1568502A12EA53EE ED YED0034 19950622S101702M000590AYED0034
NY 156A7D740EF1DA36 ED YED0034 19950706S101702A045878AYED0034
NY 156BBE641F78FDAA ED YED0034 19950714S101702A045968AYED0034
NY 156EE5DC0F1AEF5E ED YED0034 19950803S101702A046536AYED0034
NY 156FFEB70D461402 ED YED0034 19950810S101702A046695AYED0034
NY 157463A6169F0466 ED YED0034 19950907S101702A047537AYED0034
NY 157528A60F3CE620 ED YED0034 19950912S101702Z207809AYED0034
NY 15757BFB1CF17C1C ED YED0034 19950914S101702A047657AYED0034
NY 157D387C01EA2D66 ED YED0034 19951102S101702M000602AYED0034
NY 1583CDC00E9B18B2 ED YED0034 19951214S101702A050106AYED0034
NY 1584E3BC0A5C26D6 ED YED0034 19951221S101702A050529AYED0034
NY 158ECA5B159EFCBC ED YED0034 19960222141003S101702A052082AYED0034
NY 15A4CE65134A8D48 ED YED0034 19960711161137S101702A055746AYED0034
NY 15A566D70ACC5286 ED YED0034 19960715110850S101702Z257531AYED0034
NY 15A5E7E70A73B282 ED YED0034 19960718160812S101702A055858AYED0034
NY 15B223D30ACB242C ED YED0034 19961004122313S101702A057542AYED0034
NY 15B2EC7401143D70 ED YED0034 19961009120403S101702Z269920AYED0034
NY 15B317B91753C5B0 ED YED0034 19961010135245S101702A057713AYED0034
NY 15B666561EEE08D2 ED YED0034 19961031145508S101702A058043AYED0034
NY 15B9B18E0267BF18 ED YED0034 19961121135414S101702A058872AYED0034
NY 15CC68211B0C0B7A ED YED0034 19970320153410S101702M000778AYED0034
NY 15D87EBC1D45DBDB ED YED0034 19970605133549S101702A064376AYED0034
NY 15E38AC400E62ECF ED YED0034 19970814202936S101702A065906AYED0034
NY 15EA1A2B1C06D80E ED YED0034 19970925142356S101702A067006AYED0034
NY 15F0FD7200FFCEE8 ED YED0034 19971108101340S101702Z343980AYED0034
NY 15F0FE010A00B682 ED YED0034 19971108103304S101702Z343980AYED0034
NY 15F1CEDC12072222 ED YED0034 19971113150814S101702A068155AYED0034
NY 15F74CAA1A20C0D8 ED YED0034 19971218134249S101702A069204AYED0034
NY 15FBBA1606AA183C ED YED0034 19980115174915S101702M000856AYED0034
NY 160A062D0B3E9FA4 ED YED0034 19980416190527S101702M000898AYED0034
NY 15685174095D110A ED YED0120 19950622S101702A045513AYED0120
NY 156BBE640505F766 ED YED0120 19950714S101702A045968AYED0120
NY 156EE5DB0A2F55CC ED YED0120 19950803S101702A046536AYED0120
NY 156FFEB6093D4742 ED YED0120 19950810S101702A046695AYED0120
NY 1574639E0C6EB142 ED YED0120 19950907S101702A047537AYED0120
NY 157528AE03A5E27A ED YED0120 19950912S101702Z207810AYED0120
NY 15757BFA0FCEFFB2 ED YED0120 19950914S101702A047657AYED0120
NY 157D38821A5BA470 ED YED0120 19951102S101702M000602AYED0120
NY 15AEBDC4015853E2 ED YED0120 19960912212211S101702A057173AYED0120
NY 15B223CF0FEF4474 ED YED0120 19961004122314S101702A057542AYED0120
NY 15B2A9B60121523C ED YED0120 19961007201605S101702Z269643AYED0120
NY 15B2EB730DA6AA98 ED YED0120 19961009112903S101702Z269915AYED0120
NY 15B317B819BBFB8A ED YED0120 19961010135243S101702A057713AYED0120
NY 15B9B18B120E5FA8 ED YED0120 19961121135415S101702A058872AYED0120
NY 15CC68281F88EF0C ED YED0120 19970320153410S101702M000778AYED0120
NY 15D0CB7E085D9D44 ED YED0120 19970417134223S101702A063129AYED0120
NY 15D0CC7117DFCF44 ED YED0120 19970417141749S101702A063129AYED0120
NY 15D87EB8047D5C74 ED YED0120 19970605133550S101702A064376AYED0120
NY 15F74CA2076C224E ED YED0120 19971218134250S101702A069204AYED0120
NY 15FBBA101F5323B4 ED YED0120 19980115174927S101702M000856AYED0120
AY 17E32DC310229A62 ED YED5203 ED0000003657876B64
AY 17EEA6BE0CB65965 ED YED5203 ED0000004057E7A890
AY 1810C2560D959EF6 ED YED5203 ED000000525905C672
AY 181CE4530829D875 ED YED5203 ED00000056596B8D61
NY 15700051176AB94C ED YEDSAM 19950810S101702A046615AYEDSAM
NY 15921AC110CE0074 ED YEDSAM 19960314161457S101702M000666AYEDSAM
NY 15BE17851035E7FA ED YEDSAM 19961219133558S101702A059912AYEDSAM
NY 17C7B36A1D8D0FC8 EF EF5940 NOST000168
NY 17C1924B0A132399 EK EK6413 EMA0000030
NY 17E1A3850FCCF80D EK EK6413 EMA0000034
NY 17EEAE84187F09D9 EK EK6413 EMA0000048
NY 17E1C2440DC4CD36 EK EK6430 EMA0000034
NY 17E1A387132517C3 EK EK6481 EMA0000034
NY 17E1A439161BBAA5 EK EK6482 EMA0000034
NY 17D25C881E21F8BD EK EK6482 EMA0000039
NY 17E1A41C1AE65BF8 EK EK6510 EMA0000034
NY 17D347E80EF19A3A EK EK6510 EMA0000039
NY 17E1A41D1F2550AD EK EK6520 EMA0000034
NY 17D2602F08F76315 EK EK6520 EMA0000039
NY 17EEAF4F04638410 EK EK6520 EMA0000048
NY 17E1A4400D523B90 EK EK6603 EMA0000034
NY 17D25C9601951F3A EK EK6603 EMA0000039
NY 17E1A41E02189BE0 EK EK6710 EMA0000034
NY 17D25CA61F344B17 EK EK6710 EMA0000039
NY 17C18E7F176F0EA2 EK EK6841 EMA0000030
NY 17E1A4200897B44C EK EK6841 EMA0000034
NY 17EEAF9E18CE7293 EK EK6841 EMA0000048
NY 17E1C2470F915C7A EK EK6866 EMA0000034
NY 17E1A45B0A93338D EK EK7618 EMA0000034
NY 17D25D9C0E1F3C1D EK EK7618 EMA0000039
NY 17E1A4831D6E96B9 EK EK7660 EMA0000034
NY 17D175FF02AB80BE EK EK7660 EMA0000039
NY 17EED3EA056D3EC9 EK EK7660 EMA0000048
NY 17E1A4821936F725 EK EK7661 EMA0000034
NY 17D175B20CB8FC90 EK EK7661 EMA0000039
NY 17E1A469191AB638 EK EK7663 EMA0000034
NY 17D25DAB1EC924C8 EK EK7663 EMA0000039
NY 17E1A48304A4E6CD EK EK7664 EMA0000034
NY 17D175B30EB36EF3 EK EK7664 EMA0000039
NY 17E1A4830F169014 EK EK7666 EMA0000034
NY 17D175FF1EC6E0F1 EK EK7666 EMA0000039
NY 17E1A4831742C891 EK EK7667 EMA0000034
NY 17D17602053BD87A EK EK7667 EMA0000039
NY 17E1A4921C25946D EK EK7668 EMA0000034
NY 17D175B51FC7BD65 EK EK7668 EMA0000039
NY 17EED42D0FDF9559 EK EK7668 EMA0000048
NY 17E1A48F1ABCAAD1 EK EK7672 EMA0000034
NY 17E1A35C07A3BE74 EK EK7681 EMA0000034
NY 17D2605B1D3CAA78 EK EK7681 EMA0000039
NY 17EBAE821DDF05B4 EK EK7681 EMA0000048
NY 17E1A4CB081CB845 EK EK8710 EMA0000034
NN 15EF996A1ACC4EFA EM EM0060 19971030134545S101702A067897AEM0060
NN 15FA9D32110EF5C7 EM EM0060 19980108153802S101702M000886AEM0060
NN 152994E8113CD614 EM EM0070 19940519143412S101702A034287AEM0070
NN 15ECE58705353AA0 EM EM0070 19971013090717S101702A067405AEM0070
NN 15ECE58713D35E82 EM EM0080 19971013090718S101702A067405AEM0080
NN 15A3B13C172C9DF0 EM EM0900 19960704140613S101702A055506AEM0900
NN 15D8849107A9C884 EM EM0900 19970605170247S101702A064138AEM0900
NN 15ECE5851EE2590C EM EM0900 19971013090719S101702A067405AEM0900
NN 1514B83B0DC8CC08 EM YEM0061
NN 152994CA0221EF9C EM YEM0061 19940519142707S101702A034287AYEM0061
NN 15337F0507367F0C EM YEM0061 19940721163814S101702M000430AYEM0061
NN 154A9E681CA1DF62 EM YEM0061 19941215194000S101702M000522AYEM0061
NN 1558E4FE0B6522AC EM YEM0061 19950316154216S101702A042912AYEM0061
NN 1558EADE19AB5752 EM YEM0061 19950316191311S101702A042912AYEM0061
NN 1568502817757B04 EM YEM0061 19950622S101702M000590AYEM0061
NN 157233531614ADDE EM YEM0061 19950824S101702M000598AYEM0061
NN 157B01331F7A1DA4 EM YEM0061 19951019S101702M000621AYEM0061
NN 157C16B3083537D8 EM YEM0061 19951026S101702A048979AYEM0061
NN 157EEA2C176B6C54 EM YEM0061 19951113S101702A048936AYEM0061
NN 158197AC147EA2F2 EM YEM0061 19951130S101702A049980AYEM0061
NN 1584E7221B6BE9A4 EM YEM0061 19951221S101702A050563AYEM0061
NN 158A0DF90FDFA6AA EM YEM0061 19960123S101702A051440AYEM0061
NN 15921AC70E6FF484 EM YEM0061 19960314161545S101702M000666AYEM0061
NN 159796990F7B0F96 EM YEM0061 19960418134157S101702M000672AYEM0061
NN 159BD7EB1ECDB4A0 EM YEM0061 19960515152929S101702M000684AYEM0061
NN 15A9321F1B3401E4 EM YEM0061 19960808143147S101702A056273AYEM0061
NN 15AD9A501ACCC89C EM YEM0061 19960905153007S101702M000711AYEM0061
NN 15AEBEA00B48655E EM YEM0061 19960912215244S101702M000710AYEM0061
NN 15B0E4210CE53A2A EM YEM0061 19960926133930S101702A057314AYEM0061
NN 15B1047A0F52C930 EM YEM0061 19960927085815S101702Z268032AYEM0061
NN 15B1FE8D1C446AB0 EM YEM0061 19961003140825S101702A057537AYEM0061
NN 15ECE57809449E14 EM YEM0061 19971013090422S101702A067405AYEM0061
NN 15FA9CA80186FA3A EM YEM0061 19980108153349S101702M000886AYEM0061
NN 1514B84204A1D5C6 EM YEM0064
NN 152994CA18CEA1CC EM YEM0064 19940519142722S101702A034287AYEM0064
NN 157233520B29A8F0 EM YEM0064 19950824S101702M000598AYEM0064
NN 157B013609038C48 EM YEM0064 19951019S101702M000621AYEM0064
NN 158A0DF909B1805C EM YEM0064 19960123S101702A051440AYEM0064
NN 158DB1B910807322 EM YEM0064 19960215144640S101702A052021AYEM0064
NN 15921AC91B15A402 EM YEM0064 19960314161635S101702M000666AYEM0064
NN 159BD7EA0650B316 EM YEM0064 19960515152934S101702M000684AYEM0064
NN 15ECE57507CC61FA EM YEM0064 19971013090424S101702A067405AYEM0064
NN 1514B84313396AE6 EM YEM0065
NN 152994CB19A92F88 EM YEM0065 19940519142723S101702A034287AYEM0065
NN 15337F07120015E4 EM YEM0065 19940721163815S101702M000430AYEM0065
NN 154A9E6904259C0C EM YEM0065 19941215193958S101702M000522AYEM0065
NN 156A81DE172F3BE0 EM YEM0065 19950706S101702M000589AYEM0065
NN 1572335400A67C02 EM YEM0065 19950824S101702M000598AYEM0065
NN 157B013619D82A3A EM YEM0065 19951019S101702M000621AYEM0065
NN 158A0DFA08AE3C46 EM YEM0065 19960123S101702A051440AYEM0065
NN 159BD7EA0E3015F2 EM YEM0065 19960515152930S101702M000684AYEM0065
NN 15AEBEA0003BE012 EM YEM0065 19960912215245S101702M000710AYEM0065
NN 15ECE5771F7CE15A EM YEM0065 19971013090419S101702A067405AYEM0065
NN 15FA9CA805C4D2E6 EM YEM0065 19980108153339S101702M000886AYEM0065
NN 1514B8441565B9E8 EM YEM0900
NN 152994CD0210D646 EM YEM0900 19940519142705S101702A034287AYEM0900
NN 1558E525004548C8 EM YEM0900 19950316154229S101702A042912AYEM0900
NN 1558EB0310B3C374 EM YEM0900 19950316191311S101702A042912AYEM0900
NN 1572335610182A54 EM YEM0900 19950824S101702M000598AYEM0900
NN 157B01371F894A42 EM YEM0900 19951019S101702M000621AYEM0900
NN 1584E4E90EBBDA2C EM YEM0900 19951221S101702A050710AYEM0900
NN 158A0DFB046626F6 EM YEM0900 19960123S101702A051440AYEM0900
NN 15A06A5E082E15C4 EM YEM0900 19960613174145S101702A054886AYEM0900
NN 15A17DF715AF230C EM YEM0900 19960620140644S101702A055061AYEM0900
NN 15ECE57817CE0694 EM YEM0900 19971013090419S101702A067405AYEM0900
NY 17797019127C8689 EQ YEQISRK CRMA00418654106690
NY 17EBD49D0A8893DC EQ YEQISRK EAGL00001857CFFEDB
NY 182A66E10DD66DF5 EQ YEQISRK EAGL00002459DCE1D0
NY 182A66E30C7841E8 EQ YEQISRK EAGL00002459DCE1D0CICSMVS
NY 182A66E21AE8F997 EQ YEQISRK EAGL00002459DCE1D0MVS
NY 1784774107BB637A EQ YEQKDGP CRMA004309546CDAE6
NY 17ED16951F6126F5 EQ YEQKDGP GSER00010957DA8BC7
NY 181642531F0A6578 EQ YEQKDGP GSER0001775933E982
NY 18280ADF1B68D8DD EQ YEQKDGP GSER00018759C91710
NY 18280AE2014FEBAF EQ YEQKDGP GSER00018759C91710MVS
NY 178BFD1A05D461E5 EQ YEQRFT GSER00001454ABF60E
NY 17A6AD1B02F6C241 EQ YEQWAEC APEN000014558BE31D
NY 17FD703A0C34F0B8 ER ER5080 EAMR000018
NY 180184AC16541806 ER ER5080 EAMR000019
NY 180552661A58394D ER ER5080 EAMR000022
NY 18104E6103B08172 ER ER5080 EAMR000028
NY 180985BF048D7514 ER ER5080 EAMR000029
NY 18167417130F530E ER ER5080 EAMR000034
NY 181E1DEA0F45DB3D ER ER5080 EAMR000035
NY 181DFE691C0BF474 ER ER5080 EAMR000044
NY 182856FA1C3F9E6A ER ER5080 EAMR000048
NY 1837E6FC116AFB5B ER ER5080 EAMR000061
NY 17F8B94F16A57745 ER ER8020 EAMR000017
NY 17FEB31F193E8585 ER ER8020 EAMR000019
NY 1802F22E10766C5A ER ER8020 EAMR000022
NY 180CA6C103C836A5 ER ER8020 EAMR000028
NY 181AD31F13F7471E ER ER8020 EAMR000035
NY 182EC87C03DB7ABC ER ER8020 EAMR000048
NY 183400A71EDB3498 ER ER8020 EAMR000053
NY 183BD1340BA2B019 ER ER8020 EAMR000061
NY 183A92660A46E3C7 ER ER8020 EAMR000063
NY 1840B2DF1901E4D0 ER ER8020 EAMR000069
NY 17F480FC1001B81A ER YERBER EAMR000010
NY 17ED10CC14688800 ER YERBER EAMR000012
NY 17F8BF9312A0E17B ER YERBER EAMR000017
NY 17FB10DE1CCD2C5F ER YERBER EAMR000018
NY 1800B8411E9D7863 ER YERBER EAMR000019
NY 17F81A7302C1DF27 ER YERBER EAMR000020
NY 1807F9691CD75BD6 ER YERBER EAMR000022
NY 1800985C0E26B974 ER YERBER EAMR000024
NY 180FD3551D55D036 ER YERBER EAMR000028
NY 180A5AD201662B06 ER YERBER EAMR000029
NY 180CB2E10D76F6E2 ER YERBER EAMR000033
NY 1815A3EA1D2C7B70 ER YERBER EAMR000034
NY 181F3E541E46A486 ER YERBER EAMR000035
NY 181A30160089B5E9 ER YERBER EAMR000042
NY 182D838D099E1269 ER YERBER EAMR000048
NY 1831CA6D0A25F6D0 ER YERBER EAMR000053
NY 17E1EAC319BE8F5A ER YERDCU0 EAMR000003
NY 17E9804F0DE7FF19 ER YERDCU0 EAMR000005
NY 17F1539B14B62745 ER YERDCUR EAMR00001057FE19A1
NY 17EC9E3B047884F3 ER YERDCUR EAMR00001257D69A33
NY 17F68C471260A97F ER YERDCUR EAMR0000175829D861
NY 17FC840307C84762 ER YERDCUR EAMR000018585BE7D9
NY 18063CFF01BDDFE7 ER YERDCUR EAMR00002258AD7708
NY 180FD65B04B75E4E ER YERDCUR EAMR00002858FE0AE8
NY 1812FBAD0552EBE9 ER YERDCUR EAMR00003559186E33MVS
NY 182601F20B51C94C ER YERDCUR EAMR00004859B80521MVS
NY 1839F102109635E7 ER YERDCUR EAMR0000615A5F2EBC
NY 1839F104038A7D5C ER YERDCUR EAMR0000615A5F2EBCMVS
NY 17E1EA611713CF7D ER YERDGE0 EAMR000003
NY 17E9806817F60985 ER YERDGE0 EAMR000005
NY 17F33AC11B7C623E ER YERDGET EAMR000010580E1012
NY 17EC9E39025DD90F ER YERDGET EAMR00001257D69A21
NY 17F8DEF7178562B3 ER YERDGET EAMR000017583D54F9
NY 1805C85006D53059 ER YERDGET EAMR00002258A9A437
NY 1811E45A1D56DE45 ER YERDGET EAMR000028590F474F
NY 1812FBB310C7372F ER YERDGET EAMR00003559186E6CMVS
NY 1825F75F1CE04F44 ER YERDGET EAMR00004859B7AC83
NY 1825F762167B341E ER YERDGET EAMR00004859B7AC83MVS
NY 17E1EA6116ED0BFB ER YERDIN0 EAMR000003
NY 17E97A9B07E92630 ER YERDIN0 EAMR000005
NY 17E99CFB1A3A4217 ER YERDINS EAMR00000557BD6545
NY 17F183BD111074A0 ER YERDINS EAMR00001057FFAD64
NY 17F68C2409419232 ER YERDINS EAMR0000175829D73A
NY 1802A70C083C7DB1 ER YERDINS EAMR000022588F62B1
NY 180A7F4A1D3762B7 ER YERDINS EAMR00002858D1311B
NY 1812FBB51CB591AC ER YERDINS EAMR00003559186E95
NY 1812FBB900011DA3 ER YERDINS EAMR00003559186E95MVS
NY 17E1EA600D19F422 ER YERDUP0 EAMR000003
NY 17E97AAC09FDAE7D ER YERDUP0 EAMR000005
NY 17EA9B520F9B6679 ER YERDUPD EAMR00000557C5BAD0
NY 17F1F8D80FA1F64A ER YERDUPD EAMR000010580383BA
NY 17F68C380122F678 ER YERDUPD EAMR0000175829D7DB
NY 17FC0C1D0EDA6E0C ER YERDUPD EAMR0000185857FA28
NY 1802A9731B21AA4B ER YERDUPD EAMR000022588F76E9
NY 1811E44018AC16D1 ER YERDUPD EAMR000028590F467B
NY 182652A41B0C051E ER YERDUPD EAMR00004859BAAA26
NY 1803185A0432B3A6 ER YERPRI EAMR000022
NY 18111B5904BB0BDA ER YERPRI EAMR000028
NY 18089AD00FDD8734 ER YERPRI EAMR000029
NY 18166C5B0817B4F8 ER YERPRI EAMR000034
NY 181FB5831ABB3E70 ER YERPRI EAMR000035
NY 181A2FFE00649D5A ER YERPRI EAMR000042
NY 181FB21A1FE4E323 ER YERPRI EAMR000045
NY 1826F0730C388176 ER YERPRI EAMR000048
NY 182F98EB053A8CD0 ER YERPRI EAMR000053
NY 1839F52203BA7BC2 ER YERPRI EAMR000061
NY 158A64AE135ACFC6 EV EV0600 19960125S101702A051501AEV0600
NY 15A5E43C12F2EE58 EV EV0600 19960718135628S101702A055841AEV0600
NY 16059A510FD3BAB4 EV EV5080 19980319140048S101702A070940AEV5080
NY 17E198DA0B38723D EV EV7030 EKVS000013
NY 17C78DE50E100676 EV EV7040 EKVS000010
NY 158A64AD02795C50 EV EV7130 19960125S101702A051501AEV7130
NY 17A65CFB093C2166 EV EV8100 EKVS000006
NY 177A892D1F1C7776 EV EV8220 A19R002528
NY 15C4B61C0EE8F8B0 EV YEVSICH 19970130162645S101702A061187AYEVSICH
NY 15DCE40D038545EA EV YEVSICH 19970703125234S101702A064768AYEVSICH
NY 15F632A60069883A EV YEVSICH 19971211133042S101702A068862AYEVSICH
NN 15B9B6B502EF5E20 EW EW7010 19961121165906S101702A058971AEW7010
NN 15BACAC614420C4E EW EW7010 19961128134025S101702A059169AEW7010
NN 15D0C9D1065BD84A EW EW7010 19970417124259S101702A063168AEW7010
NN 15D5300D19A5D517 EW EW7020 19970515123226S101702A063787AEW7020
NN 15D64F5F09BC6D0B EW EW7020 19970522155508S101702A064034AEW7020
NY 17CBEB64122862E6 EX EX0500 EXPN000020
NY 17F45BA502163A41 EX EX5020 EXPN000051
NY 17EC042310EF0DA1 EX EX5020 EXPN000052
NY 1804369115B6DA5A EX EX5020 EXPN000059
NY 17FE689B14661F10 EX EX5020 EXPN000062
NY 17E197B6137F4E9D EX EX5030 EXPN000039
NY 17F1F50D1B2B90D7 EX EX5030 EXPN000051
NY 180785CC091F6A55 EX EX5030 EXPN000059
NY 17E9560C0AF347FA EX EX6010 EXPN000050
NY 17F1F5260A32DBF8 EX EX6010 EXPN000051
NY 180436B1092FE606 EX EX6010 EXPN000059
NY 17FE68321CF6EF76 EX EX6010 EXPN000062
NY 17E9560E0A68FC74 EX EX6020 EXPN000050
NY 180436AA12896C3A EX EX6020 EXPN000059
NY 15B40F211A48DD32 EX EX7010 19961016172831S101702A057202AEX7010
NY 15FA9CC00F901AA0 EX EX7010 19980108153804S101702M000886AEX7010
NY 17C9756E06D8B8BB EX EX8030 EXPN000020
NY 159083F411E8405A EX EX8888 19960304133631S101702Z236837AEX8888
NY 159088F91A7BEC24 EX EX8888 19960304163609S101702Z236837AEX8888
NY 15A9CC1E0CCCFEE8 EX EX8888 19960812102421S101702Z261211AEX8888
NY 17F26D9C017CF557 EX YEX0003 EXPN00005158075739
NY 17EB8CCA019D77C3 EX YEX0003 EXPN00005357CDA468
NY 15A29B9013B916B6 EX YEXERG
NY 1578CA730AC3964E EX YEXERG 19951005S101702A048266AYEXERG
NY 157A826407C68504 EX YEXERG 19951016S101702Z213055AYEXERG
NY 157D319A15207EDE EX YEXERG 19951102S101702A049197AYEXERG
NY 157D584516B499E6 EX YEXERG 19951103S101702Z216005AYEXERG
NY 157DD3E30ABDF378 EX YEXERG 19951106S101702Z216751AYEXERG
NY 157F69BD0AD5EEE0 EX YEXERG 19951116S101702A049464AYEXERG
NY 158F701000527FFA EX YEXERG 19960226170142S101702A052326AYEXERG
NY 158FBCDC199B20AE EX YEXERG 19960228145027S101702A052419AYEXERG
NY 158FBDA41EE2753E EX YEXERG 19960228151903S101702A052419AYEXERG
NY 158FBEAE157623C6 EX YEXERG 19960228155542S101702A052419AYEXERG
NY 158FBF1E0FD2FA18 EX YEXERG 19960228161103S101702A052419AYEXERG
NY 1590D9AD10744B34 EX YEXERG 19960306164420S101702A052579AYEXERG
NY 15921751133DD504 EX YEXERG 19960314141339S101702A052439AYEXERG
NY 15B40F150B5CA384 EX YEXERG 19961016172704S101702A057202AYEXERG
NY 15B664871C972068 EX YEXERG 19961031134918CGS101702A058312AYEXERG
NY 15B6648418AC57A8 EX YEXERG 19961031134918S101702A058312AYEXERG
NY 15CA30E416B57CE6 EX YEXERG 19970306131334CGS101702A061962AYEXERG
NY 15CA30E217120BC4 EX YEXERG 19970306131334S101702A061962AYEXERG
NY 15E3802F06B170EE EX YEXERG 19970814141321CGS101702M000800AYEXERG
NY 15E3801A12F6A18E EX YEXERG 19970814141321S101702M000800AYEXERG
NY 15FA9CA806B826D0 EX YEXERG 19980108153340CGS101702M000886AYEXERG
NY 15FA9CA318EC4E90 EX YEXERG 19980108153340S101702M000886AYEXERG
NY 160E640602611798 EX YEXERG 19980514135917CGS101702A072308AYEXERG
NY 160E64011C58086F EX YEXERG 19980514135917S101702A072308AYEXERG
NY 16173001093E34D9 EX YEXERG 19980709132140CGS101702A073235AYEXERG
NY 16172FFF0DFD3771 EX YEXERG 19980709132140S101702A073235AYEXERG
NY 158F6C62108FBF68 EX YEXERG A
NY 1615952900B52150 FARDX DLLST1
NY 176115AA1BD3BF36 FC FC0010 CRMA003935
NY 181B2C1012D10CA9 FC FC0010 KLOM000062
NY 15B8A6000554B20A FC FC0020 19961114221845S101702A058752AFC0020
NY 15C5CFB9066B8104 FC FC0020 19970206162503S101702A061517AFC0020
NY 15D1440911D11632 FC FC0030 19970420133742S101702Z307085AFC0030
NY 15F272141486C8A8 FC FC0030 19971117163042S101702Z345149AFC0030
NY 15F2741C0775176E FC FC0030 19971117174349S101702Z345149AFC0030
NY 17F131A20AF5B84E FC FC0050 KLOM000050
NY 181CDCC700146260 FC FC0050 KLOM000062
NY 1583CFBF17F11168 FC FC0110 19951214S101702A050488AFC0110
NN 159F6A51192B35CE FC FC0110 19960607085733S101702A054822AFC0110
NY 1583CFBF0E97E704 FC FC0130 19951214S101702A050488AFC0130
NY 159F6A510105E148 FC FC0130 19960607085734S101702A054822AFC0130
NN 1563BF580033685A FC FC0400 19950524170555S101702A044625AFC0400
NN 1583CFB30C9CFCB8 FC YFCM02 19951214S101702A050488AYFCM02
NN 1583CFB315EE2A20 FC YFCM03 19951214S101702A050488AYFCM03
NY 1578CC300ECCEEEC FD FD8100 19951005S101702M000617AFD8100
NY 15883B181CD1D36A FD FD8100 19960111S101702A051006AFD8100
NY 159796A80233C87A FD FD8100 19960418134339S101702M000672AFD8100
NY 15A0652F089DD038 FD FD8100 19960613143639S101702A054192AFD8100
NY 17E307D61170465D FF FF0010 FFOR000021
NY 17EF4D4B0B0DEFBB FF FF0010 FFOR000023
NY 17F6B45D1C3A0010 FF FF0010 FFOR000024
NY 17F663451F4D51C0 FF FF0010 FFOR000027
NY 17E926651F0826E1 FF FF0020 FFOR000022
NY 17F0DBB515459805 FF FF0020 FFOR000023
NY 17F81E9919D8B126 FF FF0020 FFOR000024
NY 17F66346063C6A3C FF FF0020 FFOR000027
NY 17F819AA1A687185 FF FF0020 FFOR000029
NY 17FBE3FF0D052DA2 FF FF0020 FFOR000030
NY 17E9266F01CBE51A FF FF0030 FFOR000022
NY 17F0DBB51923338F FF FF0030 FFOR000023
NY 17F81E9A0CA2047C FF FF0030 FFOR000024
NY 17F663460CE857A7 FF FF0030 FFOR000027
NY 17F819AC00A6E720 FF FF0030 FFOR000029
NY 17FBE40018A7F88D FF FF0030 FFOR000030
NY 17E1993E1111147C FF FF5000 FFOR000021
NY 17EF4D4E12F2AC35 FF FF5000 FFOR000023
NY 17F6B4390BE78275 FF FF5000 FFOR000024
NY 17E926261965C322 FF YFF0004 FFOR00002257B98070
NY 17EF4C9A12F245E0 FF YFF0004 FFOR00002357ED17E7
NY 1794E96011C50DD7 FF YFF0015 FFOR00000554F6CFF5
NY 17F3368814223FE3 FI FI1900 BKUR000041
NY 1802F3FD105F252E FI FI1900 BKUR000052
NY 17E4C446035A844D FI FI2100 BKUR000020
NY 17ECA2F506EC7757 FI FI2100 BKUR000041
NY 1802F4011F2A0A73 FI FI2100 BKUR000052
NY 17F336AD0209156A FI FI5066 BKUR000041
NY 17F336B10B83A2A6 FI FI5067 BKUR000041
NY 17F92F821AFBB2E1 FI FI5067 BKUR000047
NY 1806166C14EA9FCE FI FI5067 BKUR000052
NY 17EAB7B81AD228B0 FI FI5200 BKUR000038
NY 17F14F631AA9FE90 FI FI5200 BKUR000041
NN 1802F45412A8FB77 FI FI5200 BKUR000052
NY 17E5179104CF21CD FI FI5260 BKUR000018
NY 17EE0A3F1210A64B FI FI5260 BKUR000041
NY 1839CCFE0FD5806C FI FI5600 BKUR000096
NY 177D37590992CE08 FI YFI0110 A06M02733354301877
NY 181873E814542A5E FI YFI0110 BKUR0000805946506C
NY 182625F00ECC6499 FI YFI0110 BKUR00009559B932C8MVS
NY 1839CA730834BE2F FI YFI0110 BKUR0000965A5DE7BD
NY 1839CA750924A4B4 FI YFI0110 BKUR0000965A5DE7BDMVS
NY 177D375A073D7364 FI YFI0120 A06M02733354301880
NY 181873EE126A8118 FI YFI0120 BKUR0000805946509A
NY 182625EF1F8D0DA8 FI YFI0120 BKUR00009559B932CCMVS
NY 1839CA7715CBAEBE FI YFI0120 BKUR0000965A5DE7D4
NY 1839CA7906DA62A9 FI YFI0120 BKUR0000965A5DE7D4MVS
NY 17E956DB00BEE5EA FI YFI0140 BKUR00003857BB18F4
NY 15B455830C0F1B84 FI YFI7201 19961018112744S101702Z271383AYFI7201
NY 182EA7E4060BA193 FI YFIWMKG BKUR0001165A008305
NY 16C0C7BD0C245E90 FRNCOL01 FRNA0010
NY 17CF71E11BB5D3A3 FRNCOL01 FRNA0080
NY 16C0C7BF10256446 FRNCOL01 FRNA0090
NY 16C16606141B3A85 FRNCOL01 FRNV0010
NY 165453040F28F7E8 FRNCOL01 FRNV0020
NY 1653DC83116290ED FRNCOL01 FRNV0030
NY 168BCD8815A155A4 FRNCOL01 FRNV0040
NY 168BCD9015D3429D FRNCOL01 FRNV0050
NY 1654EF7A0DFAA909 FRNCOL01 FRNV0060
NY 17D039BC09098D7C FRNCOL01 FRNV0080
NY 16FA6C8E1DD8C165 FRNCOL01 FRNV0090
NY 1634778217891D68 FRNIBMCL FRNA0010
NY 1634778A02168C10 FRNIBMCL FRNA0020
NY 1634779117DEC4A8 FRNIBMCL FRNA0030
NY 163477991459D64C FRNIBMCL FRNA0040
NY 163477A007BAD74C FRNIBMCL FRNA0050
NY 163477A70ABC080C FRNIBMCL FRNA0060
NY 163477AE0FC131E4 FRNIBMCL FRNA0070
NY 161DFEA1095C0F68 FRNIBMCL FRNMHB10
NY 161DFEB0106B99CC FRNIBMCL FRNMHB12
NY 165B26910A397E28 FRNIBMCL FRNMHBP8
NY 1681ADA3093D2D38 FRNIBMCL FRNPLLI1
NY 1661E76C10A34DB0 FRNIBMCL FRNPLLI2
NY 168B8B19007CF24C FRNIBMCL FRNPLLI3
NY 164981C7012F4818 FRNIBMCL FRNPLLI4
NY 16A8743D18D8A8DD FRNIBMCL FRNPLLQ1
NY 165B277F1B16E244 FRNIBMCL FRNPLLQ2
NY 161DFF7710F73994 FRNIBMCL FRNPLLQ3
NY 161DFF821A28E6DC FRNIBMCL FRNPLLQ4
NY 161DFF8C1176ECCC FRNIBMCL FRNPLLUQ
YY 16A874400B85A2B5 FRNIBMCL FRNPLLVS
NY 17E1986108E395AD FZ FZ0820 FZ00000007
NY 17F38B2B066DD61C FZ FZ0820 FZ00000010
NY 17F777470053BEA5 FZ FZ0820 FZ00000013
NY 180430D8090858D5 FZ FZ0820 FZ00000014
NY 17E885C009D477E6 GA GA0110I KAUT00003357B43EE9
NY 152302E11FA2EA7C GE GE2950 19940407190123S101702A033023AGE2950
NN 1538F6AE04CA1C96 GE GE7550 19940825113402S101702A036682AGE7550
NN 15B787FF08E833F0 GE GE7550 19961107194151S101702M000730AGE7550
NN 15BCFD791EC62704 GE GE7550 19961212131947S101702A059641AGE7550
NY 1538D56D1AADC70C GE GE7580 19940824154405S101702A036682AGE7580
NY 1538F6A60C81791C GE GE7580 19940825113350S101702A036682AGE7580
NY 15B7880710170D42 GE GE7580 19961107194153S101702M000730AGE7580
NY 1538D56E08437268 GE GE7590 19940824154407S101702A036682AGE7590
NY 1538F6A51AEDBAB0 GE GE7590 19940825113352S101702A036682AGE7590
NY 15B788010DB26162 GE GE7590 19961107194153S101702M000730AGE7590
NY 1538F6AA1D334BC4 GE GE7620 19940825113355S101702A036682AGE7620
NY 1592211D031E9F82 GE GE7620 19960314200328S101702A052811AGE7620
NY 15B7880B16521910 GE GE7620 19961107194155S101702M000730AGE7620
NN 1559F9E21ED3131E GE GE7690 19950323125534S101702A043120AGE7690
NY 17DECA9C0B0DAFCE GE GE7770 FFOR000021
NY 14CAF9DF119F2210 GE YGE0001
NY 14EAE58B114E8DDC GE YGE0002
NN 1516E60C0D740706 GE YGESP01
NN 152303221BCEECC4 GE YGESP01 19940407191249S101702A033034AYGESP01
NN 15501B270ABBB5A0 GE YGESP01 19950119173828S101702A041399AYGESP01
NN 1516E60211AB8964 GE YGESP02
NN 152303240CE82E84 GE YGESP02 19940407191251S101702A033034AYGESP02
NN 1516E61004901A30 GE YGESP04
NN 1523032605360DA6 GE YGESP04 19940407191258S101702A033034AYGESP04
NN 15501B28137EDB10 GE YGESP04 19950119173814S101702A041399AYGESP04
NY 15252E9609AF6D7C GE YYGE020 19940421143813S101702M000442AYYGE020
NY 15252EAC0ABF8F78 GE YYGE040 19940421143818S101702M000442AYYGE040
NY 17E9513F0C7B8969 GM GM0850 GM00000092
NY 17F4A1E90ADBA591 GM GM0850 GM00000105
NY 180527DD1FBDE8DC GM GM0850 GM00000113
NY 17F6658610966261 GM GM0850 GM00000117
NY 17F6631603B65379 GM GM0850 GM00000118
NY 17F77CBD004C5A65 GM GM0850 GM00000123
NY 17F702E71725BB76 GM GM0850 GM00000129
NY 180A52B0144E30BA GM GM0850 GM00000131
NY 181163C717B744FC GM GM0850 GM00000132
NY 181671C205733A31 GM GM0850 GM00000144
NY 181E4CAB1BE28D6F GM GM0850 GM00000145
NY 18248E230E2D63F4 GM GM0850 GM00000150
NY 182E8584036B0FFF GM GM0850 GM00000153
NY 17E1CC320012E17D GM GM0870 GM00000084
NY 180527DD14068361 GM GM0870 GM00000113
NY 17CDAC53112CC040 GM GM7910 GM00000065
NY 1810508C1D55188E GM GM7910 GM00000132
NY 181B296C15713FAB GM GM7910 GM00000145
NY 18385BDF1A89AEE7 GM GM7910 GM00000160
NY 17B27CD50BBB2390 GM YGMSTEU GM0000003655EEF7FB
NY 18187E8E1AA350C3 GM YGMSTEU GM000001455946A9BF
NY 18287E851C6356CE GM YGMSTEU GM0000015359CCE121MVS
NY 1834227511CD1BCA GM YGMSTEU GM000001605A2E77C8
NY 183422771DD938A4 GM YGMSTEU GM000001605A2E77C8MVS
NY 175E0AA8030F44C6 GROUP00 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP00 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP00 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP00 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP00 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP00 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP00 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP00 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP00 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP00 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP00 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP00 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP00 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP00 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP00 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP01 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP01 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP01 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP01 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP01 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP01 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP01 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP01 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP01 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP01 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP01 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP01 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP01 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP01 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP01 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP02 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP02 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP02 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP02 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP02 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP02 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP02 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP02 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP02 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP02 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP02 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP02 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP02 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP02 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP02 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP03 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP03 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP03 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP03 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP03 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP03 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP03 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP03 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP03 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP03 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP03 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP03 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP03 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP03 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP03 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP04 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP04 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP04 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP04 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP04 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP04 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP04 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP04 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP04 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP04 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP04 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP04 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP04 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP04 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP04 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP05 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP05 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP05 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP05 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP05 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP05 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP05 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP05 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP05 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP05 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP05 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP05 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP05 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP05 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP05 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP06 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP06 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP06 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP06 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP06 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP06 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP06 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP06 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP06 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP06 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP06 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP06 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP06 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP06 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP06 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP07 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP07 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP07 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP07 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP07 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP07 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP07 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP07 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP07 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP07 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP07 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP07 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP07 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP07 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP07 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP08 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP08 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP08 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP08 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP08 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP08 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP08 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP08 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP08 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP08 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP08 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP08 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP08 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP08 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP08 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP09 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP09 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP09 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP09 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP09 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP09 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP09 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP09 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP09 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP09 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP09 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP09 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP09 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP09 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP09 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP10 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP10 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP10 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP10 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP10 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP10 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP10 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP10 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP10 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP10 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP10 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP10 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP10 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP10 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP10 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP11 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP11 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP11 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP11 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP11 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP11 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP11 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP11 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP11 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP11 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP11 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP11 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP11 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP11 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP11 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP12 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP12 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP12 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP12 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP12 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP12 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP12 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP12 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP12 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP12 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP12 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP12 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP12 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP12 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP12 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP13 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP13 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP13 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP13 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP13 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP13 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP13 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP13 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP13 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP13 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP13 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP13 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP13 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP13 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP13 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP14 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP14 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP14 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP14 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP14 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP14 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP14 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP14 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP14 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP14 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP14 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP14 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP14 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP14 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP14 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP15 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP15 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP15 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP15 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP15 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP15 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP15 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP15 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP15 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP15 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP15 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP15 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP15 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP15 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP15 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP16 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP16 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP16 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP16 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP16 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP16 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP16 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP16 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP16 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP16 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP16 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP16 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP16 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP16 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP16 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP17 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP17 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP17 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP17 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP17 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP17 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP17 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP17 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP17 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP17 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP17 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP17 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP17 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP17 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP17 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP18 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP18 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP18 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP18 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP18 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP18 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP18 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP18 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP18 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP18 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP18 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP18 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP18 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP18 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP18 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP19 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP19 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP19 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP19 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP19 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP19 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP19 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP19 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP19 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP19 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP19 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP19 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP19 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP19 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP19 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP20 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP20 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP20 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP20 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP20 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP20 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP20 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP20 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP20 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP20 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP20 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP20 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP20 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP20 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP20 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP21 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP21 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP21 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP21 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP21 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP21 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP21 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP21 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP21 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP21 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP21 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP21 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP21 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP21 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP21 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP22 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP22 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP22 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP22 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP22 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP22 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP22 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP22 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP22 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP22 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP22 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP22 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP22 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP22 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP22 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP23 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP23 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP23 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP23 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP23 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP23 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP23 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP23 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP23 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP23 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP23 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP23 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP23 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP23 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP23 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP24 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP24 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP24 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP24 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP24 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP24 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP24 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP24 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP24 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP24 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP24 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP24 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP24 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP24 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP24 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP25 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP25 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP25 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP25 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP25 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP25 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP25 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP25 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP25 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP25 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP25 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP25 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP25 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP25 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP25 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP26 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP26 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP26 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP26 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP26 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP26 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP26 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP26 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP26 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP26 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP26 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP26 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP26 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP26 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP26 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP27 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP27 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP27 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP27 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP27 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP27 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP27 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP27 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP27 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP27 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP27 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP27 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP27 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP27 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP27 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP28 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP28 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP28 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP28 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP28 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP28 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP28 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP28 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP28 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP28 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP28 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP28 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP28 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP28 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP28 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP29 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP29 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP29 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP29 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP29 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP29 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP29 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP29 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP29 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP29 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP29 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP29 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP29 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP29 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP29 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP30 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP30 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP30 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP30 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP30 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP30 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP30 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP30 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP30 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP30 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP30 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP30 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP30 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP30 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP30 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP31 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP31 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP31 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP31 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP31 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP31 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP31 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP31 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP31 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP31 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP31 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP31 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP31 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP31 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP31 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP32 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP32 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP32 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP32 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP32 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP32 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP32 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP32 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP32 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP32 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP32 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP32 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP32 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP32 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP32 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP33 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP33 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP33 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP33 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP33 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP33 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP33 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP33 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP33 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP33 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP33 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP33 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP33 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP33 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP33 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP34 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP34 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP34 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP34 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP34 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP34 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP34 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP34 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP34 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP34 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP34 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP34 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP34 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP34 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP34 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP35 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP35 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP35 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP35 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP35 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP35 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP35 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP35 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP35 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP35 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP35 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP35 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP35 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP35 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP35 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP36 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP36 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP36 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP36 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP36 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP36 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP36 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP36 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP36 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP36 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP36 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP36 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP36 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP36 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP36 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP37 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP37 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP37 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP37 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP37 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP37 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP37 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP37 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP37 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP37 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP37 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP37 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP37 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP37 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP37 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP38 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP38 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP38 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP38 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP38 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP38 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP38 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP38 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP38 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP38 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP38 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP38 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP38 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP38 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP38 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP39 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP39 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP39 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP39 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP39 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP39 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP39 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP39 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP39 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP39 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP39 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP39 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP39 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP39 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP39 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP40 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP40 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP40 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP40 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP40 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP40 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP40 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP40 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP40 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP40 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP40 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP40 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP40 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP40 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP40 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP41 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP41 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP41 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP41 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP41 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP41 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP41 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP41 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP41 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP41 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP41 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP41 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP41 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP41 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP41 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP42 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP42 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP42 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP42 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP42 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP42 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP42 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP42 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP42 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP42 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP42 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP42 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP42 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP42 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP42 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP43 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP43 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP43 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP43 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP43 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP43 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP43 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP43 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP43 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP43 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP43 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP43 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP43 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP43 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP43 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP44 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP44 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP44 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP44 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP44 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP44 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP44 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP44 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP44 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP44 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP44 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP44 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP44 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP44 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP44 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP45 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP45 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP45 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP45 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP45 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP45 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP45 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP45 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP45 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP45 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP45 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP45 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP45 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP45 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP45 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP46 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP46 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP46 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP46 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP46 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP46 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP46 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP46 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP46 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP46 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP46 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP46 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP46 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP46 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP46 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP47 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP47 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP47 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP47 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP47 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP47 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP47 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP47 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP47 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP47 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP47 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP47 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP47 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP47 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP47 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP48 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP48 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP48 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP48 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP48 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP48 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP48 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP48 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP48 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP48 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP48 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP48 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP48 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP48 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP48 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP49 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP49 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP49 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP49 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP49 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP49 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP49 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP49 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP49 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP49 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP49 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP49 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP49 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP49 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP49 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP50 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP50 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP50 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP50 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP50 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP50 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP50 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP50 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP50 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP50 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP50 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP50 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP50 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP50 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP50 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP51 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP51 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP51 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP51 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP51 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP51 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP51 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP51 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP51 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP51 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP51 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP51 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP51 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP51 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP51 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP52 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP52 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP52 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP52 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP52 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP52 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP52 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP52 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP52 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP52 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP52 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP52 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP52 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP52 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP52 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP53 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP53 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP53 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP53 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP53 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP53 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP53 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP53 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP53 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP53 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP53 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP53 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP53 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP53 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP53 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP54 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP54 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP54 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP54 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP54 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP54 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP54 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP54 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP54 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP54 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP54 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP54 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP54 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP54 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP54 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP55 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP55 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP55 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP55 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP55 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP55 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP55 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP55 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP55 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP55 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP55 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP55 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP55 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP55 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP55 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP56 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP56 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP56 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP56 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP56 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP56 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP56 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP56 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP56 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP56 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP56 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP56 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP56 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP56 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP56 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP57 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP57 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP57 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP57 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP57 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP57 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP57 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP57 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP57 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP57 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP57 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP57 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP57 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP57 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP57 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP58 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP58 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP58 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP58 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP58 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP58 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP58 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP58 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP58 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP58 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP58 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP58 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP58 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP58 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP58 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP59 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP59 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP59 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP59 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP59 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP59 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP59 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP59 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP59 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP59 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP59 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP59 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP59 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP59 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP59 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP60 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP60 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP60 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP60 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP60 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP60 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP60 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP60 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP60 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP60 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP60 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP60 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP60 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP60 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP60 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP61 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP61 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP61 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP61 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP61 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP61 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP61 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP61 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP61 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP61 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP61 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP61 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP61 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP61 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP61 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP62 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP62 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP62 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP62 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP62 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP62 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP62 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP62 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP62 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP62 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP62 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP62 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP62 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP62 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP62 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP63 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP63 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP63 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP63 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP63 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP63 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP63 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP63 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP63 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP63 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP63 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP63 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP63 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP63 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP63 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP64 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP64 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP64 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP64 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP64 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP64 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP64 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP64 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP64 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP64 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP64 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP64 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP64 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP64 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP64 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP65 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP65 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP65 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP65 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP65 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP65 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP65 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP65 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP65 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP65 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP65 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP65 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP65 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP65 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP65 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP66 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP66 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP66 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP66 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP66 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP66 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP66 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP66 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP66 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP66 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP66 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP66 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP66 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP66 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP66 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP67 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP67 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP67 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP67 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP67 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP67 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP67 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP67 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP67 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP67 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP67 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP67 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP67 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP67 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP67 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP68 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP68 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP68 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP68 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP68 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP68 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP68 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP68 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP68 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP68 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP68 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP68 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP68 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP68 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP68 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP69 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP69 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP69 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP69 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP69 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP69 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP69 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP69 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP69 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP69 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP69 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP69 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP69 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP69 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP69 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP70 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP70 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP70 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP70 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP70 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP70 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP70 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP70 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP70 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP70 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP70 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP70 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP70 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP70 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP70 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP71 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP71 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP71 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP71 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP71 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP71 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP71 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP71 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP71 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP71 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP71 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP71 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP71 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP71 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP71 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP72 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP72 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP72 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP72 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP72 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP72 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP72 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP72 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP72 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP72 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP72 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP72 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP72 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP72 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP72 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP73 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP73 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP73 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP73 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP73 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP73 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP73 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP73 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP73 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP73 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP73 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP73 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP73 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP73 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP73 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP74 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP74 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP74 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP74 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP74 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP74 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP74 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP74 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP74 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP74 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP74 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP74 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP74 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP74 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP74 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP75 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP75 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP75 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP75 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP75 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP75 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP75 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP75 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP75 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP75 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP75 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP75 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP75 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP75 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP75 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP76 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP76 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP76 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP76 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP76 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP76 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP76 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP76 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP76 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP76 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP76 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP76 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP76 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP76 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP76 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP77 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP77 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP77 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP77 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP77 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP77 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP77 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP77 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP77 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP77 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP77 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP77 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP77 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP77 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP77 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP78 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP78 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP78 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP78 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP78 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP78 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP78 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP78 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP78 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP78 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP78 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP78 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP78 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP78 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP78 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP79 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP79 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP79 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP79 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP79 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP79 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP79 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP79 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP79 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP79 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP79 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP79 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP79 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP79 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP79 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP80 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP80 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP80 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP80 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP80 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP80 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP80 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP80 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP80 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP80 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP80 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP80 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP80 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP80 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP80 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP81 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP81 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP81 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP81 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP81 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP81 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP81 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP81 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP81 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP81 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP81 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP81 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP81 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP81 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP81 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP82 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP82 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP82 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP82 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP82 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP82 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP82 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP82 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP82 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP82 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP82 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP82 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP82 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP82 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP82 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP83 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP83 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP83 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP83 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP83 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP83 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP83 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP83 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP83 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP83 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP83 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP83 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP83 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP83 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP83 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP84 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP84 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP84 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP84 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP84 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP84 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP84 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP84 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP84 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP84 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP84 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP84 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP84 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP84 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP84 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP85 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP85 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP85 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP85 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP85 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP85 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP85 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP85 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP85 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP85 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP85 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP85 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP85 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP85 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP85 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP86 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP86 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP86 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP86 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP86 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP86 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP86 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP86 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP86 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP86 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP86 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP86 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP86 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP86 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP86 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP87 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP87 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP87 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP87 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP87 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP87 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP87 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP87 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP87 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP87 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP87 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP87 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP87 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP87 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP87 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP88 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP88 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP88 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP88 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP88 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP88 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP88 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP88 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP88 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP88 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP88 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP88 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP88 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP88 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP88 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP89 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP89 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP89 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP89 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP89 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP89 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP89 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP89 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP89 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP89 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP89 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP89 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP89 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP89 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP89 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP90 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP90 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP90 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP90 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP90 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP90 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP90 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP90 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP90 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP90 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP90 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP90 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP90 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP90 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP90 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP91 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP91 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP91 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP91 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP91 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP91 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP91 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP91 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP91 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP91 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP91 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP91 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP91 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP91 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP91 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP92 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP92 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP92 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP92 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP92 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP92 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP92 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP92 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP92 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP92 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP92 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP92 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP92 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP92 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP92 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP93 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP93 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP93 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP93 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP93 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP93 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP93 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP93 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP93 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP93 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP93 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP93 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP93 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP93 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP93 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP94 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP94 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP94 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP94 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP94 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP94 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP94 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP94 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP94 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP94 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP94 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP94 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP94 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP94 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP94 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP95 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP95 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP95 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP95 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP95 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP95 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP95 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP95 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP95 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP95 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP95 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP95 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP95 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP95 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP95 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP96 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP96 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP96 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP96 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP96 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP96 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP96 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP96 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP96 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP96 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP96 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP96 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP96 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP96 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP96 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP97 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP97 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP97 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP97 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP97 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP97 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP97 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP97 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP97 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP97 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP97 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP97 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP97 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP97 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP97 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP98 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP98 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP98 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP98 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP98 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP98 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP98 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP98 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP98 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP98 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP98 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP98 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP98 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP98 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP98 CBRIDBS UW95199HDZ11G0
NY 175E0AA8030F44C6 GROUP99 CBRHDBCV 051332294392039080
NY 16D27F7E1189E49D GROUP99 CBRHDBCV 294249629382893950
NY 16862E77028FDC09 GROUP99 CBRHDBS 042982409377892471
NY 1685E46A138C8297 GROUP99 CBRHDBS 327975575377873514
NY 16D27F7F15F04B11 GROUP99 CBRHDBS 368069393382893951
NY 16DB32A617D686F2 GROUP99 CBRHDBS 399935218383464102
NY 175E0AA71A52A73B GROUP99 CBRHDBS 441624379392039079
NY 16D27F7F0709202D GROUP99 CBRHDBSD 118038573382893951
NY 175E0AA5130A4C35 GROUP99 CBRHDBSD 319441973392039077
NY 175E0AC50DE9D776 GROUP99 CBRIDBS 2004-03-19-05.20.09.717597
NY 172D6C3000FA1F04 GROUP99 CBRIDBS UA03047HDZ11G0
NY 16875152183ED528 GROUP99 CBRIDBS UW71235HDZ11E0
NY 1687519A17B3DC28 GROUP99 CBRIDBS UW71236HDZ11F0
NY 16DB329B1E00E1AC GROUP99 CBRIDBS UW83215HDZ11F0
NY 170E96631BD73BD0 GROUP99 CBRIDBS UW95199HDZ11G0
NY 17F01B040CE0AEDB HB HB5000 ASIA000070
NY 17EFE6E5106A26C2 HB YHBK011 ASIA00007957F22639
NY 1825D76E0289AEA0 HB YHBK011 ASIA00013259B6A096
NY 1839CB7D1D1371DD HBDTEST YVVZZ04 VDPS0001185A5DF2D6
NY 1643560107BBEEAB HP1 A6MCHA HPSVP2A6MCHA
NY 1648D83908C76B3B HP1 AA00WM HPSVP2AA00WM
NY 168283791329893C HP1 AA6VV6 HPSVP2AA6VV6
NY 16A0893F02F1E5A6 HP1 AAAERK HPSVP2AAAERK
NY 1724E8341F15EFAD HP1 AAFYWR HPSVP2AAFYWR
NY 168288FB194953AF HP1 AAFZWR HPSVP2AAFZWR
NY 16D648980E241364 HP1 AAIORK HPSVP2AAIORK
NY 16592B6D04B1D9BD HP1 AANQUP HPSVP2AANQUP
NY 16A0888000AD2563 HP1 AAOAO4 HPSVP2AAOAO4
NY 16D648AB1720988C HP1 AATSRK HPSVP2AATSRK
NY 16AEAF1401E68D5E HP1 AATVRK HPSVP2AATVRK
NY 16C01B780D2C0EB5 HP1 AAZGRK HPSVP2AAZGRK
NY 16D648981104D278 HP1 AB0ORK HPSVP2AB0ORK
NY 173DDDB317B31679 HP1 AB70RG HPSVP2AB70RG
NY 173DDDB019BD953E HP1 AB79RG HPSVP2AB79RG
NY 170702DB1DB89478 HP1 AB7STL HPSVP2AB7STL
NY 173DDDB91A9CD7F2 HP1 AB8CRG HPSVP2AB8CRG
NY 1722313B1808FBA0 HP1 ABAIRK HPSVP2ABAIRK
NY 161EC0CD1667DAB2 HP1 ABARRG HPSVP1ABARRG
NY 168292EF08256606 HP1 ABC8QY HPSVP2ABC8QY
NY 16A087961247E55E HP1 ABIRQ6 HPSVP2ABIRQ6
NY 168288EF0FC755AD HP1 ABMXVN HPSVP2ABMXVN
NY 16C87AFB038D1336 HP1 ABTVRI HPSVP1ABTVRI
NY 153C6C3E10C0C460 HP1 ABWPTI
NY 173DDDB20C77866D HP1 ABWURG HPSVP2ABWURG
NY 168273B60DA9ACC3 HP1 ABWZQ2 HPSVP2ABWZQ2
NN 16829513017A1AAB HP1 ABZJLS HPSVP2ABZJLS
NY 16AEAEF404FC7943 HP1 AC7VRK HPSVP2AC7VRK
NY 16A0891F1534545B HP1 AC7ZRK HPSVP2AC7ZRK
NY 16D649251B2CE67E HP1 ACA0RK HPSVP2ACA0RK
NY 1540AA0803E417E2 HP1 ACDBQ1
NY 159007A30CC385D4 HP1 ACDBQ1 HPSVP1ACDBQ1
NY 168291D11CEE49B7 HP1 ACEQL4 HPSVP2ACEQL4
NY 153F980E0C205CC8 HP1 ACF3Q1
NY 1728A0881C6EEFD4 HP1 ACF3Q1 HPSVP2ACF3Q1
NY 1540AE5D19EAEC20 HP1 ACUHQ1
NY 15A01A3F0D38625E HP1 ACZRQ2 HPSVP2ACZRQ2
NY 17269E501B3B180E HP1 AD5WV6 HPSVP2AD5WV6
NY 153C6C8F1AF3D322 HP1 ADDZS3
NY 1724E8F0081871FA HP1 ADJQR5 HPSVP2ADJQR5
NY 154089200AE6C024 HP1 ADWVQZ
NY 165933970BE0AF71 HP1 ADWVQZ HPSVP2ADWVQZ
NY 16A0895A021FE1EB HP1 AE5MQ6 HPSVP2AE5MQ6
NY 153C6BBF1C19759C HP1 AE85S3
NY 153C6BD70100FAB4 HP1 AE86S3
NY 16D64923168575A9 HP1 AEGIQ6 HPSVP2AEGIQ6
NY 16D649260AA8D00A HP1 AEW7Q6 HPSVP2AEW7Q6
NY 15A01D3C072BE22A HP1 AF3TQ1 HPSVP2AF3TQ1
NY 16D648AB08594280 HP1 AF8URI HPSVP2AF8URI
NY 16F2B49608FDF6B9 HP1 AFJJRK HPSVP2AFJJRK
NY 1722312103DAC39B HP1 AFJKRK HPSVP2AFJKRK
NY 16F2B49904BDA037 HP1 AFOSRK HPSVP2AFOSRK
NY 16F2B49A0F1869E5 HP1 AFOWRK HPSVP2AFOWRK
NY 16A0879F1DF0F3B7 HP1 AFW4RB HPSVP2AFW4RB
NN 168291CA178D923C HP1 AG23LZ HPSVP2AG23LZ
NY 162E25F006C19C79 HP1 AG5JS8 HPSVP2AG5JS8
NY 16D6492D13A2E460 HP1 AGA8RI HPSVP2AGA8RI
NY 16A0896002A9F1EC HP1 AGDYRI HPSVP2AGDYRI
NY 17269D2610342D51 HP1 AGOWVT HPSVP2AGOWVT
NY 16A0895D0A2DE657 HP1 AGRZRI HPSVP2AGRZRI
NY 16A0885B012A7B54 HP1 AGW8RB HPSVP2AGW8RB
NY 16A0888008572BBF HP1 AGX3RB HPSVP2AGX3RB
NY 16A08860120192B3 HP1 AGXJRB HPSVP2AGXJRB
NY 16A0886C17366136 HP1 AGXMRB HPSVP2AGXMRB
NY 168291F11BA74C66 HP1 AGXNLE HPSVP2AGXNLE
NY 16D64928099F4035 HP1 AHGPRI HPSVP2AHGPRI
NY 16D6492B0450987F HP1 AHHSRI HPSVP2AHHSRI
NY 162A384019C60FBD HP1 AHJFRK HPSVP2AHJFRK
NY 168288F315CBB967 HP1 AJ0EWS HPSVP2AJ0EWS
NY 16C529D90092BCE3 HP1 AJV4RI HPSVP2AJV4RI
NY 16C13CF90B476069 HP1 AJXLRI HPSVP1AJXLRI
NY 16C0BB85000D078F HP1 AKEGRI HPSVP2AKEGRI
NY 17350B9B0D3596B1 HP1 AL0NRI HPSVP2AL0NRI
NY 16AEAE7712077B01 HP1 AL57RI HPSVP2AL57RI
NY 17350BAC016B0E14 HP1 ALS0RI HPSVP2ALS0RI
NY 17350B8909FC6030 HP1 ALSIRI HPSVP2ALSIRI
NY 17350B8B08C196B0 HP1 ALSZRI HPSVP2ALSZRI
NY 17350B961EC5378C HP1 ALVFRI HPSVP2ALVFRI
NY 16DA0F100494BECD HP1 ALX4RI HPSVP2ALX4RI
NY 17350B9E10560A21 HP1 ALYHRI HPSVP2ALYHRI
NY 16A087B006F79F21 HP1 AN6ERI HPSVP2AN6ERI
NY 164ED8331D29423C HP1 AN8JRI HPSVP2AN8JRI
NY 164F80B51E01630F HP1 AN8MRI HPSVP1AN8MRI
NY 17350B8D12C7D4C0 HP1 AN96RI HPSVP2AN96RI
NY 17350B9F06BA5ED8 HP1 AN97RI HPSVP2AN97RI
NY 16A088431BFEC51F HP1 ANEVRI HPSVP2ANEVRI
NY 16D648BD1AEDBD4C HP1 AO2QRK HPSVP2AO2QRK
NY 175DC04D11C2C359 HP1 AOAVRI HPSVP2AOAVRI
NY 17350BA20FE698F0 HP1 AOBARI HPSVP2AOBARI
NY 175DC0501312282C HP1 AOBPRI HPSVP2AOBPRI
NY 175DC054012899AA HP1 AOBWRI HPSVP2AOBWRI
NY 17350B900F908116 HP1 AOCLRI HPSVP2AOCLRI
NY 16C01B7400693E8D HP1 AOV6RK HPSVP2AOV6RK
NY 169C834E0C52F933 HP1 AOVURK HPSVP1AOVURK
NY 1750434B1D6739F5 HP1 AOX7RK HPSVP2AOX7RK
NY 1750434A08D5F241 HP1 AOXTRK HPSVP2AOXTRK
NY 16E34F3B1F70DB2A HP1 AOY2RK HPSVP2AOY2RK
NY 17504349151661C8 HP1 AOYQRK HPSVP2AOYQRK
NY 16AEAEF714CAB365 HP1 AOYURK HPSVP2AOYURK
NY 1724E6F219E4684F HP1 AUPDVU HPSVP2AUPDVU
NY 15AF54470B34C684 HP1 DFWYAA HPSVP2DFWYAA
NY 15B89DFF094D3B06 HP1 DOSBN5 HPSVP2DOSBN5
NY 173DDD8A0C9BCABE HP1 RWBB017 HPSVP2RWBB017
NN 15407F9F0CCB1902 HP1 RWBB022
NN 15407FB31729AD6A HP1 RWBB023
NY 17350B88031351AD HP1 RWBB110 HPSVP2RWBB110
NY 152FB5701C6932B0 HP1 RWBC011
NY 152FB5EE0BEA1C56 HP1 RWBC024
NY 1537C0B706E9DE34 HP1 RWBC030
NY 152FB61B195716C4 HP1 RWBC032
NY 151F7BE70A8C1BFC HP1 RWBC037
NY 15407DDD08692D98 HP1 RWBC040
NY 152DFCA20786D508 HP1 RWBC041
NY 152DFCC804CEFB6A HP1 RWBC048
NY 152DFCD404C000FC HP1 RWBC049
NY 163173C304B2997F HP1 RWBE056 HPSVP2RWBE056
NY 16F2B49809BBAC70 HP1 RWBH004 HPSVP2RWBH004
NY 163173C5108C809D HP1 RWBJ210 HPSVP2RWBJ210
NY 16A0879F0D4FD138 HP1 RWBK023 HPSVP2RWBK023
NY 16A087B710D05AAD HP1 RWBK029 HPSVP2RWBK029
NY 173DDD8A038368BE HP1 RWBM001 HPSVP2RWBM001
NY 16A202BD0C772F97 HP1 RWBM003 HPSVP1RWBM003
NY 16A088F81F17C61B HP1 RWBM004 HPSVP2RWBM004
NY 1537C02E0C9F972C HP1 RWBM007
NY 173DDD930B385499 HP1 RWBM009 HPSVP2RWBM009
NY 173DDD951C3A3244 HP1 RWBM010 HPSVP2RWBM010
NY 173DDDA508751A89 HP1 RWBM011 HPSVP2RWBM011
NY 173DDD9C06D0771E HP1 RWBM012 HPSVP2RWBM012
NY 16A0887B0AEE9978 HP1 RWBM013 HPSVP2RWBM013
NY 16987DFC0C16911D HP1 RWBP004 HPSVP2RWBP004
NY 152E1FFC0B491014 HP1 RWBP007
NY 164ED82003C8C157 HP1 RWBP007 HPSVP2RWBP007
NY 164ED818152D5362 HP1 RWBP008 HPSVP2RWBP008
NY 161EC06A110248A7 HP1 RWBP015 HPSVP1RWBP015
NY 1537BF930E473BB4 HP1 RWBP021
NY 164ED8230E431387 HP1 RWBP021 HPSVP2RWBP021
NY 152FAB140165D1D2 HP1 RWBP022
NY 164ED80A04234325 HP1 RWBP022 HPSVP2RWBP022
NY 1540631904C31DFA HP1 RWBP023
NY 16AEADE010C7CE20 HP1 RWBP023 HPSVP2RWBP023
NY 162AAC960C4D569D HP1 RWBP024 HPSVP1RWBP024
NY 152FAB3B114D87BC HP1 RWBP026
NY 162A3BC804FB0F87 HP1 RWBP026 HPSVP2RWBP026
NY 152FAB4A02823CEA HP1 RWBP029
NN 1538A00914D55CE4 HP1 RWBP030
NY 16D648661D340171 HP1 RWBP030 HPSVP2RWBP030
NN 1538A01413F6782A HP1 RWBP032
NY 16D648E410D27E96 HP1 RWBP032 HPSVP2RWBP032
NY 152FAB5719A2830A HP1 RWBP034
NY 152FAB2E0B26D1FA HP1 RWBP036
NY 164ED837080F939E HP1 RWBR002 HPSVP2RWBR002
NY 164D1F0A02721DA9 HP1 RWBR003 HPSVP1RWBR003
NY 164ED83F139FBA87 HP1 RWBR004 HPSVP2RWBR004
NY 16D648AB14A641A9 HP1 RWBR009 HPSVP2RWBR009
NY 155FD924181CCFA6 HP1 RWBR030 HPSVP1RWBR030
NY 1607FF4D0F035EE4 HP1 RWBR032 HPSVP1RWBR032
NN 1537C09E09539F82 HP1 RWBR040
NY 16AEAEB403F397E3 HP1 RWBR040 HPSVP2RWBR040
NY 152FB8CA00AF4C9A HP1 RWBR043
NY 16D648E40728730A HP1 RWBR200 HPSVP2RWBR200
NY 161EBEAB0439A734 HP1 RWBR201 HPSVP1RWBR201
NY 161EBEFE06B76ED7 HP1 RWBR202 HPSVP1RWBR202
NY 161EBEF41791E0E4 HP1 RWBR207 HPSVP1RWBR207
NY 173DDD96005235BD HP1 RWBT008 HPSVP2RWBT008
NY 16C13D211976CE77 HP1 RWBT031 HPSVP1RWBT031
NY 16A087F1038A3ACA HP1 RWBT032 HPSVP2RWBT032
NN 1537BFBB159E5AE6 HP1 RWBT033
NY 16D648E4106C50F4 HP1 RWBW015 HPSVP2RWBW015
NY 16AEAED002300931 HP1 RWBW042 HPSVP2RWBW042
NY 16D64911136FF3C9 HP1 RWBW048 HPSVP2RWBW048
NY 16D6488A00D271B5 HP1 RWBW050 HPSVP2RWBW050
NY 16A087FC11BF8EF4 HP1 RWBW058 HPSVP2RWBW058
NY 173DDDA104147E4E HP1 RWBW064 HPSVP2RWBW064
NY 173DE13F0335E2A1 HP1 RWBW072 HPSVP1RWBW072
NY 16AEADF00A3E6C71 HP1 RWBW075 HPSVP2RWBW075
NY 16AEAEC81FF658CF HP1 RWBZ008 HPSVP2RWBZ008
NY 16AEAEA90756D6F4 HP1 RWBZ010 HPSVP2RWBZ010
NY 16D6490E0810810C HP1 RWBZ050 HPSVP2RWBZ050
NY 1722312F06956A95 HP1 ZADOKRL HPSVP2ZADOKRL
NY 173D875118DF66EF HP1 ZAENORL HPSVP1ZAENORL
NY 173D873C04888972 HP1 ZAEOJRL HPSVP1ZAEOJRL
NY 173D874A0C20E015 HP1 ZAEVORL HPSVP1ZAEVORL
NY 173D874304B82484 HP1 ZAEWBRL HPSVP1ZAEWBRL
NY 16C4A94113F9BDB0 HP1 ZAJOIVS HPSVP2ZAJOIVS
NY 16C4A93616AD8D13 HP1 ZAJVAVS HPSVP2ZAJVAVS
NY 16C4A9C1005B500E HP1 ZANJIVS HPSVP2ZANJIVS
NY 175DC04E0A53E249 HP1 ZBZOPRI HPSVP2ZBZOPRI
NY 175DC04F0D5988A9 HP1 ZBZOURI HPSVP2ZBZOURI
NY 16C0BB891A03FEAD HP1 ZBZQQRI HPSVP2ZBZQQRI
NY 175DC0541A4C77C1 HP1 ZBZVFRI HPSVP2ZBZVFRI
NY 175DC055168A8E12 HP1 ZBZXDRI HPSVP2ZBZXDRI
NY 175DC0560D777BDC HP1 ZBZXERI HPSVP2ZBZXERI
NY 16B51EFA101D37FC HP1 ZDEWERI HPSVP2ZDEWERI
NY 16D64910141577F2 HP1 ZDEWPRI HPSVP2ZDEWPRI
NY 16E34F410D2DADF5 HP1 ZDFXPRK HPSVP2ZDFXPRK
NY 16CB6F5F03D8543C HP1 ZDIYURI HPSVP2ZDIYURI
NY 16E34F381848481A HP1 ZUZQERK HPSVP2ZUZQERK
NY 17273EA20593B4FD HP1 ZVIYWRI HPSVP1ZVIYWRI
NY 175DC0590BA2D770 HP1 ZVKUYRI HPSVP2ZVKUYRI
NY 175DC05909B83990 HP1 ZVKUZRI HPSVP2ZVKUZRI
NY 1643560107BBEEAB HP3 A6MCHA HPSVP2A6MCHA
NY 1648D83908C76B3B HP3 AA00WM HPSVP2AA00WM
NY 153C6C1A1C3B58FE HP3 AA40TI
NY 153C6BEA0A6228AE HP3 AA4XTI
NY 153C6C26027ABF90 HP3 AA4ZTI
NY 168283791329893C HP3 AA6VV6 HPSVP2AA6VV6
NY 16A0893F02F1E5A6 HP3 AAAERK HPSVP2AAAERK
NY 168288FB194953AF HP3 AAFZWR HPSVP2AAFZWR
NY 16D648980E241364 HP3 AAIORK HPSVP2AAIORK
NY 16592B6D04B1D9BD HP3 AANQUP HPSVP2AANQUP
NY 16A0888000AD2563 HP3 AAOAO4 HPSVP2AAOAO4
NY 16D648AB1720988C HP3 AATSRK HPSVP2AATSRK
NY 16AEAF1401E68D5E HP3 AATVRK HPSVP2AATVRK
NY 16D648981104D278 HP3 AB0ORK HPSVP2AB0ORK
NY 173DDDB317B31679 HP3 AB70RG HPSVP2AB70RG
NY 173DDDB019BD953E HP3 AB79RG HPSVP2AB79RG
NY 170702DB1DB89478 HP3 AB7STL HPSVP2AB7STL
NY 173DDDB91A9CD7F2 HP3 AB8CRG HPSVP2AB8CRG
NY 1722313B1808FBA0 HP3 ABAIRK HPSVP2ABAIRK
NY 161EC0CD1667DAB2 HP3 ABARRG HPSVP1ABARRG
NY 168292EF08256606 HP3 ABC8QY HPSVP2ABC8QY
NY 16A087961247E55E HP3 ABIRQ6 HPSVP2ABIRQ6
NY 153C6BFD0945DAE6 HP3 ABISTI
NY 168288EF0FC755AD HP3 ABMXVN HPSVP2ABMXVN
NY 153C6C3E10C0C460 HP3 ABWPTI
NY 173DDDB20C77866D HP3 ABWURG HPSVP2ABWURG
NY 168273B60DA9ACC3 HP3 ABWZQ2 HPSVP2ABWZQ2
NY 16829513017A1AAB HP3 ABZJLS HPSVP2ABZJLS
NY 16AEAEF404FC7943 HP3 AC7VRK HPSVP2AC7VRK
NY 16A0891F1534545B HP3 AC7ZRK HPSVP2AC7ZRK
NY 16D649251B2CE67E HP3 ACA0RK HPSVP2ACA0RK
NY 1540AA0803E417E2 HP3 ACDBQ1
NY 159007A30CC385D4 HP3 ACDBQ1 HPSVP1ACDBQ1
NY 168291D11CEE49B7 HP3 ACEQL4 HPSVP2ACEQL4
NY 153F980E0C205CC8 HP3 ACF3Q1
NY 1728A0881C6EEFD4 HP3 ACF3Q1 HPSVP2ACF3Q1
NY 151F3A881767B85C HP3 ACLQMC
NY 1540AE5D19EAEC20 HP3 ACUHQ1
NY 15A01A3F0D38625E HP3 ACZRQ2 HPSVP2ACZRQ2
NY 153C6C8F1AF3D322 HP3 ADDZS3
NY 153C6C9D092DCB32 HP3 ADEBS3
NY 153C6CAA08F9C4A0 HP3 ADECS3
NY 154089200AE6C024 HP3 ADWVQZ
NY 165933970BE0AF71 HP3 ADWVQZ HPSVP2ADWVQZ
NY 16A0895A021FE1EB HP3 AE5MQ6 HPSVP2AE5MQ6
NY 153C6B9F12D1BB4C HP3 AE84S3
NY 153C6BBF1C19759C HP3 AE85S3
NY 153C6BD70100FAB4 HP3 AE86S3
NY 153446601A7F2242 HP3 AE8GS3
NY 15344679154EDF92 HP3 AE8HS3
NY 1534468711EDB08E HP3 AE8IS3
NY 153C6CBF107E7C66 HP3 AE9SS3
NY 153C6CC91181313E HP3 AE9TS3
NY 153C6CD318660C1A HP3 AE9US3
NY 16D64923168575A9 HP3 AEGIQ6 HPSVP2AEGIQ6
NY 16D649260AA8D00A HP3 AEW7Q6 HPSVP2AEW7Q6
NY 15A01D3C072BE22A HP3 AF3TQ1 HPSVP2AF3TQ1
NY 16D648AB08594280 HP3 AF8URI HPSVP2AF8URI
NY 16F2B49608FDF6B9 HP3 AFJJRK HPSVP2AFJJRK
NY 1722312103DAC39B HP3 AFJKRK HPSVP2AFJKRK
NY 16F2B49904BDA037 HP3 AFOSRK HPSVP2AFOSRK
NY 16F2B49A0F1869E5 HP3 AFOWRK HPSVP2AFOWRK
NY 16A0879F1DF0F3B7 HP3 AFW4RB HPSVP2AFW4RB
NY 168291CA178D923C HP3 AG23LZ HPSVP2AG23LZ
NY 162E25F006C19C79 HP3 AG5JS8 HPSVP2AG5JS8
NY 16D6492D13A2E460 HP3 AGA8RI HPSVP2AGA8RI
NY 16A0896002A9F1EC HP3 AGDYRI HPSVP2AGDYRI
NY 16A0895D0A2DE657 HP3 AGRZRI HPSVP2AGRZRI
NY 16A0885B012A7B54 HP3 AGW8RB HPSVP2AGW8RB
NY 16A0888008572BBF HP3 AGX3RB HPSVP2AGX3RB
NY 16A08860120192B3 HP3 AGXJRB HPSVP2AGXJRB
NY 16A0886C17366136 HP3 AGXMRB HPSVP2AGXMRB
NY 168291F11BA74C66 HP3 AGXNLE HPSVP2AGXNLE
NY 16D64928099F4035 HP3 AHGPRI HPSVP2AHGPRI
NY 16D6492B0450987F HP3 AHHSRI HPSVP2AHHSRI
NY 162A384019C60FBD HP3 AHJFRK HPSVP2AHJFRK
NY 168288F315CBB967 HP3 AJ0EWS HPSVP2AJ0EWS
NY 153F160509A1F5E8 HP3 AJBTSH
NY 17350B9B0D3596B1 HP3 AL0NRI HPSVP2AL0NRI
NY 16AEAE7712077B01 HP3 AL57RI HPSVP2AL57RI
NY 17350BAC016B0E14 HP3 ALS0RI HPSVP2ALS0RI
NY 17350B8909FC6030 HP3 ALSIRI HPSVP2ALSIRI
NY 17350B8B08C196B0 HP3 ALSZRI HPSVP2ALSZRI
NY 17350B961EC5378C HP3 ALVFRI HPSVP2ALVFRI
NY 16DA0F100494BECD HP3 ALX4RI HPSVP2ALX4RI
NY 17350B9E10560A21 HP3 ALYHRI HPSVP2ALYHRI
NY 16A087B006F79F21 HP3 AN6ERI HPSVP2AN6ERI
NY 164ED8331D29423C HP3 AN8JRI HPSVP2AN8JRI
NY 164F80B51E01630F HP3 AN8MRI HPSVP1AN8MRI
NY 17350B8D12C7D4C0 HP3 AN96RI HPSVP2AN96RI
NY 17350B9F06BA5ED8 HP3 AN97RI HPSVP2AN97RI
NY 16A088431BFEC51F HP3 ANEVRI HPSVP2ANEVRI
NY 16D648BD1AEDBD4C HP3 AO2QRK HPSVP2AO2QRK
NY 175DC04D11C2C359 HP3 AOAVRI HPSVP2AOAVRI
NY 17350BA20FE698F0 HP3 AOBARI HPSVP2AOBARI
NY 175DC0501312282C HP3 AOBPRI HPSVP2AOBPRI
NY 175DC054012899AA HP3 AOBWRI HPSVP2AOBWRI
NY 17350B900F908116 HP3 AOCLRI HPSVP2AOCLRI
NY 16C01B7400693E8D HP3 AOV6RK HPSVP2AOV6RK
NY 1750434B1D6739F5 HP3 AOX7RK HPSVP2AOX7RK
NY 1750434A08D5F241 HP3 AOXTRK HPSVP2AOXTRK
NY 16E34F3B1F70DB2A HP3 AOY2RK HPSVP2AOY2RK
NY 17504349151661C8 HP3 AOYQRK HPSVP2AOYQRK
NY 16AEAEF714CAB365 HP3 AOYURK HPSVP2AOYURK
NY 15AF54470B34C684 HP3 DFWYAA HPSVP2DFWYAA
NY 15B89DFF094D3B06 HP3 DOSBN5 HPSVP2DOSBN5
NN 1540D52D072A8A1C HP3 RWBB004
NN 1540D5B902BD3748 HP3 RWBB015
NY 173DDD8A0C9BCABE HP3 RWBB017 HPSVP2RWBB017
NN 1540D5C8167A26DE HP3 RWBB019
NN 1540D5D804C10A84 HP3 RWBB020
NN 15407F9F0CCB1902 HP3 RWBB022
NN 15407FB31729AD6A HP3 RWBB023
NY 17350B88031351AD HP3 RWBB110 HPSVP2RWBB110
NY 152FB5701C6932B0 HP3 RWBC011
NY 152FB5EE0BEA1C56 HP3 RWBC024
NY 1537C0B706E9DE34 HP3 RWBC030
NY 152FB61B195716C4 HP3 RWBC032
NY 151F7BE70A8C1BFC HP3 RWBC037
NY 15407DDD08692D98 HP3 RWBC040
NY 152DFCA20786D508 HP3 RWBC041
NY 152DFCC804CEFB6A HP3 RWBC048
NY 163173C304B2997F HP3 RWBE056 HPSVP2RWBE056
NY 16F2B49809BBAC70 HP3 RWBH004 HPSVP2RWBH004
NY 163173C5108C809D HP3 RWBJ210 HPSVP2RWBJ210
NY 16A0879F0D4FD138 HP3 RWBK023 HPSVP2RWBK023
NY 16A087B710D05AAD HP3 RWBK029 HPSVP2RWBK029
NY 173DDD8A038368BE HP3 RWBM001 HPSVP2RWBM001
NN 1540A7B71375BA42 HP3 RWBM003
NY 16A088F81F17C61B HP3 RWBM004 HPSVP2RWBM004
NY 1537C02E0C9F972C HP3 RWBM007
NY 173DDD930B385499 HP3 RWBM009 HPSVP2RWBM009
NY 173DDD951C3A3244 HP3 RWBM010 HPSVP2RWBM010
NY 173DDDA508751A89 HP3 RWBM011 HPSVP2RWBM011
NY 173DDD9C06D0771E HP3 RWBM012 HPSVP2RWBM012
NY 16A0887B0AEE9978 HP3 RWBM013 HPSVP2RWBM013
NY 1537BF70086EBD5E HP3 RWBP004
NY 16987DFC0C16911D HP3 RWBP004 HPSVP2RWBP004
NY 152E1FFC0B491014 HP3 RWBP007
NY 164ED82003C8C157 HP3 RWBP007 HPSVP2RWBP007
NY 1537BF8712B0D1C8 HP3 RWBP008
NY 164ED818152D5362 HP3 RWBP008 HPSVP2RWBP008
NY 161EC06A110248A7 HP3 RWBP015 HPSVP1RWBP015
NY 1537BF930E473BB4 HP3 RWBP021
NY 164ED8230E431387 HP3 RWBP021 HPSVP2RWBP021
NY 152FAB140165D1D2 HP3 RWBP022
NY 164ED80A04234325 HP3 RWBP022 HPSVP2RWBP022
NY 1540631904C31DFA HP3 RWBP023
NY 16AEADE010C7CE20 HP3 RWBP023 HPSVP2RWBP023
NY 162AAC960C4D569D HP3 RWBP024 HPSVP1RWBP024
NY 152FAB3B114D87BC HP3 RWBP026
NY 162A3BC804FB0F87 HP3 RWBP026 HPSVP2RWBP026
NY 152FAB4A02823CEA HP3 RWBP029
NN 1538A00914D55CE4 HP3 RWBP030
NY 16D648661D340171 HP3 RWBP030 HPSVP2RWBP030
NN 1538A01413F6782A HP3 RWBP032
NY 16D648E410D27E96 HP3 RWBP032 HPSVP2RWBP032
NY 152FAB5719A2830A HP3 RWBP034
NY 164ED837080F939E HP3 RWBR002 HPSVP2RWBR002
NY 164D1F0A02721DA9 HP3 RWBR003 HPSVP1RWBR003
NY 164ED83F139FBA87 HP3 RWBR004 HPSVP2RWBR004
NY 16D648AB14A641A9 HP3 RWBR009 HPSVP2RWBR009
NY 155FD924181CCFA6 HP3 RWBR030 HPSVP1RWBR030
NY 1607FF4D0F035EE4 HP3 RWBR032 HPSVP1RWBR032
NN 1537C09E09539F82 HP3 RWBR040
NY 16AEAEB403F397E3 HP3 RWBR040 HPSVP2RWBR040
NY 152FB8CA00AF4C9A HP3 RWBR043
NY 16D648E40728730A HP3 RWBR200 HPSVP2RWBR200
NY 161EBEAB0439A734 HP3 RWBR201 HPSVP1RWBR201
NY 161EBEFE06B76ED7 HP3 RWBR202 HPSVP1RWBR202
NY 161EBEF41791E0E4 HP3 RWBR207 HPSVP1RWBR207
NY 173DDD96005235BD HP3 RWBT008 HPSVP2RWBT008
NN 15407E8D1F133F46 HP3 RWBT027
NY 16A087F1038A3ACA HP3 RWBT032 HPSVP2RWBT032
NY 16D648E4106C50F4 HP3 RWBW015 HPSVP2RWBW015
NN 1540D57708047726 HP3 RWBW032
NY 16AEAED002300931 HP3 RWBW042 HPSVP2RWBW042
NY 16D64911136FF3C9 HP3 RWBW048 HPSVP2RWBW048
NY 16D6488A00D271B5 HP3 RWBW050 HPSVP2RWBW050
NY 16A087FC11BF8EF4 HP3 RWBW058 HPSVP2RWBW058
NY 173DDDA104147E4E HP3 RWBW064 HPSVP2RWBW064
NY 16AEADF00A3E6C71 HP3 RWBW075 HPSVP2RWBW075
NY 16AEAEC81FF658CF HP3 RWBZ008 HPSVP2RWBZ008
NY 16AEAEA90756D6F4 HP3 RWBZ010 HPSVP2RWBZ010
NN 1540D5870CB279C6 HP3 RWBZ014
NN 1540D5990AC82F9E HP3 RWBZ015
NN 1540D53C19C96B78 HP3 RWBZ033
NN 1540D54D190FFB2C HP3 RWBZ034
NY 16D6490E0810810C HP3 RWBZ050 HPSVP2RWBZ050
NY 1722312F06956A95 HP3 ZADOKRL HPSVP2ZADOKRL
NY 175DC04E0A53E249 HP3 ZBZOPRI HPSVP2ZBZOPRI
NY 175DC04F0D5988A9 HP3 ZBZOURI HPSVP2ZBZOURI
NY 16C0BB891A03FEAD HP3 ZBZQQRI HPSVP2ZBZQQRI
NY 175DC0541A4C77C1 HP3 ZBZVFRI HPSVP2ZBZVFRI
NY 175DC055168A8E12 HP3 ZBZXDRI HPSVP2ZBZXDRI
NY 175DC0560D777BDC HP3 ZBZXERI HPSVP2ZBZXERI
NY 16D64910141577F2 HP3 ZDEWPRI HPSVP2ZDEWPRI
NY 16E34F410D2DADF5 HP3 ZDFXPRK HPSVP2ZDFXPRK
NY 16CB6F5F03D8543C HP3 ZDIYURI HPSVP2ZDIYURI
NY 16E34F381848481A HP3 ZUZQERK HPSVP2ZUZQERK
NY 175DC0590BA2D770 HP3 ZVKUYRI HPSVP2ZVKUYRI
NY 175DC05909B83990 HP3 ZVKUZRI HPSVP2ZVKUZRI
NY 1643560107BBEEAB HPS A6MCHA HPSVP2A6MCHA
NY 1648D83908C76B3B HPS AA00WM HPSVP2AA00WM
NY 16592B6D04B1D9BD HPS AANQUP HPSVP2AANQUP
NY 16C01B780D2C0EB5 HPS AAZGRK HPSVP2AAZGRK
NY 17269E501B3B180E HPS AD5WV6 HPSVP2AD5WV6
NY 165933970BE0AF71 HPS ADWVQZ HPSVP2ADWVQZ
NY 162E25F006C19C79 HPS AG5JS8 HPSVP2AG5JS8
NY 17269D2610342D51 HPS AGOWVT HPSVP2AGOWVT
NY 162A384019C60FBD HPS AHJFRK HPSVP2AHJFRK
NY 16C529D90092BCE3 HPS AJV4RI HPSVP2AJV4RI
NY 16C0BB85000D078F HPS AKEGRI HPSVP2AKEGRI
NY 164ED8331D29423C HPS AN8JRI HPSVP2AN8JRI
NY 16C01B7400693E8D HPS AOV6RK HPSVP2AOV6RK
NY 163173C304B2997F HPS RWBE056 HPSVP2RWBE056
NY 163173C5108C809D HPS RWBJ210 HPSVP2RWBJ210
NY 164ED82003C8C157 HPS RWBP007 HPSVP2RWBP007
NY 164ED818152D5362 HPS RWBP008 HPSVP2RWBP008
NY 164ED8230E431387 HPS RWBP021 HPSVP2RWBP021
NY 164ED80A04234325 HPS RWBP022 HPSVP2RWBP022
NY 162A3BC804FB0F87 HPS RWBP026 HPSVP2RWBP026
NY 164ED837080F939E HPS RWBR002 HPSVP2RWBR002
NY 164ED83F139FBA87 HPS RWBR004 HPSVP2RWBR004
NY 16C4A94113F9BDB0 HPS ZAJOIVS HPSVP2ZAJOIVS
NY 16C4A93616AD8D13 HPS ZAJVAVS HPSVP2ZAJVAVS
NY 16C4A9C1005B500E HPS ZANJIVS HPSVP2ZANJIVS
NY 16C0BB891A03FEAD HPS ZBZQQRI HPSVP2ZBZQQRI
NY 16B51EFA101D37FC HPS ZDEWERI HPSVP2ZDEWERI
NY 1793CF0C06D87AE9 IS ISLP20 DML0000004
NY 17B1B2461C68A334 IS ISLP23 DML0000014
NY 17AB0ED618CF9F61 IS ISLP24 DML0000006
NY 175EB87A0046401E IS ISLP87 A06M025140
NY 17B299AF1547470C IS ISLP88 DML0000014
NY 17465B0D02D59615 IS ISLP89 A06M024770
NY 17A867CF1027FFEA IS ISLP93 DML0000011
NY 17E19B5C0335CF89 IT IT0010 TABS000102
NY 1805F2811C1EC577 IT IT0010 TABS000131
NY 17D16E691E9EC1CE IT IT5000 RFT0000015
NY 17D16E71046222B0 IT IT5001 RFT0000015
NY 17D16E75009E2EC5 IT IT5002 RFT0000015
NY 17D16E79100FE8ED IT IT5003 RFT0000015
NY 17D16E7C096D1E00 IT IT5010 RFT0000015
NY 177C9DD11A871B48 IT IT5501 A20Y001508
NY 17D16E7E10BACFAF IT IT5503 RFT0000015
NY 181E268E1D177D30 IT IT8481 TABS000160
NY 178626B503DAD8E1 IT YIT0022 A20Y001569547AFE2B
NY 177B50660BB6E3A1 IT YITD00 A20Y001509542023A5
NY 177B50520E6A6E4B IT YITD01 A20Y001509542022FD
NY 177B504C1BA38CE8 IT YITD02 A20Y001509542022D1
NY 17B6E32A0D21727D IT YITGT TABS0000535613E056
NY 17B6E17215E77544 IT YITGTR TABS0000535613D1F0
NY 17E683DD10B93103 KA KA0030 KOAB000039
NY 17F7CD931EDBCCE6 KA KA0030 KOAB000046
NY 17F660C506E35510 KA KA0030 KOAB000047
NY 15B8A5E81D691C64 KB KB2010 19961114221018S101702A058608AKB2010
NY 15B92FA10D1799D0 KB KB2010 19961118082438S101702Z277492AKB2010
NY 15BACCA11C862B22 KB KB2010 19961128144621S101702A059147AKB2010
NY 155C31F619477AAA KB KB2020 19950406154743S101702A043366AKB2020
NY 15FA9CDA00594348 KB KB2020 19980108153831S101702M000886AKB2020
NY 156259B200F60008 KB KB5010 19950515S101702Z189864AKB5010
NY 156273BC149B0D46 KB KB5010 19950516S101702Z190008AKB5010
NY 156AB0B11D491CE2 KB KB5010 19950707S101702Z198701AKB5010
NY 175D03390323BE42 KC YKCWFVU A12M0061415321E5B0
NY 15B8A6000554B20A KD FC0020 19961114221845S101702A058752AFC0020
NY 15C5CFB9066B8104 KD FC0020 19970206162503S101702A061517AFC0020
NY 15F264DE161D7C18 KD FC5000 19971117083808S101702Z344985AFC5000
NY 15F2E5E2114F55C6 KD FC5000 19971120133503S101702A068334AFC5000
NY 15F3165B1CF1E4D4 KD FC5000 19971121183017S101702Z346058AFC5000
NY 158F69AA0EA4C302 KD KD0068 19960226131303S101702Z235794AKD0068
NY 161878261BA05DF7 KD KD0540 19980717170619S101702Z383268AKD0540
NY 15B104390214625A KD KD0600 19960927085001S101702Z268024AKD0600
NY 15B1FEA60B8D931A KD KD0600 19961003141208S101702A057537AKD0600
NY 15DAB25E0DF199C4 KD KD0600 19970619134842S101702A064764AKD0600
NY 15CC6B18173BBEC6 KD KD0620 19970320172119S101702A062566AKD0620
NY 15D8848F16F2D0C2 KD KD0620 19970605170251S101702A064138AKD0620
NY 15DAB2591D03FCEE KD KD0620 19970619134843S101702A064764AKD0620
NY 1585FD900D3959B0 KD KD0630 19951228S101702A050783AKD0630
NY 15AD9AE0108393F0 KD KD0630 19960905154850S101702M000711AKD0630
NY 15B0E4331D085892 KD KD0630 19960926134359S101702A057314AKD0630
NY 15B0E4360F49A806 KD KD0640 19960926134359S101702A057314AKD0640
NY 15B1044C1D3B5666 KD KD0640 19960927085317S101702Z268027AKD0640
NY 15B1FEA00F75F5FA KD KD0640 19961003141209S101702A057537AKD0640
NY 157B014C1A9528B6 KD KD0670 19951019S101702M000621AKD0670
NY 155C323703EB05A2 KD KD5020 19950406S101702A043419AKD5020
NY 157B014C12699D0A KD KD5020 19951019S101702M000621AKD5020
NY 157C2E08114EF1AC KD KD5040 19951027S101702Z214879AKD5040
NY 157E4FDB0D153F30 KD KD5040 19951109S101702A049329AKD5040
NY 157E5C6E013FDBE8 KD KD5040 19951110S101702A049329AKD5040
NY 157B014C05F1EFD4 KD KD7000 19951019S101702M000621AKD7000
NY 157C161D12025286 KD KD7000 19951026S101702A048919AKD7000
NY 1577DCD711F06A74 KD KD7098 19950929S101702Z210568AKD7098
NY 15784CB413F1E26E KD KD7098 19951002S101702Z210762AKD7098
NY 1578CA630B64679E KD KD7098 19951005S101702A048223AKD7098
NY 15A084B61057ECFC KD KD7200 19960614092516S101702A055036AKD7200
NY 15C285030193C06A KD KD8010 19970116174423S101702A060854AKD8010
NY 15C5CEC01010BD42 KD KD8010 19970206155033S101702A061213AKD8010
NY 15E38BF50169C18A KD KD8010 19970814211634S101702A065956AKD8010
NY 1572336409D76370 KD KD8011 19950824S101702M000598AKD8011
NY 15C5CEC108DF46DC KD KD8011 19970206155034S101702A061213AKD8011
NY 15CE44D016153D5C KD KD8012 19970401115710S101702Z304029AKD8012
NY 15CE4B401A011FA0 KD KD8012 19970401154800S101702Z304029AKD8012
NY 15CEBB92073E4C12 KD KD8012 19970404104807S101702Z304584AKD8012
NY 15C5CC090DF64506 KD KD8014 19970206141304S101702A061437AKD8014
NY 15E38C1F1BA0260A KD KD8014 19970814211637S101702A065956AKD8014
NY 15C5CC091133ABDE KD KD8015 19970206141306S101702A061437AKD8015
NY 15E38C230DB7BDEC KD KD8015 19970814211640S101702A065956AKD8015
NY 15C6BBEB01E36862 KD KD8030 19970212131949S101702Z295927AKD8030
NY 15CD84B711145636 KD KD8030 19970327172217S101702Z303860AKD8030
NY 15E38C0905BCFF08 KD KD8030 19970814211641S101702A065956AKD8030
NY 15FCCCAA036D0FEA KD KD8040 19980122133753S101702A069908AKD8040
NY 15FDE5FE0314BA2E KD KD8040 19980129132654S101702A070094AKD8040
NY 15A067CB119AD1EC KD KD8070 19960613161006S101702A054120AKD8070
NY 15AEAADF1C7E1118 KD KD8090 19960912100713S101702Z265960AKD8090
NY 15AF57861B8B8DDE KD KD8090 19960916170653S101702Z266453AKD8090
NY 15B1120A06301B18 KD KD8090 19960927170504S101702Z268138AKD8090
NY 15834A2D135F83E0 KD KD8096 19951211S101702Z223940AKD8096
NY 159BD80404846662 KD KD8096 19960515153311S101702M000684AKD8096
NY 15AD9ADE0046B79C KD KD8096 19960905155004S101702M000711AKD8096
NN 1583CFC0008CCFE0 KD KD8200 19951214S101702A050488AKD8200
NN 1585FD791FFF0AEA KD KD8200 19951228S101702A050761AKD8200
NY 15C69B1A1FCADB2E KD KD8512 19970211174525S101702Z295758AKD8512
NY 15C6B2D912026632 KD KD8512 19970212075517S101702Z295814AKD8512
NY 15C6B6A814B7A556 KD KD8512 19970212101134S101702Z295814AKD8512
NN 155C32451E87F830 KD YKD0500 19950406S101702A043450AYKD0500
NN 1563BCFD0EDB2042 KD YKD0500 19950524S101702A044691AYKD0500
NN 1568EAFE0D5A3F90 KD YKD0500 19950626S101702A045713AYKD0500
NN 1572335406D0308E KD YKD0500 19950824S101702M000598AYKD0500
NN 15894B480F964A0E KD YKD0500 19960118S101702A051288AYKD0500
NN 158ECAFF138EEB44 KD YKD0500 19960222143318S101702A052162AYKD0500
NN 159F26CD05C1FA22 KD YKD0500 19960605164059S101702Z251552AYKD0500
NN 15A17DF80F05374E KD YKD0500 19960620140638S101702A055061AYKD0500
NN 15AD1AFC03B5B9C2 KD YKD0500 19960902113434S101702Z264258AYKD0500
NN 15AD9A511B94EA2E KD YKD0500 19960905153037S101702M000711AYKD0500
NN 15C5EB1509074F78 KD YKD0500 19970207084459S101702A061408AYKD0500
NN 15C7FD8D1B047776 KD YKD0500 19970220131055S101702A061859AYKD0500
NN 15CD59581F868D66 KD YKD0500 19970326152928S101702A062772AYKD0500
NN 15CD85F103D59AAC KD YKD0500 19970327180544S101702A062772AYKD0500
NN 15E37FE91C7B23D4 KD YKD0500 19970814140402S101702M000800AYKD0500
NN 15E6CEF11FA4B640 KD YKD0500 19970904152318S101702A066089AYKD0500
NN 15E88BA11939633E KD YKD0500 19970915163933S101702A066826AYKD0500
NN 15E8FE3F13644320 KD YKD0500 19970918130127S101702A066876AYKD0500
NN 15F2EEB91D073CD8 KD YKD0500 19971120185108S101702M000818AYKD0500
NN 15F35ED91227D75A KD YKD0500 19971123134508S101702Z346134AYKD0500
NN 15F362DB077F0C56 KD YKD0500 19971123160833S101702Z346148AYKD0500
NN 15F3646E1EA25C0A KD YKD0500 19971123170525S101702Z346148AYKD0500
NN 15F3662E1D147D34 KD YKD0500 19971123180702S101702Z346152AYKD0500
NN 15F369CE0D0F47CA KD YKD0500 19971123194631S101702Z346164AYKD0500
NN 15F3AC9012C73DA2 KD YKD0500 19971125120634S101702Z346700AYKD0500
NN 15F51AAE092A4BFA KD YKD0500 19971204142946S101702Z348815AYKD0500
NN 15F5E973080E51E4 KD YKD0500 19971209175158S101702Z349699AYKD0500
NN 15F603000BF7D730 KD YKD0500 19971210090526S101702Z349765AYKD0500
NN 15F603781AF2232E KD YKD0500 19971210092215S101702Z349795AYKD0500
NN 15FBBA170A2A671E KD YKD0500 19980115174941S101702M000856AYKD0500
NN 15FF2F5D15AE1F82 KD YKD0500 19980206175332S101702A070225AYKD0500
NN 1600415710BDCF88 KD YKD0500 19980213132025S101702A070420AYKD0500
NN 160484D90C45D320 KD YKD0500 19980312162639S101702A070997AYKD0500
NN 16048755010B03D8 KD YKD0500 19980312175740S101702A070997AYKD0500
NN 1607F2CF0A1FA4F4 KD YKD0500 19980403141032S101702A071472AYKD0500
NN 160A06261A472F65 KD YKD0500 19980416190530S101702M000898AYKD0500
NN 1612E4F30FCA96DA KD YKD0500 19980612054559S101702M000922AYKD0500
NN 161310A30C678722 KD YKD0500 19980613074807S101702Z378634AYKD0500
NN 1613E4AC0B090F20 KD YKD0500 19980618141748S101702A073266AYKD0500
NN 1615EAC01A922BBA KD YKD0500 19980701111931S101702A073364AYKD0500
NN 1615EEA60F9DED86 KD YKD0500 19980701133922S101702A073364AYKD0500
NN 16161DF5150335D8 KD YKD0500 19980702175321S101702Z381719AYKD0500
NN 161731E90D5CB082 KD YKD0500 19980709142935S101702A073757AYKD0500
NN 16187C441D650656 KD YKD0500 19980717193307S101702Z383289AYKD0500
NN 16187CA10D0C1682 KD YKD0500 19980717194602S101702Z383292AYKD0500
NN 157B01301557EAE2 KD YKD0640 19951019S101702M000621AYKD0640
NN 157EEA2B0B614E78 KD YKD0640 19951113S101702A048936AYKD0640
NN 1590FD5E01CE84F8 KD YKD0640 19960307140102S101702A052143AYKD0640
NN 15A17DF50EA9DEEA KD YKD0640 19960620140639S101702A055061AYKD0640
NN 15B0E4230CBCBF48 KD YKD0640 19960926133932S101702A057314AYKD0640
NN 157B013102691596 KD YKD0641 19951019S101702M000621AYKD0641
NN 157EEA2B006453EC KD YKD0641 19951113S101702A048936AYKD0641
NN 1590FD5D0499C14E KD YKD0641 19960307140103S101702A052143AYKD0641
NN 15A17DF50EB09798 KD YKD0641 19960620140639S101702A055061AYKD0641
NN 15B0E41008853F86 KD YKD0641 19960926133927S101702A057314AYKD0641
NN 157B013103143876 KD YKD0642 19951019S101702M000621AYKD0642
NN 157EEA2C118B488E KD YKD0642 19951113S101702A048936AYKD0642
NN 158197AC1508C70A KD YKD0642 19951130S101702A049980AYKD0642
NN 1590FD5C1E039004 KD YKD0642 19960307140103S101702A052143AYKD0642
NN 15921ACD0C53E05C KD YKD0642 19960314161748S101702M000666AYKD0642
NN 1597969911B74380 KD YKD0642 19960418134159S101702M000672AYKD0642
NN 159BD7EA0A2201E4 KD YKD0642 19960515152932S101702M000684AYKD0642
NN 15A932370B9BDBC6 KD YKD0642 19960808143158S101702A056273AYKD0642
NN 15AD9A60060A0F4E KD YKD0642 19960905153039S101702M000711AYKD0642
NN 15B0E420059B0CC4 KD YKD0642 19960926133928S101702A057314AYKD0642
NN 15B1044114608070 KD YKD0642 19960927085133S101702Z268027AYKD0642
NN 15B1FE8700AD7DF0 KD YKD0642 19961003140829S101702A057537AYKD0642
NN 157B01300CD380D0 KD YKD0643 19951019S101702M000621AYKD0643
NN 157EEA2B04950E2A KD YKD0643 19951113S101702A048936AYKD0643
NN 159E0CE1082F7438 KD YKD0643 19960529163059S101702Z250540AYKD0643
NN 15A473800933E026 KD YKD0643 19960709095917S101702Z256432AYKD0643
NN 15A5E43F034B9320 KD YKD0643 19960718135640S101702A055861AYKD0643
NN 15B0E41605439978 KD YKD0643 19960926133929S101702A057314AYKD0643
NN 157B013314A80B84 KD YKDC91 19951019S101702M000621AYKDC91
NN 155C323E135E2824 KD YKDH00 19950406S101702A043450AYKDH00
NN 15CD59540ABCE1C8 KD YKDH00 19970326152925S101702A062772AYKDH00
NN 15CD85F10E6A5B02 KD YKDH00 19970327180543S101702A062772AYKDH00
NN 155C3243073ED954 KD YKDH01 19950406S101702A043450AYKDH01
NN 155C3243037F14D4 KD YKDH02 19950406S101702A043450AYKDH02
NN 155C32430C15DA0E KD YKDH03 19950406S101702A043450AYKDH03
NN 15E3801909B1647C KD YKDH03 19970814141325S101702M000800AYKDH03
NN 155C323C1F691A1C KD YKDH04 19950406S101702A043450AYKDH04
NN 155C323D0BF5FB1C KD YKDH05 19950406S101702A043450AYKDH05
NN 155C323D1FDE6A50 KD YKDH06 19950406S101702A043450AYKDH06
NN 155C323D1DB64B6E KD YKDH50 19950406S101702A043450AYKDH50
NN 155C323E13450388 KD YKDH51 19950406S101702A043450AYKDH51
NN 155C323E13F52FD8 KD YKDH52 19950406S101702A043450AYKDH52
NN 155C323F1DA6EE94 KD YKDH53 19950406S101702A043450AYKDH53
NN 155C323F15AD8A24 KD YKDH58 19950406S101702A043450AYKDH58
NN 155C324019D2BF54 KD YKDH59 19950406S101702A043450AYKDH59
NN 155C32410F7AEF26 KD YKDH60 19950406S101702A043450AYKDH60
NN 155C32410922D810 KD YKDH61 19950406S101702A043450AYKDH61
NN 155C324215629C66 KD YKDH91 19950406S101702A043450AYKDH91
NN 15BACC9313B278D8 KD YKDH91 19961128144447S101702A059147AYKDH91
NN 155C3242044DC582 KD YKDH92 19950406S101702A043450AYKDH92
NN 157B0133172455E4 KD YKDR00 19951019S101702M000621AYKDR00
NN 157B01331881AB60 KD YKDR01 19951019S101702M000621AYKDR01
NN 157B013407DC7C62 KD YKDR03 19951019S101702M000621AYKDR03
NN 157B013510F9BF94 KD YKDR04 19951019S101702M000621AYKDR04
NN 157B01350071D5B8 KD YKDR06 19951019S101702M000621AYKDR06
NN 157B01360C742192 KD YKDR16 19951019S101702M000621AYKDR16
NN 157B013608401B52 KD YKDR17 19951019S101702M000621AYKDR17
NN 157B01360F463884 KD YKDR18 19951019S101702M000621AYKDR18
NN 157B01360F346934 KD YKDR19 19951019S101702M000621AYKDR19
NN 157B013702C1292E KD YKDR20 19951019S101702M000621AYKDR20
NN 157B01360FA330A0 KD YKDR21 19951019S101702M000621AYKDR21
NN 157B013711EC162A KD YKDR22 19951019S101702M000621AYKDR22
NN 157B013703BE3850 KD YKDR50 19951019S101702M000621AYKDR50
NN 157B013715FBC704 KD YKDR51 19951019S101702M000621AYKDR51
NN 157B013710BC5C4A KD YKDR53 19951019S101702M000621AYKDR53
NN 157B0138152B6542 KD YKDR59 19951019S101702M000621AYKDR59
NN 157B013D1BB7A3FA KD YKDR60 19951019S101702M000621AYKDR60
NN 157B013C1712294C KD YKDR61 19951019S101702M000621AYKDR61
NN 157B013E07B45500 KD YKDR67 19951019S101702M000621AYKDR67
NN 157B012B1FE83E02 KD YKDR68 19951019S101702M000621AYKDR68
NN 157B012F1074D6D2 KD YKDR73 19951019S101702M000621AYKDR73
NN 157B012D0425CD12 KD YKDR74 19951019S101702M000621AYKDR74
NN 157B012D03F7BFF2 KD YKDR75 19951019S101702M000621AYKDR75
NN 157B012B19851ABA KD YKDR78 19951019S101702M000621AYKDR78
NN 15B0E40F07484198 KD YKDR78 19960926133932S101702A057314AYKDR78
NN 157B012B0A684DD8 KD YKDR88 19951019S101702M000621AYKDR88
NN 157B012B1A32EC8C KD YKDR89 19951019S101702M000621AYKDR89
NN 157B012B11253B60 KD YKDR91 19951019S101702M000621AYKDR91
NN 157B012F17B71458 KD YKDR92 19951019S101702M000621AYKDR92
NN 157B012D1E69E1EC KD YKDR93 19951019S101702M000621AYKDR93
NN 157B012E0D3DCD80 KD YKDR97 19951019S101702M000621AYKDR97
NN 157B012E10191FDA KD YKDR98 19951019S101702M000621AYKDR98
NN 155C32440D013D8C KD YKDS91 19950406S101702A043450AYKDS91
NN 15CD85F013C52902 KD YKDS91 19970327180544S101702A062772AYKDS91
NN 157B012E1793B91C KD YKDT00 19951019S101702M000621AYKDT00
NN 15A932271B75D182 KD YKDT00 19960808143156S101702A056273AYKDT00
NN 157B012F13FEF75A KD YKDV81 19951019S101702M000621AYKDV81
NN 157B9F2C1C4E9826 KD YKDV81 19951023S101702Z214190AYKDV81
NN 157BC01D0B0D5624 KD YKDV81 19951024S101702Z214339AYKDV81
NN 157BC607119387BA KD YKDV81 19951024S101702Z214421AYKDV81
NN 157EEA2B00BA6AE2 KD YKDV81 19951113S101702A048936AYKDV81
NN 158147710CCE6808 KD YKDV81 19951128S101702Z221489AYKDV81
NN 158197A91A6277CE KD YKDV81 19951130S101702A049980AYKDV81
NN 15921ACA1E8A2146 KD YKDV81 19960314161746S101702M000666AYKDV81
NN 159BD7EA06A58A10 KD YKDV81 19960515152935S101702M000684AYKDV81
NN 15A9321C1348F6C4 KD YKDV81 19960808143159S101702A056273AYKDV81
NN 15AD9A511306D3F8 KD YKDV81 19960905153031S101702M000711AYKDV81
NN 15B0E41A07BB2F12 KD YKDV81 19960926133929S101702A057314AYKDV81
NN 15B104221CBF2376 KD YKDV81 19960927084725S101702Z268022AYKDV81
NN 15B1FE8707CC76AE KD YKDV81 19961003140832S101702A057537AYKDV81
NN 15997B3D1157CD8E KD YKDX81 19960430144759S101702Z245908AYKDX81
NN 15997B6A10193FCA KD YKDX81 19960430145417S101702Z245908AYKDX81
NN 1599CDF318B0CD4E KD YKDX81 19960502160759S101702A053827AYKDX81
NN 159BD7E901D3785E KD YKDX81 19960515152931S101702M000684AYKDX81
NY 17E863760C45D2AC KE YKEA082 EBVV00022157B31F45
NY 17EDDC970054F072 KE YKEA082 EBVV00023557E108BE
NY 17E863791127A995 KE YKEA083 EBVV00022157B31F59
NY 17EDDC98185E11D8 KE YKEA083 EBVV00023557E108D7
NY 15501B1D1894F578 KEIN KD8014 19950119173805S101702A041425AKD8014
NY 15501B1F12A18210 KEIN KD8015 19950119173805S101702A041425AKD8015
NY 15A93269122828C2 KEIN NS0890 19960808144239S101702A056331ANS0890
NY 15AA4B82062790A6 KEIN NS0890 19960815142208S101702A056403ANS0890
NY 15AB65010A6D2094 KEIN NS0890 19960822141851S101702A056667ANS0890
NY 17D972E918EDEDBD KR YKRBCAL ACP00000725735CCA5
NY 17B5D1790F2E75B0 KR YKRT385 VEFO000008560AE85C
NY 180C5C3F12722594 KR YKRT385 VEFO00003458E0E00AMVS
NY 17B5D17900FEA714 KR YKRT397 VEFO000008560AE862
NY 180C5C4101678B29 KR YKRT397 VEFO00003458E0E01BMVS
NY 17B5D1DA1248013A KR YKRT511 KAUF000015560AEBA9
NY 1812B3490A67FE90 KR YKRT511 KAUF00003859160EE7MVS
NY 182A188F0DA7FF98 KR YKRT511 KAUF00004059DA50DA
NY 182A18910CBB2B8E KR YKRT511 KAUF00004059DA50DAMVS
NY 14DD80E91611F964 KS KS0600
NY 154A994901A34B88 KS KS0600 19941215163732S101702A040306AKS0600
NY 154A9C390108A038 KS KS0600 19941215182205S101702A040306AKS0600
NY 154A9C3C0B81E13E KS KS0610 19941215182206S101702A040306AKS0610
NY 15A06AC81EDFD8D2 KS KS0720 19960613175707S101702A054915AKS0720
NY 15BD2F7B06D4DCDE KS KS0720 19961213190918S101702A059882AKS0720
NY 15E264D91A9172D8 KS KS0720 19970807131518S101702A065672AKS0720
NY 17D37A990140AD5C KS KS5500 CSED000019
NY 17F00CDD12D3C623 KS KS5500 CSED000026
NY 17E1CB2300566C05 KS KS5685 EBVV000187
NY 17F03903043601C0 KS KS5685 EBVV000233
NY 17F6AAB109811DC0 KS KS5685 EBVV000245
NY 146931EA089B3C10 KS KS8000
NY 161097811AD2C3B8 KS KS8050 19980528140608S101702A072741AKS8050
NY 1469311008FAC394 KS KS8900
NY 14F07EEA108A9BFE KS YKS0031
NY 15C5A9021D11D1B0 KS YKS0802 19970205171935S101702A061407AYKS0802
NY 15C5CDB80290E4FC KS YKS0802 19970206151324S101702A061407AYKS0802
NY 15C5EFAE046AC4F4 KS YKS0802 19970207112844S101702A061561AYKS0802
NY 15D530F806BAC2AF KS YKS0802 19970515130326S101702A063870AYKS0802
NY 15D5FE1E087A8967 KS YKS0802 19970520152637S101702A064036AYKS0802
NY 15E122B6100B6608 KS YKS0802 19970730130516S101702A065612AYKS0802
NY 15E9A9080C11DC3A KS YKS0802 19970922185351S101702A066941AYKS0802
NY 160480F70195E1E2 KS YKS0802 19980312140727S101702A071004AYKS0802
NY 160E6C9414C2B25E KS YKS0802 19980514190209S101702A072512AYKS0802
NY 15D531011C2714A2 KS YKS0806 19970515130321S101702A063870AYKS0806
NY 15D5FE1E06E0015E KS YKS0806 19970520152633S101702A064036AYKS0806
NY 15E122B215B0F988 KS YKS0806 19970730130512S101702A065612AYKS0806
NY 15E9A9080B234082 KS YKS0806 19970922185347S101702A066941AYKS0806
NY 15F0B3E204C81A5E KS YKS0806 19971106141958S101702A068104AYKS0806
NY 160480F704784A38 KS YKS0806 19980312140715S101702A071004AYKS0806
NY 160E6C9215393F5C KS YKS0806 19980514190144S101702A072512AYKS0806
NN 15D530FE0FDD980E KS YKS0809 19970515130322S101702A063870AYKS0809
NN 15D5FE1D18543E3B KS YKS0809 19970520152634S101702A064036AYKS0809
NY 160E6C8E1CEFC334 KS YKS0813 19980514190151S101702A072512AYKS0813
NY 160EB0D40F5D0D0E KS YKS0813 19980516114927S101702Z374928AYKS0813
NY 1613E56F1740210C KS YKS0813 19980618144536S101702A073286AYKS0813
NY 17E1ED24088B4797 KS YKS5511 CSED000022577CE9CC
NY 17F451721AC06789 KS YKS5511 CSED000026581723E4
NY 18031469192E3BF6 KS YKS5511 CSED0000315892F81B
NY 18038C5F0A8E10F1 KS YKS5511 CSED0000325896E675
NY 17E28BFC03EFF710 KS YKS5512 CSED00002257821E43
NY 17F30A46154809DF KS YKS5512 CSED000026580C796C
NY 1803146A1DE571CD KS YKS5512 CSED0000315892F832
NY 18038C2B07BE3BD3 KS YKS5512 CSED0000325896E4BF
NY 155F7CCB14535948 KS YKS5551 19950427S101702A043905AYKS5551
NY 15807C8F0A393196 KS YKS5551 19951123S101702A049861AYKS5551
NY 1581BC9B17CE2FBC KS YKS5551 19951201S101702A050046AYKS5551
NY 1583CF950A954152 KS YKS5551 19951214S101702A050423AYKS5551
NY 15BD2F690661B65C KS YKS5551 19961213190524S101702A059882AYKS5551
NY 15C39D880FA90CA2 KS YKS5551 19970123170322S101702A060998AYKS5551
NY 15C43FC108E725F4 KS YKS5551 19970127175027S101702Z293101AYKS5551
NY 15CA30A11FB83D46 KS YKS5551 19970306130420S101702A061749AYKS5551
NY 15E382E11FD1313C KS YKS5551 19970814154706S101702M000820AYKS5551
NY 15EB3140182E11DE KS YKS5551 19971002124932S101702A067136AYKS5551
NY 1607F47213DDE91A KS YKS5551 19980403151109S101702Z368246AYKS5551
NY 160D49D91657B8F8 KS YKS5551 19980507134024S101702A072187AYKS5551
NY 160E641E15A66F6B KS YKS5551 19980514140042S101702A072309AYKS5551
NY 16131CF0132EF012 KS YKS5551 19980613150900S101702Z378654AYKS5551
NY 1617303B115B2127 KS YKS5551 19980709132913S101702A073491AYKS5551
NY 155F7CCB1751D630 KS YKS5552 19950427S101702A043905AYKS5552
NY 15807C91122733AE KS YKS5552 19951123S101702A049861AYKS5552
NY 1581BC9C16B9BFB4 KS YKS5552 19951201S101702A050046AYKS5552
NY 1583CF961ED82F84 KS YKS5552 19951214S101702A050423AYKS5552
NY 15BD2F681AE16098 KS YKS5552 19961213190524S101702A059882AYKS5552
NY 15E382E11DAE20C0 KS YKS5552 19970814154715S101702M000820AYKS5552
NY 160F546507A4E9F8 KS YKS5552 19980520132122S101702A072626AYKS5552
NY 15AEB4BE0882A382 KS YKS5553 19960912155328S101702A057108AYKS5553
NY 15BD2F6A06FD2C8A KS YKS5553 19961213190525S101702A059882AYKS5553
NY 15C39D8815111DC2 KS YKS5553 19970123170324S101702A060998AYKS5553
NY 15CE9A5317318254 KS YKS5553 19970403145839S101702A062688AYKS5553
NY 15D3EF6706F673D4 KS YKS5553 19970507131535S101702A063114AYKS5553
NY 15D87F81108E9D1C KS YKS5553 19970605140318S101702A063951AYKS5553
NY 15E382E218DDB9A6 KS YKS5553 19970814154722S101702M000820AYKS5553
NY 15EB3133182C165A KS YKS5553 19971002124933S101702A067136AYKS5553
NY 16013C6610826A82 KS YKS5553 19980219190855S101702A070545AYKS5553
NY 1601646C0EAA38C2 KS YKS5553 19980220190032S101702A070545AYKS5553
NY 1611B0D9040F1E43 KS YKS5553 19980604135613S101702A072797AYKS5553
NY 1615EEA81940ABD3 KS YKS5553 19980701133926S101702Z381523AYKS5553
NY 1617303D133A78E8 KS YKS5553 19980709132913S101702A073491AYKS5553
NN 150CFBA511783720 KS YKSAUFT
NN 151E9D6D18BC86E4 KS YKSAUFT 19940310195022S101702A032347A
NN 151FB036173F5ACA KS YKSAUFT 19940317154525S101702A032520AYKSAUFT
NN 1520C9B3183C5B60 KS YKSAUFT 19940324153804S101702A032785AYKSAUFT
NN 152648891D64FB0E KS YKSAUFT 19940428145413S101702A033787AYKSAUFT
NY 1529963E17645A12 KS YKSAUFT 19940519152148S101702A034419AYKSAUFT
NY 152BC8D10ECBBD12 KS YKSAUFT 19940602144938S101702A034556AYKSAUFT
NY 153150E30C41AED0 KS YKSAUFT 19940707194026S101702M000478AYKSAUFT
NY 1536C7C71622437C KS YKSAUFT 19940811140925S101702A036426AYKSAUFT
NY 1536D1C90537339C KS YKSAUFT 19940811195830S101702A036426AYKSAUFT
NY 154A9A510B790ED4 KS YKSAUFT 19941215164630S101702A040392AYKSAUFT
NY 154A9C40009D10C8 KS YKSAUFT 19941215182250S101702A040392AYKSAUFT
NY 155249051560D374 KS YKSAUFT 19950202142636S101702A041794AYKSAUFT
NY 15547C421718CC92 KS YKSAUFT 19950216142447S101702A042149AYKSAUFT
NY 1561B0C50FB84470 KS YKSAUFT 19950511S101702A044324AYKSAUFT
NY 1564FD5A1A35CDA6 KS YKSAUFT 19950601S101702M000585AYKSAUFT
NY 157230400F815CA8 KS YKSAUFT 19950824S101702A047164AYKSAUFT
NY 15757C0513447D46 KS YKSAUFT 19950914S101702A047692AYKSAUFT
NY 1583C99706009534 KS YKSAUFT 19951214S101702M000648AYKSAUFT
NY 1583C51515E20594 KS YKSAUFT 19951214S101702Z224822AYKSAUFT
NY 159633290999DBF2 KS YKSAUFT 19960409173948S101702A053018AYKSAUFT
NY 1596542B19C2BDBC KS YKSAUFT 19960410132144S101702Z242748AYKSAUFT
NY 15965583058DD2EA KS YKSAUFT 19960410140945S101702Z242764AYKSAUFT
NY 1596583D1FA84186 KS YKSAUFT 19960410154724S101702Z242818AYKSAUFT
NY 159797631046EF48 KS YKSAUFT 19960418140918S101702A053458AYKSAUFT
NY 159863560871884C KS YKSAUFT 19960423154952S101702A053648AYKSAUFT
NY 159BD8ED1B350282 KS YKSAUFT 19960515160557S101702M000686AYKSAUFT
NY 15B43678023ED9C8 KS YKSAUFT 19961017165520S101702A057903AYKSAUFT
NY 15B4F01F0A5E5F86 KS YKSAUFT 19961022074124S101702Z271871AYKSAUFT
NY 15B4FB5F1C8B104C KS YKSAUFT 19961022142351S101702Z272071AYKSAUFT
NY 15B54C5A0137E976 KS YKSAUFT 19961024144245S101702A058089AYKSAUFT
NY 15B56A3105C55AE0 KS YKSAUFT 19961025083025S101702Z273139AYKSAUFT
NY 15B56E2A17DA35EA KS YKSAUFT 19961025105240S101702Z273213AYKSAUFT
NY 15B8996708F1EF16 KS YKSAUFT 19961114144518S101702M000743AYKSAUFT
NY 15B8A1DE0F9BDBD2 KS YKSAUFT 19961114194908S101702M000743AYKSAUFT
NY 15BC8C2E175FC006 KS YKSAUFT 19961209174335S101702A059465AYKSAUFT
NY 15BDE9D711B2E6CA KS YKSAUFT 19961218101955S101702A059995AYKSAUFT
NY 15C6E5C918C07FF4 KS YKSAUFT 19970213141858S101702A061515AYKSAUFT
NY 15F6334F1B6852B8 KS YKSAUFT 19971211135316S101702A068968AYKSAUFT
NY 16001B63183B2DD4 KS YKSAUFT 19980212144151S101702M000834AYKSAUFT
NY 168DD4C201466813 KS YKSAUFT A15S000557
NY 17D463390A25822D KS YKSBKST CSED000019570B579E
NY 175FCE5A0CFDC6CD KS YKSFTXT A14S002412533962A5
NY 175FCE5B026E1669 KS YKSFTXT A14S002412533962A5CICS
NY 178C25361558E594 KS YKSISOC CSED00000554AD468E
NN 14F17F570C179124 KS YKSLFNR
NN 154A99271F6F15FA KS YKSLFNR 19941215163239S101702A040306AYKSLFNR
NN 154A9C1014114058 KS YKSLFNR 19941215181826S101702A040306AYKSLFNR
NY 1509AEAE1561F664 KS YKSMODU
NY 151E9D6A0132D42C KS YKSMODU 19940310195039S101702A032347A
NY 151FB0320BB17792 KS YKSMODU 19940317154541S101702A032520AYKSMODU
NY 1520C9C70B72BB8A KS YKSMODU 19940324153841S101702A032785AYKSMODU
NN 152648861B54F39A KS YKSMODU 19940428145414S101702A033787AYKSMODU
NN 152996380925ED74 KS YKSMODU 19940519152202S101702A034419AYKSMODU
NN 152BC8CC09049F8C KS YKSMODU 19940602145024S101702A034556AYKSMODU
NN 153150E2172DF882 KS YKSMODU 19940707194027S101702M000478AYKSMODU
NN 1536C7BD13F3E0B8 KS YKSMODU 19940811140924S101702A036426AYKSMODU
NN 1536D1B018842212 KS YKSMODU 19940811195758S101702A036426AYKSMODU
NN 154A9A4F0D858DAC KS YKSMODU 19941215164631S101702A040392AYKSMODU
NN 154A9C3E15381990 KS YKSMODU 19941215182251S101702A040392AYKSMODU
NN 155249031B3E8EF4 KS YKSMODU 19950202142637S101702A041794AYKSMODU
NN 15547C421CBF9A46 KS YKSMODU 19950216142448S101702A042149AYKSMODU
NN 1561B0C21E8AAE32 KS YKSMODU 19950511S101702A044324AYKSMODU
NN 1572303E1E0F82E0 KS YKSMODU 19950824S101702A047164AYKSMODU
NN 1583C997096B3DC0 KS YKSMODU 19951214S101702M000648AYKSMODU
NN 1596332906AE8548 KS YKSMODU 19960409173948S101702A053018AYKSMODU
NN 159797630E3B1B3A KS YKSMODU 19960418140921S101702A053458AYKSMODU
NN 159BD8DC1077A2DA KS YKSMODU 19960515160306S101702M000686AYKSMODU
NY 15B43677179A5E04 KS YKSMODU 19961017165521S101702A057903AYKSMODU
NY 15B4FB5F07CE385C KS YKSMODU 19961022142351S101702Z272071AYKSMODU
NY 15B54C590CEE7BEE KS YKSMODU 19961024144246S101702A058089AYKSMODU
NY 15B56E2C177B6FF8 KS YKSMODU 19961025105241S101702Z273213AYKSMODU
NY 15B8995A103CBC86 KS YKSMODU 19961114144530S101702M000743AYKSMODU
NY 15B8A1DC1ED5141C KS YKSMODU 19961114194917S101702M000743AYKSMODU
NY 15BC8C281F924658 KS YKSMODU 19961209174338S101702A059465AYKSMODU
NY 15F6334E1FE33AFA KS YKSMODU 19971211135319S101702A068968AYKSMODU
NY 15F6558D09AD722A KS YKSMODU 19971212102013S101702Z350189AYKSMODU
NY 15F6FC0D0EC3E22C KS YKSMODU 19971216133928S101702A069161AYKSMODU
NY 16001B63137CA2D8 KS YKSMODU 19980212144151S101702M000834AYKSMODU
NY 15209A9E0FE56B14 KS YKSZNID 19940323113754S101702A032639AYKSZNID
NY 1522FC091E9A706A KS YKSZNID 19940407150310S101702A032963AYKSZNID
NY 1522FEAF1380473A KS YKSZNID 19940407164427S101702A032963AYKSZNID
NY 15BD2F5C18903F58 KS YKSZNID 19961213190542S101702A059882AYKSZNID
NY 1558E39009FCEDEA KS ZKSFTXT 19950316145243S101702A042669AZKSFTXT
NN 15FBB30A0E3F3E8E KV BX0130 19980115133833S101702A069359ABX0130
NN 16173BB70544877E KV BX0130 19980709201828S101702A073668ABX0130
NN 1617503A06090CEE KV BX0130 19980710083334S101702A073668ABX0130
NN 157B2587123CB8B4 KX YKX002 19951020S101702A048828AYKX002
NN 158007560378CA20 KX YKX002 19951120S101702A049712AYKX002
NN 1594ED0E0A16EBD2 KX YKX002 19960401150805S101702A053178AYKX002
NN 15A7F1480F9F145C KX YKX002 19960731150729S101702A056211AYKX002
NN 15D2FCC7120F4E2E KX YKX002 19970501123152S101702A063604AYKX002
NN 15E38A0F16ED64F8 KX YKX002 19970814200734S101702A065850AYKX002
NN 15ED6AF904FAFFCE KX YKX002 19971016164307S101702A067570AYKX002
NN 16001B5403154BE6 KX YKX002 19980212144153S101702M000834AYKX002
NN 160A061D0CF7A3EF KX YKX002 19980416190522S101702M000898AYKX002
NY 177D565B0BD5E0D5 KX YKXO002 CRMA00397654311C87
NY 180A80CD13ED63E0 KX YKXO002 TLBO00002358D13DB6MVS
NY 17DFC09E12E3B3C6 LB YLB0090 AIS0000095576AAD56
NY 17E6F77E15DA0E03 LB YLB0091 AIS000009557A7320F
NY 17E0862803DC1A99 LB YLB0095 AIS000009557712672
NY 1612CD00175CB72B LB YLB0103 19980611152558S101702M000840AYLB0103
NY 1612CD020FB49484 LB YLB0105 19980611152558S101702M000840AYLB0105
NY 1520C9EE1D904E1E LB YLB0113 19940324154725S101702A032795AYLB0113
NY 15486A821EBF08C6 LB YLB0113 19941201191749S101702M000472AYLB0113
NY 154AA1F803CBB844 LB YLB0113 19941215214909S101702M000474AYLB0113
NY 1562CD131A892102 LB YLB0113 19950518S101702M000545AYLB0113
NY 15BD026108E2C2B8 LB YLB0113 19961212161055S101702M000662AYLB0113
NY 15F6360F0531FD1E LB YLB0113 19971211152839S101702M000726AYLB0113
NY 16036E9A04DDBB84 LB YLB0113 19980305182743S101702M000837AYLB0113
NY 161750690E76B6CA LB YLB0113 19980710083933S101702M000841AYLB0113
NY 161759BC1D3EE66C LB YLB0113 19980710141321S101702M000841AYLB0113
NY 15D0CDB70411E4DC LB YLB0115 19970417145740S101702M000718AYLB0115
NY 15F6360E17A6E950 LB YLB0115 19971211152840S101702M000726AYLB0115
NY 16036EA81BEABB18 LB YLB0115 19980305182800S101702M000837AYLB0115
NY 1617507D166076FF LB YLB0115 19980710083934S101702M000841AYLB0115
NY 161759E012ACD504 LB YLB0115 19980710141321S101702M000841AYLB0115
NY 15EA14201E07BD7A LB YLB0116 19970925104749S101702Z335520AYLB0116
NY 15ED91DE1F2AF776 LB YLB0116 19971017154949S101702M000724AYLB0116
NY 15F636091D5A0768 LB YLB0116 19971211152840S101702M000726AYLB0116
NY 1617507D0C167F85 LB YLB0116 19980710083934S101702M000841AYLB0116
NY 161759DB037762FF LB YLB0116 19980710141322S101702M000841AYLB0116
NY 17E84189028DAF89 LB YLB0120 IPC000015457B202A2
NY 17F019A21BE90364 LB YLB0120 IPC000015657F3CF5C
NY 17E0AD9B1FE3B731 LC LC0510I TFBM0000255772715A
NY 18098E231BC93EBF LC LC0511I TFBM00002658C94A27
NY 17E798DD0B5C5E1B LC LC0511I TFBM00002757AC7BB6
NY 17EEFDBB114A5121 LC LC0511I TFBM00002857EA823C
NY 18040B790040F871 LC LC0511I TFBM000029589B10A0
NY 181ACE71168F303B LC LC0511I TFBM000030595A0ED9
NY 1827402C1B8CF9DC LC LC0511I TFBM00003359C2729F
NY 1827403014BBFFD7 LC LC0511I TFBM00003359C2729FMVS
NN 15BACACC0E8F24AC LC LC5000 19961128134126S101702A059244ALC5000
NN 15E382F11A2120A2 LC LC5000 19970814155557S101702M000820ALC5000
NN 15FCCE3E0C84AEF2 LC LC5000 19980122143236S101702M000889ALC5000
NY 17E0ADD615A51E47 LC YLCTF01 TFBM0000255772734D
NY 17E0ADD910512211 LC YLCTF02 TFBM00002557727367
NY 180C843E180653C8 LC YLCTF02 TFBM00002658E22FB0
NY 17EF4B530E948846 LC YLCTF02 TFBM00002857ED0D2F
NY 1825D96E09526C60 LC YLCTF02 TFBM00003359B6B121
NY 1825D9701EE97EAD LC YLCTF02 TFBM00003359B6B121MVS
NY 18333AE4110B2B46 LC YLCTF02 TFBM0000375A26E226
NY 17E0ADDD08601560 LC YLCTF03 TFBM00002557727387
NY 18098E330F7BE27E LC YLCTF03 TFBM00002658C94AB4
NY 17EEFD800CE6AAF5 LC YLCTF03 TFBM00002857EA8045
NY 1825D96B10D1E0EC LC YLCTF03 TFBM00003359B6B138
NY 1825D96E188133E4 LC YLCTF03 TFBM00003359B6B138MVS
NN 18333AF00A8C164D LC YLCTF03 TFBM0000375A26E23A
NY 17CBEB3000D70B3A LQ LQ8090 LIQ0000015
NY 17E1D01E1601F401 LQ LQ8090 LIQ0000019
NN 14EBFA8A0437A5F0 LV YLV001D
NN 14A362EE0CBD3CB8 LV YLV001E
NN 15A7A55812697092 LV YLV0024 19960729175120S101702A056132AYLV0024
NN 15A953FA0457560A LV YLV0024 19960809104406S101702A056380AYLV0024
NN 15AF468412991118 LV YLV0024 19960916065859S101702Z266234AYLV0024
NN 15AFCAA21C6C5E26 LV YLV0024 19960919134517S101702A057205AYLV0024
NN 15C1666300ED22BA LV YLV0024 19970109144533S101702A060651AYLV0024
NN 15CB4A5904364DB6 LV YLV0024 19970313130752S101702A062314AYLV0024
NN 15E8FDCB178BE292 LV YLV0024 19970918124528S101702A066875AYLV0024
NN 15EC4D9A12ACAA38 LV YLV0024 19971009142943S101702A067320AYLV0024
NN 15F4025316263006 LV YLV0024 19971127151620S101702A068522AYLV0024
NN 160577C3112FE878 LV YLV0024 19980318172336S101702Z365489AYLV0024
NN 16076EA91CAD28B2 LV YLV0024 19980331072213S101702Z367531AYLV0024
NN 160780911073932A LV YLV0024 19980331180350S101702Z367531AYLV0024
NN 1607824E05B6C55A LV YLV0024 19980331190659S101702Z367531AYLV0024
NN 1608BBA6013713C6 LV YLV0024 19980408135941S101702A071564AYLV0024
NN 16240C4A058C2B68 M21SAMT2 SP1BS7T
NN 16240C4B0A3A1108 M21SAMT2 SP1BS9T
NN 1624161907231ECE M23SAMT2 SP1BS1T
NN 1624163601CBD7CA M23SAMT2 SP1BS3T
NN 162416531343F742 M23SAMT2 SP1BS7T
NN 162416551EA5E2F2 M23SAMT2 SP1BS9T
YY 1647C9EC01BAB864 M24SAMT2 SAMP0190
NN 154921C4195BA576 MD YMD0651 19941206083936S101702A040104AYMD0651
NN 15497F2E0875479E MD YMD0651 19941208162230S101702A040104AYMD0651
NN 154A41F31EE37A4C MD YMD0651 19941213123405S101702A040387AYMD0651
NN 155B13C313C15ED8 MD YMD0651 19950330S101702A043203AYMD0651
NN 1564FD7A1F9F1CE0 MD YMD0651 19950601S101702M000585AYMD0651
NY 153F9E6E00703118 ME ME0300 19941006195423S101702A037982AME0300
NY 15E38C0119181CAA ME ME0300 19970814211635S101702A065803AME0300
NY 17F294F5012B7346 MF MF6000 MFR0000086
NY 17F040360796A028 MF MF6010 MFR0000086
NY 17EFBCE10E8DCA6E MF MF6020 MFR0000086
NY 17DFDD4605EEA7BE MF MF7000 MFR0000082
NY 17B4D0180B03F9DE MF MF7010 MFR0000049
NY 1802C85C1F2E9631 MF MF7010 MFR0000096
NY 180C59D20DD3F08C MF MF7010 MFR0000110
NY 181B2B841A41010B MF MF7010 MFR0000124
NY 182D5B3316144327 MF MF7010 MFR0000135
NY 17E1713103ED44C1 MF MF7020 MFR0000082
NY 17CCE9B0118A67B6 MF MF7110 MFR0000065
NY 17B4D0181920CFDF MF MF7120 MFR0000049
NY 17F29514079B80EA MF MF7200 MFR0000086
NY 17E7A13C19308C95 MF MF7200 MFR0000090
NY 17E0DC6408927C8A MF MF7210 MFR0000082
NY 17CD0EC20A938AF7 MF MF7220 MFR0000065
NY 17E2198510D24371 MF MF7230 MFR0000082
NY 17F241971398570C MF MF7230 MFR0000086
NY 1804394B1591B5C5 MF MF7230 MFR0000096
NY 180C59E3156A5FE0 MF MF7230 MFR0000110
NY 181B4616182D32D6 MF MF7230 MFR0000124
NY 1827E0DC0C335646 MF MF7230 MFR0000135
NY 1837BBB11BF1F29A MF MF7230 MFR0000148
NY 17BE92E90170759C MF MF7240 MFR0000060
NY 17D35007082B7716 MF MF7250 MFR0000073
NY 17BE92E913AECAA2 MF MF7260 MFR0000060
NY 17E0DC6516F2B392 MF MF7300 MFR0000082
NY 17E0DC6608802C03 MF MF7310 MFR0000082
NY 17C89CC315D749EF MF MF7320 MFR0000065
NY 17F294981240F02B MF MF7320 MFR0000086
NY 1804394F058A57E0 MF MF7320 MFR0000096
NY 17D8FD741AEFF997 MF MF7330 MFR0000078
NY 17F294A61C40D6D7 MF MF7330 MFR0000086
NY 18043950020A39B2 MF MF7330 MFR0000096
NY 17E0DC660BF63947 MF MF7340 MFR0000082
NY 17F294AB04E91852 MF MF7340 MFR0000086
NY 17FEB882157052EC MF MF7340 MFR0000107
NY 17E0DC66198AB69A MF MF7360 MFR0000082
NY 17F35B5213C00D89 MF MF7360 MFR0000086
NY 17FEB8770EC16B9D MF MF7360 MFR0000107
NY 17C89CDC0BD3F18C MF MF7380 MFR0000065
NY 17EFBCE21EF326F9 MF MF7380 MFR0000086
NY 17E219851E2919B9 MF MF7500 MFR0000082
NY 17E2190205A0757E MF MF7510 MFR0000082
NY 17F1F9091A0115C5 MF MF7510 MFR0000086
NY 17B4D0270B65D149 MF MF7550 MFR0000049
NY 17EC9ECD040075DA MF MF7550 MFR0000086
NY 180C5A071A5F9867 MF MF7550 MFR0000110
NY 181B46411465D489 MF MF7550 MFR0000124
NY 182D5B4F17275DB7 MF MF7550 MFR0000135
NY 17C89CE312A48935 MF MF7570 MFR0000065
NY 17EC9ED408C8F881 MF MF7570 MFR0000086
NY 17B7CFA91C2036C4 MF MF7580 MFR0000049
NY 17B84F7000921AED MF MF7590 MFR0000049
NY 17CFDF5401FFCBFA MF MF7750 MFR0000073
NY 182744500E501441 MF MF7770 MFR0000135
NY 183310B512964AD9 MF MF7770 MFR0000148
NY 17DA36180D9446AF MF MF7801 MFR0000078
AY 17EFC7FD18C19850 MF MF7802 MFR0000086
AY 180CAC46097C85A1 MF MF7802 MFR0000110
AY 181B465210425DB5 MF MF7802 MFR0000124
AY 182D5B511CD65C01 MF MF7802 MFR0000135
NY 17CCDAE2112DCA75 MF MF7901 MFR0000065
NY 180C5A090A204F52 MF MF7901 MFR0000110
NY 181D81DF0F61AD6F MF MF7901 MFR0000124
NY 182D5B650EB9A64C MF MF7901 MFR0000135
NY 17B6BBA61ED986AE MF MF7902 MFR0000049
NY 17BE92F1145A4039 MF MF7930 MFR0000060
NY 17E3DA470FBF2DCA MF MF8110 MFR0000082
NY 17E3F3E6018CD951 MF MF8120 MFR0000082
NY 17E30AB003F0D413 MF MF8130 MFR0000082
NY 16DAFC971DC41148 MF MF8150 A06M020109
NY 17E6F30703B85C70 MF MF8210 MFR0000082
NY 16DB013C0B1F2689 MF MF8230 A06M020109
NY 17D3CCD615A15867 MF MF8310 MFR0000073
NY 17E219860C653788 MF MF8500 MFR0000082
NY 17E219871038619C MF MF8600 MFR0000082
NY 17ECF6E100444310 MF MF8600 MFR0000086
NY 17B4D0320EE752C1 MF MF8610 MFR0000049
NY 17E219880A17FB3C MF MF8620 MFR0000082
NY 17ECF6E1179EF0F6 MF MF8620 MFR0000086
NY 1804395B017BF843 MF MF8620 MFR0000096
NY 180C5A551ADF4A41 MF MF8620 MFR0000110
NY 181B47AA0CC2621A MF MF8620 MFR0000124
NY 18145E6F1BB57FFF MF MF8620 MFR0000127
NY 1823ED910C7196D0 MF MF8620 MFR0000132
NY 1827E15A10164428 MF MF8620 MFR0000135
NY 1837BBDF1D3B80C3 MF MF8620 MFR0000148
NY 17BE98CE0AF90794 MF MF8630 MFR0000060
NY 17E177111B81578C MF MF8703 MFR0000082
NY 17E177151C380AAF MF MF8706 MFR0000082
NY 17EFBD2F03AB0F3D MF MF8706 MFR0000086
NY 17F6D2A4174A91AC MF MF8706 MFR0000094
NY 17E177220866FA2D MF MF8710 MFR0000082
NY 17EFC2A6109D25A0 MF MF8710 MFR0000086
NY 17F6D2A01AADF1B0 MF MF8710 MFR0000094
NY 17E1773113D52431 MF MF8717 MFR0000082
NY 17F6D2BD1DC2AEBB MF MF8717 MFR0000094
NY 17E177370642ADD6 MF MF8719 MFR0000082
NY 17EFBD3017F6D701 MF MF8719 MFR0000086
NY 17F6D2C9095BF851 MF MF8719 MFR0000094
NY 1825306302D00ECC MF MF8800 MFR0000132
NY 1828FBD50DB81F06 MF MF8800 MFR0000135
NY 183310CF0870F9F8 MF MF8800 MFR0000148
NY 182530661A8D8968 MF MF8810 MFR0000132
NY 182D5B910E0EF0F8 MF MF8810 MFR0000135
NY 183310D51F02CDAF MF MF8810 MFR0000148
NY 16DB00FE074B050D MF MF8900 A06M020109
NY 17E80DEC01CFEA6F MF MF8930 MFR0000086
NY 17F65C681AFA0C17 MF MF8930 MFR0000094
NY 1804395F04A1F110 MF MF8930 MFR0000096
NY 180C5AFC0A7C6EDC MF MF8930 MFR0000110
NY 181DF15B096DB2E8 MF MF8930 MFR0000124
NY 182D5B931642F637 MF MF8930 MFR0000135
NY 17ECA00D19A225A5 MF MF8940 MFR0000086
NY 180409331CD3960A MF MF8940 MFR0000096
NY 180BC45D1874A61D MF MF8940 MFR0000110
NY 182D5B94121827C3 MF MF8940 MFR0000135
NY 1830D0140186B080 MF MF8940 MFR0000148
NY 17B969BF10C4EB0D MF MF8950 MFR0000049
NY 17ECA016191F3115 MF MF8950 MFR0000086
NY 1804F6150525B9F8 MF MF8950 MFR0000096
NY 180C5AFF04674E40 MF MF8950 MFR0000110
NY 183310E200D244E6 MF MF8950 MFR0000148
NY 18388C3212672D71 MF YMFC010 MFR00001495A537D96
NY 17E3FDA219F8B2E5 MF YMFC101 MFR0000083578E3B26
NY 17E3FDA50EDCE63D MF YMFC104 MFR0000083578E3B39
NY 17E3FDA70B3553F1 MF YMFC105 MFR0000083578E3B49
NY 17DD8C800AD44CCF MF YMFC106 MFR000008357583124
NY 17DD81C80EF4F74D MF YMFC107 MFR00000835757D747
NY 17DD8C921658856F MF YMFC108 MFR0000083575831C8
NY 17DF67DA061ED9DE MF YMFC110 MFR00000835767C4BD
NY 17F042411DEF8610 MF YMFC110 MFR000008757F52498
NY 1805C4B109B3797C MF YMFC110 MFR000009758A985D8
NY 181051621E31615B MF YMFC110 MFR0000111590212E8
NY 181E6B50010F7276 MF YMFC110 MFR000012559785D3C
NY 1828360A066104AE MF YMFC110 MFR000013659CA812D
NY 1839ECF801680C75 MF YMFC110 MFR00001495A5F0CE2
NY 17DF67DB01343AB8 MF YMFC112 MFR00000835767C4C4
NY 17DF67DB116997D5 MF YMFC113 MFR00000835767C4CA
NY 17F33C511D25C130 MF YMFC113 MFR0000087580E1D38
NY 1806E0C001713BCA MF YMFC113 MFR000009758B2D4AC
NY 181051610E195147 MF YMFC113 MFR0000111590212EB
NY 1827DEA10ED45350 MF YMFC113 MFR000013659C7A3DF
NY 1834A059156B6111 MF YMFC113 MFR00001495A3298BA
NY 17E3FE67173EF1D2 MF YMFC114 MFR0000083578E4191
AY 17EF44991EE4910E MF YMFC115 MFR000008757ECD4C5
AY 181050D51150A800 MF YMFC115 MFR000011159020E48
AY 181B2B4C0C5D5F94 MF YMFC115 MFR0000125595D19C9
AY 18388C5611DF784A MF YMFC115 MFR00001495A537ECB
NY 17DF67DE176EF90E MF YMFC116 MFR00000835767C4E0
NN 17DE78AA1B128F76 MF YMFC118 MFR0000083575FEE4D
NY 17DAD9280BA326F3 MF YMFC202 MFR0000079574189AF
NY 17DAD9431401230E MF YMFC203 MFR000007957418A72
NY 17DADA44116B5998 MF YMFC209 MFR0000079574192C4
NY 17DAD94E0524B94E MF YMFC211 MFR000007957418AC3
NY 17DADBCF0A368F93 MF YMFC217 MFR000007957419FF1
NY 17CBCBA51BBB7632 MF YMFC219 MFR000006656C33628
NY 17CBCC4601A8601C MF YMFC220 MFR000006656C33B6B
NY 17B4CF1006234E55 MF YMFINFO MFR0000050560270B4
NY 17B4CF1015EB934D MF YMFINFO MFR0000050560270B4CICS
NY 17E218D01A2DDAA6 MF YMFLPID MFR0000082577E5826
NY 17DF68030BA4A7BF MF YMFX155 MFR00000835767C612
NY 17B594B0066C25E1 NF NF5710 NBSI000050
NY 160E6BF9131F0AC4 NF NF5800 19980514184411S101702A072505ANF5800
NY 15E265C8114413FC NF NF5890 19970807134910S101702A065780ANF5890
NY 16001C0A18FC764B NF NF5890 19980212145537S101702M000834ANF5890
NY 17D28B72048870D4 NF NF5900 NBSI000089
NY 17C93F6F1DD81E53 NF NF5910 NBSI000061
NY 17D28B730AA89FAB NF NF5910 NBSI000089
NY 17D265751A3AD9EA NF NF7330 NBSI000089
NY 177529F11C11B988 NF NF7650 NF0Y000530
NY 17C3E66A05626FD5 NF NF7670 NBSI000061
NY 178D1A51119E620C NF NF7700 NBSI000016
NY 17A3120D03333059 NF NF8610 NBSC000008
NY 17F334590968DFD8 NF NF8620 NBSC000021
NY 17E86A1003DEB37F NF NF8620 NBSC000023
NY 157E4B0F074029E2 NF NF8800 19951109S101702A049436ANF8800
NY 157F661208014560 NF NF8800 19951116S101702M000633ANF8800
NY 15EC4BC5009019D6 NF NF8800 19971009132420S101702A067383ANF8800
NY 17D327F91820E896 NF YNF0101 NBSI00005657010320
NY 17B59AD6147117C6 NF YNFBUG NBSI00005056091E27
NY 157BA294020428A8 NF YNFCGB1 19951023S101702Z214260AYNFCGB1
NY 157BABF11868E936 NF YNFCGB1 19951023S101702Z214285AYNFCGB1
NY 157BC49D1DA8EFF8 NF YNFCGB1 19951024S101702Z214404AYNFCGB1
NY 17B56E5F1C27E590 NF YNFDEAL NBSI0000505607A92A
NY 17B5E78F09FF9550 NF YNFIB03 IB00000013560BA1BD
NY 17E100E706EDBB4E NF YNFIB07 IB0000002257752C1E
NY 17F014A61E6BF77A NF YNFIB07 IB0000002357F3A607
NY 179A9A4A17FFA64D NF YNFNACL NBSI00002455269B5B
NY 17D5AA1712D7C89E NF YNFNACL NBSI00005557160D8E
NY 17FE89191E1D5672 NF YNFNACL NBSI000122586CD99C
NY 17C99D3B01C61DD9 NG YNGKWEL PROK00006556B0E9D0
NY 17C99D541D6D32D7 NG YNGPWEL PROK00006556B0EA50
NY 1536D79D0AD9ED8C NH NH5910 19940811233300S101702A036480ANH5910
NY 1536D79906531EF8 NH NH7100 19940811233217S101702A036480ANH7100
NY 17F0DD0D111CF20E NI NI0010 IPC0000156
NY 17ED156107AD3E0D NI NI0010 IPC0000170
NY 17F77A311BF2D329 NI NI0010 IPC0000171
NY 17F01A160CEF09DD NI NI0040 IPC0000156
NY 17F935EF15375BB6 NI NI0040 IPC0000171
NY 17ECCBE007D2A9DF NI NI0040 IPC0000181
NY 17F7A2610E9596F8 NI YNI0161 IPC00001715832F542
NY 180191140E0664DA NI YNI0161 IPC0000175588646FA
NY 17EC97A11FA75806 NI YNI0161 IPC000017957D662DA
NY 17C3ED151B66666A NI YNI0201 IPC0000123568132CD
NY 17C3ED15184BA740 NI YNI0202 IPC0000123568132CD
NY 17C3ED1519269AB5 NI YNI0211 IPC0000123568132CD
NY 17C3ED151D30534F NI YNI0212 IPC0000123568132CE
NY 180A76EE1874F4E7 NI YNICL01 IPC000019258D0EAF8
NY 180501E71FCD78AD NI YNICOFM IPC000017558A323CC
NY 17EA44071EF6AE44 NI YNICS01 IPC000015457C2DE87
NY 17F275440CD1EA79 NI YNICS01 IPC000015658079777
NY 180666A6195DEF59 NI YNICS01 IPC000017558AED477
NY 180B90A1009DD96F NI YNICS01 IPC000019258DA340A
NY 17F0199F1620B3C6 NI YNILBP2 IPC000015657F3CF6B
NY 17ED1531187EDE79 NI YNILBP2 IPC000017057DA8023
NY 17F019A201910994 NI YNILBP3 IPC000015657F3CF7F
NY 17F0199F01CAF950 NI YNILBPL IPC000015657F3CF61
NY 17ED15310902D10F NI YNILBPL IPC000017057DA8022
NY 1801910010BC740C NI YNILBPL IPC000017558864653
NY 180FFD741B9FE6EF NI YNILBPL IPC000019258FF52EF
NY 18134EC41F04BB6E NI YNILBPL IPC0000199591B2776
NY 17E2E0E811835ADE NI YNIPACU IPC00001415784E6AB
NY 1819985512BC9A25 NI YNIPACU IPC0000196594FE57D
NY 18271CDD03DDF6B2 NI YNIPACU IPC000020959C14A76MVS
NY 182DB4421FE368C1 NI YNIPACU IPC000022959F8874AMVS
NY 17C2D2890B97CEE1 NI YNIPREU IPC00001235677F09E
NY 18202BA600E9C7F4 NI YNIPREU IPC000019659870E1AMVS
NY 182C4B631E0A7ED2 NI YNIPREU IPC000020959ECC21DMVS
NY 182DB4B9075F6A1F NI YNIPREU IPC000022959F88B30MVS
NY 17DFBFE20F8F2023 NI YNIYTLG IPC0000141576AA733
NY 17E2E0E811835ADE NI01 YNIPACU IPC00001415784E6AB
NY 1819985512BC9A25 NI01 YNIPACU IPC0000196594FE57D
NY 18271CDD03DDF6B2 NI01 YNIPACU IPC000020959C14A76MVS
NY 182DB4421FE368C1 NI01 YNIPACU IPC000022959F8874AMVS
NY 17DFBFE20F8F2023 NI01 YNIYTLG IPC0000141576AA733
NY 17E2E0E811835ADE NI02 YNIPACU IPC00001415784E6AB
NY 1819985512BC9A25 NI02 YNIPACU IPC0000196594FE57D
NY 18271CDD03DDF6B2 NI02 YNIPACU IPC000020959C14A76MVS
NY 182DB4421FE368C1 NI02 YNIPACU IPC000022959F8874AMVS
NY 17DFBFE20F8F2023 NI02 YNIYTLG IPC0000141576AA733
NY 17C4447209FA921A NJ NJ7180 QMS0000016
NY 17D976D91B90EB24 NJ NJ7180 QMS0000021
NY 17EE39061D91F223 NJ NJ7180 QMS0000023
NY 17C8A5C31BC42BED NJ YNJ050 QMS000001656A8CDEA
NY 17D20C8007EE8080 NJ YNJ050 QMS000001956F7B92C
NY 17E06A7A0986A8D1 NJ YNJ050 QMS000002157703E45
NY 15A47D5B03D9DC8A NK NK0030V 19960709155209S101702Z256616ANK0030V
NY 15C206D6072A1C08 NK NK0200V 19970113142804S101702Z290221ANK0200V
NY 15ED6648009BB03A NK NK5010 19971016135110S101702M000847ANK5010
NY 160E6980140B1D42 NK NK5010 19980514170627S101702M000860ANK5010
NY 15FBB79906BD0AD4 NK NK5020 19980115162122S101702A069682ANK5020
NY 160E697B14D5EE52 NK NK5020 19980514170627S101702M000860ANK5020
NY 15C01FA60D4ED9B0 NK NK5030 19970101115058S101702A060411ANK5030
NY 15C39ED8061F4E74 NK NK5030 19970123175105S101702A061091ANK5030
NY 15C01FB1151D534A NK NK5040 19970101115059S101702A060411ANK5040
NY 15FBB7960A23FD42 NK NK5040 19980115162123S101702A069682ANK5040
NY 15FBB7961D3CDECC NK NK5050 19980115162124S101702A069682ANK5050
NY 160E698112EF9EDC NK NK5050 19980514170628S101702M000860ANK5050
NY 15E38BDD1ACA7F32 NK NK5110 19970814211251S101702A065977ANK5110
NY 15FBB796072CA953 NK NK5110 19980115162114S101702A069682ANK5110
NY 15FBB79707BD1CDA NK NK5120 19980115162114S101702A069682ANK5120
NY 160E69810FEBB4BA NK NK5120 19980514170629S101702M000860ANK5120
NY 15FBB7990C0EDFEA NK NK5130 19980115162115S101702A069682ANK5130
NY 160E69B30325EB5B NK NK5130 19980514170630S101702M000860ANK5130
NY 15E8FDC818210CCA NK NK5140 19970918124542S101702A066889ANK5140
NY 15FBB7971A9A83B0 NK NK5140 19980115162115S101702A069682ANK5140
NY 15E8FDCA1AE5E722 NK NK5160 19970918124543S101702A066889ANK5160
NY 15FBB79400F8B2B6 NK NK5160 19980115162116S101702A069682ANK5160
NY 15FBB79914485CBA NK NK5170 19980115162116S101702A069682ANK5170
NY 160E698103038518 NK NK5170 19980514170630S101702M000860ANK5170
NY 15CE9DEB08F6D08A NK NK5180 19970403170629S101702A062868ANK5180
NY 15FBB7970F0C0F41 NK NK5180 19980115162117S101702A069682ANK5180
NY 15E38BCA046A68F7 NK NK5190 19970814211257S101702A065977ANK5190
NY 15FBB794007A552C NK NK5190 19980115162118S101702A069682ANK5190
NY 15CE9DEC120CE330 NK NK5200 19970403170632S101702A062868ANK5200
NY 15FBB79210B53BA6 NK NK5200 19980115162118S101702A069682ANK5200
NY 15FBB7980B8106C1 NK NK5210 19980115162119S101702A069682ANK5210
NY 15B3198106D4ACDA NK NK5240 19961010145701S101702A057697ANK5240
NY 15C01FA505B2FBC2 NK NK5240 19970101115037S101702A060411ANK5240
NY 153E80C716BFB5BE NK NK5240V 19940929172932S101702A037879ANK5240V
NY 15DE008000BCD94E NK NK5310 19970710143127S101702A065189ANK5310
NY 160E69A70EAB22AB NK NK7000 19980514170631S101702M000860ANK7000
NY 15B3198115703F7A NK NK7030 19961010145702S101702A057697ANK7030
NY 15C01FA80EE059B8 NK NK7030 19970101115041S101702A060411ANK7030
NY 1584E7FC02BEC326 NK NK7050 19951221S101702A050630ANK7050
NY 15CE9DED060E7572 NK NK7050 19970403170633S101702A062868ANK7050
NY 15EC6F261F3D978E NK NK7200 19971010103011S101702Z338761ANK7200
NY 15ED663E151A0002 NK NK7200 19971016135112S101702M000847ANK7200
NY 15F0B3DA1583261A NK NK7300 19971106141951S101702A068097ANK7300
NY 15F633341D5D0D06 NK NK7300 19971211135159S101702A068963ANK7300
NY 15819756011997CC NK NK7800 19951130S101702A049919ANK7800
NY 15C01FCD02A4E69C NK NK7800 19970101115537S101702A060424ANK7800
NY 1578CD8D14602938 NK NK7810 19951005S101702A048293ANK7810
NY 15C01FCD1B398D1C NK NK7810 19970101115539S101702A060424ANK7810
NY 15C01FCF11D74902 NK NK7840 19970101115540S101702A060424ANK7840
NY 15C2860910718C26 NK NK7910 19970116182042S101702A060940ANK7910
NY 15E38C0C1563C3E6 NK NK7910 19970814211302S101702A065977ANK7910
NY 15B3197E141AF95C NK NK7920 19961010145703S101702A057697ANK7920
NY 15C01FA31137941C NK NK7920 19970101115048S101702A060411ANK7920
NY 15C01FA715760F8A NK NK7930 19970101115051S101702A060411ANK7930
NY 15E38C371965C976 NK NK8010 19970814211305S101702A065977ANK8010
NY 160E69B90A21EFD4 NK NK8010 19980514170632S101702M000860ANK8010
NY 15E38C3A10D4453E NK NK8020 19970814211307S101702A065977ANK8020
NY 15CE9DF109460DA8 NK NK8030 19970403170634S101702A062868ANK8030
NY 160E69B90A5D5710 NK NK8030 19980514170633S101702M000860ANK8030
NY 15AB67041486344C NK NK8040 19960822153011S101702A056584ANK8040
NY 15C01FD116E4DD16 NK NK8040 19970101115540S101702A060424ANK8040
NY 160E69B90A43C29D NK NK8050 19980514170633S101702M000860ANK8050
NY 15CE9DF40E3F8606 NK NK8060 19970403170636S101702A062868ANK8060
NY 160E69AC1DE0B3AA NK NK8060 19980514170635S101702M000860ANK8060
NY 15F2E6271C5658E4 NK NK8080 19971120134500S101702A068428ANK8080
NY 15F51A1312E2B2B8 NK NK8080 19971204140627S101702A068796ANK8080
NY 15C01FD2160756D8 NK NK8090 19970101115541S101702A060424ANK8090
NY 15E38C3A0AB69AD4 NK NK8090 19970814211329S101702A065977ANK8090
NY 15A29BAC004F4372 NK NK8110 19960627163246S101702A055267ANK8110
NY 15B0E8C805FC95B8 NK NK8110 19960926162634S101702A057441ANK8110
NY 1577B36A17DC34EC NK NK8120 19950928S101702A048069ANK8120
NY 15FBB795196939D6 NK NK8120 19980115162120S101702A069682ANK8120
NY 15C01FCF1A051F5E NK NK8140 19970101115542S101702A060424ANK8140
NY 15FBB793138E453A NK NK8140 19980115162120S101702A069682ANK8140
NY 16013B4D0BCD7988 NK NK8150 19980219182538S101702A070555ANK8150
NY 15A180CB005D4B60 NK NK8160 19960620154603S101702A055102ANK8160
NY 15E38BDB0CE4AA8A NK NK8160 19970814211337S101702A065977ANK8160
NY 15B0E8C807928D88 NK NK8170 19960926162637S101702A057441ANK8170
NY 15C06DBE1C90143C NK NK8170 19970103102547S101702Z287047ANK8170
NY 160E696107986578 NK NK8180 19980514170648S101702M000860ANK8180
NY 15E4C12214223BA0 NK NK8190 19970822134421S101702Z329315ANK8190
NY 15E4C7811C05C7DA NK NK8190 19970822173219S101702Z329367ANK8190
NY 15FBB7971322DA28 NK NK8200 19980115162121S101702A069682ANK8200
NY 15FF01081524D7FA NK NK8210 19980205141816S101702A070186ANK8210
NY 15C01FAA0C5D0E08 NK NK8240 19970101115054S101702A060411ANK8240
NY 15C3E1FD05C9EDC6 NK NK8240 19970125095418S101702Z292839ANK8240
NY 15C4702F0D655FA4 NK NK8250 19970128224355S101702Z293392ANK8250
NY 15C4B09E0E28CB62 NK NK8250 19970130130932S101702A061205ANK8250
NY 15E7E44D0227B828 NK NK8300 19970911124909S101702A066744ANK8300
NY 16024C2106179BEE NK NK8300 19980226131317S101702A070680ANK8300
NN 15314D3F0F7571DC NK NK8820 19940707172646S101702A034690ANK8820
NY 15A29BC20A6A31EA NK NK8820 19960627163516S101702A055244ANK8820
NY 15EB5F591BBBB8DC NK NK8830 19971003162239S101702Z337521ANK8830
NY 15EC4D86030E9CC6 NK NK8830 19971009142704S101702A067321ANK8830
NY 15B3198200AC8152 NK NK8840 19961010145703S101702A057697ANK8840
NY 15C01FAF1E8F5952 NK NK8840 19970101115056S101702A060411ANK8840
NN 14D19348082F3664 NK YNKSICB
NN 15314CDE10629F62 NK YNKSICH 19940707172101S101702A034690AYNKSICH
NY 15A3669119218106 NK YNKSICH 19960702173409S101702Z255596AYNKSICH
NY 15A367EB0458EF64 NK YNKSICH 19960702182225S101702Z255600AYNKSICH
NY 15A38085003F6236 NK YNKSICH 19960703090225S101702Z255632AYNKSICH
NY 15A3815617169F42 NK YNKSICH 19960703093214S101702Z255641AYNKSICH
NY 15A3849C08157772 NK YNKSICH 19960703112609S101702Z255691AYNKSICH
NY 15A3853809C6F690 NK YNKSICH 19960703115112S101702Z255698AYNKSICH
NY 15A3864C05CBCF0C NK YNKSICH 19960703122934S101702Z255706AYNKSICH
NY 15A386DF0D910736 NK YNKSICH 19960703125020S101702Z255709AYNKSICH
NY 15A388181B4E8C26 NK YNKSICH 19960703133410S101702Z255717AYNKSICH
NY 15A389C810DECC7A NK YNKSICH 19960703143433S101702Z255741AYNKSICH
NY 15A38B690CA93038 NK YNKSICH 19960703153248S101702Z255754AYNKSICH
NY 15A3B5F213130F1A NK YNKSICH 19960704165443S101702A055614AYNKSICH
NY 15A44F43154DBB4A NK YNKSICH 19960708122220S101702Z256269AYNKSICH
NY 15A473AE105D8776 NK YNKSICH 19960709100619S101702Z256439AYNKSICH
NY 15A4CA36111F8B04 NK YNKSICH 19960711134332S101702A055711AYNKSICH
NY 15E14BDB0D20C6A6 NK YNKSIKO 19970731133829S101702A065623AYNKSIKO
NY 15E265021294AEE0 NK YNKSIKO 19970807132139S101702A065737AYNKSIKO
NY 15E37F12121B0734 NK YNKSIKO 19970814133711S101702A066053AYNKSIKO
NY 15E6CBAC0AB915C2 NK YNKSIKO 19970904132615S101702A066558AYNKSIKO
NY 15E6CE9202DE8DB2 NK YNKSIKO 19970904151013S101702A066558AYNKSIKO
NY 15E7E436138F1E34 NK YNKSIKO 19970911124743S101702A066744AYNKSIKO
NY 15EA19240BF3D950 NK YNKSIKO 19970925134637S101702A067064AYNKSIKO
NY 15FF00FA1F905D02 NK YNKSIKO 19980205141607S101702A070186AYNKSIKO
NY 14BDCCF717FA5A58 NK YNKUMW
NY 152439AB022CE1D8 NK YNKUMW 19940415123746S101702A032855AYNKUMW
NY 1524452F17C0528E NK YNKUMW 19940415193036S101702A032855AYNKUMW
NY 15314CDE09B635FC NK YNKUMW 19940707172102S101702A034690AYNKUMW
NY 1792E87101DD88BC NL NL5000 BALR000012
NY 1829730E0C5E414F NL NL5000 BALR000074
NY 1838881D0C28FF5E NL NL5000 BALR000076
NY 17E17D200ED28855 NL NL7310 BALR000041
NY 17E541E61B5BB0F1 NL NL7310 BALR000054
NY 180279C2069FFE55 NL NL7310 BALR000059
NY 180DEF8E1DD0B7B4 NL NL7310 BALR000067
NY 17FB15960BB34F41 NL NL7310 BALR000068
NY 18132445031B1F90 NL NL7310 BALR000073
NY 18299E0A1B8A37C5 NL NL7310 BALR000074
NY 17A6138E00CF7951 NL NL7590 BALR000005
NY 18127FB40FCF83CC NL NL7590 BALR000073
NY 1829732B1DEAE0B5 NL NL7590 BALR000074
NY 18388827038BF38D NL NL7590 BALR000076
NY 17C61F55163CB46B NL NL7750 BALR000023
NY 1817AC6D140EC561 NL NL7750 BALR000073
NY 18297331135D2DA7 NL NL7750 BALR000074
NY 1806192806FD9A76 NL NL7810 BALR000059
NY 1808754616BC7D5C NL NL7810 BALR000067
NY 1817AC22075B1ED5 NL NL7810 BALR000073
NY 1829733718EFB4E1 NL NL7810 BALR000074
NY 17CB6F6D0AD01100 NL NL8060 PSFG000032
NY 17C999B40844883E NL YNL0200 BALR00003156B0CC3B
NY 182E80B41CFDC381 NL YNL0200 BALR00007659FF3A58
NY 17593D4A17D6C6E1 NL YNLG010 A12P00279953023EDA
NY 181E9A8A04C771C1 NL YNLG010 BALR0000745979E96A
NY 181E9A8B15ED54C9 NL YNLG010 BALR0000745979E96AMVS
NY 1792E7CD0260E1C6 NL YNLG020 BALR00001254E5FBC3
NY 181E9A8A1F14EB08 NL YNLG020 BALR0000745979E96F
NY 181E9A8C11D79061 NL YNLG020 BALR0000745979E96FMVS
NY 1792E7CD17B69B75 NL YNLG021 BALR00001254E5FBC9
NY 181E9A961D32134D NL YNLG021 BALR0000745979E970
NY 181E9A981089E351 NL YNLG021 BALR0000745979E970MVS
NY 17853DE116071900 NL YNLG030 BALR00000154735D18
NY 181E9A9506609863 NL YNLG030 BALR0000745979E975
NY 181E9A961A1B1F19 NL YNLG030 BALR0000745979E975MVS
NY 1759B1E30CA3442E NL YNLG03M A12P002799530610F5
NY 181E9A911CD76552 NL YNLG03M BALR0000745979E978
NY 181E9A940256406D NL YNLG03M BALR0000745979E978MVS
NY 1759B1E41FC78AD8 NL YNLG040 A12P00279953061102
NY 181E9A8D1E49D86D NL YNLG040 BALR0000745979E97E
NY 181E9A8F16F647CE NL YNLG040 BALR0000745979E97EMVS
NY 181E9A8E1C984020 NL YNLG050 BALR0000745979E97F
NY 181E9A900B8BBA37 NL YNLG050 BALR0000745979E97FMVS
NY 181E9A9A0DF5E05F NL YNLG060 BALR0000745979E986
NY 181E9A9B1F0D1C6C NL YNLG060 BALR0000745979E986MVS
NY 1759B1E613B468AD NL YNLG120 A12P0027995306110F
NY 181E9A951A3BFEC5 NL YNLG120 BALR0000745979E98C
NY 181E9A970E2FCC26 NL YNLG120 BALR0000745979E98CMVS
NY 175A25021AD53DA6 NL YNLG121 A12P0028275309D6A8
NY 181E9A9118DF15AC NL YNLG121 BALR0000745979E992
NY 181E9A930E7C61F7 NL YNLG121 BALR0000745979E992MVS
NY 17853DE417AE0D72 NL YNLG130 BALR00000154735D32
NY 181E9A9207C58B64 NL YNLG130 BALR0000745979E995
NY 181E9A931D8BFB31 NL YNLG130 BALR0000745979E995MVS
NY 1759B1EA0013827A NL YNLG140 A12P0027995306112C
NY 181E9A9E09280926 NL YNLG140 BALR0000745979E99A
NY 181E9AA0008DEBB0 NL YNLG140 BALR0000745979E99AMVS
NY 17E289E710ACC65A NO NO0960 NO00000024
NY 17F815A60F7CD9CF NO NO0960 NO00000029
NY 1804A5D60BEAF7FE NO NO0960 NO00000031
NY 17F224E40780A2A1 NO NO0970 NO00000027
NY 17F93A0E0A056D1E NO NO0970 NO00000029
NY 17EF4E071D27AD04 NO NO0970 NO00000030
NY 1804FD7A1C3AEF0F NO NO0970 NO00000031
NY 1809651C0769BA6E NO NO0970 NO00000043
NN 153E7FBB0756338E NP NP0150 19940929164937S101702A037741ANP0150
NN 153E7FC118938A50 NP NP0350 19940929164943S101702A037741ANP0350
NN 1550165410E3E754 NP NP0360 19950119144601S101702A040974ANP0360
NN 159A729C0A67B488 NP NP0360 19960506182034S101702A053948ANP0360
NN 15A3B13219B50242 NP NP0360 19960704140529S101702A055458ANP0360
NN 1550165606826216 NP NP0380 19950119144602S101702A040974ANP0380
NN 159A729C01E677BA NP NP0380 19960506182034S101702A053948ANP0380
NN 153E7B280AFB7FB2 NP NP0410 19940929140633S101702A037741ANP0410
NN 153E7DD602FA26F4 NP NP0410 19940929154021S101702A037741ANP0410
NN 153E7FC001CF8D96 NP NP0410 19940929164945S101702A037741ANP0410
NY 153E7B130CEBC334 NP NP5000 19940929140635S101702A037741ANP5000
NY 153E7DB6002CF3DC NP NP5000 19940929154023S101702A037741ANP5000
NY 153E7FA61D05A1E4 NP NP5000 19940929164946S101702A037741ANP5000
NY 153E7B171E7B3A96 NP NP5020 19940929140638S101702A037741ANP5020
NY 153E7DB71AA308AE NP NP5020 19940929154025S101702A037741ANP5020
NY 153E7FA71B267462 NP NP5020 19940929164947S101702A037741ANP5020
NN 153E7B19094B32AE NP NP5140 19940929140642S101702A037741ANP5140
NN 153E7DBA018C90C6 NP NP5140 19940929154033S101702A037741ANP5140
NN 153E7FB20648D722 NP NP5140 19940929164951S101702A037741ANP5140
NN 153E7B2217F07080 NP NP5160 19940929140644S101702A037741ANP5160
NN 153E7DBA1A764744 NP NP5160 19940929154036S101702A037741ANP5160
NN 153E7FAE1253A898 NP NP5160 19940929164952S101702A037741ANP5160
NN 1542E2460E713678 NP NP5220 19941027143040S101702A038705ANP5220
NN 155015C505BA4FF0 NP NP5220 19950119142451S101702A040974ANP5220
NN 1550165107CCBF5A NP NP5220 19950119144603S101702A040974ANP5220
NN 1541C8B915576224 NP NP5240 19941020142956S101702A038461ANP5240
NY 145AC3DE1E7492B4 NP NP5410
NY 153E7B0A028667F8 NP NP5450 19940929140523S101702A037741ANP5450
NY 153E7DB4050704A8 NP NP5450 19940929153937S101702A037741ANP5450
NY 153E7FAA0014F3E8 NP NP5450 19940929164921S101702A037741ANP5450
NN 154861C906032F1C NP NP5460 19941201140647S101702A039881ANP5460
NN 153E7B0B00CD14FC NP NP5470 19940929140527S101702A037741ANP5470
NN 153E7DB105EE7A00 NP NP5470 19940929153939S101702A037741ANP5470
NN 153E7FAC1192DB16 NP NP5470 19940929164922S101702A037741ANP5470
NN 153E7B0A182F90E4 NP NP7210 19940929140529S101702A037741ANP7210
NN 153E7DAF18047F02 NP NP7210 19940929153942S101702A037741ANP7210
NN 153E7FAB14766166 NP NP7210 19940929164923S101702A037741ANP7210
NN 153E7B0F098F1ABC NP NP8330 19940929140550S101702A037741ANP8330
NN 153E7DB0071BDD0C NP NP8330 19940929153955S101702A037741ANP8330
NN 153E7FA40712F05C NP NP8330 19940929164930S101702A037741ANP8330
NN 153E7B1000FB9A9E NP NP8340 19940929140557S101702A037741ANP8340
NN 153E7DB0123A7E74 NP NP8340 19940929153957S101702A037741ANP8340
NN 153E7FA31776C104 NP NP8340 19940929164931S101702A037741ANP8340
NN 153E7FA419229B0A NP NP8350 19940929164931S101702A037741ANP8350
NY 153E7FA20964DA96 NP NP8900 19940929164933S101702A037741ANP8900
NY 1579E5EC1052194C NR NR8000 19951012S101702M000624ANR8000
NY 15A93269122828C2 NS NS0890 19960808144239S101702A056331ANS0890
NY 15AA4B82062790A6 NS NS0890 19960815142208S101702A056403ANS0890
NY 15AB65010A6D2094 NS NS0890 19960822141851S101702A056667ANS0890
NY 157D30BB10C36622 NS NS7340 19951102S101702A049013ANS7340
NY 15C4B64605F19458 NS NS7340 19970130162854S101702A061187ANS7340
NY 15E3ACDC1F4C8A0C NS NS7340 19970815165414S101702A066076ANS7340
NY 15B773460A9F1336 NTA1P AT0070 CIMA000450
NY 15F405F003470AA0 NTA1P AT0070 CIMA000651
NY 16056B3209A926D0 NTA1P AT0070 CIMA000663
NY 160D76330C1BB10E NTA1P AT0090 CIMA000675
NY 15C55AE81CEC8448 NTA1P BC0003
NY 15FC723819E10812 NTA1P BC0003 CRMB000360
NY 164CC3B61B3D3EA8 NTA1P BC0003 CRMB000430
NY 15C579911DD9F6FA NTA1P BC0007 CRMB000170
NY 15FC723D17259AAA NTA1P BC0007 CRMB000360
NY 164CC3B810E51406 NTA1P BC0007 CRMB000430
NY 15C55A7209B71720 NTA1P BC0008 CRMB000170
NY 160E3D4004D8CEAC NTA1P BC0008 CRMB000360
NY 164CC3B916F8BBA5 NTA1P BC0008 CRMB000430
NY 15C55A79161257AA NTA1P BC0009 CRMB000170
NY 15FC723F1F45C850 NTA1P BC0009 CRMB000360
NY 164CC3BA0A82A16C NTA1P BC0009 CRMB000430
NY 15E46C5C0A727582 NTA1P BC0010 CRMB000254
NY 15FC72411FBD4502 NTA1P BC0010 CRMB000360
NY 164CC3B916A79FDF NTA1P BC0010 CRMB000430
NY 15C5799E139FC882 NTA1P BC0011 CRMB000170
NY 15FC724C0C76ADAC NTA1P BC0011 CRMB000360
NY 164CC69E05E9A57D NTA1P BC0011 CRMB000430
NY 17D11FC61AB273AA NTA1P CZA0013 A02E00056056EFE947
NY 174C801D129F8729 NTA1P CZA0181 A02E00047752976218
NY 17E05AAF01209F80 NTA1P CZA0183 A02E000561576FB9C6
NY 17B0B8DF09918748 NTA1P CZA0199 A02E00053855E028A9
NY 17F0DFF103776A51 NTA1P CZA0199 A02E00056457FA4F4F
NY 17FA1F9B14D3A50E NTA1P CZA0199 A02E0005675847D69B
NY 1797EB891B98AD0E NTA1P CZA0213 A02E00053555100C8A
NY 1801D2830664796E NTA1P CZA0213 A02E00056858886BDA
NY 181B2CA70747BA47 NTA1P CZA0213 A02E000575595D2527
NY 182883500256596E NTA1P CZA0213 A02E00058259CD0967
NY 17A778591CDD885E NTA1P CZA0215 A02E00054455928C16
NY 1837E54B04003412 NTA1P CZA0215 A02E0005745A4E0589
NY 181B2CD40E454CD7 NTA1P CZA0215 A02E000575595D269F
NY 1828835214C3F08C NTA1P CZA0215 A02E00058259CD097C
NY 1797EB8B0C383C66 NTA1P CZA0219 A02E00053555100C98
NY 17FE89A8071E1E31 NTA1P CZA0219 A02E000568586CDE37
NY 17A7785D0A8DF25E NTA1P CZA0255 A02E00054455928C30
NY 1804D0C01197DBE9 NTA1P CZA0255 A02E00057158A18784
NY 1828834913A18388 NTA1P CZA0255 A02E00058259CD092F
NY 17850A5A17654490 NTA1P CZA0257 A02E0005225471ACDA
NY 1579E5E407BBB824 NTA1P NR7110 19951012S101702M000624ANR7110
YY 41534E434F4D4F4E NULLID ASNDD800
YY 41534E434F4D4F4E NULLID ASNDD802
YY 41534E434F4D4F4E NULLID ASNDD880
NY 1588FBAE0A59BFA4 NV NVB903
NY 15A6AACE1E9C1C70 NV NVB918
NY 15A6AAD0074AB930 NV NVB920
NY 15A6AAE513F1AFDC NV NVO006 A
NY 15A6AAE61D4AFBC4 NV NVO010 A
NY 15A6AAE803ECB232 NV NVO017 A
NY 15A6AAE9170D4F1E NV NVO018 A
NY 15AA1A950EE8DA80 NV NVO019 A
NY 15ADB61F03B915D2 NV NVO020 A
NY 15A6AAEE01EF28CA NV NVO021 A
NY 15A6AAEF0A8F7B26 NV NVO025 A
NY 15A6AAF10DB35B92 NV NVO026 A
NY 15A6AAF30DC4D072 NV NVO027 A
NY 15A6AAF50434AD26 NV NVO028 A
NY 15A6AAF60F14731A NV NVO029 A
NY 15A6AAF80F0F286A NV NVO030 A
NY 15A8B66613CAEE1A NV NVO031 A
NY 15A8B66804FFEB10 NV NVO032 A
NY 15ADB62014964020 NV NVO033 A
NY 15A6AB001F21D428 NV NVO034 A
NY 15A6AB0303803432 NV NVO037 A
NY 15A6AB04146F88A2 NV NVO038 A
NY 15A6AB061B3FF1D2 NV NVO039 A
NY 15A6AB080A79D41C NV NVO041 A
NY 15A6AB0A12B3CC6E NV NVO042 A
NY 15A6AB0E05249D5E NV NVO043 A
NY 15A6AB1007536DA2 NV NVO045 A
NY 15A6AB11111D130C NV NVO046 A
NY 15A8B6690C72F090 NV NVO047 A
NY 15A8B66A1128A3B2 NV NVO048 A
NY 15A8B66B1428113A NV NVO049 A
NY 15A6AB180DAD2BC8 NV NVO052 A
NY 15A6AB1A00BC6B9A NV NVO053 A
NY 15A6AB1C098476F4 NV NVO055 A
NY 15A8B66C17A83058 NV NVO057 A
NY 15A8B66E0AE2C03A NV NVO059 A
NY 15A6AB210377C2D8 NV NVO060 A
NY 15A6AB220AAA24E8 NV NVO064 A
NY 15A6AB2312944F52 NV NVO070 A
NY 15A6AB441BB654AC NV NVO071 A
NY 15A8B66F0F289152 NV NVO072 A
NY 15A8B67016A44208 NV NVO073 A
NY 15A8B6711667976A NV NVO074 A
NY 15A6AB4A11EB62EE NV NVO075 A
NY 15A6AB4B19A8714A NV NVO076 A
NY 15A6AB4C1F4F8476 NV NVO077 A
NY 15A6AB4E020C4D34 NV NVO079 A
NY 15A6AB4F082AD5EC NV NVO080 A
NY 15A6AB500EBE7A3C NV NVO081 A
NY 15A6AB5119C49A16 NV NVO082 A
NY 15A6AB5300411CDC NV NVO083 A
NY 15F74CAC1BC48BE2 NZ NZ0600 19971218134244S101702A069183ANZ0600
NY 15FBBB4C06BD50AC NZ NZ0600 19980115181659S101702M000856ANZ0600
NY 17DFBCB81F8E99F5 NZ NZDBM83 ZVBI000015
NY 180323EE1C786D10 NZ NZDBM83 ZVBI000016
NY 1819B3830335DA1F NZ NZDBM83 ZVBI000019
NY 182D843E1441CBDD NZ NZDBM83 ZVBI000021
NY 17DE50400164A6D7 NZ NZSRV07 NZV0000086
NY 1760E44D07EA9896 NZ YNZGSEL A14S00239353427E48
NN 15A065B2085DEAB6 OD OD7020 19960613145427S101702A054902AOD7020
NN 16047FDE199109B6 OD OD7020 19980312133153S101702A070916AOD7020
NN 1614FF570293BFCE OD OD7020 19980625145544S101702A073365AOD7020
NN 15722FC207B30E46 OD OD7030 19950824S101702A047131AOD7030
NN 16047FDE1E51C834 OD OD7030 19980312133154S101702A070916AOD7030
NN 1614FF57028B8196 OD OD7030 19980625145545S101702A073365AOD7030
NY 158FE3AD1235443C OD OD7040 19960229135951S101702Z236394AOD7040
NY 15900A580F7C701C OD OD7040 19960301130327S101702Z236556AOD7040
NY 15A4CA220446E228 OD OD7040 19960711133939S101702A055623AOD7040
NN 1561B06008E6F7A8 OD OD7060 19950511S101702A044280AOD7060
NN 1564FCBF1B89E4C2 OD OD7060 19950601S101702A044892AOD7060
NN 15B4C963192AEF16 OD OD7070 19961021083513S101702Z271571AOD7070
NY 15B51A7D199D9A24 OD OD7070 19961023085719S101702Z272282AOD7070
NN 15B54BFC04AE28D2 OD OD7070 19961024142938S101702A058057AOD7070
NN 1561B05B1D171304 OD OD7080 19950511S101702A044280AOD7080
NN 1569644714F8674C OD OD7080 19950629S101702A045721AOD7080
NN 15722FCB08638FB6 OD OD7080 19950824S101702A047131AOD7080
NY 15B40DC60E2F4AEC OD OD7090 19961016164015S101702Z271012AOD7090
NY 15B4266812918F8C OD OD7090 19961017072106S101702Z271040AOD7090
NN 15B54BFE03C58C7A OD OD7090 19961024142939S101702A058057AOD7090
NN 15E260F0076D2896 OD OD7120 19970807105631S101702Z325951AOD7120
NN 15E307311C9AEB1C OD OD7120 19970811140607S101702Z326413AOD7120
NN 15E4985310722626 OD OD7120 19970821132306S101702A066166AOD7120
NY 1542E523167958DE OD OD7130 19941027161308S101702A038607AOD7130
NY 1559FBC51AE55158 OD OD7130 19950323140241S101702A043077AOD7130
NY 15A5E43B027E4AE2 OD OD7140 19960718135641S101702A055864AOD7140
NN 15BDAF3816486C28 OD OD7140 19961216232158S101702Z284121AOD7140
NN 15BE188E11702BC2 OD OD7140 19961219141048S101702A060087AOD7140
NN 15BDAF850B130042 OD OD7160 19961216233243S101702Z284130AOD7160
NN 15BE188E1D22C28C OD OD7160 19961219141049S101702A060087AOD7160
NN 15DCE97618BA00D2 OD OD7160 19970703160630S101702M000808AOD7160
NY 159F1F9D056530F8 OD OD7180 19960605122405S101702Z251474AOD7180
NY 159F209D1C35DE50 OD OD7180 19960605130003S101702Z251474AOD7180
NY 15A065B21E2D642E OD OD7180 19960613145428S101702A054902AOD7180
NY 1579E2F81F395BA6 OD OD7181 19951012S101702A047632AOD7181
NY 1579E2F81F165102 OD OD7182 19951012S101702A047632AOD7182
NY 1579E2F9040DF786 OD OD7183 19951012S101702A047632AOD7183
NY 1579E2F81F61A244 OD OD7184 19951012S101702A047632AOD7184
NY 159F25C110697C1A OD OD7190 19960605160459S101702Z251541AOD7190
NY 159F4050063CDFDE OD OD7190 19960606075419S101702Z251583AOD7190
NY 15A065B208FDDAC4 OD OD7190 19960613145420S101702A054902AOD7190
NY 159F2644044405D0 OD OD7200 19960605162215S101702Z251546AOD7200
NY 159F41410FF73816 OD OD7200 19960606082803S101702Z251591AOD7200
NY 15A065B01F4CBAAE OD OD7200 19960613145421S101702A054902AOD7200
NY 1538FD1902DC78DC OD OD7210 19940825152244S101702A036730AOD7210
NY 15497B9306CFC3AA OD OD7210 19941208141347S101702A040106AOD7210
NY 15A5E43D001165A4 OD OD7210 19960718135643S101702A055864AOD7210
NN 15E260FF1AD87A60 OD OD7220 19970807105824S101702Z325954AOD7220
NN 15E307311CE48676 OD OD7220 19970811140644S101702Z326415AOD7220
NN 15E4985317E6DF28 OD OD7220 19970821132318S101702A066166AOD7220
NY 15A5E43C1E0849A4 OD OD7240 19960718135643S101702A055864AOD7240
NN 15BDAF64190A50D6 OD OD7240 19961216232811S101702Z284125AOD7240
NN 15BE188E0B5D6AE4 OD OD7240 19961219141032S101702A060087AOD7240
NN 15E49BB90DD8A742 OD OD7280 19970821152509S101702A066237AOD7280
NN 15E49DAB00073D2E OD OD7280 19970821163430S101702A066237AOD7280
NN 15BA7FDF14FE8878 OD OD7281 19961126165931S101702Z279665AOD7281
NN 15BAA8C80BF90382 OD OD7281 19961127172307S101702Z280020AOD7281
NN 15BBE9D11D9FA064 OD OD7281 19961205165458S101702A059431AOD7281
NN 15BBE9D80AF439BC OD OD7290 19961205165500S101702A059431AOD7290
NN 15DCE96A13B4CF7D OD OD7290 19970703160551S101702M000808AOD7290
NN 160D4EB506A0BA32 OD OD7290 19980507163236S101702A072127AOD7290
NN 15C0F22E0200F9E0 OD OD7300 19970106172633S101702A060567AOD7300
NN 15C1184616692102 OD OD7300 19970107160900S101702A060607AOD7300
NN 15DCE96B0A746A34 OD OD7300 19970703160555S101702M000808AOD7300
NN 161731C706E6862C OD OD7330 19980709142526S101702A073729AOD7330
NN 158FE3F611A3A804 OE OE0121 19960229141006S101702A052336AOE0121
NN 15967DBB1E0700C4 OE OE0122 19960411140916S101702A053315AOE0122
NN 15547BA618681B1A OE OE8100 19950216140325S101702A041670AOE8100
NN 15C91D4E16526614 OE OE8110 19970227165001S101702A062050AOE8110
NN 15EE073D05414D44 OE OE8110 19971020135626S101702A067670AOE8110
NN 15EF9953169B4B92 OE OE8110 19971030134735S101702A067911AOE8110
NN 1573501403114C10 OE OE8130 19950831S101702A047271AOE8130
NN 157372D10F32D664 OE OE8130 19950901S101702Z206327AOE8130
NN 1577B0AC1F80CA24 OE OE8130 19950928S101702A048025AOE8130
NY 15D880C90BD262C7 OE OE8730 19970605144943S101702A064421AOE8730
NY 15DAB2A214E69C4E OE OE8730 19970619135856S101702A064828AOE8730
NY 15ED663514692BB4 OE OE8730 19971016135122S101702M000847AOE8730
NY 15E5B37C1C9BC708 OE OE8740 19970828141800S101702A066323AOE8740
NY 15ED663812316026 OE OE8740 19971016135123S101702M000847AOE8740
NY 15AC7E4319D3B274 OE OE9250 19960829140415S101702A056744AOE9250
NN 156B96481BDF3CC6 OE YOE001 19950713S101702A046149AYOE001
NN 156CAF70043ACFA8 OE YOE001 19950720S101702A046302AYOE001
NN 157699F50D13CDEE OE YOE001 19950921S101702A047890AYOE001
NN 15944B1C1B80BB9E OE YOE001 19960328143211S101702A052974AYOE001
NN 157D301B0DD64256 OE YOE0135 19951102S101702A048966AYOE0135
NY 17E32CC10A0EDFD4 OE YOE0610 OE00000010578762EB
NY 174653F412B34674 OE YOE2BP1 A12M0057985263A8B2
NN 157699F50D25B2C4 OE YOEM001 19950921S101702A047890AYOEM001
NN 156CAF74003D11EA OE YOEM002 19950720S101702A046302AYOEM002
NN 157699F50BF3642C OE YOEM002 19950921S101702A047890AYOEM002
NY 15D64FC610D2249B OE YOERFT7 19970522160854S101702A064061AYOERFT7
NY 15D671C0104E00CF OE YOERFT7 19970523122650S101702A064061AYOERFT7
NY 15D673CE056136D4 OE YOERFT7 19970523134012S101702A064061AYOERFT7
NY 15D674C7054425CF OE YOERFT7 19970523141454S101702A064126AYOERFT7
NY 15D6753B1DFF9BE9 OE YOERFT7 19970523143128S101702A064126AYOERFT7
NY 15D675D300BB6FAA OE YOERFT7 19970523145200S101702A064126AYOERFT7
NY 15D67759157448A5 OE YOERFT7 19970523154739S101702A064126AYOERFT7
NY 15E5B3560A8ED0AC OE YOERFT7 19970828141213S101702A066323AYOERFT7
NY 15F0B55619A2D6E2 OE YOERFT7 19971106151230S101702A068068AYOERFT7
NY 14EE2F5605F30ED2 OE YOEUP04
NY 14EE2F351C6A102A OE YOEUP12
NY 14EE2F4118554B46 OE YOEUP77
NY 170911FC02109FB2 OS DB2EBS01 A18Q001546
NY 16A0E2DE050ED758 OS DB2EBS01 P
NY 17092E460340E889 OS DB2EBS01 PROD
NY 170911FD102F5F69 OS DB2EBS03 A18Q001546
NY 17092E5208951A26 OS DB2EBS03 PROD
NY 170911FF0F90A2CE OS DB2REORG A18Q001546
NY 17092E540EE441CE OS DB2REORG PROD
NY 15983BA301EB9E34 OS OS7240 A
NY 15AC2D7406EA6486 OS OS7293 A
NY 17E2E6171F7F7D26 PC PC5090 IVN0000021
NY 17F1F95105A101D9 PC PC5090 IVN0000024
NY 180070031036C12C PC PC5090 IVN0000028
NY 181A0B0A1AC0A815 PC PC5090 IVN0000032
NY 183975060C170859 PC PC5090 IVN0000038
NY 1804DCFF0D79368E PC PC5150 IVN0000028
NY 181A0B080BF89FC9 PC PC5150 IVN0000032
NY 183975071CBB84AE PC PC5150 IVN0000038
NY 17FFCE6B1860F4FF PC PC7030 IVN0000028
NY 1801AB8000E4FC2A PC PC7040 IVN0000028
NY 1828594E0D8AD6F9 PC PC7100 IVN0000035
NY 183308EF0D81CF79 PC PC7100 IVN0000038
NY 17FFCE721AAECE28 PC PC8000 IVN0000028
NY 181A0B120AA93F9D PC PC8000 IVN0000032
NY 182880AB1AEAFF22 PC PC8000 IVN0000035
NY 183308F108599050 PC PC8000 IVN0000038
NY 15042DE013A65CA6 PC YPC0002
NY 152530551E109B3C PC YPC0002 19940421153633S101702M000442AYPC0002
NY 17DECAA21F33F9F9 PC YPC0570 IVN000002157629DE6
NY 17F1785E18354C15 PC YPC0570 IVN000002457FF4E06
NY 180B70A00648C18F PC YPC0570 IVN000003058D9279F
NY 1817AF13117B8DB4 PC YPC0570 IVN0000032593FDD43
NY 1833083003B5796C PC YPC0570 IVN00000385A2538BCMVS
NY 182A6A8A14DD70E1 PC YPC0870 IVN000003559DD0082
NY 14CAF9E611E24984 PC YPC9997
NY 17E7A1B81656AE65 PC01 PC5060 AIS0000110
NY 17F067D21629C41B PC01 PC5060 IVN0000024
NY 180661EF0208A11D PC01 PC5060 IVN0000028
NY 180C58F90FF243F6 PC01 PC5060 IVN0000030
NY 181A0AFF0CF32612 PC01 PC5060 IVN0000032
NY 1828595715D2BA60 PC01 PC5060 IVN0000035
NY 183583430125ADA9 PC01 PC5060 IVN0000038
NY 17DE76B918DA9C41 PC01 PC5070 IVN0000021
NY 17EEAD3E11FF6234 PC01 PC5070 IVN0000024
NY 17F68F0400494D1E PC01 PC5120 AIS0000124
NY 17E6813B1F5FDBA7 PC01 PC5120 IVN0000021
NY 17F1F750161BE79A PC01 PC5120 IVN0000024
NY 17E7C0CB1DE2009F PC01 YPC0520 AIS000011157ADCAC2
NN 17F3360A11FAF296 PC01 YPC0520 IVN0000024580DE88D
NY 1802C2FA1F902DA2 PC01 YPC0520 IVN000002858904D09
NY 180B709C125803D4 PC01 YPC0520 IVN000003058D92770
NY 1819B39C1E8BD927 PC01 YPC0520 IVN00000325950CA4A
NY 1828FB091B03B8C9 PC01 YPC0520 IVN000003559D0F5B8
NY 183307DB094649A5 PC01 YPC0520 IVN00000385A2535B3MVS
NY 17DECA32053D2143 PC01 YPC0730 IVN000002157629A14
NY 17F1781E138AD4EE PC01 YPC0730 IVN000002457FF4BEB
NY 17DECA311087046D PC01 YPC0740 IVN000002157629A15
NY 17F1782105737A5E PC01 YPC0740 IVN000002457FF4BFF
NY 180523C3021C394B PC01 YPC0830 IVN000002858A43FD4
NY 180B71BD0784316A PC01 YPC0830 IVN000003058D930ED
NY 181D87B0041B2526 PC01 YPC0830 IVN00000325970E7C8
NY 1839783F1B9E97A3 PC01 YPC0830 IVN00000385A5B39A6MVS
NY 17E7A1B81656AE65 PC02 PC5060 AIS0000110
NY 17F067D21629C41B PC02 PC5060 IVN0000024
NY 180661EF0208A11D PC02 PC5060 IVN0000028
NY 180C58F90FF243F6 PC02 PC5060 IVN0000030
NY 181A0AFF0CF32612 PC02 PC5060 IVN0000032
NY 1828595715D2BA60 PC02 PC5060 IVN0000035
NY 183583430125ADA9 PC02 PC5060 IVN0000038
NY 17DE76B918DA9C41 PC02 PC5070 IVN0000021
NY 17EEAD3E11FF6234 PC02 PC5070 IVN0000024
NY 17F68F0400494D1E PC02 PC5120 AIS0000124
NY 17E6813B1F5FDBA7 PC02 PC5120 IVN0000021
NY 17F1F750161BE79A PC02 PC5120 IVN0000024
NY 17E7C0CB1DE2009F PC02 YPC0520 AIS000011157ADCAC2
NY 17F3360A11FAF296 PC02 YPC0520 IVN0000024580DE88D
NY 1802C2FA1F902DA2 PC02 YPC0520 IVN000002858904D09
NY 180B709C125803D4 PC02 YPC0520 IVN000003058D92770
NY 1819B39C1E8BD927 PC02 YPC0520 IVN00000325950CA4A
NY 1828FB091B03B8C9 PC02 YPC0520 IVN000003559D0F5B8
NY 183307DB094649A5 PC02 YPC0520 IVN00000385A2535B3MVS
NY 17DECA32053D2143 PC02 YPC0730 IVN000002157629A14
NY 17F1781E138AD4EE PC02 YPC0730 IVN000002457FF4BEB
NY 17DECA311087046D PC02 YPC0740 IVN000002157629A15
NY 17F1782105737A5E PC02 YPC0740 IVN000002457FF4BFF
NY 180523C3021C394B PC02 YPC0830 IVN000002858A43FD4
NY 180B71BD0784316A PC02 YPC0830 IVN000003058D930ED
NY 181D87B0041B2526 PC02 YPC0830 IVN00000325970E7C8
NY 1839783F1B9E97A3 PC02 YPC0830 IVN00000385A5B39A6MVS
NY 17E7A1B81656AE65 PC03 PC5060 AIS0000110
NY 17F067D21629C41B PC03 PC5060 IVN0000024
NY 180661EF0208A11D PC03 PC5060 IVN0000028
NY 180C58F90FF243F6 PC03 PC5060 IVN0000030
NY 181A0AFF0CF32612 PC03 PC5060 IVN0000032
NY 1828595715D2BA60 PC03 PC5060 IVN0000035
NY 183583430125ADA9 PC03 PC5060 IVN0000038
NY 17DE76B918DA9C41 PC03 PC5070 IVN0000021
NY 17EEAD3E11FF6234 PC03 PC5070 IVN0000024
NY 17F68F0400494D1E PC03 PC5120 AIS0000124
NY 17E6813B1F5FDBA7 PC03 PC5120 IVN0000021
NY 17F1F750161BE79A PC03 PC5120 IVN0000024
NY 17E7C0CB1DE2009F PC03 YPC0520 AIS000011157ADCAC2
NY 17F3360A11FAF296 PC03 YPC0520 IVN0000024580DE88D
NY 1802C2FA1F902DA2 PC03 YPC0520 IVN000002858904D09
NY 180B709C125803D4 PC03 YPC0520 IVN000003058D92770
NY 1819B39C1E8BD927 PC03 YPC0520 IVN00000325950CA4A
NY 1828FB091B03B8C9 PC03 YPC0520 IVN000003559D0F5B8
NY 183307DB094649A5 PC03 YPC0520 IVN00000385A2535B3MVS
NY 17DECA32053D2143 PC03 YPC0730 IVN000002157629A14
NY 17F1781E138AD4EE PC03 YPC0730 IVN000002457FF4BEB
NY 17DECA311087046D PC03 YPC0740 IVN000002157629A15
NY 17F1782105737A5E PC03 YPC0740 IVN000002457FF4BFF
NY 180523C3021C394B PC03 YPC0830 IVN000002858A43FD4
NY 180B71BD0784316A PC03 YPC0830 IVN000003058D930ED
NY 181D87B0041B2526 PC03 YPC0830 IVN00000325970E7C8
NY 1839783F1B9E97A3 PC03 YPC0830 IVN00000385A5B39A6MVS
NY 17E7A1B81656AE65 PC04 PC5060 AIS0000110
NY 17F067D21629C41B PC04 PC5060 IVN0000024
NY 180661EF0208A11D PC04 PC5060 IVN0000028
NY 180C58F90FF243F6 PC04 PC5060 IVN0000030
NY 181A0AFF0CF32612 PC04 PC5060 IVN0000032
NY 1828595715D2BA60 PC04 PC5060 IVN0000035
NY 183583430125ADA9 PC04 PC5060 IVN0000038
NY 17DE76B918DA9C41 PC04 PC5070 IVN0000021
NY 17EEAD3E11FF6234 PC04 PC5070 IVN0000024
NY 17F68F0400494D1E PC04 PC5120 AIS0000124
NY 17E6813B1F5FDBA7 PC04 PC5120 IVN0000021
NY 17F1F750161BE79A PC04 PC5120 IVN0000024
NY 17E7C0CB1DE2009F PC04 YPC0520 AIS000011157ADCAC2
NY 17F3360A11FAF296 PC04 YPC0520 IVN0000024580DE88D
NY 1802C2FA1F902DA2 PC04 YPC0520 IVN000002858904D09
NY 180B709C125803D4 PC04 YPC0520 IVN000003058D92770
NY 1819B39C1E8BD927 PC04 YPC0520 IVN00000325950CA4A
NY 1828FB091B03B8C9 PC04 YPC0520 IVN000003559D0F5B8
NY 183307DB094649A5 PC04 YPC0520 IVN00000385A2535B3MVS
NY 17DECA32053D2143 PC04 YPC0730 IVN000002157629A14
NY 17F1781E138AD4EE PC04 YPC0730 IVN000002457FF4BEB
NY 17DECA311087046D PC04 YPC0740 IVN000002157629A15
NY 17F1782105737A5E PC04 YPC0740 IVN000002457FF4BFF
NY 180523C3021C394B PC04 YPC0830 IVN000002858A43FD4
NY 180B71BD0784316A PC04 YPC0830 IVN000003058D930ED
NY 181D87B0041B2526 PC04 YPC0830 IVN00000325970E7C8
NY 1839783F1B9E97A3 PC04 YPC0830 IVN00000385A5B39A6MVS
NY 17E7A1B81656AE65 PC05 PC5060 AIS0000110
NY 17F067D21629C41B PC05 PC5060 IVN0000024
NY 180661EF0208A11D PC05 PC5060 IVN0000028
NY 180C58F90FF243F6 PC05 PC5060 IVN0000030
NY 181A0AFF0CF32612 PC05 PC5060 IVN0000032
NY 1828595715D2BA60 PC05 PC5060 IVN0000035
NY 183583430125ADA9 PC05 PC5060 IVN0000038
NY 17DE76B918DA9C41 PC05 PC5070 IVN0000021
NY 17EEAD3E11FF6234 PC05 PC5070 IVN0000024
NY 17F68F0400494D1E PC05 PC5120 AIS0000124
NY 17E6813B1F5FDBA7 PC05 PC5120 IVN0000021
NY 17F1F750161BE79A PC05 PC5120 IVN0000024
NY 17E7C0CB1DE2009F PC05 YPC0520 AIS000011157ADCAC2
NY 17F3360A11FAF296 PC05 YPC0520 IVN0000024580DE88D
NY 1802C2FA1F902DA2 PC05 YPC0520 IVN000002858904D09
NY 180B709C125803D4 PC05 YPC0520 IVN000003058D92770
NY 1819B39C1E8BD927 PC05 YPC0520 IVN00000325950CA4A
NY 1828FB091B03B8C9 PC05 YPC0520 IVN000003559D0F5B8
NY 183307DB094649A5 PC05 YPC0520 IVN00000385A2535B3MVS
NY 17DECA32053D2143 PC05 YPC0730 IVN000002157629A14
NY 17F1781E138AD4EE PC05 YPC0730 IVN000002457FF4BEB
NY 17DECA311087046D PC05 YPC0740 IVN000002157629A15
NY 17F1782105737A5E PC05 YPC0740 IVN000002457FF4BFF
NY 180523C3021C394B PC05 YPC0830 IVN000002858A43FD4
NY 180B71BD0784316A PC05 YPC0830 IVN000003058D930ED
NY 181D87B0041B2526 PC05 YPC0830 IVN00000325970E7C8
NY 1839783F1B9E97A3 PC05 YPC0830 IVN00000385A5B39A6MVS
NY 17E7A1B81656AE65 PC06 PC5060 AIS0000110
NY 17F067D21629C41B PC06 PC5060 IVN0000024
NY 180661EF0208A11D PC06 PC5060 IVN0000028
NY 180C58F90FF243F6 PC06 PC5060 IVN0000030
NY 181A0AFF0CF32612 PC06 PC5060 IVN0000032
NY 1828595715D2BA60 PC06 PC5060 IVN0000035
NY 183583430125ADA9 PC06 PC5060 IVN0000038
NY 17DE76B918DA9C41 PC06 PC5070 IVN0000021
NY 17EEAD3E11FF6234 PC06 PC5070 IVN0000024
NY 17F68F0400494D1E PC06 PC5120 AIS0000124
NY 17E6813B1F5FDBA7 PC06 PC5120 IVN0000021
NY 17F1F750161BE79A PC06 PC5120 IVN0000024
NY 17E7C0CB1DE2009F PC06 YPC0520 AIS000011157ADCAC2
NN 17F3360A11FAF296 PC06 YPC0520 IVN0000024580DE88D
NY 1802C2FA1F902DA2 PC06 YPC0520 IVN000002858904D09
NY 180B709C125803D4 PC06 YPC0520 IVN000003058D92770
NY 1819B39C1E8BD927 PC06 YPC0520 IVN00000325950CA4A
NY 1828FB091B03B8C9 PC06 YPC0520 IVN000003559D0F5B8
NY 183307DB094649A5 PC06 YPC0520 IVN00000385A2535B3MVS
NY 17DECA32053D2143 PC06 YPC0730 IVN000002157629A14
NY 17F1781E138AD4EE PC06 YPC0730 IVN000002457FF4BEB
NY 17DECA311087046D PC06 YPC0740 IVN000002157629A15
NY 17F1782105737A5E PC06 YPC0740 IVN000002457FF4BFF
NY 180523C3021C394B PC06 YPC0830 IVN000002858A43FD4
NY 180B71BD0784316A PC06 YPC0830 IVN000003058D930ED
NY 181D87B0041B2526 PC06 YPC0830 IVN00000325970E7C8
NY 1839783F1B9E97A3 PC06 YPC0830 IVN00000385A5B39A6MVS
NY 180661EF0208A11D PC07 PC5060 IVN0000028
NY 180C58F90FF243F6 PC07 PC5060 IVN0000030
NY 181A0AFF0CF32612 PC07 PC5060 IVN0000032
NY 1828595715D2BA60 PC07 PC5060 IVN0000035
NY 183583430125ADA9 PC07 PC5060 IVN0000038
NY 1802C2FA1F902DA2 PC07 YPC0520 IVN000002858904D09
NY 180B709C125803D4 PC07 YPC0520 IVN000003058D92770
NY 1819B39C1E8BD927 PC07 YPC0520 IVN00000325950CA4A
NY 1828FB091B03B8C9 PC07 YPC0520 IVN000003559D0F5B8
NY 183307DB094649A5 PC07 YPC0520 IVN00000385A2535B3MVS
NY 180523C3021C394B PC07 YPC0830 IVN000002858A43FD4
NY 180B71BD0784316A PC07 YPC0830 IVN000003058D930ED
NY 181D87B0041B2526 PC07 YPC0830 IVN00000325970E7C8
NY 1839783F1B9E97A3 PC07 YPC0830 IVN00000385A5B39A6MVS
NY 15CDAB591103C79C PHPS53 GACOLSN
NY 1694C61D0C724B38 PHPS53 GADRELS
NY 1668802F074DA4F8 PHPS53 GAMI000
NY 1565EECE0E5ECAEC PHPS53 GARD000
NY 16A8010F1F82BB8C PHPS53 GARD001
NY 15CDAB0B14D041D8 PHPS53 GARESET
NY 15CA646E06025900 PHPS53 GCADDE
NY 1619079A1575A360 PHPS53 GCBTOGL
NY 1567335819916C94 PHPS53 GCCOMON
NY 1672B0C208EA578C PHPS53 GCCRC00
NY 15AC828B1B14FA6A PHPS53 GCCRC01
NY 155C2C730710AF90 PHPS53 GCDTTM0
NY 163952971CCA9600 PHPS53 GCEXTAT
NY 155C5B4F023B6524 PHPS53 GCGENID
NY 167D65360749F7EC PHPS53 GCMIGDEL
NY 15CA646913B95630 PHPS53 GCRDENT
NY 15A36643030A26FC PHPS53 GCSTATE
NY 15D61F121CE36AD4 PHPS53 GCSTKCL
NY 161907A31F133620 PHPS53 GCSTMIG
NY 167834541B5DDFD8 PHPS53 GCTMTH
NY 164B90F8018FB550 PHPS53 GCUPDRES
NY 1646121C0B2895F0 PHPS53 GEXP000
NY 15F091221E7380D0 PHPS53 GEXP004
NY 1675588010AC1C98 PHPS53 GIMP000
NY 160E07A00A802048 PHPS53 GLCNVRT
NY 1636F6900F9CF270 PHPS53 GLMP000
NY 15D3CC2913ACAD18 PHPS53 GLXSEER
NY 16477D14047A4A48 PHPS53 GRBNDLK
NY 163703A910FAEC78 PHPS53 GRCLUP
NY 15A37FE50D1FAC42 PHPS53 GRENDV0
NY 1621D60F177D3620 PHPS53 GRINSPT
NY 16792BB11F1ADD68 PHPS53 GRINST0
NY 1640B2AB07663A60 PHPS53 GRPREP0
NY 167604A8034D288C PHPS53 GRRBA00
NY 15E1266101283F10 PHPS53 GRRBA04
NY 16394EC31826E248 PHPS53 GRRPT00
NY 165D7F23125F1EB4 PHPS53 GRRSTAT
NY 15D8A92F0CE846C4 PHPS53 GRSCL
NY 163703970628CBD0 PHPS53 GRSEED0
NY 15E147E71374FE70 PHPS53 GRSEED4
NY 155E0A010DFFB18C PHPS53 GRTBIND
NY 1622CCCB0AB717A8 PHPS53 GRVRF00
NY 15B09BB90BE4A7FA PHPS53 GSELECT
NY 15CDABCB034AE0C4 PHPS53 GTCLUP
NY 16506C1D10184988 PHPS53 GTDELTA
NY 163C50741B313FF0 PHPS53 GTLMC00
NY 16714C5E1D492438 PHPS53 GTREP00
NY 16085F6F199251D8 PHPS53 GTTOGGL
NY 15CDABD10526D324 PHPS53 GUIVRFY
NY 16224D7B0623E920 PHPS53 GUPDENT
NY 161FDC4B0094C100 PHPS53 H0001
NY 159772D012BAF9BA PHPS53 H0001R
NY 161FDC4F13D9E0C8 PHPS53 H0002
NY 1592177A0E93E6CC PHPS53 H0002R
NY 161FDC530447AFA0 PHPS53 H0003
NY 1592178B0CC11144 PHPS53 H0003R
NY 161FDC561EE0F568 PHPS53 H0004
NY 1592179502AA646A PHPS53 H0004R
NY 161FDC5A0DD001C8 PHPS53 H0005
NY 1592179E13C5A24A PHPS53 H0005R
NY 161FDC5E05BFA660 PHPS53 H0006
NY 159217A716F3A418 PHPS53 H0006R
NY 161FDC611DF407D8 PHPS53 H0007
NY 159217B30E117928 PHPS53 H0007R
NY 161FDC6510FBC310 PHPS53 H0008
NY 159217BE06C7E0D6 PHPS53 H0008R
NY 161FDC6903CE27A8 PHPS53 H0009
NY 159217C91163DD52 PHPS53 H0009R
NY 161FDC6D015FC398 PHPS53 H0010
NY 159217DB062756C6 PHPS53 H0010R
NY 161FDC701F1DF460 PHPS53 H0011
NY 159217E21F5EC7D4 PHPS53 H0011R
NY 161FDC74110D5A20 PHPS53 H0012
NY 159217E81AAA315E PHPS53 H0012R
NY 161FDC78054EBCC0 PHPS53 H0013
NY 159217ED192039C2 PHPS53 H0013R
NY 161FDC7B0F3AA690 PHPS53 H0014
NY 159217F3024803CA PHPS53 H0014R
NY 161FDC7E1F0A4CE0 PHPS53 H0015
NY 159217F71E33B7C2 PHPS53 H0015R
NY 161FDC82102BE588 PHPS53 H0016
NY 159217FC1ABC4770 PHPS53 H0016R
NY 161FDC86011E5340 PHPS53 H0017
NY 1592180115AF6AAA PHPS53 H0017R
NY 161FDC890808C648 PHPS53 H0018
NY 159218070F5B49A2 PHPS53 H0018R
NY 161FDC8C165AFDA0 PHPS53 H0019
NY 1592180D15DD3104 PHPS53 H0019R
NY 161FDC90020B3538 PHPS53 H0020
NY 159218121A716D24 PHPS53 H0020R
NY 161FDC9301C14030 PHPS53 H0021
NY 159218180878C04E PHPS53 H0021R
NY 161FDC951F7AFA30 PHPS53 H0022
NY 1592181E1206D3B0 PHPS53 H0022R
NY 161FDC981D3E1888 PHPS53 H0023
NY 159218241A5B697A PHPS53 H0023R
NY 162131100DE991E0 PHPS53 H0024
NY 159DDC1F0F7FE48C PHPS53 H0024R
NY 161FDC9D04DA9598 PHPS53 H0025
NY 15A128E9144D9DB0 PHPS53 H0025R
NY 15B74E511E488132 PHPS53 H0025X2
NY 161FDCA00A715110 PHPS53 H0026
NY 15921837107446C2 PHPS53 H0026R
NY 167C93F7089AEFA8 PHPS53 H0026X
NY 161FDCA3120DF348 PHPS53 H0033
NY 1592183C1EA72A64 PHPS53 H0033R
NY 161FDCA61B3D6DC8 PHPS53 H0034
NY 15921841177E708A PHPS53 H0034R
NY 161FDCA91FC33690 PHPS53 H0035
NY 15A4F3D3070FF4BA PHPS53 H0035R
NY 161FDCAC1BE345B0 PHPS53 H0038
NY 1592184607A905C2 PHPS53 H0038R
NY 161FDCAF1B7E8FE0 PHPS53 H0039
NY 1592184B0673F52E PHPS53 H0039R
NY 161FDCB21FD43D50 PHPS53 H0040
NY 159218510470D8A2 PHPS53 H0040R
NY 161FDCB60366A6C0 PHPS53 H0041
NY 159218560A8916E0 PHPS53 H0041R
NY 161FDCB900C1CD60 PHPS53 H0042
NY 1592185D00F97992 PHPS53 H0042R
NY 161FDCBB1D2EE0C0 PHPS53 H0043
NY 1592186215454FAC PHPS53 H0043R
NY 161FDCBE185DF678 PHPS53 H0044
NY 159218670C601C2A PHPS53 H0044R
NY 161FDCC11949FC10 PHPS53 H0045
NY 1592186D0CF0A2AA PHPS53 H0045R
NY 161FDCC415CF69B0 PHPS53 H0046
NY 159218711902350C PHPS53 H0046R
NY 161FDCC7185307C0 PHPS53 H0047
NY 159218761595AF48 PHPS53 H0047R
NY 161FDCCA15E40568 PHPS53 H0048
NY 1592187B1195DA1E PHPS53 H0048R
NY 161FDD1B0085D010 PHPS53 H0051
NY 1592188203929E42 PHPS53 H0051R
NY 161FDD1E13EF5CE0 PHPS53 H0052
NY 1592188714A465A0 PHPS53 H0052R
NY 161FDD211327A330 PHPS53 H0053
NY 1592188E0B8AB57A PHPS53 H0053R
NY 161FDD24118D4F90 PHPS53 H0054
NY 159218951F95B83A PHPS53 H0054R
NY 161FDD271103FAB8 PHPS53 H0055
NY 1592189E0254FFDC PHPS53 H0055R
NY 161FDD2A0FB47420 PHPS53 H0056
NY 159218A3106628B2 PHPS53 H0056R
NY 161FDD2D0ECC1400 PHPS53 H0057
NY 159218A80E2F55E2 PHPS53 H0057R
NY 161FDD300B2DCD00 PHPS53 H0058
NY 159218AD07A19110 PHPS53 H0058R
NY 161FDD3308997B98 PHPS53 H0059
NY 159218B203F1A084 PHPS53 H0059R
NY 161FDD3606748020 PHPS53 H0060
NY 159218B61A72A7F2 PHPS53 H0060R
NY 161FDD3904B03ED8 PHPS53 H0061
NY 159218BC00186A58 PHPS53 H0061R
NY 161FDD3C0A406260 PHPS53 H0062
NY 159218C107A4E882 PHPS53 H0062R
NY 161FDD3F076CD9E0 PHPS53 H0063
NY 159218C60B4CEFDC PHPS53 H0063R
NY 161FDD4204F18580 PHPS53 H0065
NY 159218CB03D33F32 PHPS53 H0065R
NY 161FDD4503AFE650 PHPS53 H0066
NY 159218D11270681A PHPS53 H0066R
NY 161FDD480A6E4D50 PHPS53 H0067
NY 159218D60D5FA7F4 PHPS53 H0067R
NY 161FDD4B072E2298 PHPS53 H0068
NY 159218DD034C0BF0 PHPS53 H0068R
NY 161FDD4E04A6A770 PHPS53 H0069
NY 159218E3089A4152 PHPS53 H0069R
NY 161FDD5102E9EC98 PHPS53 H0070
NY 159218E914045FE0 PHPS53 H0070R
NY 161FDD54018DCED0 PHPS53 H0072
NY 159218EF0F5CFE42 PHPS53 H0072R
NY 161FDD5706CD9618 PHPS53 H0074
NY 15C5D03D17A5BBD0 PHPS53 H0074R
NY 161FDD5A07589C98 PHPS53 H0075
NY 15C5D0441FAB9554 PHPS53 H0075R
NY 161FDD5D059E7028 PHPS53 H0076
NY 15C5D04B1714C114 PHPS53 H0076R
NY 161FDD6003FA1420 PHPS53 H0077
NY 15C5D0520506A144 PHPS53 H0077R
NY 161FDD63084D1890 PHPS53 H0078
NY 15C5D0581985C1C0 PHPS53 H0078R
NY 161FDD6606059FA8 PHPS53 H0079
NY 15C5D05F0F1622FC PHPS53 H0079R
NY 161FDD6904C8BEC0 PHPS53 H0080
NY 15C5D066153F7284 PHPS53 H0080R
NY 161FDD6C19056CB8 PHPS53 H0081
NY 15C5D06D160BFDE4 PHPS53 H0081R
NY 161FDD701378F7D8 PHPS53 H0082
NY 15C5D07317B389C4 PHPS53 H0082R
NY 161FDD740DECBB50 PHPS53 H0083
NY 15C5D07916CB5BE8 PHPS53 H0083R
NY 161FDD7804B1FEE0 PHPS53 H0084
NY 15C5D080117649A8 PHPS53 H0084R
NY 161FDD7B0FFCED60 PHPS53 H0085
NY 15C5D0861C2B48B8 PHPS53 H0085R
NY 161FDD7E101B8020 PHPS53 H0090
NY 15A4F3DD163BC854 PHPS53 H0090R
NY 161FDD810E6C8958 PHPS53 H0091
NY 15AC14130C6A1E08 PHPS53 H0091R
NY 161FDD840C4EBEA0 PHPS53 H0092
NY 15AC14230D148B26 PHPS53 H0092R
NY 161FDD870A100CB0 PHPS53 H0093
NY 15AC142A1FF41AAC PHPS53 H0093R
NY 161FDD8A082F8718 PHPS53 H0094
NY 15AC14311F137DA4 PHPS53 H0094R
NY 161FDD8D040DD3A0 PHPS53 H0095
NY 15AC143714EAD6AA PHPS53 H0095R
NY 161FDD9001CD64E8 PHPS53 H0096
NY 15AC143F072A5F2C PHPS53 H0096R
NY 161FDD9302367578 PHPS53 H0097
NY 15AC144E1E3BD120 PHPS53 H0097R
NY 161FDD9603377908 PHPS53 H0098
NY 15AC1458149FD8E8 PHPS53 H0098R
NY 161FDD9900A83250 PHPS53 H0099
NY 15AC14600EA43FEE PHPS53 H0099R
NY 161FDD9B1EDC32C0 PHPS53 H0100
NY 15AC146B18A8ACCE PHPS53 H0100R
NY 161FDD9F03D502D0 PHPS53 H0101
NY 15AC147612715F96 PHPS53 H0101R
NY 161FDDA209081A20 PHPS53 H0102
NY 15AC148507D9F45E PHPS53 H0102R
NY 161FDDA50841E560 PHPS53 H0103
NY 15AC29B21813181E PHPS53 H0103R
NY 161FDDA807F72CC0 PHPS53 H0104
NY 15AC149308056456 PHPS53 H0104R
NY 161FDDAB0FFFA0E0 PHPS53 H0105
NY 15AC149F1AC07FA0 PHPS53 H0105R
NY 161FDDAE0FABFFD8 PHPS53 H0106
NY 15AC14AE0591A4BC PHPS53 H0106R
NY 161FDE0D102AA820 PHPS53 H1001
NY 155BDC021B6DB61C PHPS53 H1001R
NY 161FDE100532ED80 PHPS53 H1002
NY 155BDC071E372DB0 PHPS53 H1002R
NY 161FDE12162AACB8 PHPS53 H1003
NY 155BDC0B0BADD90C PHPS53 H1003R
NY 161FDE1509071AA0 PHPS53 H1004
NY 155BDC0E0F296544 PHPS53 H1004R
NY 161FDE17195FCB58 PHPS53 H1006
NY 155BDC1110CD89B8 PHPS53 H1006R
NY 161FDE1A16B59890 PHPS53 H1007
NY 155BDC1507D7663C PHPS53 H1007R
NY 161FDE1D068027C0 PHPS53 H1008
NY 155BDC181F551708 PHPS53 H1008R
NY 161FDE1F153B0C30 PHPS53 H1009
NY 155BDC1C1E810688 PHPS53 H1009R
NY 161FDE22042F2988 PHPS53 H1010
NY 155BDC20123C805C PHPS53 H1010R
NY 161FDE2413BF0BA0 PHPS53 H1012
NY 155BDC2413BEE580 PHPS53 H1012R
NY 161FDE27046055A8 PHPS53 H1013
NY 155BDC281EF4CEA8 PHPS53 H1013R
NY 161FDE2912808880 PHPS53 H1014
NY 155BDC2D00D913F0 PHPS53 H1014R
NY 161FDE2C01AA4750 PHPS53 H1015
NY 155BDC30171DBA90 PHPS53 H1015R
NY 161FDE2E1621F790 PHPS53 H1016
NY 155BDC331DDCD7F4 PHPS53 H1016R
NY 161FDE31070D19E8 PHPS53 H1017
NY 155BDC361CA05AE0 PHPS53 H1017R
NY 161FDE33151F57B8 PHPS53 H1018
NY 155BDC391241B8E0 PHPS53 H1018R
NY 161FDE360456DE70 PHPS53 H1019
NY 155BDC3C0A496C88 PHPS53 H1019R
NY 161FDE381429AFC0 PHPS53 H1020
NY 155BDC3F01A2428C PHPS53 H1020R
NY 161FDE3B11A2D228 PHPS53 H1021
NY 155BDC411863F014 PHPS53 H1021R
NY 161FDE3E049D9430 PHPS53 H1022
NY 155BDC4409BCCD8C PHPS53 H1022R
NY 161FDE4014A1E9D0 PHPS53 H1023
NY 155BDC480314DC74 PHPS53 H1023R
NY 161FDE4305D95878 PHPS53 H1024
NY 155BDC4B07ED0AC0 PHPS53 H1024R
NY 161FDE4516C79DE8 PHPS53 H1025
NY 155BDC4E09BDAC40 PHPS53 H1025R
NY 161FDE48063FDFD8 PHPS53 H1026
NY 155BDC5107BFCECC PHPS53 H1026R
NY 161FDE4A1851D0F0 PHPS53 H1027
NY 155BDC531CFA8FE4 PHPS53 H1027R
NY 161FDE4D08209BA8 PHPS53 H1028
NY 155BDC5617546790 PHPS53 H1028R
NY 161FDE4F18F12778 PHPS53 H1029
NY 155BDC5913982694 PHPS53 H1029R
NY 161FDE5209BE3CE8 PHPS53 H1031
NY 155BDC5D02DA37C0 PHPS53 H1031R
NY 161FDE5419B880B8 PHPS53 H1032
NY 155BDC6316ADAC4C PHPS53 H1032R
NY 161FDE570994B9C0 PHPS53 H1033
NY 155BDC6706CC7C10 PHPS53 H1033R
NY 161FDE591A8134D0 PHPS53 H1034
NY 155BDC6A13A513C4 PHPS53 H1034R
NY 161FDE5C09F8D5B8 PHPS53 H1035
NY 155BDC6E0AC09784 PHPS53 H1035R
NY 161FDE5E1A512EF0 PHPS53 H1036
NY 158A85B901EC2828 PHPS53 H1036R
NY 16488F5B04F61578 PHPS53 H1037
NY 155BDC750E375AA4 PHPS53 H1037R
NY 161FDE6401599EF8 PHPS53 H1038
NY 155BDC780E52907C PHPS53 H1038R
NY 161FDE6611EDBE68 PHPS53 H1039
NY 155BDC7B13DFCE04 PHPS53 H1039R
NY 161FDE6901AED080 PHPS53 H1040
NY 155BDC7E15785B10 PHPS53 H1040R
NY 161FDE6B113CCFE8 PHPS53 H1041
NY 155BDC820EB9A1D4 PHPS53 H1041R
NY 161FDE6E02365EA0 PHPS53 H1042
NY 155BDC860BAB9440 PHPS53 H1042R
NY 161FDE70156E1E18 PHPS53 H1043
NY 155BDC8A000C7508 PHPS53 H1043R
NY 161FDE730667E1D8 PHPS53 H1044
NY 155BDC8E1AC79150 PHPS53 H1044R
NY 161FDE75172311A8 PHPS53 H1046
NY 15ACA3D315FD0A1A PHPS53 H1046R
NY 161FDE7806709330 PHPS53 H1047
NY 155BDC951DD95064 PHPS53 H1047R
NY 161FDE7A15CBD0B8 PHPS53 H1048
NY 155BDC9A195F1CAC PHPS53 H1048R
NY 161FDE7D0E4EFC90 PHPS53 H1051
NY 1584DFBF09E5165C PHPS53 H1051R
NY 15816A34079F3880 PHPS53 H1051X
NY 161FDE80088551C8 PHPS53 H1056
NY 155BDCA117D55598 PHPS53 H1056R
NY 161FDE8217CDEF70 PHPS53 H1057
NY 155BDCA418814914 PHPS53 H1057R
NY 161FECCF00E17C20 PHPS53 H1058
NY 155BDCA714AC9E14 PHPS53 H1058R
NY 161FECD21DE71C40 PHPS53 H1059
NY 155BDCAA1380A8EC PHPS53 H1059R
NY 161FECD6066E9C20 PHPS53 H1060
NY 155BDCAD061DC944 PHPS53 H1060R
NY 161FECD90BE52440 PHPS53 H1061
NY 155BDCAF18C672B4 PHPS53 H1061R
NY 161FECDC109D7628 PHPS53 H1062
NY 155BDCB21F3D7428 PHPS53 H1062R
NY 161FECDF1222D330 PHPS53 H1063
NY 155BDCB60F133A14 PHPS53 H1063R
NY 161FECE2181277D0 PHPS53 H1064
NY 155BDCB914653080 PHPS53 H1064R
NY 161FECE6037780C8 PHPS53 H1065
NY 155BDCBC186AAF74 PHPS53 H1065R
NY 161FECE90BB44280 PHPS53 H1066
NY 155BDCC0084869BC PHPS53 H1066R
NY 161FECEC0ED8C648 PHPS53 H1067
NY 155BDCC30620BA1C PHPS53 H1067R
NY 161FECEF0A249C48 PHPS53 H1068
NY 155BDCC6016F5008 PHPS53 H1068R
NY 161FECF209283BE0 PHPS53 H1069
NY 155BDCC9044B858C PHPS53 H1069R
NY 161FECF50C793EB0 PHPS53 H1071
NY 155BDCCC165495DC PHPS53 H1071R
NY 15DC641200ECE17C PHPS53 H1071X
NY 161FECF810778CA0 PHPS53 H1072
NY 155BDCD00B413930 PHPS53 H1072R
NY 161FECFB11377B20 PHPS53 H1073
NY 155BDCD319CAF2C0 PHPS53 H1073R
NY 161FECFE061DB038 PHPS53 H1074
NY 155BDCD80F9233BC PHPS53 H1074R
NY 161FED00163D3890 PHPS53 H1075
NY 155BDCDB0DB3B18C PHPS53 H1075R
NY 161FED03136463B0 PHPS53 H1076
NY 155BDCDE0B1AA074 PHPS53 H1076R
NY 161FED060E434DA0 PHPS53 H1077
NY 155BDCE108D7039C PHPS53 H1077R
NY 161FED090CEDF588 PHPS53 H1078
NY 155BDCE40EFAC860 PHPS53 H1078R
NY 161FED0C08C7B388 PHPS53 H1079
NY 155BDCE71815C8C0 PHPS53 H1079R
NY 161FED0F05C96360 PHPS53 H1080
NY 155BDCEA119ABEC4 PHPS53 H1080R
NY 161FED12077AFC20 PHPS53 H1081
NY 155BDCED03791A08 PHPS53 H1081R
NY 161FED150107E628 PHPS53 H1082
NY 155BDCF8041D0CAC PHPS53 H1082R
NY 161FED171006BFC0 PHPS53 H1083
NY 155BDCFA1ABE2414 PHPS53 H1083R
NY 161FED191F3194B0 PHPS53 H1084
NY 155BDCFD18411260 PHPS53 H1084R
NY 161FED1C0D617888 PHPS53 H1085
NY 155BDD01018C390C PHPS53 H1085R
NY 161FED1E1D792E90 PHPS53 H1086
NY 155BDD04195F28CC PHPS53 H1086R
NY 161FED210B6F3400 PHPS53 H1087
NY 155BDD081B376444 PHPS53 H1087R
NY 161FED231E0822F0 PHPS53 H1088
NY 155BDD0C153A597C PHPS53 H1088R
NY 161FED2617B63710 PHPS53 H1089
NY 155BDD1002B4259C PHPS53 H1089R
NY 161FED290E6FF710 PHPS53 H1090
NY 155BDD1302792958 PHPS53 H1090R
NY 161FED2B1D86B130 PHPS53 H1091
NY 155BDD16089DAB30 PHPS53 H1091R
NY 161FED2E0D091280 PHPS53 H1092
NY 155BDD2117BE19B4 PHPS53 H1092R
NY 161FED301C4A7DB8 PHPS53 H1093
NY 155BDD241BA7FDC4 PHPS53 H1093R
NY 161FED330D630468 PHPS53 H1094
NY 155BDD271DAF37E0 PHPS53 H1094R
NY 161FED351D165ED8 PHPS53 H1095
NY 155BDD2B00B83E48 PHPS53 H1095R
NY 161FED380BE31F50 PHPS53 H1096
NY 155BDD2E1017989C PHPS53 H1096R
NY 161FED3A1C1E60F8 PHPS53 H1097
NY 155BDD311042AC38 PHPS53 H1097R
NY 161FED3D0C21A228 PHPS53 H1099
NY 15A4FD37163C3114 PHPS53 H1099R
NY 161FED3F1BAE6B48 PHPS53 H1100
NY 1584DFC6136F3DA0 PHPS53 H1100R
NY 15816A36033CC6B4 PHPS53 H1100X
NY 161FED4219B089C0 PHPS53 H1101
NY 1584DFCD05FA4DB4 PHPS53 H1101R
NY 15816A370D903F2C PHPS53 H1101X
NY 161FED4514635AB8 PHPS53 H1102
NY 1584DFD309263C14 PHPS53 H1102R
NY 161FED4804361A28 PHPS53 H1112
NY 1584DFB60BC66010 PHPS53 H1112R
NY 15C483AA06397F0C PHPS53 H1112X
NY 161FED4A1E930520 PHPS53 H1113
NY 155BDD480A63B8F0 PHPS53 H1113R
NY 15C8EF841FE89A0C PHPS53 H1113X
NY 161FED4D16245178 PHPS53 H1115
NY 1566AB81098E9D94 PHPS53 H1115R
NY 1583ED1F1E666B9C PHPS53 H1115X2
NY 161FED5010DFA3B8 PHPS53 H1116
NY 15ACA3DA185219F2 PHPS53 H1116R
NY 15A0601E1851EE58 PHPS53 H1116X2
NY 161FED5317270668 PHPS53 H1117
NY 155BDD5215C47080 PHPS53 H1117R
NY 161FED56065A0978 PHPS53 H1118
NY 155BDD550B98865C PHPS53 H1118R
NY 161FED5816A66898 PHPS53 H1120
NY 1588083502F675E0 PHPS53 H1120R
NY 161FED5B1081F558 PHPS53 H1121
NY 158808391E6D6298 PHPS53 H1121R
NY 161FED5E0CAAC940 PHPS53 H1122
NY 1588083E0E2B8A58 PHPS53 H1122R
NY 161FED610B14E640 PHPS53 H1123
NY 15880843067C1C78 PHPS53 H1123R
NY 161FED64022752A8 PHPS53 H1124
NY 158808480E8A888C PHPS53 H1124R
NY 161FED66191DF450 PHPS53 H1125
NY 1588084E11535E04 PHPS53 H1125R
NY 161FED690F945E90 PHPS53 H1126
NY 158808531E5DC988 PHPS53 H1126R
NY 161FED6C05601230 PHPS53 H1127
NY 158808571B9CC210 PHPS53 H1127R
NY 161FED6E1DD2D600 PHPS53 H1128
NY 1588085C14B63814 PHPS53 H1128R
NY 161FED71158E1C28 PHPS53 H1129
NY 158808610ED59A74 PHPS53 H1129R
NY 161FED740ADF3B98 PHPS53 H1130
NY 158808660480FF9C PHPS53 H1130R
NY 161FED77033D7E38 PHPS53 H1131
NY 1588086A1F9EAF9C PHPS53 H1131R
NY 161FED79198F2E40 PHPS53 H1132
NY 1588086F1A327960 PHPS53 H1132R
NY 161FED7C0AC87678 PHPS53 H1133
NY 158808740F91C07C PHPS53 H1133R
NY 161FED7E190C6C40 PHPS53 H1134
NY 158808790AF445B8 PHPS53 H1134R
NY 161FED8109006C60 PHPS53 H1135
NY 1588087E03B881B4 PHPS53 H1135R
NY 161FED8317E80110 PHPS53 H1136
NY 1588088303BDDDD8 PHPS53 H1136R
NY 161FED86063A8180 PHPS53 H1137
NY 158808871B5AB230 PHPS53 H1137R
NY 161FED881655D160 PHPS53 H1138
NY 1597B8020AD0BD9A PHPS53 H1138R
NY 161FED8B06039590 PHPS53 H1139
NY 158A8DEB02D28CC4 PHPS53 H1139R
NY 161FED8D145762C8 PHPS53 H1140
NY 15880895102A7A88 PHPS53 H1140R
NY 161FED9003DD1C68 PHPS53 H1141
NY 1588089916CF1EA0 PHPS53 H1141R
NY 161FED9213061778 PHPS53 H1142
NY 1588089D0ACC33D0 PHPS53 H1142R
NY 161FED9500FEA7F0 PHPS53 H1143
NY 158808A11E2F0884 PHPS53 H1143R
NY 161FED970EBC5C30 PHPS53 H1144
NY 158808A619D7DD2C PHPS53 H1144R
NY 161FED991D0D7A38 PHPS53 H1145
NY 158808AB105DC8C0 PHPS53 H1145R
NY 161FED9C0C731020 PHPS53 H1146
NY 158808B00B779D20 PHPS53 H1146R
NY 161FED9E1A9B0998 PHPS53 H1147
NY 158808B505709F8C PHPS53 H1147R
NY 161FEDA10A2B5FC8 PHPS53 H1148
NY 158808BA04AE2478 PHPS53 H1148R
NY 161FEDA318E185F8 PHPS53 H1149
NY 158808BF01838FDC PHPS53 H1149R
NY 161FEDA607142670 PHPS53 H1150
NY 158808C31D7FCF1C PHPS53 H1150R
NY 161FEDB412B59D58 PHPS53 H1151
NY 158808C80D365CA8 PHPS53 H1151R
NY 161FEDB712319570 PHPS53 H1152
NY 158808CC1E10D514 PHPS53 H1152R
NY 161FEDBA1023E610 PHPS53 H1153
NY 158808D114BF7A60 PHPS53 H1153R
NY 161FEDBD06893138 PHPS53 H1154
NY 158808D60B439D10 PHPS53 H1154R
NY 161FEDBF1DA923B0 PHPS53 H1155
NY 158808DA07E4DBF0 PHPS53 H1155R
NY 161FEDC21B16A850 PHPS53 H1156
NY 158808DF0EDBE740 PHPS53 H1156R
NY 161FEDC511668FE8 PHPS53 H1157
NY 158808E40E6D543C PHPS53 H1157R
NY 161FEDC80E57B7F8 PHPS53 H1158
NY 158808E9094D7624 PHPS53 H1158R
NY 161FEDCB0558D420 PHPS53 H1159
NY 15A4FCC71DEF06F4 PHPS53 H1159R
NY 161FEDCD1DD3DF00 PHPS53 H1160
NY 15A4FCCC17DAF046 PHPS53 H1160R
NY 161FEDD0158252E8 PHPS53 H1161
NY 15A4FCD015A005C6 PHPS53 H1161R
NY 161FEDD30CE85468 PHPS53 H1162
NY 15A4FCD414EE74BC PHPS53 H1162R
NY 161FEDD6043AADA0 PHPS53 H1163
NY 15AC15B60E7E6D46 PHPS53 H1163R
NY 161FEDD81BB86000 PHPS53 H1164
NY 15AC15BA184D6394 PHPS53 H1164R
NY 161FEDDB123E7738 PHPS53 H1165
NY 15AC15BE18D5B91A PHPS53 H1165R
NY 161FEDDE09A40798 PHPS53 H1166
NY 15AC15C21EB803EC PHPS53 H1166R
NY 161FEDE1044854B0 PHPS53 H1167
NY 15AC15C614AF6C92 PHPS53 H1167R
NY 161FEDE31D19E598 PHPS53 H1168
NY 15AC15CA1CE5E3EA PHPS53 H1168R
NY 161FEDE61B70C198 PHPS53 H1169
NY 15AC15CF080B269C PHPS53 H1169R
NY 161FEDEA01BC29B8 PHPS53 H1170
NY 15AC15D312F51EEE PHPS53 H1170R
NY 161FEDEC1FDF4C38 PHPS53 H1171
NY 15AC15D811701362 PHPS53 H1171R
NY 161FEDEF1963A618 PHPS53 H1172
NY 15AC15DD0616B9FA PHPS53 H1172R
NY 161FEDF211083818 PHPS53 H1173
NY 15AC15E103FD7D98 PHPS53 H1173R
NY 161FEDF50CB5DD40 PHPS53 H1174
NY 15AC15E5134DBE32 PHPS53 H1174R
NY 161FEDF809914D70 PHPS53 H1175
NY 15AC161D09607442 PHPS53 H1175R
NY 161FEDFA17B6BF10 PHPS53 H1176
NY 15AC16220F3514C8 PHPS53 H1176R
NY 161FEDFD05AD8F30 PHPS53 H1177
NY 15AC1627160FAD56 PHPS53 H1177R
NY 161FEDFF13BFF408 PHPS53 H1178
NY 15AC162B1E6AA318 PHPS53 H1178R
NY 161FEE02021D61E0 PHPS53 H1179
NY 15AC1631000EE58C PHPS53 H1179R
NY 161FEE04116E3098 PHPS53 H1180
NY 15AC163519AC7ACA PHPS53 H1180R
NY 161FEE070015F508 PHPS53 H1181
NY 15AC163A078833B6 PHPS53 H1181R
NY 161FEE090E43D8D0 PHPS53 H1182
NY 15AC163E1A204160 PHPS53 H1182R
NY 161FEE0B1CD116F8 PHPS53 H1183
NY 15AC164311D0EB7C PHPS53 H1183R
NY 161FEE0E0A39E4D8 PHPS53 H1184
NY 15AC16480B30358C PHPS53 H1184R
NY 161FEE1018A76240 PHPS53 H1185
NY 15AC164D016D16C2 PHPS53 H1185R
NY 161FEE130668A2E0 PHPS53 H1186
NY 15AC16520A834990 PHPS53 H1186R
NY 161FEE1514913AA0 PHPS53 H1187
NY 15AC165719986650 PHPS53 H1187R
NY 161FEE1803D9C1A8 PHPS53 H1188
NY 15AC165C1ACD812C PHPS53 H1188R
NY 161FEE1A1153AE80 PHPS53 H1189
NY 15AC166305575FF0 PHPS53 H1189R
NY 161FEE1C1F3E3F50 PHPS53 H1190
NY 15AC166813C505D4 PHPS53 H1190R
NY 161FEE1F0EFADB18 PHPS53 H1191
NY 15AC166E06CBF05A PHPS53 H1191R
NY 161FEE211C92DAD8 PHPS53 H1192
NY 15AC16730BBC53A6 PHPS53 H1192R
NY 161FEE240A2EB8C8 PHPS53 H1193
NY 15AC1678186FF6C2 PHPS53 H1193R
NY 161FEE261885BD78 PHPS53 H1194
NY 15AC167D071126E0 PHPS53 H1194R
NY 161FEE2909A03CC8 PHPS53 H1195
NY 15AC16811084B2BC PHPS53 H1195R
NY 161FEE2B199D2C70 PHPS53 H1196
NY 15AC1686025898D4 PHPS53 H1196R
NY 161FEE2E07E6B948 PHPS53 H1197
NY 15AC168A0168C574 PHPS53 H1197R
NY 161FEE3015729858 PHPS53 H1198
NY 15AC168D154B3C68 PHPS53 H1198R
NY 161FEE3303370CC8 PHPS53 H1199
NY 15AC1691174F64EE PHPS53 H1199R
NY 161FEE35112046E0 PHPS53 H1200
NY 15AC169603C5E4D8 PHPS53 H1200R
NY 160D1D7D1EE16DB0 PHPS53 HAXPRST
NY 15E7709F17E5EDB0 PHPS53 HMCALDB
NY 155BBCF304541900 PHPS53 HMCAUDT
NY 15AF999510594FC8 PHPS53 HMCBCRD
NY 161D969413D2F020 PHPS53 HMCCFGV
NY 157DCAFB0018DB28 PHPS53 HMCCFGX
NY 15B60AC21A37C08A PHPS53 HMCCNVSD
NY 1648BC9C0A07CBB0 PHPS53 HMCCOS1
NY 15C7B6C10BCB2FD8 PHPS53 HMCECR2
NY 15C7B6C90CC88A90 PHPS53 HMCECR4
NY 15CACE6508736400 PHPS53 HMCECR5
NY 15C7B6B0066AD23C PHPS53 HMCECRC
NY 15D9BE630DFF1524 PHPS53 HMCERE2
NY 15D9BE6915344B80 PHPS53 HMCERE4
NY 15D9BE6F0D6D9698 PHPS53 HMCERE5
NY 15D9BE521E305188 PHPS53 HMCEREP
NY 15220C551C3B6E28 PHPS53 HMCEXP3
NY 15CE713C00D20FB8 PHPS53 HMCGSET
NY 166877D90BF64B88 PHPS53 HMCLKCK
NY 161F0BE31EED2D30 PHPS53 HMCPRSX
NY 1615BD381DA77DA0 PHPS53 HMCPRUP
NY 1619587800D60890 PHPS53 HMCPRUS
NY 164B90BD1C019430 PHPS53 HMCQRY
NY 164B90C806C859B8 PHPS53 HMCQRY2
NY 164B90CD10509A64 PHPS53 HMCQRY4
NY 164B90D0073EB890 PHPS53 HMCQRY5
NY 15C7830702097490 PHPS53 HMCRCR2
NY 15C7830E185A6BFC PHPS53 HMCRCR4
NY 15C78317061022C4 PHPS53 HMCRCR5
NY 15C7832B09628D34 PHPS53 HMCRCRC
NY 15D7894D02F10E00 PHPS53 HMCRES
NY 15D9BE8F1D89B10C PHPS53 HMCRRE2
NY 15D9BE9513654C98 PHPS53 HMCRRE4
NY 15DA3869101E5928 PHPS53 HMCRRE5
NY 15D9BE7C1DE60F88 PHPS53 HMCRREP
NY 163917300E3A09E8 PHPS53 HMCSEC3
NY 1639247400924910 PHPS53 HMCSIG3
NY 167A381006E54154 PHPS53 HMCSRVR
NY 165068C40486A51C PHPS53 HMCSTK
NY 1648701D08505C48 PHPS53 HMCTRAN
NY 15AAE9F00D66AC82 PHPS53 HMCXRL4
NY 162D0C2C0A2CAAE0 PHPS53 HMCXRLE
NY 15A7C94E1ED22D8E PHPS53 HMPBNDM
NY 164DEE021925D98C PHPS53 HMPBNDR
NY 1608E2520A62D370 PHPS53 HMPBNDR4
NY 1603114C09187630 PHPS53 HMPBTBL
NY 1631560B086E34A8 PHPS53 HMPDCLG
NY 15E76E4709C5C930 PHPS53 HMPFCMP
NY 164890B40BD43E58 PHPS53 HMPGCB
NY 163155830B285D98 PHPS53 HMPGDDL
NY 1631561808A47EF8 PHPS53 HMPGENP
NY 164DEDE0153DDC90 PHPS53 HMPGENX
NY 15976C280BCB1DB8 PHPS53 HMPGPNL
NY 1687224D0F9F5FFC PHPS53 HMPRBDR
NY 155BC2A1004D5FD8 PHPS53 HMPSNAM
NY 1637EC541E9F2518 PHPS53 HMPUTRN
NY 15CB758A0929ECF4 PHPS53 HMPVRSN
NY 1534BB420D798BC4 PHPS53 RMICKJB
NY 1619076913430EE0 PHPS53 RMIGNID
NY 155BFD0F07DCE618 PHPS53 RMIPDAD
NY 155BFD141D669A04 PHPS53 RMISTAD
NY 155BFD1B04E61B4C PHPS53 RMISTUP
NY 15811B3A09912CCC PHPS53 SEDTRNS
NY 158FBB970661F6C2 PHPS53 STKCLON
NY 15CDAB591103C79C PHPSPTA GACOLSN
NY 1694C61D0C724B38 PHPSPTA GADRELS
NY 1668802F074DA4F8 PHPSPTA GAMI000
NY 1565EECE0E5ECAEC PHPSPTA GARD000
NY 16A8010F1F82BB8C PHPSPTA GARD001
NY 15CDAB0B14D041D8 PHPSPTA GARESET
NY 15CA646E06025900 PHPSPTA GCADDE
NY 1619079A1575A360 PHPSPTA GCBTOGL
NY 1567335819916C94 PHPSPTA GCCOMON
NY 1672B0C208EA578C PHPSPTA GCCRC00
NY 15AC828B1B14FA6A PHPSPTA GCCRC01
NY 155C2C730710AF90 PHPSPTA GCDTTM0
NY 163952971CCA9600 PHPSPTA GCEXTAT
NY 155C5B4F023B6524 PHPSPTA GCGENID
NY 167D65360749F7EC PHPSPTA GCMIGDEL
NY 15CA646913B95630 PHPSPTA GCRDENT
NY 15A36643030A26FC PHPSPTA GCSTATE
NY 15D61F121CE36AD4 PHPSPTA GCSTKCL
NY 161907A31F133620 PHPSPTA GCSTMIG
NY 167834541B5DDFD8 PHPSPTA GCTMTH
NY 164B90F8018FB550 PHPSPTA GCUPDRES
NY 1646121C0B2895F0 PHPSPTA GEXP000
NY 15F091221E7380D0 PHPSPTA GEXP004
NY 1675588010AC1C98 PHPSPTA GIMP000
NY 160E07A00A802048 PHPSPTA GLCNVRT
NY 1636F6900F9CF270 PHPSPTA GLMP000
NY 15D3CC2913ACAD18 PHPSPTA GLXSEER
NY 16477D14047A4A48 PHPSPTA GRBNDLK
NY 163703A910FAEC78 PHPSPTA GRCLUP
NY 15A37FE50D1FAC42 PHPSPTA GRENDV0
NY 1621D60F177D3620 PHPSPTA GRINSPT
NY 16792BB11F1ADD68 PHPSPTA GRINST0
NY 1640B2AB07663A60 PHPSPTA GRPREP0
NY 167604A8034D288C PHPSPTA GRRBA00
NY 15E1266101283F10 PHPSPTA GRRBA04
NY 16394EC31826E248 PHPSPTA GRRPT00
NY 165D7F23125F1EB4 PHPSPTA GRRSTAT
NY 15D8A92F0CE846C4 PHPSPTA GRSCL
NY 163703970628CBD0 PHPSPTA GRSEED0
NY 15E147E71374FE70 PHPSPTA GRSEED4
NY 155E0A010DFFB18C PHPSPTA GRTBIND
NY 1622CCCB0AB717A8 PHPSPTA GRVRF00
NY 15B09BB90BE4A7FA PHPSPTA GSELECT
NY 15CDABCB034AE0C4 PHPSPTA GTCLUP
NY 16506C1D10184988 PHPSPTA GTDELTA
NY 163C50741B313FF0 PHPSPTA GTLMC00
NY 16714C5E1D492438 PHPSPTA GTREP00
NY 16085F6F199251D8 PHPSPTA GTTOGGL
NY 15CDABD10526D324 PHPSPTA GUIVRFY
NY 16224D7B0623E920 PHPSPTA GUPDENT
NY 161FDC4B0094C100 PHPSPTA H0001
NY 159772D012BAF9BA PHPSPTA H0001R
NY 161FDC4F13D9E0C8 PHPSPTA H0002
NY 1592177A0E93E6CC PHPSPTA H0002R
NY 161FDC530447AFA0 PHPSPTA H0003
NY 1592178B0CC11144 PHPSPTA H0003R
NY 161FDC561EE0F568 PHPSPTA H0004
NY 1592179502AA646A PHPSPTA H0004R
NY 161FDC5A0DD001C8 PHPSPTA H0005
NY 1592179E13C5A24A PHPSPTA H0005R
NY 161FDC5E05BFA660 PHPSPTA H0006
NY 159217A716F3A418 PHPSPTA H0006R
NY 161FDC611DF407D8 PHPSPTA H0007
NY 159217B30E117928 PHPSPTA H0007R
NY 161FDC6510FBC310 PHPSPTA H0008
NY 159217BE06C7E0D6 PHPSPTA H0008R
NY 161FDC6903CE27A8 PHPSPTA H0009
NY 159217C91163DD52 PHPSPTA H0009R
NY 161FDC6D015FC398 PHPSPTA H0010
NY 159217DB062756C6 PHPSPTA H0010R
NY 161FDC701F1DF460 PHPSPTA H0011
NY 159217E21F5EC7D4 PHPSPTA H0011R
NY 161FDC74110D5A20 PHPSPTA H0012
NY 159217E81AAA315E PHPSPTA H0012R
NY 161FDC78054EBCC0 PHPSPTA H0013
NY 159217ED192039C2 PHPSPTA H0013R
NY 161FDC7B0F3AA690 PHPSPTA H0014
NY 159217F3024803CA PHPSPTA H0014R
NY 161FDC7E1F0A4CE0 PHPSPTA H0015
NY 159217F71E33B7C2 PHPSPTA H0015R
NY 161FDC82102BE588 PHPSPTA H0016
NY 159217FC1ABC4770 PHPSPTA H0016R
NY 161FDC86011E5340 PHPSPTA H0017
NY 1592180115AF6AAA PHPSPTA H0017R
NY 161FDC890808C648 PHPSPTA H0018
NY 159218070F5B49A2 PHPSPTA H0018R
NY 161FDC8C165AFDA0 PHPSPTA H0019
NY 1592180D15DD3104 PHPSPTA H0019R
NY 161FDC90020B3538 PHPSPTA H0020
NY 159218121A716D24 PHPSPTA H0020R
NY 161FDC9301C14030 PHPSPTA H0021
NY 159218180878C04E PHPSPTA H0021R
NY 161FDC951F7AFA30 PHPSPTA H0022
NY 1592181E1206D3B0 PHPSPTA H0022R
NY 161FDC981D3E1888 PHPSPTA H0023
NY 159218241A5B697A PHPSPTA H0023R
NY 162131100DE991E0 PHPSPTA H0024
NY 159DDC1F0F7FE48C PHPSPTA H0024R
NY 161FDC9D04DA9598 PHPSPTA H0025
NY 15A128E9144D9DB0 PHPSPTA H0025R
NY 15B74E511E488132 PHPSPTA H0025X2
NY 161FDCA00A715110 PHPSPTA H0026
NY 15921837107446C2 PHPSPTA H0026R
NY 167C93F7089AEFA8 PHPSPTA H0026X
NY 161FDCA3120DF348 PHPSPTA H0033
NY 1592183C1EA72A64 PHPSPTA H0033R
NY 161FDCA61B3D6DC8 PHPSPTA H0034
NY 15921841177E708A PHPSPTA H0034R
NY 161FDCA91FC33690 PHPSPTA H0035
NY 15A4F3D3070FF4BA PHPSPTA H0035R
NY 161FDCAC1BE345B0 PHPSPTA H0038
NY 1592184607A905C2 PHPSPTA H0038R
NY 161FDCAF1B7E8FE0 PHPSPTA H0039
NY 1592184B0673F52E PHPSPTA H0039R
NY 161FDCB21FD43D50 PHPSPTA H0040
NY 159218510470D8A2 PHPSPTA H0040R
NY 161FDCB60366A6C0 PHPSPTA H0041
NY 159218560A8916E0 PHPSPTA H0041R
NY 161FDCB900C1CD60 PHPSPTA H0042
NY 1592185D00F97992 PHPSPTA H0042R
NY 161FDCBB1D2EE0C0 PHPSPTA H0043
NY 1592186215454FAC PHPSPTA H0043R
NY 161FDCBE185DF678 PHPSPTA H0044
NY 159218670C601C2A PHPSPTA H0044R
NY 161FDCC11949FC10 PHPSPTA H0045
NY 1592186D0CF0A2AA PHPSPTA H0045R
NY 161FDCC415CF69B0 PHPSPTA H0046
NY 159218711902350C PHPSPTA H0046R
NY 161FDCC7185307C0 PHPSPTA H0047
NY 159218761595AF48 PHPSPTA H0047R
NY 161FDCCA15E40568 PHPSPTA H0048
NY 1592187B1195DA1E PHPSPTA H0048R
NY 161FDD1B0085D010 PHPSPTA H0051
NY 1592188203929E42 PHPSPTA H0051R
NY 161FDD1E13EF5CE0 PHPSPTA H0052
NY 1592188714A465A0 PHPSPTA H0052R
NY 161FDD211327A330 PHPSPTA H0053
NY 1592188E0B8AB57A PHPSPTA H0053R
NY 161FDD24118D4F90 PHPSPTA H0054
NY 159218951F95B83A PHPSPTA H0054R
NY 161FDD271103FAB8 PHPSPTA H0055
NY 1592189E0254FFDC PHPSPTA H0055R
NY 161FDD2A0FB47420 PHPSPTA H0056
NY 159218A3106628B2 PHPSPTA H0056R
NY 161FDD2D0ECC1400 PHPSPTA H0057
NY 159218A80E2F55E2 PHPSPTA H0057R
NY 161FDD300B2DCD00 PHPSPTA H0058
NY 159218AD07A19110 PHPSPTA H0058R
NY 161FDD3308997B98 PHPSPTA H0059
NY 159218B203F1A084 PHPSPTA H0059R
NY 161FDD3606748020 PHPSPTA H0060
NY 159218B61A72A7F2 PHPSPTA H0060R
NY 161FDD3904B03ED8 PHPSPTA H0061
NY 159218BC00186A58 PHPSPTA H0061R
NY 161FDD3C0A406260 PHPSPTA H0062
NY 159218C107A4E882 PHPSPTA H0062R
NY 161FDD3F076CD9E0 PHPSPTA H0063
NY 159218C60B4CEFDC PHPSPTA H0063R
NY 161FDD4204F18580 PHPSPTA H0065
NY 159218CB03D33F32 PHPSPTA H0065R
NY 161FDD4503AFE650 PHPSPTA H0066
NY 159218D11270681A PHPSPTA H0066R
NY 161FDD480A6E4D50 PHPSPTA H0067
NY 159218D60D5FA7F4 PHPSPTA H0067R
NY 161FDD4B072E2298 PHPSPTA H0068
NY 159218DD034C0BF0 PHPSPTA H0068R
NY 161FDD4E04A6A770 PHPSPTA H0069
NY 159218E3089A4152 PHPSPTA H0069R
NY 161FDD5102E9EC98 PHPSPTA H0070
NY 159218E914045FE0 PHPSPTA H0070R
NY 161FDD54018DCED0 PHPSPTA H0072
NY 159218EF0F5CFE42 PHPSPTA H0072R
NY 161FDD5706CD9618 PHPSPTA H0074
NY 15C5D03D17A5BBD0 PHPSPTA H0074R
NY 161FDD5A07589C98 PHPSPTA H0075
NY 15C5D0441FAB9554 PHPSPTA H0075R
NY 161FDD5D059E7028 PHPSPTA H0076
NY 15C5D04B1714C114 PHPSPTA H0076R
NY 161FDD6003FA1420 PHPSPTA H0077
NY 15C5D0520506A144 PHPSPTA H0077R
NY 161FDD63084D1890 PHPSPTA H0078
NY 15C5D0581985C1C0 PHPSPTA H0078R
NY 161FDD6606059FA8 PHPSPTA H0079
NY 15C5D05F0F1622FC PHPSPTA H0079R
NY 161FDD6904C8BEC0 PHPSPTA H0080
NY 15C5D066153F7284 PHPSPTA H0080R
NY 161FDD6C19056CB8 PHPSPTA H0081
NY 15C5D06D160BFDE4 PHPSPTA H0081R
NY 161FDD701378F7D8 PHPSPTA H0082
NY 15C5D07317B389C4 PHPSPTA H0082R
NY 161FDD740DECBB50 PHPSPTA H0083
NY 15C5D07916CB5BE8 PHPSPTA H0083R
NY 161FDD7804B1FEE0 PHPSPTA H0084
NY 15C5D080117649A8 PHPSPTA H0084R
NY 161FDD7B0FFCED60 PHPSPTA H0085
NY 15C5D0861C2B48B8 PHPSPTA H0085R
NY 161FDD7E101B8020 PHPSPTA H0090
NY 15A4F3DD163BC854 PHPSPTA H0090R
NY 161FDD810E6C8958 PHPSPTA H0091
NY 15AC14130C6A1E08 PHPSPTA H0091R
NY 161FDD840C4EBEA0 PHPSPTA H0092
NY 15AC14230D148B26 PHPSPTA H0092R
NY 161FDD870A100CB0 PHPSPTA H0093
NY 15AC142A1FF41AAC PHPSPTA H0093R
NY 161FDD8A082F8718 PHPSPTA H0094
NY 15AC14311F137DA4 PHPSPTA H0094R
NY 161FDD8D040DD3A0 PHPSPTA H0095
NY 15AC143714EAD6AA PHPSPTA H0095R
NY 161FDD9001CD64E8 PHPSPTA H0096
NY 15AC143F072A5F2C PHPSPTA H0096R
NY 161FDD9302367578 PHPSPTA H0097
NY 15AC144E1E3BD120 PHPSPTA H0097R
NY 161FDD9603377908 PHPSPTA H0098
NY 15AC1458149FD8E8 PHPSPTA H0098R
NY 161FDD9900A83250 PHPSPTA H0099
NY 15AC14600EA43FEE PHPSPTA H0099R
NY 161FDD9B1EDC32C0 PHPSPTA H0100
NY 15AC146B18A8ACCE PHPSPTA H0100R
NY 161FDD9F03D502D0 PHPSPTA H0101
NY 15AC147612715F96 PHPSPTA H0101R
NY 161FDDA209081A20 PHPSPTA H0102
NY 15AC148507D9F45E PHPSPTA H0102R
NY 161FDDA50841E560 PHPSPTA H0103
NY 15AC29B21813181E PHPSPTA H0103R
NY 161FDDA807F72CC0 PHPSPTA H0104
NY 15AC149308056456 PHPSPTA H0104R
NY 161FDDAB0FFFA0E0 PHPSPTA H0105
NY 15AC149F1AC07FA0 PHPSPTA H0105R
NY 161FDDAE0FABFFD8 PHPSPTA H0106
NY 15AC14AE0591A4BC PHPSPTA H0106R
NY 161FDE0D102AA820 PHPSPTA H1001
NY 155BDC021B6DB61C PHPSPTA H1001R
NY 161FDE100532ED80 PHPSPTA H1002
NY 155BDC071E372DB0 PHPSPTA H1002R
NY 161FDE12162AACB8 PHPSPTA H1003
NY 155BDC0B0BADD90C PHPSPTA H1003R
NY 161FDE1509071AA0 PHPSPTA H1004
NY 155BDC0E0F296544 PHPSPTA H1004R
NY 161FDE17195FCB58 PHPSPTA H1006
NY 155BDC1110CD89B8 PHPSPTA H1006R
NY 161FDE1A16B59890 PHPSPTA H1007
NY 155BDC1507D7663C PHPSPTA H1007R
NY 161FDE1D068027C0 PHPSPTA H1008
NY 155BDC181F551708 PHPSPTA H1008R
NY 161FDE1F153B0C30 PHPSPTA H1009
NY 155BDC1C1E810688 PHPSPTA H1009R
NY 161FDE22042F2988 PHPSPTA H1010
NY 155BDC20123C805C PHPSPTA H1010R
NY 161FDE2413BF0BA0 PHPSPTA H1012
NY 155BDC2413BEE580 PHPSPTA H1012R
NY 161FDE27046055A8 PHPSPTA H1013
NY 155BDC281EF4CEA8 PHPSPTA H1013R
NY 161FDE2912808880 PHPSPTA H1014
NY 155BDC2D00D913F0 PHPSPTA H1014R
NY 161FDE2C01AA4750 PHPSPTA H1015
NY 155BDC30171DBA90 PHPSPTA H1015R
NY 161FDE2E1621F790 PHPSPTA H1016
NY 155BDC331DDCD7F4 PHPSPTA H1016R
NY 161FDE31070D19E8 PHPSPTA H1017
NY 155BDC361CA05AE0 PHPSPTA H1017R
NY 161FDE33151F57B8 PHPSPTA H1018
NY 155BDC391241B8E0 PHPSPTA H1018R
NY 161FDE360456DE70 PHPSPTA H1019
NY 155BDC3C0A496C88 PHPSPTA H1019R
NY 161FDE381429AFC0 PHPSPTA H1020
NY 155BDC3F01A2428C PHPSPTA H1020R
NY 161FDE3B11A2D228 PHPSPTA H1021
NY 155BDC411863F014 PHPSPTA H1021R
NY 161FDE3E049D9430 PHPSPTA H1022
NY 155BDC4409BCCD8C PHPSPTA H1022R
NY 161FDE4014A1E9D0 PHPSPTA H1023
NY 155BDC480314DC74 PHPSPTA H1023R
NY 161FDE4305D95878 PHPSPTA H1024
NY 155BDC4B07ED0AC0 PHPSPTA H1024R
NY 161FDE4516C79DE8 PHPSPTA H1025
NY 155BDC4E09BDAC40 PHPSPTA H1025R
NY 161FDE48063FDFD8 PHPSPTA H1026
NY 155BDC5107BFCECC PHPSPTA H1026R
NY 161FDE4A1851D0F0 PHPSPTA H1027
NY 155BDC531CFA8FE4 PHPSPTA H1027R
NY 161FDE4D08209BA8 PHPSPTA H1028
NY 155BDC5617546790 PHPSPTA H1028R
NY 161FDE4F18F12778 PHPSPTA H1029
NY 155BDC5913982694 PHPSPTA H1029R
NY 161FDE5209BE3CE8 PHPSPTA H1031
NY 155BDC5D02DA37C0 PHPSPTA H1031R
NY 161FDE5419B880B8 PHPSPTA H1032
NY 155BDC6316ADAC4C PHPSPTA H1032R
NY 161FDE570994B9C0 PHPSPTA H1033
NY 155BDC6706CC7C10 PHPSPTA H1033R
NY 161FDE591A8134D0 PHPSPTA H1034
NY 155BDC6A13A513C4 PHPSPTA H1034R
NY 161FDE5C09F8D5B8 PHPSPTA H1035
NY 155BDC6E0AC09784 PHPSPTA H1035R
NY 161FDE5E1A512EF0 PHPSPTA H1036
NY 158A85B901EC2828 PHPSPTA H1036R
NY 16488F5B04F61578 PHPSPTA H1037
NY 155BDC750E375AA4 PHPSPTA H1037R
NY 161FDE6401599EF8 PHPSPTA H1038
NY 155BDC780E52907C PHPSPTA H1038R
NY 161FDE6611EDBE68 PHPSPTA H1039
NY 155BDC7B13DFCE04 PHPSPTA H1039R
NY 161FDE6901AED080 PHPSPTA H1040
NY 155BDC7E15785B10 PHPSPTA H1040R
NY 161FDE6B113CCFE8 PHPSPTA H1041
NY 155BDC820EB9A1D4 PHPSPTA H1041R
NY 161FDE6E02365EA0 PHPSPTA H1042
NY 155BDC860BAB9440 PHPSPTA H1042R
NY 161FDE70156E1E18 PHPSPTA H1043
NY 155BDC8A000C7508 PHPSPTA H1043R
NY 161FDE730667E1D8 PHPSPTA H1044
NY 155BDC8E1AC79150 PHPSPTA H1044R
NY 161FDE75172311A8 PHPSPTA H1046
NY 15ACA3D315FD0A1A PHPSPTA H1046R
NY 161FDE7806709330 PHPSPTA H1047
NY 155BDC951DD95064 PHPSPTA H1047R
NY 161FDE7A15CBD0B8 PHPSPTA H1048
NY 155BDC9A195F1CAC PHPSPTA H1048R
NY 161FDE7D0E4EFC90 PHPSPTA H1051
NY 1584DFBF09E5165C PHPSPTA H1051R
NY 15816A34079F3880 PHPSPTA H1051X
NY 161FDE80088551C8 PHPSPTA H1056
NY 155BDCA117D55598 PHPSPTA H1056R
NY 161FDE8217CDEF70 PHPSPTA H1057
NY 155BDCA418814914 PHPSPTA H1057R
NY 161FECCF00E17C20 PHPSPTA H1058
NY 155BDCA714AC9E14 PHPSPTA H1058R
NY 161FECD21DE71C40 PHPSPTA H1059
NY 155BDCAA1380A8EC PHPSPTA H1059R
NY 161FECD6066E9C20 PHPSPTA H1060
NY 155BDCAD061DC944 PHPSPTA H1060R
NY 161FECD90BE52440 PHPSPTA H1061
NY 155BDCAF18C672B4 PHPSPTA H1061R
NY 161FECDC109D7628 PHPSPTA H1062
NY 155BDCB21F3D7428 PHPSPTA H1062R
NY 161FECDF1222D330 PHPSPTA H1063
NY 155BDCB60F133A14 PHPSPTA H1063R
NY 161FECE2181277D0 PHPSPTA H1064
NY 155BDCB914653080 PHPSPTA H1064R
NY 161FECE6037780C8 PHPSPTA H1065
NY 155BDCBC186AAF74 PHPSPTA H1065R
NY 161FECE90BB44280 PHPSPTA H1066
NY 155BDCC0084869BC PHPSPTA H1066R
NY 161FECEC0ED8C648 PHPSPTA H1067
NY 155BDCC30620BA1C PHPSPTA H1067R
NY 161FECEF0A249C48 PHPSPTA H1068
NY 155BDCC6016F5008 PHPSPTA H1068R
NY 161FECF209283BE0 PHPSPTA H1069
NY 155BDCC9044B858C PHPSPTA H1069R
NY 161FECF50C793EB0 PHPSPTA H1071
NY 155BDCCC165495DC PHPSPTA H1071R
NY 15DC641200ECE17C PHPSPTA H1071X
NY 161FECF810778CA0 PHPSPTA H1072
NY 155BDCD00B413930 PHPSPTA H1072R
NY 161FECFB11377B20 PHPSPTA H1073
NY 155BDCD319CAF2C0 PHPSPTA H1073R
NY 161FECFE061DB038 PHPSPTA H1074
NY 155BDCD80F9233BC PHPSPTA H1074R
NY 161FED00163D3890 PHPSPTA H1075
NY 155BDCDB0DB3B18C PHPSPTA H1075R
NY 161FED03136463B0 PHPSPTA H1076
NY 155BDCDE0B1AA074 PHPSPTA H1076R
NY 161FED060E434DA0 PHPSPTA H1077
NY 155BDCE108D7039C PHPSPTA H1077R
NY 161FED090CEDF588 PHPSPTA H1078
NY 155BDCE40EFAC860 PHPSPTA H1078R
NY 161FED0C08C7B388 PHPSPTA H1079
NY 155BDCE71815C8C0 PHPSPTA H1079R
NY 161FED0F05C96360 PHPSPTA H1080
NY 155BDCEA119ABEC4 PHPSPTA H1080R
NY 161FED12077AFC20 PHPSPTA H1081
NY 155BDCED03791A08 PHPSPTA H1081R
NY 161FED150107E628 PHPSPTA H1082
NY 155BDCF8041D0CAC PHPSPTA H1082R
NY 161FED171006BFC0 PHPSPTA H1083
NY 155BDCFA1ABE2414 PHPSPTA H1083R
NY 161FED191F3194B0 PHPSPTA H1084
NY 155BDCFD18411260 PHPSPTA H1084R
NY 161FED1C0D617888 PHPSPTA H1085
NY 155BDD01018C390C PHPSPTA H1085R
NY 161FED1E1D792E90 PHPSPTA H1086
NY 155BDD04195F28CC PHPSPTA H1086R
NY 161FED210B6F3400 PHPSPTA H1087
NY 155BDD081B376444 PHPSPTA H1087R
NY 161FED231E0822F0 PHPSPTA H1088
NY 155BDD0C153A597C PHPSPTA H1088R
NY 161FED2617B63710 PHPSPTA H1089
NY 155BDD1002B4259C PHPSPTA H1089R
NY 161FED290E6FF710 PHPSPTA H1090
NY 155BDD1302792958 PHPSPTA H1090R
NY 161FED2B1D86B130 PHPSPTA H1091
NY 155BDD16089DAB30 PHPSPTA H1091R
NY 161FED2E0D091280 PHPSPTA H1092
NY 155BDD2117BE19B4 PHPSPTA H1092R
NY 161FED301C4A7DB8 PHPSPTA H1093
NY 155BDD241BA7FDC4 PHPSPTA H1093R
NY 161FED330D630468 PHPSPTA H1094
NY 155BDD271DAF37E0 PHPSPTA H1094R
NY 161FED351D165ED8 PHPSPTA H1095
NY 155BDD2B00B83E48 PHPSPTA H1095R
NY 161FED380BE31F50 PHPSPTA H1096
NY 155BDD2E1017989C PHPSPTA H1096R
NY 161FED3A1C1E60F8 PHPSPTA H1097
NY 155BDD311042AC38 PHPSPTA H1097R
NY 161FED3D0C21A228 PHPSPTA H1099
NY 15A4FD37163C3114 PHPSPTA H1099R
NY 161FED3F1BAE6B48 PHPSPTA H1100
NY 1584DFC6136F3DA0 PHPSPTA H1100R
NY 15816A36033CC6B4 PHPSPTA H1100X
NY 161FED4219B089C0 PHPSPTA H1101
NY 1584DFCD05FA4DB4 PHPSPTA H1101R
NY 15816A370D903F2C PHPSPTA H1101X
NY 161FED4514635AB8 PHPSPTA H1102
NY 1584DFD309263C14 PHPSPTA H1102R
NY 161FED4804361A28 PHPSPTA H1112
NY 1584DFB60BC66010 PHPSPTA H1112R
NY 15C483AA06397F0C PHPSPTA H1112X
NY 161FED4A1E930520 PHPSPTA H1113
NY 155BDD480A63B8F0 PHPSPTA H1113R
NY 15C8EF841FE89A0C PHPSPTA H1113X
NY 161FED4D16245178 PHPSPTA H1115
NY 1566AB81098E9D94 PHPSPTA H1115R
NY 1583ED1F1E666B9C PHPSPTA H1115X2
NY 161FED5010DFA3B8 PHPSPTA H1116
NY 15ACA3DA185219F2 PHPSPTA H1116R
NY 15A0601E1851EE58 PHPSPTA H1116X2
NY 161FED5317270668 PHPSPTA H1117
NY 155BDD5215C47080 PHPSPTA H1117R
NY 161FED56065A0978 PHPSPTA H1118
NY 155BDD550B98865C PHPSPTA H1118R
NY 161FED5816A66898 PHPSPTA H1120
NY 1588083502F675E0 PHPSPTA H1120R
NY 161FED5B1081F558 PHPSPTA H1121
NY 158808391E6D6298 PHPSPTA H1121R
NY 161FED5E0CAAC940 PHPSPTA H1122
NY 1588083E0E2B8A58 PHPSPTA H1122R
NY 161FED610B14E640 PHPSPTA H1123
NY 15880843067C1C78 PHPSPTA H1123R
NY 161FED64022752A8 PHPSPTA H1124
NY 158808480E8A888C PHPSPTA H1124R
NY 161FED66191DF450 PHPSPTA H1125
NY 1588084E11535E04 PHPSPTA H1125R
NY 161FED690F945E90 PHPSPTA H1126
NY 158808531E5DC988 PHPSPTA H1126R
NY 161FED6C05601230 PHPSPTA H1127
NY 158808571B9CC210 PHPSPTA H1127R
NY 161FED6E1DD2D600 PHPSPTA H1128
NY 1588085C14B63814 PHPSPTA H1128R
NY 161FED71158E1C28 PHPSPTA H1129
NY 158808610ED59A74 PHPSPTA H1129R
NY 161FED740ADF3B98 PHPSPTA H1130
NY 158808660480FF9C PHPSPTA H1130R
NY 161FED77033D7E38 PHPSPTA H1131
NY 1588086A1F9EAF9C PHPSPTA H1131R
NY 161FED79198F2E40 PHPSPTA H1132
NY 1588086F1A327960 PHPSPTA H1132R
NY 161FED7C0AC87678 PHPSPTA H1133
NY 158808740F91C07C PHPSPTA H1133R
NY 161FED7E190C6C40 PHPSPTA H1134
NY 158808790AF445B8 PHPSPTA H1134R
NY 161FED8109006C60 PHPSPTA H1135
NY 1588087E03B881B4 PHPSPTA H1135R
NY 161FED8317E80110 PHPSPTA H1136
NY 1588088303BDDDD8 PHPSPTA H1136R
NY 161FED86063A8180 PHPSPTA H1137
NY 158808871B5AB230 PHPSPTA H1137R
NY 161FED881655D160 PHPSPTA H1138
NY 1597B8020AD0BD9A PHPSPTA H1138R
NY 161FED8B06039590 PHPSPTA H1139
NY 158A8DEB02D28CC4 PHPSPTA H1139R
NY 161FED8D145762C8 PHPSPTA H1140
NY 15880895102A7A88 PHPSPTA H1140R
NY 161FED9003DD1C68 PHPSPTA H1141
NY 1588089916CF1EA0 PHPSPTA H1141R
NY 161FED9213061778 PHPSPTA H1142
NY 1588089D0ACC33D0 PHPSPTA H1142R
NY 161FED9500FEA7F0 PHPSPTA H1143
NY 158808A11E2F0884 PHPSPTA H1143R
NY 161FED970EBC5C30 PHPSPTA H1144
NY 158808A619D7DD2C PHPSPTA H1144R
NY 161FED991D0D7A38 PHPSPTA H1145
NY 158808AB105DC8C0 PHPSPTA H1145R
NY 161FED9C0C731020 PHPSPTA H1146
NY 158808B00B779D20 PHPSPTA H1146R
NY 161FED9E1A9B0998 PHPSPTA H1147
NY 158808B505709F8C PHPSPTA H1147R
NY 161FEDA10A2B5FC8 PHPSPTA H1148
NY 158808BA04AE2478 PHPSPTA H1148R
NY 161FEDA318E185F8 PHPSPTA H1149
NY 158808BF01838FDC PHPSPTA H1149R
NY 161FEDA607142670 PHPSPTA H1150
NY 158808C31D7FCF1C PHPSPTA H1150R
NY 161FEDB412B59D58 PHPSPTA H1151
NY 158808C80D365CA8 PHPSPTA H1151R
NY 161FEDB712319570 PHPSPTA H1152
NY 158808CC1E10D514 PHPSPTA H1152R
NY 161FEDBA1023E610 PHPSPTA H1153
NY 158808D114BF7A60 PHPSPTA H1153R
NY 161FEDBD06893138 PHPSPTA H1154
NY 158808D60B439D10 PHPSPTA H1154R
NY 161FEDBF1DA923B0 PHPSPTA H1155
NY 158808DA07E4DBF0 PHPSPTA H1155R
NY 161FEDC21B16A850 PHPSPTA H1156
NY 158808DF0EDBE740 PHPSPTA H1156R
NY 161FEDC511668FE8 PHPSPTA H1157
NY 158808E40E6D543C PHPSPTA H1157R
NY 161FEDC80E57B7F8 PHPSPTA H1158
NY 158808E9094D7624 PHPSPTA H1158R
NY 161FEDCB0558D420 PHPSPTA H1159
NY 15A4FCC71DEF06F4 PHPSPTA H1159R
NY 161FEDCD1DD3DF00 PHPSPTA H1160
NY 15A4FCCC17DAF046 PHPSPTA H1160R
NY 161FEDD0158252E8 PHPSPTA H1161
NY 15A4FCD015A005C6 PHPSPTA H1161R
NY 161FEDD30CE85468 PHPSPTA H1162
NY 15A4FCD414EE74BC PHPSPTA H1162R
NY 161FEDD6043AADA0 PHPSPTA H1163
NY 15AC15B60E7E6D46 PHPSPTA H1163R
NY 161FEDD81BB86000 PHPSPTA H1164
NY 15AC15BA184D6394 PHPSPTA H1164R
NY 161FEDDB123E7738 PHPSPTA H1165
NY 15AC15BE18D5B91A PHPSPTA H1165R
NY 161FEDDE09A40798 PHPSPTA H1166
NY 15AC15C21EB803EC PHPSPTA H1166R
NY 161FEDE1044854B0 PHPSPTA H1167
NY 15AC15C614AF6C92 PHPSPTA H1167R
NY 161FEDE31D19E598 PHPSPTA H1168
NY 15AC15CA1CE5E3EA PHPSPTA H1168R
NY 161FEDE61B70C198 PHPSPTA H1169
NY 15AC15CF080B269C PHPSPTA H1169R
NY 161FEDEA01BC29B8 PHPSPTA H1170
NY 15AC15D312F51EEE PHPSPTA H1170R
NY 161FEDEC1FDF4C38 PHPSPTA H1171
NY 15AC15D811701362 PHPSPTA H1171R
NY 161FEDEF1963A618 PHPSPTA H1172
NY 15AC15DD0616B9FA PHPSPTA H1172R
NY 161FEDF211083818 PHPSPTA H1173
NY 15AC15E103FD7D98 PHPSPTA H1173R
NY 161FEDF50CB5DD40 PHPSPTA H1174
NY 15AC15E5134DBE32 PHPSPTA H1174R
NY 161FEDF809914D70 PHPSPTA H1175
NY 15AC161D09607442 PHPSPTA H1175R
NY 161FEDFA17B6BF10 PHPSPTA H1176
NY 15AC16220F3514C8 PHPSPTA H1176R
NY 161FEDFD05AD8F30 PHPSPTA H1177
NY 15AC1627160FAD56 PHPSPTA H1177R
NY 161FEDFF13BFF408 PHPSPTA H1178
NY 15AC162B1E6AA318 PHPSPTA H1178R
NY 161FEE02021D61E0 PHPSPTA H1179
NY 15AC1631000EE58C PHPSPTA H1179R
NY 161FEE04116E3098 PHPSPTA H1180
NY 15AC163519AC7ACA PHPSPTA H1180R
NY 161FEE070015F508 PHPSPTA H1181
NY 15AC163A078833B6 PHPSPTA H1181R
NY 161FEE090E43D8D0 PHPSPTA H1182
NY 15AC163E1A204160 PHPSPTA H1182R
NY 161FEE0B1CD116F8 PHPSPTA H1183
NY 15AC164311D0EB7C PHPSPTA H1183R
NY 161FEE0E0A39E4D8 PHPSPTA H1184
NY 15AC16480B30358C PHPSPTA H1184R
NY 161FEE1018A76240 PHPSPTA H1185
NY 15AC164D016D16C2 PHPSPTA H1185R
NY 161FEE130668A2E0 PHPSPTA H1186
NY 15AC16520A834990 PHPSPTA H1186R
NY 161FEE1514913AA0 PHPSPTA H1187
NY 15AC165719986650 PHPSPTA H1187R
NY 161FEE1803D9C1A8 PHPSPTA H1188
NY 15AC165C1ACD812C PHPSPTA H1188R
NY 161FEE1A1153AE80 PHPSPTA H1189
NY 15AC166305575FF0 PHPSPTA H1189R
NY 161FEE1C1F3E3F50 PHPSPTA H1190
NY 15AC166813C505D4 PHPSPTA H1190R
NY 161FEE1F0EFADB18 PHPSPTA H1191
NY 15AC166E06CBF05A PHPSPTA H1191R
NY 161FEE211C92DAD8 PHPSPTA H1192
NY 15AC16730BBC53A6 PHPSPTA H1192R
NY 161FEE240A2EB8C8 PHPSPTA H1193
NY 15AC1678186FF6C2 PHPSPTA H1193R
NY 161FEE261885BD78 PHPSPTA H1194
NY 15AC167D071126E0 PHPSPTA H1194R
NY 161FEE2909A03CC8 PHPSPTA H1195
NY 15AC16811084B2BC PHPSPTA H1195R
NY 161FEE2B199D2C70 PHPSPTA H1196
NY 15AC1686025898D4 PHPSPTA H1196R
NY 161FEE2E07E6B948 PHPSPTA H1197
NY 15AC168A0168C574 PHPSPTA H1197R
NY 161FEE3015729858 PHPSPTA H1198
NY 15AC168D154B3C68 PHPSPTA H1198R
NY 161FEE3303370CC8 PHPSPTA H1199
NY 15AC1691174F64EE PHPSPTA H1199R
NY 161FEE35112046E0 PHPSPTA H1200
NY 15AC169603C5E4D8 PHPSPTA H1200R
NY 160D1D7D1EE16DB0 PHPSPTA HAXPRST
NY 15E7709F17E5EDB0 PHPSPTA HMCALDB
NY 155BBCF304541900 PHPSPTA HMCAUDT
NY 15AF999510594FC8 PHPSPTA HMCBCRD
NY 161D969413D2F020 PHPSPTA HMCCFGV
NY 157DCAFB0018DB28 PHPSPTA HMCCFGX
NY 15B60AC21A37C08A PHPSPTA HMCCNVSD
NY 1648BC9C0A07CBB0 PHPSPTA HMCCOS1
NY 15C7B6C10BCB2FD8 PHPSPTA HMCECR2
NY 15C7B6C90CC88A90 PHPSPTA HMCECR4
NY 15CACE6508736400 PHPSPTA HMCECR5
NY 15C7B6B0066AD23C PHPSPTA HMCECRC
NY 15D9BE630DFF1524 PHPSPTA HMCERE2
NY 15D9BE6915344B80 PHPSPTA HMCERE4
NY 15D9BE6F0D6D9698 PHPSPTA HMCERE5
NY 15D9BE521E305188 PHPSPTA HMCEREP
NY 15220C551C3B6E28 PHPSPTA HMCEXP3
NY 15CE713C00D20FB8 PHPSPTA HMCGSET
NY 166877D90BF64B88 PHPSPTA HMCLKCK
NY 161F0BE31EED2D30 PHPSPTA HMCPRSX
NY 1615BD381DA77DA0 PHPSPTA HMCPRUP
NY 1619587800D60890 PHPSPTA HMCPRUS
NY 164B90BD1C019430 PHPSPTA HMCQRY
NY 164B90C806C859B8 PHPSPTA HMCQRY2
NY 164B90CD10509A64 PHPSPTA HMCQRY4
NY 164B90D0073EB890 PHPSPTA HMCQRY5
NY 15C7830702097490 PHPSPTA HMCRCR2
NY 15C7830E185A6BFC PHPSPTA HMCRCR4
NY 15C78317061022C4 PHPSPTA HMCRCR5
NY 15C7832B09628D34 PHPSPTA HMCRCRC
NY 15D7894D02F10E00 PHPSPTA HMCRES
NY 15D9BE8F1D89B10C PHPSPTA HMCRRE2
NY 15D9BE9513654C98 PHPSPTA HMCRRE4
NY 15DA3869101E5928 PHPSPTA HMCRRE5
NY 15D9BE7C1DE60F88 PHPSPTA HMCRREP
NY 163917300E3A09E8 PHPSPTA HMCSEC3
NY 1639247400924910 PHPSPTA HMCSIG3
NY 167A381006E54154 PHPSPTA HMCSRVR
NY 165068C40486A51C PHPSPTA HMCSTK
NY 1648701D08505C48 PHPSPTA HMCTRAN
NY 15AAE9F00D66AC82 PHPSPTA HMCXRL4
NY 162D0C2C0A2CAAE0 PHPSPTA HMCXRLE
NY 15A7C94E1ED22D8E PHPSPTA HMPBNDM
NY 164DEE021925D98C PHPSPTA HMPBNDR
NY 1608E2520A62D370 PHPSPTA HMPBNDR4
NY 1603114C09187630 PHPSPTA HMPBTBL
NY 1631560B086E34A8 PHPSPTA HMPDCLG
NY 15E76E4709C5C930 PHPSPTA HMPFCMP
NY 164890B40BD43E58 PHPSPTA HMPGCB
NY 163155830B285D98 PHPSPTA HMPGDDL
NY 1631561808A47EF8 PHPSPTA HMPGENP
NY 164DEDE0153DDC90 PHPSPTA HMPGENX
NY 15976C280BCB1DB8 PHPSPTA HMPGPNL
NY 1687224D0F9F5FFC PHPSPTA HMPRBDR
NY 155BC2A1004D5FD8 PHPSPTA HMPSNAM
NY 1637EC541E9F2518 PHPSPTA HMPUTRN
NY 15CB758A0929ECF4 PHPSPTA HMPVRSN
NY 1534BB420D798BC4 PHPSPTA RMICKJB
NY 1619076913430EE0 PHPSPTA RMIGNID
NY 155BFD0F07DCE618 PHPSPTA RMIPDAD
NY 155BFD141D669A04 PHPSPTA RMISTAD
NY 155BFD1B04E61B4C PHPSPTA RMISTUP
NY 15811B3A09912CCC PHPSPTA SEDTRNS
NY 158FBB970661F6C2 PHPSPTA STKCLON
NY 15D80C3E18F94D23 PI PI5330 19970602171837S101702A064346API5330
NY 15E49AD60E0E501A PI PI5330 19970821145248S101702A066132API5330
NY 15E7E7F31F8400F2 PI PI5330 19970911145900S101702M000825API5330
NY 15F37FEF1A624D38 PI PI9180 19971124092916S101702Z346248API9180
NY 15F383AA0CCB743C PI PI9180 19971124114227S101702Z346248API9180
NY 15F384B90AFA1C10 PI PI9180 19971124122047S101702Z346248API9180
NY 1576DF591B11FAFA PI PT5310 19950923S101702Z209544APT5310
NY 160522321585D6B6 PI PT5310 19980316142018S101702A071106APT5310
NY 1605231506D029A8 PI PT5310 19980316145200S101702A071106APT5310
NY 160524D602F7E70C PI PT5310 19980316155305S101702A071106APT5310
NY 15769B300BFD6A92 PI PT5500 19950921S101702Z209344APT5500
NY 15769BDD0A003F54 PI PT5500 19950921S101702Z209353APT5500
NY 15769CA51A09D4D6 PI PT5500 19950921S101702Z209365APT5500
NY 1576E23612C24274 PI PT5500 19950923S101702Z209547APT5500
NY 1576E34212AD1454 PI PT5500 19950923S101702Z209549APT5500
NY 1576E4AE10DB0846 PI PT5500 19950923S101702Z209554APT5500
NY 160522471FE39FB6 PI PT5500 19980316142018S101702A071106APT5500
NY 16052321065E4F8A PI PT5500 19980316145200S101702A071106APT5500
NY 160524D40C0ACCDE PI PT5500 19980316155306S101702A071106APT5500
NY 17CBED730FCDA14B PR PR0700I PMRT00003856C451BC
NY 17D28B271FAFF6EE PR PR0700I PMRT00004756FBDF9D
NY 17CBED7504865065 PR PR0730I PMRT00003856C451C9
NY 17D28B290707B4B6 PR PR0730I PMRT00004756FBDFA6
NY 1700981E0C5A22E0 PSSSICH PSSCSQL V4000
NY 1576C95000BB4872 PT PT5310 19950922S101702Z209539APT5310
NY 1576DF591B11FAFA PT PT5310 19950923S101702Z209544APT5310
NY 160522321585D6B6 PT PT5310 19980316142018S101702A071106APT5310
NY 1605231506D029A8 PT PT5310 19980316145200S101702A071106APT5310
NY 160524D602F7E70C PT PT5310 19980316155305S101702A071106APT5310
NY 15E7E7C7158A3702 PT PT5440 19970911145557S101702M000825APT5440
NY 15F0B4EB1937796C PT PT5440 19971106145743S101702A067886APT5440
NY 15769A9E11F1BCB4 PT PT5500 19950921S101702Z209329APT5500
NY 15769B300BFD6A92 PT PT5500 19950921S101702Z209344APT5500
NY 15769BDD0A003F54 PT PT5500 19950921S101702Z209353APT5500
NY 15769CA51A09D4D6 PT PT5500 19950921S101702Z209365APT5500
NY 1576E0100F2EAFEC PT PT5500 19950923S101702Z209545APT5500
NY 1576E0C60DF3B43C PT PT5500 19950923S101702Z209546APT5500
NY 1576E23612C24274 PT PT5500 19950923S101702Z209547APT5500
NY 1576E2CF001CFF64 PT PT5500 19950923S101702Z209548APT5500
NY 1576E34212AD1454 PT PT5500 19950923S101702Z209549APT5500
NY 1576E3A9166DCD96 PT PT5500 19950923S101702Z209550APT5500
NY 1576E4311B55E77A PT PT5500 19950923S101702Z209551APT5500
NY 1576E4AE10DB0846 PT PT5500 19950923S101702Z209554APT5500
NY 158442EC1671AB8C PT PT5500 19951217S101702Z225217APT5500
NY 1584EC800C7CD4C6 PT PT5500 19951221S101702Z226191APT5500
NY 160522471FE39FB6 PT PT5500 19980316142018S101702A071106APT5500
NY 16052321065E4F8A PT PT5500 19980316145200S101702A071106APT5500
NY 160524D40C0ACCDE PT PT5500 19980316155306S101702A071106APT5500
NY 15E7E7ED0B68575C PT PT5510 19970911145559S101702M000825APT5510
NY 15F427070ACF74D8 PT PT5510 19971128130923S101702Z347739APT5510
NY 15F74F061D9C512C PT PT5510 19971218150836S101702A069263APT5510
NY 15F51E1F0353ADD0 PT PT8060 19971204163212S101702M000828APT8060
NY 160C314A07BB75F6 PT PT8490 19980430141812S101702A072050APT8490
NY 15FCCEB0130AE135 PT PT8500 19980122145053S101702A069863APT8500
NY 1576BE1A12EFE12A PT PT8520 19950922S101702Z209475APT8520
NY 1576E4A202F8FA54 PT PT8520 19950923S101702Z209553APT8520
NY 158B34781F8F67CE PT PT8520 19960130S101702Z232085APT8520
NY 15A06492075EA8E0 PT PT8520 19960613141320S101702M000695APT8520
NY 15BF57A913832FA4 PT PT8520 19961227123142S101702M000758APT8520
NY 160E649B1FE921CC PT PT8550 19980514142122S101702A072418APT8550
NY 15D2FAFE11AC610A PT PT8640 19970501112819S101702Z309494APT8640
NY 15D78DA70F21A16F PT PT8640 19970530134806S101702Z313782APT8640
NY 15DBCB591EF53862 PT PT8640 19970626132656S101702A064909APT8640
NY 15BFFB821DCDEEE4 PT PT8650 19961231141731S101702Z286711APT8650
NY 15C073AE08615E2C PT PT8650 19970103135840S101702Z287197APT8650
NY 15C4DC300D0FCCC6 PT PT8650 19970131150927S101702A061364APT8650
NY 15D3025C05BF972C PT PT8660 19970501155240S101702Z309514APT8660
NY 15D78DCB12589A5F PT PT8660 19970530135311S101702Z313785APT8660
NY 15DBCB5810DC9F80 PT PT8660 19970626132652S101702A064909APT8660
NY 15B7A6CD0776D948 PT YPTBAK 19961108140520S101702Z275952AYPTBAK
NY 15B82E3118A4DB0C PT YPTBAK 19961111225045S101702Z276501AYPTBAK
NY 15B82F0A10C29FC2 PT YPTBAK 19961111232114S101702Z276502AYPTBAK
NY 15B84E911770ABC6 PT YPTBAK 19961112180917S101702Z276858AYPTBAK
NY 15B85D13076AB4CA PT YPTBAK 19961113024850S101702Z276869AYPTBAK
NY 15B8BB991E5F6618 PT YPTBAK 19961115111205S101702A058611AYPTBAK
NY 15C00D9B0E244E32 PT YPTBAK 19970101010523S101702Z286736AYPTBAK
NY 15C4DC1D0F2561BC PT YPTBAK 19970131150650S101702A061364AYPTBAK
NY 15C52C0E0C29018E PT YPTBAK 19970202144825S101702Z294216AYPTBAK
NY 15C69716081FC1C2 PT YPTBAK 19970211152131S101702Z295652AYPTBAK
NY 15C96D8410280334 PT YPTBAK 19970301164109S101702Z298905AYPTBAK
NY 15CD838B169BBC14 PT YPTBAK 19970327164021S101702Z303850AYPTBAK
NY 15D2DB0F0D9D6E96 PT YPTBAK 19970430162533S101702Z309430AYPTBAK
NY 15D78D8E074A916E PT YPTBAK 19970530134436S101702Z313781AYPTBAK
NY 15DBCB4E1A2B4AE2 PT YPTBAK 19970626132441S101702A064909AYPTBAK
NY 15DCB9E00B9F9790 PT YPTBAK 19970702114347S101702Z319299AYPTBAK
NY 15DE006704E8B1CB PT YPTBAK 19970710143049S101702A065152AYPTBAK
NY 15E266B9028DEDE0 PT YPTBAK 19970807142356S101702A065756AYPTBAK
NY 15E49AEF0B921EAA PT YPTBAK 19970821145703S101702A066147AYPTBAK
NY 15E8FEE61BDA43D6 PT YPTBAK 19970918132513S101702A066834AYPTBAK
NY 15EBCE4414357C32 PT YPTBAK 19971006103232S101702Z337756AYPTBAK
NY 15EE8182170E3CB8 PT YPTBAK 19971023145209S101702A067699AYPTBAK
NY 15F40132187C72CA PT YPTBAK 19971127143521S101702A068552AYPTBAK
NY 15FABB5101948028 PT YPTBAK 19980109095256S101702Z354315AYPTBAK
NY 15FCCF2A0295BF06 PT YPTBAK 19980122150833S101702A069955AYPTBAK
NY 160F563E0D279370 PT YPTBAK 19980520142938S101702A072384AYPTBAK
NY 161190060C42EFEC PT YPTBAK 19980603182259S101702Z377284AYPTBAK
NY 1612CAF000AC8EE2 PT YPTBAK 19980611141330S101702A072986AYPTBAK
NY 1616BD80170F59EC PT YPTBAK 19980706170353S101702Z382086AYPTBAK
NY 15B7A6CD1C5235AE PT YPTBER 19961108140519S101702Z275952AYPTBER
NY 15B84E9116D6F49E PT YPTBER 19961112180916S101702Z276858AYPTBER
NY 15B8BB991C01C330 PT YPTBER 19961115111204S101702A058611AYPTBER
NY 15C4DC1C0C27ABAC PT YPTBER 19970131150649S101702A061364AYPTBER
NY 15C52C0204C2AD20 PT YPTBER 19970202144632S101702Z294215AYPTBER
NY 15C96D840C52C4D8 PT YPTBER 19970301164107S101702Z298905AYPTBER
NY 15CD838B14670644 PT YPTBER 19970327164021S101702Z303850AYPTBER
NY 15D2DB0F0C4EF8EA PT YPTBER 19970430162531S101702Z309430AYPTBER
NY 15D78D8E05A65FE3 PT YPTBER 19970530134435S101702Z313781AYPTBER
NY 15DCB9E004319F82 PT YPTBER 19970702114345S101702Z319299AYPTBER
NY 15DE00680AEC1396 PT YPTBER 19970710143019S101702A065152AYPTBER
NY 15E8FEE519C2BED6 PT YPTBER 19970918132507S101702A066834AYPTBER
NY 15EBCE44117D78EE PT YPTBER 19971006103226S101702Z337756AYPTBER
NY 15EE81810DB0104A PT YPTBER 19971023145207S101702A067699AYPTBER
NY 15F4012F1C28123A PT YPTBER 19971127143518S101702A068552AYPTBER
NY 15FABB51020CF0D2 PT YPTBER 19980109095255S101702Z354315AYPTBER
NY 15FCCF281C6740C4 PT YPTBER 19980122150832S101702A069955AYPTBER
NY 15B7A6CD019CE8F6 PT YPTBZAC 19961108140519S101702Z275952AYPTBZAC
NY 15B84E9116F18FA4 PT YPTBZAC 19961112180917S101702Z276858AYPTBZAC
NY 15B85D121A7FB7E0 PT YPTBZAC 19961113024849S101702Z276869AYPTBZAC
NY 15B8BB991BF2DE38 PT YPTBZAC 19961115111204S101702A058611AYPTBZAC
NY 15C96D840C475B1A PT YPTBZAC 19970301164109S101702Z298905AYPTBZAC
NY 15CD838B1656C8C6 PT YPTBZAC 19970327164021S101702Z303850AYPTBZAC
NY 15D2DB0F0D384228 PT YPTBZAC 19970430162532S101702Z309430AYPTBZAC
NY 15D78D91182C4DF2 PT YPTBZAC 19970530134435S101702Z313781AYPTBZAC
NY 15DBCB4D17199AE6 PT YPTBZAC 19970626132432S101702A064909AYPTBZAC
NY 15DCB9E007B1B9A4 PT YPTBZAC 19970702114346S101702Z319299AYPTBZAC
NY 15DE00670F7BC36C PT YPTBZAC 19970710143026S101702A065152AYPTBZAC
NY 15E8FEE502A4428C PT YPTBZAC 19970918132511S101702A066834AYPTBZAC
NY 15EBCE4410B183F8 PT YPTBZAC 19971006103230S101702Z337756AYPTBZAC
NY 15EE81810DB15824 PT YPTBZAC 19971023145208S101702A067699AYPTBZAC
NY 15F4012E0ACB83CC PT YPTBZAC 19971127143519S101702A068552AYPTBZAC
NY 1579E3C114C9C4E6 PT YYPTM12 19951012S101702A048386AYYPTM12
NY 1798FBDD04B87AF8 PU PU7334 A18Q002532
NY 180096D90561FF68 PU PU7334 JCLB000014
NY 181558C31EE2F0FE PU PU7334 JCLB000021
NY 15A05CEC1F5D6F70 PUPG53 HMCCNVI1
NY 15C7873D10990614 PUPG53 HMCCNVK
NY 15A043920A5B4270 PUPG53 HMCCNVK2
NY 15A0441013B493C2 PUPG53 HMCCNVS2
NY 15A043970D3DA93A PUPG53 HMCCNVS3
NY 15A0439C01514B04 PUPG53 HMCCNVT2
NY 15A043A6113CBE56 PUPG53 HMCCNVT3
NY 158A43471504A084 PUPG53 HMCCNVTE
NY 158A434C1B384D44 PUPG53 HMCCNVTR
NN 16805BE6195D3018 PV A5PO058 2000-05-08-16.07.25.035712
NN 166B99D109A58BB0 PV B5POCNTL 1999-12-28-14.08.56.649262
NN 169C03F101441E35 PV YPV760B A18Q000770
NY 17E0F739098EBF0B RA RA7240 EGB0000020
NY 17FB3B7A0A8CAD31 RA RA7240 EGB0000025
NY 181B290A16FECF14 RA RA7240 EGB0000034
NY 1838634D0E21B868 RA RA7240 EGB0000036
NY 1818019F1FF9964B RB YRBUXY1 RBK0000001594291B9
NY 182B51321362BA9C RB YRBUXY1 RBK000000659E48F65MVS
NY 18321A5510E3BDD3 RB YRBUXY1 RBK00000185A1D6D88
NY 18321A571A3F36F0 RB YRBUXY1 RBK00000185A1D6D88MVS
NY 1541CE631AF17F42 RE RE7520 19941020175514S101702M000502ARE7520
NY 154631F5182A2E0E RE RE7520 19941117161042S101702A039244ARE7520
NY 15684C181296326C RE RE7580 19950622S101702A045483ARE7580
NY 15C708760367E16A RE RE7580 19970214105944S101702A061587ARE7580
NY 15C709581E10A430 RE RE7580 19970214112718S101702A061587ARE7580
NY 1596804A1E8F8F38 RE RE8020 19960411154156S101702A052875ARE8020
NY 15EC1BA406523798 RE RE9930 19971008084159S101702Z338162ARE9930
NY 152BD19507F98B48 RE YREDAT 19940602200603S101702A034743AYREDAT
NY 152BEFE81D72F7E8 RE YREDAT 19940603141908S101702A034743AYREDAT
NY 17E958040B0A9E89 RI RI0810 RI00000013
NY 17F24A40085E0995 RI RI0810 RI00000014
NY 17F7F3371242E607 RI RI0810 RI00000015
NY 1804A5AE1C166F9F RI RI0810 RI00000016
NY 1810C27A02661734 RI RI0810 RI00000019
NY 181CE4AB1F3FDF76 RI RI0810 RI00000021
NY 18297A870DD73A72 RI RI0810 RI00000024
NY 1831536E1FE85151 RI RI0810 RI00000026
NY 1839ED1405A97365 RI RI0810 RI00000027
NY 17F77D041087671C RI RI0820 DE00000049
NY 17F664F21E7CDEB5 RI RI0820 DE00000052
NY 17E658A908D7445C RI RI0820 RI00000012
NY 17F0D69A0BE9BA02 RI RI0820 RI00000014
NY 1804A5AB0688C130 RI RI0820 RI00000016
NY 1560964D1177A128 RK RK2320 19950504142910S101702A043469ARK2320
NY 15C5CF4E037AD228 RK RK2320 19970206160943S101702A061306ARK2320
NY 1560964F070B41CA RK RK2330 19950504142915S101702A043469ARK2330
NY 15693C640D8F84BA RK RK2330 19950628151450S101702Z197041ARK2330
NY 156A7E220F1A5F38 RK RK2330 19950706150906S101702A045904ARK2330
NY 155C63740F70936C RK RK2340 19950407211920S101702Z184804ARK2340
NY 1560965113E43822 RK RK2340 19950504142921S101702A043469ARK2340
NY 1560964A0C2536A6 RK RK2350 19950504142834S101702A043469ARK2350
NY 155C637F1C17F0D6 RK RK2360 19950407212049S101702Z184806ARK2360
NY 1560964C08BA9EEA RK RK2360 19950504142837S101702A043469ARK2360
NY 1560964D035B52D6 RK RK2380 19950504142840S101702A043469ARK2380
NY 15C5CF4704B2065C RK RK2380 19970206160944S101702A061306ARK2380
NY 15609650104F5002 RK RK2390 19950504142842S101702A043469ARK2390
NY 159F4A220FC79D18 RK RK2390 19960606134538S101702A053734ARK2390
NY 15C5CF51133C7EEE RK RK2390 19970206160944S101702A061306ARK2390
NY 1560964C1FB33A24 RK RK2400 19950504142846S101702A043469ARK2400
NY 15C5CF4B03B35654 RK RK2400 19970206160942S101702A061306ARK2400
NY 1560964F0808E5D8 RK RK2410 19950504142854S101702A043469ARK2410
NY 15C7FD8E090E0BE6 RK RK2410 19970220131049S101702A061871ARK2410
NY 1560964C007FB3A0 RK RK2420 19950504142901S101702A043469ARK2420
NY 15C7FD8E08C284A6 RK RK2420 19970220131051S101702A061871ARK2420
NY 17C9963D0E9D1A7E RM RM7190 PARS000047
NY 17D2894B199C042A RM RM7210 PARS000056
NY 17C9B5381AAAEB8E RM RM7220 PARS000047
NY 17D324D60428A15D RM RM7220 PARS000054
NY 17CAA7F607B9CEF4 RM RM7280 PARS000047
NY 17D5FDA602DF8199 RM RM7280 PARS000054
NY 17C89C9B020D8DEF RM RM7930 PARS000047
NY 1558E31601BCB286 RM RM9020 19950316S101702A042838ARM9020
NY 160C31380C0F6DE6 RM RM9200 19980430141653S101702A072046ARM9200
NN 15F064461C73D05C RM RP7980 19971104145142S101702Z343279ARP7980
NY 17C9714F0337B8C7 RM YRM0760 PARS00005056AF7949
NY 17D32906023E38B4 RM YRM0760 PARS00005557010BE4
NY 17C96F7C11174A32 RM YRM2670 PARS00004756AF6A14
NY 17D2B6E407337802 RM YRM2670 PARS00005456FD4E7D
NY 17C96F7C1C6EEBB2 RM YRM2680 PARS00004756AF6A17
NY 17D2B6E41578F6C5 RM YRM2680 PARS00005456FD4E81
NY 17D34A07007AC032 RM YRMORGB PARS000054570220C1
NY 17C89DC91C3BB369 RM YRMORGP PARS00004956A88B07
NY 17C0C2730EC08811 RM YRMR025 PARS0000505666A2A0
NY 17C0C278086E5C7B RM YRMR075 PARS0000505666A2CB
NY 17C0C29403353CFA RM YRMR11O PARS0000505666A3C3
NY 15B7586006DB759E RP RP5100 19961106151732S101702A058507ARP5100
NY 15EB160816FC0FA2 RP RP5100 19971001203824S101702Z336777ARP5100
NY 15FA26431BD0E24C RP RP5100 19980105165723S101702A069490ARP5100
YY 158E6676037C60AE RP RP5340 19960220023552S101702A052154ARP5340
NY 15A4508F0E546484 RP RP5660 19960708130856S101702A055658ARP5660
NY 15A5C13D0983C2F0 RP RP5660 19960717170432S101702A055989ARP5660
NY 15524A961D6A6342 RP RP7000 19950202152307S101702A041708ARP7000
NY 156855601385D216 RP RP7000 19950622S101702A045509ARP7000
NY 15684D520C7715DA RP RP7000 19950622S101702M000595ARP7000
YY 158E638309BED4C0 RP RP7060 19960220004831S101702A052153ARP7060
YY 158EF5E70AD865D6 RP RP7060 19960223160835S101702A052289ARP7060
YY 1593FFE80F5B4CC2 RP RP7060 19960326173958S101702A053072ARP7060
NY 1591F5B90E3EAA7C RP RP7280 19960313181104S101702Z238416ARP7280
NY 159CC1B012AC5782 RP RP7280 19960521105717S101702Z249265ARP7280
NY 156A05721234D83A RP RP7290 19950703S101702Z197678ARP7290
NY 158978CF1E507F2A RP RP7290 19960119S101702A051340ARP7290
NY 15FA26490972FC56 RP RP7960 19980105165721S101702A069490ARP7960
NY 15FD730A0F63120C RP RP7960 19980126165347S101702A070032ARP7960
NY 15BCB55C03922F5E RP RP9010 19961210181748S101702A059742ARP9010
NY 15C3776601054A7C RP RP9010 19970122181857S101702A061163ARP9010
NY 15D19D32145B0FEC RP RP9010 19970422184816S101702A063443ARP9010
NY 1753E1E801C8E77C RP YRPMCOD A12W00063052D54ED2
NY 15763B151F831328 RR RR0010 19950919S101702Z208678ARR0010
NY 1606B4570BD7BB5E RR RR0060 19980326141010S101702A071251ARR0060
NY 1607CA831478B918 RR RR0060 19980402140829S101702A071359ARR0060
NY 160A0690085AC38E RR RR0060 19980416191916S101702M000898ARR0060
NY 15FA9D050152F19A RR RR0180 19980108153856S101702M000886ARR0180
NY 16059B0202712854 RR RR0180 19980319142247S101702A071155ARR0180
NY 160A06D7073C9F48 RR RR0180 19980416191920S101702M000898ARR0180
NY 16059B0819181410 RR RR0210 19980319142248S101702A071155ARR0210
NY 160A06DF107F4AFF RR RR0210 19980416192021S101702M000898ARR0210
NY 1613E4BC033325FB RR RR0210 19980618141924S101702A072843ARR0210
NY 15BF59480E567130 RR RR0240 19961227132818S101702A060345ARR0240
NY 15FA9CF601CF281E RR RR0240 19980108153902S101702M000886ARR0240
NY 16059B00067E3554 RR RR0240 19980319142249S101702A071155ARR0240
NY 15DAB2E119DAD44A RR RR7110 19970619140751S101702A064773ARR7110
NY 15DAD30207470A34 RR RR7110 19970620091818S101702Z317432ARR7110
NY 15DCE51D026DDBE6 RR RR7110 19970703133159S101702A064977ARR7110
NY 156730021410C706 RR RR7120 19950615S101702A044661ARR7120
NY 15AD9AF214B10CD2 RR RR7120 19960905155309S101702M000711ARR7120
NY 15D0CA2F0BFC4734 RR RR7120 19970417125620S101702A063110ARR7120
NY 15894DEA0AD9B246 RR RR7130 19960118S101702M000635ARR7130
NY 15AD9AF21FBF4002 RR RR7130 19960905155309S101702M000711ARR7130
NY 15D0CA321DD7D2C0 RR RR7130 19970417125624S101702A063110ARR7130
NY 15AA49920BCCCCC8 RR RR7150 19960815131413S101702A055629ARR7150
NY 15AD9AF5068541C2 RR RR7150 19960905155310S101702M000711ARR7150
NY 15D0CA321D3E98A2 RR RR7150 19970417125625S101702A063110ARR7150
NY 156730710A2AE5A8 RR RR7190 19950615S101702A044803ARR7190
NY 15AD9AF5096FDDF4 RR RR7190 19960905155311S101702M000711ARR7190
NY 15D0CA2D11768972 RR RR7190 19970417125627S101702A063110ARR7190
NN 15AD9AF51B9DBCC8 RR RR7240 19960905155311S101702M000711ARR7240
NY 15CB494B0CE2ECBA RR RR7240 19970313122849S101702A061790ARR7240
NY 15FA9D140EEA0149 RR RR7240 19980108153908S101702M000886ARR7240
NY 15CB494E0E3ABBC6 RR RR7260 19970313122851S101702A061790ARR7260
NY 15F1CD11118FA34C RR RR7260 19971113140418S101702A067628ARR7260
NY 15FA9D0C1BA194F0 RR RR7260 19980108153913S101702M000886ARR7260
NY 15253780171A3714 RR RR7310 19940421200115S101702M000439ARR7310
NY 155E644903E07944 RR RR7310 19950420S101702A043312ARR7310
NY 156730710C2E0688 RR RR7310 19950615S101702A044803ARR7310
NY 15AD9AF518B0FA5A RR RR7410 19960905155313S101702M000711ARR7410
NY 15D0CA341A122842 RR RR7410 19970417125638S101702A063110ARR7410
NY 15D5300E0D4A325F RR RR7410 19970515123231S101702A063836ARR7410
NN 157F639B022EF7EE RR RR7420 19951116S101702A049429ARR7420
NN 158ECF370E146BD4 RR RR7420 19960222170427S101702A051544ARR7420
NY 15CB494A0A2C3B82 RR RR7420 19970313122851S101702A061790ARR7420
NY 16075648075CE7AA RR RR7510 19980330165030S101702Z367465ARR7510
NY 1607CCA209F8FEEE RR RR7510 19980402152456S101702A071430ARR7510
NY 1607D0AC0616F7A7 RR RR7510 19980402174722S101702A071430ARR7510
NY 15F74ED018466868 RR RR7530 19971218150113S101702A069057ARR7530
NY 1607CCB10BBE413A RR RR7530 19980402152459S101702A071430ARR7530
NY 1607D0B10A1CAD3A RR RR7530 19980402174728S101702A071430ARR7530
NY 16001C0D1BFE722C RR RR8050 19980212150044S101702M000834ARR8050
NY 1607CA85035C4274 RR RR8050 19980402140836S101702A071359ARR8050
NY 160A06A8047BAE52 RR RR8050 19980416192336S101702M000898ARR8050
NY 15CB49500EEC74A6 RR RR8100 19970313122854S101702A061790ARR8100
NY 15E38AB4165461C2 RR RR8100 19970814203006S101702A065878ARR8100
NY 160A068C10FA3A08 RR RR8100 19980416191507S101702M000898ARR8100
NY 15CB49431B72BDDE RR RR8220 19970313122854S101702A061790ARR8220
NY 15E38AB61AA70746 RR RR8220 19970814203010S101702A065878ARR8220
NY 160A068214A4DA36 RR RR8220 19980416191508S101702M000898ARR8220
NY 15CC6B651DFAC6E4 RR RR8300 19970320173218S101702A062654ARR8300
NY 15E38AAF0AF4A442 RR RR8410 19970814203017S101702A065878ARR8410
NY 15FAC8A311E4930A RR RR8410 19980109174945S101702Z354478ARR8410
NY 15E269DF0EBECDA2 RR YRRBLR2 19970807161543CGS101702A065814AYRRBLR2
NY 15E269DD1F494852 RR YRRBLR2 19970807161543S101702A065814AYRRBLR2
NY 15C39D780D302984 RT RE7580 19970123170243S101702A060807ARE7580
NY 15C3B5550A1F1984 RT RE7580 19970124071623S101702A060807ARE7580
NY 15C709581E10A430 RT RE7580 19970214112718S101702A061587ARE7580
NY 17D1941600492BE1 RT RT0100 RFT0000012
NY 17E19B4E0A563BA1 RT RT0200 RFT0000016
NY 17EC7B16084E1A5B RT RT0200 TABS000119
NY 18031B5110D39B75 RT RT0200 TABS000130
NY 182286851C29279F RT RT0200 TABS000163
NY 1541C8C20577E334 RT RT5000 19941020143110S101702A038467ART5000
NN 151A35BF1DC7D344 RT RT5010
NN 152302491FE02E54 RT RT5010 19940407185237S101702A032574ART5010
NY 17D16E971FB872ED RT RT5020 RFT0000015
NY 17EF204D1B02ABA2 RT RT5020 TABS000121
NY 14E7946817E5CE1A RT RT5030
NY 1524395301E2CBBA RT RT5030 19940415122520S101702A032575ART5030
NY 17D16E9D15284C69 RT RT5050 RFT0000015
NY 17D16EA202E911B9 RT RT5060 RFT0000015
NY 17EF2052083ABD62 RT RT5060 TABS000121
NY 17D16EAD03C58C7F RT RT5090 RFT0000015
NY 17F03AE912818F98 RT RT5090 TABS000121
NY 17DC968E1EB56CDA RT RT5100 RFT0000016
NY 17EF205A160D5A55 RT RT5100 TABS000121
NY 17A8E8770674C505 RT RT5110 RFT0000004
NY 17EF205E00112D3D RT RT5110 TABS000121
NY 17D16EAF0C9D0C04 RT RT5120 RFT0000015
NY 17EF2063033DACDE RT RT5120 TABS000121
NY 17992C060EE5753A RT RT5130 RFT0000003
NY 17EF206509CEF087 RT RT5130 TABS000121
NY 17D16EB2190EC161 RT RT5140 RFT0000015
NY 17EF20670798077E RT RT5140 TABS000121
NY 17D21DC81254ADB6 RT RT5160 RFT0000015
NY 17EF20691EE8A1DD RT RT5160 TABS000121
NY 17D16EB604B3DB98 RT RT5170 RFT0000015
NY 17EF206B1FC59F38 RT RT5170 TABS000121
NY 17D16EBA043FA588 RT RT5200 RFT0000015
NY 17D16EBC1BCC0BDD RT RT5210 RFT0000015
NY 150F30CF09A26520 RT RT5400
NY 150F30E50DAF8F1A RT RT5401
NY 150F30A109622612 RT RT5410
NY 14DB7D3E14B2B13C RT RT5411
NY 17D16EC017D19376 RT RT5500 RFT0000015
NY 17D194491ABEAD4A RT RT5550 TABS000080
NY 17E19B4B0E45AA31 RT RT5910 RFT0000016
NY 18031BEA0D8C1911 RT RT5910 TABS000134
NY 180C8F7F0475785F RT RT5910 TABS000145
NY 1824BF3316F2EFAC RT RT5910 TABS000163
NY 14F6FFA21D7D742E RT RT5930
NY 1524395616C6918A RT RT5930 19940415122513S101702A032575ART5930
NN 160E412002F9BF7A RT RT8300 19980513171122S101702A072545ART8300
NY 17D16EC4131A9246 RT RT8400 RFT0000015
NY 177EBFD10E18E8D9 RT RT8401 A20Y001508
NY 17D16EC603E1968D RT RT8410 RFT0000015
NN 160E14430328824B RT RT8411 19980512142538S101702A072415ART8411
NY 15ED6C081CC4F59E RT RT8412 19971016172138S101702A067105ART8412
NY 15F088D0118ABB5C RT RT8412 19971105123924S101702A068100ART8412
NY 17C827201B7E3A17 RT YRT0001 RFT000000956A4A79F
NY 17C8272B0B878916 RT YRT0002 RFT000000956A4A7F6
NY 17FFD2E20DC43B5A RT YRT0002 TABS0001305877A804
NY 18228655036D8A5D RT YRT0002 TABS000163599ACDD3
NY 17D1732300E61795 RT YRT0006 RFT000001556F2A499
NY 1822865B104DC77D RT YRT0006 TABS000163599ACE06
NY 17C8273701BBCC90 RT YRT0007 RFT000000956A4A858
NY 1822865E1104AE21 RT YRT0007 TABS000163599ACE23
NY 17C8273D0A443DB6 RT YRT0008 RFT000000956A4A893
NY 17D173251C28BB66 RT YRT0011 RFT000001556F2A4B0
NY 17D173290491EFD8 RT YRT0023 RFT000001556F2A4CC
NY 17D1732D1A73F1E8 RT YRT025M RFT000001556F2A4F3
NY 17D1732F1E7B38A4 RT YRT075M RFT000001556F2A505
NY 175E0E341F0C6B84 RT YRTKOMB A20Y001346532AA546
NY 17DF647E180F8484 SA SA0160 CSVE000051
NN 153F948D05458196 SA SA0240 19941006135801S101702A038126ASA0240
NN 1592172B0C759F9C SA SA0240 19960314140753S101702A052714ASA0240
NN 15BCFD1B02499354 SA SA0240 19961212130630S101702A059412ASA0240
NN 153C48BB1DE4D182 SA SA0370 19940915143120S101702A037314ASA0370
NN 15E6CAC806F4F6CC SA SA0370 19970904124754S101702M000827ASA0370
NN 16059C22125E2638 SA SA0370 19980319145840S101702M000893ASA0370
NY 17DF648402373064 SA SA0470 CSVE000051
NY 1607CAF81CAAF864 SA SA0980 19980402142445S101702A071385ASA0980
NY 160A033E118387AA SA SA0980 19980416172032S101702M000874ASA0980
NY 16059C0D0FA17010 SA SA5170 19980319145848S101702M000893ASA5170
NY 14FC7B9F09A1CF7A SA YSA0231
NN 153E7AEB0DF02CBC SA YSA0231 19940929135935S101702A037897AYSA0231
NN 154861EC1079A5A8 SA YSA0231 19941201141053S101702A039926AYSA0231
NN 159AE2E90003907E SA YSA0231 19960509132031S101702A053971AYSA0231
NY 160018B400805128 SA YSA0231 19980212130817S101702M000885AYSA0231
NY 14FC7BAE0C55C32C SA YSA0232
NN 153E7AEE092B5344 SA YSA0232 19940929135939S101702A037897AYSA0232
NN 154861EC1F8ACE2A SA YSA0232 19941201141056S101702A039926AYSA0232
NN 159AE2E900F1BFB6 SA YSA0232 19960509132032S101702A053971AYSA0232
NY 160018B401F412F6 SA YSA0232 19980212130817S101702M000885AYSA0232
NY 14FC7BA1092FCD28 SA YSA0233
NN 153E7AEC1D12BA88 SA YSA0233 19940929140005S101702A037897AYSA0233
NN 154861EE11FD4FBA SA YSA0233 19941201141103S101702A039926AYSA0233
NN 159AE2E918E4523A SA YSA0233 19960509132033S101702A053971AYSA0233
NY 160018B4031CD008 SA YSA0233 19980212130818S101702M000885AYSA0233
NY 14FC7BA305407D16 SA YSA0234
NN 153E7AEE0549ED06 SA YSA0234 19940929140025S101702A037897AYSA0234
NN 159AE2E90A01B03A SA YSA0234 19960509132033S101702A053971AYSA0234
NY 160018B21962E2FC SA YSA0234 19980212130815S101702M000885AYSA0234
NY 14FC7BAB0F989FD8 SA YSA0235
NN 153E7AEC0D906562 SA YSA0235 19940929135931S101702A037897AYSA0235
NN 159AE2E810E0325C SA YSA0235 19960509132030S101702A053971AYSA0235
NY 160018B31A5B1BB8 SA YSA0235 19980212130815S101702M000885AYSA0235
NY 14FC7BA219BB3386 SA YSA0236
NN 153E7AEA1D885672 SA YSA0236 19940929135932S101702A037897AYSA0236
NN 154861EE1679472E SA YSA0236 19941201141106S101702A039926AYSA0236
NN 149DE1E70069812C SA YSA0272
NY 15CE998801676182 SA YSA5281 19970403142907S101702M000784AYSA5281
NY 1617309A1D53B85B SA YSA5281 19980709133945S101702M000924AYSA5281
NY 15CE99870A316E8A SA YSA5282 19970403142915S101702M000784AYSA5282
NY 1617308B0D31C360 SA YSA5282 19980709133946S101702M000924AYSA5282
NY 15F2E643106225E8 SA YSA67S1 19971120134646S101702A068355AYSA67S1
NY 15FBB34210C378DF SA YSA67S1 19980115134658S101702M000890AYSA67S1
NY 16059BD61DD4E90E SA YSA67S1 19980319145252S101702M000893AYSA67S1
NY 1608ED100BBB4F54 SA YSA67S1 19980409192933S101702A071661AYSA67S1
NY 161AA5C403AB8BA2 SA YSA67S1 A16M000011
NY 15673006126219FA SA YSAL001 19950615S101702A044787AYSAL001
NY 1568496515AEB1F4 SA YSAL001 19950622S101702A045506AYSAL001
NY 156B96111108E7B0 SA YSAL001 19950713S101702A046133AYSAL001
NY 1576979B0FDE7A28 SA YSAL001 19950921S101702A047844AYSAL001
NY 157AFC721907BEF8 SA YSAL001 19951019S101702M000626AYSAL001
NY 157E4ACD02366344 SA YSAL001 19951109S101702A049380AYSAL001
NY 1582B2B304203332 SA YSAL001 19951207S101702A050221AYSAL001
NY 15AB64B50C10C8A4 SA YSAL001 19960822140801S101702A056643AYSAL001
NY 15FBB342152B3471 SA YSAL001 19980115134655S101702M000890AYSAL001
NY 156B960C1747DEA0 SA YSAL002 19950713S101702A046133AYSAL002
NY 1576979C0ED6446A SA YSAL002 19950921S101702A047844AYSAL002
NY 15AB64B50E9565AE SA YSAL002 19960822140803S101702A056643AYSAL002
NY 15CE998616874042 SA YSAL002 19970403142856S101702M000784AYSAL002
NY 15FBB3421550F17C SA YSAL002 19980115134657S101702M000890AYSAL002
NY 15A17D840948285C SA YSAL006 19960620135031S101702A054814AYSAL006
NY 15A35EA31AA5BD84 SA YSAL006 19960702125049S101702A055478AYSAL006
NY 15A386A40C51ECB6 SA YSAL006 19960703124118S101702A055562AYSAL006
NY 15A7F1270A7AAE68 SA YSAL006 19960731150427S101702A056186AYSAL006
NY 15CE998705E28EC2 SA YSAL006 19970403142900S101702M000784AYSAL006
NY 15FBB3421551E58C SA YSAL006 19980115134658S101702M000890AYSAL006
NY 15CE9987057858D2 SA YSAL010 19970403142900S101702M000784AYSAL010
NY 15D87F7915F198DA SA YSAL010 19970605140228S101702M000795AYSAL010
NY 15D8A9BC088162CD SA YSAL010 19970606151531S101702A064474AYSAL010
NY 15F9053605F5B6C2 SA YSAL010 19971229123211S101702A069401AYSAL010
NY 15CE998A09C6AF60 SA YSAL011 19970403142901S101702M000784AYSAL011
NY 15D87F791766D369 SA YSAL011 19970605140229S101702M000795AYSAL011
NY 15D8A9BC0A37FD7A SA YSAL011 19970606151531S101702A064474AYSAL011
NY 15F905360541A4BC SA YSAL011 19971229123211S101702A069401AYSAL011
NY 159F4BC014E4B402 SA YSAOBP 19960606144320S101702A054730AYSAOBP
NY 15B899671C5170D8 SA YSAOBP 19961114144539S101702M000743AYSAOBP
NY 15B8A1D914AF065C SA YSAOBP 19961114194922S101702M000743AYSAOBP
NY 15B9B1B70CEAF70A SA YSAOBP 19961121140042S101702M000745AYSAOBP
NY 15C164601E9338A4 SA YSAOBP 19970109133259S101702A060528AYSAOBP
NY 15E44AED15D19C64 SA YSAOBP 19970819151336S101702Z328496AYSAOBP
NY 15E44B5A1734315C SA YSAOBP 19970819152851S101702Z328527AYSAOBP
NY 15E44D420A240B9A SA YSAOBP 19970819163654S101702Z328550AYSAOBP
NY 15E499890CFABE4E SA YSAOBP 19970821140528S101702A066252AYSAOBP
NY 160022FE1AA3074A SA YSAOBP 19980212191614S101702M000891AYSAOBP
NN 1617CA2B0D9F0C9C SA YSAT006 A16M000011
NY 1617309407826F30 SA YSAT009 19980709134033S101702M000924AYSAT009
NN 161730780C837ABA SA YSAT011 19980709133841S101702M000924AYSAT011
NY 16173099130FB091 SA YSAT015 19980709133846S101702M000924AYSAT015
NY 161730801E25BCB0 SA YSAT035 19980709133855S101702M000924AYSAT035
NN 15B8996A0277B5C6 SA YSAT301 19961114144601S101702M000743AYSAT301
NN 15B8A1D609330FC2 SA YSAT301 19961114194931S101702M000743AYSAT301
NN 161D7D3001A935B0 SA YSAT301 A16M000011
NY 152BC9A60BD9B57A SA YSAT801 19940602152851S101702A034761AYSAT801
NY 152F190A14CC6B52 SA YSAT801 19940623170035S101702A035250AYSAT801
NY 15C5CC961E2D0CA0 SA YSAT801 19970206143328S101702A061469AYSAT801
NY 1608ED0F1851F0D8 SA YSAT801 19980409192934S101702A071661AYSAT801
NY 1532821C19E6B976 SA YSAT802 19940715094943S101702A035847AYSAT802
NY 155016A709C4043A SA YSAT802 19950119145806S101702A041204AYSAT802
NY 15C5CC970C333E6E SA YSAT802 19970206143331S101702A061469AYSAT802
NY 15CA30E009D9769A SA YSAT802 19970306131335S101702M000777AYSAT802
NY 1608ED0F18531FB6 SA YSAT802 19980409192934S101702A071661AYSAT802
NY 1532822D15807290 SA YSAT803 19940715094944S101702A035847AYSAT803
NY 15C5CC97089DA9D6 SA YSAT803 19970206143332S101702A061469AYSAT803
NY 1608ED0F141CC73A SA YSAT803 19980409192932S101702A071661AYSAT803
NY 1532821C15FAAEFC SA YSAT805 19940715094945S101702A035847AYSAT805
NY 15C5CC970F570596 SA YSAT805 19970206143334S101702A061469AYSAT805
NY 1608ED0F08BC2FAC SA YSAT805 19980409192933S101702A071661AYSAT805
NY 1532822D11BD61B2 SA YSAT806 19940715094946S101702A035847AYSAT806
NY 15C5CC920E8C7D8C SA YSAT806 19970206143321S101702A061469AYSAT806
NY 152DFBCC09912506 SA YSAT807 19940616144919S101702A034999AYSAT807
NY 153D625917580C4E SA YSAT807 19940922143846S101702A037594AYSAT807
NY 15A066370EEB9C62 SA YSAT807 19960613151306S101702A054928AYSAT807
NY 15B9B1BB041DB752 SA YSAT807 19961121140042S101702M000745AYSAT807
NY 15C5CC931A5872CA SA YSAT807 19970206143322S101702A061469AYSAT807
NY 154513D61BBDA420 SA YSAUEB 19941110133031S101702A039326AYSAUEB
NY 15451B0404DABD5A SA YSAUEB 19941110174709S101702A039326AYSAUEB
NY 15462E841FA8D642 SA YSAUEB 19941117140738S101702A039487AYSAUEB
NY 15C164B9051612DA SA YSAUEB 19970109134538S101702A060538AYSAUEB
NY 15F5E0F71EAF2E6A SA YSAUEB 19971209124732S101702A068954AYSAUEB
NY 161933E403C81B9C SA YSX8105 A16M000011
NY 161981A5061B2D42 SA YSX81S1 A16M000011
NY 1541788603A42FF4 SAMDBOF SAMB0500
NY 15767F84136446E4 SAMDBOF SP1BS1T
NY 15767F8D19B472B2 SAMDBOF SP1BS2T
NY 15767F9709AA25FE SAMDBOF SP1BS3T
NY 15767F9C0FCE862E SAMDBOF SP1BS4T
NY 15767FA817407E00 SAMDBOF SP1BS5T
NY 15767FB0006A1294 SAMDBOF SP1BS6T
NY 1578C49201271AE0 SAMDBOF SP1BS9T
NY 15988B550C40F8D4 SAMDBOF SP1SK1T
NY 15988B61096F6B8A SAMDBOF SP1SK2T
NY 15988B6C01CAD6AA SAMDBOF SP1SK3T
NY 15988B711C4D1EE0 SAMDBOF SP1SK4T
NY 15988B7F0B56EB30 SAMDBOF SP1SK5T
NY 15767FC308E2C354 SAMDBOF SP1TS1T
NY 15767FFB08111E84 SAMDBOF SP1US1T
NY 1576802C1467DB7E SAMDBOF SP1US2T
NY 16D99450011C8DF5 SE SE0560 A20Y000517
NY 16A3B1C805B5AC6F SE SE0560 A20Y000523
NY 16E4EB9D12FBF592 SE SE0560 A20Y000936
NY 172F437D038F34BD SE SE0560 A20Y001226
NY 175B6E4110B174C8 SE SE0560 A20Y001357
NY 177F1CB71E593D76 SE SE0870 A20Y001521
NY 17BF5E19069A3C09 SE SE7120 IMS0000024
NY 17BF5E191A471C79 SE SE7130 IMS0000024
NY 181E472111C57656 SE SE8300 IMS0000057
NY 181E472117D0FB6D SE SE8310 IMS0000057
NY 177A5FB504F94FDC SE SE8710 A12M006478
NY 15AD972311049BEA SE YSE0301 19960905133832S101702A056374AYSE0301
NY 15DDFD8F0BD5A2B4 SE YSE0301 19970710124842S101702A065149AYSE0301
NY 15DDFD9605FB9180 SE YSE0310 19970710124852S101702A065149AYSE0310
NY 15EC2A440A7D960A SE YSE0310 19971008172544S101702A067384AYSE0310
NY 160480EB16D325E0 SE YSE0310 19980312140704S101702A071005AYSE0310
NY 15DDFD8F19BAFD10 SE YSE0311 19970710124837S101702A065149AYSE0311
NY 15EC2A4313F5C304 SE YSE0311 19971008172549S101702A067384AYSE0311
NY 15DDFD9316E3465E SE YSE0312 19970710124838S101702A065149AYSE0312
NY 15DDFD931948518A SE YSE0313 19970710124839S101702A065149AYSE0313
NY 15DDFD951227B94C SE YSE0314 19970710124840S101702A065149AYSE0314
NY 15EC2A4B0712352A SE YSE0314 19971008172558S101702A067384AYSE0314
NY 15DDFD9409AC0430 SE YSE0315 19970710124841S101702A065149AYSE0315
NY 15EC2A4A0C52B3EE SE YSE0315 19971008172603S101702A067384AYSE0315
NY 15DDFD8F057E73E0 SE YSE0316 19970710124842S101702A065149AYSE0316
NY 15DDFD940CAA335A SE YSE0317 19970710124843S101702A065149AYSE0317
NY 15EC2A431C89DB98 SE YSE0317 19971008172531S101702A067384AYSE0317
NY 15DDFD94062E7FA0 SE YSE0318 19970710124844S101702A065149AYSE0318
NY 15DDFD8F0F1C3CFA SE YSE0319 19970710124845S101702A065149AYSE0319
NY 15DDFD941349BD10 SE YSE0320 19970710124845S101702A065149AYSE0320
NY 15EC2A411D04B02E SE YSE0320 19971008172534S101702A067384AYSE0320
NY 15DDFD9314C2582A SE YSE0321 19970710124847S101702A065149AYSE0321
NY 15DDFD930E7AECC0 SE YSE0322 19970710124848S101702A065149AYSE0322
NY 15DDFD941196E27C SE YSE0323 19970710124849S101702A065149AYSE0323
NY 15DDFD901F803F2E SE YSE0324 19970710124850S101702A065149AYSE0324
NY 15EC2A43050533CA SE YSE0324 19971008172537S101702A067384AYSE0324
NY 176AFA811A058A84 SE YSE09D0 A20Y00142753971B62
NY 17E0AB9C06FF5334 SF SF7990 GDIR000033
NN 155390A303748620 SI SI7340 19950210175302S101702Z176831ASI7340
NN 15551EA502C4230A SI SI7340 19950220151931S101702A042317ASI7340
NN 14B6182312CD38FC SI SI7550
NN 14B618021668B9F4 SI YSI0132
NY 15D997EF0C286A40 SM SMDEF002
NN 15D6E2381E2BD592 SM SMJCLEX1
NY 15AA6CCB0E16DCA8 SM SMJCLEX2
NN 15AB8DC70A7C3D3E SM SMPATCRE
NN 15D04BF40F23CF8E SM SMPATDEL
NN 15F1ED3E01F57756 SM SMPHBILD
NN 15D2AAB407FB7716 SM SMPHREPL
NN 15AB84960727165E SM SMPHUPD
NN 15AB85D00AD82780 SM SMPHUPD1
NN 15AB85CF03B95EFE SM SMPHUPD2
NN 15AA6CD40E0EFAC4 SM SMPLAN01
NN 15E7E9A116ECD213 SM SMUPDAT0
NN 15E7E9A313C0F84F SM SMUPDAT1
NY 15D6D716005BD5FE SM SMUPDAT2
NY 181F404000F8EED1 SN SN0200 SAVS000005
NY 1823CE0F1C967B65 SN SN0200 SAVS000013
NY 182CBB2506CA0F5D SN SN0200 SAVS000015
NY 181F3FFC0584E468 SN SN5000 SAVS000005
NY 18241CFE0E3C658D SN SN5000 SAVS000013
NY 182194F00B0D8253 SN SN5000 SAVS000014
NY 182CBB280C00CF30 SN SN5000 SAVS000015
NY 18287E5404CC7ED9 SN SN5000 SAVS000016
NY 18399EDA165E51E8 SN SN5000 SAVS000018
NY 1810511C040E0F31 SN SN5001 SAVS000001
NY 1823CE1A1167AB15 SN SN5001 SAVS000013
NY 182CBB2B071C931A SN SN5001 SAVS000015
NY 1838B5520B5DFBD7 SN SN5001 SAVS000018
NY 1810511F10CC8DD2 SN SN5003 SAVS000001
NY 181B9CDC0D5612F7 SN SN5003 SAVS000005
NY 1806432F0022BD35 SN SN5004 NOST000268
NY 1810512209D0EFF9 SN SN5004 SAVS000001
NY 1809AFB2198DF5E8 SN SN5004 SAVS000002
NY 180A2BF81A2C7D9C SN SN5004 SAVS000004
NY 181B9CDC1F6BB3B2 SN SN5004 SAVS000005
NY 1823CE1B0546200E SN SN5004 SAVS000013
NY 181B9CDD1F49FCC9 SN SN5005 SAVS000005
NY 1823CE1B1C43A74D SN SN5005 SAVS000013
NY 181051241B20D9B1 SN SN5006 SAVS000001
NY 181E73F907BDEA71 SN SN5006 SAVS000005
NY 1823CE1C06798B40 SN SN5006 SAVS000013
NY 1837C73001709EEE SN SN5006 SAVS000018
NY 181F412F13C140CE SN SN5100 SAVS000005
NY 18241CFE1C23B877 SN SN5100 SAVS000013
NY 182CBB2E0528F8ED SN SN5100 SAVS000015
NY 18399EDC0E39377D SN SN5100 SAVS000018
NY 18020F1F1E3890CD SN SN5901 NOST000268
NY 1809AFB305C62075 SN SN5901 SAVS000002
NY 181C438E1B1FA2A3 SN SN5901 SAVS000005
NY 1823F5DE16E55444 SN SN5901 SAVS000013
NY 181F40411B0CB2A1 SN SN5902 SAVS000005
NY 1825B120177A7420 SN SN5902 SAVS000013
NY 1828868403E50B4E SN SN5902 SAVS000016
NY 1838B5551CC61772 SN SN5902 SAVS000018
NY 1802C97E11ED3A7E SN SN5903 NOST000268
NY 1810513401AD8E4E SN SN5903 SAVS000001
NY 181B9CFE03287EB1 SN SN5903 SAVS000005
NY 1823CE1F174F5DBD SN SN5903 SAVS000013
NY 181F40420CC9EFA1 SN SN5910 SAVS000005
NY 1825B1400AE3506F SN SN5910 SAVS000013
NY 1838B5681CBA7EF9 SN SN5910 SAVS000018
NY 18111CD2011BE5E7 SN SN5920 SAVS000001
NY 181F4043086B7F18 SN SN5920 SAVS000005
NY 1812A6ED0FC2CE7B SN SN5920 SAVS000006
NY 1812AAD1133E9997 SN SN5920 SAVS000008
NY 1825B15913A0F0BD SN SN5920 SAVS000013
NY 1828877F066B6F3E SN SN5920 SAVS000016
NY 1837E6C8107D76D4 SN SN6005 SAVS000018
NY 183B0A921F4BD645 SN SN6006 SAVS000018
NY 1837E6CD1F3DEB61 SN SN6007 SAVS000018
NY 17FEBFDC15F94F6B SN YSN100I NOST000268586EA4F0
NY 181B9C9A066F4579 SN YSN100I SAVS0000055960D039
NY 17FEBFE101E872A1 SN YSN100S NOST000268586EA518
NY 181B9C9A1E4FC7E2 SN YSN101I SAVS0000055960D042
NY 181B9C9B14534D98 SN YSN102I SAVS0000055960D048
NY 181B9C9C1925A484 SN YSN103I SAVS0000055960D050
NY 17FEBFE306118A91 SN YSN110I NOST000268586EA52B
NY 18104FC9120B48E0 SN YSN110I SAVS00000159020504
NY 181B9CC8057623FA SN YSN110I SAVS0000055960D1C4
NY 17FEBFE315D52BBF SN YSN110S NOST000268586EA52F
NY 17FEBFE404E62B68 SN YSN110U NOST000268586EA531
NY 18104FD401ADA090 SN YSN110U SAVS0000015902056A
NY 17FEBFE4045D1ECA SN YSN111I NOST000268586EA533
NY 18104FDD1F6A48C3 SN YSN111I SAVS000001590205C6
NY 181B9C9E124C7C6F SN YSN111I SAVS0000055960D060
NY 17FF5C8C0E992FD8 SN YSN111S NOST0002685873C750
NY 17FEBFE4142131A8 SN YSN111U NOST000268586EA538
NY 18104FEA1264933D SN YSN111U SAVS00000159020621
NY 17FEBFE41EEE187F SN YSN120 NOST000268586EA53A
NY 181B9CA208374FDF SN YSN120 SAVS0000055960D067
NY 17FEBFE601503D12 SN YSN183I NOST000268586EA543
NY 181B9CA3016EA83A SN YSN183I SAVS0000055960D087
NY 1802F3FF1530B200 SN YSN187I NOST0002685891E82E
NY 181B9CA417EB77B7 SN YSN187I SAVS0000055960D095
NY 1801FBE61D52FEF6 SN YSN187S NOST0002685889C70D
NY 17FEBFEB005C1663 SN YSN201I NOST000268586EA569
NY 181C42601CE75B56 SN YSN201I SAVS00000559663EDB
NY 1810500B0216C17E SN YSN202I SAVS00000159020731
NY 181D828C0E5074AC SN YSN202I SAVS0000055970BC9A
NY 181F3F4815EA259D SN YSNA005 SAVS000005597F4F58
NY 1823CDF00459846B SN YSNA005 SAVS00001359A589EE
NY 182CBA4A10CD65D5 SN YSNA005 SAVS00001559F06462
NY 181C39961D1F259C SN YSNB002 SAVS0000055965F526
NY 1823CDF118A17310 SN YSNB002 SAVS00001359A58A06
NY 18399EB505F3737E SN YSNB002 SAVS0000185A5C7C5F
NY 181F3F0E099FEF2B SN YSND001 SAVS000005597F4D78
NY 17FEBFD10B69FD66 SN YSND002 NOST000268586EA494
NY 17FEBFD20A3F8B5A SN YSND003 NOST000268586EA49A
NY 1810509E09643C91 SN YSND003 SAVS00000159020C56
NY 181B9C7D1E8FEEB9 SN YSND003 SAVS0000055960CF4C
NY 181B9C7E1B2359ED SN YSND004 SAVS0000055960CF54
NY 181B9C7F1A5C29C9 SN YSND005 SAVS0000055960CF5D
NY 181B9C801BEC5ED9 SN YSND006 SAVS0000055960CF65
NY 181050A813EDA1C7 SN YSND007 SAVS00000159020CA9
NY 181B9C811899B1E0 SN YSND007 SAVS0000055960CF6D
NY 18066B1F1389EC58 SN YSND008 NOST00026858AEF9FA
NY 181050B6129AAFC8 SN YSND008 SAVS00000159020CEE
NY 181B9C8215C2DAC8 SN YSND008 SAVS0000055960CF75
NY 18111CB31CAE9549 SN YSND010 SAVS0000015908BC89
NY 181E74830FB5EFF0 SN YSND010 SAVS0000055978AA6A
NY 1823CDFB0EDA5F7C SN YSND010 SAVS00001359A58A57
NY 181D829E017E7DE9 SN YSND011 SAVS0000055970BD39
NY 181050CF14ECC654 SN YSND012 SAVS00000159020DCD
NY 181E9DA21B49B572 SN YSND012 SAVS000005597A035F
NY 1823CDFC06D6C4F4 SN YSND012 SAVS00001359A58A5C
NY 181050D5060FD9A2 SN YSND013 SAVS00000159020E14
NY 181E7484189AC362 SN YSND013 SAVS0000055978AA76
NY 1823CDFC1FFF69D6 SN YSND013 SAVS00001359A58A61
NY 181B9C8B0093806B SN YSND014 SAVS0000055960CFBC
NY 181B9C8B1EA8591B SN YSND015 SAVS0000055960CFC3
NY 181B9C8C1E40A05F SN YSNI001 SAVS0000055960CFCC
NY 181B9C9603465715 SN YSNI003 SAVS0000055960D01A
NY 1823CDFD0786DCDF SN YSNI003 SAVS00001359A58A67
NY 17F3609005E187B2 SV SV0230 WSSV000121
NY 17FB6B9918022B3B SV SV0230 WSSV000148
NY 17E1C22500E4EAA9 SV SV0240 WSSV000116
NY 17EF29AF18EA992A SV SV0240 WSSV000121
NY 17E17D4106BD3BAD SV SV0250 WSSV000116
NY 17F3609104232730 SV SV0250 WSSV000121
NY 17F8DCF6183E58F3 SV SV0250 WSSV000146
NY 17FC34E304E617D7 SV SV0250 WSSV000148
NN 180435DB1E0581B4 SV SV0250 WSSV000151
NY 181117CA19B176CF SV SV0280 WSSV000188
NY 18139D96073F7290 SV SV0280 WSSV000195
NN 181E1FD01E35DB38 SV SV0280 WSSV000196
NY 1812FD400DA6B1F5 SV SV0280 WSSV000225
NY 17E1C22A0741446E SV SV0930 WSSV000116
NY 17EE02CD064FA89C SV SV0930 WSSV000121
NY 180A7B8B152B54FA SV SV0930 WSSV000188
NY 17E1C21E191CC4E8 SV SV0950 WSSV000116
NY 17F4A66418BCA37F SV SV0950 WSSV000121
NY 17F93517016FB65A SV SV0950 WSSV000146
NY 180193FF05D35DF2 SV SV0950 WSSV000148
NY 180437460D67ABCB SV SV0950 WSSV000151
NY 181CE5090B2FF3E3 SV SV0950 WSSV000196
NY 1826EE1A12D83747 SV SV0950 WSSV000200
NY 1809135E1ECC1829 SV SV0950 WSSV000208
NY 183243810540D063 SV SV0950 WSSV000246
NY 1838B74B04E905F2 SV SV0950 WSSV000248
NY 17E1C22E0AF5F78B SV SV5150 WSSV000116
NY 17F3AF6C069E0A99 SV SV5150 WSSV000121
NY 17FB6BAF1DE15371 SV SV5150 WSSV000148
NY 1806E418149351A1 SV SV5150 WSSV000151
NY 180B4212093324F8 SV SV5150 WSSV000188
NY 17E17DDB0150649C SV SV5210 WSSV000116
NY 17EF29C21F42F14E SV SV5210 WSSV000121
NY 17E17DB8024394C8 SV SV5600 WSSV000116
NY 17F365DA01787EC3 SV SV5600 WSSV000121
NY 17F7F5B108C27440 SV SV5600 WSSV000146
NY 17FFA93D0153902D SV SV5600 WSSV000148
NY 1802C78016235575 SV SV5600 WSSV000151
NY 1811E3D01C738FD4 SV SV5600 WSSV000188
NY 1810BE841959FFF8 SV SV5600 WSSV000222
NY 181A0C460B75E40F SV SV5640 WSSV000196
NY 182168E01BA69CA2 SV SV5640 WSSV000239
NY 182194F214F42E61 SV SV5640 WSSV000240
NY 17E67F4816F0A575 SV SV5650 WSSV000116
NY 17E1C234052F1142 SV SV5710 WSSV000116
NY 17E1C23510752386 SV SV5740 WSSV000116
NY 17F3B7941FA91076 SV SV5740 WSSV000121
NY 17F92DAE07AB58D2 SV SV5740 WSSV000146
NY 17FB6BC91BA8A620 SV SV5740 WSSV000148
NY 1806E41E19535516 SV SV5740 WSSV000151
NY 181167BD08F8BE8A SV SV5740 WSSV000188
NY 18144063123CD895 SV SV5740 WSSV000195
NY 181B4E361A47513A SV SV5740 WSSV000196
NY 182530EC1951048A SV SV5740 WSSV000199
NY 18090CFE0AB40619 SV SV5740 WSSV000207
NY 17E1C239175CDD4C SV SV5750 WSSV000116
NY 17F3B79D0B2A07A1 SV SV5750 WSSV000121
NY 17F92DB208E98B1C SV SV5750 WSSV000146
NY 17FB6BCB00901306 SV SV5750 WSSV000148
NY 1806E4671CE7F768 SV SV5750 WSSV000151
NY 181167CE06BC3E70 SV SV5750 WSSV000188
NY 1814406B04C43F02 SV SV5750 WSSV000195
NY 181B4E390C4001C4 SV SV5750 WSSV000196
NY 182530FA1755B2EA SV SV5750 WSSV000199
NY 17E4290D0DADB980 SV SV5760 WSSV000116
NY 17F3B7A501DF68D8 SV SV5760 WSSV000121
NY 17F92DB60B5312EC SV SV5760 WSSV000146
NY 17FB6BCB0B7CE67D SV SV5760 WSSV000148
NY 1806E42800414898 SV SV5760 WSSV000151
NY 181167D119F6601E SV SV5760 WSSV000188
NY 1814406C0D30AECA SV SV5760 WSSV000195
NY 181B4E391F13EE7F SV SV5760 WSSV000196
NY 182530FB129E26BC SV SV5760 WSSV000199
NY 18090D010DA5D0D1 SV SV5760 WSSV000207
NY 1821910E1F6FA041 SV SV5760 WSSV000240
NY 17F3B7AA01DFB8BF SV SV5770 WSSV000121
NY 17F92DB91980B134 SV SV5770 WSSV000146
NY 17FB6BCC0672FABD SV SV5770 WSSV000148
NY 1806E4241E15FA09 SV SV5770 WSSV000151
NY 181167D5028F29A4 SV SV5770 WSSV000188
NY 1814406D0EE779F3 SV SV5770 WSSV000195
NY 181B4E3A1892B51A SV SV5770 WSSV000196
NY 182530FC09665515 SV SV5770 WSSV000199
NY 17E1C2411C8D3D49 SV SV5780 WSSV000116
NY 17F3AF780DFDE389 SV SV5780 WSSV000121
NY 17F6ADE81DBCC16A SV SV5780 WSSV000146
NY 17FF2D25024C519B SV SV5780 WSSV000148
NY 1806E42702F137B4 SV SV5780 WSSV000151
NY 180C621E0277D9C2 SV SV5780 WSSV000188
NY 17E1C2411C77D807 SV SV5790 WSSV000116
NY 17F3AF7901670AC2 SV SV5790 WSSV000121
NY 17F6847B1DD35054 SV SV5790 WSSV000146
NY 17FC34FD149C3875 SV SV5790 WSSV000148
NY 1806E4290CD5B0EC SV SV5790 WSSV000151
NY 1811E3D903AEE322 SV SV5790 WSSV000188
NY 181B4E3F1AA100B1 SV SV5790 WSSV000196
NY 1810BE880B14CF7A SV SV5790 WSSV000222
NY 17E1C24504D84A02 SV SV5910 WSSV000116
NY 17E17DEA0BA804BB SV SV5940 WSSV000116
NY 17F3AF830D90FC6E SV SV5940 WSSV000121
NY 17F8B7CE126F4468 SV SV5940 WSSV000146
NY 17FC29FA128E97E4 SV SV5940 WSSV000148
NY 18040A411B62DF86 SV SV5940 WSSV000151
NY 1812F22F14165F0C SV SV5940 WSSV000195
NY 181A0C4D08D4876B SV SV5940 WSSV000196
NY 18090CD11D32C6BA SV SV5940 WSSV000207
NY 17ECA36C1D86DFB8 SV SV7520 WSSV000121
NY 17FB6BDC1DC80D4F SV SV7520 WSSV000148
NY 1802CC1313D81A5F SV SV7520 WSSV000151
NY 15A4D014033630CA SV SV7570 19960711171327S101702A055415ASV7570
NN 153034C91B6B1020 SV SV7710 19940630181346S101702A035352ASV7710
NN 153263440CE3374A SV SV7710 19940714152500S101702A035714ASV7710
NY 17E19D851E5058C9 SV SV7770 WSSV000116
NY 1612D2F21FD314F6 SV SV7810 19980611190040S101702A073120ASV7810
NY 17D233B301FEDFA1 SV SV7820 WSSV000087
NY 17E17DEC140DE9B5 SV SV7820 WSSV000116
NY 17E3D0B01ADC51CC SV SV8150 WSSV000116
NY 17E17E3708CB0CCE SV SV8300 WSSV000116
NY 17F3AFA110778205 SV SV8300 WSSV000121
NY 17F3AFA31375B006 SV SV8410 WSSV000121
NY 17F819DC1F901138 SV SV8410 WSSV000148
NN 18018A0306D17B38 SV SV8410 WSSV000151
NY 17E17DB402056D28 SV SV8620 WSSV000116
NY 17E17DFF0AC41EBF SV SV8630 WSSV000116
NY 17ED8FA7091BCAB9 SV SV8630 WSSV000121
NY 17E3CF5218ED5984 SV YSVAUHI WSSV000116578CB6A6
NY 1775A4131007686E SV YSVBUID A06M02547153F08CAD
NN 153A17A3176DAD4C SV YSVRAD 19940901155609S101702A036983AYSVRAD
NN 1542E2530EDC3580 SV YSVRAD 19941027143121S101702A038681AYSVRAD
NN 1550178603C5A4EA SV YSVRAD 19950119153007S101702A041393AYSVRAD
NN 1556AF2C161A78D0 SV YSVRAD 19950302141336S101702A042588AYSVRAD
NN 1568502B11EF97E4 SV YSVRAD 19950622S101702M000590AYSVRAD
NN 17F4A532019FE2B1 SV YSVTXOG WSSV0001215819E262
NY 1822BA3117EB2901 SV YSVVORM WSSV000199
AY 182855F0108A139D SV YSVVORM WSSV000200
NY 158C978701D73A76 SX SX0540 19960208S101702A051698ASX0540
NY 15A7F1480C2D1BBA SX SX0540 19960731150721S101702A056219ASX0540
NY 15AB652403FA9474 SX SX0540 19960822142339S101702A056633ASX0540
NN 1576890E1AA75A58 SX SX0640 19950921S101702Z209168ASX0640
NN 1577B0691453E4CE SX SX0640 19950928S101702A047968ASX0640
NN 157E4B0B0B66A3B2 SX SX0640 19951109S101702A049277ASX0640
NY 152CE28503BF3CD0 SX SX0650 19940609145031S101702A034927ASX0650
NY 152F1916029864C2 SX SX0650 19940623170137S101702A035250ASX0650
NN 156B957D08AFB4A2 SX SX0720 19950713134744S101702A046025ASX0720
NN 1573504D15CD741E SX SX0720 19950831S101702A047303ASX0720
NN 15807BB5074440D6 SX SX0720 19951123S101702A049707ASX0720
NY 15F519220403220E SX SX0750 19971204133317S101702M000869ASX0750
NY 15FBBB0C0C1D49CA SX SX0750 19980115181956S101702M000856ASX0750
NY 16002321034245F2 SX SX0750 19980212191931S101702M000891ASX0750
NY 157B250E054049B4 SX SX0780 19951020S101702A048835ASX0780
NY 157B208909229470 SX SX0780 19951020S101702Z213845ASX0780
NY 157B23801ADFE750 SX SX0780 19951020S101702Z213858ASX0780
NN 1559F9FC023B0974 SX YS81103 19950323125510S101702A043101AYS81103
NN 155B13C3029604BC SX YS81103 19950330S101702A043182AYS81103
NN 155F7BCF08C04508 SX YS81103 19950427S101702A044020AYS81103
NN 156B95A21C72B020 SX YS81103 19950713S101702A046089AYS81103
NN 156CAF7B1C51A4EE SX YS81103 19950720S101702A046278AYS81103
NN 1559FA051C04561A SX YS81104 19950323125515S101702A043101AYS81104
NN 155B13C206A3808C SX YS81104 19950330S101702A043182AYS81104
NN 155F7BD1182C9E58 SX YS81104 19950427S101702A044020AYS81104
NN 156B959E02911352 SX YS81104 19950713S101702A046089AYS81104
NN 156CAF7C0809A71C SX YS81104 19950720S101702A046278AYS81104
NY 144AFF6807253174 SX YSX0610
NN 158ECB781FE977E4 SX YSX5104 19960222144929S101702A052254AYSX5104
NN 159F4BC61D6676D4 SX YSX5104 19960606144321S101702A054730AYSX5104
NN 15A066361E18A61C SX YSX5104 19960613151300S101702A054928AYSX5104
NN 15A1532219B70EDA SX YSX5104 19960619123317S101702Z253706AYSX5104
NN 15A17B9A197A4218 SX YSX5104 19960620124151S101702Z253982AYSX5104
NN 15A180711D0A6E50 SX YSX5104 19960620153501S101702Z254046AYSX5104
NN 15A246D704B855C6 SX YSX5104 19960625135551S101702A055308AYSX5104
NY 15AB64C20AAE080C SX YSX5104 19960822140944S101702A056633AYSX5104
NY 15AC309815B4B7A0 SX YSX5104 19960827154539S101702Z263428AYSX5104
NY 15AC768F132F33DE SX YSX5104 19960829092947S101702Z263848AYSX5104
NY 15AC7E4A07701C82 SX YSX5104 19960829140441S101702A056757AYSX5104
NY 15B8994F01C6D760 SX YSX5104 19961114144227S101702M000743AYSX5104
NY 15B8A1D607B6206C SX YSX5104 19961114194623S101702M000743AYSX5104
NY 15B899411D3A8EB4 SX YSX5404 19961114144229S101702M000743AYSX5404
NY 15B8A1BB1698BE4C SX YSX5404 19961114194626S101702M000743AYSX5404
NY 15B899511CC3745C SX YSX5405 19961114144230S101702M000743AYSX5405
NY 15B8A1BA1A4C00C2 SX YSX5405 19961114194627S101702M000743AYSX5405
NY 15C2797C0F613AAA SX YSX5405 19970116105139S101702Z291042AYSX5405
NY 15C5CB83084303D6 SX YSX5405 19970206135317S101702A061338AYSX5405
NY 15DCE48914CAB098 SX YSX5405 19970703131040S101702M000806AYSX5405
NY 15E3807F00DFDFCA SX YSX5405 19970814142703S101702M000819AYSX5405
NY 15E3833D0166A0D6 SX YSX5405 19970814160458S101702M000819AYSX5405
NY 15EB318C1EFF025E SX YSX5405 19971002130333S101702A067187AYSX5405
NY 16059BD91EA9B992 SX YSX5405 19980319145256S101702M000893AYSX5405
NY 1605B75607CF32AE SX YSX5405 19980320071931S101702Z365731AYSX5405
NY 1605B96308EF0FF4 SX YSX5405 19980320083218S101702A071206AYSX5405
NY 1607E9E7097E9794 SX YSX5405 19980403085402S101702Z368118AYSX5405
NY 1607EC4115D59740 SX YSX5405 19980403101803S101702A071482AYSX5405
NN 157AFC7708CFD6B4 SX YSX6403 19951019S101702M000626AYSX6403
NN 157B20D1199DB0E2 SX YSX6403 19951020S101702A048832AYSX6403
NN 157B1F2410A89EA8 SX YSX6403 19951020S101702Z213819AYSX6403
NN 157BC3690F55BAFC SX YSX6403 19951024S101702A048896AYSX6403
NN 157BBE70143F64F8 SX YSX6403 19951024S101702Z214302AYSX6403
NN 157CB74A1030AE02 SX YSX6403 19951030S101702A049033AYSX6403
NN 157D0C0C1A21D3BA SX YSX6403 19951101S101702A049170AYSX6403
NN 157D03E3160D9904 SX YSX6403 19951101S101702Z215711AYSX6403
NN 157D31940B53A2C8 SX YSX6403 19951102S101702A049191AYSX6403
NN 157D29E41E11E576 SX YSX6403 19951102S101702Z215828AYSX6403
NN 157E4A9712D9EB42 SX YSX6403 19951109S101702A049277AYSX6403
NN 157F65A80781BA74 SX YSX6403 19951116S101702M000633AYSX6403
NN 157F58720B66C634 SX YSX6403 19951116S101702Z219256AYSX6403
NN 157F59ED09CBA0F0 SX YSX6403 19951116S101702Z219263AYSX6403
NN 157F81BD1D9955DA SX YSX6403 19951117S101702Z219421AYSX6403
NN 157F88D5041FA3EE SX YSX6403 19951117S101702Z219514AYSX6403
NN 1580023610C8A708 SX YSX6403 19951120S101702Z219821AYSX6403
NN 15800A850EB814C0 SX YSX6403 19951120S101702Z219988AYSX6403
NN 15802BBA1464E042 SX YSX6403 19951121S101702Z220128AYSX6403
NN 15802D0603851400 SX YSX6403 19951121S101702Z220149AYSX6403
NN 158058760AE29C44 SX YSX6403 19951122S101702Z220528AYSX6403
NN 1582B14E0F1B23C4 SX YSX6403 19951207S101702M000644AYSX6403
NN 157AFF1C0CF513D6 SX YSX6404 19951019S101702M000626AYSX6404
NN 157D0C11182DADC2 SX YSX6404 19951101S101702A049170AYSX6404
NN 157D03DF1F1A0496 SX YSX6404 19951101S101702Z215711AYSX6404
NN 157D07891E7C70AE SX YSX6404 19951101S101702Z215750AYSX6404
NN 157E4AA413780998 SX YSX6404 19951109S101702A049277AYSX6404
NN 157F65A8168E9526 SX YSX6404 19951116S101702M000633AYSX6404
NN 158002370412E632 SX YSX6404 19951120S101702Z219821AYSX6404
NN 15802BBB0A9123EC SX YSX6404 19951121S101702Z220128AYSX6404
NN 15802D0618D53640 SX YSX6404 19951121S101702Z220149AYSX6404
NN 15804EF51A17A5F8 SX YSX6404 19951122S101702Z220381AYSX6404
NN 15818C5D02C27A40 SX YSX6404 19951130S101702Z222054AYSX6404
NN 1582B14A1C2269D0 SX YSX6404 19951207S101702M000644AYSX6404
NN 1583C9A506A92A02 SX YSX6404 19951214S101702M000650AYSX6404
NN 1583BE0C093D4690 SX YSX6404 19951214S101702Z224743AYSX6404
NN 1583C0271FEAC558 SX YSX6404 19951214S101702Z224751AYSX6404
NN 15846BBD1769B366 SX YSX6404 19951218S101702A050580AYSX6404
NN 1584BD4D08B57CF4 SX YSX6404 19951220S101702A050692AYSX6404
NN 1585CFD31461A328 SX YSX6404 19951227S101702A050763AYSX6404
NN 1588320F1E183AC8 SX YSX6404 19960111S101702M000654AYSX6404
NN 15891BF50D979ACA SX YSX6404 19960117S101702A051254AYSX6404
NN 158A84A60AB4B4B6 SX YSX6404 19960126S101702Z231538AYSX6404
NN 158B2F3D11C0FAB2 SX YSX6404 19960130S101702A051549AYSX6404
NN 158C97201096367E SX YSX6404 19960208S101702M000665AYSX6404
NN 158ECB9313CF239C SX YSX6404 19960222144924S101702A052254AYSX6404
NN 15944B7A1A07251A SX YSX6404 19960328144309S101702A053092AYSX6404
NN 15944D6B1584B088 SX YSX6404 19960328155251S101702A053092AYSX6404
NN 15944F2F08A7C05E SX YSX6404 19960328165756S101702A053092AYSX6404
NN 159BD8DE05759546 SX YSX6404 19960515160308S101702M000686AYSX6404
NN 159C467009F49F42 SX YSX6404 19960518092523S101702Z248849AYSX6404
NN 159C9E34195E47D8 SX YSX6404 19960520134651S101702A054281AYSX6404
NN 15A083290AC6BDA0 SX YSX6404 19960614082939S101702Z252755AYSX6404
NN 15A08E8A1F1D8D06 SX YSX6404 19960614151554S101702A055046AYSX6404
NN 15A10799061AF3A4 SX YSX6404 19960617152901S101702A055080AYSX6404
NN 15A298551603232A SX YSX6404 19960627143103S101702A055354AYSX6404
NN 15A3B19F1CE393FC SX YSX6404 19960704142038S101702A055548AYSX6404
NN 15AB64C316974D84 SX YSX6404 19960822140947S101702A056633AYSX6404
NN 15B45BE402B36B20 SX YSX6404 19961018151537S101702A058019AYSX6404
NN 15B5214B1AE30368 SX YSX6404 19961023130053S101702A058044AYSX6404
NN 15B9DE6B0045E89E SX YSX6404 19961122163940S101702A059128AYSX6404
NN 15B9F482175AAC6C SX YSX6404 19961123055028S101702Z279032AYSX6404
NN 15BA553F1F5DAB1C SX YSX6404 19961125153301S101702A059164AYSX6404
NN 15BBE7A415C22376 SX YSX6404 19961205153416S101702M000752AYSX6404
NN 15B9B1C203FA3896 SX YSX6405 19961121140041S101702M000745AYSX6405
NN 15BBE7A415E64564 SX YSX6405 19961205153417S101702M000752AYSX6405
NN 15BE18A215AA3788 SX YSX6405 19961219141040S101702A060107AYSX6405
NN 15C5CCB61D938398 SX YSX6405 19970206143330S101702A061469AYSX6405
NN 15CE9995012D3F92 SX YSX6405 19970403143003S101702M000784AYSX6405
NN 15D4E4FE15F52D8F SX YSX6405 19970513154526S101702A063879AYSX6405
NN 15D5019C06986FF0 SX YSX6405 19970514084910S101702Z311200AYSX6405
NN 15D50F33086105C8 SX YSX6405 19970514165526S101702A063968AYSX6405
NN 15D87F95167A750D SX YSX6405 19970605140226S101702M000795AYSX6405
NN 15D8A1011773DB8E SX YSX6405 19970606100244S101702Z315022AYSX6405
NN 15D8A85E18EC4C49 SX YSX6405 19970606142544S101702A064475AYSX6405
NN 15DADD43129A0BC2 SX YSX6405 19970620152422S101702A064844AYSX6405
NN 15DD8731077D9162 SX YSX6405 19970707141044S101702A065151AYSX6405
NN 15DEA11B0E5EA8E6 SX YSX6405 19970714142047S101702A065304AYSX6405
NN 15DECB861D7026A2 SX YSX6405 19970715153931S101702A065354AYSX6405
NN 15E265C404691D6E SX YSX6405 19970807134752S101702A065801AYSX6405
NN 15E3807C16D54EDC SX YSX6405 19970814142658S101702M000819AYSX6405
NN 15E3833802FE9D42 SX YSX6405 19970814160448S101702M000819AYSX6405
NN 15E4192917134A7E SX YSX6405 19970818093107S101702Z327680AYSX6405
NN 15E4245417AC08DC SX YSX6405 19970818161023S101702A066102AYSX6405
NN 15E4998B095FD442 SX YSX6405 19970821140531S101702A066252AYSX6405
NN 15E8FD85098F021E SX YSX6405 19970918123555S101702A066829AYSX6405
NN 15F2BEAC0AF8B302 SX YSX6405 19971119141110S101702A068442AYSX6405
NN 15F5190407D60B38 SX YSX6405 19971204132949S101702M000869AYSX6405
NN 15F5E0FE10436E76 SX YSX6405 19971209124733S101702A068954AYSX6405
NN 15F74CA907BCDAF6 SX YSX6405 19971218134256S101702A069206AYSX6405
NN 15F7DFEE1A1140AC SX YSX6405 19971222053543S101702Z352011AYSX6405
NN 15FBBA1406F2D048 SX YSX6405 19980115174324S101702M000856AYSX6405
NN 15FC57E4039F0174 SX YSX6405 19980119155852S101702A069899AYSX6405
NN 15FCF2710534B0EC SX YSX6405 19980123121054S101702Z356881AYSX6405
NN 15FCF5FE10F98F9A SX YSX6405 19980123141704S101702Z356907AYSX6405
NN 15FCF6F30AE89D86 SX YSX6405 19980123145045S101702A070007AYSX6405
NN 1607CBC9140627E5 SX YSX6405 19980402145252S101702M000899AYSX6405
NN 1607D0201082AF96 SX YSX6405 19980402172908S101702M000899AYSX6405
NN 16086D0C1B5F62EC SX YSX6405 19980406150643S101702A071524AYSX6405
NN 160A06340B7E4886 SX YSX6405 19980416190913S101702M000898AYSX6405
NN 160F559E06839613 SX YSX6405 19980520140320S101702M000912AYSX6405
NN 16101F63161E1B38 SX YSX6405 19980525142836S101702A072728AYSX6405
NN 1610BDC10F807C44 SX YSX6405 19980529125649S101702A072818AYSX6405
NN 1612CA291720EF30 SX YSX6405 19980611134538S101702M000921AYSX6405
NN 15828D8216BBB3A4 SX YSX64P4 19951206S101702Z223382AYSX64P4
NN 1582B14F01A78782 SX YSX64P4 19951207S101702M000644AYSX64P4
NN 1583C9A6100874A6 SX YSX64P4 19951214S101702M000650AYSX64P4
NN 1583BD9D16A0F21C SX YSX64P4 19951214S101702Z224741AYSX64P4
NN 1583BE0C09139D80 SX YSX64P4 19951214S101702Z224743AYSX64P4
NN 1583C02706FE22B6 SX YSX64P4 19951214S101702Z224751AYSX64P4
NN 15846BBD1556B166 SX YSX64P4 19951218S101702A050580AYSX64P4
NN 158463DB15862DD0 SX YSX64P4 19951218S101702Z225267AYSX64P4
NN 158467551C0FD244 SX YSX64P4 19951218S101702Z225344AYSX64P4
NN 1584BD4C1C2D8EEC SX YSX64P4 19951220S101702A050692AYSX64P4
NN 1584B5770E46642E SX YSX64P4 19951220S101702Z225865AYSX64P4
NN 1584B6A0156A2C1A SX YSX64P4 19951220S101702Z225899AYSX64P4
NN 15850C8C0B21FA0C SX YSX64P4 19951222S101702A050719AYSX64P4
NN 1585CFD402C4C770 SX YSX64P4 19951227S101702A050763AYSX64P4
NN 1588320F1DF06CB8 SX YSX64P4 19960111S101702M000654AYSX64P4
NN 1588FC800301D63A SX YSX64P4 19960116S101702A051197AYSX64P4
NN 15891C0017B4FAD0 SX YSX64P4 19960117S101702A051254AYSX64P4
NN 158A84A3193E58A6 SX YSX64P4 19960126S101702Z231538AYSX64P4
NN 158B2F5103FDFF42 SX YSX64P4 19960130S101702A051549AYSX64P4
NN 158B80C906B86A8A SX YSX64P4 19960201S101702A051648AYSX64P4
NN 15921708001661CC SX YSX64P4 19960314140358S101702A052714AYSX64P4
NN 15935B8F15814884 SX YSX64P4 19960322153819S101702A053005AYSX64P4
NN 159C9E3419608CA2 SX YSX64P4 19960520134654S101702A054281AYSX64P4
NN 15A066380B70AC30 SX YSX64P4 19960613151302S101702A054928AYSX64P4
NN 15A08E8700D576FC SX YSX64P4 19960614151553S101702A055046AYSX64P4
NN 15A1079611E06138 SX YSX64P4 19960617152900S101702A055080AYSX64P4
NN 15A1A9DE1CC3EBF8 SX YSX64P4 19960621161730S101702A055254AYSX64P4
NN 15AB64CB14D053D8 SX YSX64P4 19960822140946S101702A056633AYSX64P4
NN 15AC5CCE07714BAC SX YSX64P4 19960828180725S101702A056782AYSX64P4
NN 15ACA5E11E084310 SX YSX64P4 19960830134305S101702Z264075AYSX64P4
NN 15AD1A691F23EDCE SX YSX64P4 19960902111358S101702Z264248AYSX64P4
NN 15AD46930343C32A SX YSX64P4 19960903133413S101702A056855AYSX64P4
NN 15B9B1BF115CC4AE SX YSX64P4 19961121140040S101702M000745AYSX64P4
NN 15B9DE6A1FCCEF3C SX YSX64P4 19961122163939S101702A059128AYSX64P4
NN 15B9F4821A80B90E SX YSX64P4 19961123055027S101702Z279032AYSX64P4
NN 15BA553F1F73E0A6 SX YSX64P4 19961125153300S101702A059164AYSX64P4
NN 15BBE7A416395902 SX YSX64P4 19961205153414S101702M000752AYSX64P4
NN 15BCFEBF102435FA SX YSX64P5 19961212135753S101702A059837AYSX64P5
NN 15C164BE1F570A0E SX YSX64P5 19970109134552S101702A060555AYSX64P5
NN 15C5CCB615F03636 SX YSX64P5 19970206143327S101702A061469AYSX64P5
NN 15CE99950783A102 SX YSX64P5 19970403142956S101702M000784AYSX64P5
NN 15D3EFA6076D084E SX YSX64P5 19970507132447S101702M000792AYSX64P5
NN 15D4E4FE15F85147 SX YSX64P5 19970513154524S101702A063879AYSX64P5
NN 15D5019C186E9827 SX YSX64P5 19970514084909S101702Z311200AYSX64P5
NN 15D50F33140545A8 SX YSX64P5 19970514165525S101702A063968AYSX64P5
NN 15D87F8508B02DF0 SX YSX64P5 19970605140224S101702M000795AYSX64P5
NN 15D8A85E18DC5CD6 SX YSX64P5 19970606142544S101702A064475AYSX64P5
NN 15DD87310312FBA2 SX YSX64P5 19970707141043S101702A065151AYSX64P5
NN 15DEA11B09FC6474 SX YSX64P5 19970714142046S101702A065304AYSX64P5
NN 15DECB861CCC0B66 SX YSX64P5 19970715153931S101702A065354AYSX64P5
NN 15E3807D14063AC8 SX YSX64P5 19970814142657S101702M000819AYSX64P5
NN 15E383420FBCD42C SX YSX64P5 19970814160447S101702M000819AYSX64P5
NN 15E419281E7CDE14 SX YSX64P5 19970818093106S101702Z327680AYSX64P5
NN 15E4245B13CBEEA6 SX YSX64P5 19970818161022S101702A066102AYSX64P5
NN 15E4998B13ADC56C SX YSX64P5 19970821140530S101702A066252AYSX64P5
NN 15F0B30A00AE47BC SX YSX64P5 19971106134926S101702M000849AYSX64P5
NN 15F2BEAC0BCC8F5C SX YSX64P5 19971119141112S101702A068442AYSX64P5
NN 15F5190404B4D436 SX YSX64P5 19971204132949S101702M000869AYSX64P5
NN 15F5E0FE0FCDFA4E SX YSX64P5 19971209124733S101702A068954AYSX64P5
NN 15F74CAE0D9245D2 SX YSX64P5 19971218134258S101702A069206AYSX64P5
NN 15F76C5910C455A2 SX YSX64P5 19971219083811S101702Z351781AYSX64P5
NN 15F778990CA7AD8E SX YSX64P5 19971219155653S101702A069287AYSX64P5
NN 15F7DFF5131DAADE SX YSX64P5 19971222053615S101702Z352013AYSX64P5
NN 15FBBA1403BB5780 SX YSX64P5 19980115174323S101702M000856AYSX64P5
NN 15FC4F0216655CA6 SX YSX64P5 19980119104109S101702Z355843AYSX64P5
NN 15FC57E404A04902 SX YSX64P5 19980119155852S101702A069899AYSX64P5
NN 15FCF26E1AAECB30 SX YSX64P5 19980123121052S101702Z356881AYSX64P5
NN 15FCF5FE1112481C SX YSX64P5 19980123141704S101702Z356907AYSX64P5
NN 15FCF6F30238214C SX YSX64P5 19980123145045S101702A070007AYSX64P5
NN 1607CD4B0924421C SX YSX64P5 19980402154907S101702M000899AYSX64P5
NN 1607D01F0539B2B4 SX YSX64P5 19980402172907S101702M000899AYSX64P5
NN 16086D0F08D86394 SX YSX64P5 19980406150642S101702A071524AYSX64P5
NN 1608BA930E7491E2 SX YSX64P5 19980408132103S101702A071600AYSX64P5
NN 1608ED1411CE1954 SX YSX64P5 19980409192934S101702A071661AYSX64P5
NN 160F55931ADFD53A SX YSX64P5 19980520140318S101702M000912AYSX64P5
NN 161730A703D51E82 SX YSX64P5 19980709134005S101702M000924AYSX64P5
NN 1571157313C573BC SX YSX8103 19950817S101702A046517AYSX8103
NN 157C16B512FB44AC SX YSX8103 19951026S101702A048958AYSX8103
NN 157D318A04933C62 SX YSX8103 19951102S101702A049172AYSX8103
NN 15850C870AE46676 SX YSX8103 19951222S101702A050719AYSX8103
NN 159F4BC61A1C9468 SX YSX8103 19960606144323S101702A054730AYSX8103
NN 1571156F01CA52CC SX YSX8104 19950817S101702A046517AYSX8104
NN 157C16B515E96EE8 SX YSX8104 19951026S101702A048958AYSX8104
NN 157D318A079D888A SX YSX8104 19951102S101702A049172AYSX8104
NN 15850C870CA55F0A SX YSX8104 19951222S101702A050719AYSX8104
NN 159ADB51182B2246 SX YSX8104 19960509084907S101702Z247322AYSX8104
NN 159AE3411EAFD254 SX YSX8104 19960509133253S101702A054073AYSX8104
NN 159F4BC805482D5E SX YSX8104 19960606144310S101702A054730AYSX8104
NY 15B899511092045A SX YSX8104 19961114144235S101702M000743AYSX8104
NY 15B8A1DB0C4C4948 SX YSX8104 19961114194632S101702M000743AYSX8104
NY 15C16462059C0658 SX YSX8104 19970109133303S101702A060530AYSX8104
NY 15B8995908276F1E SX YSX8105 19961114144236S101702M000743AYSX8105
NY 15B8A1DB10081264 SX YSX8105 19961114194633S101702M000743AYSX8105
NY 15B9342308D950C4 SX YSX8105 19961118110550S101702A058913AYSX8105
NY 15C164621C0207DC SX YSX8105 19970109133314S101702A060530AYSX8105
NY 15C5CB7B15990C06 SX YSX8105 19970206135318S101702A061338AYSX8105
NY 15D998871BDD73AE SX YSX8105 19970612134213S101702A064573AYSX8105
NY 15F2E61814A9D118 SX YSX8105 19971120134349S101702A068352AYSX8105
NY 15F3D212042DE0CE SX YSX8105 19971126102958S101702A068604AYSX8105
NY 15F4278E0045FDC2 SX YSX8105 19971128132836S101702A068681AYSX8105
NY 16059BE41FCFB732 SX YSX8105 19980319145430S101702M000893AYSX8105
NY 1605BE4213F65E18 SX YSX8105 19980320112646S101702A071216AYSX8105
NY 1607CADC1BFAD3DF SX YSX8105 19980402142035S101702A071385AYSX8105
NY 160F558C195E0C9C SX YSX8105 19980520140317S101702M000912AYSX8105
NY 16173094077053DC SX YSX8105 19980709134006S101702M000924AYSX8105
NY 15F0B30511E18942 SX YSX81S1 19971106134925S101702M000849AYSX81S1
NY 16059BE401AB11B4 SX YSX81S1 19980319145410S101702M000893AYSX81S1
NY 1607CAD009B76706 SX YSX81S1 19980402142033S101702A071385AYSX81S1
NY 1612CA24135515A7 SX YSX81S1 19980611134539S101702M000921AYSX81S1
NY 1517FC3D0D29C796 SX YSXFEHL
NY 151EA73716E4C2FA SX YSXFEHL 19940311013633S101702M000389A
NY 1557C87A0851C2E6 SX YSXFLOG 19950309140310S101702A042692AYSXFLOG
NY 155B13C201B67B58 SX YSXFLOG 19950330S101702A043182AYSXFLOG
NY 155C2F6F00389B96 SX YSXFLOG 19950406S101702A043381AYSXFLOG
NY 156B959E0B0861BC SX YSXFLOG 19950713S101702A046089AYSXFLOG
NY 15894B4511707A8C SX YSXFLOG 19960118S101702A051283AYSXFLOG
NY 15A0662B067DB9D6 SX YSXFLOG 19960613151257S101702A054928AYSXFLOG
NY 16059BD2029AA8A8 SX YSXFLOG 19980319145352S101702M000893AYSXFLOG
NY 151EA73813545804 SX YSXRELK 19940311013634S101702M000389A
NY 151F2CC31F733642 SX YSXRELK E
NN 1614FC2F024D406E SX YSXT231 19980625130147S101702A073376AYSXT231
NN 158DB2310749718C SX YSXT812 19960215150345S101702A052062AYSXT812
NN 158ECB311EBC7A4A SX YSXT812 19960222144042S101702A052211AYSXT812
NY 1454498000D217B0 SY SY9230
NY 15CE92BA0FD60A9C SY SY9230 A
NN 160A103D1AC874EB TE YTEF021 19980417011040S101702A071217AYTEF021
NN 160E6A7D1FE73396 TE YTEF021 19980514175259S101702A072358AYTEF021
NN 160A104003ADE3F2 TE YTEF022 19980417011041S101702A071217AYTEF022
NN 160E6A880A455602 TE YTEF022 19980514175300S101702A072358AYTEF022
NY 15F51EB417EC7912 TEST YYFIKUR 19971204165432S101702A068818AYYFIKUR
NN 15BCCEEE141E4052 TK TK0100 19961211093410S101702Z282987ATK0100
NN 15BDAFF31DF38818 TK TK0100 19961216234803S101702Z284134ATK0100
NN 15BDCD1806CE6402 TK TK0100 19961217171109S101702A060053ATK0100
NN 160D4EC11A3FB73A TK TK0110 19980507163244S101702A072127ATK0110
NN 15CC649D0539BB5C TK TK0120 19970320132922S101702A062552ATK0120
NN 160D4EA718821A60 TK TK0120 19980507163249S101702A072127ATK0120
NN 160D4EB7125C33C8 TK TK0130 19980507163251S101702A072127ATK0130
NN 15E5B14804A94F86 TK TK0150 19970828125856S101702A066346ATK0150
NN 15BE189502002E6C TK TK0160 19961219141039S101702A060093ATK0160
NN 15CC649C0CB18912 TK TK0160 19970320132918S101702A062552ATK0160
NN 160D4EC2023A6CD0 TK TK0160 19980507163219S101702A072127ATK0160
NN 1613E41B17AA1A32 TK TK0180 19980618135727S101702A073194ATK0180
NN 161731280ADF24EE TK TK0180 19980709140354S101702A073643ATK0180
NY 17E657201170B0BB TN TN0530 OTXO000054
NY 17F21DCA15518BEA TN TN0530 OTXO000058
NY 17FEAFB209BF994A TN TN0530 OTXO000063
NY 18104EE814900FEA TN TN0530 OTXO000066
NY 181C3B180B30476D TN TN0530 OTXO000070
NY 1819E9931AB47AFA TN TN0530 WS8B000468
NY 17C966571F2A4911 TN TN5003 OTXO000036
NY 17E657980847E6A6 TN TN5003 OTXO000054
NY 17E657991D6451CB TN TN5004 OTXO000054
NY 18063C231C9B1DE5 TN TN5004 OTXO000060
NY 181B48F112AAF5D8 TN TN5004 OTXO000070
NY 182E8111012CCA11 TN TN5004 OTXO000081
NY 1819E9CB0368BBAC TN TN5004 WS8B000468
NY 17E6570B0DF9D509 TN TN5010 OTXO000054
NY 17D4BDE2007918FE TN TN5014 OTXO000045
NY 181B48F008A06B67 TN TN5014 OTXO000070
NY 17C9665C0387A55B TN TN5015 OTXO000036
NY 181B48F2011210A5 TN TN5015 OTXO000070
NY 1819E9D9176CB4D2 TN TN5015 WS8B000468
NY 17E6570B0AABFCCE TN TN5016 OTXO000054
NY 17F21DDA14D71797 TN TN5016 OTXO000058
NY 18063C1808A5D534 TN TN5016 OTXO000060
NY 18104EFE0554BB5E TN TN5016 OTXO000066
NY 181B49080DA8EC2A TN TN5016 OTXO000070
NY 182E810A01038C2E TN TN5016 OTXO000081
NY 17E6570C0D791019 TN TN5030 OTXO000054
NY 181B490A1AC57E74 TN TN5030 OTXO000070
NY 1812F65D1E15FCEA TN TN5030 OTXO000074
NY 183AC00E05023C61 TN TN7004 CSQS000007
NY 17E6570D175F4BCC TN TN7004 OTXO000054
NY 17F21DD813107A44 TN TN7004 OTXO000058
NY 18063C0D100AB6A4 TN TN7004 OTXO000060
NY 17FEAFAC1709C607 TN TN7004 OTXO000063
NY 18104FB20C777F7F TN TN7004 OTXO000066
NY 181B490F003C0912 TN TN7004 OTXO000070
NY 182E810C16E481CB TN TN7004 OTXO000081
NY 182149BF1F625D6A TN TN7004 OTXO000082
NY 1830D2BA1F74EDCE TN TN7004 OTXO000094
NY 17C966571F3246DF TN TN7020 OTXO000036
NY 17F21DD70A3EBF11 TN TN7020 OTXO000058
NY 17D4BDE718D0778D TN TN7065 OTXO000045
NY 17E657110255E3A3 TN TN7066 OTXO000054
NY 17D4BDE4073F9F55 TN TN7067 OTXO000045
NY 17D4BDE5021BA429 TN TN7068 OTXO000045
NY 17E657A219156486 TN TN7080 OTXO000054
NY 18063C5E10898939 TN TN7080 OTXO000060
NY 1811132F09383B22 TN TN7080 OTXO000066
NY 181B490C0EA4AA91 TN TN7080 OTXO000070
NY 181116FF0E0F1749 TN TN7080 OTXO000072
NY 18148F89125891BE TN TN7080 OTXO000075
NY 1814DA68156F3251 TN TN7080 OTXO000076
NY 18175BBA0E8A3345 TN TN7080 OTXO000078
NY 182534FC0B8DF7BB TN TN7080 OTXO000085
NY 17D4BDD2163E5B45 TN TN8900 OTXO000045
NY 18104EF71FB8201D TN TN8900 OTXO000066
NY 17C96658071D404A TN TN8910 OTXO000036
NY 17E657AC1B0AB8DC TN TN8920 OTXO000054
NY 181B49100387BF76 TN TN8920 OTXO000070
NY 182E814602B0B1A4 TN TN8920 OTXO000081
NY 17E1E94F01B663D1 TN YTN0021 OTXO000054577CC9AE
NY 17F21C560E49E035 TN YTN0021 OTXO0000585804AD7B
NY 180B663101E0FC48 TN YTN0021 OTXO00006658D8D017
NY 181C3AB30E618BED TN YTN0021 OTXO0000705965FE66
NY 17E199940CAD9611 TN YTN0041 OTXO000054577A2CD6
NY 181C3AC1107EEC1B TN YTN0041 OTXO0000705965FE73
NY 17E1E9491B322516 TN YTN0100 OTXO000054577CC97A
NY 17EDB6FC0129B3ED TN YTN0100 OTXO00005857DFCD28
NY 18081F800CFE1F11 TN YTN0100 OTXO00006058BD4694
NY 180B3E2712F573A3 TN YTN0100 OTXO00006658D78025
NN 181CE3791B4E6F70 TN YTN0100 OTXO000070596B8607MVS
NY 182809F90649941C TN YTN0100 OTXO00008159C90F4FMVS
NY 181DF4941CBDBE2D TN YTN0101 OTXO00007059747939
NY 182A62711B731854 TN YTN0101 OTXO00008159DCBCA0
NY 17E6558D07C16DC5 TN YTN0160 OTXO00005457A1E399
NY 181C3AC902656B36 TN YTN0160 OTXO0000705965FE8DMVS
NY 17E6558E13DBA9B8 TN YTN0170 OTXO00005457A1E39F
NY 181C3ACC04F24690 TN YTN0170 OTXO0000705965FE9DMVS
NY 17E6558E1BD85139 TN YTN0180 OTXO00005457A1E3A8
NY 181C3AD3128B4815 TN YTN0180 OTXO0000705965FEAFMVS
NY 17E655900C824645 TN YTN0190 OTXO00005457A1E3AF
NY 181C3AD716131BAA TN YTN0190 OTXO0000705965FEBFMVS
NY 17E1E9500486A1F4 TN YTN0200 OTXO000054577CC9B6
NY 181DF495160F6BB6 TN YTN0201 OTXO0000705974793F
NY 18282B261F97BBD8 TN YTN0201 OTXO00008159CA241A
NY 182E573913D07116 TN YTN0202 OTXO00008159FDDDF0MVS
NY 182FBB770EAF3D5E TN YTN0202 OTXO0000925A098A8AMVS
NY 17D492130747E397 TN YTN0210 OTXO000045570CE08E
NY 181DF4B4023686AD TN YTN0210 OTXO00007059747A48
NY 17DF45C41789AAD2 TN YTN5012 OTXO0000545766A6D3
NY 17EDB6EC0CF41C4E TN YTN5012 OTXO00005857DFCCA4
NY 18191C8603A06FC5 TN YTN5012 OTXO000070594BD57CMVS
NY 1827D9ED1B7A2247 TN YTN5012 OTXO00008159C777B6MVS
NY 17E6559A1CCAD2A9 TN YTN5013 OTXO00005457A1E413
NY 17F21C5711AA25C0 TN YTN5013 OTXO0000585804AD84
NY 18191C90082C554C TN YTN5013 OTXO000070594BD582MVS
NY 17DF45A31978F37D TN YTNBOPH OTXO0000545766A5BA
NY 17EDB6E91BA0581C TN YTNBOPH OTXO00005857DFCC97
NY 1809603A0BEFEB25 TN YTNBOPH OTXO00006658C7C906
NY 181ACC4D11C2F59C TN YTNBOPH OTXO0000705959FCD2MVS
NY 17C8CC6419D27532 TN YTNDEP OTXO00003656AA11D9
NY 17EDB6FB19E7E784 TN YTNDEP OTXO00005857DFCD1D
NY 17E6558C1322BCCF TN YTNOTF OTXO00005457A1E392
NY 17EDB6E21CDC612C TN YTNOTF OTXO00005857DFCC76
NY 180F0FD312B47284 TN YTNOTF OTXO00007158F7898E
NY 17DF45A60F2A7989 TN YTNSICH OTXO0000545766A5D8
NY 17EDB6FE0A52D974 TN YTNSICH OTXO00005857DFCD1F
NY 180618DA0815EE09 TN YTNSICH OTXO00006058AC46FF
NY 18191C6703BC1494 TN YTNSICH OTXO000070594BD52D
NY 1827D9FA15D678AA TN YTNSICH OTXO00008159C777D9
NY 17E67D330AF98717 TN YTNUPD OTXO00005457A33001
NY 17F110FD1F448DB8 TN YTNUPD OTXO00005857FBEABF
NY 17F79CF810A7E370 TN YTNUPD OTXO0000615832C7DD
NY 181E8200024419AE TN YTNUPD OTXO00007059791B5C
NN 1815CCAA138ADEAC TN YTNUPD OTXO00007359300B05
NY 1827DA091B550E18 TN YTNUPD OTXO00008159C7784F
NY 1821498D00510B13 TN YTNUPD OTXO00008259906C81
NY 182284B2057B5728 TN YTNUPD OTXO000085599AC00E
NY 1830D2AD0CF9B217 TN YTNUPD OTXO0000945A12B0F8
NY 1835776E12D92D8C TN YTNW100 CSQS0000075A39A4F1
NY 1835776F0D4B98ED TN YTNW100 CSQS0000075A39A4F1MVS
NY 17B961AE1FEAFADD TN YTNW100 OTXO0000235628CC9D
NY 17F1543407FE1E03 TN YTNW100 OTXO00005857FE1E9A
NY 17FBE2B60642ED14 TN YTNW100 OTXO00006358569ED9
NY 1819E27F0995289A TN YTNW100 OTXO00007059525387MVS
NY 182B2EE119F07759 TN YTNW100 OTXO00008159E36F73MVS
NY 1830D286004BCE73 TN YTNW100 OTXO0000945A12AF80MVS
NY 17E0A92102C7BC46 TN YTNW170 OTXO00005457724BD1
NY 17F15CB5038EB27A TN YTNW170 OTXO00005857FE65F4
NY 180B99CD097AF661 TN YTNW170 OTXO00006658DA8107
NY 18191C82198A62B3 TN YTNW170 OTXO000070594BD553MVS
NY 182A35830C65F21A TN YTNW170 OTXO00008159DB43A5MVS
NY 17E97FE90F708F1A TP TP0800 TP00000006
NY 17EF242E0A05F435 TP TP0800 TP00000011
NY 180430DD1856D211 TP TP0800 TP00000016
NY 17E08A7A1437B036 TR TR0810 AITR000024
NY 1802C7421C862CE2 TR TR0810 AITR000031
NY 17EED90D089FEAAE TR TR5310 DERI000033
NY 17EED90D1D7F3D36 TR TR5320 DERI000033
NY 17F0DF8B1DC9F296 TR TR5330 DERI000033
NY 17F0DF8E16868A73 TR TR5340 DERI000033
NY 17CBC2051C2DC687 TR TR5360 DERI000022
NY 17D6C4E7117C1866 TR TR5360 DERI000026
NY 17E6821203212ED6 TR TR5360 DERI000030
NY 17F0DF9014CD9938 TR TR5360 DERI000033
NY 17C9941413DD4975 TR TR7040 DERI000022
NY 17D3A899025701A9 TR TR7040 DERI000026
NY 17E304760AB8D3E3 TR TR7040 DERI000030
NY 17B4F8970461F9BA TR YTREDBM AITR0000155603CD16
NY 17C55303070C8A0D TR YTRHISP AITR000012568CED33
NY 180A79E40309AEE1 TR YTRHISP AITR00003558D103CA
NY 181913010BD238E1 TR YTRHISP AITR000041594B870D
NY 1830B6E915E88DAF TR YTRHISP AITR0000475A11C803MVS
NY 17C99311078E759A TR YTRT061 RRA000003156B09495
NY 17EE32100DBDABE9 TR YTRT061 RRA000004357E3D5C4
NN 1511668506178B7C TR YTRT931
NN 15AA4B330C36AFB4 TR YTRT931 19960815141215S101702A056402AYTRT931
NN 151166AC117672B4 TR YTRT932
NN 1525300215B6B5FC UF UF8000 19940421153508S101702A033617AUF8000
NN 1529963307EBC618 UF UF8000 19940519152240S101702A034445AUF8000
NY 1479937C01128F38 UP YUP03
NY 1479939C0F27649C UP YUP04
NY 1479939A14610D4C UP YUP06
NY 147993B815305050 UP YUP09
NY 147994F413269064 UP YUP10
NY 1479939B1FA3DE60 UP YUP11
NY 147993DF14F25E00 UP YUP12
NN 147993DD1C94A6AC UP YUP13
NY 147995320C696CE0 UP YUP22
NN 1479941C17ACA5B8 UP YUP23
NY 147994F310C5AAE8 UP YUP24
NY 1479955A16491B58 UP YUP25
NY 147994EF04A4F7C4 UP YUP29
NY 14799559148240A8 UP YUP39
NY 1479955B0532D7CC UP YUP40
NY 147994F01D3914F0 UP YUP44
NY 1482604801ADA634 UP YUP45
NY 147994F3031659C0 UP YUP46
NY 1484B7781DA22CD0 UP YUP77
NY 1809B2F11F6A0328 UU UU5170 GSER000169
NY 17E08C24031B3CE6 UU UU5170 RS20000050
NY 17F0109116506E77 UU UU5170 RS20000055
NY 180527A0006F0662 UU UU5170 RS20000066
NY 180BE16207F0CF6D UU UU5170 RS20000072
NY 181B4D5103D71475 UU UU5170 RS20000077
NY 1828882A1064CD7E UU UU5170 RS20000079
NY 183541EE0A6A5AEF UU UU5170 RS20000080
YY 17B6B00315F39DDC UU YUU1031 RS2000003356123340
YY 1834A47C0B438F4F UU YUU1031 RS200000805A32BB72
NY 17E0892B04DF4477 VD VDDBM01 DSPV000030
NY 18198D8C087DC41E VD VDDBM01 DSPV000042
NY 1824E1921E3AF7B0 VD VDDBM01 DSPV000044
NY 177E9A5B18ACFDE9 VD VDDBM04 A14S002541
NY 18134A4318AA4A30 VD VDDBM04 DSPV000042
NY 17E089240269C872 VD VDDBM15 DSPV000030
NY 17EED0B006930DF7 VD VDDBM15 DSPV000034
NY 1802C6690ADAC2E2 VD VDDBM15 DSPV000040
NY 1809B5BF07D12AC6 VD VDDBM15 DSPV000041
NY 18198D910ABAFDE1 VD VDDBM15 DSPV000042
NY 182718F7011EF702 VD VDDBM15 DSPV000044
NY 17E0892319281FB1 VD VDGLH00 DSPV000030
NY 17F17AAC12A17747 VD VDGLH00 DSPV000034
NY 1802C64E09C96318 VD VDGLH00 DSPV000040
NY 18198D941781E33C VD VDGLH00 DSPV000042
NY 18285BB91897D8D1 VD VDGLH00 DSPV000044
NY 18385D8B1D38F301 VD VDGLH00 DSPV000047
NY 183DDEC91E45FFFB VD VDGLH00 DSPV000050
NY 178CE81217F4E0EA VD VDINI01 DSPV000001
NY 18198D981F1365CF VD VDINI01 DSPV000042
NY 1824E198035338B8 VD VDINI01 DSPV000044
NY 17E0892D10D30CB5 VD VDREC00 DSPV000030
NY 18134A351DD80C62 VD VDREC00 DSPV000042
NY 17E0892A09A09817 VD VDUTI41 DSPV000030
NY 17FF2EF11F05701F VD VDUTI41 DSPV000040
NY 18198DA416543BCB VD VDUTI41 DSPV000042
NY 17DF911E07E1A390 VD YVD0721 DSPV00003057691EEA
NY 17FC5F2D1A76F396 VD YVD0721 DSPV000040585AB2F8
NY 17DF913212D6437C VD YVD0722 DSPV00003057691F8F
NY 17FC5F2E1C3D2D8C VD YVD0722 DSPV000040585AB301
NY 17D358FB1F71048E VD YVDDFA DSPV00002357029E3F
NY 1824DF5F02020ACF VD YVDDFA DSPV00004459AE7FA5
NY 1824DF6100693A94 VD YVDDFA DSPV00004459AE7FA5MVS
NY 182998FB175A9A89 VD YVDRES VDSS00010259D6229C
NY 17C9B49A131A4C55 VP VP0010 VIP0000008
NY 17E4505513488971 VP VP0030 VIP0000015
NY 17EED96D13A29111 VP VP0030 VIP0000018
NY 17E1C561053A68D4 VP VP5300 VIP0000015
NY 17E1C55A15612ADA VP VP5310 VIP0000015
NY 17EED919061DCEDE VP VP5310 VIP0000018
NY 180435C80D6714B8 VP VP5310 VIP0000022
NY 180274B80A406832 VP VP5310 VIP0000023
NY 17E1C5681055CB39 VP VP5330 VIP0000015
NY 17E1C56C1492292F VP VP5340 VIP0000015
NN 1512802709B816B8 VP VP7010
NN 155248551FB50E4A VP VP7010 19950202135945S101702A041692AVP7010
NY 1617CF331E004DB6 VP VP7400 19980713121941S101702Z382775AVP7400
NY 1607ADD71D1138A6 VP VP7410 19980401210424S101702Z367944AVP7410
NY 1607CADA05853684 VP VP7410 19980402142025S101702A071473AVP7410
NY 15D93E480C064AA9 VP VP7411 19970610075226S101702Z315459AVP7411
NY 15D9426501AF1929 VP VP7411 19970610101931S101702Z315459AVP7411
NY 15D94CBB10162BDF VP VP7411 19970610162936S101702Z315459AVP7411
NN 158B81171BDDD332 VP VP9997 19960201S101702A051690AVP9997
NN 157E4AE3037CD542 VP VP9998 19951109S101702A049426AVP9998
NN 157EECE7015F7B66 VP VP9998 19951113S101702Z218537AVP9998
NN 157F0C9702D3D7DE VP VP9998 19951114S101702Z218682AVP9998
NN 156967950CC44BFC VP VP9999 19950629S101702A045771AVP9999
NY 1599CDF01295F890 VP YVP7401 19960502160759S101702A053816AYVP7401
NY 159CEA3C0D873370 VP YVP7401 19960522110824S101702Z249496AYVP7401
NY 159D3CFB0757F72E VP YVP7401 19960524122955S101702Z249868AYVP7401
NY 15A10496004B9CC8 VP YVP7401 19960617134246S101702Z253094AYVP7401
NY 15A1318C059543A2 VP YVP7401 19960618163029S101702Z253537AYVP7401
NY 15A1A21B1763E4D0 VP YVP7401 19960621113929S101702Z254159AYVP7401
NY 15A1A74E02F15284 VP YVP7401 19960621144555S101702Z254221AYVP7401
NY 15A2984B14FEB1B4 VP YVP7401 19960627143107S101702A055358AYVP7401
NY 15BDC0ED079BF8B8 VP YVP7401 19961217095521S101702Z284200AYVP7401
NY 15BDCA381CA9429E VP YVP7401 19961217152842S101702Z284369AYVP7401
NY 15CC3EC608583F7C VP YVP7401 19970319145619S101702Z302523AYVP7401
NY 15D09D3D13A79E36 VP YVP7401 19970416100659S101702Z306532AYVP7401
NY 15D0A8331151FAD2 VP YVP7401 19970416164056S101702Z306635AYVP7401
NY 15D55D9804A2483B VP YVP7401 19970516154226S101702A064012AYVP7401
NY 1601549705449EEC VP YVP7401 19980220093422S101702Z360998AYVP7401
NY 16024C15126C415A VP YVP7401 19980226131233S101702A070664AYVP7401
NY 1599CDF20F6371B6 VP YVP7402 19960502160803S101702A053816AYVP7402
NY 159CEA3C0D6A65F8 VP YVP7402 19960522110825S101702Z249496AYVP7402
NY 159D3CFB088BBEC4 VP YVP7402 19960524122955S101702Z249868AYVP7402
NY 15A10496003409D0 VP YVP7402 19960617134247S101702Z253094AYVP7402
NY 15A1318C0A0CD842 VP YVP7402 19960618163031S101702Z253537AYVP7402
NY 15A1A21C02CDA2EC VP YVP7402 19960621113930S101702Z254159AYVP7402
NY 15A1A74E00B1B76C VP YVP7402 19960621144555S101702Z254221AYVP7402
NY 15A2984C0A211D02 VP YVP7402 19960627143109S101702A055358AYVP7402
NY 15D0A83307B256E2 VP YVP7402 19970416164056S101702Z306635AYVP7402
NY 15D55DA61697C01F VP YVP7402 19970516154445S101702A064012AYVP7402
NN 1599CDF30B1FE6EE VP YVP7403 19960502160807S101702A053816AYVP7403
NN 159CEA3C0D6E6FF8 VP YVP7403 19960522110825S101702Z249496AYVP7403
NN 159D3CFB078F564A VP YVP7403 19960524122957S101702Z249868AYVP7403
NN 15A1049609914F8E VP YVP7403 19960617134248S101702Z253094AYVP7403
NN 15A1318C0CD88C7C VP YVP7403 19960618163032S101702Z253537AYVP7403
NN 15A1A21B177412AC VP YVP7403 19960621113930S101702Z254159AYVP7403
NN 15A1A74E01673934 VP YVP7403 19960621144556S101702Z254221AYVP7403
NN 15A2985015593642 VP YVP7403 19960627143112S101702A055358AYVP7403
NY 15D0A833074CC22E VP YVP7403 19970416164057S101702Z306635AYVP7403
NY 15D55DA6142B8F3A VP YVP7403 19970516154446S101702A064012AYVP7403
NY 15D8A44E1ED3A997 VP YVP7403 19970606120106S101702Z315108AYVP7403
NY 15DAB2DF150FD718 VP YVP7403 19970619140749S101702A064792AYVP7403
NN 1514B9300974D096 VP YVPUP01
NN 151B4E370A08F98C VP YVPUP01 19940217182915S101702A031241A
NN 153F9E61006D51BE VP YVPUP01 19941006195313S101702A037982AYVPUP01
NN 157353FB027A7168 VP YVPUP01 19950831S101702A047391AYVPUP01
NN 1579956306FFFC26 VP YVPUP01 19951010S101702Z212033AYVPUP01
NN 157AFCC21A2579D8 VP YVPUP01 19951019S101702A048565AYVPUP01
NN 157F6A4D1C370E08 VP YVPUP01 19951116S101702A049627AYVPUP01
NN 158169A5024C3084 VP YVPUP01 19951129S101702Z221857AYVPUP01
NN 158197F31F69DD0A VP YVPUP01 19951130S101702A050037AYVPUP01
NN 1582B2B214C1345E VP YVPUP01 19951207S101702A050228AYVPUP01
NN 15871B4E0DF5CBD2 VP YVPUP01 19960104S101702A050753AYVPUP01
NN 158A6445045C2762 VP YVPUP01 19960125S101702A051459AYVPUP01
NN 159450A70A94D942 VP YVPUP01 19960328175023S101702A053067AYVPUP01
NN 15A3B6F90592C158 VP YVPUP01 19960704173144S101702A055520AYVPUP01
NN 15A3CF04138EC020 VP YVPUP01 19960705075226S101702A055520AYVPUP01
NN 15AD97B41F0D6020 VP YVPUP01 19960905135845S101702A056819AYVPUP01
NY 17E197BE0FF74064 VT VT0120 EBZV000009
NY 17EF1F241FB29B4B VT VT0120 EBZV000010
NY 152648AF171340AA VT VT0610 19940428145845S101702A033858AVT0610
NY 154749780BC6A590 VT VT0610 19941124145522S101702A039698AVT0610
NY 154497E90E66A334 VT VT0610 E
NY 17CBF5331866DD2B VT VT0880 VTX0000018
NY 1556B723175BD380 VT VT5040 19950302185840S101702A042571AVT5040
NY 15866F3A132A56DA VT VT5040 19951231S101702Z227061AVT5040
NY 15B317C918193170 VT VT5040 19961010135459S101702A057724AVT5040
NY 15CC69A406A0EA08 VT VT5040 19970320162702S101702M000778AVT5040
NY 17D3569706302E1A VT VT5110 EBZV000007
NN 154DE2241478A896 VT VT5120 19950105141216S101702A040864AVT5120
NN 1583C9CB11900060 VT VT5120 19951214S101702M000648AVT5120
NY 15F702E511F0579A VT VT5120 19971216174425S101702A069201AVT5120
NY 155E23AD0E233A82 VT VT5121 19950419S101702A043804AVT5121
NY 155F335706E117E2 VT VT5121 19950425S101702A043947AVT5121
NY 17E197C30A29756B VT VT5130 EBZV000009
NY 17EF1F3510490AF3 VT VT5130 EBZV000010
NY 16015A8217DF2D9A VT VT7798 19980220130604S101702A070613AVT7798
NN 15971E9A09A0A7E4 VT VT7799 19960415140717S101702A053434AVT7799
NN 15BD2F760F7FA550 VT VT7799 19961213190927S101702A059882AVT7799
NY 154A189804D12E02 VT VT8111 19941212115358S101702A040321AVT8111
NY 17C8CE340910B334 VT YVT0502 VTX000001856AA212B
NY 17C69BE81B4F8BD8 VT YVT0509 VTX00000185697B44F
NY 17C8CE380303CEF7 VT YVT0531 VTX000001856AA214A
NY 17C781E80C5F8056 VT YVT0532 VTX0000018569F3DAA
NY 162BC7DF199DB45D VT YVT0578 A15S000165
NY 151A387A0453DB72 VT YVT0621
NY 15F632E71A202A58 VT YVT0623 19971211133922S101702M000884AYVT0623
NY 1600E51A09713ACA VT YVT0623 19980217150354S101702A070537AYVT0623
NY 1603676C1DE4B288 VT YVT0623 19980305141315S101702A070824AYVT0623
NY 150F2EEB09ED3F46 VT YVT0731
NY 154B339C0D6B7386 VT YVT0731 19941219124226S101702A040594AYVT0731
NY 15501662082F0A76 VT YVT0731 19950119144820S101702M000551AYVT0731
NY 1564FD760273645E VT YVT0731 19950601S101702M000585AYVT0731
NY 156A7E0601447D9C VT YVT0731 19950706S101702A045888AYVT0731
NY 1589C8221820A6F2 VT YVT0731 19960121S101702Z230461AYVT0731
NY 158BAECA1098B8CC VT YVT0731 19960202S101702A051729AYVT0731
NY 158C4F720B399F60 VT YVT0731 19960206S101702A051780AYVT0731
NY 15BC8C2C0CD313E6 VT YVT0731 19961209174331S101702A059465AYVT0731
NY 15BD2F630FF8FB34 VT YVT0731 19961213190527S101702A059882AYVT0731
NY 15C6E71918B02712 VT YVT0731 19970213150302S101702A061735AYVT0731
NY 15E264C30EFA3C52 VT YVT0731 19970807131116S101702A065672AYVT0731
NY 15E30C4206896AFA VT YVT0731 19970811170742S101702A065857AYVT0731
NY 15E815801931476C VT YVT0731 19970912181134S101702A066795AYVT0731
NY 1602F2DA1ED90E10 VT YVT0731 19980302164021S101702A070775AYVT0731
NY 151167F21A9EC93C VT YVT0801
NY 151B49D716061078 VT YVT0801 19940217154745S101702A031635A
NY 151F3DA8056C651E VT YVT0801 19940314192641S101702A032472AYVT0801
NY 151F85EA15962870 VT YVT0801 19940316143208S101702A032544AYVT0801
NY 151F8D3310C943E0 VT YVT0801 19940316185331S101702A032544AYVT0801
NY 1521B8FF047DD074 VT YVT0801 19940330142350S101702A032942AYVT0801
NY 152765100F8EC68A VT YVT0801 19940505163017S101702A034051AYVT0801
NY 1532630B1E5EF83A VT YVT0801 19940714151204S101702A035710AYVT0801
NY 153268040C52A18E VT YVT0801 19940714180856S101702A035710AYVT0801
NY 1543D0BE16E4C33C VT YVT0801 19941102124425S101702A038864AYVT0801
NY 15497C4A1328B086 VT YVT0801 19941208143554S101702A040233AYVT0801
NY 15497D7816B01A00 VT YVT0801 19941208151811S101702A040233AYVT0801
NY 154DE3351054ED0E VT YVT0801 19950105144958S101702A041005AYVT0801
NY 154EFD9004A9F75A VT YVT0801 19950112151630S101702A041230AYVT0801
NY 1559FA041D3E829E VT YVT0801 19950323125517S101702A043107AYVT0801
NY 1564FD8016ED3154 VT YVT0801 19950601S101702M000585AYVT0801
NY 1566161301779178 VT YVT0801 19950608S101702A045087AYVT0801
NY 156A7E1006163068 VT YVT0801 19950706S101702A045888AYVT0801
NY 158A427E1ED0C40E VT YVT0801 19960124S101702A051425AYVT0801
NY 158AF8A91259FB0A VT YVT0801 19960129S101702Z231662AYVT0801
NY 158BAECF0EC0E0B4 VT YVT0801 19960202S101702A051729AYVT0801
NY 158C4F7A1AF83DE2 VT YVT0801 19960206S101702A051780AYVT0801
NY 159BD8E91746E942 VT YVT0801 19960515160336S101702M000686AYVT0801
NY 159CCA700B404E28 VT YVT0801 19960521160919S101702A054328AYVT0801
NY 15A06B3C14F086B0 VT YVT0801 19960613181338S101702A054978AYVT0801
NY 15AD9A3A0EAA4FDE VT YVT0801 19960905152954S101702M000711AYVT0801
NY 15C3990D0D92AB94 VT YVT0801 19970123142207S101702A061139AYVT0801
NY 15CB7D4918717AA4 VT YVT0801 19970314192907S101702A062471AYVT0801
NY 15CF2E1205598D60 VT YVT0801 19970407070548S101702Z304742AYVT0801
NY 15CFB353118ADEC8 VT YVT0801 19970410142923S101702A063075AYVT0801
NY 15CFB409160573D2 VT YVT0801 19970410150032S101702A063075AYVT0801
NY 15E382E2015202DC VT YVT0801 19970814154725S101702M000820AYVT0801
NY 15EC79A71C8C574C VT YVT0801 19971010164615S101702A067424AYVT0801
NY 15F519F008403907 VT YVT0801 19971204140206S101702A068758AYVT0801
NY 160019EC1FF75B36 VT YVT0801 19980212134230S101702A070371AYVT0801
NY 161730AB0956819E VT YVT0801 19980709133842S101702M000924AYVT0801
NY 168C73FD190C1934 VT YVT0801 A15S000580
NY 151F57E409DC6F5E VT YVT0801 E
NY 151167F2082DF054 VT YVT0802
NY 151B49D71BD9A654 VT YVT0802 19940217154748S101702A031635A
NY 151F3DA71F6D9FE8 VT YVT0802 19940314192641S101702A032472AYVT0802
NY 151F85EA067B94C8 VT YVT0802 19940316143210S101702A032544AYVT0802
NY 151F8D3303E875A6 VT YVT0802 19940316185332S101702A032544AYVT0802
NY 1521B8D90840D54A VT YVT0802 19940330142123S101702A032942AYVT0802
NY 1527650F0B9AB1A8 VT YVT0802 19940505163025S101702A034051AYVT0802
NY 153263100A2FA6B6 VT YVT0802 19940714151204S101702A035710AYVT0802
NY 153268021EC80C7A VT YVT0802 19940714180857S101702A035710AYVT0802
NY 1543D0BE00973E80 VT YVT0802 19941102124425S101702A038864AYVT0802
NY 154DE3370FA864F2 VT YVT0802 19950105144959S101702A041005AYVT0802
NY 1564FD800EC77C0C VT YVT0802 19950601S101702M000585AYVT0802
NY 156A7E0F11983E0C VT YVT0802 19950706S101702A045888AYVT0802
NY 158A427E078D09DA VT YVT0802 19960124S101702A051425AYVT0802
NY 158AF8AF1A839964 VT YVT0802 19960129S101702Z231662AYVT0802
NY 158BAECE07873230 VT YVT0802 19960202S101702A051729AYVT0802
NY 158C4F7A0521DBAE VT YVT0802 19960206S101702A051780AYVT0802
NY 159BD8E91276E922 VT YVT0802 19960515160337S101702M000686AYVT0802
NY 15AD9A421B9BB98E VT YVT0802 19960905152955S101702M000711AYVT0802
NY 15CFB34E05C0222A VT YVT0802 19970410142924S101702A063075AYVT0802
NY 15CFB419075426C8 VT YVT0802 19970410150032S101702A063075AYVT0802
NY 15E382DD11F6E216 VT YVT0802 19970814154725S101702M000820AYVT0802
NY 160019D30AB33018 VT YVT0802 19980212134231S101702A070371AYVT0802
NY 161730801C26F4E8 VT YVT0802 19980709133842S101702M000924AYVT0802
NY 168C74290A93E9A8 VT YVT0802 A15S000580
NY 151F57F0019B2BC6 VT YVT0802 E
NY 151167F301E63D04 VT YVT0803
NY 151B49D9182F3226 VT YVT0803 19940217154750S101702A031635A
NY 151F3DB9078B116C VT YVT0803 19940314192642S101702A032472AYVT0803
NY 151F85EC07C69C6A VT YVT0803 19940316143212S101702A032544AYVT0803
NY 151F8D3318B1099A VT YVT0803 19940316185334S101702A032544AYVT0803
NY 1521B8EE06BAE01A VT YVT0803 19940330142140S101702A032942AYVT0803
NY 15276558190C8AC0 VT YVT0803 19940505163031S101702A034051AYVT0803
NY 1532631308016C84 VT YVT0803 19940714151205S101702A035710AYVT0803
NY 153268041C688CBA VT YVT0803 19940714180857S101702A035710AYVT0803
NY 1534726C1D44C7F6 VT YVT0803 19940727175006S101702A036169AYVT0803
NY 15390002019E845E VT YVT0803 19940825170749S101702A036783AYVT0803
NY 154DE32B1E02D892 VT YVT0803 19950105144947S101702A041005AYVT0803
NY 1564FD80149CD4F6 VT YVT0803 19950601S101702M000585AYVT0803
NY 156A7E100EC37A26 VT YVT0803 19950706S101702A045888AYVT0803
NY 159BD8EA001206AC VT YVT0803 19960515160337S101702M000686AYVT0803
NY 159CCA6F18108A06 VT YVT0803 19960521160920S101702A054328AYVT0803
NY 15A06B350583AD68 VT YVT0803 19960613181234S101702A054978AYVT0803
NY 15AD9A4E022D9AA4 VT YVT0803 19960905152956S101702M000711AYVT0803
NY 15CFB35107B67EC4 VT YVT0803 19970410142925S101702A063075AYVT0803
NY 15CFB4170ECF7042 VT YVT0803 19970410150033S101702A063075AYVT0803
NY 15E382C0163F7B1C VT YVT0803 19970814154726S101702M000820AYVT0803
NY 160019E512F6EE4E VT YVT0803 19980212134231S101702A070371AYVT0803
NY 161730800070367C VT YVT0803 19980709133843S101702M000924AYVT0803
NY 168C74410EEC7819 VT YVT0803 A15S000580
NY 151167F3182FEEBC VT YVT0804
NY 151B49D818EF38C0 VT YVT0804 19940217154640S101702A031635A
NY 151F3DB91576AAE0 VT YVT0804 19940314192643S101702A032472AYVT0804
NY 151F8D340CA235C4 VT YVT0804 19940316185336S101702A032544AYVT0804
NY 1521B8F21B501AFC VT YVT0804 19940330142205S101702A032942AYVT0804
NY 152765590A4BDFBE VT YVT0804 19940505162908S101702A034051AYVT0804
NY 153263170E2CCDDE VT YVT0804 19940714151207S101702A035710AYVT0804
NY 1532680506F7152A VT YVT0804 19940714180858S101702A035710AYVT0804
NY 1543D0BF068D70FA VT YVT0804 19941102124426S101702A038864AYVT0804
NY 15497C480CACA22C VT YVT0804 19941208143556S101702A040233AYVT0804
NY 15497D7B1C930560 VT YVT0804 19941208151812S101702A040233AYVT0804
NY 154DE3311099A1EA VT YVT0804 19950105144951S101702A041005AYVT0804
NY 1564FD801BF9B964 VT YVT0804 19950601S101702M000585AYVT0804
NY 1566161917C58550 VT YVT0804 19950608S101702A045087AYVT0804
NY 156A7E101B77CB20 VT YVT0804 19950706S101702A045888AYVT0804
NY 156B95EA08A027C2 VT YVT0804 19950713S101702A046105AYVT0804
NY 158A427F02468704 VT YVT0804 19960124S101702A051425AYVT0804
NY 158AF8A9170F1906 VT YVT0804 19960129S101702Z231662AYVT0804
NY 158BAED00D3E36B8 VT YVT0804 19960202S101702A051729AYVT0804
NY 158C4F7803623030 VT YVT0804 19960206S101702A051780AYVT0804
NY 159216F7145D1A62 VT YVT0804 19960314140008S101702A052610AYVT0804
NY 159BD8E91A76C142 VT YVT0804 19960515160338S101702M000686AYVT0804
NY 159CCA7007A01F1A VT YVT0804 19960521160920S101702A054328AYVT0804
NY 15A06B38171D1E2E VT YVT0804 19960613181241S101702A054978AYVT0804
NY 15AD9A4E15D9DE38 VT YVT0804 19960905152957S101702M000711AYVT0804
NY 15CA63A517886942 VT YVT0804 19970307192828S101702A062025AYVT0804
NY 15CB7D4919482A6A VT YVT0804 19970314192907S101702A062471AYVT0804
NY 15CFB35318BC762C VT YVT0804 19970410142926S101702A063075AYVT0804
NY 15CFB41B0821A076 VT YVT0804 19970410150033S101702A063075AYVT0804
NY 15D973741C1B58BF VT YVT0804 19970611153558S101702A064611AYVT0804
NY 15E382C10B37C3C8 VT YVT0804 19970814154726S101702M000820AYVT0804
NY 15F519F0033FBB0B VT YVT0804 19971204140207S101702A068758AYVT0804
NY 160019EE11A19D82 VT YVT0804 19980212134232S101702A070371AYVT0804
NY 161730940E2E180A VT YVT0804 19980709133843S101702M000924AYVT0804
NY 168C745A0BB457AC VT YVT0804 A15S000580
NY 151F580D128061FE VT YVT0804 E
NY 151167F30FFD6E5E VT YVT0805
NY 151B49D70F130978 VT YVT0805 19940217154651S101702A031635A
NY 151F3DB9010A3E12 VT YVT0805 19940314192644S101702A032472AYVT0805
NY 151F8D34014479DA VT YVT0805 19940316185339S101702A032544AYVT0805
NY 1521B8E8085CBB4E VT YVT0805 19940330142220S101702A032942AYVT0805
NY 1527650D1A1AF54E VT YVT0805 19940505162933S101702A034051AYVT0805
NY 1532631609CD1058 VT YVT0805 19940714151209S101702A035710AYVT0805
NY 1532680406319AE8 VT YVT0805 19940714180859S101702A035710AYVT0805
NY 1543D0BF16B2C2C8 VT YVT0805 19941102124427S101702A038864AYVT0805
NY 154515E6087794AC VT YVT0805 19941110143933S101702A039292AYVT0805
NY 15497C4808095D7A VT YVT0805 19941208143559S101702A040233AYVT0805
NY 15497D76024B2922 VT YVT0805 19941208151813S101702A040233AYVT0805
NY 154DE33203B18D42 VT YVT0805 19950105144952S101702A041005AYVT0805
NY 1564FD4E16C9FEEA VT YVT0805 19950601S101702M000585AYVT0805
NY 1566161912B6D9AC VT YVT0805 19950608S101702A045087AYVT0805
NY 156A7E1613FB30BC VT YVT0805 19950706S101702A045888AYVT0805
NY 156B95EA0A9D9796 VT YVT0805 19950713S101702A046105AYVT0805
NY 158A427F0425C056 VT YVT0805 19960124S101702A051425AYVT0805
NY 158AF8A915D62672 VT YVT0805 19960129S101702Z231662AYVT0805
NY 158BAECA115701BA VT YVT0805 19960202S101702A051729AYVT0805
NY 158C4F7A1D4FE978 VT YVT0805 19960206S101702A051780AYVT0805
NY 159BD8E91A6DD730 VT YVT0805 19960515160338S101702M000686AYVT0805
NY 159CCA700B855802 VT YVT0805 19960521160921S101702A054328AYVT0805
NY 15A06B39098F74D4 VT YVT0805 19960613181244S101702A054978AYVT0805
NY 15AD9A4E0209F674 VT YVT0805 19960905152957S101702M000711AYVT0805
NY 15C3990C1525D7B0 VT YVT0805 19970123142208S101702A061139AYVT0805
NY 15CB7D42171BD266 VT YVT0805 19970314192907S101702A062471AYVT0805
NY 15CF2E241C539C4C VT YVT0805 19970407070836S101702Z304746AYVT0805
NY 15CFB3531C685870 VT YVT0805 19970410142928S101702A063075AYVT0805
NY 15CFB41B08548766 VT YVT0805 19970410150034S101702A063075AYVT0805
NY 15E382C10095F005 VT YVT0805 19970814154727S101702M000820AYVT0805
NY 15EC79A71BD9AF62 VT YVT0805 19971010164616S101702A067424AYVT0805
NY 15F519EE12129F24 VT YVT0805 19971204140208S101702A068758AYVT0805
NY 160019D61D647340 VT YVT0805 19980212134233S101702A070371AYVT0805
NY 168C746B1B41CD4F VT YVT0805 A15S000580
NY 151167F115294F90 VT YVT0806
NY 151B49D402FBBAD0 VT YVT0806 19940217154655S101702A031635A
NY 151F3DA81FA2E514 VT YVT0806 19940314192645S101702A032472AYVT0806
NY 151F8D330B00D164 VT YVT0806 19940316185341S101702A032544AYVT0806
NY 1521B8F21338139A VT YVT0806 19940330142237S101702A032942AYVT0806
NY 1527650A13CEF8D8 VT YVT0806 19940505162943S101702A034051AYVT0806
NY 15326314054EDF8E VT YVT0806 19940714151210S101702A035710AYVT0806
NY 1532680113147860 VT YVT0806 19940714180900S101702A035710AYVT0806
NY 1543D0BA08B15AB0 VT YVT0806 19941102124427S101702A038864AYVT0806
NY 154DE33016B22D14 VT YVT0806 19950105144954S101702A041005AYVT0806
NY 1564FD4E0732905E VT YVT0806 19950601S101702M000585AYVT0806
NY 156A7E1417B25068 VT YVT0806 19950706S101702A045888AYVT0806
NY 158A427E0779BADE VT YVT0806 19960124S101702A051425AYVT0806
NY 158AF8A90424481C VT YVT0806 19960129S101702Z231662AYVT0806
NY 158BAEC900A69648 VT YVT0806 19960202S101702A051729AYVT0806
NY 158C4F78162BA110 VT YVT0806 19960206S101702A051780AYVT0806
NY 159BD8E90AEE3370 VT YVT0806 19960515160339S101702M000686AYVT0806
NY 15AD9A4E19CABBC4 VT YVT0806 19960905152958S101702M000711AYVT0806
NY 15CFB348092330CA VT YVT0806 19970410142929S101702A063075AYVT0806
NY 15CFB41914658DD2 VT YVT0806 19970410150034S101702A063075AYVT0806
NY 15E382BB085D17A0 VT YVT0806 19970814154727S101702M000820AYVT0806
NY 160019D31B3E770A VT YVT0806 19980212134234S101702A070371AYVT0806
NY 1617308C1BE4ECD0 VT YVT0806 19980709133843S101702M000924AYVT0806
NY 168C747A0EA27E53 VT YVT0806 A15S000580
NY 151F5836043B2772 VT YVT0806 E
NY 151167F21394F46C VT YVT0809
NY 151B49C0160501DC VT YVT0809 19940217154709S101702A031635A
NY 151F3DB212A2172C VT YVT0809 19940314192648S101702A032472AYVT0809
NY 151F8D340B69B194 VT YVT0809 19940316185345S101702A032544AYVT0809
NY 15326304167ADF4A VT YVT0809 19940714151212S101702A035710AYVT0809
NY 1532680317030674 VT YVT0809 19940714180901S101702A035710AYVT0809
NY 1543D0BD00911A6C VT YVT0809 19941102124430S101702A038864AYVT0809
NY 1564FD4E1A2F31C8 VT YVT0809 19950601S101702M000585AYVT0809
NY 156A7E16035F0B54 VT YVT0809 19950706S101702A045888AYVT0809
NY 158A427906FEB542 VT YVT0809 19960124S101702A051425AYVT0809
NY 158AF8A90968A7F4 VT YVT0809 19960129S101702Z231662AYVT0809
NY 158BAEC9115B6D92 VT YVT0809 19960202S101702A051729AYVT0809
NY 158C4F7818D4A974 VT YVT0809 19960206S101702A051780AYVT0809
NY 159BD8E91EF73524 VT YVT0809 19960515160340S101702M000686AYVT0809
NY 15AB64B80FA255C4 VT YVT0809 19960822140730S101702A056608AYVT0809
NY 15BC8C291817E13A VT YVT0809 19961209174336S101702A059465AYVT0809
NY 15CFB351077266DE VT YVT0809 19970410142932S101702A063075AYVT0809
NY 15CFB4180B65C8E8 VT YVT0809 19970410150035S101702A063075AYVT0809
NY 160019D40DB6C90E VT YVT0809 19980212134236S101702A070371AYVT0809
NY 168C748E1E285220 VT YVT0809 A15S000580
NY 151F584D0DC93DDA VT YVT0809 E
NY 1608DFED0F9383F0 VT YVTAFS 19980409113931S101702Z369138AYVTAFS
NY 160A02D8132033DA VT YVTAFS 19980416170514S101702M000874AYVTAFS
NY 161730AB10D4FA25 VT YVTAFS 19980709134007S101702M000924AYVTAFS
NY 176CB0510609DF4D VT YVTBEDR A14S00248553A57407
NY 17C8CE2E12FE63E1 VT YVTBRVI VTX000001856AA20FB
NY 17C8CE300E0C8C95 VT YVTCSFP VTX000001856AA210A
NY 1788AB2E0FBC9B9D VT YVTDTAT A14S00262754901C5B
NY 17F315F202926D77 VT YVTDTAT EBZV000010580CDB55
NY 17C82ABA1E5F7FD6 VT YVTDTEX VTX000001856A4C5D9
NY 17D2DFA4035458D7 VT YVTEINS EBZV00000756FEA457
NY 17E083D01B5701C6 VT YVTVALU EBZV000009577112CD
NY 17C8CE330A2F30E4 VT YVTVWAH VTX000001856AA2122
NY 182EABED0294473C VV YVV3EIP VDPS0001175A00A470MVS
NY 183B104111800348 VV YVV3EIP VDPS0001185A68985A
NY 183B10421CCC957F VV YVV3EIP VDPS0001185A68985AMVS
NY 182F9C221FDE5EE7 VV YVV3EIP VDPS0001565A0883F9
NY 182F9C231D54A234 VV YVV3EIP VDPS0001565A0883F9MVS
NY 1796F92B10E7D57E VV YVV5070 VDPS00001455081B63
NY 1839C8CC1C6F775C VV YVV5070 VDPS0001185A5DDB5D
NY 1839C8CE0226FFCB VV YVV5070 VDPS0001185A5DDB5DMVS
NY 17D38554150F85FB VV YVVZZ03 VDPS00007357041232
NY 180A5AD40949C332 VV YVVZZ03 VDPS00010858CFFF3B
NY 1818F6A70CA1DDDA VV YVVZZ03 VDPS000114594A9918
NY 1818F6A91C005510 VV YVVZZ03 VDPS000114594A9918MVS
NY 17DFC54603338C00 VV YVVZZ04 VDPS000077576AD450
NY 17EE13FD144D9F14 VV YVVZZ04 VDPS00008557E2D980
NY 17FC0CB31216ACA1 VV YVVZZ04 VDPS0001035857FF0A
NY 18148BF51CE92690 VV YVVZZ04 VDPS00011259258C31
NY 1818D380154526FD VV YVVZZ04 VDPS0001145949721BMVS
NY 1828086F1EEB6F1D VV YVVZZ04 VDPS00011759C9027DMVS
NY 1839CB7D1D1371DD VV YVVZZ04 VDPS0001185A5DF2D6
NY 1839CB7F087E5FFE VV YVVZZ04 VDPS0001185A5DF2D6MVS
NY 17E4C69C0F263440 VV YVVZZ05 VDPS0000775794D107
NY 180AC4871B3BFD99 VV YVVZZ05 VDPS00010858D375E2
NY 1818A62301D79BDE VV YVVZZ05 VDPS0001145947F5B1
NY 1818A626117BCA76 VV YVVZZ05 VDPS0001145947F5B1MVS
NY 182945060695701C VV YVVZZ05 VDPS00011759D36248
NY 1829450A0E4AEA87 VV YVVZZ05 VDPS00011759D36248MVS
NY 1817FCDE0AFE5034 VV YVVZZ06 VDPS000114594269AF
NY 1817FCE01221E055 VV YVVZZ06 VDPS000114594269AFMVS
NY 18323C010807FF93 VV YVVZZ06 VDPS0001185A1E8803
NY 18323C020C81B3B0 VV YVVZZ06 VDPS0001185A1E8803MVS
NY 182924371E28547F VV YVVZZ07 VDPS00011759D24F27
NY 1829243A01ED2F4D VV YVVZZ07 VDPS00011759D24F27MVS
NY 1823AC1F15169D58 VV YVVZZ07 VDPS00013759A46E34MVS
NY 17BB227116D89518 VV YVVZZ08 VDPS00005256377304
NY 1817FCE215EA8AB4 VV YVVZZ08 VDPS000114594269CD
NY 1817FCE51F8A9A79 VV YVVZZ08 VDPS000114594269CDMVS
NY 182C6A8614BFEC15 VV YVVZZ08 VDPS00011759EDC6B6
NY 182C6A8813BC12B2 VV YVVZZ08 VDPS00011759EDC6B6MVS
NY 1804111808DEE720 VV YVVZZ09 VDPS000099589B3FC8
NY 1817FD1312680083 VV YVVZZ09 VDPS00011459426A6C
NY 1817FD1516CB6239 VV YVVZZ09 VDPS00011459426A6CMVS
NY 1828FF3B18AC58B4 VV YVVZZ09 VDPS00011759D118C6MVS
NY 18323C0D04B441B6 VV YVVZZ09 VDPS0001185A1E8862
NY 18323C0E14E65B8A VV YVVZZ09 VDPS0001185A1E8862MVS
NY 17D3A4F316907351 VV YVVZZ10 VDPS00007357051B7A
NY 180417D413BD2DB0 VV YVVZZ10 VDPS000099589B784A
NY 1819E37A0A3D4D73 VV YVVZZ10 VDPS00011459525BC8
NY 1819E37C0B1E1974 VV YVVZZ10 VDPS00011459525BC8MVS
NY 182B298A17F6EC10 VV YVVZZ10 VDPS00011759E342BE
NY 182B298C1F4B65C6 VV YVVZZ10 VDPS00011759E342BEMVS
NY 17C8C6DB1A523C6E VV YVVZZ11 VDPS00006756A9E387
NY 1800E6191D0FC84E VV YVVZZ11 VDPS0000995880ACAB
NY 1817FCF21358B1E2 VV YVVZZ11 VDPS00011459426A05MVS
NY 182C6A770DCFCC74 VV YVVZZ11 VDPS00011759EDC6C1MVS
NY 1839CAAC0843B125 VV YVVZZ11 VDPS0001185A5DED1E
NY 1839CAAE0C1524D6 VV YVVZZ11 VDPS0001185A5DED1EMVS
NY 17D1A45902D2750D VV YVVZZ12 VDPS00007356F4415D
NY 1804122B1E178FF9 VV YVVZZ12 VDPS000099589B48CE
NY 17FE94BA1332FF42 VV YVVZZ12 VDPS000103586D3B12
NY 1817FCF00ECB7A76 VV YVVZZ12 VDPS00011459426A35
NY 1817FCF509E5D4C0 VV YVVZZ12 VDPS00011459426A35MVS
NY 1828FA5818A8DE7F VV YVVZZ12 VDPS00011759D0EFDA
NY 1828FA5B00278D1F VV YVVZZ12 VDPS00011759D0EFDAMVS
NY 1839C90B0C5E2AEA VV YVVZZ12 VDPS0001185A5DDF82
NY 1839C90C1AE2433E VV YVVZZ12 VDPS0001185A5DDF82MVS
NY 17B7F61B123590DC VV YVVZZ13 VDPS000052561CE2B1
NY 1801D4770FA83FD7 VV YVVZZ13 VDPS00009958887C3E
NY 181AA84015BCA89A VV YVVZZ13 VDPS0001145958CE5FMVS
NY 182BA678018048FC VV YVVZZ13 VDPS00011759E75A9CMVS
NY 18353AF4161FD149 VV YVVZZ13 VDPS0001185A37A9AA
NY 18353AF51E4C1CA1 VV YVVZZ13 VDPS0001185A37A9AAMVS
NY 17D1487C040559CA VV YVVZZ14 VDPS00007356F13EBD
NY 1818A62618BBB2BD VV YVVZZ14 VDPS0001145947F5C7
NY 1818A6281F8089F6 VV YVVZZ14 VDPS0001145947F5C7MVS
NY 1829251F0FF55B60 VV YVVZZ14 VDPS00011759D2568E
NY 1829252E15CB1F29 VV YVVZZ14 VDPS00011759D2568EMVS
NY 18323C10058831A0 VV YVVZZ14 VDPS0001185A1E887D
NY 17B7F61D13F75756 VV YVVZZ15 VDPS000052561CE2B7
NY 17C8C82308425FAE VV YVVZZ15 VDPS00006756A9EE3E
NY 1800E622084051D1 VV YVVZZ15 VDPS0000995880ACF1
NY 1817FCEE177F3F8F VV YVVZZ15 VDPS00011459426A38
NY 1817FCF5030407FC VV YVVZZ15 VDPS00011459426A38MVS
NY 182C6A771B57340A VV YVVZZ15 VDPS00011759EDC6CA
NY 182C6A7E07B7D479 VV YVVZZ15 VDPS00011759EDC6CAMVS
NY 17D2BBD307B51A5B VV YVVZZ16 VDPS00007356FD77D1
NY 1817FD05055D36EA VV YVVZZ16 VDPS00011459426A5D
NY 1817FD0708B5F769 VV YVVZZ16 VDPS00011459426A5DMVS
NY 18294E2418CFC279 VV YVVZZ16 VDPS00011759D3AED0
NY 18294E2801D1659D VV YVVZZ16 VDPS00011759D3AED0MVS
NY 17DF96EA02265E28 VV YVVZZ17 VDPS00007757694F83
NY 1818A62909607400 VV YVVZZ17 VDPS0001145947F5E0
NY 1818A62B17845F25 VV YVVZZ17 VDPS0001145947F5E0MVS
NY 18291E760E5D6408 VV YVVZZ17 VDPS00011759D21EC1MVS
NY 1839CAC20E1B3976 VV YVVZZ17 VDPS0001185A5DEDE3
NY 1839CAC316B685F1 VV YVVZZ17 VDPS0001185A5DEDE3MVS
NY 17DFC3560F52B3AB VV YVVZZ18 VDPS000077576AC41A
NY 1800E6D21E2DC7C2 VV YVVZZ18 VDPS0000995880B2BF
NY 1818A62E01FEDFEC VV YVVZZ18 VDPS0001145947F613
NY 1818A6301FB4922E VV YVVZZ18 VDPS0001145947F613MVS
NY 182EC58813EF1B88 VV YVVZZ18 VDPS0001175A017B9CMVS
NY 18323C110DA9D908 VV YVVZZ18 VDPS0001185A1E8884
NY 18323C130B079199 VV YVVZZ18 VDPS0001185A1E8884MVS
NY 17E05DCA16EB4AB6 VV YVVZZ19 VDPS000077576FD3D1
NY 17F6B956103BB5E8 VV YVVZZ19 VDPS000090582B5250
NY 180EC58D00E8AED7 VV YVVZZ19 VDPS00010858F51A6F
NY 181B878B0D9D5495 VV YVVZZ19 VDPS00011459600648MVS
NY 182A3D771779844D VV YVVZZ19 VDPS00011759DB8665
NY 182A3D7A0C27EFBA VV YVVZZ19 VDPS00011759DB8665MVS
NY 18323C1210F8CCB0 VV YVVZZ19 VDPS0001185A1E888B
NY 17B6E36E00B67432 VV YVVZZ1R VDPS0000525613E28D
NY 18031C751F3F8679 VV YVVZZ1R VDPS00009958933B9C
NY 1817FCF60EFC4EE7 VV YVVZZ1R VDPS00011459426A3E
NY 1817FCF81A6CA2F5 VV YVVZZ1R VDPS00011459426A3EMVS
NY 17E953AD064B4002 VV YVVZZ20 VDPS00008757BAFE47
NY 17F131F207DBDFD6 VV YVVZZ20 VDPS00009057FCFF37
NY 181B4BB20EEAEC4B VV YVVZZ20 VDPS000114595E2936MVS
NY 182EC5960FB65A62 VV YVVZZ20 VDPS0001175A017C26
NY 182EC59904775180 VV YVVZZ20 VDPS0001175A017C26MVS
NY 17EC00610CDDA6EE VV YVVZZ21 VDPS00008557D16DF0
NY 1817FCFB138C4181 VV YVVZZ21 VDPS00011459426A44
NY 1817FD02114AA653 VV YVVZZ21 VDPS00011459426A44MVS
NY 182922F213EEF0A2 VV YVVZZ21 VDPS00011759D24460MVS
NY 18323C120E6EB3AA VV YVVZZ21 VDPS0001185A1E8890
NY 18323C151FBF017A VV YVVZZ21 VDPS0001185A1E8890MVS
NY 17EBB3FA00747DE9 VV YVVZZ22 VDPS00008757CEED15
NY 1818A65309EBAA05 VV YVVZZ22 VDPS0001145947F743MVS
NY 182C6A7D16D97808 VV YVVZZ22 VDPS00011759EDC6D8
NY 182C6A820E8DE9F2 VV YVVZZ22 VDPS00011759EDC6D8MVS
NY 17EFCEC30F2CA722 VV YVVZZ23 VDPS00008557F15BB7
NY 1817FD1A001F3682 VV YVVZZ23 VDPS00011459426A7F
NY 1817FD1C0428F0E3 VV YVVZZ23 VDPS00011459426A7FMVS
NY 182C6A811F6A52CA VV YVVZZ23 VDPS00011759EDC6E4
NY 182C6A840C1ABFD6 VV YVVZZ23 VDPS00011759EDC6E4MVS
NY 17EE08C2069C995B VV YVVZZ24 VDPS00008557E27B46
NY 1817FD131A8F8416 VV YVVZZ24 VDPS00011459426A82
NY 1817FD1512946DF7 VV YVVZZ24 VDPS00011459426A82MVS
NY 182C6A84125D1BD8 VV YVVZZ24 VDPS00011759EDC6ED
NY 182C6A8708C29E3C VV YVVZZ24 VDPS00011759EDC6EDMVS
NY 18009915172ACA4B VV YVVZZ25 VDPS000099587E2698
NY 1818A639100255AA VV YVVZZ25 VDPS0001145947F674
NN 1818A63C01AC1A78 VV YVVZZ25 VDPS0001145947F674MVS
NY 182923431C5EAA85 VV YVVZZ25 VDPS00011759D246F2MVS
NY 18323C121E96C0EC VV YVVZZ25 VDPS0001185A1E8896
NY 18323C1504194608 VV YVVZZ25 VDPS0001185A1E8896MVS
NY 180E18DB12A73DBD VV YVVZZ27 VDPS00010858EF71CF
NY 18187F291509B956 VV YVVZZ27 VDPS0001145946AEC8
NY 18187F2C038FC493 VV YVVZZ27 VDPS0001145946AEC8MVS
NY 182A3D971C7EE783 VV YVVZZ27 VDPS00011759DB8776
NY 182A3D9A17BAA45A VV YVVZZ27 VDPS00011759DB8776MVS
NY 18323C1500910915 VV YVVZZ27 VDPS0001185A1E889E
NY 180EE0950EB83E0A VV YVVZZ28 VDPS00010858F5FD2B
NY 18146AED0C20DBC8 VV YVVZZ28 VDPS00011259247724
NY 181E294B005D5567 VV YVVZZ28 VDPS00011459763336MVS
NY 182C6A8B06A2819C VV YVVZZ28 VDPS00011759EDC6FA
NY 182C6A8E11634856 VV YVVZZ28 VDPS00011759EDC6FAMVS
NY 18323C150D65093D VV YVVZZ28 VDPS0001185A1E88A3
NY 18102799142FE518 VV YVVZZ29 VDPS0001085900B473
NY 1818A65311203A6D VV YVVZZ29 VDPS0001145947F759
NY 1818A6550FC31CFA VV YVVZZ29 VDPS0001145947F759MVS
NY 182C6A8E10BC8DCE VV YVVZZ29 VDPS00011759EDC703
NY 182C6A9218329C04 VV YVVZZ29 VDPS00011759EDC703MVS
NY 18031C780A9949A5 VV YVVZZ2R VDPS00009958933BBC
NY 1818A5E90E58899E VV YVVZZ2R VDPS0001145947F3D5
NY 1818A5EB0F577762 VV YVVZZ2R VDPS0001145947F3D5MVS
NY 1827DFD71198F6BD VV YVVZZ2R VDPS00011759C7AE13
NY 1827DFD9138D6180 VV YVVZZ2R VDPS00011759C7AE13MVS
NY 1817FCD6016D695B VV YVVZZ30 VDPS00011459426994
NY 1817FCD7198A6BA0 VV YVVZZ30 VDPS00011459426994MVS
NY 182C6A921624F411 VV YVVZZ30 VDPS00011759EDC710
NY 182C6A950192651A VV YVVZZ30 VDPS00011759EDC710MVS
NY 182927541720E419 VV YVVZZ31 VDPS00011759D26946
NY 18292756106C9A8A VV YVVZZ31 VDPS00011759D26946MVS
NY 1828F5031162B44D VV YVVZZ32 VDPS00011759D0C30EMVS
NY 18323C16151CEB4D VV YVVZZ32 VDPS0001185A1E88B5
NY 18323C1908597B86 VV YVVZZ32 VDPS0001185A1E88B5MVS
NY 182E092916DB03BC VV YVVZZ33 VDPS00011759FB4F83
NY 182E092B1156CB86 VV YVVZZ33 VDPS00011759FB4F83MVS
NY 183C03241ADF9596 VV YVVZZ33 VDPS0001685A708DD5MVS
NY 183E36361650E573 VV YVVZZ33 VDPS0001745A83012D
NY 183E363E059B0AFB VV YVVZZ33 VDPS0001745A83012DMVS
NY 17A6132F1DC5AAA4 VV YVVZZ3R VDPS0000295586D7EF
NY 18031C7C0C9537CE VV YVVZZ3R VDPS00009958933BE0
NY 1818A5FB15580267 VV YVVZZ3R VDPS0001145947F471
NY 1818A5FD0CD7D3BC VV YVVZZ3R VDPS0001145947F471MVS
NY 1839C8CA00263CDE VV YVVZZ3R VDPS0001185A5DDB06
NY 1839C8CB00488F3B VV YVVZZ3R VDPS0001185A5DDB06MVS
NY 1802F9F208BF7192 VV YVVZZAR VDPS00009958921A13
NY 1817FD091EFE99EF VV YVVZZAR VDPS00011459426A66
NY 1817FD0D0716185C VV YVVZZAR VDPS00011459426A66MVS
NY 1818A63D016125C2 VV YVVZZFR VDPS0001145947F698
NY 1818A63E1CC30975 VV YVVZZFR VDPS0001145947F698MVS
NY 1839C8C705CF8A34 VV YVVZZFR VDPS0001185A5DDA78
NY 1839C8C80A3F1F11 VV YVVZZFR VDPS0001185A5DDA78MVS
NY 17BE97F30EA54A8D VV YVVZZGR VDPS00006256547738
NY 18031C6D0AA55941 VV YVVZZGR VDPS00009958933B61
NY 1818A63F03197821 VV YVVZZGR VDPS0001145947F6A7
NY 1818A640116B32F2 VV YVVZZGR VDPS0001145947F6A7MVS
NY 17EB5DF512B23666 VV YVVZZJR VDPS00008557CC1B89
NY 1817FD050487DB67 VV YVVZZJR VDPS00011459426A61
NY 1817FD0708A55FA3 VV YVVZZJR VDPS00011459426A61MVS
NY 180095250E1F1955 VV YVVZZNR VDPS000099587E0594
NY 1818A64D19C9D36B VV YVVZZNR VDPS0001145947F723
NY 1818A64F10B60BDD VV YVVZZNR VDPS0001145947F723MVS
NY 180EC12E1AF0FF45 VV YVVZZQR VDPS00010858F4F5CB
NY 1819BDEF0D59DC76 VV YVVZZQR VDPS000114595120D5
NY 1819BDF10C9721EC VV YVVZZQR VDPS000114595120D5MVS
NY 179BB5890764E3F1 VW YVWB641 WSTS000003552FE2D3
NY 18191FF417ACD960 VW YVWB641 WSTS000055594BF359
NY 18191FF604E3B4BC VW YVWB641 WSTS000055594BF359MVS
NY 1718A64005AF56B3 WA WK9000 A06M012041
NN 16E8FBC10538DE3D WA YWAPOS A06M012041
NN 16E8FBC50FF62CAD WA YWAPOSA A06M012041
NY 14E32D111A7F9F68 WB WB0030
NY 17F3B7450ED54313 WB WB0060 TOFF000076
NY 18063C33167D4E6B WB WB0060 TOFF000088
NY 18104EDB03BFF635 WB WB0060 TOFF000099
NY 1802C38F09A9B866 WB WB0060 TOFF000100
NY 181DF5860F63DFDE WB WB0060 TOFF000109
NY 182CE96E1855E81B WB WB0060 TOFF000112
NY 183B0AFE127AF46F WB WB0060 TOFF000122
NY 17E655B20CE8B678 WB WB0330 WS8B000316
NY 17E657D9016B243C WB WB0510 WSTS000039
NY 17EFF3991A1A6CE1 WB WB0510 WSTS000043
NY 18031B3505505F40 WB WB0510 WSTS000046
NY 181C3D160E9B0534 WB WB0510 WSTS000055
NY 183AC1721966537F WB WB0510 WSTS000061
NY 1815CC451E00E03D WB WB0520 WS8B000441
NY 1819E99804485691 WB WB0520 WS8B000468
NY 17E657DA121C737D WB WB0520 WSTS000039
NY 17EFF39B034AD573 WB WB0520 WSTS000043
NY 18031B3518A70288 WB WB0520 WSTS000046
NY 1800BEE91566A527 WB WB0520 WSTS000050
NY 18104EC01CD11CB0 WB WB0520 WSTS000051
NY 181C3D1317362D11 WB WB0520 WSTS000055
NY 183AC1941A2DA759 WB WB0520 WSTS000061
NY 1815CC66082A96BE WB WB0530 WS8B000441
NY 1819E998093144B4 WB WB0530 WS8B000468
NY 17E657DC019767AE WB WB0530 WSTS000039
NY 17F293590D84C765 WB WB0530 WSTS000043
NY 18031B390AF22C2A WB WB0530 WSTS000046
NY 1800BEDE0F38D1D8 WB WB0530 WSTS000050
NY 18104EC006E59145 WB WB0530 WSTS000051
NY 181E45FB0A593D49 WB WB0530 WSTS000055
NY 1829969C1B6CCD53 WB WB0530 WSTS000057
NY 183AC19E03CF5557 WB WB0530 WSTS000061
NY 1819E99606AB2A97 WB WB0550 WS8B000468
NY 17E656280A3A76EF WB WB0550 WSTS000039
NY 17F12D1F04640876 WB WB0550 WSTS000043
NY 1804D65F1A0CFF65 WB WB0550 WSTS000046
NY 18104EB40BCCF03E WB WB0550 WSTS000051
NY 181C3D11076E04F9 WB WB0550 WSTS000055
NY 1815CBF31F43A228 WB WB0550 WSTS000056
NY 183AC16F0BC74831 WB WB0550 WSTS000061
NY 17E657DF0A2107EF WB WB0570 WSTS000039
NY 17EFF38117B0CFA8 WB WB0570 WSTS000043
NY 18031B371D893645 WB WB0570 WSTS000046
NY 181C3D04133DC330 WB WB0570 WSTS000055
NY 183AC1B615F3A398 WB WB0570 WSTS000061
NY 17E657E01EB07746 WB WB0580 WSTS000039
NY 17EFF38E029291BE WB WB0580 WSTS000043
NY 18031B3A00453D27 WB WB0580 WSTS000046
NY 181C3D0212342DC0 WB WB0580 WSTS000055
NY 183AC1751EDECFEA WB WB0580 WSTS000061
NY 17E657E20F6569CE WB WB0600 WSTS000039
NY 17EFF390023C3C28 WB WB0600 WSTS000043
NY 18031B401E57AFB5 WB WB0600 WSTS000046
NY 181C3D0102B7E31B WB WB0600 WSTS000055
NY 18166D1E1A447645 WB WB0600 WSTS000056
NY 183AC1CE097EA2E8 WB WB0600 WSTS000061
NY 17E657E4057139CB WB WB0620 WSTS000039
NY 17EFF3891A70BCFB WB WB0620 WSTS000043
NY 18031B3F1AE4BFBA WB WB0620 WSTS000046
NY 1800BEE20A3CB8F6 WB WB0620 WSTS000050
NY 181C3CFF077AA155 WB WB0620 WSTS000055
NY 183AC1BB0F6B6F4C WB WB0620 WSTS000061
NY 17F42B521E51FFA3 WB WB0630 WS8B000320
NY 1819E99F1E49A95D WB WB0630 WS8B000468
NY 1820EE0F049F6595 WB WB0630 WS8B000479
NY 182508AA10BEBA29 WB WB0630 WS8B000493
NY 182FE88D160B22E0 WB WB0630 WS8B000540
NY 182264E4186BED4A WB WB0630 WS8I000307
NY 17E656290F96D45C WB WB0630 WSTS000039
NY 18063D040A63D155 WB WB0630 WSTS000046
NY 17F65A5217A5D6F2 WB WB0630 WSTS000048
NY 17F65D2C1DFF05BE WB WB0630 WSTS000049
NY 1800BEE017E9CAFE WB WB0630 WSTS000050
NY 18104EB6186FD50D WB WB0630 WSTS000051
NY 182052BA179076D5 WB WB0630 WSTS000055
NY 1815CBEF0E29C722 WB WB0630 WSTS000056
NY 182E81401C8F29AC WB WB0630 WSTS000057
NY 1825A8A2107EFBF3 WB WB0630 WSTS000058
NY 183B0B360E15C7EE WB WB0630 WSTS000061
NY 1833FFF107F249CA WB WB0630 WSTS000062
NY 183DE81C04E37624 WB WB0630 WSTS000069
NY 17E657E515D83022 WB WB0660 WSTS000039
NY 17EFF3891312AA3C WB WB0660 WSTS000043
NY 18031B540F96DB33 WB WB0660 WSTS000046
NY 181C3CFB1AAB51EE WB WB0660 WSTS000055
NY 183AC1C91411C70D WB WB0660 WSTS000061
NY 17F42B4707CCEA19 WB WB0680 WS8B000320
NY 1819E9AB19248670 WB WB0680 WS8B000468
NY 1820EE0A1F86168B WB WB0680 WS8B000479
NY 182508B11E12CC23 WB WB0680 WS8B000493
NY 182FE892026789A6 WB WB0680 WS8B000540
NY 182264E506A2937A WB WB0680 WS8I000307
NY 17E6562A10339C08 WB WB0680 WSTS000039
NY 18063D050822AEDE WB WB0680 WSTS000046
NY 17F65A530F26EE8E WB WB0680 WSTS000048
NY 17F65D2F0C6E175D WB WB0680 WSTS000049
NY 1800BEE01BFB50BC WB WB0680 WSTS000050
NY 18104EB713C20790 WB WB0680 WSTS000051
NY 182052BA0A954E1C WB WB0680 WSTS000055
NY 1815CBD70C3254D1 WB WB0680 WSTS000056
NY 182E811B115E1ED2 WB WB0680 WSTS000057
NY 1825A8AA13CD3568 WB WB0680 WSTS000058
NY 183B0B38156B7F1A WB WB0680 WSTS000061
NY 1833FFF21D120C95 WB WB0680 WSTS000062
NY 183DE81F022DAF51 WB WB0680 WSTS000069
NY 17F9DC5608801777 WB WB0720 MKUR000032
NY 1801B0091FCC5EEB WB WB0720 WS8B000359
NY 17F608D00437DC2D WB WB0720 WS8B000370
NY 17F666A31EC1AF09 WB WB0720 WS8B000373
NY 17F6A5D00822433A WB WB0720 WS8B000374
NY 17F6D8B21540EC6A WB WB0720 WS8B000376
NY 17F7743E0ABC8050 WB WB0720 WS8B000379
NY 17F9FF2F14DA3E72 WB WB0720 WS8B000382
NY 17F81DED08BC564E WB WB0720 WS8B000383
NY 17F7CEAC0ACF3CE1 WB WB0720 WS8B000386
NY 17F931A407386CC9 WB WB0720 WS8B000390
NY 17FB60EE132FF13B WB WB0720 WS8B000400
NY 17FBD84104F5288E WB WB0720 WS8B000401
NY 1811E2AE175B2CC1 WB WB0720 WS8B000411
NY 180398421D1E95AC WB WB0720 WS8B000413
NY 1804D9971A8C728F WB WB0720 WS8B000415
NY 1815CC480293D5DB WB WB0720 WS8B000441
NY 18204E3909DF90A3 WB WB0720 WS8B000443
NY 1819E9A9036D132C WB WB0720 WS8B000468
NY 182E80520C69CC67 WB WB0720 WS8B000471
NY 181A605D1B799562 WB WB0720 WS8B000473
NY 182534A4088C0901 WB WB0720 WS8B000476
NY 182508AB0597AC3B WB WB0720 WS8B000493
NY 1833F78D18A8D0E6 WB WB0720 WS8B000524
NY 182F9C560D102D32 WB WB0720 WS8B000535
NY 182FE88D08916620 WB WB0720 WS8B000540
NY 1830B3B418B55676 WB WB0720 WS8B000548
NY 182264E5128DA89A WB WB0720 WS8I000307
NY 18314CB10D1F93F8 WB WB0820 TOFF000119
NY 183B0B1516CC80C8 WB WB0820 TOFF000122
NY 1819E9A61C26BDA7 WB WB0820 WS8B000468
NY 17B6EFAD008737F5 WB WB0820 WSTS000014
NY 18104EB80EEC82EF WB WB0820 WSTS000051
NY 181C3CF50797A90A WB WB0820 WSTS000055
NY 1815CBDF028ABC14 WB WB0820 WSTS000056
NY 1829966907409084 WB WB0820 WSTS000057
NY 17E657E81ADCDFE4 WB WB0830 WSTS000039
NY 17EFF38805D1430C WB WB0830 WSTS000043
NY 18031B3E19486761 WB WB0830 WSTS000046
NY 1800BEE4191C1B45 WB WB0830 WSTS000050
NY 181C3CD70B255060 WB WB0830 WSTS000055
NY 183AC1AC048CEBF3 WB WB0830 WSTS000061
NY 17F5FC081C4D837F WB WB0840 NOST000271
NY 17F68C4907A38BD7 WB WB0840 NOST000275
NY 17FAC3411D088954 WB WB0840 NOST000288
NY 1819E9B3184BFA20 WB WB0840 WS8B000468
NY 182508BC17AB3FDE WB WB0840 WS8B000493
NY 182FE89C1A89F8B7 WB WB0840 WS8B000540
NY 182264F10BBCCE31 WB WB0840 WS8I000307
NY 17E6562C1B46E4CD WB WB0840 WSTS000039
NY 18063D0B0189BF11 WB WB0840 WSTS000046
NY 1800E7F30C7DE071 WB WB0840 WSTS000050
NY 18104EBF1899911D WB WB0840 WSTS000051
NY 182052B8138C5EAB WB WB0840 WSTS000055
NY 1815CBE403F1522A WB WB0840 WSTS000056
NY 182E81230D947285 WB WB0840 WSTS000057
NY 1825A8B4050AC926 WB WB0840 WSTS000058
NY 183B0B3D0130A622 WB WB0840 WSTS000061
NY 1833FFF607E1229D WB WB0840 WSTS000062
NY 183127D0118B8088 WB WB0840 WSTS000063
NY 18321B8B01D1DDC1 WB WB0840 WSTS000064
NY 17F6663C1FB97016 WB WB0870 WS8B000373
NY 17E657EA064338A2 WB WB0870 WSTS000039
NY 17EFF3840280BCCC WB WB0870 WSTS000043
NY 18031B3F147AC3A2 WB WB0870 WSTS000046
NY 181C3CD1170CA459 WB WB0870 WSTS000055
NY 183AC1C502C91867 WB WB0870 WSTS000061
NY 17B6EFAE0B79D792 WB WB0900 WSTS000014
NY 181BC4FB194A390D WB WB0900 WSTS000055
NY 183AC1AC18FD05CF WB WB0900 WSTS000061
NY 177E97AC05456002 WB WB0910 A06M025453
NY 181B48460EBD724A WB WB0910 WSTS000055
NY 1829968504E28612 WB WB0910 WSTS000057
NY 183AC1A203D8D6B9 WB WB0910 WSTS000061
NY 17B6EFAE1FF2B425 WB WB0920 WSTS000014
NY 181C3CCF17C160C6 WB WB0920 WSTS000055
NY 183AC18C01E003B4 WB WB0920 WSTS000061
NY 1819E9A90F687615 WB WB0940 WS8B000468
NY 17E657FD19DED6AE WB WB0940 WSTS000039
NY 17F2935C0CAB20DE WB WB0940 WSTS000043
NY 18031B4507712C96 WB WB0940 WSTS000046
NY 1800BEDF02B614F5 WB WB0940 WSTS000050
NY 18104EC90D674E44 WB WB0940 WSTS000051
NY 181C3CD11F409BBD WB WB0940 WSTS000055
NY 1815CBE113E011FC WB WB0940 WSTS000056
NY 182996A010DC1DFF WB WB0940 WSTS000057
NY 183AC17D1EDB58A4 WB WB0940 WSTS000061
NY 1819E9B61769DD73 WB WB0950 WS8B000468
NY 17E657FE18982280 WB WB0950 WSTS000039
NY 17EFF38E02A9203F WB WB0950 WSTS000043
NY 18031B4413F19B92 WB WB0950 WSTS000046
NY 1800BEE21CF45542 WB WB0950 WSTS000050
NY 18104EBC1A502B0A WB WB0950 WSTS000051
NY 181C3CCB172EC79B WB WB0950 WSTS000055
NY 1815CBE81CDDA42A WB WB0950 WSTS000056
NY 183AC19A150B3F03 WB WB0950 WSTS000061
NY 17B6EFAF17EDB46A WB WB0960 WSTS000014
NY 181C3CCD1F403412 WB WB0960 WSTS000055
NY 183AC1911DCB20D6 WB WB0960 WSTS000061
NY 18314CB119CD9908 WB WB0970 TOFF000119
NY 183B0B0B161F507C WB WB0970 TOFF000122
NY 1819E9BB1DEB6DEA WB WB0970 WS8B000468
NY 17E658000744B5E1 WB WB0970 WSTS000039
NY 17F2935F17CA4579 WB WB0970 WSTS000043
NY 18031B5810DE385B WB WB0970 WSTS000046
NY 1800BEE41265A7D8 WB WB0970 WSTS000050
NY 18104EB50F6C19E5 WB WB0970 WSTS000051
NY 1802A1AF1D15D0F6 WB WB0970 WSTS000052
NY 181C3CCF18A25948 WB WB0970 WSTS000055
NY 1815CBD813E68799 WB WB0970 WSTS000056
NY 18299666011412CE WB WB0970 WSTS000057
NY 182190B107786E08 WB WB0970 WSTS000059
NY 183DE8150D65B415 WB WB0970 WSTS000069
NY 17F3B73D092B4283 WB WB0980 TOFF000076
NY 18063C421241FE5A WB WB0980 TOFF000088
NY 18104ED9037C0A73 WB WB0980 TOFF000099
NY 181DF58A13353842 WB WB0980 TOFF000109
NY 182CE95B0E61834E WB WB0980 TOFF000112
NY 18314CAB0B51E797 WB WB0980 TOFF000119
NY 183B0B0C1BF09E86 WB WB0980 TOFF000122
NY 17EC2004111ADB1D WB WB0980 WS8B000345
NY 17BA08BB06322FA4 WB WB0990 TOFF000026
NY 17F3B74F1E488E52 WB WB0990 TOFF000076
NY 18104ED4125908F5 WB WB0990 TOFF000099
NY 181DF58D021E9F86 WB WB0990 TOFF000109
NY 18314CAB12720FBA WB WB0990 TOFF000119
NY 183B0B0418FC2BB3 WB WB0990 TOFF000122
NY 161750120ECA5E5A WB WB1010 19980710082854S101702A073636AWB1010
NY 17E658021976720D WB WB1020 WSTS000039
NY 17EFF392188518D2 WB WB1020 WSTS000043
NY 18031B431C21ADE5 WB WB1020 WSTS000046
NY 181C3CC90BD2EB57 WB WB1020 WSTS000055
NY 183AC17A022BB450 WB WB1020 WSTS000061
NY 17E658030E0E4658 WB WB1030 WSTS000039
NY 17EFF38C04EE96FC WB WB1030 WSTS000043
NY 18031B4404501E6C WB WB1030 WSTS000046
NY 17E658041E70F5FC WB WB1040 WSTS000039
NY 17EFF38B11073D43 WB WB1040 WSTS000043
NY 18031B490D66E6FC WB WB1040 WSTS000046
NY 17E6580613FC183E WB WB1050 WSTS000039
NY 17EFF3860446A804 WB WB1050 WSTS000043
NY 18031B4B0865055F WB WB1050 WSTS000046
NY 181C3CC41DD64553 WB WB1050 WSTS000055
NY 183AC1A71ACA9B60 WB WB1050 WSTS000061
NY 18031B5C10E2794F WB WB1060 WSTS000046
NY 17E658091BD1E38A WB WB1070 WSTS000039
NY 17EFF398053E0FA4 WB WB1070 WSTS000043
NY 18031B471234006F WB WB1070 WSTS000046
NY 1800BEE512D2C44E WB WB1070 WSTS000050
NY 181C3CC50797627B WB WB1070 WSTS000055
NY 183AC1A4130FB812 WB WB1070 WSTS000061
NY 17E658470DCF65C8 WB WB1080 TOFF000067
NY 17F3B7530CB74BEF WB WB1080 TOFF000076
NY 18063C2E1FBE5252 WB WB1080 TOFF000088
NY 18104F1910468A7E WB WB1080 TOFF000099
NY 181DF5961B515E0D WB WB1080 TOFF000109
NY 182CE9770C982E56 WB WB1080 TOFF000112
NY 18314CAC13D5C113 WB WB1080 TOFF000119
NY 183B0B1200545349 WB WB1080 TOFF000122
NY 17E658481B0AD1F9 WB WB1090 TOFF000067
NY 17F3B75B04496A8B WB WB1090 TOFF000076
NY 18063C681E19FBC8 WB WB1090 TOFF000088
NY 181DF58A1831B87D WB WB1090 TOFF000109
NY 182CE9641E571C62 WB WB1090 TOFF000112
NY 18314CB108C3B21E WB WB1090 TOFF000119
NY 183B0B170D4A05FC WB WB1090 TOFF000122
NY 17E658491A659997 WB WB1100 TOFF000067
NY 17F3B74B0FD3EB87 WB WB1100 TOFF000076
NY 18063C2A0DCAFFC3 WB WB1100 TOFF000088
NY 18104ECD00DF33CC WB WB1100 TOFF000099
NY 18038A7317FF4CE6 WB WB1100 TOFF000101
NY 18204F520D3BBE96 WB WB1100 TOFF000109
NY 1815CBBC128B209F WB WB1100 TOFF000111
NY 182E812F077DDBF7 WB WB1100 TOFF000112
NY 1825351F025970A3 WB WB1100 TOFF000117
NY 18314CAC06DAB158 WB WB1100 TOFF000119
NY 183BD30D193582E9 WB WB1100 TOFF000122
NY 182508C0009A2791 WB WB1100 WS8B000493
NY 182FE8A119EB323F WB WB1100 WS8B000540
NY 182264F510B513B1 WB WB1100 WS8I000307
NY 17E6580B0834A199 WB WB1110 WSTS000039
NY 17EFF3A103A29AB3 WB WB1110 WSTS000043
NY 18031B471DB0036B WB WB1110 WSTS000046
NY 1800BEE615FD9A10 WB WB1110 WSTS000050
NY 181C3CC01DF20ED6 WB WB1110 WSTS000055
NY 183AC1A41AB6A840 WB WB1110 WSTS000061
NY 17B6EFB00FA2278C WB WB1120 WSTS000014
NY 181BC4FC0590BD70 WB WB1120 WSTS000055
NY 183AC18802D3917E WB WB1120 WSTS000061
NY 17F5FC1F1872F751 WB WB1130 NOST000271
NY 17F68C530A0368C7 WB WB1130 NOST000275
NY 17FAC34D060D2F01 WB WB1130 NOST000288
NY 1819E9B01255AAF5 WB WB1130 WS8B000468
NY 182508B908A66659 WB WB1130 WS8B000493
NY 182FE89F0C3DCC0C WB WB1130 WS8B000540
NY 182264F500BCCA0E WB WB1130 WS8I000307
NY 17E6562D1E211910 WB WB1130 WSTS000039
NY 18063D14070D9ED2 WB WB1130 WSTS000046
NY 1800E7ED01718B51 WB WB1130 WSTS000050
NY 18104EC80BF36DD2 WB WB1130 WSTS000051
NY 182052B701C86330 WB WB1130 WSTS000055
NY 1815CBD3028990C0 WB WB1130 WSTS000056
NY 182E81190D0F9522 WB WB1130 WSTS000057
NY 1825A8B61E132806 WB WB1130 WSTS000058
NY 183B0CAA0DED47F4 WB WB1130 WSTS000061
NY 1833FFF70CF81D11 WB WB1130 WSTS000062
NY 17C993CF04790E4D WB WB1140 WSTS000025
NY 17C0A358070D962E WB WB1140 WSTS000032
NY 17D3A36414AF8130 WB WB1140 WSTS000035
NY 17E6562F0079A811 WB WB1140 WSTS000039
NY 17E656D50497257B WB WB1270 TOFF000067
NY 181DF5901B2478B6 WB WB1270 TOFF000109
NY 183B0B06055E7F50 WB WB1270 TOFF000122
NY 17D7161C06E6BFAE WB WB1280 TOFF000059
NY 17CD0AEF050D4C36 WB WB1280 WS8B000188
NY 17F429F603347F8C WB WB1290 TOFF000076
NY 18063C4512A8DBE5 WB WB1290 TOFF000088
NY 17FEAF8C0F4507FC WB WB1290 TOFF000090
NY 18104F001A82A2D2 WB WB1290 TOFF000099
NY 1802C39B10003785 WB WB1290 TOFF000100
NY 18204F50133EEF4F WB WB1290 TOFF000109
NY 180F309103DE08AE WB WB1290 TOFF000110
NY 1815CBC80E0A07D8 WB WB1290 TOFF000111
NY 182E81350E35C518 WB WB1290 TOFF000112
NY 1825351E1A39AD79 WB WB1290 TOFF000117
NY 18314CAB1D0CD034 WB WB1290 TOFF000119
NY 183B0B0F0ABE6647 WB WB1290 TOFF000122
NY 17EC20040FB5B229 WB WB1290 WS8B000345
NY 182508BC07CE0D85 WB WB1290 WS8B000493
NY 182FE89F190AB8F6 WB WB1290 WS8B000540
NY 182264F606CDDD86 WB WB1290 WS8I000307
NY 17F429F81B636042 WB WB1300 TOFF000076
NY 17E6580C1C1EDF66 WB WB1310 WSTS000039
NY 17EFF394094612F1 WB WB1310 WSTS000043
NY 18031B4E14EB6841 WB WB1310 WSTS000046
NY 181C3CBE09DCAD91 WB WB1310 WSTS000055
NY 183AC1820A650D6B WB WB1310 WSTS000061
NY 17E6580E095E8853 WB WB1340 WSTS000039
NY 17EFF3951E44C4D3 WB WB1340 WSTS000043
NY 18031B5F18E00183 WB WB1340 WSTS000046
NY 181C3CC406753F55 WB WB1340 WSTS000055
NY 183AC1DC0BC41F26 WB WB1340 WSTS000061
NY 18031B4A0412385B WB WB1350 WSTS000046
NY 17D7B9B01E44C020 WB WB5040 WS8B000222
NY 17F42B4105DCA057 WB WB5040 WS8B000319
NY 18204EB91EC9358A WB WB5040 WS8B000444
NY 183B0D381BD50164 WB WB5040 WS8B000520
NY 17E65815113FC4DD WB WB5090 WSTS000039
NY 1804D66E00920D38 WB WB5090 WSTS000046
NY 181B482217C8CC17 WB WB5090 WSTS000055
NY 183AC1D2122C81BA WB WB5090 WSTS000061
NY 17E658170381461E WB WB5120 WSTS000039
NY 18031B550608B4EE WB WB5120 WSTS000046
NY 181B481D0D0DF37B WB WB5120 WSTS000055
NY 1825A8BE03B40135 WB WB5120 WSTS000058
NY 183AC1B80F13FC35 WB WB5120 WSTS000061
NY 17E656330D4C86A5 WB WB5260 WSTS000039
NY 17F12D2003A67C35 WB WB5260 WSTS000043
NY 1804D66E09600D74 WB WB5260 WSTS000046
NY 18104ED001A5E5B0 WB WB5260 WSTS000051
NY 181B483902A2C31C WB WB5260 WSTS000055
NY 183AC1B002D07BED WB WB5260 WSTS000061
NY 1819E9D216BAE89A WB WB5270 WS8B000468
NY 17E6581815414CAF WB WB5270 WSTS000039
NY 17EFF39B1BB8B230 WB WB5270 WSTS000043
NY 18031B64037FC1E6 WB WB5270 WSTS000046
NY 18104EC80F091F37 WB WB5270 WSTS000051
NY 181B481A044DDC45 WB WB5270 WSTS000055
NY 183AC1BE12F0BC5F WB WB5270 WSTS000061
NY 18341F590EDA153B WB WB5270 WSTS000065
NY 1819E9DB050D93E2 WB WB5280 WS8B000468
NY 17E656340E3DE83C WB WB5280 WSTS000039
NY 17EFF39707D66D94 WB WB5280 WSTS000043
NY 18031B4E0A0BE859 WB WB5280 WSTS000046
NY 18104ECF12EF2AA4 WB WB5280 WSTS000051
NY 181B4824159489A2 WB WB5280 WSTS000055
NY 18163D2B1C5C9CE5 WB WB5280 WSTS000056
NY 183AC1DA0A0F34A9 WB WB5280 WSTS000061
NY 1819E9CE1C08E759 WB WB5290 WS8B000468
NY 17E658191FEC3935 WB WB5290 WSTS000039
NY 17F47B0D0AD85488 WB WB5290 WSTS000043
NY 18031B611CB11690 WB WB5290 WSTS000046
NY 18104ED9034E19E8 WB WB5290 WSTS000051
NY 181B481C080B1E88 WB WB5290 WSTS000055
NY 183AC1E908892539 WB WB5290 WSTS000061
NY 18341F6018E8CCF8 WB WB5290 WSTS000065
NY 17E656D80CA4C2AB WB WB5320 TOFF000067
NY 17F9D78F04D4D6F0 WB WB5340 MKUR000032
NY 17F3B75B03B61B8C WB WB5340 TOFF000076
NY 18063C48073C1821 WB WB5340 TOFF000088
NY 1800BCB11DAC404E WB WB5340 TOFF000090
NY 1811E17C16C548D4 WB WB5340 TOFF000099
NY 18204F4E09BD932C WB WB5340 TOFF000109
NY 180F308F05BBE908 WB WB5340 TOFF000110
NY 1815CBC41E9ECD6B WB WB5340 TOFF000111
NY 182E80BE12B48951 WB WB5340 TOFF000112
NY 1825350D068EB174 WB WB5340 TOFF000117
NY 18314CB90134CC0E WB WB5340 TOFF000119
NY 183B0B1B0ABDFA4C WB WB5340 TOFF000122
NY 1833FFD007819E9D WB WB5340 TOFF000126
NY 17EC201A1AFA8989 WB WB5340 WS8B000345
NY 182509020B72643B WB WB5340 WS8B000493
NY 182FE8E91FB09F86 WB WB5340 WS8B000540
NY 1822650401D8C0BA WB WB5340 WS8I000307
NY 17F42B2F06543E61 WB WB5570 WS8B000319
NY 17EAE2F8089CF998 WB WB5570 WS8B000334
NY 180708F21550CB34 WB WB5570 WS8B000362
NY 18111B6715B5819C WB WB5570 WS8B000411
NY 1815CC701862E0F0 WB WB5570 WS8B000441
NY 18204EC002F7AD36 WB WB5570 WS8B000444
NY 1819E9D8100C76EE WB WB5570 WS8B000468
NY 182534CF1843DAC9 WB WB5570 WS8B000476
NY 182508EF19331EAB WB WB5570 WS8B000493
NY 182265071C5F2DD9 WB WB5570 WS8I000307
NY 17E6582300ED4DF9 WB WB7020 WSTS000039
NY 181B482308EFF1DB WB WB7020 WSTS000055
NY 1829967F04389766 WB WB7020 WSTS000057
NY 1825A8C005020929 WB WB7020 WSTS000058
NY 183AC1960E37DD65 WB WB7020 WSTS000061
NY 177E95C00FE6F6C0 WB WB7030 A06M025453
NY 181B482516FFEECA WB WB7030 WSTS000055
NY 183AC1E616B3A958 WB WB7030 WSTS000061
NY 17D372DD042630B7 WB WB7040 WSTS000035
NY 181B481F1BBB06A5 WB WB7040 WSTS000055
NY 183AC1D51DD58D4D WB WB7040 WSTS000061
NY 177E95DA027DD0B6 WB WB7230 A06M025453
NY 181DF5AD1CE07ADA WB WB7230 TOFF000109
NY 17D372D8179BF8A7 WB WB7270 WSTS000035
NY 181B48311C2115E4 WB WB7270 WSTS000055
NY 183AC1BB0E7DB729 WB WB7270 WSTS000061
NY 17D372D909A78CFE WB WB7280 WSTS000035
NY 181B48271F50AB63 WB WB7280 WSTS000055
NY 183AC1B60EFBB612 WB WB7280 WSTS000061
NY 177E95D116F98055 WB WB7290 A06M025453
NY 181B482602EC0984 WB WB7290 WSTS000055
NY 183AC1981F318662 WB WB7290 WSTS000061
NY 177E95D112253231 WB WB7300 A06M025453
NY 177E95D600CF89C6 WB WB7320 A06M025453
NY 180760180079CDF5 WB WB7320 WSTS000046
NY 181B48280797DBEA WB WB7320 WSTS000055
NY 183AC1BD01A3E5A0 WB WB7320 WSTS000061
NY 177E95D405ED2BFA WB WB7330 A06M025453
NY 1807601913BC34F4 WB WB7330 WSTS000046
NY 181B48221360CA92 WB WB7330 WSTS000055
NY 183AC19D154DBA79 WB WB7330 WSTS000061
NY 177E95D71EEC3BE1 WB WB7340 A06M025453
NY 1807601C03C093F7 WB WB7340 WSTS000046
NY 181B4837037FE738 WB WB7340 WSTS000055
NY 183AC1EE0E3635AA WB WB7340 WSTS000061
NY 177E95DB1644FF30 WB WB7360 A06M025453
NY 181B482D00B5B92C WB WB7360 WSTS000055
NY 183AC1DD1F730DB2 WB WB7360 WSTS000061
NY 17D372DE14DB5C15 WB WB7370 WSTS000035
NY 181B482A0DF62AFA WB WB7370 WSTS000055
NY 183AC1C91FC69517 WB WB7370 WSTS000061
NY 177E95E50526E634 WB WB7380 A06M025453
NY 181B482A14F9B1D5 WB WB7380 WSTS000055
NY 183AC1C007EFCEF0 WB WB7380 WSTS000061
NY 177E95E102DA3E20 WB WB7381 A06M025453
NY 181B48241E46F8D4 WB WB7381 WSTS000055
NY 183AC19F1F2FEB7F WB WB7381 WSTS000061
NY 17D372E304B63DA2 WB WB7390 WSTS000035
NY 181B48391E85C989 WB WB7390 WSTS000055
NY 183AC1F10034CD45 WB WB7390 WSTS000061
NY 17D372DE15F73A29 WB WB7400 WSTS000035
NY 181B4830012488BA WB WB7400 WSTS000055
NY 183AC1E01C10149E WB WB7400 WSTS000061
NY 17D372DB139DD0C8 WB WB7410 WSTS000035
NY 181B482D0DE532E3 WB WB7410 WSTS000055
NY 183AC1CC19F7DF9E WB WB7410 WSTS000061
NY 17D372D7072C27F3 WB WB7420 WSTS000035
NY 18031B52052A63EE WB WB7420 WSTS000046
NY 181B482D0AA6E018 WB WB7420 WSTS000055
NY 183AC1C21F3FB82C WB WB7420 WSTS000061
NY 160D4EF80F3B0F44 WB WB7430 19980507164320S101702A072243AWB7430
NY 1819E9DD181A4657 WB WB7440 WS8B000468
NY 17D372E40D10EA5F WB WB7440 WSTS000035
NY 181B48200C9F72D8 WB WB7440 WSTS000055
NY 1827682612A2BF5A WB WB7440 WSTS000060
NY 183AC1E20ECFF34A WB WB7440 WSTS000061
NY 1819E9DA1D273222 WB WB7441 WS8B000468
NY 17D372E0058EF4F5 WB WB7441 WSTS000035
NY 181B481A0C85C3E1 WB WB7441 WSTS000055
NY 183AC1CF15313E29 WB WB7441 WSTS000061
NY 159A1DE21F3ED35A WB WB7460 19960504154757S101702A053306AWB7460
NY 177E95E91BBF48AA WB WB7470 A06M025453
NY 181B483C12088EBD WB WB7470 WSTS000055
NY 183AC1A20DF58A73 WB WB7470 WSTS000061
NY 15CFB55412A35ABA WB WB7490 19970410154641S101702A063035AWB7490
NY 17BF5DCF0D4AB25A WB WB7520 WSTS000023
NY 181B4833128C6D23 WB WB7520 WSTS000055
NY 1825A89C1BE2FC0A WB WB7520 WSTS000058
NY 183AC1F310D58820 WB WB7520 WSTS000061
NY 160D4EF81F5FD208 WB WB7530 19980507164321S101702A072243AWB7530
NY 178CF04C070E79F4 WB WB7540 WSTS000001
NY 181B482F0A727620 WB WB7540 WSTS000055
NY 183AC1E30D458B40 WB WB7540 WSTS000061
NY 17C1906501B32E11 WB WB7560 WSTS000034
NY 18104ED41238DDBD WB WB7560 WSTS000051
NY 181B48320DD3F4BC WB WB7560 WSTS000055
NY 183AC1CF003A4F98 WB WB7560 WSTS000061
NY 17B4D2BB1EBE88E4 WB WB7561 WSTS000019
NY 18104ED21C9722AD WB WB7561 WSTS000051
NY 181B48431C7CC611 WB WB7561 WSTS000055
NY 183AC1C5185269D1 WB WB7561 WSTS000061
NY 15EE81370B064606 WB WB7580 19971023144206S101702A067639AWB7580
NY 15FCCEDD0C7772C8 WB WB7580 19980122145713S101702A069894AWB7580
NY 177E95F117458ED9 WB WB7650 A06M025453
NY 181DF59E1E040216 WB WB7650 TOFF000109
NY 18314CB41ADAC1C1 WB WB7650 TOFF000119
NY 183B0B1A032F89EE WB WB7650 TOFF000122
NY 1833FFD610A9E51C WB WB7650 TOFF000126
NY 177E95F512C8053D WB WB7690 A06M025453
NY 17D7162D047FE477 WB WB7720 TOFF000059
NY 181DF5A510135A87 WB WB7720 TOFF000109
NY 17C993D615F70343 WB WB7730 WSTS000025
NY 1807601D13CE201F WB WB7730 WSTS000046
NY 181B483F043C505C WB WB7730 WSTS000055
NY 183AC1F60130A53A WB WB7730 WSTS000061
NY 17D372DB0A5DFAF0 WB WB7770 WSTS000035
NY 181B483811734D84 WB WB7770 WSTS000055
NY 183AC1E50FA35B58 WB WB7770 WSTS000061
NY 17D372DC12202830 WB WB7871 WSTS000035
NY 181B4832085E397F WB WB7871 WSTS000055
NY 183AC1C909050118 WB WB7871 WSTS000061
NY 177E96191AA7B6A1 WB WB7880 A06M025453
NY 181B482C1BB27209 WB WB7880 WSTS000055
NY 17E65872038FA072 WB WB8010 TOFF000067
NY 18063C7300805687 WB WB8010 TOFF000088
NY 181DF5A802121E7C WB WB8010 TOFF000109
NY 17D7162F03F72F9A WB WB8650 TOFF000059
NY 181DF5BC0208ABD5 WB WB8650 TOFF000109
NY 183B0B3A0FA06533 WB WB8650 TOFF000122
NY 17D372DC0D51D04A WB WB8720 WSTS000035
NY 181B48360D2346B8 WB WB8720 WSTS000055
NY 183AC1D402AA64E6 WB WB8720 WSTS000061
NY 1618F1011CA15BC4 WB WB9993 A06M000357
NY 180915970A3C7C0D WB YWB0082 WS8B00042658C556F1
NY 1819BB65112A33FB WB YWB0082 WS8B00046859510BA3
NY 17F1316B166C291E WB YWB0082 WSTS00004357FCFAC3
NY 17E8841A040A663F WB YWB0082 WSTS00004457B43111
NY 180318F308466952 WB YWB0082 WSTS00004658931E2C
NY 17F6593507F0991B WB YWB0082 WSTS00004758282BE3
NY 17FABFFE13D5C4BC WB YWB0082 WSTS000050584D1824
NY 180FA9B91C108FD2 WB YWB0082 WSTS00005158FC9483
NY 181C3CA70424A8BD WB YWB0082 WSTS00005559660E59MVS
NY 1815CA811B0232E9 WB YWB0082 WSTS000056592FFC68
NY 1827DA1D03FFDB00 WB YWB0082 WSTS00005759C7789AMVS
NY 183577D302791E02 WB YWB0082 WSTS0000615A39A807MVS
NY 18070830187C28F1 WB YWB0083 WS8B00038058B41EE5
NY 1819BB6608D94976 WB YWB0083 WS8B00046859510BA9
NY 1824188306484C98 WB YWB0083 WS8B00049859A7FB84MVS
NY 180E173313327007 WB YWB0083 WSTS00005158EF63E7
NY 1806624A0FE52F38 WB YWB0083 WSTS00005458AEAFE5
NY 181D3635191FC8E7 WB YWB0083 WSTS000055596E3C20MVS
NY 1815CA82150A2EA3 WB YWB0083 WSTS000056592FFC72
NY 1827DA281F81C0C3 WB YWB0083 WSTS00005759C7789EMVS
NY 1825050B0AA408CF WB YWB0083 WSTS00005859AFBB9DMVS
NY 183577CD126E7FDF WB YWB0083 WSTS0000615A39A80BMVS
NY 1830F8E201B51E3F WB YWB0083 WSTS0000625A13F154MVS
NN 14E0F99F08B8A78A WB YWB5012
NN 14E0F9A010F87214 WB YWB5013
NY 17E656C50DE4DA58 WB YWB530 WS8B000312
NY 17F21E040606E9F2 WB YWB530 WS8B000320
NY 18111BB006506198 WB YWB530 WS8B000411
NY 1815CC8806CB9A1F WB YWB530 WS8B000441
NY 18204EA51BB20439 WB YWB530 WS8B000443
NY 182535190875479B WB YWB530 WS8B000476
NY 182508E2112C51DA WB YWB530 WS8B000493
NY 182265901BEE32D8 WB YWB530 WS8I000307
NY 176D7FFE0C4873F1 WB YWB5402 A06M02510853AC420A
NY 18191FF500770133 WB YWB5402 WSTS000055594BF347MVS
NY 183577CF1AB9E03F WB YWB5402 WSTS0000615A39A826MVS
NY 176D80010157D0D5 WB YWB5403 A06M02510853AC4207
NY 18191FF3015FBA1A WB YWB5403 WSTS000055594BF33EMVS
NY 183577DD1FE73077 WB YWB5403 WSTS0000615A39A82CMVS
NY 176D80010C2BC972 WB YWB5417 A06M02510853AC422D
NY 18191FDA177E875B WB YWB5417 WSTS000055594BF2BEMVS
NY 183577DB152862F5 WB YWB5417 WSTS0000615A39A861MVS
NY 18191FDB160E209F WB YWB5419 WSTS000055594BF2C6MVS
NY 18191FC617F86461 WB YWB5425 WSTS000055594BF204MVS
NY 18191FCA0F8C1B80 WB YWB5427 WSTS000055594BF219MVS
NY 17E516BD07F41266 WB YWB551 WS8B00028657977132
NY 1819BA6F13A88258 WB YWB551 WS8B00044259510292MVS
NY 18357891106A6C56 WB YWB551 WS8B0005185A39AE85
NY 18357892075BD5AE WB YWB551 WS8B0005185A39AE85MVS
NY 1540B336191D323E WB YWB5901 19941013170117S101702A037988AYWB5901
NY 159A1DCA139F52F2 WB YWB5901 19960504154552S101702A053306AYWB5901
NY 17ECA3510D42101C WB YWB709 WS8B00031857D6C4E1
NY 17E653B21AAE9238 WB YWBBODA WS8B00028657A1D413
NY 17ECA08D03882188 WB YWBBODA WS8B00031857D6ADA9
NY 180A2785079897FA WB YWBBODA WS8B00040958CE50CE
NY 181AAA1316770361 WB YWBBODA WS8B0004425958DDB0MVS
NY 17F4CAE81D124201 WB YWBBOPR WS8B000318581B1EC5
NY 17E79C6D161BB342 WB YWBBOPR WS8B00032957AC99AE
NY 1800BA7C017744A1 WB YWBBOPR WS8B000359587F3ED3
NY 180315C2111911C7 WB YWBBOPR WS8B00038058930376
NY 17F7CDF615592B44 WB YWBBOPR WS8B000386583462DC
NY 180FCC600B7A0A2C WB YWBBOPR WS8B00040958FDB730
NY 181487570A9CBF92 WB YWBBOPR WS8B00044159256574
NY 18175DBA16D08A79 WB YWBBOPR WS8B000465593D32E5
NY 1819E244056C3EAA WB YWBBOPR WS8B000468595251AE
NY 17DE50AF0834DC9E WB YWBCTA WS8B000286575E9C03
NY 17EDB65E0059AE7C WB YWBCTA WS8B00031857DFC824
NY 1803164F11652F4E WB YWBCTA WS8B00038058930814
NY 180A28B1196278DC WB YWBCTA WS8B00040958CE5AAC
NY 181ACBE5166D9350 WB YWBCTA WS8B0004425959F984
NY 17DFB6400FBE5AA6 WB YWBDGP WS8B000286576A566C
NY 180314D608B4A6D9 WB YWBDGP WS8B0003805892FBB2
NY 1819B9520C3A9E96 WB YWBDGP WS8B0004425950FA22MVS
NY 17DFB6410B7D2895 WB YWBDGP2 WS8B000286576A5674
NY 180314DA0AABE2EE WB YWBDGP2 WS8B0003805892FBD7
NY 1819B95600C828CF WB YWBDGP2 WS8B0004425950FA29MVS
NY 1815C9D81095EDE8 WB YWBEBSM WS8B000441592FF6DF
NY 1819BB8A110EB8EB WB YWBEBSM WS8B00046859510C08
NY 1820EDD80560A16C WB YWBEBSM WS8B000479598D6B36
NY 17DF44FA0A7FAA50 WB YWBEBSM WSTS00003957669F37
NY 17EDDBD30DE30F06 WB YWBEBSM WSTS00004357E1024F
NY 180318F21D2A9178 WB YWBEBSM WSTS00004658931E1A
NY 17F65A4E11AB0A37 WB YWBEBSM WSTS0000485828352D
NY 17F65CBF1FC4A84A WB YWBEBSM WSTS000049582849AF
NY 17FA24C616E2F012 WB YWBEBSM WSTS00005058480203
NY 180E17360852A7CA WB YWBEBSM WSTS00005158EF63FE
NY 1819DC7C0F04665C WB YWBEBSM WSTS000055595220FAMVS
NY 182C8DBA0B6EB050 WB YWBEBSM WSTS00005759EEEEAF
NY 183577DB03681FC4 WB YWBEBSM WSTS0000615A39A815MVS
NY 183DE8061292451E WB YWBEBSM WSTS0000695A80713EMVS
NY 17DE592B1DF94E8E WB YWBIO WS8B000286575EE61A
NY 17EDB68C09DA7D57 WB YWBIO WS8B00031857DFC9A9
NY 180315740B349F48 WB YWBIO WS8B000380589300E4
NY 17FB60D20F9B8F02 WB YWBIO WS8B00040058525D43
NY 17FBD7E30BD021C3 WB YWBIO WS8B0004015856440E
NY 18093A250578AC7C WB YWBIO WS8B00040958C6898F
NN 181AAB810DA424A7 WB YWBIO WS8B0004425958E985MVS
NY 17D70EA10E338102 WB YWBITV TOFF0000595721BC72
NY 17EDDBA5064280AA WB YWBITV TOFF00007657E100DB
NY 181A0DF707DD2360 WB YWBITV TOFF0001095953C015MVS
NY 1829546706589227 WB YWBITV TOFF00011259D3E350MVS
NY 17DE50E70D9A610C WB YWBMAS WS8B000286575E9E49
NY 17ECA1220B217446 WB YWBMAS WS8B00031857D6B290
NY 18093A5208A498C5 WB YWBMAS WS8B00040958C68B0C
NY 181AAB9F1CC56848 WB YWBMAS WS8B0004425958EA9AMVS
NY 17F3AC651CAB1AFE WB YWBMOV WS8B0003185811C948
NY 1800BA3A01C8307E WB YWBMOV WS8B000359587F3CA8
NN 1803E705175E5CF5 WB YWBMOV WS8B0003805899DEB4
NY 17E653D71522AA54 WB YWBN100 WS8B00028657A1D54A
NY 17E0A3CE1788E1A5 WB YWBSA2 WS8B00028657721F2F
NY 17ECA17310A6C525 WB YWBSA2 WS8B00031857D6B537
NY 180315951FD0A79D WB YWBSA2 WS8B00038058930202
NY 180991520F243939 WB YWBSA2 WS8B00040958C964D3
NY 181E0A5906FDFCEB WB YWBSA2 WS8B00044259752FC0MVS
NY 1807038F02E95D9A WB YWBSA4 WS8B00038058B3F8A5
NY 180BBC5A03DC0DA2 WB YWBSA4 WS8B00040958DBA2D3
NY 181AAC0B13DEE03C WB YWBSA4 WS8B0004425958EE28MVS
NY 18252FDE14A20557 WB YWBSA4 WS8B00047659B12272MVS
NY 17E6549412925009 WB YWBSUM WS8B00028657A1DB75
NY 17F21CBC110AF1E9 WB YWBSUM WS8B0003185804B0D3
NY 18093C381477987A WB YWBSUM WS8B00040958C69AFA
NY 181AAC51064064A8 WB YWBSUM WS8B0004425958F075MVS
NY 178CBAB501330F34 WB YWBSYM WS8B00001654B22C92
NY 1804CF620777EF19 WB YWBSYM WS8B00038058A17C05
NY 1803163913531F47 WB YWBWRK WS8B0003805893075A
NY 17F9315D0B3CF01C WB YWBWRK WS8B00039058400836
NY 18093C761D12727A WB YWBWRK WS8B00040958C69CFF
NY 181ACC0B10C55764 WB YWBWRK WS8B0004425959FAC1
AY 1827E6B60DE283C1 WB YWBWRK WS8B00046959C7E7A6MVS
AY 183578830C7FFDAC WB YWBWRK WS8B0005185A39AE0E
AY 183578840B87DA99 WB YWBWRK WS8B0005185A39AE0EMVS
NY 15FBE54C00E0778E WB YYWBBPU 19980116193842S101702A069660AYYWBBPU
NY 17E657BB1056E9C9 WC WC5010 OTXO000054
NY 17F21DD31F8CFB22 WC WC5010 OTXO000058
NY 18072A2A1A022FFA WC WC5010 OTXO000060
NY 18104EED145B9FE5 WC WC5010 OTXO000066
NY 181CE485169A2292 WC WC5010 OTXO000070
NY 1815CC1D0ACA3EBE WC WC5010 OTXO000073
NY 1817624A17ABF493 WC WC5010 OTXO000077
NY 182E81261B5A42EE WC WC5010 OTXO000081
NY 182534F7102E2A77 WC WC5010 OTXO000085
NY 182F1A3A0A95304A WC WC5010 OTXO000090
NY 1819E9E01D0E6840 WC WC5010 WS8B000468
NY 182F9C94064FEB21 WC WC5010 WS8B000535
NY 182FE927161E2B2E WC WC5010 WS8B000540
NY 18226582085840F8 WC WC5010 WS8I000307
NY 183AC19014C8320D WC WC5010 WSTS000061
NY 183400000C9259CF WC WC5010 WSTS000062
NY 17E657BC01D55B18 WC WC5050 OTXO000054
NY 17F21DDB10B76A14 WC WC5050 OTXO000058
NY 18063C3110AB2DE5 WC WC5050 OTXO000060
NY 181B491716D92453 WC WC5050 OTXO000070
NY 182E8135026D808D WC WC5050 OTXO000081
NY 182534F9089DAC0A WC WC5050 OTXO000085
NY 183AC1CC1CD093D1 WC WC5050 WSTS000061
NY 181B491D188A5C56 WC WC7100 OTXO000070
NY 183AC1EA171EFCC6 WC WC7102 WSTS000061
NY 183AC1D61D3CB858 WC WC7103 WSTS000061
NY 181B492D0C2A296B WC WC7104 OTXO000070
NY 181B49310388ED64 WC WC7105 OTXO000070
NY 181B493117F6065C WC WC7106 OTXO000070
NY 181C62A911B5737E WC WC7108 OTXO000070
NY 181C62AA0A829F61 WC WC7109 OTXO000070
NY 17D4BDDF025C7B54 WC WC7220 OTXO000045
NY 181B4934145BD3C5 WC WC7220 OTXO000070
NY 1825350C14C8C654 WC WC7220 OTXO000085
NY 183AC1FC07FC070B WC WC7220 WSTS000061
NY 17A7996B0D814A9D WC WC7230 OTXO000014
NY 177B7D0C1BFE777F WC WC7240 A06M027069
NY 181B49361607A8BA WC WC7240 OTXO000070
NY 18253502188B9652 WC WC7240 OTXO000085
NY 183AC1DA1EE75450 WC WC7240 WSTS000061
NY 177B7D0E0491C98D WC WC7250 A06M027069
NY 1793AA2019911369 WC WC7260 OTXO000008
NY 181B49381EFEE30C WC WC7260 OTXO000070
NY 182534F204C6EC26 WC WC7260 OTXO000085
NY 183AC1E705C4FF6C WC WC7260 WSTS000061
NY 17D4BDE90BAD8C6B WC WC7280 OTXO000045
NY 17F21DCE0943C5B8 WC WC7280 OTXO000058
NY 181B493C12EAF752 WC WC7280 OTXO000070
NY 182E812317ED996C WC WC7280 OTXO000081
NY 183AC1FE14094BDC WC WC7280 WSTS000061
NY 177878600624DAE6 WC WC7310 A06M027069
NY 181B49420E6C84E6 WC WC7310 OTXO000070
NY 1825350F0030FE42 WC WC7310 OTXO000085
NY 183AC1DD0A52AD3D WC WC7310 WSTS000061
NY 177878680513A2BF WC WC7320 A06M027069
NY 181B49430BCC42C0 WC WC7320 OTXO000070
NY 18253506015FA880 WC WC7320 OTXO000085
NY 183AC1D4058AAF50 WC WC7320 WSTS000061
NY 181B494518030B67 WC WC7400 OTXO000070
NY 181B4948181A9F77 WC WC7402 OTXO000070
NY 181B49491627AA7C WC WC7403 OTXO000070
NY 181C62AB0FC25C60 WC WC7404 OTXO000070
NY 181C62AC058006DA WC WC7405 OTXO000070
NY 17D4BDE10FB50A25 WC WC7500 OTXO000045
NY 18063C221C20E6C5 WC WC7500 OTXO000060
NY 181B49491D6D930B WC WC7500 OTXO000070
NY 1825350418934F44 WC WC7500 OTXO000085
NY 183AC1B20B8F877D WC WC7500 WSTS000061
NY 177B7D111F810F11 WC WC7530 A06M027069
NY 181B494D01568648 WC WC7530 OTXO000070
NY 182534F41F8BF991 WC WC7530 OTXO000085
NY 183AC1F11FD2B616 WC WC7530 WSTS000061
NY 17E657C81CE6E037 WC WC8120 OTXO000054
NY 18104EFF187EAA32 WC WC8120 OTXO000066
NY 181B495210AC32F4 WC WC8120 OTXO000070
NY 1815CC3708A02B0D WC WC8120 OTXO000073
NY 1819E9E4135D7F2A WC WC8120 WS8B000468
NY 17F21DBF0195247E WC WC8170 OTXO000058
NY 18063C2F01A69907 WC WC8170 OTXO000060
NY 18104EFC01B91721 WC WC8170 OTXO000066
NY 181B495411CD518C WC WC8170 OTXO000070
NY 1815CC21197C9DC0 WC WC8170 OTXO000073
NY 182E81160F3767AF WC WC8170 OTXO000081
NY 1825351303342F49 WC WC8170 OTXO000085
NY 1819E9E912AF2F8C WC WC8170 WS8B000468
NY 17E657CC0503B1C6 WC WC8401 OTXO000054
NY 17F21DBA1F13E3B4 WC WC8401 OTXO000058
NY 18072A2C1E82348A WC WC8401 OTXO000060
NY 18104EEF1D7198E1 WC WC8401 OTXO000066
NY 181D2645049A5697 WC WC8401 OTXO000070
NY 1815CC321B23A971 WC WC8401 OTXO000073
NY 182E81451AA9D856 WC WC8401 OTXO000081
NY 1825350B07522C4B WC WC8401 OTXO000085
NY 1819E9E117A5CB9F WC WC8401 WS8B000468
NY 182F9C7D0755188A WC WC8401 WS8B000535
NY 1822658105CC1901 WC WC8401 WS8I000307
NY 183AC2080516E17A WC WC8401 WSTS000061
NY 1834000A06F6C60B WC WC8401 WSTS000062
NY 183AC2050E9A7F8F WC WC8402 WSTS000061
NY 183AC1F61168ED96 WC WC8403 WSTS000061
NY 17E657CD0A58BA81 WC WC8410 OTXO000054
NY 17F3AD630156D3E6 WC WC8410 OTXO000058
NY 18063C2C12B355CA WC WC8410 OTXO000060
NY 18104EFA0D57BBEC WC WC8410 OTXO000066
NY 182051610EC67759 WC WC8410 OTXO000070
NY 1815CC300E92FA2C WC WC8410 OTXO000073
NY 182E812C17B3ADBB WC WC8410 OTXO000081
NY 1825350A05B3B5C4 WC WC8410 OTXO000085
NY 182FE9271C78D4CD WC WC8410 WS8B000540
NY 183B0C9A0EFD390B WC WC8410 WSTS000061
NY 1833FFFD102242EA WC WC8410 WSTS000062
NY 17F1F4EE0F6BAE2B WF WF0280 WSSW000043
NY 17F6B7C306E33831 WF WF0280 WSSW000046
NY 17E08AA010384A51 WF WF0280 WSSW000064
NY 1804B3C41E9469FF WF WF0280 WSSW000069
NY 17F7757F11C00378 WF WF0280 WSSW000077
NY 180C66741D294472 WF WF0280 WSSW000085
NY 1822D6A611A1A93F WF WF0280 WSSW000086
NY 181D331C016E0835 WF WF0280 WSSW000089
NY 17F011F01151C0AF WF WF0300 WSSW000043
NY 17F6B7C31E75074D WF WF0300 WSSW000046
NY 17E08AAD165B6D7E WF WF0300 WSSW000064
NY 17FFA31E1A371168 WF WF0300 WSSW000069
NY 180C667A1D3AEE28 WF WF0300 WSSW000085
NY 1822D69C1D9BF47D WF WF0300 WSSW000086
NY 181D33200B9EAFF6 WF WF0300 WSSW000089
NY 17F01BA30CDEFD01 WF WF0310 WSSW000043
NY 17F6B7C414880E8C WF WF0310 WSSW000046
NY 17E08AB604CCD574 WF WF0310 WSSW000064
NY 1806608116F7B849 WF WF0310 WSSW000069
NY 17F775790920F1A2 WF WF0310 WSSW000077
NY 180C667E044AA0F0 WF WF0310 WSSW000085
NY 181D333212EC01EA WF WF0310 WSSW000089
NY 17F0120818D71E36 WF WF0320 WSSW000043
NY 17F6B7C50812EB73 WF WF0320 WSSW000046
NY 17E08AC60AFB310F WF WF0320 WSSW000064
NY 18038E9A0164CFC1 WF WF0320 WSSW000069
NY 17F77574122CE0AC WF WF0320 WSSW000077
NY 180C668510AA7600 WF WF0320 WSSW000085
NY 181D3334036367CB WF WF0320 WSSW000089
NY 17F1F4F00D3B936D WF WF0350 WSSW000043
NY 17F6B7CB0D43627B WF WF0350 WSSW000046
NY 17E08B0410799D5C WF WF0350 WSSW000064
NY 18038E9C16053EE5 WF WF0350 WSSW000069
NY 17F7756C175C6118 WF WF0350 WSSW000077
NY 180C668F1F297930 WF WF0350 WSSW000085
NY 181D333C1BE0E1B1 WF WF0350 WSSW000089
NY 180184F516B11620 WF WF5410 WSSW000005
NY 17F5424F0E3C4DA1 WF WF5410 WSSW000043
NY 17F6B7E70A49CE6A WF WF5410 WSSW000046
NY 1806DFB013F87BBD WF WF5410 WSSW000069
NY 17EF4D760DD5EC6A WF WF5410 WSSW000073
NY 17F03A7E0B780DE0 WF WF5410 WSSW000074
NY 17F107CA1893BFF0 WF WF5410 WSSW000075
NY 17F892681E40DE49 WF WF5410 WSSW000077
NY 17F81DAC0E413DEF WF WF5410 WSSW000078
NY 1800ECCC0E288DB8 WF WF5410 WSSW000083
NY 1804B32804CC125E WF WF5410 WSSW000084
NY 1811DF49016C2500 WF WF5410 WSSW000085
NY 18250FC50DE7802F WF WF5410 WSSW000086
NY 181E44E302A4CCCF WF WF5410 WSSW000089
NY 181646700BE59260 WF WF5410 WSSW000090
NY 180BC02E0240FF58 WF WF5410 WSSW000091
NY 180FD8DB1475606E WF WF5410 WSSW000092
NY 15D532B813FF3C80 WF WF8010 19970515140836S101702A063893AWF8010
NY 15D5368918C3FE2D WF WF8010 19970515162454S101702A063893AWF8010
NY 15DF1AD70559923A WF WF8010 19970717145832S101702A065379AWF8010
NY 17ED9325083C45D7 WF YWF64CA WSSW00004357DEA0AA
NY 17F6878E1A421617 WF YWF64CA WSSW0000465829B0C2
NY 17E1A6F210B0D3D9 WF YWF64CA WSSW000064577A9CFA
NY 1803178B0D3FBDD7 WF YWF64CA WSSW00006958931268
NY 180A332D044BF7FF WF YWF64CA WSSW00008558CEB299
NY 18250EDA10EEAF8A WF YWF64CA WSSW00008659B00DFB
NY 18198EA9091BA94A WF YWF64CA WSSW000089594F9457
NY 17E972E002C3EC8F WF YWFCB02 WSSW00003857BC040B
NY 17F29E710C7EB572 WF YWFCB02 WSSW0000435808F0DA
NY 180660B80CB6185A WF YWFCB02 WSSW00006958AEA2AC
NY 180CAFFF08A04C4A WF YWFCB02 WSSW00008558E39EB2
NY 181993381EA5F596 WF YWFCB02 WSSW000089594FBA69MVS
NY 18276DE209737070 WF YWFCB02 WSSW00009959C3F210MVS
NY 182D67AB0731EA23 WF YWFCB02 WSSW00010059F604C2MVS
NY 183426890855F4AA WF YWFCB02 WSSW0001055A2E9AD7
NY 1834268F0517CA32 WF YWFCB02 WSSW0001055A2E9AD7MVS
NY 17F29E680D9BE978 WF YWFM537 WSSW0000435808F092
NY 17F6879202E7E765 WF YWFM537 WSSW0000465829B0E1
NY 18052B911F28B386 WF YWFM537 WSSW00006958A48155
NY 17EC7C221097E18D WF YWFM537 WSSW00007157D57C31
NY 17FEB52102C5D6FD WF YWFM537 WSSW000081586E4AEB
NY 180CAFFF1DEE1D8E WF YWFM537 WSSW00008558E39EB7
NY 181992D90B2A84CB WF YWFM537 WSSW000089594FB758MVS
NY 18273B0903C49A50 WF YWFM537 WSSW00009959C24789MVS
NY 182D678519607A65 WF YWFM537 WSSW00010059F6038CMVS
NY 1834276301104AED WF YWFM537 WSSW0001055A2EA204
NY 183427641BA304C7 WF YWFM537 WSSW0001055A2EA204MVS
NY 17F0195E064B09B1 WF YWFSWC WS8B000357
NY 1801B6CC00803A76 WF YWFSWC WSSW000005
NY 17F5424807BCCD23 WF YWFSWC WSSW000043
NY 17F6B7B80F6E842A WF YWFSWC WSSW000046
NY 1806DFC10F42CCE3 WF YWFSWC WSSW000069
NY 17EF4D9A118195B3 WF YWFSWC WSSW000073
NY 17F03AC71EEF4D75 WF YWFSWC WSSW000074
NY 17F107CB10B8DB9A WF YWFSWC WSSW000075
NY 17F8926C1A75F8F4 WF YWFSWC WSSW000077
NY 17F81DC012503B34 WF YWFSWC WSSW000078
NY 1800ECCB00F86846 WF YWFSWC WSSW000083
NY 1804B0430E72DE54 WF YWFSWC WSSW000084
NY 1811DFA102DD4450 WF YWFSWC WSSW000085
NY 18250FB111198E07 WF YWFSWC WSSW000086
NY 181E44EE166A3740 WF YWFSWC WSSW000089
NY 180BC05B11AD373C WF YWFSWC WSSW000091
NY 180FD8E5056D53DD WF YWFSWC WSSW000092
NY 182834FF04A794FE WF YWFSWC WSSW000104
NY 17EFF1AA191162DE WI YWI0087 TOFF00007657F28089
NY 17F7A62C0C9AB394 WI YWI0087 TOFF0000875833150E
NY 1804D0C01AC3D13F WI YWI0087 TOFF00008858A1871A
NY 1800E9A20699B9CE WI YWI0087 TOFF0000905880CA48
NY 180E172E1D4BF445 WI YWI0087 TOFF00009958EF63C0
NY 18038A70086E9E5C WI YWI0087 TOFF0001015896D63B
NY 181D5A3D0CCE3601 WI YWI0087 TOFF000109596F6A5DMVS
NY 1815CB9002222DA5 WI YWI0087 TOFF000111593004B5
NY 1828FDCA15B511F3 WI YWI0087 TOFF00011259D10C51MVS
NY 183B09F516A89508 WI YWI0087 TOFF0001225A68637AMVS
NY 17E19D331291BFE6 WI YWI0087 WS8B000313577A4B43
NY 1809433B02F33409 WI YWI0087 WS8B00042858C6D5CA
NY 1819BBA11374D8E4 WI YWI0087 WS8B00046859510C2E
AY 17CFE03A059375CC WI YWI5951 WS8I00015256E570B8
AY 17FF771B08CF35B5 WI YWI5951 WS8I0002415874A622
AY 1817AFC90F6EC510 WI YWI5951 WS8I000268593FE342
AY 18321BFB0A765B6C WI YWI5951 WS8I0003205A1D7B52
AY 18321BFE0061DD9F WI YWI5951 WS8I0003205A1D7B52MVS
AY 18330E6E17E9E911 WI YWI5951 WS8I0003435A256D39
AY 17CFE03A1B94E629 WI YWI5952 WS8I00015256E570BD
AY 17FF771C17B8DC79 WI YWI5952 WS8I0002415874A62F
AY 1817AFCA0E2031A5 WI YWI5952 WS8I000268593FE34B
AY 18321C03017AC1B3 WI YWI5952 WS8I0003205A1D7B91
AY 18321C0608073C7E WI YWI5952 WS8I0003205A1D7B91MVS
AY 18330E6F12CCC760 WI YWI5952 WS8I0003435A256D40
AY 17CFE03B0A9DBFEE WI YWI5953 WS8I00015256E570C2
AY 17FF771D1A1F33F8 WI YWI5953 WS8I0002415874A635
AY 1817AFCB135F1EEE WI YWI5953 WS8I000268593FE353
AY 18321C0B10F3220E WI YWI5953 WS8I0003205A1D7BD6
AY 18321C0F047F1754 WI YWI5953 WS8I0003205A1D7BD6MVS
AY 18330E7006B6D5EF WI YWI5953 WS8I0003435A256D44
NY 17CFE03C0048A772 WI YWI5954 WS8I00015256E570C7
AY 17FF771E1E75D8A9 WI YWI5954 WS8I0002415874A641
AY 1817AFCD04DE6BE3 WI YWI5954 WS8I000268593FE360
AY 18321C131CD549AE WI YWI5954 WS8I0003205A1D7C0C
AY 18321C180D39B292 WI YWI5954 WS8I0003205A1D7C0CMVS
AY 18330E7013DC72CB WI YWI5954 WS8I0003435A256D47
AY 17CFE03C1AFFBBE1 WI YWI5955 WS8I00015256E570CC
AY 17FF772008FA439C WI YWI5955 WS8I0002415874A64D
AY 1817AFCE0AE7D9E3 WI YWI5955 WS8I000268593FE368
AY 18321C20177E9087 WI YWI5955 WS8I0003205A1D7C47
AY 18321C231B6BAEC8 WI YWI5955 WS8I0003205A1D7C47MVS
AY 18330E701AAF0F8C WI YWI5955 WS8I0003435A256D49
AY 17CFE03D08400F20 WI YWI5956 WS8I00015256E570D2
AY 17FF772103D435E0 WI YWI5956 WS8I0002415874A652
AY 1817AFCF016D77C8 WI YWI5956 WS8I000268593FE371
AY 18321C2706DF01FA WI YWI5956 WS8I0003205A1D7C79
AY 18321C2A14DC6A36 WI YWI5956 WS8I0003205A1D7C79MVS
AY 18330E71096038CD WI YWI5956 WS8I0003435A256D4B
AY 17CFE03D1FA380A9 WI YWI5957 WS8I00015256E570D7
AY 17FF772411D19763 WI YWI5957 WS8I0002415874A65E
AY 1817AFD00A189CCD WI YWI5957 WS8I000268593FE37B
AY 18321C890BF8FB5B WI YWI5957 WS8I0003205A1D7FF7
AY 18321C8D0890A39C WI YWI5957 WS8I0003205A1D7FF7MVS
AY 18330E7108C72FCD WI YWI5957 WS8I0003435A256D4D
AY 17CFE03E100D3474 WI YWI5958 WS8I00015256E570DC
AY 17FF772503B19491 WI YWI5958 WS8I0002415874A666
AY 1817AFD102327F89 WI YWI5958 WS8I000268593FE383
AY 18321C910F99CEC1 WI YWI5958 WS8I0003205A1D8033
AY 18321C941B20AEFB WI YWI5958 WS8I0003205A1D8033MVS
AY 18330E710C4DE25C WI YWI5958 WS8I0003435A256D50
AY 17CFE03F043D2EC7 WI YWI5959 WS8I00015256E570E1
AY 17FF772510327044 WI YWI5959 WS8I0002415874A674
AY 1817AFD40663889E WI YWI5959 WS8I000268593FE39D
AY 18321C9A01B820C1 WI YWI5959 WS8I0003205A1D8082
AY 18321C9D02F84785 WI YWI5959 WS8I0003205A1D8082MVS
AY 18330E711B4C0B13 WI YWI5959 WS8I0003435A256D54
AY 17CFE03914019E4C WI YWI595A WS8I00015256E570B2
AY 17FF771A1CA86F80 WI YWI595A WS8I0002415874A61A
AY 1817AFC8039BE815 WI YWI595A WS8I000268593FE337
AY 18321BEE1FDE7A75 WI YWI595A WS8I0003205A1D7AEA
AY 18321BF1162B8558 WI YWI595A WS8I0003205A1D7AEAMVS
AY 18330E6E11748E96 WI YWI595A WS8I0003435A256D37
NN 165361EE15ACF46D WI YWIASL A06M002543
AY 17CFE0520FB13724 WI YWINS01 WS8I00015256E5718A
AY 17EC9B1F07A44FAD WI YWINS01 WS8I00022357D68018
AY 1801FBDB042EEB8B WI YWINS01 WS8I0002415889C6AA
AY 180C5F3E18D106B6 WI YWINS01 WS8I00026558E0F951
AY 181873E016605288 WI YWINS01 WS8I00026859464FB1MVS
AY 1827DB770637A060 WI YWINS01 WS8I00029559C78926MVS
AY 17CFE05212619DDC WI YWINS02 WS8I00015256E5718C
AY 17EC9B21089AB3BE WI YWINS02 WS8I00022357D68027
AY 1801FBDB0D9F9709 WI YWINS02 WS8I0002415889C6AC
AY 180C5F4503E746ED WI YWINS02 WS8I00026558E0F987
AY 181873E6099E5205 WI YWINS02 WS8I00026859464FB6MVS
AY 1827DB760EF31B6F WI YWINS02 WS8I00029559C7892FMVS
AY 17CFE053032A0468 WI YWINS03 WS8I00015256E57190
AY 17EC9B22189ED4CD WI YWINS03 WS8I00022357D68037
AY 1801FBDB141B4DD1 WI YWINS03 WS8I0002415889C6AE
AY 180C5F4A09013A95 WI YWINS03 WS8I00026558E0F9B1
AY 181873EF139796A9 WI YWINS03 WS8I00026859464FC0MVS
AY 1827DB781C745302 WI YWINS03 WS8I00029559C7893AMVS
AY 17CFE05313FE1157 WI YWINS04 WS8I00015256E57194
AY 17EC9B2502108AAC WI YWINS04 WS8I00022357D6804A
AY 1801FBDB1F85C719 WI YWINS04 WS8I0002415889C6B1
AY 17F90D131999EF75 WI YWINS04 WS8I000257583ED7CF
AY 180C5F4D11B59A92 WI YWINS04 WS8I00026558E0F9CC
AY 181873FA0E1AEF28 WI YWINS04 WS8I00026859464FC8MVS
AY 1827DB7E06EE4F7D WI YWINS04 WS8I00029559C78947MVS
AY 17CFE054014D9976 WI YWINS05 WS8I00015256E57198
AY 17EC9B260A49AD23 WI YWINS05 WS8I00022357D68057
AY 1801FBDC0CEF763B WI YWINS05 WS8I0002415889C6B3
AY 180C5F530F262C68 WI YWINS05 WS8I00026558E0F9FF
AY 181874030D3E0FB5 WI YWINS05 WS8I00026859464FD3MVS
AY 1827DB7E07F2440D WI YWINS05 WS8I00029559C78950MVS
AY 17CFE055174B3B60 WI YWINS06 WS8I00015256E571A6
AY 17EC9B28094B14DC WI YWINS06 WS8I00022357D68066
AY 1801FBE11D075D60 WI YWINS06 WS8I0002415889C6B8
AY 180C5F560F3847AD WI YWINS06 WS8I00026558E0FA18
AY 1818740D10396227 WI YWINS06 WS8I00026859464FE3MVS
AY 1827DB7F0FC48985 WI YWINS06 WS8I00029559C78959MVS
AY 17CFE05612B16A21 WI YWINS07 WS8I00015256E571A9
AY 17EC9B2916F8D2B0 WI YWINS07 WS8I00022357D68074
AY 1801FBE205570271 WI YWINS07 WS8I0002415889C6E7
AY 180C5F5C196B3B99 WI YWINS07 WS8I00026558E0FA4E
AY 181874160DC4BBFC WI YWINS07 WS8I00026859464FEFMVS
AY 1827DB7C156E829B WI YWINS07 WS8I00029559C78966MVS
AY 17CFE05613902EC9 WI YWINS08 WS8I00015256E571AD
AY 17EC9B2A1E7BDCE1 WI YWINS08 WS8I00022357D6807D
AY 1801FBE51C423FE4 WI YWINS08 WS8I0002415889C6E9
AY 180C5F6218774F92 WI YWINS08 WS8I00026558E0FA7F
AY 1818741E0D7F9B9E WI YWINS08 WS8I00026859464FFDMVS
AY 1827DB8009B71C5F WI YWINS08 WS8I00029559C7898DMVS
AY 17CFE05702EF0AE6 WI YWINS09 WS8I00015256E571B1
AY 17EC9B2C0C49719D WI YWINS09 WS8I00022357D6808B
AY 1801FBE70E71576C WI YWINS09 WS8I0002415889C707
AY 180C5F6A16EF5B6E WI YWINS09 WS8I00026558E0FABE
AY 1818742915D45182 WI YWINS09 WS8I0002685946500EMVS
AY 1827DB821DB68241 WI YWINS09 WS8I00029559C78995MVS
AY 17CFE0571E7F23ED WI YWINS10 WS8I00015256E571B5
AY 17EC9B2D0202DF67 WI YWINS10 WS8I00022357D68092
AY 1801FBE9060B1956 WI YWINS10 WS8I0002415889C714
AY 180C5F6D1BC6ED66 WI YWINS10 WS8I00026558E0FADA
AY 1818742F0E823CBF WI YWINS10 WS8I0002685946501DMVS
AY 1827DB830546529D WI YWINS10 WS8I00029559C789A1MVS
NN 160E854E06F2C4B6 WI YWISTIN 19980515094949S101702M000839AYWISTIN
NY 15299A4D0D85802E WK WK7140 19940519174927S101702A034385AWK7140
NY 152E2C0F0D3E8A0C WK WK7140 19940617193658S101702M000399AWK7140
NY 15315002191658A6 WK WK7140 19940707190603S101702M000457AWK7140
NY 15B8ADC50C7EE520 WK WK7160 19961115025420S101702M000661AWK7160
NY 15ED937A079717CF WK WK7160 19971017165350S101702M000724AWK7160
NY 15F2EE111CB6708A WK WK7160 19971120182636S101702M000725AWK7160
NY 155481B513EFB4C4 WK WK8320 19950216173938S101702M000536AWK8320
NY 1562CF4A047F148C WK WK8320 19950518S101702M000545AWK8320
NY 157D367104E7F570 WK WK8320 19951102S101702M000606AWK8320
NY 152E2936090A9106 WK YWK018A 19940617175335S101702M000399AYWK018A
NY 154CD3FD077E2D72 WK YWK018A 19941229210352S101702M000523AYWK018A
NY 15548095052968DE WK YWK018A 19950216165749S101702M000536AYWK018A
NY 157D35281996BE02 WK YWK018A 19951102S101702M000606AYWK018A
NY 152E29361B1B9CE4 WK YWK018C 19940617175335S101702M000399AYWK018C
NY 154CD3FD16D4C18A WK YWK018C 19941229210359S101702M000523AYWK018C
NY 155480960089624C WK YWK018C 19950216165754S101702M000536AYWK018C
NY 157D35281954CBAC WK YWK018C 19951102S101702M000606AYWK018C
NY 152E293613FB2262 WK YWK018D 19940617175336S101702M000399AYWK018D
NY 15230D4D0FDA8DEA WK YWK019A 19940408012536S101702M000391AYWK019A
NY 152E293D07EC1490 WK YWK019A 19940617175336S101702M000399AYWK019A
NY 153A1FB40C7534B4 WK YWK019A 19940901204355S101702M000463AYWK019A
NY 153C50CA1965CDCE WK YWK019A 19940915192823S101702M000465AYWK019A
NY 154CD40117BDD0FE WK YWK019A 19941229210426S101702M000523AYWK019A
NY 1554809715724046 WK YWK019A 19950216165801S101702M000536AYWK019A
NY 157D352211EDEC88 WK YWK019A 19951102S101702M000606AYWK019A
NY 159336D01D2F0658 WK YWK019A 19960321174238S101702A052874AYWK019A
NY 15BF5A860CA1B6AA WK YWK019A 19961227141204S101702M000749AYWK019A
NY 15C281F6172116CE WK YWK019A 19970116155229S101702M000715AYWK019A
NY 15C289171C461306 WK YWK019A 19970116200309S101702M000715AYWK019A
NY 15D6426E0F805263 WK YWK019A 19970522081337S101702Z312321AYWK019A
NY 15D766971C249544 WK YWK019A 19970529142348S101702M000773AYWK019A
NY 15E87BFD02BB791E WK YWK019A 19970915071921S101702Z333341AYWK019A
NY 15ED91F20BBF8F2A WK YWK019A 19971017155338S101702M000724AYWK019A
NY 15F2E9AF192A89D6 WK YWK019A 19971120155139S101702M000725AYWK019A
NY 160A0D4E15188AB6 WK YWK019A 19980416231839S101702M000838AYWK019A
NY 160A27E11AA26250 WK YWK019A 19980417151206S101702M000838AYWK019A
NY 152E297D031B19F0 WK YWKATRE 19940617180548S101702M000399AYWKATRE
NY 15B8AAE51C670F08 WK YWKATRE 19961115011453S101702M000661AYWKATRE
NY 15230DC105A18DB6 WK YWKLUBO 19940408012610S101702M000391AYWKLUBO
NY 152443080B96BD0A WK YWKLUBO 19940415175633S101702M000426AYWKLUBO
NY 15276C0313E71C24 WK YWKLUBO 19940505203528S101702M000394AYWKLUBO
NY 152E29A116DF3BA2 WK YWKLUBO 19940617180626S101702M000399AYWKLUBO
NY 152F1C740764EDA0 WK YWKLUBO 19940623185421S101702M000479AYWKLUBO
NY 15314FB106E16624 WK YWKLUBO 19940707185047S101702M000457AYWKLUBO
NY 15326CA60869D666 WK YWKLUBO 19940714204856S101702M000458AYWKLUBO
NY 1533810219DF3D8E WK YWKLUBO 19940721173958S101702M000459AYWKLUBO
NY 1536D50217A70978 WK YWKLUBO 19940811215857S101702M000461AYWKLUBO
NY 1539038217A75048 WK YWKLUBO 19940825190037S101702M000490AYWKLUBO
NY 153A1FCB0128194A WK YWKLUBO 19940901204338S101702M000463AYWKLUBO
NY 153C4FED10319F00 WK YWKLUBO 19940915185724S101702M000465AYWKLUBO
NY 153D6F8A1E470A7A WK YWKLUBO 19940922222855S101702M000497AYWKLUBO
NY 153F9FF21D79A22C WK YWKLUBO 19941006204333S101702M000466AYWKLUBO
NY 1541CE4E034E348C WK YWKLUBO 19941020175037S101702M000468AYWKLUBO
NY 15440279002CF798 WK YWKLUBO 19941103182227S101702M000469AYWKLUBO
NY 15451DB007982042 WK YWKLUBO 19941110191853S101702M000470AYWKLUBO
NY 154632D4079ECF94 WK YWKLUBO 19941117163613S101702M000471AYWKLUBO
NY 154636FA01B8CE70 WK YWKLUBO 19941117190715S101702M000471AYWKLUBO
NY 1547515518621B6C WK YWKLUBO 19941124193246S101702M000517AYWKLUBO
NY 15486AA51390266E WK YWKLUBO 19941201191819S101702M000472AYWKLUBO
NY 15497EF20F2DFBAE WK YWKLUBO 19941208160857S101702M000473AYWKLUBO
NY 154AA1E811DA3346 WK YWKLUBO 19941215214321S101702M000474AYWKLUBO
NY 154CD39114BB1BD2 WK YWKLUBO 19941229204640S101702M000523AYWKLUBO
NY 15548022014E59DA WK YWKLUBO 19950216164131S101702M000536AYWKLUBO
NY 155BB8B11A64E6B6 WK YWKLUBO 19950403S101702Z183880AYWKLUBO
NY 155D21E70606CCF2 WK YWKLUBO 19950412S101702M000541AYWKLUBO
NY 1562CCAF091A0732 WK YWKLUBO 19950518S101702M000545AYWKLUBO
NY 156EE48B0D5577D2 WK YWKLUBO 19950803S101702M000562AYWKLUBO
NY 156F77A1012A0986 WK YWKLUBO 19950807S101702Z202630AYWKLUBO
NY 156FF7DE023A92A6 WK YWKLUBO 19950810S101702Z203284AYWKLUBO
NY 1570E6F0116B7A98 WK YWKLUBO 19950816S101702Z204003AYWKLUBO
NY 157117D01C550C1C WK YWKLUBO 19950817S101702M000563AYWKLUBO
NY 1571B8221D7CF820 WK YWKLUBO 19950821S101702Z204586AYWKLUBO
NY 1572047F1266E6B4 WK YWKLUBO 19950823S101702Z205049AYWKLUBO
NY 157234AE0AF2D858 WK YWKLUBO 19950824S101702Z205219AYWKLUBO
NY 1572D2C4161C86D2 WK YWKLUBO 19950828S101702Z205521AYWKLUBO
NY 1572F91013E253CA WK YWKLUBO 19950829S101702Z205812AYWKLUBO
NY 15731FD10E2F5DB8 WK YWKLUBO 19950830S101702Z205812AYWKLUBO
NY 157352AA00959484 WK YWKLUBO 19950831S101702M000564AYWKLUBO
NY 157369250CB40BD8 WK YWKLUBO 19950901S101702Z205812AYWKLUBO
NY 1573EBC21FF01278 WK YWKLUBO 19950904S101702Z205812AYWKLUBO
NY 15740FBE1BEFB354 WK YWKLUBO 19950905S101702Z205812AYWKLUBO
NY 1574367903570626 WK YWKLUBO 19950906S101702Z205812AYWKLUBO
NY 15757D561D15D79C WK YWKLUBO 19950914S101702M000565AYWKLUBO
NY 157615851B5DFD5C WK YWKLUBO 19950918S101702Z208465AYWKLUBO
NY 1576947E1C5CEC06 WK YWKLUBO 19950921S101702Z208465AYWKLUBO
NY 15784B1706052C2A WK YWKLUBO 19951002S101702Z208465AYWKLUBO
NY 1578CC480073E7E8 WK YWKLUBO 19951005S101702M000566AYWKLUBO
NY 157D35861AFB94B0 WK YWKLUBO 19951102S101702M000606AYWKLUBO
NY 157E5CB11478658C WK YWKLUBO 19951110S101702M000609AYWKLUBO
NY 15807B901D590FA6 WK YWKLUBO 19951123S101702Z220705AYWKLUBO
NY 15819A1F108897F6 WK YWKLUBO 19951130S101702M000610AYWKLUBO
NY 1583CE661708D828 WK YWKLUBO 19951214S101702M000611AYWKLUBO
NY 15883682031B7C4A WK YWKLUBO 19960111S101702M000636AYWKLUBO
NY 159221760CC1CCC8 WK YWKLUBO 19960314201344S101702M000638AYWKLUBO
NY 159680411228A4B0 WK YWKLUBO 19960411152854S101702M000639AYWKLUBO
NY 159687A61FCF961A WK YWKLUBO 19960411200336S101702M000639AYWKLUBO
NY 159AE8020193BFD8 WK YWKLUBO 19960509161344S101702M000640AYWKLUBO
NY 159BA1F5002EEF7E WK YWKLUBO 19960514071832S101702Z248142AYWKLUBO
NY 159BD8DD1D7F15B2 WK YWKLUBO 19960515160311S101702M000686AYWKLUBO
NY 159E34DA071B830E WK YWKLUBO 19960530161041S101702M000689AYWKLUBO
NY 15A06D5609DD801E WK YWKLUBO 19960613192725S101702M000641AYWKLUBO
NY 15A4CCF1077CA010 WK YWKLUBO 19960711152018S101702M000657AYWKLUBO
NY 15AA50BA13A9AA44 WK YWKLUBO 19960815172257S101702M000658AYWKLUBO
NY 15AEB87A10D7B646 WK YWKLUBO 19960912180055S101702M000659AYWKLUBO
NY 15BD029414D62C9C WK YWKLUBO 19961212161508S101702M000662AYWKLUBO
NY 15BF5B201C831F72 WK YWKLUBO 19961227141203S101702M000749AYWKLUBO
NY 15C7098105898B82 WK YWKLUBO 19970214111257S101702M000716AYWKLUBO
NY 15CB4D7B1E778ED6 WK YWKLUBO 19970313143807S101702M000717AYWKLUBO
NY 15CB55680D691504 WK YWKLUBO 19970313192346S101702M000717AYWKLUBO
NY 15D0CE4E1AEEC7C2 WK YWKLUBO 19970417150052S101702M000718AYWKLUBO
NY 15D53537014A9362 WK YWKLUBO 19970515152437S101702M000719AYWKLUBO
NY 15D7673B0D306348 WK YWKLUBO 19970529142336S101702M000773AYWKLUBO
NY 15D99DF10AB82CF9 WK YWKLUBO 19970612164801S101702M000720AYWKLUBO
NY 15DCB7B5078F6FAA WK YWKLUBO 19970702102459S101702Z319251AYWKLUBO
NY 15DE004008CD7B17 WK YWKLUBO 19970710141830S101702M000721AYWKLUBO
NY 15E12285118DBA4C WK YWKLUBO 19970730125913S101702Z325019AYWKLUBO
NY 15E23FFE1EC34D1E WK YWKLUBO 19970806151636S101702Z325846AYWKLUBO
NY 15E3862F086264F6 WK YWKLUBO 19970814173305S101702M000722AYWKLUBO
NY 15E7E6CB1C51E32E WK YWKLUBO 19970911135336S101702M000723AYWKLUBO
NY 15ED92271DE4258E WK YWKLUBO 19971017155255S101702M000724AYWKLUBO
NY 15F2EA41089840FA WK YWKLUBO 19971120155133S101702M000725AYWKLUBO
NY 15F636C518F3708E WK YWKLUBO 19971211152904S101702M000726AYWKLUBO
NY 16001FE90EC6BEE8 WK YWKLUBO 19980212171239S101702M000836AYWKLUBO
NY 16036EC101548857 WK YWKLUBO 19980305180826S101702M000837AYWKLUBO
NY 160A0DF216E00150 WK YWKLUBO 19980416231747S101702M000838AYWKLUBO
NY 160A289012C37417 WK YWKLUBO 19980417151059S101702M000838AYWKLUBO
NY 160B40250812FA08 WK YWKLUBO 19980424142817S101702Z371584AYWKLUBO
NY 160E85DC07288951 WK YWKLUBO 19980515095019S101702M000839AYWKLUBO
NY 1612CD2F07087A62 WK YWKLUBO 19980611152859S101702M000840AYWKLUBO
NY 161750951D99044E WK YWKLUBO 19980710084245S101702M000841AYWKLUBO
NY 16175A61187B4FF2 WK YWKLUBO 19980710141605S101702M000841AYWKLUBO
NY 17D2334A129FEC6A WL WL7390 WSAW000059
NY 1805283C161200DE WL WL7390 WSAW000086
NY 182D5EEC1A184F46 WL WL8600 WSAW000104
NY 1823ECA910719939 WL WL8600 WSAW000106
NY 183860761FDB5AE0 WL WL8600 WSAW000110
NY 17F56ECC1B0822C6 WM WM0010 WSIN000032
NY 17EDDF7409950811 WM WM0010 WSIN000037
NY 17F705C90492978B WM WM0010 WSIN000038
NY 17B3DB0F1F6E5295 WN YWNOLOG FOND00002455FA71E6
NY 180A79F2186A754E WN YWNOLOG FOND00008558D0FF8B
NY 181B2A72136E3781 WN YWNOLOG FOND000087595D1286MVS
NY 182A870B12068D60 WN YWNOLOG FOND00009559DDEF94MVS
NY 1837BE561A816E6C WN YWNOLOG FOND0001065A4CBEB4MVS
NY 17DD6CB216335413 WP YWPL1P1 DBH000006857572669
NN 1749A5D304B2335D WP YWPL1W1 A06M024666527F73FE
NY 17DF3C1717251EBD WP YWPL2P1 DBH00000685766559B
NY 17FF3EC11AC577B8 WP YWPL2P1 DBH00000835872CD6B
NY 1826238C1C7385AB WP YWPL2P1 DBH000012659B91C6C
NY 1826239016CBB2EE WP YWPL2P1 DBH000012659B91C6CMVS
NY 17DB2DBA0ED5AE22 WP YWPL3P1 DBH000006857444F1D
NY 17FF3F201A2DDC44 WP YWPL3P1 DBH00000835872D08A
NY 1816795F0A71EED5 WP YWPL3P1 DBH00000965935B6F3MVS
NY 18261CDA0A061458 WP YWPL3P1 DBH000012659B8E6F0
NY 18261CDE07950EED WP YWPL3P1 DBH000012659B8E6F0MVS
NY 17DB2DBF0474465D WP YWPL4P1 DBH000006857444F20
NY 17FF3ECA0D6540C4 WP YWPL4P1 DBH00000835872CDB3
NY 18167A40199930C3 WP YWPL4P1 DBH00000965935BE8EMVS
NY 18261CDC1C7C693C WP YWPL4P1 DBH000012659B8E702
NY 18261CE00FEBB7F2 WP YWPL4P1 DBH000012659B8E702MVS
NY 17DB2DBF10EC2FCC WP YWPL5P1 DBH000006857444F23
NY 17FF3ED2069F17C7 WP YWPL5P1 DBH00000835872CDF6
NY 18167A4707EFEC51 WP YWPL5P1 DBH00000965935BEC1MVS
NY 18261CDF1597622C WP YWPL5P1 DBH000012659B8E717
NY 18261CE3147F6401 WP YWPL5P1 DBH000012659B8E717MVS
NY 18261CE20437A2AC WP YWPL6P1 DBH000012659B8E72D
NY 18261CE51D532C8E WP YWPL6P1 DBH000012659B8E72DMVS
NY 17DB2DC001B59FB6 WP YWPL7P1 DBH000006857444F2C
NY 17DB2DC006147AEA WP YWPL8P1 DBH000006857444F2F
NY 17FF3EEB12546D41 WP YWPL8P1 DBH00000835872CECA
NY 18167A5F12850DED WP YWPL8P1 DBH00000965935BF94MVS
NY 18261CE41CD92FDE WP YWPL8P1 DBH000012659B8E744
NY 18261CE8181C55AC WP YWPL8P1 DBH000012659B8E744MVS
NY 17DB2DC4176698B9 WP YWPL9P1 DBH000006857444F33
NY 17FF3EF300B6F933 WP YWPL9P1 DBH00000835872CF09
NY 18167A71057A84EC WP YWPL9P1 DBH00000965935C01FMVS
NY 18261CE71CB36FFE WP YWPL9P1 DBH000012659B8E75B
NY 18261CEB0F4782DA WP YWPL9P1 DBH000012659B8E75BMVS
NY 1826237100B3E7DF WP YWPLAP1 DBH000012659B91C65
NY 182623741F8D0072 WP YWPLAP1 DBH000012659B91C65MVS
NY 18261CAE136BADD5 WP YWPLBP1 DBH000012659B8E57E
NY 18261CB30438FBC2 WP YWPLBP1 DBH000012659B8E57EMVS
NY 17DD6DA1108246D3 WP YWPLEP1 DBH000006857572E3A
NY 17FF3EA91FD5AE5D WP YWPLEP1 DBH00000835872CCA2
NY 18261EF81B5873CF WP YWPLEP1 DBH000012659B8F8B5
NY 18261EFC0F07665A WP YWPLEP1 DBH000012659B8F8B5MVS
NY 17DB2DCA180393A6 WP YWPR1PX DBH000006857444F52
NY 17EBB4D700922058 WP YWPR1PX DBH000007557CEF455
NY 17FF39EE0C252AB5 WP YWPR1PX DBH00000835872A4ED
NY 181677E70B544640 WP YWPR1PX DBH00000965935A9F8MVS
NY 18261D080413902C WP YWPR1PX DBH000012659B8E86B
NY 18261D0B1414CBDD WP YWPR1PX DBH000012659B8E86BMVS
NY 17DB2DCF0FD69B19 WP YWPR1QX DBH000006857444F5A
NY 17FF3A040077B3CA WP YWPR1QX DBH00000835872A5A5
NY 1816780E1735FE5D WP YWPR1QX DBH00000965935ABFFMVS
NY 18261D091E965A44 WP YWPR1QX DBH000012659B8E877
NY 18261D0D1A3682C1 WP YWPR1QX DBH000012659B8E877MVS
NY 17A6872C1CA61887 WP YWPR2PX DBH0000023558AA4ED
NY 17DB2DCF18BB6738 WP YWPR2PX DBH000006857444F62
NY 17EBB4D70DC58958 WP YWPR2PX DBH000007557CEF456
NY 17FF3A170C603B54 WP YWPR2PX DBH00000835872A647
NY 181677EC047FB3F4 WP YWPR2PX DBH00000965935AA0CMVS
NY 18261D0D1F010506 WP YWPR2PX DBH000012659B8E89C
NY 18261D11084946C5 WP YWPR2PX DBH000012659B8E89CMVS
NY 17DB2DD008C545C4 WP YWPR3PX DBH000006857444F88
NY 17EBB4D70E598DA9 WP YWPR3PX DBH000007557CEF458
NY 17FF3A21106BA559 WP YWPR3PX DBH00000835872A69A
NY 181677EF14389850 WP YWPR3PX DBH00000965935AA2CMVS
NY 18261D2906D9453A WP YWPR3PX DBH000012659B8E97F
NY 18261D2D058ACF18 WP YWPR3PX DBH000012659B8E97FMVS
NY 17EBB4D71458D5A7 WP YWPR4PX DBH000007557CEF45A
NY 17FF3A2B011C386E WP YWPR4PX DBH00000835872A6ED
NY 181677F21D35936F WP YWPR4PX DBH00000965935AA4BMVS
NY 18261D300A5EC34F WP YWPR4PX DBH000012659B8E9A0MVS
NY 17DDACA0147957C5 WP YWPR5PX DBH000006857593EAD
NY 17EBB4D7195DA412 WP YWPR5PX DBH000007557CEF45B
NY 17FF3A341B359E5D WP YWPR5PX DBH00000835872A738
NY 181677FA19061F57 WP YWPR5PX DBH00000965935AB22MVS
NY 18261D301DB29A22 WP YWPR5PX DBH000012659B8E9C1
NY 18261D3408908EA2 WP YWPR5PX DBH000012659B8E9C1MVS
NY 17DB2DDA0BA04058 WP YWPR6PX DBH000006857444FA1
NY 17EBB4D71AFA7A67 WP YWPR6PX DBH000007557CEF45D
NY 17FF3A421E5D52CA WP YWPR6PX DBH00000835872A791
NY 1816780218D492A4 WP YWPR6PX DBH00000965935AB34MVS
NY 18261F5F1971CB6E WP YWPR6PX DBH000012659B8FB2E
NY 18261F6310F0DE76 WP YWPR6PX DBH000012659B8FB2EMVS
NY 17E4010514465F4F WP YWPR7PX DBH0000068578E578A
NY 17EC7A41115DC48A WP YWPR7PX DBH000007557D56C68
NY 17FF3A4C1ED36765 WP YWPR7PX DBH00000835872A809
NY 181678081C27A2FD WP YWPR7PX DBH00000965935ABE2MVS
NY 18261F6919051FCE WP YWPR7PX DBH000012659B8FB4B
NY 18261F6E0B52B762 WP YWPR7PX DBH000012659B8FB4BMVS
NY 17DB2DC506334F0D WP YWPRAPX DBH000006857444F3A
NY 17EC7A390B5BA615 WP YWPRAPX DBH000007557D56C23
NY 17FF39781B9ECCB1 WP YWPRAPX DBH00000835872A114
NY 1816415B183189F2 WP YWPRAPX DBH00000965933E137MVS
NY 18262040096BEAE2 WP YWPRAPX DBH000012659B90365
NY 1826204404A2E54E WP YWPRAPX DBH000012659B90365MVS
NY 17DB2DC41977C9A9 WP YWPRBPX DBH000006857444F3E
NY 17EC9F6D0ADF577A WP YWPRBPX DBH000007557D6A43E
NY 17FF39730E410F4B WP YWPRBPX DBH00000835872A0E8
NY 1816779710B19535 WP YWPRBPX DBH00000965935A7D3MVS
NY 18261F391CC1A8B0 WP YWPRBPX DBH000012659B8FA95MVS
NY 17C75E6E18606571 WP YWPRCBX DBH0000054569E140F
NY 17DB2DC41E0EE810 WP YWPRCPX DBH000006857444F41
NY 17ECA9601425E493 WP YWPRCPX DBH000007557D6F7AF
NY 17FF39CA01B28C8A WP YWPRCPX DBH00000835872A3BB
NY 1816779A0BD761EC WP YWPRCPX DBH00000965935A7F9MVS
NY 18261F3A033B222E WP YWPRCPX DBH000012659B8FAB2
NY 18261F3D1AE3565B WP YWPRCPX DBH000012659B8FAB2MVS
NY 17DB2DC8147A27B9 WP YWPRDPX DBH000006857444F45
NY 17EBB4D702F5D058 WP YWPRDPX DBH000007557CEF450
NY 17FF39DD07C5186D WP YWPRDPX DBH00000835872A45F
NY 181677E40970F431 WP YWPRDPX DBH00000965935A9DDMVS
NY 18261F3E033106D9 WP YWPRDPX DBH000012659B8FAC3
NY 18261F411C58204A WP YWPRDPX DBH000012659B8FAC3MVS
NY 17E0FD0906033B82 WP YWPU1P5 DBH000006857750BA6
NY 17FFB0C613A55FDE WP YWPU1P5 DBH0000083587689E2
NY 1815D73F0BB52A99 WP YWPU1P5 DBH000009659306727MVS
NY 18261D820039E71F WP YWPU1P5 DBH000012659B8EC6A
NY 18261D86047413E6 WP YWPU1P5 DBH000012659B8EC6AMVS
NY 17DE58CC1B7B0615 WP YWPXB1A DBH0000068575EE2A7
NY 17DE58DC0CF6834F WP YWPXB1B DBH0000068575EE2E4
NY 17DE58D9139CB188 WP YWPXB1C DBH0000068575EE2D9
NY 17DE58D61BBB0880 WP YWPXB1D DBH0000068575EE2D0
NY 17DE58D40BA30EBC WP YWPXB1E DBH0000068575EE2C6
NY 17DE58D2019BE8C4 WP YWPXB1F DBH0000068575EE2BB
NY 17DE58CF0E073F7C WP YWPXB1G DBH0000068575EE2B1
NY 17DE58E10335F2F5 WP YWPXB1H DBH0000068575EE2F7
NY 17DE58DE1A1DABD3 WP YWPXB1I DBH0000068575EE2ED
NY 176667C50ACD815E WP YWPXBAA A06M0264235370B066
NY 176667C812D9D466 WP YWPXBAB A06M0264235370B182
NY 176667C7006B7E9A WP YWPXBAC A06M0264235370B10A
NY 176667CD056A3D7A WP YWPXBAD A06M0264235370B1E6
NY 176667CA09A86408 WP YWPXBAE A06M0264235370B1AE
NY 176667D51FED37D2 WP YWPXBBA A06M0264235370B3E8
NY 176667DB1B6DE180 WP YWPXBBB A06M0264235370B45A
NY 176667D91CF59238 WP YWPXBBC A06M0264235370B429
NY 176667DF01C4917E WP YWPXBBD A06M0264235370B547
NY 176667DD12019CAC WP YWPXBBE A06M0264235370B480
NY 17677F030A5B5E3D WP YWPXBCA A06M0263755379E4F0
NY 17677F0402A543E4 WP YWPXBCB A06M0263755379E4FF
NY 17677F04164F7472 WP YWPXBCC A06M0263755379E503
NY 17677F0503D92548 WP YWPXBCD A06M0263755379E50A
NY 17677F051A7D55E6 WP YWPXBCE A06M0263755379E510
NY 176667EC065E104D WP YWPXBDA A06M0264235370B94F
NY 176667E91C8CB4AF WP YWPXBDB A06M0264235370B8E2
NY 176667E8023144DC WP YWPXBDC A06M0264235370B829
NY 176667F41DCB23A5 WP YWPXBDF A06M0264235370B9D2
NY 176667F21F858384 WP YWPXBDG A06M0264235370B9BD
NY 17677F0816E5617A WP YWPXBEA A06M0263755379E52A
NY 17677F09081A7400 WP YWPXBEB A06M0263755379E52F
NY 17677F0913FCC1B2 WP YWPXBEC A06M0263755379E534
NY 17677F0A067E8438 WP YWPXBED A06M0263755379E538
NY 17677F0A1D900EA0 WP YWPXBEE A06M0263755379E53D
NY 17677F0B0C4BCB5E WP YWPXBEF A06M0263755379E540
NY 17677F0B1D18DF9B WP YWPXBEG A06M0263755379E545
NY 17677F0D0ACA9B8E WP YWPXBGA A06M0263755379E553
NY 17677F0D1E74FB7E WP YWPXBGB A06M0263755379E557
NY 17677F0E0AC23084 WP YWPXBGC A06M0263755379E55B
NY 17677F0F0B287ADC WP YWPXBGE A06M0263755379E562
NY 1766680C052BB1AD WP YWPXBIA A06M0264235370BB01
NY 1766680A04B3F2D0 WP YWPXBIB A06M0264235370BAE8
NY 1766680E06DEDCCD WP YWPXBIC A06M0264235370BB24
NY 17666810047293AC WP YWPXBID A06M0264235370BB38
NY 1766681704F799A5 WP YWPXBIE A06M0264235370BB6C
NY 17DE58AA1C28E51D WP YWPXBJA DBH0000068575EE13F
NY 17DE58B718E53B10 WP YWPXBJB DBH0000068575EE18E
NY 17DE58B50A1FB690 WP YWPXBJC DBH0000068575EE17C
NY 17DE58B3042C2DBF WP YWPXBJD DBH0000068575EE163
NY 17DE58B01B612602 WP YWPXBJE DBH0000068575EE157
NY 17DE58AD1EED6557 WP YWPXBJF DBH0000068575EE14B
NY 17DE58BF09680E52 WP YWPXBJG DBH0000068575EE1D9
NY 17DE58BC1B77FD45 WP YWPXBJH DBH0000068575EE1C6
NY 17DE58BA0C9FFF2C WP YWPXBJI DBH0000068575EE1AA
NY 1766682E02285930 WP YWPXBKA A06M0264235370BC46
NY 1766683319EBD2DE WP YWPXBKB A06M0264235370BC7D
NY 176668311EDBCE89 WP YWPXBKC A06M0264235370BC67
NY 1766682F1F71DCCD WP YWPXBKD A06M0264235370BC5C
NY 176668381784073C WP YWPXBKE A06M0264235370BCA4
NY 176668360B5FFEA1 WP YWPXBKF A06M0264235370BC96
NY 176B21CE0429370D WP YWPXBLC A06M0263755398650C
NY 1766684002E8C360 WP YWPXBMA A06M0264235370BCCF
NY 1766684811B3EA2C WP YWPXBMB A06M0264235370BD02
NY 1766684600573C01 WP YWPXBMC A06M0264235370BCF8
NY 176668440039D075 WP YWPXBMD A06M0264235370BCE8
NY 1766684C0B049E2F WP YWPXBME A06M0264235370BD2A
NY 17677F190EC1C916 WP YWPXBNA A06M0263755379E5B7
NY 17677F191A69DB9F WP YWPXBNB A06M0263755379E5BB
NY 17677F1A08169C99 WP YWPXBNC A06M0263755379E5BF
NY 17677F2B0414B5C9 WP YWPXBND A06M0263755379E63F
NY 17677F2B0BF9A7A6 WP YWPXBNE A06M0263755379E649
NY 17677F2C01AD43AE WP YWPXBNF A06M0263755379E64D
NY 17677F2B1BBE6B06 WP YWPXBNG A06M0263755379E652
NY 17677F2C1D20406D WP YWPXBNH A06M0263755379E656
NY 17677F2D08C3375F WP YWPXBNI A06M0263755379E65B
NY 17677F2D13F04D46 WP YWPXBOA A06M0263755379E660
NY 17677F2E0ACA2E4A WP YWPXBOB A06M0263755379E665
NY 17677F2E1BD65360 WP YWPXBOC A06M0263755379E669
NY 17677F32184B5435 WP YWPXBPA A06M0263755379E68B
NY 17677F340A6649C9 WP YWPXBPB A06M0263755379E690
NY 17677F3405AC5750 WP YWPXBPC A06M0263755379E696
NY 17677F341D17A3E0 WP YWPXBPD A06M0263755379E69D
NY 17677F3518790026 WP YWPXBPE A06M0263755379E6A2
NY 17677F3613E3A871 WP YWPXBPF A06M0263755379E6A8
NY 17677F370DB1C71A WP YWPXBPG A06M0263755379E6AC
NY 17677F371BF57588 WP YWPXBPH A06M0263755379E6B1
NY 17677F371FB07E30 WP YWPXBPI A06M0263755379E6B5
NY 17677F5118A73166 WP YWPXBQA A06M0263755379E6B9
NY 17677F511144EF92 WP YWPXBQB A06M0263755379E78F
NY 17677F5211695276 WP YWPXBQC A06M0263755379E793
NY 17677F53084CA462 WP YWPXBQD A06M0263755379E797
NY 17677F530279B510 WP YWPXBQE A06M0263755379E79C
NY 17677F53147291AE WP YWPXBQF A06M0263755379E7A0
NY 17677F540684C9B0 WP YWPXBQG A06M0263755379E7A5
NY 176668541D0BF1D8 WP YWPXBTA A06M0264235370BD89
NY 176668530B62F5C0 WP YWPXBTB A06M0264235370BD79
NY 176668571E4D6A89 WP YWPXBTC A06M0264235370BD99
NY 176668560ED88EB2 WP YWPXBTD A06M0264235370BD90
NY 1766685D0DBD9AA6 WP YWPXBTE A06M0264235370BDF5
NY 1766686918093289 WP YWPXBUC A06M0264235370BE52
NY 17A5948E1DE7E1E3 WP YWPXBXA DBH00000195582B1B3
NY 17A5949306D849F0 WP YWPXBXB DBH00000195582B1DA
NY 17A5949600865104 WP YWPXBXC DBH00000195582B1F3
NY 17A59499034EAF75 WP YWPXBXD DBH00000195582B20D
NY 17A594B7167CDA05 WP YWPXBXE DBH00000195582B30B
NY 176780710D2E1F59 WP YWPXBYC A06M0263755379E9BB
NY 1767819309CF9D24 WP YWPYBAA A06M0263755379FA7F
NY 1767819317D00B12 WP YWPYBAB A06M0263755379FA83
NY 176781940D2CF56C WP YWPYBAC A06M0263755379FA86
NY 176781941A485D20 WP YWPYBAD A06M0263755379FA8A
NY 17678195081EC1BE WP YWPYBAE A06M0263755379FA8F
NY 176781951ABBE6B1 WP YWPYBAF A06M0263755379FA93
NY 1767819607996EDB WP YWPYBAG A06M0263755379FA97
NY 176781D3033AD13F WP YWPYBCA A06M0263755379FC8E
NY 176781D30416D5BC WP YWPYBCB A06M0263755379FC94
NY 176781D3189E005D WP YWPYBCC A06M0263755379FC9A
NY 176781D40EDA0F82 WP YWPYBCD A06M0263755379FCA0
NY 176782321E54E08C WP YWPYBCE A06M0263755379FE40
NY 1793D8DF18992804 WP YWPYBDC DBH000002254EDE1AB
NY 1793D8E301FD62E2 WP YWPYBDD DBH000002254EDE1C2
NY 17F3B503051A38CD WQ WQ5950 CUBE000056
NY 17E9811A0494004C WQ WQ5950 CUBE000058
NY 17F906C31C5D9188 WQ WQ5950 CUBE000063
NY 1801443915349BEB WQ WQ5950 CUBE000066
NY 18061B6D09DBF6CB WQ WQ5950 CUBE000067
NY 17F65C6E00EFD5FB WQ WQ5950 CUBE000069
NY 17FAEB0018EA1848 WQ WQ5950 CUBE000075
NY 181163D20DF8717D WQ WQ5950 CUBE000081
NY 181691080B96EE2E WQ WQ5950 CUBE000083
NY 180990B30F056120 WQ WQ5950 CUBE000090
NY 181E25A21091CDA5 WQ WQ5950 CUBE000092
NY 182CE2A40D4028A3 WQ WQ5950 CUBE000094
NY 18134B330222F350 WQ WQ5950 CUBE000100
NY 181463E219509849 WQ WQ5950 CUBE000101
NY 181579F50ABB256D WQ WQ5950 CUBE000103
NY 18250D8F1F9833E3 WQ WQ5950 CUBE000112
NY 1826C38D0714BA79 WQ WQ5950 CUBE000114
NY 1833049C1B0B6BC4 WQ WQ5950 CUBE000116
NY 1839AA5609FB4E83 WQ WQ5950 CUBE000118
NY 17F9AD6105CC58CB WQ WQ6000 CUBE000063
NY 180146690EADF0E6 WQ WQ6000 CUBE000066
NY 18082310065D8816 WQ WQ6000 CUBE000067
NY 181051CF09ECC1F2 WQ WQ6000 CUBE000081
NY 18081F360B380606 WQ WQ6000 CUBE000084
NY 181D5F1F1F6585FE WQ WQ6000 CUBE000092
NY 182CE8D206E65CF4 WQ WQ6000 CUBE000094
NY 18239A341EBABCCF WQ WQ6000 CUBE000112
NY 1826C38E09922368 WQ WQ6000 CUBE000114
NY 183304A108676675 WQ WQ6000 CUBE000116
NY 18399F4811F221D2 WQ WQ6000 CUBE000118
NY 17E30CF01534A1D6 WQ WQ6010 CUBE000052
NY 17F3B50B1E0E4DD7 WQ WQ6010 CUBE000056
NY 17F9B2EE0CCA4038 WQ WQ6010 CUBE000063
NY 180071570E7DB0A4 WQ WQ6010 CUBE000066
NY 18061B721944490E WQ WQ6010 CUBE000067
NY 181051CE1BF3384D WQ WQ6010 CUBE000081
NY 181B4F910E6F30F1 WQ WQ6010 CUBE000092
NY 182C9CD907867171 WQ WQ6010 CUBE000094
NY 183B07F30EDA5573 WQ WQ6010 CUBE000118
NY 17D25B9612B1B12D WQ YWQ1101 CUBE00003556FA509B
NY 17EDE3BB1AEB52EE WQ YWQ1101 CUBE00005657E144AF
NY 17C2D3A01732FD37 WQ YWQ1501 CUBE0000305677F9BE
NY 17EDE3C11085328C WQ YWQ1501 CUBE00005657E144E3
NY 17C2D1A30E88BF6E WQ YWQ1502 CUBE0000305677E85A
NY 17EDE3CA01C69FC1 WQ YWQ1502 CUBE00005657E14527
NY 180615C4185D4CA5 WQ YWQ4101 CUBE00006758AC2DF1
NY 17F067371537606D WQ YWQ4501 CUBE00005657F65A9E
NY 181B4E770E6BAE39 WQ YWQ4501 CUBE000092595E40B8
NY 182C9C3A09BCAD0A WQ YWQ4501 CUBE00009459EF6858
NY 183862E3172CD76D WQ YWQ4501 CUBE0001185A52231D
NY 183F488B0039A181 WQ YWQ4501 CUBE0001295A8BFE05
NY 183E5BC11F440D44 WQ YWQ4501 CUBE0001325A843C30
NY 17F067380130CC34 WQ YWQ4502 CUBE00005657F65AA1
NY 18038DF90850E6F0 WQ YWQ4502 CUBE0000675896F3D8
NY 181028B91480D8A0 WQ YWQ4502 CUBE0000815900BDEA
NY 181B4E7507B9AAFC WQ YWQ4502 CUBE000092595E40BC
NY 182C9C3B0558C263 WQ YWQ4502 CUBE00009459EF685F
NY 183862E41EC90A86 WQ YWQ4502 CUBE0001185A522322
NY 17F29ACB07C2020D WQ YWQ5601 CUBE0000565808D243
NY 18038DFC1FC81664 WQ YWQ5601 CUBE0000675896F3F9
NY 181028831F575312 WQ YWQ5601 CUBE0000815900BC28
NY 181B4E76128D418C WQ YWQ5601 CUBE000092595E40C8
NY 182C9C1D0C4880A2 WQ YWQ5601 CUBE00009459EF6729
NY 183862EB1B19A44B WQ YWQ5601 CUBE0001185A522360
NY 17E51BD21F22A4AD WQ YWQBERI CUBE00005257979BE0
NY 17EF490C0A28E38E WQ YWQBERI CUBE00005657ECFA12
NY 1800C81D11683C06 WQ YWQBERI CUBE000066587FB128
NY 18052CEA0DA0D14B WQ YWQBERI CUBE00006758A48C9B
NY 181028540E38A2FE WQ YWQBERI CUBE0000815900BA99
NY 181B4DB31EC811AD WQ YWQBERI CUBE000092595E3A2E
NY 182C9C2C1D927AFD WQ YWQBERI CUBE00009459EF6722
NY 181BBF151880ED2C WQ YWQBERI CUBE0001085961F18D
NY 182C4BBA13FCFE6A WQ YWQBERI CUBE00011159ECC4D5
NY 183862A30B47D8D5 WQ YWQBERI CUBE0001185A5220FD
NY 183F488E06E81464 WQ YWQBERI CUBE0001295A8BFDDF
NY 17CAD8F41EC935FE WQ YWQEVEO CUBE00003256BB4250
NY 17D2B60305D6060B WQ YWQEXCP CUBE00003956FD4720
NY 17EEFD6302059005 WQ YWQEXCP CUBE00005657EA7F5E
NY 181B4DE5099E5909 WQ YWQEXCP CUBE000092595E3C05
NY 183862B0087A03B3 WQ YWQEXCP CUBE0001185A52216F
NY 17A0E53601EDEA20 WQ YWQREPI CUBE000003555B64DD
NY 178C43A70B7CFC02 WU YWUGBUB TU0000001154AE45DF
NY 175FF19F1E28FCE5 XP XP7200 A19R002479
NY 17EEB242152CBDE1 YX YXA171C TOFF00007657E8092C
NY 1804D5EF0CE1C48F YX YXA171C TOFF00008858A1B300
NY 1801AAA403D464C3 YX YXA171C TOFF00009858871D68
NY 180AAC5C0209D06B YX YXA171C TOFF00010858D2AB30
NY 181C3B5D0C377BD8 YX YXA171C TOFF0001095966040A
NY 1823C46F12920728 YX YXA171C TOFF00011759A53A43
NY 154BFD2C19813DEC YX YXBF222 19941224125703S101702Z170599AYXBF222
NY 158D5C361373AE02 YX YXBF222 19960213S101702Z233885AYXBF222
NY 158ECF611F1247BE YX YXBF222 19960222171023S101702A052072AYXBF222
NY 15D0CDD90A19A4C2 YX YXBF222 19970417150642S101702M000718AYXBF222
NY 15E38C330477CE60 YX YXBF222 19970814212651S101702A065276AYXBF222
NY 153C50261C9EE968 YX YXBF224 19940915190525S101702M000465AYXBF224
NY 156C85AD11D7650C YX YXBF224 19950719S101702Z200752AYXBF224
NY 157118761441F602 YX YXBF224 19950817S101702A046685AYXBF224
NY 15F634ED05A71B7A YX YXBF224 19971211145230S101702A068424AYXBF224
NY 15264E490291F352 YX YXNKSIC 19940428181933S101702A033825AYXNKSIC
NY 15A5E2111D883CF6 YX YXNKSIC 19960718123939S101702A056012AYXNKSIC
NY 1730D0251C726E5D YX YXWB011 A06M02422851AF2DED
NY 18191FBF13217948 YX YXWB011 WSTS000055594BF1D5
NY 18191FC10C8F9119 YX YXWB011 WSTS000055594BF1D5MVS
NY 1730D0270D76950C YX YXWB021 A06M02422851AF2DFE
NY 18191FBE00F669D5 YX YXWB021 WSTS000055594BF1C2MVS
NY 1730D01A0AB15D42 YX YXWB116 A06M02422851AF2D8E
NY 18191FBA1E7C88EA YX YXWB116 WSTS000055594BF1B0MVS
NY 1730D02D1058CD31 YX YXWB231 A06M02422851AF2E38
NY 18191FBA1F2BB85E YX YXWB231 WSTS000055594BF1B9
NY 18191FBC06497F15 YX YXWB231 WSTS000055594BF1B9MVS
NY 183577E11A225F8F YX YXWB231 WSTS0000615A39A8B6
NY 183577E21429B53C YX YXWB231 WSTS0000615A39A8B6MVS
NY 156982C61B3CF9CE YX YXWB52M 19950630S101702Z197290AYXWB52M
NY 1569843017D970EC YX YXWB52M 19950630S101702Z197319AYXWB52M
NY 156984D415B81DB4 YX YXWB52M 19950630S101702Z197327AYXWB52M
NY 1569853E04BBC8C6 YX YXWB52M 19950630S101702Z197332AYXWB52M
NY 156A84010993F178 YX YXWB52M 19950706S101702A045845AYXWB52M
NY 156A813707B32DAE YX YXWB52M 19950706S101702Z198507AYXWB52M
NY 156BC4471C8973A0 YX YXWB52M 19950714S101702Z200133AYXWB52M
NY 156CB19113255A84 YX YXWB52M 19950720S101702A046231AYXWB52M
NY 156D558E15CAA1D6 YX YXWB52M 19950724S101702Z201292AYXWB52M
NY 156EE58A17225662 YX YXWB52M 19950803S101702A046454AYXWB52M
NY 157118AE1F458302 YX YXWB52M 19950817S101702A046882AYXWB52M
NY 15AEB8D707346442 YY AV8760 19960912182612S101702M000659AAV8760
NY 15E3ACE2172482D2 YY EV0520 19970815165403S101702A066076AEV0520
NY 15F632B20D501D42 YY EV0520 19971211133228S101702A068862AEV0520
NY 16059A6604EBF508 YY EV0520 19980319140102S101702A070940AEV0520
NY 157B014C12699D0A YY KD5020 19951019S101702M000621AKD5020
NN 15562E180C4345A0 YY LC5000 19950227091355S101702Z178899ALC5000
NN 15562FBE083CCC0C YY LC5000 19950227101253S101702A042491ALC5000
NN 15AD9AF51B9DBCC8 YY RR7240 19960905155311S101702M000711ARR7240
NY 15CB494B0CE2ECBA YY RR7240 19970313122849S101702A061790ARR7240
NN 15FF2F4C16BF00A4 YY YECSAS 19980206175324S101702A070225AYECSAS
NN 160041540F3D2242 YY YECSAS 19980213132029S101702A070420AYECSAS
NN 160484C51A2027F0 YY YECSAS 19980312162539S101702A070997AYECSAS
NN 1604875B02B0189E YY YECSAS 19980312175709S101702A070997AYECSAS
NN 16164212086E9087 YY YECSAS 19980703152436S101702A073255AYECSAS
NY 15A5E21203991050 YY YNKSICB 19960718123939S101702A056012AYNKSICB
NY 15DE003D14449A06 YY YYAKDAT 19970710142418S101702M000721AYYAKDAT
NY 1612CD4B01121012 YY YYAKDAT 19980611153615S101702M000840AYYAKDAT
NY 161750B801C3D872 YY YYAKDAT 19980710084846S101702M000841AYYAKDAT
NY 161759F605B39914 YY YYAKDAT 19980710142111S101702M000841AYYAKDAT
NY 1579E8A507B33DBC YY YYCXCR 19951012S101702A048616AYYCXCR
NY 157C19171896808E YY YYCXCR 19951026S101702A048908AYYCXCR
NY 15819B92091631CE YY YYCXCR 19951130S101702A049675AYYCXCR
NY 1583CA8712E92BB2 YY YYCXCR 19951214S101702A050270AYYCXCR
NY 15933060108F0298 YY YYCXCR 19960321135238S101702A052860AYYCXCR
NY 1597970E110AC44A YY YYCXCR 19960418135815S101702A053388AYYCXCR
NY 15CB46D41C9F99F0 YY YYCXCR 19970313110131S101702Z301064AYYCXCR
NY 15E386480B6CC48A YY YYCXCR 19970814175447S101702M000722AYYCXCR
NY 15E4C55D0FF80394 YY YYCXCR 19970822161513S101702A066301AYYCXCR
NY 15EE7EB31D3AD2DA YY YYCXCR 19971023131100S101702A067654AYYCXCR
NY 15FF016103E8C46E YY YYCXCR 19980205143017S101702A070192AYYCXCR
NY 16024C400BA854E6 YY YYCXCR 19980226131415S101702A070718AYYCXCR
NY 1617512D1257AAD7 YY YYCXOLD 19980710085313S101702A073727AYYCXOLD
NY 156617A60AC0705E YY YYDAISF 19950608S101702M000546AYYDAISF
NY 1568502B1DAE0586 YY YYDAISF 19950622S101702M000590AYYDAISF
NY 15921AC5035C67B4 YY YYDAISF 19960314161501S101702M000666AYYDAISF
NY 1597995A10CC8BE4 YY YYDAISF 19960418152010S101702M000680AYYDAISF
NY 159BD4680706D1FA YY YYDAISF 19960515132403S101702A054107AYYDAISF
NY 15AEB4711794B942 YY YYDAISF 19960912154821S101702A056992AYYDAISF
NY 15CC680F07443E68 YY YYDAISF 19970320153356S101702M000778AYYDAISF
NY 15AFF02C1857EE2E YY YYDAISM 19960920121001S101702Z267171AYYDAISM
NY 15B10A37169313E8 YY YYDAISM 19960927122508S101702Z268064AYYDAISM
NY 15B17CD0130D1CB0 YY YYDAISM 19960930084648S101702Z268203AYYDAISM
NY 15B18CE51F6372EA YY YYDAISM 19960930182222S101702Z268425AYYDAISM
NY 15B4563C0347E728 YY YYDAISM 19961018115328S101702M000660AYYDAISM
NY 15CC68101AB83382 YY YYDAISM 19970320153356S101702M000778AYYDAISM
NY 15D534E11F737160 YY YYDAISM 19970515152456S101702M000719AYYDAISM
NY 15D6F0151856BA32 YY YYDAISM 19970526154815S101702Z312955AYYDAISM
NY 15ED91FB0E701E02 YY YYDAISM 19971017155755S101702M000724AYYDAISM
NY 15F6363B0A278DF0 YY YYDAISM 19971211153706S101702M000726AYYDAISM
NY 15FBDBA91BC0D8BC YY YYDAISM 19980116135024S101702M000835AYYDAISM
NY 17C8CBAC06E54B3B YY YYDB2FK TOFF00004856AA0B30
NY 17EE2A8D130CEC43 YY YYDB2FK TOFF00007657E396C1
NY 181A0E0913151E72 YY YYDB2FK TOFF0001095953C05BMVS
NY 182954880499454A YY YYDB2FK TOFF00011259D3E46AMVS
NY 152303611A41576E YY YYDEAIS 19940407192650S101702A032805AYYDEAIS
NY 156617A500833F8C YY YYDEAIS 19950608S101702M000546AYYDEAIS
NY 1568502B18E0EAF8 YY YYDEAIS 19950622S101702M000590AYYDEAIS
NY 1578A07F16314AF8 YY YYDEAIS 19951004S101702Z211189AYYDEAIS
NY 15921AC50232CE3E YY YYDEAIS 19960314161502S101702M000666AYYDEAIS
NY 15979958131859DC YY YYDEAIS 19960418152010S101702M000680AYYDEAIS
NY 159BD46711090FCE YY YYDEAIS 19960515132404S101702A054107AYYDEAIS
NY 15CC680F182B0436 YY YYDEAIS 19970320153357S101702M000778AYYDEAIS
NY 150ACAC51B00900A YY YYDEPAY
NY 1522FC7D054BE556 YY YYDEPAY 19940407150944S101702A032852AYYDEPAY
NY 1522FF0D18A98A1E YY YYDEPAY 19940407165401S101702A032852AYYDEPAY
NY 15252EC413FC8A94 YY YYDEPAY 19940421144515S101702A033531AYYDEPAY
NY 152532AB07A80076 YY YYDEPAY 19940421171023S101702A033531AYYDEPAY
NY 15276A4D1D371472 YY YYDEPAY 19940505194307S101702A033876AYYDEPAY
NY 1528546C05AF4870 YY YYDEPAY 19940511152421S101702A034077AYYDEPAY
NY 152CE4CF1CE22EC2 YY YYDEPAY 19940609162215S101702A034897AYYDEPAY
NY 152CE5DB05F708AE YY YYDEPAY 19940609165924S101702A034897AYYDEPAY
NY 152F1839137D891A YY YYDEPAY 19940623162940S101702A035091AYYDEPAY
NY 152F19F216DB4166 YY YYDEPAY 19940623173219S101702A035091AYYDEPAY
NY 152F1B91022991FC YY YYDEPAY 19940623183033S101702A035091AYYDEPAY
NY 15302ED3002362DA YY YYDEPAY 19940630144158S101702A035293AYYDEPAY
NY 15302FA717AEBA54 YY YYDEPAY 19940630151201S101702A035293AYYDEPAY
NY 153146A010F421BA YY YYDEPAY 19940707133234S101702A035428AYYDEPAY
NY 1532626F11BBB5A2 YY YYDEPAY 19940714145243S101702A035665AYYDEPAY
NY 1535B50D1B4EE964 YY YYDEPAY 19940804181158S101702M000486AYYDEPAY
NY 1538FC7C0D72806E YY YYDEPAY 19940825150144S101702M000491AYYDEPAY
NY 153A14190F37546E YY YYDEPAY 19940901135024S101702A036991AYYDEPAY
NY 153D62370160DBA6 YY YYDEPAY 19940922143400S101702A037561AYYDEPAY
NY 153F997A1C201A9E YY YYDEPAY 19941006165731S101702M000503AYYDEPAY
NY 153FA1510E36291A YY YYDEPAY 19941006213821S101702M000503AYYDEPAY
NY 154401DD18C42926 YY YYDEPAY 19941103180213S101702A038783AYYDEPAY
NY 154632251788AEE4 YY YYDEPAY 19941117161523S101702A039431AYYDEPAY
NY 1546CF680390FE7E YY YYDEPAY 19941121140628S101702A039653AYYDEPAY
NY 155016621CB54158 YY YYDEPAY 19950119144822S101702M000551AYYDEPAY
NY 1566199F002EBF30 YY YYDEPAY 19950608S101702A045100AYYDEPAY
NY 156733071943396C YY YYDEPAY 19950615S101702M000591AYYDEPAY
NY 1568502E1D6C7A24 YY YYDEPAY 19950622S101702M000590AYYDEPAY
NY 156CB199081AC32E YY YYDEPAY 19950720S101702A046223AYYDEPAY
NY 157852A400E71A38 YY YYDEPAY 19951002S101702Z210818AYYDEPAY
NY 1579EBD309689602 YY YYDEPAY 19951012S101702A048532AYYDEPAY
NY 157E4FE308523092 YY YYDEPAY 19951109S101702A049367AYYDEPAY
NY 157E5C6119DC655E YY YYDEPAY 19951110S101702A049367AYYDEPAY
NY 158DB0B81220EF5E YY YYDEPAY 19960215141014S101702A051716AYYDEPAY
NY 158ECAFE0DC90120 YY YYDEPAY 19960222143313S101702A052141AYYDEPAY
NY 15921AC601B008C2 YY YYDEPAY 19960314161503S101702M000666AYYDEPAY
NY 1599CA5A0237FDD2 YY YYDEPAY 19960502135824S101702A053253AYYDEPAY
NY 15A938F902FF8304 YY YYDEPAY 19960808183530S101702A056249AYYDEPAY
NY 15C194F9080D910E YY YYDEPAY 19970110183204S101702Z289912AYYDEPAY
NY 15C2276718E0F092 YY YYDEPAY 19970114095350S101702Z290455AYYDEPAY
NY 15C24F881D84C1B8 YY YYDEPAY 19970115095002S101702Z290790AYYDEPAY
NY 15C29F7311EDBBC2 YY YYDEPAY 19970117093023S101702Z291200AYYDEPAY
NY 15C3982C143BCCC6 YY YYDEPAY 19970123135201S101702A061056AYYDEPAY
NY 15CC68291A74EF5C YY YYDEPAY 19970320153413S101702M000778AYYDEPAY
NY 15E7E7560099C880 YY YYDEPAY 19970911143853S101702A066758AYYDEPAY
NY 15F632F70423F8C8 YY YYDEPAY 19971211134115S101702A068934AYYDEPAY
NY 15FBB9F8181B4EB2 YY YYDEPAY 19980115174544S101702M000856AYYDEPAY
NY 16024D680394BD7A YY YYDEPAY 19980226135927S101702A070724AYYDEPAY
NY 17DFBFA607A9180C YY YYDMAKD WSIN000023
NY 15AFEFCA17E34B18 YY YYEAISM 19960920115644S101702Z267161AYYEAISM
NY 15AFF06B0A4AE0EE YY YYEAISM 19960920121911S101702Z267173AYYEAISM
NY 15B45A870600ED96 YY YYEAISM 19961018142720S101702M000660AYYEAISM
NY 15CC68120AF490E0 YY YYEAISM 19970320153358S101702M000778AYYEAISM
NY 15FBDBAB1BC1BB5C YY YYEAISM 19980116135025S101702M000835AYYEAISM
NN 160018711F92E016 YY YYECGR2 19980212125840CGS101702A069923AYYECGR2
NN 16001870032E9786 YY YYECGR2 19980212125840S101702A069923AYYECGR2
NN 1600BFE9157E45A8 YY YYECGR2 19980216165215CGS101702A070496AYYECGR2
NN 1600BFE7162B59CA YY YYECGR2 19980216165215S101702A070496AYYECGR2
NN 15F17FAD1272E342 YY YYECGRI 19971111155503S101702A068203AYYECGRI
NN 15F2EEB81F753348 YY YYECGRI 19971120185114S101702M000818AYYECGRI
NN 15F369CC0439D86A YY YYECGRI 19971123194631S101702Z346164AYYECGRI
NN 15F519F619C6885F YY YYECGRI 19971204140411S101702Z348800AYYECGRI
NN 15FBB9F00F950012 YY YYECGRI 19980115174545S101702M000856AYYECGRI
NN 15F0865E14C44A8A YY YYECGRP 19971105111102CGS101702A068033AYYECGRP
NN 15F0865C0AE9D486 YY YYECGRP 19971105111102S101702A068033AYYECGRP
NY 15E37FF1175FC4DC YY YYFIBPR 19970814140833S101702M000800AYYFIBPR
NY 15E4188D027F8394 YY YYFIBPR 19970818091027S101702Z327662AYYFIBPR
NY 15E533030E14134E YY YYFIBPR 19970825094010S101702Z329469AYYFIBPR
NY 15E53B4C1113BC34 YY YYFIBPR 19970825143650S101702Z329469AYYFIBPR
NY 15E6CBB903DB245D YY YYFIBPR 19970904132827S101702A066559AYYFIBPR
NY 15E766741202B080 YY YYFIBPR 19970908094638S101702Z331899AYYFIBPR
NY 15E793CB0A82A0B8 YY YYFIBPR 19970909124923S101702Z332260AYYFIBPR
NY 15E7BF3B1064B13A YY YYFIBPR 19970910144408S101702Z332672AYYFIBPR
NY 15E7E6301359E030 YY YYFIBPR 19970911135707S101702Z332865AYYFIBPR
NY 15E7E62F0F6AECBC YY YYFIBPR 19970911135748S101702M000723AYYFIBPR
NY 15E8B15318EC00AA YY YYFIBPR 19970916150918S101702Z333785AYYFIBPR
NY 15E8B2A80D2EE108 YY YYFIBPR 19970916155634S101702Z333785AYYFIBPR
NY 15E9018F09DEC578 YY YYFIBPR 19970918150017S101702Z334213AYYFIBPR
NY 15EADA930F135D8A YY YYFIBPR 19970930091036S101702Z336218AYYFIBPR
NY 15EAE16E13C1A270 YY YYFIBPR 19970930131559S101702Z336218AYYFIBPR
NY 15EB5BAF03BF78E2 YY YYFIBPR 19971003141148S101702Z337398AYYFIBPR
NY 15ED91F40DA321A8 YY YYFIBPR 19971017155842S101702M000724AYYFIBPR
NY 15EDFD9C0954B4AC YY YYFIBPR 19971020081228S101702Z340073AYYFIBPR
NY 15EE7F7D02C4A036 YY YYFIBPR 19971023134013S101702A067763AYYFIBPR
NY 15EF4CE909B97752 YY YYFIBPR 19971028161241S101702A067870AYYFIBPR
NY 15EF715B082A44EC YY YYFIBPR 19971029135718S101702Z342287AYYFIBPR
NY 15EF73B313E72048 YY YYFIBPR 19971029152110S101702A067922AYYFIBPR
NY 15F1CD8F16CBB102 YY YYFIBPR 19971113142213S101702A068238AYYFIBPR
NY 15F2E9CE117E0CB4 YY YYFIBPR 19971120155550S101702M000725AYYFIBPR
NY 15F3FFA30D164C90 YY YYFIBPR 19971127133905S101702A068607AYYFIBPR
NY 15FA73E30D92229A YY YYFIBPR 19980107151625S101702Z353891AYYFIBPR
NY 15FBDBA318A2B474 YY YYFIBPR 19980116135026S101702M000835AYYFIBPR
NY 15FCCE091650F9E6 YY YYFIBPR 19980122142859S101702M000889AYYFIBPR
NY 160A0D5E1FCED194 YY YYFIBPR 19980416232803S101702M000838AYYFIBPR
NY 160A27F31A320BDE YY YYFIBPR 19980417151921S101702M000838AYYFIBPR
NY 1612CD4E0730EF56 YY YYFIBPR 19980611153657S101702M000840AYYFIBPR
NY 177D376110AD5D9E YY YYFIKST A06M027333543018B2
NY 1818747A0BE43812 YY YYFIKST BKUR00008059465507MVS
NY 1839CABA046018EB YY YYFIKST BKUR0000965A5DE9E3
NY 1839CABB0F6CC418 YY YYFIKST BKUR0000965A5DE9E3MVS
NY 15C286081191A66C YY YYFIKU1 19970116181927S101702A060919AYYFIKU1
NY 15C3418805C0E26E YY YYFIKU1 19970121101133S101702Z291909AYYFIKU1
NY 15C398F908EF9C08 YY YYFIKU1 19970123142101S101702A061123AYYFIKU1
NY 15C489FE1460809C YY YYFIKU1 19970129140738S101702Z293531AYYFIKU1
NY 15C4D98316FB4854 YY YYFIKU1 19970131133354S101702Z294063AYYFIKU1
NY 15C4DA1D17445C08 YY YYFIKU1 19970131135524S101702Z294063AYYFIKU1
NY 15C4DA730656319C YY YYFIKU1 19970131140710S101702Z294063AYYFIKU1
NY 15C5560A1B720028 YY YYFIKU1 19970203155055S101702Z294410AYYFIKU1
NY 15C5566815248554 YY YYFIKU1 19970203160358S101702Z294410AYYFIKU1
NY 15C5742506C60392 YY YYFIKU1 19970204094815S101702Z294522AYYFIKU1
NY 15C5807102C2DB68 YY YYFIKU1 19970204170805S101702Z294522AYYFIKU1
NY 15C5F3C80A03AD08 YY YYFIKU1 19970207135639S101702Z295237AYYFIKU1
NY 15C5F7DE16DD09D4 YY YYFIKU1 19970207162252S101702Z295237AYYFIKU1
NY 15C68F340B219374 YY YYFIKU1 19970211103926S101702Z295534AYYFIKU1
NY 15C6ED610246DBCA YY YYFIKU1 19970213184955S101702A061650AYYFIKU1
NY 15C70DED172ECA28 YY YYFIKU1 19970214141457S101702A061650AYYFIKU1
NY 16172FFF01BF612E YY YYFIKU1 19980709132109S101702Z382599AYYFIKU1
NY 15DE003E076E5514 YY YYFIKUR 19970710142449S101702M000721AYYFIKUR
NY 15E385C91B3D06FF YY YYFIKUR 19970814173534S101702M000722AYYFIKUR
NY 15E58C35083F42B4 YY YYFIKUR 19970827145220S101702Z330075AYYFIKUR
NY 15E5B2D20C26A498 YY YYFIKUR 19970828135427S101702Z330384AYYFIKUR
NY 15E5B75011F360EC YY YYFIKUR 19970828163505S101702Z330384AYYFIKUR
NY 15E6A6C014CB58AC YY YYFIKUR 19970903152517S101702Z331381AYYFIKUR
NY 15E6C8901D6A44F8 YY YYFIKUR 19970904113540S101702Z331512AYYFIKUR
NY 15E76E0011E20F9C YY YYFIKUR 19970908141644S101702Z332003AYYFIKUR
NY 15E76E1F0EB2D04A YY YYFIKUR 19970908142100S101702Z332003AYYFIKUR
NY 15E7E636191BF19C YY YYFIKUR 19970911135753S101702M000723AYYFIKUR
NY 15E7E7361C517AA8 YY YYFIKUR 19970911143522S101702Z332879AYYFIKUR
NY 15E7E8D20E820D84 YY YYFIKUR 19970911152454S101702Z332879AYYFIKUR
NY 15EAE1380500BB68 YY YYFIKUR 19970930130759S101702Z336339AYYFIKUR
NY 15ED91FE0081AECA YY YYFIKUR 19971017155855S101702M000724AYYFIKUR
NY 15EE9C9A07D0DA54 YY YYFIKUR 19971024070255S101702Z341447AYYFIKUR
NY 15EF1DED163CD3C2 YY YYFIKUR 19971027121114S101702Z341787AYYFIKUR
NY 15EF71540B35A282 YY YYFIKUR 19971029135652S101702Z342286AYYFIKUR
NY 15F1700B0D6FA90E YY YYFIKUR 19971111063522S101702Z344162AYYFIKUR
NY 15F1C6CC08BC5408 YY YYFIKUR 19971113101937CGS101702Z344648AYYFIKUR
NY 15F1C6C808FB0EA4 YY YYFIKUR 19971113101937S101702Z344648AYYFIKUR
NY 15F2B3A319877A5C YY YYFIKUR 19971119073725S101702Z345453AYYFIKUR
NY 15F2E9D71307678C YY YYFIKUR 19971120155600CGS101702M000725AYYFIKUR
NY 15F2E9D2156D220A YY YYFIKUR 19971120155600S101702M000725AYYFIKUR
NY 15F37D611EE138A0 YY YYFIKUR 19971124075840S101702Z346214AYYFIKUR
NY 15F3A483088A51C2 YY YYFIKUR 19971125071800S101702Z346565AYYFIKUR
NY 15F3AEAE0E1B3A8C YY YYFIKUR 19971125132146CGS101702Z346704AYYFIKUR
NY 15F3AEAA13C6A0CA YY YYFIKUR 19971125132146S101702Z346704AYYFIKUR
NY 15F3FFAC12135424 YY YYFIKUR 19971127133906CGS101702A068607AYYFIKUR
NY 15F3FFA509C3CB8A YY YYFIKUR 19971127133906S101702A068607AYYFIKUR
NY 15F51EBC01E174A2 YY YYFIKUR 19971204165432CGS101702A068818AYYFIKUR
NY 15F51EB417EC7912 YY YYFIKUR 19971204165432S101702A068818AYYFIKUR
NY 15F636570CBC56C3 YY YYFIKUR 19971211153730CGS101702M000726AYYFIKUR
NY 15F6364000503D9D YY YYFIKUR 19971211153730S101702M000726AYYFIKUR
NY 15FBDBB21D92000A YY YYFIKUR 19980116135027S101702M000835AYYFIKUR
NY 16001B6517B805B0 YY YYFIKUR 19980212144259CGS101702M000834AYYFIKUR
NY 16001B580AE44AA2 YY YYFIKUR 19980212144259S101702M000834AYYFIKUR
NY 160A0D6613CA2262 YY YYFIKUR 19980416232808CGS101702M000838AYYFIKUR
NY 160A0D5E00845DC4 YY YYFIKUR 19980416232808S101702M000838AYYFIKUR
NY 160A288904A83F62 YY YYFIKUR 19980417151937CGS101702M000838AYYFIKUR
NY 160A27F914508896 YY YYFIKUR 19980417151937S101702M000838AYYFIKUR
NY 1612CD571888D0D6 YY YYFIKUR 19980611153705CGS101702M000840AYYFIKUR
NY 1612CD5007B9D0F2 YY YYFIKUR 19980611153705S101702M000840AYYFIKUR
NY 1613E6D61F9BD9EB YY YYFIKUR 19980618153331CGS101702A072820AYYFIKUR
NY 1613E6D1014F7AE9 YY YYFIKUR 19980618153331S101702A072820AYYFIKUR
NY 1613EA801994AE1C YY YYFIKUR 19980618174544CGS101702A072820AYYFIKUR
NY 1613EA7C1EBFF447 YY YYFIKUR 19980618174544S101702A072820AYYFIKUR
NY 161524D01CCBFF06 YY YYFIKUR 19980626131600CGS101702A073395AYYFIKUR
NY 161524CE06CCC8A4 YY YYFIKUR 19980626131600S101702A073395AYYFIKUR
NY 161525A71CE08EDA YY YYFIKUR 19980626134607CGS101702A073395AYYFIKUR
NY 161525A505D9A3F6 YY YYFIKUR 19980626134607S101702A073395AYYFIKUR
NY 1615264E03F99E7C YY YYFIKUR 19980626140918CGS101702A073395AYYFIKUR
NY 1615264B0DD6FBEC YY YYFIKUR 19980626140918S101702A073395AYYFIKUR
NY 1615280711F76BAA YY YYFIKUR 19980626151056CGS101702A073401AYYFIKUR
NY 161528041466BF88 YY YYFIKUR 19980626151056S101702A073401AYYFIKUR
NY 161750CA082CB234 YY YYFIKUR 19980710084900CGS101702M000841AYYFIKUR
NY 161750C017446400 YY YYFIKUR 19980710084900S101702M000841AYYFIKUR
NY 17EAB64013708CFF YY YYFILOD BKUR00003857C69CB7
NY 17EF1DD60AA9C7C4 YY YYFILOD BKUR00004157EB8F97
NN 18031F110C4C2B69 YY YYFILOD BKUR00005258935183
NY 15E6CBBA005DA61E YY YYFISER 19970904132828S101702A066559AYYFISER
NY 15ED91F80DD9305A YY YYFISER 19971017155900S101702M000724AYYFISER
NY 160E856D0621DE78 YY YYFISER 19980515095453S101702M000839AYYFISER
NY 150ACD5C155A3B8C YY YYGE040
NY 181A0E0704374A12 YY YYGETCS TOFF0001095953C065
NY 181A0E0817AC2265 YY YYGETCS TOFF0001095953C065MVS
NN 15F3118E14E98182 YY YYGPAS 19971121153752S101702A068485AYYGPAS
NN 15F3B4630CE36DAA YY YYGPAS 19971125164555S101702A068569AYYGPAS
NN 15F3DBCF1C9877B0 YY YYGPAS 19971126161741S101702Z347154AYYGPAS
NN 15F3FDE11F9AA642 YY YYGPAS 19971127123700S101702Z347334AYYGPAS
NN 15F545BD065532F2 YY YYGPAS 19971205161109S101702A068771AYYGPAS
NY 171FDC81124D5E40 YY YYHECO A06M022888
NY 1753B2D514B9B4A5 YY YYITST A20Y00132952D3C3E7
NN 151EC4DD0B631542 YY YYNFP14 19940311192628S101702A032372A
NN 151FB7A6000D73F0 YY YYNFP14 19940317201407S101702M000390AYYNFP14
NN 1524173E17F27A22 YY YYNFP14 19940414160445S101702A033411AYYNFP14
NN 15241E7817C8B476 YY YYNFP14 19940414202416S101702A033411AYYNFP14
NN 153A232D14D2DEFA YY YYNFP14 19940901225031S101702A037061AYYNFP14
NY 153A419602CAE318 YY YYNFP14 19940902165842S101702A037061AYYNFP14
NN 15CE9B530119BDAA YY YYNFP14 19970403153334S101702A062839AYYNFP14
NY 17D28AC1181AEC7C YY YYNFP15 NBSI000056
NY 17C93F311BF9B4A7 YY YYNFP17 NBSI00006156ADD502
NY 17CBF39C14D96CA0 YY YYNFP17 NBSI000070
NN 151EC4EB16EABC48 YY YYNFP24 19940311192636S101702A032372A
NN 151FB7A71F0A61DC YY YYNFP24 19940317201425S101702M000390AYYNFP24
NN 1524173C15FCBA3A YY YYNFP24 19940414160453S101702A033411AYYNFP24
NN 15241E7B1014C356 YY YYNFP24 19940414202420S101702A033411AYYNFP24
NN 153A232F1F6FD7A6 YY YYNFP24 19940901225036S101702A037061AYYNFP24
NN 153A419611D80B30 YY YYNFP24 19940902165848S101702A037061AYYNFP24
NN 15CE9B501CFD4F62 YY YYNFP24 19970403153340S101702A062839AYYNFP24
NY 17B7D8E11AF6C292 YY YYNFWRG NBSI000050
NN 15757B1814F33F10 YY YYNGKAS 19950914S101702A047578AYYNGKAS
NN 1576981A14FAAF04 YY YYNGKAS 19950921S101702A047924AYYNGKAS
NN 157D2FE9051C133A YY YYNGTCP 19951102S101702A048892AYYNGTCP
NY 146C7A1103D158D4 YY YYNHBS
NY 1524423A042AC164 YY YYNHBS 19940415174407S101702A033339AYYNHBS
NY 153265B509D98D98 YY YYNHBS 19940714165234S101702A035718AYYNHBS
NY 15463214008EC298 YY YYNHBS 19941117161412S101702A039404AYYNHBS
NY 17E0B2760D79482E YY YYNLCPB MOD000002157729A19
NY 17EE041401C828BE YY YYNLCPB MOD000002657E253F8
NY 17E0B2710D08B6C3 YY YYNLCPO MOD0000021577299E0
NY 17EE04151A7B5505 YY YYNLCPO MOD000002657E25407
NN 1515C8791417951A YY YYOELEI
NN 152CE21D0BFF3DE2 YY YYOELEI 19940609143536S101702A034813AYYOELEI
NY 177AAC82057F81CE YY YYPRAD0 A20Y001521
NY 156DC8730F9AF87A YY YYPTM12 19950727S101702A046364AYYPTM12
NY 156EE2920934D858 YY YYPTM12 19950803S101702A046538AYYPTM12
NY 157141D4000BE6E0 YY YYPTM12 19950818S101702A047074AYYPTM12
NY 1571E6FD143F4ADA YY YYPTM12 19950822S101702Z204939AYYPTM12
NY 15725CFC0FE5AEAA YY YYPTM12 19950825S101702Z205416AYYPTM12
NY 15728BFF05995CFA YY YYPTM12 19950826S101702Z205430AYYPTM12
NY 1572ADE807AA1C76 YY YYPTM12 19950827S101702Z205430AYYPTM12
NY 1572C87609374A88 YY YYPTM12 19950828S101702Z205430AYYPTM12
NY 1572D17000F67C48 YY YYPTM12 19950828S101702Z205582AYYPTM12
NY 1572F6EA18980D74 YY YYPTM12 19950829S101702Z205736AYYPTM12
NY 1573280915179998 YY YYPTM12 19950830S101702Z206096AYYPTM12
NY 157344D104228EE6 YY YYPTM12 19950831S101702Z206167AYYPTM12
NY 15736EAD1B03E7B2 YY YYPTM12 19950901S101702Z206288AYYPTM12
NY 1574106E034EDCB4 YY YYPTM12 19950905S101702Z206837AYYPTM12
NY 157434F113590034 YY YYPTM12 19950906S101702Z206973AYYPTM12
NY 1574633800041C26 YY YYPTM12 19950907S101702A047466AYYPTM12
NY 157486451DB20AE2 YY YYPTM12 19950908S101702Z207435AYYPTM12
NY 15773E070DA7132C YY YYPTM12 19950925S101702Z209742AYYPTM12
NY 1578CA0903FE251E YY YYPTM12 19951005S101702A048161AYYPTM12
NY 1579644C130BA342 YY YYPTM12 19951009S101702Z211751AYYPTM12
NY 157997B30E8AC44E YY YYPTM12 19951010S101702Z212019AYYPTM12
NY 1579B7AA1D646CCA YY YYPTM12 19951011S101702Z212285AYYPTM12
NY 1579B86E1BAB8F26 YY YYPTM12 19951011S101702Z212295AYYPTM12
NY 1579BE3D03B1A2A8 YY YYPTM12 19951011S101702Z212376AYYPTM12
NY 1579E3C114C9C4E6 YY YYPTM12 19951012S101702A048386AYYPTM12
NY 157A06211C953694 YY YYPTM12 19951013S101702Z212652AYYPTM12
NY 15837E6413DB9D04 YY YYPTM12 19951212S101702Z224373AYYPTM12
NY 1583A6F116448B9A YY YYPTM12 19951213S101702Z224682AYYPTM12
NY 1583AB1B18D75DE0 YY YYPTM12 19951213S101702Z224731AYYPTM12
NY 1583CADC13289CC2 YY YYPTM12 19951214S101702A050352AYYPTM12
NY 1583C252084DB644 YY YYPTM12 19951214S101702Z224779AYYPTM12
NY 154DFD7E09887904 YY YYSPINS 19950106063222S101702A041003AYYSPINS
NY 17675CAB17BF175C YY YYUWI A19R0024915378C4EF
NY 180DEE890806798A YY YYUWI PSMF00001758EE0EC7
NY 180DEE8B0A00DE1E YY YYUWI PSMF00001758EE0EC7MVS
NY 17D39F8E1D4A3BE1 YY YYVPSVF VIP00000145704EE3B
NY 17CE271E0FD72FC3 YY YYWB101 WS8B00018756D6FC76
NY 17ECC60D1B971F0A YY YYWB101 WS8B00031857D7E845
NY 15FBE54C00E0778E YY YYWBBPU 19980116193842S101702A069660AYYWBBPU
NY 1730D02E1B2CED58 YY YYWBERR A06M02422851AF2E43
NY 18191F9E0475659C YY YYWBERR WSTS000055594BF0A8
NY 18191FA0041BF040 YY YYWBERR WSTS000055594BF0A8MVS
NY 183577E70DA2E70E YY YYWBERR WSTS0000615A39A896
NY 183577E71F153012 YY YYWBERR WSTS0000615A39A896MVS
NY 17E655791B7D36DE YY YYWBERX TOFF00006757A1E2F4
NY 17F0161408A8F429 YY YYWBERX TOFF00007657F3B1EE
NY 1802C71D123B04FF YY YYWBERX TOFF00008858906FB5
NY 181A0E1807B808DE YY YYWBERX TOFF0001095953C073MVS
NY 180F308B0E3EBEA6 YY YYWBERX TOFF00011058F89C03
NY 1827DA221FF5CEB2 YY YYWBERX TOFF00011259C7788CMVS
NY 182281741FAC0927 YY YYWBERX TOFF000117599AA4C0MVS
NY 18314CA01F534940 YY YYWBERX TOFF0001195A16AFD3MVS
NY 183577CA01DD12DD YY YYWBERX TOFF0001225A39A7DF
NY 183577CE0751ADE5 YY YYWBERX TOFF0001225A39A7DFMVS
NY 176D800307A25B5B YY YYWBESM A06M02510853AC4238
NY 18191FBF13B0DEB6 YY YYWBESM WSTS000055594BF1CCMVS
NY 177D37630CC7B5F9 YY YYWBKUR A06M027333543018CE
NY 181874E504076DD3 YY YYWBKUR BKUR000080594658B8
NY 15BACC9F187C524E YY YYWBMOE 19961128144620S101702A059131AYYWBMOE
NY 15BACED419DE065C YY YYWBMOE 19961128160532S101702A059131AYYWBMOE
NY 15BD0476166D4268 YY YYWBMOE 19961212173057S101702A059683AYYWBMOE
NY 15C1681F0EC67508 YY YYWBMOE 19970109154730S101702A060516AYYWBMOE
NY 15C39E7411B777E0 YY YYWBMOE 19970123173704S101702A061015AYYWBMOE
NY 15C3B55A081BDB8E YY YYWBMOE 19970124071700S101702A061015AYYWBMOE
NY 15C800EF0388913A YY YYWBMOE 19970220151213S101702A061848AYYWBMOE
NN 15CA55A31735EBE4 YY YYWBMON 19970307110926S101702A062134AYYWBMON
NN 15CA83710EAE6488 YY YYWBMON 19970308142853S101702Z300112AYYWBMON
NN 15CACB761B5B1466 YY YYWBMON 19970310092637S101702Z300188AYYWBMON
NN 15CACEC7168D5DC2 YY YYWBMON 19970310112514S101702Z300265AYYWBMON
NN 15CAD04903A38642 YY YYWBMON 19970310121902S101702Z300265AYYWBMON
NN 15CAD0B914921CE8 YY YYWBMON 19970310123454S101702Z300265AYYWBMON
NN 15CAD2B5019D8F4C YY YYWBMON 19970310134551S101702Z300265AYYWBMON
NN 15CB4D021C010CB0 YY YYWBMON 19970313144250S101702M000717AYYWBMON
NN 15CB54F7085E0490 YY YYWBMON 19970313192604S101702M000717AYYWBMON
NN 15CB97E91D1E745A YY YYWBMON 19970315112351S101702Z301577AYYWBMON
NN 15CB99C1179306BA YY YYWBMON 19970315122939S101702Z301585AYYWBMON
NN 15CBE35B0EAC22EE YY YYWBMON 19970317082407S101702Z301640AYYWBMON
NN 15CBE9F91963A2C2 YY YYWBMON 19970317122158S101702Z301640AYYWBMON
NN 15CC118D012EF1E4 YY YYWBMON 19970318115741S101702Z302125AYYWBMON
NN 15CC822D1972E9E0 YY YYWBMON 19970321070837S101702Z302741AYYWBMON
NN 15CC876D0D856B26 YY YYWBMON 19970321101634S101702Z302741AYYWBMON
NN 15CC87EA1BA5A2CE YY YYWBMON 19970321103457S101702Z302741AYYWBMON
NN 15CC89AF04E2C5B0 YY YYWBMON 19970321113725S101702Z302741AYYWBMON
NN 15CC8A700825D760 YY YYWBMON 19970321120417S101702Z302741AYYWBMON
NN 15CC8BF613044BAC YY YYWBMON 19970321125900S101702Z302861AYYWBMON
NN 15CC8E4317E33A62 YY YYWBMON 19970321142116S101702Z302861AYYWBMON
NN 15CCFD1B11F96CF6 YY YYWBMON 19970324082836S101702Z303012AYYWBMON
NN 15CCFEEC1FC13568 YY YYWBMON 19970324093352S101702Z303012AYYWBMON
NN 15CD08B1174D7342 YY YYWBMON 19970324152338S101702Z303012AYYWBMON
NN 15CD09931408333C YY YYWBMON 19970324155417S101702Z303012AYYWBMON
NN 15CD28E40FD2C2D6 YY YYWBMON 19970325103538S101702Z303341AYYWBMON
NN 15CE6FBF17EB38FA YY YYWBMON 19970402133425S101702Z304278AYYWBMON
NN 15CF332B1B740882 YY YYWBMON 19970407100855S101702Z304797AYYWBMON
NN 15D0CDF30885BEE4 YY YYWBMON 19970417151042S101702M000718AYYWBMON
NN 15D534FD1AE441BC YY YYWBMON 19970515152742S101702M000719AYYWBMON
NN 15D7FAF00A371B85 YY YYWBMON 19970602065921S101702Z313900AYYWBMON
NN 15D99073175A7227 YY YYWBMON 19970612085344S101702Z316050AYYWBMON
NN 15D99D86058B7952 YY YYWBMON 19970612164152S101702M000720AYYWBMON
NN 15DE005219DA53C8 YY YYWBMON 19970710142705S101702M000721AYYWBMON
NN 15E385DD1022E234 YY YYWBMON 19970814173805S101702M000722AYYWBMON
NN 15E7E65913C0CAEC YY YYWBMON 19970911140351S101702M000723AYYWBMON
NN 15F2E9EF0042410C YY YYWBMON 19971120155919S101702M000725AYYWBMON
NN 15F3A38006B99F02 YY YYWBMON 19971125064220S101702Z346561AYYWBMON
NN 15F6365B19B405C8 YY YYWBMON 19971211154151S101702M000726AYYWBMON
NN 16001FC111AC2F33 YY YYWBMON 19980212172010S101702M000836AYYWBMON
NN 160A0D7903D15B44 YY YYWBMON 19980416233210S101702M000838AYYWBMON
NN 160A281806D31840 YY YYWBMON 19980417152423S101702M000838AYYWBMON
NN 160E857C176EC566 YY YYWBMON 19980515095747S101702M000839AYYWBMON
NN 1612CD6C138353F6 YY YYWBMON 19980611154027S101702M000840AYYWBMON
NY 176D800416D1A3E6 YY YYWBMTU A06M02510853AC4233
NY 18191F9E017F0146 YY YYWBMTU WSTS000055594BF093MVS
NY 157E592A1C761270 YY YYWBPOS 19951109S101702A049203AYYWBPOS
NY 157E64E700B0C79E YY YYWBPOS 19951110S101702A049203AYYWBPOS
NY 1730D03119598F52 YY YYWBPRI A06M02422851AF2E54
NY 18191FA4006977E4 YY YYWBPRI WSTS000055594BF0FF
NY 18191FA51C7886F1 YY YYWBPRI WSTS000055594BF0FFMVS
NY 1607CBE214CAE4A9 YY YYWBTMS 19980402145954S101702A071235AYYWBTMS
NY 1607D0501A9F1AE0 YY YYWBTMS 19980402173431S101702A071235AYYWBTMS
NY 1607D2191D7F3FF0 YY YYWBTMS 19980402184148S101702A071235AYYWBTMS
NY 1607F4440930D456 YY YYWBTMS 19980403150226S101702A071235AYYWBTMS
NY 160867290C7C2D64 YY YYWBTMS 19980406113742S101702A071510AYYWBTMS
NY 17DF44F2006E7C70 YY YYWBVIN WSTS00003957669F10
NY 17F128AA1DA656D1 YY YYWBVIN WSTS00004357FCB166
NY 1802C75A0683C63A YY YYWBVIN WSTS000046589071B4
NY 181A046E0A291C88 YY YYWBVIN WSTS0000555953702BMVS
NY 183577E202F1F921 YY YYWBVIN WSTS0000615A39A89AMVS
NN 1514B97802FFBC58 ZP YZPUSER
NN 151BC8E4096D99B8 ZP YZPUSER 19940220194106S101702A031777A
NN 151BC93F02304F06 ZP YZPUSER 19940220195347S101702A031777A
NN 151C0DE01EBDC15C ZP YZPUSER 19940222125004S101702A031858A
NN 151CEA1D1AE5265C ZP YZPUSER 19940228001251S101702A032020A
NN 1520A4F6042A4D36 ZP YZPUSER 19940323174801S101702A032820AYZPUSER
NN 152302AC109E06E6 ZP YZPUSER 19940407190244S101702A033221AYZPUSER
NY 15BA7B261D9B42A0 ZP YZPUSER 19961126141035S101702A059224AYZPUSER
$#out                                              20100801 11:58:47
}¢--- A540769.WK.REXX.O13(DRDACOM2) cre=2010-07-06 mod=2010-07-06-11.19.49 A540769 ---
$@loadNew()
call sqlConnect DBOF
call sqlPreOpen 1, 'select collid, name, hex(contoken), version',
     'from sysibm.sysPackage',
     "where dbProtocol = 'P'",
     "order by collid, name"
new = 0
old = 0
co = ' '
do while sqlFetchInto(1, ':coll, :pkg, :co, :vers')
     if symbol('m.co2pkg.co') \== 'VAR' then
         da = '10000000'
     else if pkg \= m.co2Pkg.co then
         say 'mismatch' pkg '==>' m.co2Pkg.co
     else
         da = 'm.co2last.co
     else do
         old = old + 1
         $$ REBIND PACKAGE($-{strip(coll)'.'strip(pkg)'.(' $*+
                           || strip(vers)})) -
         $$ $''    DBPROTOCOL(DRDA)
         end
     if old // 1000 = 1 then
         say 'new' new 'old' old
     end
say 'new' new 'old' old
call sqlDisconnect
$@proc loadNew $@¢
st = 0
$;
$<A540769.WK.REXX(DRDALAST)
$@for li $@¢
    if abbrev($li, $'$#out ') then do
        if st=1 then
            leave
        st = 1
        iterate
        end
    if st = 0 then
        iterate
    parse value $li  with co 'pkg' pkg 'last' la .
    co = strip(co)
    pkg = strip(pkg)
    m.co2pkg.co = pkg
    m.co2last.co = translate('789a4512', la, '123456789a')
    $!
$!
$#out                                              20100622 09:10:58
$#out                                              20100622 09:10:01
$#out                                              20100622 09:07:08
REBIND PACKAGE(RF.RF0520.(REPO000024)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0520.(REPO000030)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0520.(REPO000034)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0520.(REPO000036)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0520.(REPO000044)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0520.(REPO000046)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0520.(REPO000053)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0530.(REPO000028)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0530.(REPO000030)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0530.(REPO000032)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0530.(REPO000034)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0530.(REPO000036)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0530.(REPO000041)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0530.(REPO000044)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0530.(REPO000051)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0530.(REPO000046)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0530.(REPO000053)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0540.(REPO000024)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0540.(REPO000030)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0540.(REPO000044)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0550.(REPO000024)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0550.(REPO000030)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0550.(REPO000044)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF0550.(REPO000053)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF5020.(REPO000028)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF5020.(REPO000030)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF5020.(REPO000032)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF5020.(REPO000034)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF5020.(REPO000036)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF5020.(REPO000041)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF5020.(REPO000044)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF5020.(REPO000051)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF5020.(REPO000046)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF5020.(REPO000053)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7010.(REPO000032)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7010.(REPO000044)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7010.(REPO000046)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7050.(REPO000024)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7050.(REPO000030)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7050.(REPO000044)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7050.(REPO000046)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7050.(REPO000053)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7070.(REPO000024)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7070.(REPO000030)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7070.(REPO000044)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7070.(REPO000046)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7070.(REPO000053)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7100.(REPO000024)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7100.(REPO000030)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7100.(REPO000041)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7100.(REPO000044)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7100.(REPO000046)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7100.(REPO000053)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7110.(REPO000024)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7110.(REPO000030)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7110.(REPO000041)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7110.(REPO000044)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7110.(REPO000046)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7120.(REPO000024)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7120.(REPO000030)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7120.(REPO000032)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7120.(REPO000036)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7120.(REPO000041)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7120.(REPO000044)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7120.(REPO000046)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7120.(REPO000053)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7130.(REPO000024)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7130.(REPO000030)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7130.(REPO000041)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7130.(REPO000049)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7130.(REPO000044)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7130.(REPO000046)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7130.(REPO000053)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7140.(REPO000024)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7140.(REPO000030)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7140.(REPO000041)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7140.(REPO000044)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7140.(REPO000046)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7140.(REPO000053)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7150.(REPO000018)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7150.(REPO000022)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7150.(REPO000024)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7160.(REPO000024)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7160.(REPO000030)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7160.(REPO000044)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7160.(REPO000046)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7170.(REPO000018)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7170.(REPO000022)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7170.(REPO000024)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7180.(REPO000024)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7180.(REPO000030)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7180.(REPO000032)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7180.(REPO000044)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7180.(REPO000046)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF7180.(REPO000053)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8000.(REPO000030)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8000.(REPO000032)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8000.(REPO000034)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8000.(REPO000036)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8000.(REPO000044)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8000.(REPO000046)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8010.(REPO000024)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8010.(REPO000030)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8010.(REPO000044)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8010.(REPO000046)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8010.(REPO000053)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8020.(REPO000024)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8020.(REPO000030)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8020.(REPO000036)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8020.(REPO000044)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8020.(REPO000046)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8020.(REPO000053)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8030.(REPO000028)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8030.(REPO000030)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8030.(REPO000032)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8030.(REPO000034)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8030.(REPO000036)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8030.(REPO000041)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8030.(REPO000044)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8030.(REPO000051)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8030.(REPO000046)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8030.(REPO000053)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8040.(REPO000044)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8040.(REPO000051)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.RF8040.(REPO000046)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.YRFKDE.(REPO00004459761880)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.YRFKDE.(REPO00004659C7BB83)) -
    DBPROTOCOL(DRDA)
REBIND PACKAGE(RF.YRFKDE.(REPO00004659C7BB83MVS)) -
    DBPROTOCOL(DRDA)
$#out                                              20100622 09:06:36
$#out                                              20100621 15:07:36
}¢--- A540769.WK.REXX.O13(DRDAFREE) cre=2010-06-23 mod=2010-06-23-15.07.24 A540769 ---
ldat = 20081220
$;
$<A540769.WK.TEXW(DRDALASC)
$@for li $@¢
    parse value $li with lPrd lPta vo con coll pkg vers .
 /* say 'prd' lPrd 'pta' lPta 'vo' vo,
                  'con' con 'coll' coll 'pkg' pkg 'vers' vers'|' */
    if lPrd >> lDat | lPta >> lDat | pos(vo, 'AY YY') > 0 then
        say 'keeping' coll pkg vers
    else
        $$- '  FREE PACKAGE('coll'.'pkg'.('vers'))'
    $!
$#out                                              20100623 15:06:45
  FREE PACKAGE(LV.YLV001E.())
  FREE PACKAGE(SI.YSI0132.())
  FREE PACKAGE(SI.SI7550.())
  FREE PACKAGE(BX.BX7900.())
  FREE PACKAGE(CO.CO8000.())
  FREE PACKAGE(CR.YCRAN01.())
  FREE PACKAGE(BX.BX0330.())
  FREE PACKAGE(CR.YCRAN02.())
  FREE PACKAGE(CO.CO0030.())
  FREE PACKAGE(BP.BP6020.())
  FREE PACKAGE(NK.YNKSICB.())
  FREE PACKAGE(BX.BX5200.())
  FREE PACKAGE(BX.BX7400.())
  FREE PACKAGE(LV.YLV001D.())
  FREE PACKAGE(BX.BX7410.())
  FREE PACKAGE(BX.BX7200.())
  FREE PACKAGE(CI.YCI009.())
  FREE PACKAGE(CI.YCI009A.())
  FREE PACKAGE(WB.YWB5013.())
  FREE PACKAGE(WB.YWB5012.())
  FREE PACKAGE(BB.BB0620.())
  FREE PACKAGE(KS.YKSLFNR.())
  FREE PACKAGE(DG.YDGT031.())
  FREE PACKAGE(UP.YUP13.())
  FREE PACKAGE(UP.YUP23.())
  FREE PACKAGE(BP.BP7090.())
  FREE PACKAGE(SA.YSA0272.())
  FREE PACKAGE(TR.YTRT931.(19960815141215S101702A056402AYTRT931))
  FREE PACKAGE(BX.YBX0323.(19960815173146S101702A056350AYBX0323))
  FREE PACKAGE(BX.YBX0321.(19960815173129S101702A056350AYBX0321))
  FREE PACKAGE(SM.SMPLAN01.())
  FREE PACKAGE(BX.BX6550.(19960822173742S101702Z262853ABX6550))
  FREE PACKAGE(SX.YSX64P4.(19960822140946S101702A056633AYSX64P4))
  FREE PACKAGE(SX.YSX6404.(19960822140947S101702A056633AYSX6404))
  FREE PACKAGE(SM.SMPATCRE.())
  FREE PACKAGE(SM.SMPHUPD.())
  FREE PACKAGE(SM.SMPHUPD2.())
  FREE PACKAGE(SM.SMPHUPD1.())
  FREE PACKAGE(SX.YSX64P4.(19960830134305S101702Z264075AYSX64P4))
  FREE PACKAGE(BX.BX6560.(19960826145905S101702Z263181ABX6560))
  FREE PACKAGE(SX.YSX64P4.(19960828180725S101702A056782AYSX64P4))
  FREE PACKAGE(KD.YKD0500.(19960902113434S101702Z264258AYKD0500))
  FREE PACKAGE(SX.YSX64P4.(19960902111358S101702Z264248AYSX64P4))
  FREE PACKAGE(SX.YSX64P4.(19960903133413S101702A056855AYSX64P4))
  FREE PACKAGE(RR.RR7240.(19960905155311S101702M000711ARR7240))
  FREE PACKAGE(YY.RR7240.(19960905155311S101702M000711ARR7240))
  FREE PACKAGE(CD.YCDUP14.(19960905152821S101702M000711AYCDUP14))
  FREE PACKAGE(EM.YEM0061.(19960905153007S101702M000711AYEM0061))
  FREE PACKAGE(KD.YKD0500.(19960905153037S101702M000711AYKD0500))
  FREE PACKAGE(KD.YKDV81.(19960905153031S101702M000711AYKDV81))
  FREE PACKAGE(CD.YCDCIFD.(19960905153115S101702M000711AYCDCIFD))
  FREE PACKAGE(KD.YKD0642.(19960905153039S101702M000711AYKD0642))
  FREE PACKAGE(CD.YCD0020.(19960905135843S101702A056819AYCD0020))
  FREE PACKAGE(VP.YVPUP01.(19960905135845S101702A056819AYVPUP01))
  FREE PACKAGE(BX.BX6570.(19960912102108S101702Z265961ABX6570))
  FREE PACKAGE(EM.YEM0061.(19960912215244S101702M000710AYEM0061))
  FREE PACKAGE(EM.YEM0065.(19960912215245S101702M000710AYEM0065))
  FREE PACKAGE(EA.YEA0001.(19960912215250S101702M000710AYEA0001))
  FREE PACKAGE(LV.YLV0024.(19960919134517S101702A057205AYLV0024))
  FREE PACKAGE(BX.BX6500.(19960919140931S101702A057271ABX6500))
  FREE PACKAGE(BX.BX6560.(19960919140932S101702A057273ABX6560))
  FREE PACKAGE(BX.BX6570.(19960919140933S101702A057273ABX6570))
  FREE PACKAGE(BX.BX6550.(19960919140932S101702A057273ABX6550))
  FREE PACKAGE(LV.YLV0024.(19960916065859S101702Z266234AYLV0024))
  FREE PACKAGE(BB.BB0630.(19960613175401S101702A054931ABB0630))
  FREE PACKAGE(EM.YEM0900.(19960613174145S101702A054886AYEM0900))
  FREE PACKAGE(OD.OD7020.(19960613145427S101702A054902AOD7020))
  FREE PACKAGE(BX.YBX0321.(19960613151234S101702A054925AYBX0321))
  FREE PACKAGE(BX.YBX0323.(19960613151236S101702A054925AYBX0323))
  FREE PACKAGE(BX.YBX0322.(19960613151235S101702A054925AYBX0322))
  FREE PACKAGE(SX.YSX5104.(19960613151300S101702A054928AYSX5104))
  FREE PACKAGE(SX.YSX64P4.(19960613151302S101702A054928AYSX64P4))
  FREE PACKAGE(SX.YSX6404.(19960614151554S101702A055046AYSX6404))
  FREE PACKAGE(SX.YSX64P4.(19960614151553S101702A055046AYSX64P4))
  FREE PACKAGE(BX.YBX0321.(19960614070338S101702Z252740AYBX0321))
  FREE PACKAGE(BX.YBX0322.(19960614070339S101702Z252740AYBX0322))
  FREE PACKAGE(BX.YBX0323.(19960614070339S101702Z252740AYBX0323))
  FREE PACKAGE(BX.YBX0323.(19960614071637S101702Z252742AYBX0323))
  FREE PACKAGE(BX.YBX0321.(19960614071636S101702Z252742AYBX0321))
  FREE PACKAGE(BX.YBX0322.(19960614071450S101702Z252741AYBX0322))
  FREE PACKAGE(SX.YSX6404.(19960614082939S101702Z252755AYSX6404))
  FREE PACKAGE(VP.YVP7403.(19960621113930S101702Z254159AYVP7403))
  FREE PACKAGE(VP.YVP7403.(19960621144556S101702Z254221AYVP7403))
  FREE PACKAGE(SX.YSX64P4.(19960621161730S101702A055254AYSX64P4))
  FREE PACKAGE(VP.YVP7403.(19960617134248S101702Z253094AYVP7403))
  FREE PACKAGE(SX.YSX64P4.(19960617152900S101702A055080AYSX64P4))
  FREE PACKAGE(SX.YSX6404.(19960617152901S101702A055080AYSX6404))
  FREE PACKAGE(VP.YVP7403.(19960618163032S101702Z253537AYVP7403))
  FREE PACKAGE(BX.YBX0311.(19960618173627S101702Z253574AYBX0311))
  FREE PACKAGE(SX.YSX5104.(19960619123317S101702Z253706AYSX5104))
  FREE PACKAGE(SX.YSX5104.(19960620124151S101702Z253982AYSX5104))
  FREE PACKAGE(KD.YKD0640.(19960620140639S101702A055061AYKD0640))
  FREE PACKAGE(KD.YKD0641.(19960620140639S101702A055061AYKD0641))
  FREE PACKAGE(EM.YEM0900.(19960620140644S101702A055061AYEM0900))
  FREE PACKAGE(KD.YKD0500.(19960620140638S101702A055061AYKD0500))
  FREE PACKAGE(BX.YBX0363.(19960620104733S101702Z253936AYBX0363))
  FREE PACKAGE(BX.YBX0362.(19960620104732S101702Z253936AYBX0362))
  FREE PACKAGE(BX.YBX0361.(19960620104731S101702Z253936AYBX0361))
  FREE PACKAGE(BX.YBX0312.(19960620113121S101702Z253964AYBX0312))
  FREE PACKAGE(BX.YBX0311.(19960620113120S101702Z253964AYBX0311))
  FREE PACKAGE(SX.YSX5104.(19960620153501S101702Z254046AYSX5104))
  FREE PACKAGE(SX.YSX5104.(19960625135551S101702A055308AYSX5104))
  FREE PACKAGE(VP.YVP7403.(19960627143112S101702A055358AYVP7403))
  FREE PACKAGE(SX.YSX6404.(19960627143103S101702A055354AYSX6404))
  FREE PACKAGE(EM.EM0900.(19960704140613S101702A055506AEM0900))
  FREE PACKAGE(NP.NP0360.(19960704140529S101702A055458ANP0360))
  FREE PACKAGE(SX.YSX6404.(19960704142038S101702A055548AYSX6404))
  FREE PACKAGE(CD.YCD0020.(19960704164722S101702A055520AYCD0020))
  FREE PACKAGE(BX.YBX0363.(19960704163424S101702A055219AYBX0363))
  FREE PACKAGE(BX.YBX0361.(19960704163417S101702A055219AYBX0361))
  FREE PACKAGE(BX.YBX0321.(19960704163427S101702A055219AYBX0321))
  FREE PACKAGE(BX.YBX0323.(19960704163416S101702A055219AYBX0323))
  FREE PACKAGE(BX.YBX0362.(19960704163419S101702A055219AYBX0362))
  FREE PACKAGE(BX.YBX0312.(19960704163425S101702A055219AYBX0312))
  FREE PACKAGE(BX.YBX0311.(19960704163425S101702A055219AYBX0311))
  FREE PACKAGE(BX.YBX0322.(19960704163429S101702A055219AYBX0322))
  FREE PACKAGE(CD.YCD0020.(19960704173143S101702A055520AYCD0020))
  FREE PACKAGE(VP.YVPUP01.(19960704173144S101702A055520AYVPUP01))
  FREE PACKAGE(VP.YVPUP01.(19960705075226S101702A055520AYVPUP01))
  FREE PACKAGE(CD.YCD0020.(19960705075225S101702A055520AYCD0020))
  FREE PACKAGE(BX.YBX0311.(19960711134555S101702A055749AYBX0311))
  FREE PACKAGE(BX.YBX0313.(19960711134603S101702A055749AYBX0313))
  FREE PACKAGE(BX.YBX0321.(19960711134539S101702A055749AYBX0321))
  FREE PACKAGE(BX.YBX0322.(19960711134542S101702A055749AYBX0322))
  FREE PACKAGE(BX.YBX0323.(19960711134551S101702A055749AYBX0323))
  FREE PACKAGE(BX.YBX0312.(19960711134559S101702A055749AYBX0312))
  FREE PACKAGE(KD.YKD0643.(19960709095917S101702Z256432AYKD0643))
  FREE PACKAGE(KD.YKD0643.(19960718135640S101702A055861AYKD0643))
  FREE PACKAGE(LV.YLV0024.(19960729175120S101702A056132AYLV0024))
  FREE PACKAGE(BX.YBX0323.(19960730104336S101702Z259999AYBX0323))
  FREE PACKAGE(BX.YBX0321.(19960730104336S101702Z259999AYBX0321))
  FREE PACKAGE(BX.YBX0322.(19960730104336S101702Z259999AYBX0322))
  FREE PACKAGE(BX.YBX0313.(19960730103039S101702Z259993AYBX0313))
  FREE PACKAGE(BX.YBX0312.(19960730103038S101702Z259993AYBX0312))
  FREE PACKAGE(BX.YBX0311.(19960730103037S101702Z259993AYBX0311))
  FREE PACKAGE(BX.YBX0313.(19960730134829S101702Z259993AYBX0313))
  FREE PACKAGE(BX.YBX0311.(19960730134827S101702Z259993AYBX0311))
  FREE PACKAGE(BX.YBX0312.(19960730134828S101702Z259993AYBX0312))
  FREE PACKAGE(BX.YBX0322.(19960730135122S101702Z260054AYBX0322))
  FREE PACKAGE(BX.YBX0323.(19960730135346S101702Z260055AYBX0323))
  FREE PACKAGE(BX.YBX0321.(19960730135345S101702Z260055AYBX0321))
  FREE PACKAGE(EA.YEA0001.(19960731143941S101702A056130AYEA0001))
  FREE PACKAGE(KX.YKX002.(19960731150729S101702A056211AYKX002))
  FREE PACKAGE(BX.BX6500.(19960806145757S101702Z260717ABX6500))
  FREE PACKAGE(KD.YKDV81.(19960808143159S101702A056273AYKDV81))
  FREE PACKAGE(EM.YEM0061.(19960808143147S101702A056273AYEM0061))
  FREE PACKAGE(KD.YKDT00.(19960808143156S101702A056273AYKDT00))
  FREE PACKAGE(KD.YKD0642.(19960808143158S101702A056273AYKD0642))
  FREE PACKAGE(BX.YBX0121.(19960808183126S101702A056200AYBX0121))
  FREE PACKAGE(BX.YBX0342.(19960808183116S101702A056200AYBX0342))
  FREE PACKAGE(BX.YBX0343.(19960808183117S101702A056200AYBX0343))
  FREE PACKAGE(BX.YBX0313.(19960808183114S101702A056200AYBX0313))
  FREE PACKAGE(BX.YBX0311.(19960808183112S101702A056200AYBX0311))
  FREE PACKAGE(BX.YBX0363.(19960808183121S101702A056200AYBX0363))
  FREE PACKAGE(BX.YBX0361.(19960808183119S101702A056200AYBX0361))
  FREE PACKAGE(BX.YBXBI03.(19960808183125S101702A056200AYBXBI03))
  FREE PACKAGE(BX.YBX0383.(19960808183123S101702A056200AYBX0383))
  FREE PACKAGE(CR.YCRAN01.(19960808183350S101702A056200AYCRAN01))
  FREE PACKAGE(BX.YBX0382.(19960808183122S101702A056200AYBX0382))
  FREE PACKAGE(BX.YBX0381.(19960808183121S101702A056200AYBX0381))
  FREE PACKAGE(BX.YBX0362.(19960808183120S101702A056200AYBX0362))
  FREE PACKAGE(BX.YBX0312.(19960808183113S101702A056200AYBX0312))
  FREE PACKAGE(BX.YBX0341.(19960808183116S101702A056200AYBX0341))
  FREE PACKAGE(BX.YBX0322.(19960808183124S101702A056200AYBX0322))
  FREE PACKAGE(BX.YBXBI01.(19960808183118S101702A056200AYBXBI01))
  FREE PACKAGE(CR.YCRAN02.(19960808183522S101702A056200AYCRAN02))
  FREE PACKAGE(BX.BX0330.(19960808183517S101702A056200ABX0330))
  FREE PACKAGE(LV.YLV0024.(19960809104406S101702A056380AYLV0024))
  FREE PACKAGE(OD.OD7281.(19961127172307S101702Z280020AOD7281))
  FREE PACKAGE(LC.LC5000.(19961128134126S101702A059244ALC5000))
  FREE PACKAGE(EW.EW7010.(19961128134025S101702A059169AEW7010))
  FREE PACKAGE(KD.YKDH91.(19961128144447S101702A059147AYKDH91))
  FREE PACKAGE(SX.YSX6404.(19961125153301S101702A059164AYSX6404))
  FREE PACKAGE(SX.YSX64P4.(19961125153300S101702A059164AYSX64P4))
  FREE PACKAGE(OD.OD7281.(19961126165931S101702Z279665AOD7281))
  FREE PACKAGE(SX.YSX6404.(19961205153416S101702M000752AYSX6404))
  FREE PACKAGE(SX.YSX6405.(19961205153417S101702M000752AYSX6405))
  FREE PACKAGE(SX.YSX64P4.(19961205153414S101702M000752AYSX64P4))
  FREE PACKAGE(CD.YCDCIFD.(19961205161342S101702A059523AYCDCIFD))
  FREE PACKAGE(OD.OD7281.(19961205165458S101702A059431AOD7281))
  FREE PACKAGE(OD.OD7290.(19961205165500S101702A059431AOD7290))
  FREE PACKAGE(TK.TK0100.(19961211093410S101702Z282987ATK0100))
  FREE PACKAGE(BX.BX6500.(19961212132750S101702A059703ABX6500))
  FREE PACKAGE(BX.BX6410.(19961212132749S101702A059703ABX6410))
  FREE PACKAGE(BX.BX8110.(19961212132748S101702A059703ABX8110))
  FREE PACKAGE(BX.BX6550.(19961212132745S101702A059703ABX6550))
  FREE PACKAGE(BX.BX6560.(19961212132746S101702A059703ABX6560))
  FREE PACKAGE(BX.BX6570.(19961212132746S101702A059703ABX6570))
  FREE PACKAGE(SA.SA0240.(19961212130630S101702A059412ASA0240))
  FREE PACKAGE(GE.GE7550.(19961212131947S101702A059641AGE7550))
  FREE PACKAGE(SX.YSX64P5.(19961212135753S101702A059837AYSX64P5))
  FREE PACKAGE(TK.TK0100.(19961216234803S101702Z284134ATK0100))
  FREE PACKAGE(OD.OD7140.(19961216232158S101702Z284121AOD7140))
  FREE PACKAGE(OD.OD7240.(19961216232811S101702Z284125AOD7240))
  FREE PACKAGE(OD.OD7160.(19961216233243S101702Z284130AOD7160))
  FREE PACKAGE(TK.TK0100.(19961217171109S101702A060053ATK0100))
  FREE PACKAGE(EA.YEA0001.(19961212173052S101702A059672AYEA0001))
  FREE PACKAGE(BX.YBXBI02.(19961212173256S101702A059679AYBXBI02))
  FREE PACKAGE(BX.YBXBI01.(19961212173255S101702A059679AYBXBI01))
  FREE PACKAGE(BX.YBX0311.(19961212173254S101702A059679AYBX0311))
  FREE PACKAGE(BX.YBX0121.(19961212173258S101702A059679AYBX0121))
  FREE PACKAGE(BX.YBXBI03.(19961212173257S101702A059679AYBXBI03))
  FREE PACKAGE(VT.VT7799.(19961213190927S101702A059882AVT7799))
  FREE PACKAGE(SX.YSX6405.(19961219141040S101702A060107AYSX6405))
  FREE PACKAGE(OD.OD7240.(19961219141032S101702A060087AOD7240))
  FREE PACKAGE(OD.OD7160.(19961219141049S101702A060087AOD7160))
  FREE PACKAGE(OD.OD7140.(19961219141048S101702A060087AOD7140))
  FREE PACKAGE(TK.TK0160.(19961219141039S101702A060093ATK0160))
  FREE PACKAGE(EA.YEA0001.(19961227161942S101702A060313AYEA0001))
  FREE PACKAGE(EA.YEA0011.(19961227161943S101702A060313AYEA0011))
  FREE PACKAGE(EA.YEA0010.(19961227161943S101702A060313AYEA0010))
  FREE PACKAGE(EA.YEA0001.(19961227131336S101702A060313AYEA0001))
  FREE PACKAGE(EA.YEA0011.(19961227131340S101702A060313AYEA0011))
  FREE PACKAGE(EA.YEA0010.(19961227131338S101702A060313AYEA0010))
  FREE PACKAGE(KD.YKDR78.(19960926133932S101702A057314AYKDR78))
  FREE PACKAGE(KD.YKDV81.(19960926133929S101702A057314AYKDV81))
  FREE PACKAGE(KD.YKD0641.(19960926133927S101702A057314AYKD0641))
  FREE PACKAGE(KD.YKD0643.(19960926133929S101702A057314AYKD0643))
  FREE PACKAGE(KD.YKD0642.(19960926133928S101702A057314AYKD0642))
  FREE PACKAGE(EM.YEM0061.(19960926133930S101702A057314AYEM0061))
  FREE PACKAGE(KD.YKD0640.(19960926133932S101702A057314AYKD0640))
  FREE PACKAGE(BX.BX7150.(19960926155302S101702A057383ABX7150))
  FREE PACKAGE(BX.BX5200.(19960926155311S101702A057383ABX5200))
  FREE PACKAGE(BX.BX7620.(19960926155305S101702A057383ABX7620))
  FREE PACKAGE(BX.BX8100.(19960926155310S101702A057383ABX8100))
  FREE PACKAGE(BX.BX6410.(19960926155312S101702A057383ABX6410))
  FREE PACKAGE(EM.YEM0061.(19961003140825S101702A057537AYEM0061))
  FREE PACKAGE(KD.YKD0642.(19961003140829S101702A057537AYKD0642))
  FREE PACKAGE(KD.YKDV81.(19961003140832S101702A057537AYKDV81))
  FREE PACKAGE(KD.YKDV81.(19960927084725S101702Z268022AYKDV81))
  FREE PACKAGE(KD.YKD0642.(19960927085133S101702Z268027AYKD0642))
  FREE PACKAGE(EM.YEM0061.(19960927085815S101702Z268032AYEM0061))
  FREE PACKAGE(BX.YBX0311.(19961009134202S101702Z269958AYBX0311))
  FREE PACKAGE(BX.YBXBI02.(19961003150557S101702A057489AYBXBI02))
  FREE PACKAGE(BX.YBX0321.(19961003150555S101702A057489AYBX0321))
  FREE PACKAGE(BX.YBXBI01.(19961003150557S101702A057489AYBXBI01))
  FREE PACKAGE(BX.YBX0323.(19961003150556S101702A057489AYBX0323))
  FREE PACKAGE(BX.YBX0121.(19961003150558S101702A057489AYBX0121))
  FREE PACKAGE(BX.YBX0312.(19961003150554S101702A057489AYBX0312))
  FREE PACKAGE(BX.YBX0313.(19961003150554S101702A057489AYBX0313))
  FREE PACKAGE(BX.YBX0382.(19961003150556S101702A057489AYBX0382))
  FREE PACKAGE(BX.YBXBI03.(19961003150558S101702A057489AYBXBI03))
  FREE PACKAGE(BX.YBX0311.(19961003150552S101702A057489AYBX0311))
  FREE PACKAGE(BX.YBX0320.(19961003150555S101702A057489AYBX0320))
  FREE PACKAGE(BX.YBX0321.(19961003163434S101702A057489AYBX0321))
  FREE PACKAGE(BX.YBXBI02.(19961003163436S101702A057489AYBXBI02))
  FREE PACKAGE(BX.YBX0382.(19961003163435S101702A057489AYBX0382))
  FREE PACKAGE(BX.YBX0313.(19961003163433S101702A057489AYBX0313))
  FREE PACKAGE(BX.YBXBI01.(19961003163436S101702A057489AYBXBI01))
  FREE PACKAGE(BX.YBX0311.(19961003163431S101702A057489AYBX0311))
  FREE PACKAGE(BX.YBX0312.(19961003163432S101702A057489AYBX0312))
  FREE PACKAGE(BX.YBX0320.(19961003163434S101702A057489AYBX0320))
  FREE PACKAGE(BX.YBX0121.(19961003163437S101702A057489AYBX0121))
  FREE PACKAGE(BX.YBX0323.(19961003163435S101702A057489AYBX0323))
  FREE PACKAGE(BX.YBXBI03.(19961003163436S101702A057489AYBXBI03))
  FREE PACKAGE(OD.OD7070.(19961021083513S101702Z271571AOD7070))
  FREE PACKAGE(SX.YSX6404.(19961018151537S101702A058019AYSX6404))
  FREE PACKAGE(SX.YSX6404.(19961023130053S101702A058044AYSX6404))
  FREE PACKAGE(BX.YBX0311.(19961024141922S101702A057873AYBX0311))
  FREE PACKAGE(OD.OD7070.(19961024142938S101702A058057AOD7070))
  FREE PACKAGE(OD.OD7090.(19961024142939S101702A058057AOD7090))
  FREE PACKAGE(CD.YCDUP14.(19961031150600S101702M000738AYCDUP14))
  FREE PACKAGE(GE.GE7550.(19961107194151S101702M000730AGE7550))
  FREE PACKAGE(CD.YCDUP14.(19961114194605S101702M000743AYCDUP14))
  FREE PACKAGE(SA.YSAT301.(19961114194931S101702M000743AYSAT301))
  FREE PACKAGE(CD.YCDCIFD.(19961114194635S101702M000743AYCDCIFD))
  FREE PACKAGE(CD.YCDUP14.(19961114175620S101702M000743AYCDUP14))
  FREE PACKAGE(CD.YCDCIFD.(19961114175616S101702M000743AYCDCIFD))
  FREE PACKAGE(AT.AT7060.(19961114135124S101702A058435AAT7060))
  FREE PACKAGE(CD.YCDUP14.(19961114144213S101702M000743AYCDUP14))
  FREE PACKAGE(CD.YCDCIFD.(19961114144241S101702M000743AYCDCIFD))
  FREE PACKAGE(SA.YSAT301.(19961114144601S101702M000743AYSAT301))
  FREE PACKAGE(SX.YSX64P4.(19961121140040S101702M000745AYSX64P4))
  FREE PACKAGE(SX.YSX6405.(19961121140041S101702M000745AYSX6405))
  FREE PACKAGE(EW.EW7010.(19961121165906S101702A058971AEW7010))
  FREE PACKAGE(SX.YSX64P4.(19961122163939S101702A059128AYSX64P4))
  FREE PACKAGE(SX.YSX6404.(19961122163940S101702A059128AYSX6404))
  FREE PACKAGE(SX.YSX64P4.(19961123055027S101702Z279032AYSX64P4))
  FREE PACKAGE(SX.YSX6404.(19961123055028S101702Z279032AYSX6404))
  FREE PACKAGE(YY.YYWBMON.(19970310092637S101702Z300188AYYWBMON))
  FREE PACKAGE(YY.YYWBMON.(19970310112514S101702Z300265AYYWBMON))
  FREE PACKAGE(YY.YYWBMON.(19970310123454S101702Z300265AYYWBMON))
  FREE PACKAGE(YY.YYWBMON.(19970310121902S101702Z300265AYYWBMON))
  FREE PACKAGE(YY.YYWBMON.(19970310134551S101702Z300265AYYWBMON))
  FREE PACKAGE(YY.YYWBMON.(19970307110926S101702A062134AYYWBMON))
  FREE PACKAGE(YY.YYWBMON.(19970308142853S101702Z300112AYYWBMON))
  FREE PACKAGE(YY.YYWBMON.(19970317082407S101702Z301640AYYWBMON))
  FREE PACKAGE(YY.YYWBMON.(19970317122158S101702Z301640AYYWBMON))
  FREE PACKAGE(LV.YLV0024.(19970313130752S101702A062314AYLV0024))
  FREE PACKAGE(YY.YYWBMON.(19970313144250S101702M000717AYYWBMON))
  FREE PACKAGE(YY.YYWBMON.(19970313192604S101702M000717AYYWBMON))
  FREE PACKAGE(YY.YYWBMON.(19970315112351S101702Z301577AYYWBMON))
  FREE PACKAGE(YY.YYWBMON.(19970315122939S101702Z301585AYYWBMON))
  FREE PACKAGE(YY.YYWBMON.(19970324082836S101702Z303012AYYWBMON))
  FREE PACKAGE(YY.YYWBMON.(19970324093352S101702Z303012AYYWBMON))
  FREE PACKAGE(YY.YYWBMON.(19970318115741S101702Z302125AYYWBMON))
  FREE PACKAGE(EA.YEA0010.(19970320132759S101702A062550AYEA0010))
  FREE PACKAGE(TK.TK0160.(19970320132918S101702A062552ATK0160))
  FREE PACKAGE(TK.TK0120.(19970320132922S101702A062552ATK0120))
  FREE PACKAGE(CD.YCDCIFD.(19970320153542S101702M000778AYCDCIFD))
  FREE PACKAGE(YY.YYWBMON.(19970321120417S101702Z302741AYYWBMON))
  FREE PACKAGE(YY.YYWBMON.(19970321125900S101702Z302861AYYWBMON))
  FREE PACKAGE(YY.YYWBMON.(19970321142116S101702Z302861AYYWBMON))
  FREE PACKAGE(YY.YYWBMON.(19970321070837S101702Z302741AYYWBMON))
  FREE PACKAGE(YY.YYWBMON.(19970321103457S101702Z302741AYYWBMON))
  FREE PACKAGE(YY.YYWBMON.(19970321101634S101702Z302741AYYWBMON))
  FREE PACKAGE(YY.YYWBMON.(19970321113725S101702Z302741AYYWBMON))
  FREE PACKAGE(YY.YYWBMON.(19970324152338S101702Z303012AYYWBMON))
  FREE PACKAGE(YY.YYWBMON.(19970324155417S101702Z303012AYYWBMON))
  FREE PACKAGE(YY.YYWBMON.(19970325103538S101702Z303341AYYWBMON))
  FREE PACKAGE(KD.YKDH00.(19970326152925S101702A062772AYKDH00))
  FREE PACKAGE(KD.YKD0500.(19970326152928S101702A062772AYKD0500))
  FREE PACKAGE(KD.YKDS91.(19970327180544S101702A062772AYKDS91))
  FREE PACKAGE(KD.YKDH00.(19970327180543S101702A062772AYKDH00))
  FREE PACKAGE(A1P.YKD0500.(19970327180544S101702A062772AYKD0500))
  FREE PACKAGE(A2P.YKD0500.(19970327180544S101702A062772AYKD0500))
  FREE PACKAGE(KD.YKD0500.(19970327180544S101702A062772AYKD0500))
  FREE PACKAGE(EA.YEA0010.(19970401145030S101702Z304098AYEA0010))
  FREE PACKAGE(YY.YYWBMON.(19970402133425S101702Z304278AYYWBMON))
  FREE PACKAGE(YY.YYNFP24.(19970403153340S101702A062839AYYNFP24))
  FREE PACKAGE(YY.YYNFP14.(19970403153334S101702A062839AYYNFP14))
  FREE PACKAGE(SX.YSX6405.(19970403143003S101702M000784AYSX6405))
  FREE PACKAGE(SX.YSX64P5.(19970403142956S101702M000784AYSX64P5))
  FREE PACKAGE(A2P.FD0350.(19970410145407S101702A062970AFD0350))
  FREE PACKAGE(BX.YBX0323.(19970410143107S101702A063036AYBX0323))
  FREE PACKAGE(BX.YBX0381.(19970410143108S101702A063036AYBX0381))
  FREE PACKAGE(BX.YBX0312.(19970410143101S101702A063036AYBX0312))
  FREE PACKAGE(BX.YBXBI02.(19970410143058S101702A063036AYBXBI02))
  FREE PACKAGE(BX.YBX0121.(19970410143059S101702A063036AYBX0121))
  FREE PACKAGE(BX.YBXBI03.(19970410143058S101702A063036AYBXBI03))
  FREE PACKAGE(BX.YBX0383.(19970410143110S101702A063036AYBX0383))
  FREE PACKAGE(BX.YBX0313.(19970410143102S101702A063036AYBX0313))
  FREE PACKAGE(BX.YBX0321.(19970410143104S101702A063036AYBX0321))
  FREE PACKAGE(BX.YBX0382.(19970410143109S101702A063036AYBX0382))
  FREE PACKAGE(BX.YBX0311.(19970410143100S101702A063036AYBX0311))
  FREE PACKAGE(BX.YBX0320.(19970410143103S101702A063036AYBX0320))
  FREE PACKAGE(BX.YBXBI01.(19970410143057S101702A063036AYBXBI01))
  FREE PACKAGE(YY.YYWBMON.(19970407100855S101702Z304797AYYWBMON))
  FREE PACKAGE(OD.OD7300.(19970106172633S101702A060567AOD7300))
  FREE PACKAGE(OD.OD7300.(19970107160900S101702A060607AOD7300))
  FREE PACKAGE(EA.YEA0011.(19970108165718S101702Z289119AYEA0011))
  FREE PACKAGE(EA.YEA0010.(19970108165717S101702Z289119AYEA0010))
  FREE PACKAGE(SX.YSX64P5.(19970109134552S101702A060555AYSX64P5))
  FREE PACKAGE(LV.YLV0024.(19970109144533S101702A060651AYLV0024))
  FREE PACKAGE(BX.YBX0320.(19970116175300S101702A060891AYBX0320))
  FREE PACKAGE(BX.YBX0382.(19970116175301S101702A060891AYBX0382))
  FREE PACKAGE(BX.YBX0312.(19970116175259S101702A060891AYBX0312))
  FREE PACKAGE(EA.YEA0011.(19970123135233S101702A061046AYEA0011))
  FREE PACKAGE(EA.YEA0010.(19970123135233S101702A061046AYEA0010))
  FREE PACKAGE(A2P.FD0350.(19970128173847S101702Z293371AFD0350))
  FREE PACKAGE(CR.CR5000.(19970206135312S101702A061341ACR5000))
  FREE PACKAGE(SX.YSX6405.(19970206143330S101702A061469AYSX6405))
  FREE PACKAGE(SX.YSX64P5.(19970206143327S101702A061469AYSX64P5))
  FREE PACKAGE(EA.YEA0010.(19970206155028S101702M000764AYEA0010))
  FREE PACKAGE(EA.YEA0001.(19970206155025S101702M000764AYEA0001))
  FREE PACKAGE(EA.YEA0011.(19970206155016S101702M000764AYEA0011))
  FREE PACKAGE(A1P.YKD0500.(19970207084459S101702A061408AYKD0500))
  FREE PACKAGE(A2P.YKD0500.(19970207084459S101702A061408AYKD0500))
  FREE PACKAGE(KD.YKD0500.(19970207084459S101702A061408AYKD0500))
  FREE PACKAGE(A1P.KD0500.(19970207084703S101702A061408AKD0500))
  FREE PACKAGE(A2P.KD0500.(19970207084703S101702A061408AKD0500))
  FREE PACKAGE(A1P.YKD0500.(19970220131055S101702A061859AYKD0500))
  FREE PACKAGE(A2P.YKD0500.(19970220131055S101702A061859AYKD0500))
  FREE PACKAGE(KD.YKD0500.(19970220131055S101702A061859AYKD0500))
  FREE PACKAGE(CD.YCDCIFD.(19970227151435S101702A061867AYCDCIFD))
  FREE PACKAGE(OE.OE8110.(19970227165001S101702A062050AOE8110))
  FREE PACKAGE(SX.YSX6405.(19970620152422S101702A064844AYSX6405))
  FREE PACKAGE(BX.YBX0323.(19970703160012S101702A064922AYBX0323))
  FREE PACKAGE(BX.YBX0383.(19970703160013S101702A064922AYBX0383))
  FREE PACKAGE(BX.YBX0382.(19970703160012S101702A064922AYBX0382))
  FREE PACKAGE(BX.YBX0312.(19970703160008S101702A064922AYBX0312))
  FREE PACKAGE(BX.YBXBI02.(19970703160014S101702A064922AYBXBI02))
  FREE PACKAGE(BX.YBX0313.(19970703160009S101702A064922AYBX0313))
  FREE PACKAGE(BX.YBX0381.(19970703160012S101702A064922AYBX0381))
  FREE PACKAGE(BX.YBX0321.(19970703160011S101702A064922AYBX0321))
  FREE PACKAGE(BX.YBX0320.(19970703160010S101702A064922AYBX0320))
  FREE PACKAGE(BX.YBX0311.(19970703160008S101702A064922AYBX0311))
  FREE PACKAGE(BX.YBXBI01.(19970703160014S101702A064922AYBXBI01))
  FREE PACKAGE(BX.YBX0121.(19970703160016S101702A064922AYBX0121))
  FREE PACKAGE(BX.YBXBI03.(19970703160015S101702A064922AYBXBI03))
  FREE PACKAGE(OD.OD7290.(19970703160551S101702M000808AOD7290))
  FREE PACKAGE(OD.OD7300.(19970703160555S101702M000808AOD7300))
  FREE PACKAGE(OD.OD7160.(19970703160630S101702M000808AOD7160))
  FREE PACKAGE(BX.YBX0312.(19970708065743S101702Z320108AYBX0312))
  FREE PACKAGE(BX.YBX0321.(19970708074924S101702Z320111AYBX0321))
  FREE PACKAGE(BX.YBX0320.(19970708074923S101702Z320111AYBX0320))
  FREE PACKAGE(BX.YBX0321.(19970708085757S101702Z320122AYBX0321))
  FREE PACKAGE(BX.YBX0320.(19970708085756S101702Z320122AYBX0320))
  FREE PACKAGE(BX.YBX0321.(19970708083532S101702Z320122AYBX0321))
  FREE PACKAGE(BX.YBX0320.(19970708083532S101702Z320122AYBX0320))
  FREE PACKAGE(BX.YBX0321.(19970708092728S101702Z320133AYBX0321))
  FREE PACKAGE(BX.YBX0320.(19970708092727S101702Z320133AYBX0320))
  FREE PACKAGE(BX.YBX0312.(19970710130348S101702A065203AYBX0312))
  FREE PACKAGE(BX.YBX0320.(19970710130345S101702A065203AYBX0320))
  FREE PACKAGE(BX.YBX0321.(19970710130346S101702A065203AYBX0321))
  FREE PACKAGE(SX.YSX64P5.(19970707141043S101702A065151AYSX64P5))
  FREE PACKAGE(SX.YSX6405.(19970707141044S101702A065151AYSX6405))
  FREE PACKAGE(SX.YSX6405.(19970714142047S101702A065304AYSX6405))
  FREE PACKAGE(SX.YSX64P5.(19970714142046S101702A065304AYSX64P5))
  FREE PACKAGE(SX.YSX64P5.(19970715153931S101702A065354AYSX64P5))
  FREE PACKAGE(SX.YSX6405.(19970715153931S101702A065354AYSX6405))
  FREE PACKAGE(YY.YYWBMON.(19970710142705S101702M000721AYYWBMON))
  FREE PACKAGE(BF.BF5820.(19970710145443S101702M000721ABF5820))
  FREE PACKAGE(BX.YBX0311.(19970711071158S101702Z320845AYBX0311))
  FREE PACKAGE(BX.BX6400.(19970717131027S101702A065289ABX6400))
  FREE PACKAGE(BX.YBXBI03.(19970717131555S101702A065362AYBXBI03))
  FREE PACKAGE(BX.YBX0313.(19970717131547S101702A065362AYBX0313))
  FREE PACKAGE(BX.YBXBI02.(19970717131554S101702A065362AYBXBI02))
  FREE PACKAGE(EA.YEA0011.(19970717131722S101702A065360AYEA0011))
  FREE PACKAGE(BX.YBX0312.(19970717131547S101702A065362AYBX0312))
  FREE PACKAGE(BX.YBX0320.(19970717131548S101702A065362AYBX0320))
  FREE PACKAGE(BX.YBX0121.(19970717131555S101702A065362AYBX0121))
  FREE PACKAGE(BX.YBX0383.(19970717131553S101702A065362AYBX0383))
  FREE PACKAGE(BX.YBX0381.(19970717131551S101702A065362AYBX0381))
  FREE PACKAGE(BX.YBX0382.(19970717131552S101702A065362AYBX0382))
  FREE PACKAGE(BX.YBX0323.(19970717131550S101702A065362AYBX0323))
  FREE PACKAGE(BX.YBX0321.(19970717131549S101702A065362AYBX0321))
  FREE PACKAGE(BX.YBXBI01.(19970717131551S101702A065362AYBXBI01))
  FREE PACKAGE(BX.YBX0311.(19970717131546S101702A065362AYBX0311))
  FREE PACKAGE(EA.YEA0010.(19970717131720S101702A065360AYEA0010))
  FREE PACKAGE(BX.YBX0311.(19970717133054S101702A065362AYBX0311))
  FREE PACKAGE(BX.YBX0320.(19970717133057S101702A065362AYBX0320))
  FREE PACKAGE(BX.YBX0321.(19970717133058S101702A065362AYBX0321))
  FREE PACKAGE(BX.YBX0313.(19970717133056S101702A065362AYBX0313))
  FREE PACKAGE(BX.YBX0312.(19970717133055S101702A065362AYBX0312))
  FREE PACKAGE(BX.YBX0121.(19970717133108S101702A065362AYBX0121))
  FREE PACKAGE(BX.YBX0381.(19970717133103S101702A065362AYBX0381))
  FREE PACKAGE(BX.YBX0383.(19970717133105S101702A065362AYBX0383))
  FREE PACKAGE(BX.YBXBI02.(19970717133106S101702A065362AYBXBI02))
  FREE PACKAGE(BX.YBXBI03.(19970717133107S101702A065362AYBXBI03))
  FREE PACKAGE(BX.YBX0323.(19970717133101S101702A065362AYBX0323))
  FREE PACKAGE(BX.YBX0382.(19970717133104S101702A065362AYBX0382))
  FREE PACKAGE(BX.YBXBI01.(19970717133102S101702A065362AYBXBI01))
  FREE PACKAGE(DX.DX5400.(19970417125527S101702A063250ADX5400))
  FREE PACKAGE(DX.DX5410.(19970417125528S101702A063250ADX5410))
  FREE PACKAGE(BX.YBX0313.(19970417134905S101702A063207AYBX0313))
  FREE PACKAGE(BX.YBX0321.(19970417134905S101702A063207AYBX0321))
  FREE PACKAGE(BX.YBX0312.(19970417134903S101702A063207AYBX0312))
  FREE PACKAGE(BX.YBX0311.(19970417134902S101702A063207AYBX0311))
  FREE PACKAGE(BX.YBX0321.(19970417142631S101702A063207AYBX0321))
  FREE PACKAGE(BX.YBX0311.(19970417142628S101702A063207AYBX0311))
  FREE PACKAGE(BX.YBX0313.(19970417142630S101702A063207AYBX0313))
  FREE PACKAGE(BX.YBX0312.(19970417142629S101702A063207AYBX0312))
  FREE PACKAGE(YY.YYWBMON.(19970417151042S101702M000718AYYWBMON))
  FREE PACKAGE(EA.YEA0010.(19970417154119S101702A063297AYEA0010))
  FREE PACKAGE(EW.EW7010.(19970417124259S101702A063168AEW7010))
  FREE PACKAGE(SM.SMPATDEL.())
  FREE PACKAGE(EA.YEA0010.(19970424130254S101702A063459AYEA0010))
  FREE PACKAGE(EA.YEA0010.(19970421132703S101702Z307341AYEA0010))
  FREE PACKAGE(EA.YEA0010.(19970421115820S101702Z307341AYEA0010))
  FREE PACKAGE(SM.SMPHREPL.())
  FREE PACKAGE(KX.YKX002.(19970501123152S101702A063604AYKX002))
  FREE PACKAGE(SX.YSX64P5.(19970507132447S101702M000792AYSX64P5))
  FREE PACKAGE(BX.BX6750.(19970507161423S101702Z310325ABX6750))
  FREE PACKAGE(SX.YSX6405.(19970513154526S101702A063879AYSX6405))
  FREE PACKAGE(SX.YSX64P5.(19970513154524S101702A063879AYSX64P5))
  FREE PACKAGE(KS.YKS0809.(19970520152634S101702A064036AYKS0809))
  FREE PACKAGE(SX.YSX6405.(19970514165526S101702A063968AYSX6405))
  FREE PACKAGE(SX.YSX64P5.(19970514165525S101702A063968AYSX64P5))
  FREE PACKAGE(SX.YSX6405.(19970514084910S101702Z311200AYSX6405))
  FREE PACKAGE(SX.YSX64P5.(19970514084909S101702Z311200AYSX64P5))
  FREE PACKAGE(KS.YKS0809.(19970515130322S101702A063870AYKS0809))
  FREE PACKAGE(EW.EW7020.(19970515123226S101702A063787AEW7020))
  FREE PACKAGE(YY.YYWBMON.(19970515152742S101702M000719AYYWBMON))
  FREE PACKAGE(SM.SMJCLEX1.())
  FREE PACKAGE(EW.EW7020.(19970522155508S101702A064034AEW7020))
  FREE PACKAGE(YY.YYWBMON.(19970602065921S101702Z313900AYYWBMON))
  FREE PACKAGE(BX.BX6750.(19970529124001S101702A064140ABX6750))
  FREE PACKAGE(SX.YSX6405.(19970606100244S101702Z315022AYSX6405))
  FREE PACKAGE(SX.YSX64P5.(19970606142544S101702A064475AYSX64P5))
  FREE PACKAGE(SX.YSX6405.(19970606142544S101702A064475AYSX6405))
  FREE PACKAGE(SX.YSX64P5.(19970605140224S101702M000795AYSX64P5))
  FREE PACKAGE(SX.YSX6405.(19970605140226S101702M000795AYSX6405))
  FREE PACKAGE(EM.EM0900.(19970605170247S101702A064138AEM0900))
  FREE PACKAGE(BX.YBX0381.(19970605172728S101702A064221AYBX0381))
  FREE PACKAGE(BX.YBXBI02.(19970605172718S101702A064221AYBXBI02))
  FREE PACKAGE(BX.YBX0382.(19970605172730S101702A064221AYBX0382))
  FREE PACKAGE(BX.YBX0313.(19970605172723S101702A064221AYBX0313))
  FREE PACKAGE(BX.YBX0312.(19970605172722S101702A064221AYBX0312))
  FREE PACKAGE(BX.YBX0311.(19970605172721S101702A064221AYBX0311))
  FREE PACKAGE(BX.YBX0121.(19970605172720S101702A064221AYBX0121))
  FREE PACKAGE(BX.YBX0321.(19970605172725S101702A064221AYBX0321))
  FREE PACKAGE(BX.YBXBI03.(19970605172719S101702A064221AYBXBI03))
  FREE PACKAGE(BX.YBX0320.(19970605172724S101702A064221AYBX0320))
  FREE PACKAGE(BX.YBX0323.(19970605172726S101702A064221AYBX0323))
  FREE PACKAGE(BX.YBX0383.(19970605172732S101702A064221AYBX0383))
  FREE PACKAGE(BX.YBXBI01.(19970605172716S101702A064221AYBXBI01))
  FREE PACKAGE(YY.YYWBMON.(19970612164152S101702M000720AYYWBMON))
  FREE PACKAGE(YY.YYWBMON.(19970612085344S101702Z316050AYYWBMON))
  FREE PACKAGE(BX.YBX0312.(19970612132948S101702A064570AYBX0312))
  FREE PACKAGE(BX.YBX0313.(19971002134434S101702A067077AYBX0313))
  FREE PACKAGE(BX.YBX0323.(19971002134435S101702A067077AYBX0323))
  FREE PACKAGE(BX.YBX0383.(19971002134435S101702A067077AYBX0383))
  FREE PACKAGE(BX.BX6700.(19971002134658S101702A067077ABX6700))
  FREE PACKAGE(BX.BX8000.(19971002134658S101702A067077ABX8000))
  FREE PACKAGE(EM.YEM0064.(19971013090424S101702A067405AYEM0064))
  FREE PACKAGE(EM.YEM0065.(19971013090419S101702A067405AYEM0065))
  FREE PACKAGE(EM.YEM0061.(19971013090422S101702A067405AYEM0061))
  FREE PACKAGE(EM.YEM0900.(19971013090419S101702A067405AYEM0900))
  FREE PACKAGE(EM.EM0900.(19971013090719S101702A067405AEM0900))
  FREE PACKAGE(EM.EM0070.(19971013090717S101702A067405AEM0070))
  FREE PACKAGE(EM.EM0080.(19971013090718S101702A067405AEM0080))
  FREE PACKAGE(LV.YLV0024.(19971009142943S101702A067320AYLV0024))
  FREE PACKAGE(KX.YKX002.(19971016164307S101702A067570AYKX002))
  FREE PACKAGE(EC.EC7103.(19971016150142S101702A067558AEC7103))
  FREE PACKAGE(OE.OE8110.(19971020135626S101702A067670AOE8110))
  FREE PACKAGE(BX.YBX0121.(19971030134551S101702A067836AYBX0121))
  FREE PACKAGE(BX.YBXBI03.(19971030134549S101702A067836AYBXBI03))
  FREE PACKAGE(OE.OE8110.(19971030134735S101702A067911AOE8110))
  FREE PACKAGE(EM.EM0060.(19971030134545S101702A067897AEM0060))
  FREE PACKAGE(BX.YBX0323.(19970723092129S101702Z323872AYBX0323))
  FREE PACKAGE(BX.YBX0321.(19970723092128S101702Z323872AYBX0321))
  FREE PACKAGE(BX.YBX0320.(19970723092127S101702Z323872AYBX0320))
  FREE PACKAGE(BX.YBX0313.(19970723092031S101702Z323871AYBX0313))
  FREE PACKAGE(BX.YBX0311.(19970723092030S101702Z323871AYBX0311))
  FREE PACKAGE(BX.YBX0312.(19970723092031S101702Z323871AYBX0312))
  FREE PACKAGE(BX.YBX0323.(19970724124829S101702A065494AYBX0323))
  FREE PACKAGE(BX.YBX0313.(19970724124837S101702A065494AYBX0313))
  FREE PACKAGE(BX.YBX0311.(19970724124832S101702A065494AYBX0311))
  FREE PACKAGE(BX.YBX0312.(19970724124835S101702A065494AYBX0312))
  FREE PACKAGE(BX.YBX0320.(19970724124839S101702A065494AYBX0320))
  FREE PACKAGE(BX.YBX0321.(19970724124827S101702A065494AYBX0321))
  FREE PACKAGE(BX.BX5100.(19970724125214S101702A065494ABX5100))
  FREE PACKAGE(OD.OD7220.(19970807105824S101702Z325954AOD7220))
  FREE PACKAGE(OD.OD7120.(19970807105631S101702Z325951AOD7120))
  FREE PACKAGE(SX.YSX6405.(19970807134752S101702A065801AYSX6405))
  FREE PACKAGE(OD.OD7220.(19970811140644S101702Z326415AOD7220))
  FREE PACKAGE(OD.OD7120.(19970811140607S101702Z326413AOD7120))
  FREE PACKAGE(A1P.YKD0500.(19970814140402S101702M000800AYKD0500))
  FREE PACKAGE(A2P.YKD0500.(19970814140402S101702M000800AYKD0500))
  FREE PACKAGE(KD.YKD0500.(19970814140402S101702M000800AYKD0500))
  FREE PACKAGE(KX.YKX002.(19970814200734S101702A065850AYKX002))
  FREE PACKAGE(BB.BB0630.(19970814210720S101702A065981ABB0630))
  FREE PACKAGE(EA.YEA0001.(19970814210804S101702A065956AYEA0001))
  FREE PACKAGE(EA.YEA0010.(19970814210808S101702A065956AYEA0010))
  FREE PACKAGE(EA.YEA0011.(19970814210813S101702A065956AYEA0011))
  FREE PACKAGE(CD.YCDCIFD.(19970814141023S101702M000800AYCDCIFD))
  FREE PACKAGE(KD.YKDH03.(19970814141325S101702M000800AYKDH03))
  FREE PACKAGE(SX.YSX6405.(19970814142658S101702M000819AYSX6405))
  FREE PACKAGE(SX.YSX64P5.(19970814142657S101702M000819AYSX64P5))
  FREE PACKAGE(LC.LC5000.(19970814155557S101702M000820ALC5000))
  FREE PACKAGE(SX.YSX6405.(19970814160448S101702M000819AYSX6405))
  FREE PACKAGE(SX.YSX64P5.(19970814160447S101702M000819AYSX64P5))
  FREE PACKAGE(YY.YYWBMON.(19970814173805S101702M000722AYYWBMON))
  FREE PACKAGE(SX.YSX64P5.(19970818093106S101702Z327680AYSX64P5))
  FREE PACKAGE(SX.YSX6405.(19970818093107S101702Z327680AYSX6405))
  FREE PACKAGE(SX.YSX64P5.(19970818161022S101702A066102AYSX64P5))
  FREE PACKAGE(SX.YSX6405.(19970818161023S101702A066102AYSX6405))
  FREE PACKAGE(OD.OD7280.(19970821152509S101702A066237AOD7280))
  FREE PACKAGE(OD.OD7280.(19970821163430S101702A066237AOD7280))
  FREE PACKAGE(AT.AT7200.(19970821130820S101702A065919AAT7200))
  FREE PACKAGE(OD.OD7120.(19970821132306S101702A066166AOD7120))
  FREE PACKAGE(OD.OD7220.(19970821132318S101702A066166AOD7220))
  FREE PACKAGE(SX.YSX6405.(19970821140531S101702A066252AYSX6405))
  FREE PACKAGE(SX.YSX64P5.(19970821140530S101702A066252AYSX64P5))
  FREE PACKAGE(TK.TK0150.(19970828125856S101702A066346ATK0150))
  FREE PACKAGE(SA.SA0370.(19970904124754S101702M000827ASA0370))
  FREE PACKAGE(BX.YBX0311.(19970904130822S101702A066492AYBX0311))
  FREE PACKAGE(A1P.YKD0500.(19970904152318S101702A066089AYKD0500))
  FREE PACKAGE(A2P.YKD0500.(19970904152318S101702A066089AYKD0500))
  FREE PACKAGE(KD.YKD0500.(19970904152318S101702A066089AYKD0500))
  FREE PACKAGE(BX.YBX0311.(19970904151111S101702A066492AYBX0311))
  FREE PACKAGE(EA.YEA0010.(19970904153951S101702A066529AYEA0010))
  FREE PACKAGE(YY.YYWBMON.(19970911140351S101702M000723AYYWBMON))
  FREE PACKAGE(SM.SMUPDAT0.())
  FREE PACKAGE(SM.SMUPDAT1.())
  FREE PACKAGE(LV.YLV0024.(19970918124528S101702A066875AYLV0024))
  FREE PACKAGE(SX.YSX6405.(19970918123555S101702A066829AYSX6405))
  FREE PACKAGE(A1P.YKD0500.(19970918130127S101702A066876AYKD0500))
  FREE PACKAGE(A2P.YKD0500.(19970918130127S101702A066876AYKD0500))
  FREE PACKAGE(KD.YKD0500.(19970918130127S101702A066876AYKD0500))
  FREE PACKAGE(A1P.YKD0500.(19970915163933S101702A066826AYKD0500))
  FREE PACKAGE(A2P.YKD0500.(19970915163933S101702A066826AYKD0500))
  FREE PACKAGE(KD.YKD0500.(19970915163933S101702A066826AYKD0500))
  FREE PACKAGE(EA.YEA0010.(19980108153347S101702M000886AYEA0010))
  FREE PACKAGE(EM.YEM0061.(19980108153349S101702M000886AYEM0061))
  FREE PACKAGE(EM.YEM0065.(19980108153339S101702M000886AYEM0065))
  FREE PACKAGE(EM.EM0060.(19980108153802S101702M000886AEM0060))
  FREE PACKAGE(EC.YECAV.(19980115174314S101702M000856AYECAV))
  FREE PACKAGE(EC.YECCLAR.(19980115174315S101702M000856AYECCLAR))
  FREE PACKAGE(SX.YSX64P5.(19980115174323S101702M000856AYSX64P5))
  FREE PACKAGE(SX.YSX6405.(19980115174324S101702M000856AYSX6405))
  FREE PACKAGE(A1P.YKD0500.(19980115174941S101702M000856AYKD0500))
  FREE PACKAGE(A2P.YKD0500.(19980115174941S101702M000856AYKD0500))
  FREE PACKAGE(KD.YKD0500.(19980115174941S101702M000856AYKD0500))
  FREE PACKAGE(CD.YCDCIFD.(19980115174306S101702M000856AYCDCIFD))
  FREE PACKAGE(BX.YBXBI01.(19980115133559S101702A069359AYBXBI01))
  FREE PACKAGE(KV.BX0130.(19980115133833S101702A069359ABX0130))
  FREE PACKAGE(EC.YECCRCR.(19980115174316S101702M000856AYECCRCR))
  FREE PACKAGE(EC.YECCR.(19980115174315S101702M000856AYECCR))
  FREE PACKAGE(EC.YECMUPD.(19980115174318S101702M000856AYECMUPD))
  FREE PACKAGE(EC.YECCL.(19980115174315S101702M000856AYECCL))
  FREE PACKAGE(A1P.YYECGRI.(19980115174545S101702M000856AYYECGRI))
  FREE PACKAGE(A2P.YYECGRI.(19980115174545S101702M000856AYYECGRI))
  FREE PACKAGE(YY.YYECGRI.(19980115174545S101702M000856AYYECGRI))
  FREE PACKAGE(EC.YECCRL.(19980115174316S101702M000856AYECCRL))
  FREE PACKAGE(EC.EC5099.(19980122145046S101702A069866AEC5099))
  FREE PACKAGE(LC.LC5000.(19980122143236S101702M000889ALC5000))
  FREE PACKAGE(BB.BB0610.(19980123072119S101702A069974ABB0610))
  FREE PACKAGE(SX.YSX64P5.(19980123121052S101702Z356881AYSX64P5))
  FREE PACKAGE(SX.YSX6405.(19980123121054S101702Z356881AYSX6405))
  FREE PACKAGE(SX.YSX6405.(19980123141704S101702Z356907AYSX6405))
  FREE PACKAGE(SX.YSX64P5.(19980123141704S101702Z356907AYSX64P5))
  FREE PACKAGE(SX.YSX6405.(19980123145045S101702A070007AYSX6405))
  FREE PACKAGE(SX.YSX64P5.(19980123145045S101702A070007AYSX64P5))
  FREE PACKAGE(SX.YSX64P5.(19980119104109S101702Z355843AYSX64P5))
  FREE PACKAGE(SX.YSX6405.(19980119155852S101702A069899AYSX6405))
  FREE PACKAGE(SX.YSX64P5.(19980119155852S101702A069899AYSX64P5))
  FREE PACKAGE(EA.YEA0010.(19980205151554S101702A070151AYEA0010))
  FREE PACKAGE(EC.YECAV.(19980206175259S101702A070225AYECAV))
  FREE PACKAGE(EC.YECCLAR.(19980206175303S101702A070225AYECCLAR))
  FREE PACKAGE(EC.YECRPA.(19980206175319S101702A070225AYECRPA))
  FREE PACKAGE(EC.YECRPAV.(19980206175320S101702A070225AYECRPAV))
  FREE PACKAGE(EC.YECSAS.(19980206175324S101702A070225AYECSAS))
  FREE PACKAGE(YY.YECSAS.(19980206175324S101702A070225AYECSAS))
  FREE PACKAGE(EC.YECSDS.(19980206175327S101702A070225AYECSDS))
  FREE PACKAGE(EC.YECSDH.(19980206175326S101702A070225AYECSDH))
  FREE PACKAGE(EC.YECSBR.(19980206175325S101702A070225AYECSBR))
  FREE PACKAGE(EC.YECSFPR.(19980206175330S101702A070225AYECSFPR))
  FREE PACKAGE(EC.YECSAN.(19980206175323S101702A070225AYECSAN))
  FREE PACKAGE(EC.YECIN.(19980206175315S101702A070225AYECIN))
  FREE PACKAGE(EC.YECRP.(19980206175319S101702A070225AYECRP))
  FREE PACKAGE(EC.YECMUPD.(19980206175318S101702A070225AYECMUPD))
  FREE PACKAGE(A1P.YECGRI.(19980206175312S101702A070225AYECGRI))
  FREE PACKAGE(A2P.YECGRI.(19980206175312S101702A070225AYECGRI))
  FREE PACKAGE(EC.YECGRI.(19980206175312S101702A070225AYECGRI))
  FREE PACKAGE(EC.YECCLC.(19980206175303S101702A070225AYECCLC))
  FREE PACKAGE(EC.YECRTV.(19980206175323S101702A070225AYECRTV))
  FREE PACKAGE(EC.YECSHD1.(19980206175331S101702A070225AYECSHD1))
  FREE PACKAGE(EC.YECDCI.(19980206175310S101702A070225AYECDCI))
  FREE PACKAGE(EC.YECCRCR.(19980206175307S101702A070225AYECCRCR))
  FREE PACKAGE(EC.YECSHD2.(19980206175332S101702A070225AYECSHD2))
  FREE PACKAGE(EC.YECSEG.(19980206175328S101702A070225AYECSEG))
  FREE PACKAGE(EC.YECCL.(19980206175302S101702A070225AYECCL))
  FREE PACKAGE(EC.YECSES.(19980206175329S101702A070225AYECSES))
  FREE PACKAGE(EC.YECSLV.(19980206175333S101702A070225AYECSLV))
  FREE PACKAGE(EC.YECCR.(19980206175304S101702A070225AYECCR))
  FREE PACKAGE(A1P.YKD0500.(19980206175332S101702A070225AYKD0500))
  FREE PACKAGE(A2P.YKD0500.(19980206175332S101702A070225AYKD0500))
  FREE PACKAGE(KD.YKD0500.(19980206175332S101702A070225AYKD0500))
  FREE PACKAGE(EC.YECCLV.(19980206175304S101702A070225AYECCLV))
  FREE PACKAGE(EC.YECCRL.(19980206175308S101702A070225AYECCRL))
  FREE PACKAGE(EC.YECCRAR.(19980206175305S101702A070225AYECCRAR))
  FREE PACKAGE(EC.YECSZS.(19980206175335S101702A070225AYECSZS))
  FREE PACKAGE(EC.YECSL.(19980206175333S101702A070225AYECSL))
  FREE PACKAGE(EC.YECCRC.(19980206175306S101702A070225AYECCRC))
  FREE PACKAGE(EC.YECSEX.(19980206175329S101702A070225AYECSEX))
  FREE PACKAGE(EC.YECCRV.(19980206175309S101702A070225AYECCRV))
  FREE PACKAGE(EC.YECSFO.(19980206175330S101702A070225AYECSFO))
  FREE PACKAGE(EC.YECRT.(19980206175322S101702A070225AYECRT))
  FREE PACKAGE(EC.YECSDOC.(19980206175327S101702A070225AYECSDOC))
  FREE PACKAGE(SX.YSX64P5.(19971106134926S101702M000849AYSX64P5))
  FREE PACKAGE(EC.YECCL.(19971106165431S101702A068113AYECCL))
  FREE PACKAGE(EC.YECRTV.(19971106165429S101702A068113AYECRTV))
  FREE PACKAGE(EC.YECRT.(19971106165428S101702A068113AYECRT))
  FREE PACKAGE(EC.YECSL.(19971106165430S101702A068113AYECSL))
  FREE PACKAGE(EC.YECRPAV.(19971106165428S101702A068113AYECRPAV))
  FREE PACKAGE(EC.YECRPA.(19971106165428S101702A068113AYECRPA))
  FREE PACKAGE(EC.YECCLAR.(19971106165420S101702A068113AYECCLAR))
  FREE PACKAGE(EC.YECSFPR.(19971106165429S101702A068113AYECSFPR))
  FREE PACKAGE(EC.YECIN.(19971106165426S101702A068113AYECIN))
  FREE PACKAGE(EC.YECCLV.(19971106165421S101702A068113AYECCLV))
  FREE PACKAGE(EC.YECCRAR.(19971106165422S101702A068113AYECCRAR))
  FREE PACKAGE(EC.YECCRC.(19971106165423S101702A068113AYECCRC))
  FREE PACKAGE(EC.YECRP.(19971106165427S101702A068113AYECRP))
  FREE PACKAGE(EC.YECCRV.(19971106165424S101702A068113AYECCRV))
  FREE PACKAGE(EC.YECDCI.(19971106165425S101702A068113AYECDCI))
  FREE PACKAGE(EC.YECCRL.(19971106165424S101702A068113AYECCRL))
  FREE PACKAGE(EC.YECCRCR.(19971106165423S101702A068113AYECCRCR))
  FREE PACKAGE(EC.YECAV.(19971106165427S101702A068113AYECAV))
  FREE PACKAGE(EC.YECCLC.(19971106165420S101702A068113AYECCLC))
  FREE PACKAGE(EC.YECCR.(19971106165421S101702A068113AYECCR))
  FREE PACKAGE(EC.YECCRAR.(19971107094909S101702A068113AYECCRAR))
  FREE PACKAGE(EC.YECCRL.(19971107094912S101702A068113AYECCRL))
  FREE PACKAGE(EC.YECRTV.(19971107094918S101702A068113AYECRTV))
  FREE PACKAGE(EC.YECSFPR.(19971107094918S101702A068113AYECSFPR))
  FREE PACKAGE(EC.YECRPA.(19971107094916S101702A068113AYECRPA))
  FREE PACKAGE(EC.YECCRCR.(19971107094911S101702A068113AYECCRCR))
  FREE PACKAGE(EC.YECCRC.(19971107094910S101702A068113AYECCRC))
  FREE PACKAGE(EC.YECCR.(19971107094908S101702A068113AYECCR))
  FREE PACKAGE(EC.YECIN.(19971107094915S101702A068113AYECIN))
  FREE PACKAGE(EC.YECRT.(19971107094917S101702A068113AYECRT))
  FREE PACKAGE(EC.YECCLC.(19971107094907S101702A068113AYECCLC))
  FREE PACKAGE(EC.YECAV.(19971107094915S101702A068113AYECAV))
  FREE PACKAGE(EC.YECRP.(19971107094916S101702A068113AYECRP))
  FREE PACKAGE(EC.YECCLAR.(19971107094906S101702A068113AYECCLAR))
  FREE PACKAGE(EC.YECRPAV.(19971107094917S101702A068113AYECRPAV))
  FREE PACKAGE(EC.YECDCI.(19971107094913S101702A068113AYECDCI))
  FREE PACKAGE(EC.YECSL.(19971107094918S101702A068113AYECSL))
  FREE PACKAGE(EC.YECCLV.(19971107094908S101702A068113AYECCLV))
  FREE PACKAGE(EC.YECCL.(19971107094920S101702A068113AYECCL))
  FREE PACKAGE(EC.YECCRV.(19971107094912S101702A068113AYECCRV))
  FREE PACKAGE(RM.RP7980.(19971104145142S101702Z343279ARP7980))
  FREE PACKAGE(YY.YYECGRP.(19971105111102S101702A068033AYYECGRP))
  FREE PACKAGE(YY.YYECGRP.(19971105111102CGS101702A068033AYYECGRP))
  FREE PACKAGE(BX.YBXBI02.(19971113142012S101702A068187AYBXBI02))
  FREE PACKAGE(EA.YEA0010.(19971113150405S101702A068044AYEA0010))
  FREE PACKAGE(SM.SMPHBILD.())
  FREE PACKAGE(YY.YYECGRI.(19971111155503S101702A068203AYYECGRI))
  FREE PACKAGE(SX.YSX6405.(19971119141110S101702A068442AYSX6405))
  FREE PACKAGE(SX.YSX64P5.(19971119141112S101702A068442AYSX64P5))
  FREE PACKAGE(A1P.YYECGRI.(19971120185114S101702M000818AYYECGRI))
  FREE PACKAGE(A2P.YYECGRI.(19971120185114S101702M000818AYYECGRI))
  FREE PACKAGE(YY.YYECGRI.(19971120185114S101702M000818AYYECGRI))
  FREE PACKAGE(A1P.YKD0500.(19971120185108S101702M000818AYKD0500))
  FREE PACKAGE(A2P.YKD0500.(19971120185108S101702M000818AYKD0500))
  FREE PACKAGE(KD.YKD0500.(19971120185108S101702M000818AYKD0500))
  FREE PACKAGE(EC.YECMUPD.(19971120190914S101702M000855AYECMUPD))
  FREE PACKAGE(CD.YCDCIFD.(19971120133445S101702A068246AYCDCIFD))
  FREE PACKAGE(YY.YYWBMON.(19971120155919S101702M000725AYYWBMON))
  FREE PACKAGE(A1P.YKD0500.(19971125120634S101702Z346700AYKD0500))
  FREE PACKAGE(A2P.YKD0500.(19971125120634S101702Z346700AYKD0500))
  FREE PACKAGE(KD.YKD0500.(19971125120634S101702Z346700AYKD0500))
  FREE PACKAGE(YY.YYWBMON.(19971125064220S101702Z346561AYYWBMON))
  FREE PACKAGE(EC.YECMUPD.(19971125164536S101702A068569AYECMUPD))
  FREE PACKAGE(YY.YYGPAS.(19971125164555S101702A068569AYYGPAS))
  FREE PACKAGE(YY.YYGPAS.(19971126161741S101702Z347154AYYGPAS))
  FREE PACKAGE(EC.YECMUPD.(19971126112833S101702A068620AYECMUPD))
  FREE PACKAGE(EC.YECMUPD.(19971126124340S101702Z347060AYECMUPD))
  FREE PACKAGE(YY.YYGPAS.(19971127123700S101702Z347334AYYGPAS))
  FREE PACKAGE(YY.YYGPAS.(19971121153752S101702A068485AYYGPAS))
  FREE PACKAGE(EC.EC7103.(19971121154032S101702A068485AEC7103))
  FREE PACKAGE(EC.EC5099.(19971122070527S101702Z346068AEC5099))
  FREE PACKAGE(KD.YKD0500.(19971123134508S101702Z346134AYKD0500))
  FREE PACKAGE(KD.YKD0500.(19971123160833S101702Z346148AYKD0500))
  FREE PACKAGE(EC.EC5099.(19971123164056S101702Z346149AEC5099))
  FREE PACKAGE(A1P.YKD0500.(19971123170525S101702Z346148AYKD0500))
  FREE PACKAGE(A2P.YKD0500.(19971123170525S101702Z346148AYKD0500))
  FREE PACKAGE(KD.YKD0500.(19971123170525S101702Z346148AYKD0500))
  FREE PACKAGE(A1P.YKD0500.(19971123180702S101702Z346152AYKD0500))
  FREE PACKAGE(A2P.YKD0500.(19971123180702S101702Z346152AYKD0500))
  FREE PACKAGE(KD.YKD0500.(19971123180702S101702Z346152AYKD0500))
  FREE PACKAGE(A1P.YYECGRI.(19971123194631S101702Z346164AYYECGRI))
  FREE PACKAGE(A2P.YYECGRI.(19971123194631S101702Z346164AYYECGRI))
  FREE PACKAGE(YY.YYECGRI.(19971123194631S101702Z346164AYYECGRI))
  FREE PACKAGE(A1P.YKD0500.(19971123194631S101702Z346164AYKD0500))
  FREE PACKAGE(A2P.YKD0500.(19971123194631S101702Z346164AYKD0500))
  FREE PACKAGE(KD.YKD0500.(19971123194631S101702Z346164AYKD0500))
  FREE PACKAGE(EC.YECMUPD.(19971124134218S101702Z346407AYECMUPD))
  FREE PACKAGE(LV.YLV0024.(19971127151620S101702A068522AYLV0024))
  FREE PACKAGE(SX.YSX64P5.(19971209124733S101702A068954AYSX64P5))
  FREE PACKAGE(SX.YSX6405.(19971209124733S101702A068954AYSX6405))
  FREE PACKAGE(A1P.YKD0500.(19971209175158S101702Z349699AYKD0500))
  FREE PACKAGE(A2P.YKD0500.(19971209175158S101702Z349699AYKD0500))
  FREE PACKAGE(KD.YKD0500.(19971209175158S101702Z349699AYKD0500))
  FREE PACKAGE(A1P.YKD0500.(19971204142946S101702Z348815AYKD0500))
  FREE PACKAGE(A2P.YKD0500.(19971204142946S101702Z348815AYKD0500))
  FREE PACKAGE(KD.YKD0500.(19971204142946S101702Z348815AYKD0500))
  FREE PACKAGE(A1P.YYECGRI.(19971204140411S101702Z348800AYYECGRI))
  FREE PACKAGE(A2P.YYECGRI.(19971204140411S101702Z348800AYYECGRI))
  FREE PACKAGE(YY.YYECGRI.(19971204140411S101702Z348800AYYECGRI))
  FREE PACKAGE(SX.YSX64P5.(19971204132949S101702M000869AYSX64P5))
  FREE PACKAGE(SX.YSX6405.(19971204132949S101702M000869AYSX6405))
  FREE PACKAGE(EC.YECCRC.(19971205161056S101702A068771AYECCRC))
  FREE PACKAGE(EC.YECCRV.(19971205161058S101702A068771AYECCRV))
  FREE PACKAGE(EC.YECCLAR.(19971205161053S101702A068771AYECCLAR))
  FREE PACKAGE(EC.YECCLC.(19971205161054S101702A068771AYECCLC))
  FREE PACKAGE(EC.YECRPA.(19971205161104S101702A068771AYECRPA))
  FREE PACKAGE(EC.YECRTV.(19971205161106S101702A068771AYECRTV))
  FREE PACKAGE(EC.YECDCI.(19971205161058S101702A068771AYECDCI))
  FREE PACKAGE(EC.YECRT.(19971205161105S101702A068771AYECRT))
  FREE PACKAGE(EC.YECIN.(19971205161103S101702A068771AYECIN))
  FREE PACKAGE(YY.YYGPAS.(19971205161109S101702A068771AYYGPAS))
  FREE PACKAGE(EC.YECSL.(19971205161107S101702A068771AYECSL))
  FREE PACKAGE(EC.YECAV.(19971205161051S101702A068771AYECAV))
  FREE PACKAGE(EC.YECCRAR.(19971205161056S101702A068771AYECCRAR))
  FREE PACKAGE(EC.YECMUPD.(19971205161051S101702A068771AYECMUPD))
  FREE PACKAGE(EC.YECCRCR.(19971205161057S101702A068771AYECCRCR))
  FREE PACKAGE(EC.YECCLV.(19971205161054S101702A068771AYECCLV))
  FREE PACKAGE(EC.YECCRL.(19971205161057S101702A068771AYECCRL))
  FREE PACKAGE(EC.YECRPAV.(19971205161105S101702A068771AYECRPAV))
  FREE PACKAGE(EC.YECRP.(19971205161104S101702A068771AYECRP))
  FREE PACKAGE(EC.YECSFPR.(19971205161106S101702A068771AYECSFPR))
  FREE PACKAGE(EC.YECCR.(19971205161055S101702A068771AYECCR))
  FREE PACKAGE(EC.YECCL.(19971205161052S101702A068771AYECCL))
  FREE PACKAGE(EC.YECCRL.(19971215145836S101702Z350817AYECCRL))
  FREE PACKAGE(KD.YKD0500.(19971210090526S101702Z349765AYKD0500))
  FREE PACKAGE(A1P.YKD0500.(19971210092215S101702Z349795AYKD0500))
  FREE PACKAGE(A2P.YKD0500.(19971210092215S101702Z349795AYKD0500))
  FREE PACKAGE(KD.YKD0500.(19971210092215S101702Z349795AYKD0500))
  FREE PACKAGE(BP.BP7000.(19971211140642S101702A069088ABP7000))
  FREE PACKAGE(BF.BF5820.(19971211145412S101702A068424ABF5820))
  FREE PACKAGE(BF.BF5800.(19971211145411S101702A068424ABF5800))
  FREE PACKAGE(YY.YYWBMON.(19971211154151S101702M000726AYYWBMON))
  FREE PACKAGE(BP.BP7000.(19971212114155S101702Z350210ABP7000))
  FREE PACKAGE(SX.YSX6405.(19971222053543S101702Z352011AYSX6405))
  FREE PACKAGE(SX.YSX64P5.(19971222053615S101702Z352013AYSX64P5))
  FREE PACKAGE(EC.YECCR.(19971222101649S101702Z352108AYECCR))
  FREE PACKAGE(EC.YECSL.(19971216161903S101702Z351139AYECSL))
  FREE PACKAGE(EC.YECCR.(19971217103059S101702Z351294AYECCR))
  FREE PACKAGE(BP.BP7000.(19971217114439S101702A069235ABP7000))
  FREE PACKAGE(CD.FC0100.(19971218134434S101702A069142AFC0100))
  FREE PACKAGE(SX.YSX64P5.(19971218134258S101702A069206AYSX64P5))
  FREE PACKAGE(SX.YSX6405.(19971218134256S101702A069206AYSX6405))
  FREE PACKAGE(SX.YSX64P5.(19971219083811S101702Z351781AYSX64P5))
  FREE PACKAGE(SX.YSX64P5.(19971219155653S101702A069287AYSX64P5))
  FREE PACKAGE(BX.YBXBI01.(19971223090545S101702Z352321AYBXBI01))
  FREE PACKAGE(EC.YECCRL.(19971231130928S101702Z353046AYECCRL))
  FREE PACKAGE(EC.YECCR.(19971231131652S101702Z353056AYECCR))
  FREE PACKAGE(CR.CR5000.())
  FREE PACKAGE(KS.YKSAUFT.())
  FREE PACKAGE(CD.YCDUP10.())
  FREE PACKAGE(CD.YCDGETV.())
  FREE PACKAGE(CO.CO0050.())
  FREE PACKAGE(BX.BX7620.())
  FREE PACKAGE(BP.BP5300.())
  FREE PACKAGE(CD.YCD0020.())
  FREE PACKAGE(RT.RT5010.())
  FREE PACKAGE(ZP.YZPUSER.(19940220194106S101702A031777A))
  FREE PACKAGE(ZP.YZPUSER.(19940220195347S101702A031777A))
  FREE PACKAGE(VP.YVPUP01.(19940217182915S101702A031241A))
  FREE PACKAGE(BX.YBX0311.(19940217143350S101702A031502A))
  FREE PACKAGE(BX.YBX0382.(19940217143416S101702A031502A))
  FREE PACKAGE(ZP.YZPUSER.(19940228001251S101702A032020A))
  FREE PACKAGE(ZP.YZPUSER.(19940222125004S101702A031858A))
  FREE PACKAGE(YY.YYNFP14.(19940311192628S101702A032372A))
  FREE PACKAGE(YY.YYNFP24.(19940311192636S101702A032372A))
  FREE PACKAGE(KS.YKSAUFT.(19940310195022S101702A032347A))
  FREE PACKAGE(BX.YBX0382.(19940317152239S101702A032458AYBX0382))
  FREE PACKAGE(CD.YCDGETV.(19940317160338S101702A032553AYCDGETV))
  FREE PACKAGE(KS.YKSAUFT.(19940317154525S101702A032520AYKSAUFT))
  FREE PACKAGE(CI.YCI009.(19940317190314S101702A032565AYCI009))
  FREE PACKAGE(CD.YCD0020.(19940317190318S101702A032467AYCD0020))
  FREE PACKAGE(CI.YCI009A.(19940317190359S101702A032565AYCI009A))
  FREE PACKAGE(YY.YYNFP14.(19940317201407S101702M000390AYYNFP14))
  FREE PACKAGE(YY.YYNFP24.(19940317201425S101702M000390AYYNFP24))
  FREE PACKAGE(DE.DE5630.())
  FREE PACKAGE(TR.YTRT932.())
  FREE PACKAGE(TR.YTRT931.())
  FREE PACKAGE(VP.VP7010.())
  FREE PACKAGE(CD.YCDGETJ.())
  FREE PACKAGE(EM.YEM0061.())
  FREE PACKAGE(EM.YEM0064.())
  FREE PACKAGE(EM.YEM0065.())
  FREE PACKAGE(EM.YEM0900.())
  FREE PACKAGE(VP.YVPUP01.())
  FREE PACKAGE(ZP.YZPUSER.())
  FREE PACKAGE(BP.BP6060.())
  FREE PACKAGE(BP.BP6000.())
  FREE PACKAGE(BX.YBX0363.())
  FREE PACKAGE(BX.YBX0362.())
  FREE PACKAGE(BX.YBXBI01.())
  FREE PACKAGE(BX.YBXBI03.())
  FREE PACKAGE(YY.YYOELEI.())
  FREE PACKAGE(CO.CO8100.())
  FREE PACKAGE(CO.CO8200.())
  FREE PACKAGE(BW.YBWAELC.())
  FREE PACKAGE(GE.YGESP01.())
  FREE PACKAGE(GE.YGESP02.())
  FREE PACKAGE(GE.YGESP04.())
  FREE PACKAGE(BX.YBX0321.())
  FREE PACKAGE(BX.YBX0313.())
  FREE PACKAGE(BX.YBX0361.())
  FREE PACKAGE(BX.YBX0381.())
  FREE PACKAGE(BX.YBX0322.())
  FREE PACKAGE(BX.YBX0382.())
  FREE PACKAGE(BX.YBX0323.())
  FREE PACKAGE(BX.YBX0383.())
  FREE PACKAGE(BX.YBX0312.())
  FREE PACKAGE(BX.YBX0311.())
  FREE PACKAGE(EA.YEA0001.())
  FREE PACKAGE(KS.YKSMODU.(19940602145024S101702A034556AYKSMODU))
  FREE PACKAGE(CR.YCRAN01.(19940609143524S101702A034846AYCRAN01))
  FREE PACKAGE(YY.YYOELEI.(19940609143536S101702A034813AYYOELEI))
  FREE PACKAGE(ZP.YZPUSER.(19940323174801S101702A032820AYZPUSER))
  FREE PACKAGE(CD.YCDUP10.(19940324191112S101702A032715AYCDUP10))
  FREE PACKAGE(CD.YCDUP14.(19940324191114S101702A032715AYCDUP14))
  FREE PACKAGE(KS.YKSAUFT.(19940324153804S101702A032785AYKSAUFT))
  FREE PACKAGE(CD.YCDUP14.(19940324153826S101702A032715AYCDUP14))
  FREE PACKAGE(CD.YCDUP10.(19940324153717S101702A032715AYCDUP10))
  FREE PACKAGE(CD.YCDUP10.(19940324201829S101702A032715AYCDUP10))
  FREE PACKAGE(CD.YCDUP14.(19940324201833S101702A032715AYCDUP14))
  FREE PACKAGE(BB0610.BB0610.(E))
  FREE PACKAGE(ZP.YZPUSER.(19940407190244S101702A033221AYZPUSER))
  FREE PACKAGE(RT.RT5010.(19940407185237S101702A032574ART5010))
  FREE PACKAGE(GE.YGESP01.(19940407191249S101702A033034AYGESP01))
  FREE PACKAGE(GE.YGESP02.(19940407191251S101702A033034AYGESP02))
  FREE PACKAGE(GE.YGESP04.(19940407191258S101702A033034AYGESP04))
  FREE PACKAGE(YY.YYNFP24.(19940414202420S101702A033411AYYNFP24))
  FREE PACKAGE(YY.YYNFP14.(19940414202416S101702A033411AYYNFP14))
  FREE PACKAGE(BX.YBX0342.(19940414155516S101702A033405AYBX0342))
  FREE PACKAGE(BX.YBX0341.(19940414155510S101702A033405AYBX0341))
  FREE PACKAGE(BX.YBX0343.(19940414155517S101702A033405AYBX0343))
  FREE PACKAGE(BX.BX0330.(19940414155938S101702A033405ABX0330))
  FREE PACKAGE(YY.YYNFP24.(19940414160453S101702A033411AYYNFP24))
  FREE PACKAGE(YY.YYNFP14.(19940414160445S101702A033411AYYNFP14))
  FREE PACKAGE(BX.YBXBI01.(19940415175222S101702A033466AYBXBI01))
  FREE PACKAGE(CR.YBXBI01.(19940415175222S101702A033466AYBXBI01))
  FREE PACKAGE(BX.YBXBI01.(19940417194441S101702A033466AYBXBI01))
  FREE PACKAGE(UF.UF8000.(19940421153508S101702A033617AUF8000))
  FREE PACKAGE(DX.DX5400.(19940421194557S101702A033552ADX5400))
  FREE PACKAGE(DX.DX5410.(19940421194631S101702A033552ADX5410))
  FREE PACKAGE(BB.BB0620.(19940421195008S101702A033635ABB0620))
  FREE PACKAGE(KS.YKSMODU.(19940428145414S101702A033787AYKSMODU))
  FREE PACKAGE(KS.YKSAUFT.(19940428145413S101702A033787AYKSAUFT))
  FREE PACKAGE(BX.YBX0341.(19940505160752S101702A033611AYBX0341))
  FREE PACKAGE(BX.YBX0342.(19940505160753S101702A033611AYBX0342))
  FREE PACKAGE(BX.YBXBI01.(19940505160733S101702A033572AYBXBI01))
  FREE PACKAGE(BX.YBXBI01.(19940511164541S101702A034201AYBXBI01))
  FREE PACKAGE(EM.YEM0061.(19940519142707S101702A034287AYEM0061))
  FREE PACKAGE(EM.YEM0064.(19940519142722S101702A034287AYEM0064))
  FREE PACKAGE(EM.YEM0065.(19940519142723S101702A034287AYEM0065))
  FREE PACKAGE(EM.YEM0900.(19940519142705S101702A034287AYEM0900))
  FREE PACKAGE(EM.EM0070.(19940519143412S101702A034287AEM0070))
  FREE PACKAGE(BX.YBXBI01.(19940519151914S101702A034386AYBXBI01))
  FREE PACKAGE(UF.UF8000.(19940519152240S101702A034445AUF8000))
  FREE PACKAGE(KS.YKSMODU.(19940519152202S101702A034419AYKSMODU))
  FREE PACKAGE(SV.YSVRAD.(19940901155609S101702A036983AYSVRAD))
  FREE PACKAGE(YY.YYNFP14.(19940901225031S101702A037061AYYNFP14))
  FREE PACKAGE(YY.YYNFP24.(19940901225036S101702A037061AYYNFP24))
  FREE PACKAGE(YY.YYNFP24.(19940902165848S101702A037061AYYNFP24))
  FREE PACKAGE(SA.SA0370.(19940915143120S101702A037314ASA0370))
  FREE PACKAGE(SA.YSA0236.(19940929135932S101702A037897AYSA0236))
  FREE PACKAGE(SA.YSA0231.(19940929135935S101702A037897AYSA0231))
  FREE PACKAGE(SA.YSA0235.(19940929135931S101702A037897AYSA0235))
  FREE PACKAGE(SA.YSA0233.(19940929140005S101702A037897AYSA0233))
  FREE PACKAGE(SA.YSA0234.(19940929140025S101702A037897AYSA0234))
  FREE PACKAGE(SA.YSA0232.(19940929135939S101702A037897AYSA0232))
  FREE PACKAGE(NP.NP7210.(19940929140529S101702A037741ANP7210))
  FREE PACKAGE(NP.NP5470.(19940929140527S101702A037741ANP5470))
  FREE PACKAGE(NP.NP8330.(19940929140550S101702A037741ANP8330))
  FREE PACKAGE(NP.NP8340.(19940929140557S101702A037741ANP8340))
  FREE PACKAGE(NP.NP5140.(19940929140642S101702A037741ANP5140))
  FREE PACKAGE(NP.NP5160.(19940929140644S101702A037741ANP5160))
  FREE PACKAGE(NP.NP0410.(19940929140633S101702A037741ANP0410))
  FREE PACKAGE(NP.NP7210.(19940929153942S101702A037741ANP7210))
  FREE PACKAGE(NP.NP5140.(19940929154033S101702A037741ANP5140))
  FREE PACKAGE(NP.NP5160.(19940929154036S101702A037741ANP5160))
  FREE PACKAGE(NP.NP8330.(19940929153955S101702A037741ANP8330))
  FREE PACKAGE(NP.NP8340.(19940929153957S101702A037741ANP8340))
  FREE PACKAGE(NP.NP5470.(19940929153939S101702A037741ANP5470))
  FREE PACKAGE(NP.NP0410.(19940929154021S101702A037741ANP0410))
  FREE PACKAGE(NP.NP7210.(19940929164923S101702A037741ANP7210))
  FREE PACKAGE(NP.NP5470.(19940929164922S101702A037741ANP5470))
  FREE PACKAGE(NP.NP5160.(19940929164952S101702A037741ANP5160))
  FREE PACKAGE(NP.NP8340.(19940929164931S101702A037741ANP8340))
  FREE PACKAGE(NP.NP8330.(19940929164930S101702A037741ANP8330))
  FREE PACKAGE(NP.NP8350.(19940929164931S101702A037741ANP8350))
  FREE PACKAGE(NP.NP0150.(19940929164937S101702A037741ANP0150))
  FREE PACKAGE(NP.NP5140.(19940929164951S101702A037741ANP5140))
  FREE PACKAGE(NP.NP0410.(19940929164945S101702A037741ANP0410))
  FREE PACKAGE(NP.NP0350.(19940929164943S101702A037741ANP0350))
  FREE PACKAGE(BX.YBX0313.(19941006193206S101702A037591AYBX0313))
  FREE PACKAGE(BX.YBX0323.(19941006193209S101702A037591AYBX0323))
  FREE PACKAGE(BX.YBX0362.(19941006193218S101702A037591AYBX0362))
  FREE PACKAGE(BX.YBX0321.(19941006193207S101702A037591AYBX0321))
  FREE PACKAGE(BX.YBX0363.(19941006193219S101702A037591AYBX0363))
  FREE PACKAGE(BX.YBX0343.(19941006193214S101702A037591AYBX0343))
  FREE PACKAGE(BX.YBX0312.(19941006193205S101702A037591AYBX0312))
  FREE PACKAGE(BX.YBX0311.(19941006193204S101702A037591AYBX0311))
  FREE PACKAGE(BX.YBX0322.(19941006193208S101702A037591AYBX0322))
  FREE PACKAGE(BX.YBXBI03.(19941006193227S101702A037591AYBXBI03))
  FREE PACKAGE(BX.YBX0342.(19941006193213S101702A037591AYBX0342))
  FREE PACKAGE(BX.YBX0361.(19941006193216S101702A037591AYBX0361))
  FREE PACKAGE(BX.YBX0121.(19941006193229S101702A037591AYBX0121))
  FREE PACKAGE(BX.YBX0341.(19941006193211S101702A037591AYBX0341))
  FREE PACKAGE(BX.YBX0383.(19941006193225S101702A037591AYBX0383))
  FREE PACKAGE(BX.YBX0381.(19941006193220S101702A037591AYBX0381))
  FREE PACKAGE(BX.YBX0382.(19941006193223S101702A037591AYBX0382))
  FREE PACKAGE(BX.YBXBI01.(19941006193210S101702A037591AYBXBI01))
  FREE PACKAGE(VP.YVPUP01.(19941006195313S101702A037982AYVPUP01))
  FREE PACKAGE(BX.BX7620.(19941006135422S101702A037791ABX7620))
  FREE PACKAGE(SA.SA0240.(19941006135801S101702A038126ASA0240))
  FREE PACKAGE(CI.YCI009A.(19940705103231S101702A035214AYCI009A))
  FREE PACKAGE(CI.YCI009.(19940705103230S101702A035214AYCI009))
  FREE PACKAGE(CD.YCDGETV.(19940705103237S101702A035214AYCDGETV))
  FREE PACKAGE(CD.YCDUP10.(19940705103250S101702A035214AYCDUP10))
  FREE PACKAGE(CD.YCDUP14.(19940705103255S101702A035214AYCDUP14))
  FREE PACKAGE(CD.YCD0020.(19940705104246S101702A035214AYCD0020))
  FREE PACKAGE(CI.YCI009A.(19940705140214S101702A035214AYCI009A))
  FREE PACKAGE(CI.YCI009.(19940705140212S101702A035214AYCI009))
  FREE PACKAGE(CD.YCDGETV.(19940705140221S101702A035214AYCDGETV))
  FREE PACKAGE(CD.YCDUP10.(19940705140235S101702A035214AYCDUP10))
  FREE PACKAGE(CD.YCDUP14.(19940705140239S101702A035214AYCDUP14))
  FREE PACKAGE(CD.YCD0020.(19940705142646S101702A035214AYCD0020))
  FREE PACKAGE(CD.YCD0020.(19940705140411S101702A035214AYCD0020))
  FREE PACKAGE(CI.YCI009.(19940705142422S101702A035214AYCI009))
  FREE PACKAGE(CI.YCI009A.(19940705142423S101702A035214AYCI009A))
  FREE PACKAGE(CD.YCDUP10.(19940705142447S101702A035214AYCDUP10))
  FREE PACKAGE(CD.YCDGETV.(19940705142431S101702A035214AYCDGETV))
  FREE PACKAGE(CD.YCDUP14.(19940705142451S101702A035214AYCDUP14))
  FREE PACKAGE(SV.SV7710.(19940630181346S101702A035352ASV7710))
  FREE PACKAGE(CI.YCI009.(19940701132426S101702A035214AYCI009))
  FREE PACKAGE(CI.YCI009A.(19940701132427S101702A035214AYCI009A))
  FREE PACKAGE(CD.YCDGETV.(19940701132444S101702A035214AYCDGETV))
  FREE PACKAGE(CD.YCDUP14.(19940701132551S101702A035214AYCDUP14))
  FREE PACKAGE(CD.YCDUP10.(19940701132538S101702A035214AYCDUP10))
  FREE PACKAGE(CD.YCD0020.(19940701132652S101702A035214AYCD0020))
  FREE PACKAGE(NK.YNKSICH.(19940707172101S101702A034690AYNKSICH))
  FREE PACKAGE(NK.NK8820.(19940707172646S101702A034690ANK8820))
  FREE PACKAGE(KS.YKSMODU.(19940707194027S101702M000478AYKSMODU))
  FREE PACKAGE(SV.SV7710.(19940714152500S101702A035714ASV7710))
  FREE PACKAGE(BX.YBX0311.(19940714161915S101702A034979AYBX0311))
  FREE PACKAGE(BX.YBX0382.(19940714161913S101702A034979AYBX0382))
  FREE PACKAGE(BX.YBX0383.(19940714161914S101702A034979AYBX0383))
  FREE PACKAGE(BX.YBX0323.(19940714161908S101702A034979AYBX0323))
  FREE PACKAGE(BX.YBX0321.(19940714161919S101702A034979AYBX0321))
  FREE PACKAGE(BX.YBX0381.(19940714161912S101702A034979AYBX0381))
  FREE PACKAGE(BX.YBX0313.(19940714161918S101702A034979AYBX0313))
  FREE PACKAGE(BX.YBX0322.(19940714161906S101702A034979AYBX0322))
  FREE PACKAGE(BX.YBX0312.(19940714161917S101702A034979AYBX0312))
  FREE PACKAGE(BX.YBXBI01.(19940714172642S101702A035771AYBXBI01))
  FREE PACKAGE(BX.YBXBI03.(19940714172644S101702A035771AYBXBI03))
  FREE PACKAGE(EM.YEM0061.(19940721163814S101702M000430AYEM0061))
  FREE PACKAGE(EA.YEA0001.(19940721163813S101702M000430AYEA0001))
  FREE PACKAGE(EM.YEM0065.(19940721163815S101702M000430AYEM0065))
  FREE PACKAGE(BX.YBX0311.(19940804140337S101702A036030AYBX0311))
  FREE PACKAGE(KS.YKSMODU.(19940811140924S101702A036426AYKSMODU))
  FREE PACKAGE(KS.YKSMODU.(19940811195758S101702A036426AYKSMODU))
  FREE PACKAGE(HP1.RWBT033.())
  FREE PACKAGE(HP1.RWBR040.())
  FREE PACKAGE(HP3.RWBR040.())
  FREE PACKAGE(HP1.RWBP030.())
  FREE PACKAGE(HP3.RWBP030.())
  FREE PACKAGE(HP1.RWBP032.())
  FREE PACKAGE(HP3.RWBP032.())
  FREE PACKAGE(GE.GE7550.(19940825113402S101702A036682AGE7550))
  FREE PACKAGE(MD.YMD0651.(19941213123405S101702A040387AYMD0651))
  FREE PACKAGE(KS.YKSMODU.(19941215164631S101702A040392AYKSMODU))
  FREE PACKAGE(KS.YKSLFNR.(19941215181826S101702A040306AYKSLFNR))
  FREE PACKAGE(KS.YKSMODU.(19941215182251S101702A040392AYKSMODU))
  FREE PACKAGE(BX.BX5200.(19941215191359S101702A040134ABX5200))
  FREE PACKAGE(EM.YEM0061.(19941215194000S101702M000522AYEM0061))
  FREE PACKAGE(EA.YEA0001.(19941215193956S101702M000522AYEA0001))
  FREE PACKAGE(EM.YEM0065.(19941215193958S101702M000522AYEM0065))
  FREE PACKAGE(KS.YKSLFNR.(19941215163239S101702A040306AYKSLFNR))
  FREE PACKAGE(VT.VT5120.(19950105141216S101702A040864AVT5120))
  FREE PACKAGE(BX.YBX0322.(19941013141416S101702A038234AYBX0322))
  FREE PACKAGE(BX.YBX0311.(19941013141432S101702A038234AYBX0311))
  FREE PACKAGE(BX.YBX0312.(19941013141433S101702A038234AYBX0312))
  FREE PACKAGE(BX.YBX0313.(19941013141434S101702A038234AYBX0313))
  FREE PACKAGE(BX.YBX0321.(19941013141435S101702A038234AYBX0321))
  FREE PACKAGE(CD.YCDCIFD.(19941013140654S101702A038159AYCDCIFD))
  FREE PACKAGE(BX.YBX0383.(19941013141431S101702A038234AYBX0383))
  FREE PACKAGE(BX.YBX0382.(19941013141428S101702A038234AYBX0382))
  FREE PACKAGE(BX.YBX0381.(19941013141427S101702A038234AYBX0381))
  FREE PACKAGE(BX.YBX0323.(19941013141420S101702A038234AYBX0323))
  FREE PACKAGE(HP3.RWBM003.())
  FREE PACKAGE(HP3.RWBB015.())
  FREE PACKAGE(HP3.RWBB019.())
  FREE PACKAGE(HP3.RWBB020.())
  FREE PACKAGE(HP3.RWBB004.())
  FREE PACKAGE(HP3.RWBZ033.())
  FREE PACKAGE(HP3.RWBZ034.())
  FREE PACKAGE(HP3.RWBW032.())
  FREE PACKAGE(HP3.RWBZ014.())
  FREE PACKAGE(HP3.RWBZ015.())
  FREE PACKAGE(HP3.RWBT027.())
  FREE PACKAGE(HP1.RWBB023.())
  FREE PACKAGE(HP3.RWBB023.())
  FREE PACKAGE(HP1.RWBB022.())
  FREE PACKAGE(HP3.RWBB022.())
  FREE PACKAGE(NP.NP5240.(19941020142956S101702A038461ANP5240))
  FREE PACKAGE(NP.NP5220.(19941027143040S101702A038705ANP5220))
  FREE PACKAGE(SV.YSVRAD.(19941027143121S101702A038681AYSVRAD))
  FREE PACKAGE(BX.BX6410.(19941103151044S101702A038911ABX6410))
  FREE PACKAGE(EA.YEA0001.(19941117135202S101702M000510AYEA0001))
  FREE PACKAGE(NP.NP5460.(19941201140647S101702A039881ANP5460))
  FREE PACKAGE(SA.YSA0232.(19941201141056S101702A039926AYSA0232))
  FREE PACKAGE(SA.YSA0231.(19941201141053S101702A039926AYSA0231))
  FREE PACKAGE(SA.YSA0233.(19941201141103S101702A039926AYSA0233))
  FREE PACKAGE(SA.YSA0236.(19941201141106S101702A039926AYSA0236))
  FREE PACKAGE(BX.BX7150.(19941201183328S101702A039829ABX7150))
  FREE PACKAGE(MD.YMD0651.(19941206083936S101702A040104AYMD0651))
  FREE PACKAGE(CU.CU8322.(19941208140545S101702A040093ACU8322))
  FREE PACKAGE(MD.YMD0651.(19941208162230S101702A040104AYMD0651))
  FREE PACKAGE(SX.YS81104.(19950330S101702A043182AYS81104))
  FREE PACKAGE(SX.YS81103.(19950330S101702A043182AYS81103))
  FREE PACKAGE(MD.YMD0651.(19950330S101702A043203AYMD0651))
  FREE PACKAGE(KD.YKDH04.(19950406S101702A043450AYKDH04))
  FREE PACKAGE(KD.YKDH05.(19950406S101702A043450AYKDH05))
  FREE PACKAGE(KD.YKDH50.(19950406S101702A043450AYKDH50))
  FREE PACKAGE(KD.YKDH06.(19950406S101702A043450AYKDH06))
  FREE PACKAGE(KD.YKDH52.(19950406S101702A043450AYKDH52))
  FREE PACKAGE(KD.YKDH51.(19950406S101702A043450AYKDH51))
  FREE PACKAGE(KD.YKDH00.(19950406S101702A043450AYKDH00))
  FREE PACKAGE(KD.YKDH53.(19950406S101702A043450AYKDH53))
  FREE PACKAGE(KD.YKDH58.(19950406S101702A043450AYKDH58))
  FREE PACKAGE(KD.YKDH59.(19950406S101702A043450AYKDH59))
  FREE PACKAGE(KD.YKDH60.(19950406S101702A043450AYKDH60))
  FREE PACKAGE(KD.YKDH61.(19950406S101702A043450AYKDH61))
  FREE PACKAGE(KD.YKDH92.(19950406S101702A043450AYKDH92))
  FREE PACKAGE(KD.YKDH91.(19950406S101702A043450AYKDH91))
  FREE PACKAGE(KD.YKDH03.(19950406S101702A043450AYKDH03))
  FREE PACKAGE(KD.YKDH02.(19950406S101702A043450AYKDH02))
  FREE PACKAGE(KD.YKDH01.(19950406S101702A043450AYKDH01))
  FREE PACKAGE(KD.YKDS91.(19950406S101702A043450AYKDS91))
  FREE PACKAGE(KD.YKD0500.(19950406S101702A043450AYKD0500))
  FREE PACKAGE(CR.YCRAN02.(19950412S101702A043707AYCRAN02))
  FREE PACKAGE(BX.YBX0383.(19950412S101702A043533AYBX0383))
  FREE PACKAGE(BX.YBXBI01.(19950412S101702A043533AYBXBI01))
  FREE PACKAGE(BX.YBX0362.(19950412S101702A043533AYBX0362))
  FREE PACKAGE(BX.YBX0343.(19950412S101702A043533AYBX0343))
  FREE PACKAGE(BX.YBX0313.(19950412S101702A043533AYBX0313))
  FREE PACKAGE(BX.YBX0361.(19950412S101702A043533AYBX0361))
  FREE PACKAGE(BX.YBX0342.(19950412S101702A043533AYBX0342))
  FREE PACKAGE(BX.YBX0323.(19950412S101702A043533AYBX0323))
  FREE PACKAGE(BX.YBX0341.(19950412S101702A043533AYBX0341))
  FREE PACKAGE(BX.YBX0363.(19950412S101702A043533AYBX0363))
  FREE PACKAGE(BX.YBX0311.(19950412S101702A043533AYBX0311))
  FREE PACKAGE(BX.YBX0321.(19950412S101702A043533AYBX0321))
  FREE PACKAGE(BX.YBX0312.(19950412S101702A043533AYBX0312))
  FREE PACKAGE(BX.YBX0382.(19950412S101702A043533AYBX0382))
  FREE PACKAGE(BX.YBX0322.(19950412S101702A043533AYBX0322))
  FREE PACKAGE(BX.YBX0381.(19950412S101702A043533AYBX0381))
  FREE PACKAGE(BX.YBX0121.(19950412S101702A043533AYBX0121))
  FREE PACKAGE(BX.YBXBI03.(19950412S101702A043533AYBXBI03))
  FREE PACKAGE(BX.YBX0311.(19950418S101702Z185893AYBX0311))
  FREE PACKAGE(BX.YBX0382.(19950420S101702A043759AYBX0382))
  FREE PACKAGE(BX.YBX0322.(19950420S101702A043759AYBX0322))
  FREE PACKAGE(BX.YBX0312.(19950420S101702A043759AYBX0312))
  FREE PACKAGE(BX.YBX0311.(19950421S101702Z186279AYBX0311))
  FREE PACKAGE(BX.YBX0341.(19950428S101702Z187241AYBX0341))
  FREE PACKAGE(SX.YS81103.(19950427S101702A044020AYS81103))
  FREE PACKAGE(SX.YS81104.(19950427S101702A044020AYS81104))
  FREE PACKAGE(GE.YGESP01.(19950119173828S101702A041399AYGESP01))
  FREE PACKAGE(GE.YGESP04.(19950119173814S101702A041399AYGESP04))
  FREE PACKAGE(NP.NP5220.(19950119142451S101702A040974ANP5220))
  FREE PACKAGE(NP.NP5220.(19950119144603S101702A040974ANP5220))
  FREE PACKAGE(NP.NP0360.(19950119144601S101702A040974ANP0360))
  FREE PACKAGE(NP.NP0380.(19950119144602S101702A040974ANP0380))
  FREE PACKAGE(SV.YSVRAD.(19950119153007S101702A041393AYSVRAD))
  FREE PACKAGE(VP.VP7010.(19950202135945S101702A041692AVP7010))
  FREE PACKAGE(KS.YKSMODU.(19950202142637S101702A041794AYKSMODU))
  FREE PACKAGE(SI.SI7340.(19950210175302S101702Z176831ASI7340))
  FREE PACKAGE(CO.CO5000.(19950216140316S101702A041670ACO5000))
  FREE PACKAGE(CO.CO8000.(19950216140319S101702A041670ACO8000))
  FREE PACKAGE(CO.CO8100.(19950216140321S101702A041670ACO8100))
  FREE PACKAGE(CO.CO8200.(19950216140324S101702A041670ACO8200))
  FREE PACKAGE(OE.OE8100.(19950216140325S101702A041670AOE8100))
  FREE PACKAGE(CO.CO0030.(19950216140330S101702A041670ACO0030))
  FREE PACKAGE(CO.CO0040.(19950216140333S101702A041670ACO0040))
  FREE PACKAGE(CO.CO0050.(19950216140336S101702A041670ACO0050))
  FREE PACKAGE(CO.CO0020.(19950216140329S101702A041670ACO0020))
  FREE PACKAGE(KS.YKSMODU.(19950216142448S101702A042149AYKSMODU))
  FREE PACKAGE(CR.CR5000.(19950216172233S101702A042017ACR5000))
  FREE PACKAGE(SI.SI7340.(19950220151931S101702A042317ASI7340))
  FREE PACKAGE(CD.YCDCIFD.(19950302135905S101702A042467AYCDCIFD))
  FREE PACKAGE(SV.YSVRAD.(19950302141336S101702A042588AYSVRAD))
  FREE PACKAGE(YY.LC5000.(19950227091355S101702Z178899ALC5000))
  FREE PACKAGE(YY.LC5000.(19950227101253S101702A042491ALC5000))
  FREE PACKAGE(EM.YEM0061.(19950316191311S101702A042912AYEM0061))
  FREE PACKAGE(EM.YEM0900.(19950316191311S101702A042912AYEM0900))
  FREE PACKAGE(CO.CO0020.(19950316125817S101702A042779ACO0020))
  FREE PACKAGE(EM.YEM0061.(19950316154216S101702A042912AYEM0061))
  FREE PACKAGE(EM.YEM0900.(19950316154229S101702A042912AYEM0900))
  FREE PACKAGE(SX.YS81104.(19950323125515S101702A043101AYS81104))
  FREE PACKAGE(GE.GE7690.(19950323125534S101702A043120AGE7690))
  FREE PACKAGE(SX.YS81103.(19950323125510S101702A043101AYS81103))
  FREE PACKAGE(EA.YEA0001.(19950706S101702M000589AYEA0001))
  FREE PACKAGE(EM.YEM0065.(19950706S101702M000589AYEM0065))
  FREE PACKAGE(BX.BX8100.(19950713S101702Z199809ABX8100))
  FREE PACKAGE(BX.BX8100.(19950713S101702Z199813ABX8100))
  FREE PACKAGE(SX.YS81103.(19950713S101702A046089AYS81103))
  FREE PACKAGE(SX.SX0720.(19950713134744S101702A046025ASX0720))
  FREE PACKAGE(SX.YS81104.(19950713S101702A046089AYS81104))
  FREE PACKAGE(OE.YOE001.(19950713S101702A046149AYOE001))
  FREE PACKAGE(SX.YS81103.(19950720S101702A046278AYS81103))
  FREE PACKAGE(SX.YS81104.(19950720S101702A046278AYS81104))
  FREE PACKAGE(OE.YOE001.(19950720S101702A046302AYOE001))
  FREE PACKAGE(OE.YOEM002.(19950720S101702A046302AYOEM002))
  FREE PACKAGE(CD.YCDCIFD.(19950810S101702A046728AYCDCIFD))
  FREE PACKAGE(BX.YBX0311.(19950505S101702Z188373AYBX0311))
  FREE PACKAGE(BX.YBX0341.(19950504S101702A044162AYBX0341))
  FREE PACKAGE(BX.YBX0311.(19950504S101702A044162AYBX0311))
  FREE PACKAGE(BX.BX7150.(19950504S101702A044162ABX7150))
  FREE PACKAGE(CO.CO0020.(19950511142640S101702A044204ACO0020))
  FREE PACKAGE(KS.YKSMODU.(19950511S101702A044324AYKSMODU))
  FREE PACKAGE(BX.YBX0311.(19950511S101702A044343AYBX0311))
  FREE PACKAGE(OD.OD7080.(19950511S101702A044280AOD7080))
  FREE PACKAGE(OD.OD7060.(19950511S101702A044280AOD7060))
  FREE PACKAGE(BX.YBX0311.(19950510S101702Z189043AYBX0311))
  FREE PACKAGE(KD.YKD0500.(19950524S101702A044691AYKD0500))
  FREE PACKAGE(FC.FC0400.(19950524170555S101702A044625AFC0400))
  FREE PACKAGE(OD.OD7060.(19950601S101702A044892AOD7060))
  FREE PACKAGE(MD.YMD0651.(19950601S101702M000585AYMD0651))
  FREE PACKAGE(CD.YCD0020.(19950615S101702A045345AYCD0020))
  FREE PACKAGE(KD.YKD0500.(19950626S101702A045713AYKD0500))
  FREE PACKAGE(SV.YSVRAD.(19950622S101702M000590AYSVRAD))
  FREE PACKAGE(CD.YCDCIFD.(19950622S101702M000590AYCDCIFD))
  FREE PACKAGE(EM.YEM0061.(19950622S101702M000590AYEM0061))
  FREE PACKAGE(OD.OD7080.(19950629S101702A045721AOD7080))
  FREE PACKAGE(CD.YCD0020.(19950629S101702A045492AYCD0020))
  FREE PACKAGE(VP.VP9999.(19950629S101702A045771AVP9999))
  FREE PACKAGE(VP.YVPUP01.(19951019S101702A048565AYVPUP01))
  FREE PACKAGE(SX.YSX6403.(19951019S101702M000626AYSX6403))
  FREE PACKAGE(SX.YSX6404.(19951019S101702M000626AYSX6404))
  FREE PACKAGE(SX.YSX6403.(19951024S101702Z214302AYSX6403))
  FREE PACKAGE(KD.YKDV81.(19951024S101702Z214339AYKDV81))
  FREE PACKAGE(SX.YSX6403.(19951024S101702A048896AYSX6403))
  FREE PACKAGE(KD.YKDV81.(19951024S101702Z214421AYKDV81))
  FREE PACKAGE(KD.YKDR88.(19951019S101702M000621AYKDR88))
  FREE PACKAGE(KD.YKDR89.(19951019S101702M000621AYKDR89))
  FREE PACKAGE(KD.YKDR68.(19951019S101702M000621AYKDR68))
  FREE PACKAGE(KD.YKDR91.(19951019S101702M000621AYKDR91))
  FREE PACKAGE(KD.YKDR78.(19951019S101702M000621AYKDR78))
  FREE PACKAGE(KD.YKDR75.(19951019S101702M000621AYKDR75))
  FREE PACKAGE(KD.YKDR74.(19951019S101702M000621AYKDR74))
  FREE PACKAGE(KD.YKDR93.(19951019S101702M000621AYKDR93))
  FREE PACKAGE(KD.YKDR97.(19951019S101702M000621AYKDR97))
  FREE PACKAGE(KD.YKDR98.(19951019S101702M000621AYKDR98))
  FREE PACKAGE(KD.YKDT00.(19951019S101702M000621AYKDT00))
  FREE PACKAGE(KD.YKDR73.(19951019S101702M000621AYKDR73))
  FREE PACKAGE(KD.YKDV81.(19951019S101702M000621AYKDV81))
  FREE PACKAGE(KD.YKDR92.(19951019S101702M000621AYKDR92))
  FREE PACKAGE(KD.YKDR61.(19951019S101702M000621AYKDR61))
  FREE PACKAGE(KD.YKDR60.(19951019S101702M000621AYKDR60))
  FREE PACKAGE(KD.YKDR67.(19951019S101702M000621AYKDR67))
  FREE PACKAGE(KD.YKD0643.(19951019S101702M000621AYKD0643))
  FREE PACKAGE(KD.YKD0640.(19951019S101702M000621AYKD0640))
  FREE PACKAGE(KD.YKD0641.(19951019S101702M000621AYKD0641))
  FREE PACKAGE(KD.YKD0642.(19951019S101702M000621AYKD0642))
  FREE PACKAGE(EM.YEM0061.(19951019S101702M000621AYEM0061))
  FREE PACKAGE(KD.YKDC91.(19951019S101702M000621AYKDC91))
  FREE PACKAGE(KD.YKDR00.(19951019S101702M000621AYKDR00))
  FREE PACKAGE(KD.YKDR01.(19951019S101702M000621AYKDR01))
  FREE PACKAGE(KD.YKDR03.(19951019S101702M000621AYKDR03))
  FREE PACKAGE(KD.YKDR06.(19951019S101702M000621AYKDR06))
  FREE PACKAGE(KD.YKDR04.(19951019S101702M000621AYKDR04))
  FREE PACKAGE(KD.YKDR16.(19951019S101702M000621AYKDR16))
  FREE PACKAGE(KD.YKDR21.(19951019S101702M000621AYKDR21))
  FREE PACKAGE(KD.YKDR19.(19951019S101702M000621AYKDR19))
  FREE PACKAGE(KD.YKDR18.(19951019S101702M000621AYKDR18))
  FREE PACKAGE(KD.YKDR17.(19951019S101702M000621AYKDR17))
  FREE PACKAGE(EM.YEM0064.(19951019S101702M000621AYEM0064))
  FREE PACKAGE(EM.YEM0065.(19951019S101702M000621AYEM0065))
  FREE PACKAGE(KD.YKDR20.(19951019S101702M000621AYKDR20))
  FREE PACKAGE(KD.YKDR50.(19951019S101702M000621AYKDR50))
  FREE PACKAGE(EM.YEM0900.(19951019S101702M000621AYEM0900))
  FREE PACKAGE(KD.YKDR53.(19951019S101702M000621AYKDR53))
  FREE PACKAGE(KD.YKDR22.(19951019S101702M000621AYKDR22))
  FREE PACKAGE(KD.YKDR51.(19951019S101702M000621AYKDR51))
  FREE PACKAGE(KD.YKDR59.(19951019S101702M000621AYKDR59))
  FREE PACKAGE(SX.YSX6403.(19951020S101702Z213819AYSX6403))
  FREE PACKAGE(SX.YSX6403.(19951020S101702A048832AYSX6403))
  FREE PACKAGE(KX.YKX002.(19951020S101702A048828AYKX002))
  FREE PACKAGE(KD.YKDV81.(19951023S101702Z214190AYKDV81))
  FREE PACKAGE(SX.YSX6403.(19951030S101702A049033AYSX6403))
  FREE PACKAGE(EM.YEM0061.(19951026S101702A048979AYEM0061))
  FREE PACKAGE(SX.YSX8103.(19951026S101702A048958AYSX8103))
  FREE PACKAGE(SX.YSX8104.(19951026S101702A048958AYSX8104))
  FREE PACKAGE(SX.YSX6403.(19951101S101702A049170AYSX6403))
  FREE PACKAGE(SX.YSX6404.(19951101S101702A049170AYSX6404))
  FREE PACKAGE(SX.YSX6404.(19951101S101702Z215711AYSX6404))
  FREE PACKAGE(SX.YSX6403.(19951101S101702Z215711AYSX6403))
  FREE PACKAGE(SX.YSX6404.(19951101S101702Z215750AYSX6404))
  FREE PACKAGE(YY.YYNGTCP.(19951102S101702A048892AYYNGTCP))
  FREE PACKAGE(SX.YSX6403.(19951102S101702Z215828AYSX6403))
  FREE PACKAGE(OE.YOE0135.(19951102S101702A048966AYOE0135))
  FREE PACKAGE(SX.YSX8103.(19951102S101702A049172AYSX8103))
  FREE PACKAGE(SX.YSX8104.(19951102S101702A049172AYSX8104))
  FREE PACKAGE(SX.YSX6403.(19951102S101702A049191AYSX6403))
  FREE PACKAGE(BX.YBX0323.(19951102S101702A048803AYBX0323))
  FREE PACKAGE(BX.YBX0321.(19951102S101702A048803AYBX0321))
  FREE PACKAGE(BX.YBX0312.(19951102S101702A048803AYBX0312))
  FREE PACKAGE(BX.YBX0381.(19951102S101702A048803AYBX0381))
  FREE PACKAGE(BX.YBX0382.(19951102S101702A048803AYBX0382))
  FREE PACKAGE(BX.YBX0322.(19951102S101702A048803AYBX0322))
  FREE PACKAGE(BX.YBX0311.(19951102S101702A048803AYBX0311))
  FREE PACKAGE(BX.YBXBI01.(19951102S101702A048803AYBXBI01))
  FREE PACKAGE(BX.YBX0363.(19951102S101702A048803AYBX0363))
  FREE PACKAGE(BX.YBX0383.(19951102S101702A048803AYBX0383))
  FREE PACKAGE(BX.YBXBI03.(19951102S101702A048803AYBXBI03))
  FREE PACKAGE(BX.YBX0121.(19951102S101702A048803AYBX0121))
  FREE PACKAGE(BX.YBX0361.(19951102S101702A048803AYBX0361))
  FREE PACKAGE(BX.YBX0362.(19951102S101702A048803AYBX0362))
  FREE PACKAGE(BX.YBX0313.(19951102S101702A048803AYBX0313))
  FREE PACKAGE(KD.YKD0640.(19951113S101702A048936AYKD0640))
  FREE PACKAGE(KD.YKDV81.(19951113S101702A048936AYKDV81))
  FREE PACKAGE(KD.YKD0641.(19951113S101702A048936AYKD0641))
  FREE PACKAGE(KD.YKD0643.(19951113S101702A048936AYKD0643))
  FREE PACKAGE(KD.YKD0642.(19951113S101702A048936AYKD0642))
  FREE PACKAGE(EM.YEM0061.(19951113S101702A048936AYEM0061))
  FREE PACKAGE(VP.VP9998.(19951113S101702Z218537AVP9998))
  FREE PACKAGE(SX.YSX6404.(19951109S101702A049277AYSX6404))
  FREE PACKAGE(VP.VP9998.(19951109S101702A049426AVP9998))
  FREE PACKAGE(SX.YSX6403.(19951109S101702A049277AYSX6403))
  FREE PACKAGE(SX.SX0640.(19951109S101702A049277ASX0640))
  FREE PACKAGE(VP.VP9998.(19951114S101702Z218682AVP9998))
  FREE PACKAGE(SX.YSX6403.(19951116S101702Z219256AYSX6403))
  FREE PACKAGE(SX.YSX6403.(19951116S101702Z219263AYSX6403))
  FREE PACKAGE(VP.YVPUP01.(19951116S101702A049627AYVPUP01))
  FREE PACKAGE(CD.YCD0020.(19951116S101702A049627AYCD0020))
  FREE PACKAGE(RR.RR7420.(19951116S101702A049429ARR7420))
  FREE PACKAGE(SX.YSX6403.(19951116S101702M000633AYSX6403))
  FREE PACKAGE(SX.YSX6404.(19951116S101702M000633AYSX6404))
  FREE PACKAGE(SX.YSX6403.(19951117S101702Z219421AYSX6403))
  FREE PACKAGE(SX.YSX6403.(19951117S101702Z219514AYSX6403))
  FREE PACKAGE(SX.YSX8104.(19950817S101702A046517AYSX8104))
  FREE PACKAGE(SX.YSX8103.(19950817S101702A046517AYSX8103))
  FREE PACKAGE(OD.OD7080.(19950824S101702A047131AOD7080))
  FREE PACKAGE(OD.OD7030.(19950824S101702A047131AOD7030))
  FREE PACKAGE(KS.YKSMODU.(19950824S101702A047164AYKSMODU))
  FREE PACKAGE(EM.YEM0064.(19950824S101702M000598AYEM0064))
  FREE PACKAGE(EM.YEM0061.(19950824S101702M000598AYEM0061))
  FREE PACKAGE(EM.YEM0065.(19950824S101702M000598AYEM0065))
  FREE PACKAGE(KD.YKD0500.(19950824S101702M000598AYKD0500))
  FREE PACKAGE(EA.YEA0001.(19950824S101702M000598AYEA0001))
  FREE PACKAGE(EM.YEM0900.(19950824S101702M000598AYEM0900))
  FREE PACKAGE(OE.OE8130.(19950831S101702A047271AOE8130))
  FREE PACKAGE(SX.SX0720.(19950831S101702A047303ASX0720))
  FREE PACKAGE(VP.YVPUP01.(19950831S101702A047391AYVPUP01))
  FREE PACKAGE(OE.OE8130.(19950901S101702Z206327AOE8130))
  FREE PACKAGE(BB.BB0630.(19950907S101702A047247ABB0630))
  FREE PACKAGE(YY.YYNGKAS.(19950914S101702A047578AYYNGKAS))
  FREE PACKAGE(SX.SX0640.(19950921S101702Z209168ASX0640))
  FREE PACKAGE(YY.YYNGKAS.(19950921S101702A047924AYYNGKAS))
  FREE PACKAGE(OE.YOEM002.(19950921S101702A047890AYOEM002))
  FREE PACKAGE(OE.YOE001.(19950921S101702A047890AYOE001))
  FREE PACKAGE(OE.YOEM001.(19950921S101702A047890AYOEM001))
  FREE PACKAGE(OE.OE8130.(19950928S101702A048025AOE8130))
  FREE PACKAGE(BP.BP7090.(19950928S101702A048040ABP7090))
  FREE PACKAGE(BP.BP5300.(19950928S101702A048040ABP5300))
  FREE PACKAGE(SX.SX0640.(19950928S101702A047968ASX0640))
  FREE PACKAGE(CD.CD7400.(19951012S101702A048447ACD7400))
  FREE PACKAGE(VP.YVPUP01.(19951010S101702Z212033AYVPUP01))
  FREE PACKAGE(EM.YEM0065.(19960123S101702A051440AYEM0065))
  FREE PACKAGE(EM.YEM0900.(19960123S101702A051440AYEM0900))
  FREE PACKAGE(EM.YEM0061.(19960123S101702A051440AYEM0061))
  FREE PACKAGE(EM.YEM0064.(19960123S101702A051440AYEM0064))
  FREE PACKAGE(VP.YVPUP01.(19960125S101702A051459AYVPUP01))
  FREE PACKAGE(SX.YSX64P4.(19960126S101702Z231538AYSX64P4))
  FREE PACKAGE(SX.YSX6404.(19960126S101702Z231538AYSX6404))
  FREE PACKAGE(SX.YSX6404.(19960130S101702A051549AYSX6404))
  FREE PACKAGE(SX.YSX64P4.(19960130S101702A051549AYSX64P4))
  FREE PACKAGE(SX.YSX64P4.(19960201S101702A051648AYSX64P4))
  FREE PACKAGE(VP.VP9997.(19960201S101702A051690AVP9997))
  FREE PACKAGE(CD.YCD0020.(19960201S101702A051689AYCD0020))
  FREE PACKAGE(EA.YEA0001.(19960201S101702A051573AYEA0001))
  FREE PACKAGE(SX.YSX6404.(19960208S101702M000665AYSX6404))
  FREE PACKAGE(EM.YEM0064.(19960215144640S101702A052021AYEM0064))
  FREE PACKAGE(SX.YSXT812.(19960215150345S101702A052062AYSXT812))
  FREE PACKAGE(KD.YKD0500.(19960222143318S101702A052162AYKD0500))
  FREE PACKAGE(EA.YEA0001.(19960222143902S101702A052199AYEA0001))
  FREE PACKAGE(SX.YSXT812.(19960222144042S101702A052211AYSXT812))
  FREE PACKAGE(SX.YSX5104.(19960222144929S101702A052254AYSX5104))
  FREE PACKAGE(SX.YSX6404.(19960222144924S101702A052254AYSX6404))
  FREE PACKAGE(RR.RR7420.(19960222170427S101702A051544ARR7420))
  FREE PACKAGE(OE.OE0121.(19960229141006S101702A052336AOE0121))
  FREE PACKAGE(SX.YSX6403.(19951120S101702Z219988AYSX6403))
  FREE PACKAGE(SX.YSX6403.(19951120S101702Z219821AYSX6403))
  FREE PACKAGE(SX.YSX6404.(19951120S101702Z219821AYSX6404))
  FREE PACKAGE(KX.YKX002.(19951120S101702A049712AYKX002))
  FREE PACKAGE(SX.YSX6403.(19951121S101702Z220128AYSX6403))
  FREE PACKAGE(SX.YSX6404.(19951121S101702Z220128AYSX6404))
  FREE PACKAGE(SX.YSX6403.(19951121S101702Z220149AYSX6403))
  FREE PACKAGE(SX.YSX6404.(19951121S101702Z220149AYSX6404))
  FREE PACKAGE(SX.YSX6404.(19951122S101702Z220381AYSX6404))
  FREE PACKAGE(SX.YSX6403.(19951122S101702Z220528AYSX6403))
  FREE PACKAGE(SX.SX0720.(19951123S101702A049707ASX0720))
  FREE PACKAGE(EA.YEA0001.(19951201S101702A049916AYEA0001))
  FREE PACKAGE(KD.YKDV81.(19951128S101702Z221489AYKDV81))
  FREE PACKAGE(VP.YVPUP01.(19951129S101702Z221857AYVPUP01))
  FREE PACKAGE(SX.YSX6404.(19951130S101702Z222054AYSX6404))
  FREE PACKAGE(EM.YEM0061.(19951130S101702A049980AYEM0061))
  FREE PACKAGE(KD.YKD0642.(19951130S101702A049980AYKD0642))
  FREE PACKAGE(KD.YKDV81.(19951130S101702A049980AYKDV81))
  FREE PACKAGE(VP.YVPUP01.(19951130S101702A050037AYVPUP01))
  FREE PACKAGE(SX.YSX6404.(19951207S101702M000644AYSX6404))
  FREE PACKAGE(SX.YSX6403.(19951207S101702M000644AYSX6403))
  FREE PACKAGE(SX.YSX64P4.(19951207S101702M000644AYSX64P4))
  FREE PACKAGE(VP.YVPUP01.(19951207S101702A050228AYVPUP01))
  FREE PACKAGE(BX.YBX0313.(19951207S101702A050132AYBX0313))
  FREE PACKAGE(BX.YBX0313.(19951204S101702Z222592AYBX0313))
  FREE PACKAGE(SX.YSX64P4.(19951206S101702Z223382AYSX64P4))
  FREE PACKAGE(SX.YSX64P4.(19951214S101702Z224741AYSX64P4))
  FREE PACKAGE(SX.YSX64P4.(19951214S101702Z224743AYSX64P4))
  FREE PACKAGE(SX.YSX6404.(19951214S101702Z224743AYSX6404))
  FREE PACKAGE(FC.YFCM02.(19951214S101702A050488AYFCM02))
  FREE PACKAGE(FC.YFCM03.(19951214S101702A050488AYFCM03))
  FREE PACKAGE(KD.KD8200.(19951214S101702A050488AKD8200))
  FREE PACKAGE(SX.YSX64P4.(19951214S101702Z224751AYSX64P4))
  FREE PACKAGE(SX.YSX6404.(19951214S101702Z224751AYSX6404))
  FREE PACKAGE(SX.YSX6404.(19951214S101702M000650AYSX6404))
  FREE PACKAGE(SX.YSX64P4.(19951214S101702M000650AYSX64P4))
  FREE PACKAGE(VT.VT5120.(19951214S101702M000648AVT5120))
  FREE PACKAGE(KS.YKSMODU.(19951214S101702M000648AYKSMODU))
  FREE PACKAGE(SX.YSX64P4.(19951220S101702A050692AYSX64P4))
  FREE PACKAGE(SX.YSX6404.(19951220S101702A050692AYSX6404))
  FREE PACKAGE(SX.YSX64P4.(19951220S101702Z225865AYSX64P4))
  FREE PACKAGE(SX.YSX64P4.(19951220S101702Z225899AYSX64P4))
  FREE PACKAGE(EM.YEM0900.(19951221S101702A050710AYEM0900))
  FREE PACKAGE(EM.YEM0061.(19951221S101702A050563AYEM0061))
  FREE PACKAGE(SX.YSX64P4.(19951218S101702A050580AYSX64P4))
  FREE PACKAGE(SX.YSX6404.(19951218S101702A050580AYSX6404))
  FREE PACKAGE(SX.YSX64P4.(19951218S101702Z225267AYSX64P4))
  FREE PACKAGE(SX.YSX64P4.(19951218S101702Z225344AYSX64P4))
  FREE PACKAGE(SX.YSX6404.(19951227S101702A050763AYSX6404))
  FREE PACKAGE(SX.YSX64P4.(19951227S101702A050763AYSX64P4))
  FREE PACKAGE(KD.KD8200.(19951228S101702A050761AKD8200))
  FREE PACKAGE(SX.YSX64P4.(19951222S101702A050719AYSX64P4))
  FREE PACKAGE(SX.YSX8103.(19951222S101702A050719AYSX8103))
  FREE PACKAGE(SX.YSX8104.(19951222S101702A050719AYSX8104))
  FREE PACKAGE(VP.YVPUP01.(19960104S101702A050753AYVPUP01))
  FREE PACKAGE(SX.YSX64P4.(19960116S101702A051197AYSX64P4))
  FREE PACKAGE(SX.YSX64P4.(19960111S101702M000654AYSX64P4))
  FREE PACKAGE(SX.YSX6404.(19960111S101702M000654AYSX6404))
  FREE PACKAGE(SX.YSX6404.(19960117S101702A051254AYSX6404))
  FREE PACKAGE(SX.YSX64P4.(19960117S101702A051254AYSX64P4))
  FREE PACKAGE(KD.YKD0500.(19960118S101702A051288AYKD0500))
  FREE PACKAGE(SX.YSX8104.(19960509084907S101702Z247322AYSX8104))
  FREE PACKAGE(SA.YSA0235.(19960509132030S101702A053971AYSA0235))
  FREE PACKAGE(SA.YSA0234.(19960509132033S101702A053971AYSA0234))
  FREE PACKAGE(SA.YSA0232.(19960509132032S101702A053971AYSA0232))
  FREE PACKAGE(SA.YSA0231.(19960509132031S101702A053971AYSA0231))
  FREE PACKAGE(SA.YSA0233.(19960509132033S101702A053971AYSA0233))
  FREE PACKAGE(SX.YSX8104.(19960509133253S101702A054073AYSX8104))
  FREE PACKAGE(NP.NP0360.(19960506182034S101702A053948ANP0360))
  FREE PACKAGE(NP.NP0380.(19960506182034S101702A053948ANP0380))
  FREE PACKAGE(CD.YCDCIFD.(19960515145654S101702A054064AYCDCIFD))
  FREE PACKAGE(CD.YCDCIFD.(19960515142952S101702A054064AYCDCIFD))
  FREE PACKAGE(KD.YKD0642.(19960515152932S101702M000684AYKD0642))
  FREE PACKAGE(EM.YEM0065.(19960515152930S101702M000684AYEM0065))
  FREE PACKAGE(KD.YKDV81.(19960515152935S101702M000684AYKDV81))
  FREE PACKAGE(EM.YEM0064.(19960515152934S101702M000684AYEM0064))
  FREE PACKAGE(EM.YEM0061.(19960515152929S101702M000684AYEM0061))
  FREE PACKAGE(EA.YEA0001.(19960515152936S101702M000684AYEA0001))
  FREE PACKAGE(CD.YKDX81.(19960515152931S101702M000684AYKDX81))
  FREE PACKAGE(KD.YKDX81.(19960515152931S101702M000684AYKDX81))
  FREE PACKAGE(KS.YKSMODU.(19960515160306S101702M000686AYKSMODU))
  FREE PACKAGE(SX.YSX6404.(19960515160308S101702M000686AYSX6404))
  FREE PACKAGE(EA.YEA0001.(19960513164908S101702Z248111AYEA0001))
  FREE PACKAGE(EA.YEA0001.(19960521133901S101702Z249308AYEA0001))
  FREE PACKAGE(VP.YVP7403.(19960522110825S101702Z249496AYVP7403))
  FREE PACKAGE(SX.YSX6404.(19960518092523S101702Z248849AYSX6404))
  FREE PACKAGE(SX.YSX6404.(19960520134651S101702A054281AYSX6404))
  FREE PACKAGE(SX.YSX64P4.(19960520134654S101702A054281AYSX64P4))
  FREE PACKAGE(EA.YEA0001.(19960523145633S101702A054318AYEA0001))
  FREE PACKAGE(VP.YVP7403.(19960524122957S101702Z249868AYVP7403))
  FREE PACKAGE(KD.YKD0643.(19960529163059S101702Z250540AYKD0643))
  FREE PACKAGE(KD.YKD0500.(19960605164059S101702Z251552AYKD0500))
  FREE PACKAGE(AT.AT9000.(19960606140803S101702A054557AAT9000))
  FREE PACKAGE(AT.AT9010.(19960606140801S101702A054557AAT9010))
  FREE PACKAGE(AT.AT9002.(19960606140805S101702A054557AAT9002))
  FREE PACKAGE(SX.YSX8103.(19960606144323S101702A054730AYSX8103))
  FREE PACKAGE(SX.YSX5104.(19960606144321S101702A054730AYSX5104))
  FREE PACKAGE(SX.YSX8104.(19960606144310S101702A054730AYSX8104))
  FREE PACKAGE(BX.YBXBI01.(19960606171752S101702A054723AYBXBI01))
  FREE PACKAGE(FC.FC0110.(19960607085733S101702A054822AFC0110))
  FREE PACKAGE(CD.FC0100.(19960607085733S101702A054822AFC0100))
  FREE PACKAGE(KD.YKD0642.(19960307140103S101702A052143AYKD0642))
  FREE PACKAGE(KD.YKD0641.(19960307140103S101702A052143AYKD0641))
  FREE PACKAGE(KD.YKD0640.(19960307140102S101702A052143AYKD0640))
  FREE PACKAGE(KD.YKDV81.(19960314161746S101702M000666AYKDV81))
  FREE PACKAGE(KD.YKD0642.(19960314161748S101702M000666AYKD0642))
  FREE PACKAGE(CD.YCDCIFD.(19960314161808S101702M000666AYCDCIFD))
  FREE PACKAGE(CI.YCI009A.(19960314161448S101702M000666AYCI009A))
  FREE PACKAGE(EM.YEM0061.(19960314161545S101702M000666AYEM0061))
  FREE PACKAGE(EM.YEM0064.(19960314161635S101702M000666AYEM0064))
  FREE PACKAGE(CD.YCDUP10.(19960314161929S101702M000666AYCDUP10))
  FREE PACKAGE(CD.YCDUP14.(19960314161951S101702M000666AYCDUP14))
  FREE PACKAGE(AT.AT7060.(19960314140003S101702A052607AAT7060))
  FREE PACKAGE(SX.YSX64P4.(19960314140358S101702A052714AYSX64P4))
  FREE PACKAGE(SA.SA0240.(19960314140753S101702A052714ASA0240))
  FREE PACKAGE(SX.YSX64P4.(19960322153819S101702A053005AYSX64P4))
  FREE PACKAGE(KX.YKX002.(19960401150805S101702A053178AYKX002))
  FREE PACKAGE(BX.YBX0312.(19960327101618S101702Z240638AYBX0312))
  FREE PACKAGE(BX.YBX0313.(19960327101619S101702Z240638AYBX0313))
  FREE PACKAGE(BX.YBX0311.(19960327101616S101702Z240638AYBX0311))
  FREE PACKAGE(BX.YBX0383.(19960327110526S101702Z240662AYBX0383))
  FREE PACKAGE(BX.YBX0382.(19960327110525S101702Z240662AYBX0382))
  FREE PACKAGE(BX.YBX0381.(19960327110524S101702Z240662AYBX0381))
  FREE PACKAGE(BX.YBX0322.(19960327141624S101702Z240750AYBX0322))
  FREE PACKAGE(BX.YBX0321.(19960327142142S101702Z240756AYBX0321))
  FREE PACKAGE(BX.YBX0323.(19960327142214S101702Z240758AYBX0323))
  FREE PACKAGE(OE.YOE001.(19960328143211S101702A052974AYOE001))
  FREE PACKAGE(SX.YSX6404.(19960328144309S101702A053092AYSX6404))
  FREE PACKAGE(SX.YSX6404.(19960328155251S101702A053092AYSX6404))
  FREE PACKAGE(SX.YSX6404.(19960328165756S101702A053092AYSX6404))
  FREE PACKAGE(VP.YVPUP01.(19960328175023S101702A053067AYVPUP01))
  FREE PACKAGE(CD.YCD0020.(19960328175022S101702A053067AYCD0020))
  FREE PACKAGE(BX.YBX0323.(19960413134151S101702Z243379AYBX0323))
  FREE PACKAGE(BX.YBX0321.(19960413134150S101702Z243379AYBX0321))
  FREE PACKAGE(BX.YBX0322.(19960413134151S101702Z243379AYBX0322))
  FREE PACKAGE(BX.YBX0321.(19960413163905S101702Z243384AYBX0321))
  FREE PACKAGE(KS.YKSMODU.(19960409173948S101702A053018AYKSMODU))
  FREE PACKAGE(CD.YCDCIFD.(19960411140629S101702A053344AYCDCIFD))
  FREE PACKAGE(OE.OE0122.(19960411140916S101702A053315AOE0122))
  FREE PACKAGE(AT.AT7060.(19960411135637S101702A053258AAT7060))
  FREE PACKAGE(BX.YBX0363.(19960411160921S101702A053228AYBX0363))
  FREE PACKAGE(BX.YBX0383.(19960411160927S101702A053228AYBX0383))
  FREE PACKAGE(BX.YBX0361.(19960411160919S101702A053228AYBX0361))
  FREE PACKAGE(BX.YBX0323.(19960411160918S101702A053228AYBX0323))
  FREE PACKAGE(BX.YBX0321.(19960411160914S101702A053228AYBX0321))
  FREE PACKAGE(BX.YBXBI03.(19960411160937S101702A053228AYBXBI03))
  FREE PACKAGE(BX.YBX0382.(19960411160923S101702A053228AYBX0382))
  FREE PACKAGE(BX.YBX0313.(19960411160913S101702A053228AYBX0313))
  FREE PACKAGE(BX.YBX0322.(19960411160917S101702A053228AYBX0322))
  FREE PACKAGE(BX.YBX0381.(19960411160922S101702A053228AYBX0381))
  FREE PACKAGE(BX.YBX0312.(19960411160910S101702A053228AYBX0312))
  FREE PACKAGE(BX.YBX0362.(19960411160920S101702A053228AYBX0362))
  FREE PACKAGE(BX.YBX0121.(19960411160906S101702A053228AYBX0121))
  FREE PACKAGE(BX.YBX0311.(19960411160908S101702A053228AYBX0311))
  FREE PACKAGE(BX.YBXBI01.(19960411160928S101702A053228AYBXBI01))
  FREE PACKAGE(BX.YBXBI03.(19960411170957S101702A053228AYBXBI03))
  FREE PACKAGE(BX.YBX0323.(19960411170953S101702A053228AYBX0323))
  FREE PACKAGE(BX.YBX0312.(19960411170951S101702A053228AYBX0312))
  FREE PACKAGE(BX.YBX0313.(19960411170951S101702A053228AYBX0313))
  FREE PACKAGE(BX.YBX0381.(19960411170955S101702A053228AYBX0381))
  FREE PACKAGE(BX.YBX0321.(19960411170952S101702A053228AYBX0321))
  FREE PACKAGE(BX.YBXBI01.(19960411170957S101702A053228AYBXBI01))
  FREE PACKAGE(BX.YBX0311.(19960411170950S101702A053228AYBX0311))
  FREE PACKAGE(BX.YBX0383.(19960411170956S101702A053228AYBX0383))
  FREE PACKAGE(BX.YBX0121.(19960411170949S101702A053228AYBX0121))
  FREE PACKAGE(BX.YBX0361.(19960411170954S101702A053228AYBX0361))
  FREE PACKAGE(BX.YBX0363.(19960411170955S101702A053228AYBX0363))
  FREE PACKAGE(BX.YBX0382.(19960411170956S101702A053228AYBX0382))
  FREE PACKAGE(BX.YBX0362.(19960411170954S101702A053228AYBX0362))
  FREE PACKAGE(BX.YBX0322.(19960411170953S101702A053228AYBX0322))
  FREE PACKAGE(BX.YBX0311.(19960415141359S101702Z243570AYBX0311))
  FREE PACKAGE(VT.VT7799.(19960415140717S101702A053434AVT7799))
  FREE PACKAGE(BX.YBX0311.(19960415164333S101702Z243618AYBX0311))
  FREE PACKAGE(BX.YBX0311.(19960415180232S101702Z243633AYBX0311))
  FREE PACKAGE(BX.YBX0311.(19960415191722S101702Z243644AYBX0311))
  FREE PACKAGE(BX.YBX0311.(19960416151429S101702Z243806AYBX0311))
  FREE PACKAGE(BX.YBX0311.(19960417131431S101702Z244080AYBX0311))
  FREE PACKAGE(BX.YBX0311.(19960418095238S101702Z244223AYBX0311))
  FREE PACKAGE(EM.YEM0061.(19960418134157S101702M000672AYEM0061))
  FREE PACKAGE(KD.YKD0642.(19960418134159S101702M000672AYKD0642))
  FREE PACKAGE(KS.YKSMODU.(19960418140921S101702A053458AYKSMODU))
  FREE PACKAGE(CD.YCDCIFD.(19960418152009S101702M000680AYCDCIFD))
  FREE PACKAGE(CE.YCDCIFD.(19960418152009S101702M000680AYCDCIFD))
  FREE PACKAGE(BX.YBX0311.(19960422101406S101702Z244648AYBX0311))
  FREE PACKAGE(BX.YBX0311.(19960422110638S101702Z244671AYBX0311))
  FREE PACKAGE(EA.YEA0001.(19960502135830S101702A053286AYEA0001))
  FREE PACKAGE(BX.YBX0323.(19960502144751S101702A053763AYBX0323))
  FREE PACKAGE(BX.YBXBI01.(19960502144752S101702A053763AYBXBI01))
  FREE PACKAGE(BX.YBX0312.(19960502144754S101702A053763AYBX0312))
  FREE PACKAGE(BX.YBX0382.(19960502144752S101702A053763AYBX0382))
  FREE PACKAGE(BX.YBX0311.(19960502144753S101702A053763AYBX0311))
  FREE PACKAGE(BX.YBX0322.(19960502144750S101702A053763AYBX0322))
  FREE PACKAGE(BX.YBX0321.(19960502144748S101702A053763AYBX0321))
  FREE PACKAGE(VP.YVP7403.(19960502160807S101702A053816AYVP7403))
  FREE PACKAGE(CD.YKDX81.(19960502160759S101702A053827AYKDX81))
  FREE PACKAGE(KD.YKDX81.(19960502160759S101702A053827AYKDX81))
  FREE PACKAGE(CD.YKDX81.(19960430144759S101702Z245908AYKDX81))
  FREE PACKAGE(KD.YKDX81.(19960430144759S101702Z245908AYKDX81))
  FREE PACKAGE(CD.YKDX81.(19960430145417S101702Z245908AYKDX81))
  FREE PACKAGE(KD.YKDX81.(19960430145417S101702Z245908AYKDX81))
  FREE PACKAGE(CONVERT.ASUCONV.(V6102))
  FREE PACKAGE(WA.YWAPOS.(A06M012041))
  FREE PACKAGE(WA.YWAPOSA.(A06M012041))
  FREE PACKAGE(YY.YYWBMON.(19980416233210S101702M000838AYYWBMON))
  FREE PACKAGE(BB.BB0610.(19980416171757S101702M000874ABB0610))
  FREE PACKAGE(EC.YECRT.(19980416190514S101702M000898AYECRT))
  FREE PACKAGE(EC.YECRTV.(19980416190514S101702M000898AYECRTV))
  FREE PACKAGE(EC.YECRPV.(19980416190513S101702M000898AYECRPV))
  FREE PACKAGE(EC.YECRPA.(19980416190512S101702M000898AYECRPA))
  FREE PACKAGE(EC.YECRPAV.(19980416190513S101702M000898AYECRPAV))
  FREE PACKAGE(EC.YECCLC.(19980416190502S101702M000898AYECCLC))
  FREE PACKAGE(EC.YECCRC.(19980416190505S101702M000898AYECCRC))
  FREE PACKAGE(EC.YECCRV.(19980416190508S101702M000898AYECCRV))
  FREE PACKAGE(EC.YECCRAR.(19980416190504S101702M000898AYECCRAR))
  FREE PACKAGE(EC.YECCLV.(19980416190502S101702M000898AYECCLV))
  FREE PACKAGE(EC.YECAV.(19980416190501S101702M000898AYECAV))
  FREE PACKAGE(KX.YKX002.(19980416190522S101702M000898AYKX002))
  FREE PACKAGE(EC.YECSL.(19980416190516S101702M000898AYECSL))
  FREE PACKAGE(EC.YECSFPR.(19980416190515S101702M000898AYECSFPR))
  FREE PACKAGE(EC.YECCRL.(19980416190507S101702M000898AYECCRL))
  FREE PACKAGE(EC.YECCRCR.(19980416190505S101702M000898AYECCRCR))
  FREE PACKAGE(EC.YECRP.(19980416190511S101702M000898AYECRP))
  FREE PACKAGE(EC.YECDCI.(19980416190509S101702M000898AYECDCI))
  FREE PACKAGE(EC.YECIN.(19980416190510S101702M000898AYECIN))
  FREE PACKAGE(EC.YECCLAR.(19980416190501S101702M000898AYECCLAR))
  FREE PACKAGE(EA.YEA0010.(19980416190746S101702M000898AYEA0010))
  FREE PACKAGE(EC.YECCR.(19980416190503S101702M000898AYECCR))
  FREE PACKAGE(EC.YECCL.(19980416190801S101702M000898AYECCL))
  FREE PACKAGE(A1P.YKD0500.(19980416190530S101702M000898AYKD0500))
  FREE PACKAGE(A2P.YKD0500.(19980416190530S101702M000898AYKD0500))
  FREE PACKAGE(KD.YKD0500.(19980416190530S101702M000898AYKD0500))
  FREE PACKAGE(EA.YEA0001.(19980416190745S101702M000898AYEA0001))
  FREE PACKAGE(EA.YEA0011.(19980416190755S101702M000898AYEA0011))
  FREE PACKAGE(SX.YSX6405.(19980416190913S101702M000898AYSX6405))
  FREE PACKAGE(TE.YTEF021.(19980417011040S101702A071217AYTEF021))
  FREE PACKAGE(TE.YTEF022.(19980417011041S101702A071217AYTEF022))
  FREE PACKAGE(YY.YYWBMON.(19980417152423S101702M000838AYYWBMON))
  FREE PACKAGE(EC.YECDCI.(19980420091008S101702A071906AYECDCI))
  FREE PACKAGE(EC.YECDCI.(19980427160238S101702A072040AYECDCI))
  FREE PACKAGE(EC.YECSL.(19980427160239S101702A072040AYECSL))
  FREE PACKAGE(TK.TK0120.(19980507163249S101702A072127ATK0120))
  FREE PACKAGE(OD.OD7290.(19980507163236S101702A072127AOD7290))
  FREE PACKAGE(TK.TK0130.(19980507163251S101702A072127ATK0130))
  FREE PACKAGE(TK.TK0110.(19980507163244S101702A072127ATK0110))
  FREE PACKAGE(TK.TK0160.(19980507163219S101702A072127ATK0160))
  FREE PACKAGE(RT.RT8411.(19980512142538S101702A072415ART8411))
  FREE PACKAGE(RT.RT8300.(19980513171122S101702A072545ART8300))
  FREE PACKAGE(TE.YTEF021.(19980514175259S101702A072358AYTEF021))
  FREE PACKAGE(TE.YTEF022.(19980514175300S101702A072358AYTEF022))
  FREE PACKAGE(EA.YEA0010.(19980514155250S101702M000913AYEA0010))
  FREE PACKAGE(WI.YWISTIN.(19980515094949S101702M000839AYWISTIN))
  FREE PACKAGE(YY.YYWBMON.(19980515095747S101702M000839AYYWBMON))
  FREE PACKAGE(SX.YSX6405.(19980520140320S101702M000912AYSX6405))
  FREE PACKAGE(SX.YSX64P5.(19980520140318S101702M000912AYSX64P5))
  FREE PACKAGE(BX.YBX0323.(19980520145201S101702A072692AYBX0323))
  FREE PACKAGE(BX.YBX0313.(19980520145159S101702A072692AYBX0313))
  FREE PACKAGE(EC.YECSHD1.(19980216165227S101702A070496AYECSHD1))
  FREE PACKAGE(EC.YECSHD2.(19980216165227S101702A070496AYECSHD2))
  FREE PACKAGE(YY.YYECGR2.(19980216165215S101702A070496AYYECGR2))
  FREE PACKAGE(EC.YECGR2.(19980216165226S101702A070496AYECGR2))
  FREE PACKAGE(EC.YECGR2.(19980216165226CGS101702A070496AYECGR2))
  FREE PACKAGE(YY.YYECGR2.(19980216165215CGS101702A070496AYYECGR2))
  FREE PACKAGE(EC.YECSHD1.(19980216095837S101702Z360013AYECSHD1))
  FREE PACKAGE(KX.YKX002.(19980212144153S101702M000834AYKX002))
  FREE PACKAGE(EA.YEA0011.(19980212144147S101702M000834AYEA0011))
  FREE PACKAGE(EA.YEA0010.(19980212144146S101702M000834AYEA0010))
  FREE PACKAGE(YY.YYWBMON.(19980212172010S101702M000836AYYWBMON))
  FREE PACKAGE(EC.YECGR2.(19980212125839S101702A069923AYECGR2))
  FREE PACKAGE(YY.YYECGR2.(19980212125840S101702A069923AYYECGR2))
  FREE PACKAGE(EC.YECGR2.(19980212125839CGS101702A069923AYECGR2))
  FREE PACKAGE(YY.YYECGR2.(19980212125840CGS101702A069923AYYECGR2))
  FREE PACKAGE(A2P.FD0350.(19980213133248S101702A070466AFD0350))
  FREE PACKAGE(EC.YECSES.(19980213132036S101702A070420AYECSES))
  FREE PACKAGE(EC.YECSZS.(19980213132043S101702A070420AYECSZS))
  FREE PACKAGE(EC.YECSFO.(19980213132037S101702A070420AYECSFO))
  FREE PACKAGE(EC.YECSBR.(19980213132030S101702A070420AYECSBR))
  FREE PACKAGE(EC.YECSAN.(19980213132028S101702A070420AYECSAN))
  FREE PACKAGE(EC.YECSDH.(19980213132030S101702A070420AYECSDH))
  FREE PACKAGE(EC.YECSHD2.(19980213132039S101702A070420AYECSHD2))
  FREE PACKAGE(EC.YECSDOC.(19980213132031S101702A070420AYECSDOC))
  FREE PACKAGE(A1P.YECGRI.(19980213132027S101702A070420AYECGRI))
  FREE PACKAGE(A2P.YECGRI.(19980213132027S101702A070420AYECGRI))
  FREE PACKAGE(EC.YECGRI.(19980213132027S101702A070420AYECGRI))
  FREE PACKAGE(EC.YECSAS.(19980213132029S101702A070420AYECSAS))
  FREE PACKAGE(YY.YECSAS.(19980213132029S101702A070420AYECSAS))
  FREE PACKAGE(EC.YECMUPD.(19980213132028S101702A070420AYECMUPD))
  FREE PACKAGE(EC.YECSL.(19980213132041S101702A070420AYECSL))
  FREE PACKAGE(EC.YECSHD1.(19980213132039S101702A070420AYECSHD1))
  FREE PACKAGE(EC.YECSEX.(19980213132037S101702A070420AYECSEX))
  FREE PACKAGE(EC.YECAV.(19980213132027S101702A070420AYECAV))
  FREE PACKAGE(EC.YECSEG.(19980213132031S101702A070420AYECSEG))
  FREE PACKAGE(EC.YECSDS.(19980213132031S101702A070420AYECSDS))
  FREE PACKAGE(EC.YECSLV.(19980213132041S101702A070420AYECSLV))
  FREE PACKAGE(A1P.YKD0500.(19980213132025S101702A070420AYKD0500))
  FREE PACKAGE(A2P.YKD0500.(19980213132025S101702A070420AYKD0500))
  FREE PACKAGE(KD.YKD0500.(19980213132025S101702A070420AYKD0500))
  FREE PACKAGE(BB.BB0610.(19980305141209S101702A070764ABB0610))
  FREE PACKAGE(OD.OD7030.(19980312133154S101702A070916AOD7030))
  FREE PACKAGE(OD.OD7020.(19980312133153S101702A070916AOD7020))
  FREE PACKAGE(EC.YECCL.(19980312162548S101702A070997AYECCL))
  FREE PACKAGE(EC.YECIN.(19980312162534S101702A070997AYECIN))
  FREE PACKAGE(EC.YECRPAV.(19980312162536S101702A070997AYECRPAV))
  FREE PACKAGE(EC.YECSFO.(19980312162543S101702A070997AYECSFO))
  FREE PACKAGE(EC.YECSDOC.(19980312162536S101702A070997AYECSDOC))
  FREE PACKAGE(EC.YECCRL.(19980312162647S101702A070997AYECCRL))
  FREE PACKAGE(EC.YECSHD2.(19980312162544S101702A070997AYECSHD2))
  FREE PACKAGE(EC.YECCRC.(19980312162645S101702A070997AYECCRC))
  FREE PACKAGE(EC.YECSL.(19980312162545S101702A070997AYECSL))
  FREE PACKAGE(EC.YECAV.(19980312162542S101702A070997AYECAV))
  FREE PACKAGE(EC.YECSBR.(19980312162539S101702A070997AYECSBR))
  FREE PACKAGE(EC.YECSAN.(19980312162538S101702A070997AYECSAN))
  FREE PACKAGE(EC.YECRPA.(19980312162535S101702A070997AYECRPA))
  FREE PACKAGE(EC.YECGRI.(19980312162534S101702A070997AYECGRI))
  FREE PACKAGE(EC.YECRTV.(19980312162537S101702A070997AYECRTV))
  FREE PACKAGE(EC.YECCRV.(19980312162532S101702A070997AYECCRV))
  FREE PACKAGE(EC.YECRT.(19980312162537S101702A070997AYECRT))
  FREE PACKAGE(EC.YECRP.(19980312162535S101702A070997AYECRP))
  FREE PACKAGE(EC.YECSDS.(19980312162540S101702A070997AYECSDS))
  FREE PACKAGE(EC.YECSAS.(19980312162539S101702A070997AYECSAS))
  FREE PACKAGE(YY.YECSAS.(19980312162539S101702A070997AYECSAS))
  FREE PACKAGE(EC.YECDCI.(19980312162533S101702A070997AYECDCI))
  FREE PACKAGE(EC.YECSDH.(19980312162540S101702A070997AYECSDH))
  FREE PACKAGE(EC.YECSEG.(19980312162541S101702A070997AYECSEG))
  FREE PACKAGE(EC.YECSZS.(19980312162547S101702A070997AYECSZS))
  FREE PACKAGE(EC.YECSHD1.(19980312162544S101702A070997AYECSHD1))
  FREE PACKAGE(EC.YECSEX.(19980312162543S101702A070997AYECSEX))
  FREE PACKAGE(EC.YECSES.(19980312162542S101702A070997AYECSES))
  FREE PACKAGE(EC.YECCR.(19980312162559S101702A070997AYECCR))
  FREE PACKAGE(EC.YECSLV.(19980312162546S101702A070997AYECSLV))
  FREE PACKAGE(KD.YKD0500.(19980312162639S101702A070997AYKD0500))
  FREE PACKAGE(EC.YECSFO.(19980312175719S101702A070997AYECSFO))
  FREE PACKAGE(EC.YECDCI.(19980312175704S101702A070997AYECDCI))
  FREE PACKAGE(EC.YECRPA.(19980312175706S101702A070997AYECRPA))
  FREE PACKAGE(EC.YECSAS.(19980312175709S101702A070997AYECSAS))
  FREE PACKAGE(YY.YECSAS.(19980312175709S101702A070997AYECSAS))
  FREE PACKAGE(EC.YECIN.(19980312175705S101702A070997AYECIN))
  FREE PACKAGE(EC.YECCR.(19980312175737S101702A070997AYECCR))
  FREE PACKAGE(EC.YECRP.(19980312175706S101702A070997AYECRP))
  FREE PACKAGE(A1P.YECGRI.(19980312175705S101702A070997AYECGRI))
  FREE PACKAGE(A2P.YECGRI.(19980312175705S101702A070997AYECGRI))
  FREE PACKAGE(EC.YECGRI.(19980312175705S101702A070997AYECGRI))
  FREE PACKAGE(EC.YECRT.(19980312175708S101702A070997AYECRT))
  FREE PACKAGE(EC.YECRTV.(19980312175708S101702A070997AYECRTV))
  FREE PACKAGE(EC.YECCRL.(19980312175741S101702A070997AYECCRL))
  FREE PACKAGE(EC.YECCRC.(19980312175740S101702A070997AYECCRC))
  FREE PACKAGE(EC.YECSBR.(19980312175714S101702A070997AYECSBR))
  FREE PACKAGE(EC.YECRPAV.(19980312175707S101702A070997AYECRPAV))
  FREE PACKAGE(A1P.YKD0500.(19980312175740S101702A070997AYKD0500))
  FREE PACKAGE(A2P.YKD0500.(19980312175740S101702A070997AYKD0500))
  FREE PACKAGE(KD.YKD0500.(19980312175740S101702A070997AYKD0500))
  FREE PACKAGE(EC.YECSDOC.(19980312175707S101702A070997AYECSDOC))
  FREE PACKAGE(EC.YECSDH.(19980312175716S101702A070997AYECSDH))
  FREE PACKAGE(EC.YECSAN.(19980312175709S101702A070997AYECSAN))
  FREE PACKAGE(EC.YECCRV.(19980312175704S101702A070997AYECCRV))
  FREE PACKAGE(EC.YECSZS.(19980312175724S101702A070997AYECSZS))
  FREE PACKAGE(EC.YECAV.(19980312175718S101702A070997AYECAV))
  FREE PACKAGE(EC.YECSL.(19980312175721S101702A070997AYECSL))
  FREE PACKAGE(EC.YECSEG.(19980312175717S101702A070997AYECSEG))
  FREE PACKAGE(EC.YECSHD2.(19980312175720S101702A070997AYECSHD2))
  FREE PACKAGE(EC.YECSHD1.(19980312175720S101702A070997AYECSHD1))
  FREE PACKAGE(EC.YECSDS.(19980312175716S101702A070997AYECSDS))
  FREE PACKAGE(EC.YECSES.(19980312175717S101702A070997AYECSES))
  FREE PACKAGE(EC.YECSEX.(19980312175719S101702A070997AYECSEX))
  FREE PACKAGE(EC.YECSLV.(19980312175723S101702A070997AYECSLV))
  FREE PACKAGE(EC.YECCL.(19980312175726S101702A070997AYECCL))
  FREE PACKAGE(LV.YLV0024.(19980318172336S101702Z365489AYLV0024))
  FREE PACKAGE(EC.YECCR.(19980319142423S101702A071130AYECCR))
  FREE PACKAGE(EC.EC8067.(19980319142758S101702A071130AEC8067))
  FREE PACKAGE(SA.SA0370.(19980319145840S101702M000893ASA0370))
  FREE PACKAGE(EC.YECCR.(19980323165535S101702A071245AYECCR))
  FREE PACKAGE(EC.YECSL.(19980323165535S101702A071245AYECSL))
  FREE PACKAGE(SX.YSX6405.(19980402145252S101702M000899AYSX6405))
  FREE PACKAGE(SX.YSX64P5.(19980402154907S101702M000899AYSX64P5))
  FREE PACKAGE(SX.YSX64P5.(19980402172907S101702M000899AYSX64P5))
  FREE PACKAGE(SX.YSX6405.(19980402172908S101702M000899AYSX6405))
  FREE PACKAGE(EC.YECRPAV.(19980403141053S101702A071472AYECRPAV))
  FREE PACKAGE(EC.YECRPV.(19980403141036S101702A071472AYECRPV))
  FREE PACKAGE(EC.YECDCI.(19980403141051S101702A071472AYECDCI))
  FREE PACKAGE(EC.YECSFPR.(19980403141055S101702A071472AYECSFPR))
  FREE PACKAGE(EC.YECRTV.(19980403141054S101702A071472AYECRTV))
  FREE PACKAGE(EC.YECSL.(19980403141055S101702A071472AYECSL))
  FREE PACKAGE(A1P.YKD0500.(19980403141032S101702A071472AYKD0500))
  FREE PACKAGE(A2P.YKD0500.(19980403141032S101702A071472AYKD0500))
  FREE PACKAGE(KD.YKD0500.(19980403141032S101702A071472AYKD0500))
  FREE PACKAGE(EC.YECCRV.(19980403141050S101702A071472AYECCRV))
  FREE PACKAGE(EC.YECCRL.(19980403141049S101702A071472AYECCRL))
  FREE PACKAGE(EC.YECCRCR.(19980403141049S101702A071472AYECCRCR))
  FREE PACKAGE(EC.YECCLAR.(19980403141045S101702A071472AYECCLAR))
  FREE PACKAGE(EC.YECCLV.(19980403141033S101702A071472AYECCLV))
  FREE PACKAGE(EC.YECCRC.(19980403141048S101702A071472AYECCRC))
  FREE PACKAGE(EC.YECCRAR.(19980403141048S101702A071472AYECCRAR))
  FREE PACKAGE(EC.YECCLC.(19980403141046S101702A071472AYECCLC))
  FREE PACKAGE(EC.YECAV.(19980403141043S101702A071472AYECAV))
  FREE PACKAGE(EC.YECRT.(19980403141054S101702A071472AYECRT))
  FREE PACKAGE(EC.YECIN.(19980403141052S101702A071472AYECIN))
  FREE PACKAGE(EC.YECRPA.(19980403141052S101702A071472AYECRPA))
  FREE PACKAGE(EC.YECSHD2.(19980403141037S101702A071472AYECSHD2))
  FREE PACKAGE(EC.YECRP.(19980403141052S101702A071472AYECRP))
  FREE PACKAGE(EC.YECCL.(19980403141044S101702A071472AYECCL))
  FREE PACKAGE(EC.YECCR.(19980403141046S101702A071472AYECCR))
  FREE PACKAGE(EC.EC8698.(19980403135200S101702A071490AEC8698))
  FREE PACKAGE(LV.YLV0024.(19980331072213S101702Z367531AYLV0024))
  FREE PACKAGE(LV.YLV0024.(19980331180350S101702Z367531AYLV0024))
  FREE PACKAGE(LV.YLV0024.(19980331190659S101702Z367531AYLV0024))
  FREE PACKAGE(SX.YSX64P5.(19980408132103S101702A071600AYSX64P5))
  FREE PACKAGE(LV.YLV0024.(19980408135941S101702A071564AYLV0024))
  FREE PACKAGE(SX.YSX64P5.(19980409192934S101702A071661AYSX64P5))
  FREE PACKAGE(SX.YSX6405.(19980406150643S101702A071524AYSX6405))
  FREE PACKAGE(SX.YSX64P5.(19980406150642S101702A071524AYSX64P5))
  FREE PACKAGE(EC.YECRPA.(19980414134151S101702A071717AYECRPA))
  FREE PACKAGE(EC.YECRPV.(19980414134152S101702A071717AYECRPV))
  FREE PACKAGE(A1P.KD0540.(CRMC000003))
  FREE PACKAGE(A2P.KD0540.(CRMC000003))
  FREE PACKAGE(A1P.YKD0500.(CRMC000003))
  FREE PACKAGE(A2P.YKD0500.(CRMC000003))
  FREE PACKAGE(A1P.YKD0500.(CRMA000067))
  FREE PACKAGE(A2P.YKD0500.(CRMA000067))
  FREE PACKAGE(SA.YSAT301.(A16M000011))
  FREE PACKAGE(SX.YSX6405.(19980529125649S101702A072818AYSX6405))
  FREE PACKAGE(SX.YSX6405.(19980525142836S101702A072728AYSX6405))
  FREE PACKAGE(EC.YECRP.(19980528135618S101702A072724AYECRP))
  FREE PACKAGE(EC.YECCR.(19980528135617S101702A072724AYECCR))
  FREE PACKAGE(BX.BX6750.(19980604135635S101702A072837ABX6750))
  FREE PACKAGE(BX.BX6700.(19980604135634S101702A072837ABX6700))
  FREE PACKAGE(BX.BX8110.(19980604135636S101702A072837ABX8110))
  FREE PACKAGE(EC.YECCL.(19980605154804S101702A072938AYECCL))
  FREE PACKAGE(SX.YSX6405.(19980611134538S101702M000921AYSX6405))
  FREE PACKAGE(YY.YYWBMON.(19980611154027S101702M000840AYYWBMON))
  FREE PACKAGE(EA.YEA0011.(19980612054603S101702M000922AYEA0011))
  FREE PACKAGE(EA.YEA0010.(19980612054603S101702M000922AYEA0010))
  FREE PACKAGE(A1P.YKD0500.(19980612054559S101702M000922AYKD0500))
  FREE PACKAGE(A2P.YKD0500.(19980612054559S101702M000922AYKD0500))
  FREE PACKAGE(KD.YKD0500.(19980612054559S101702M000922AYKD0500))
  FREE PACKAGE(AT.AT9000.(19980608102520S101702Z377704AAT9000))
  FREE PACKAGE(AT.AT9000.(19980609134214S101702Z377955AAT9000))
  FREE PACKAGE(A1P.YKD0500.(19980618141748S101702A073266AYKD0500))
  FREE PACKAGE(A2P.YKD0500.(19980618141748S101702A073266AYKD0500))
  FREE PACKAGE(KD.YKD0500.(19980618141748S101702A073266AYKD0500))
  FREE PACKAGE(TK.TK0180.(19980618135727S101702A073194ATK0180))
  FREE PACKAGE(A1P.YKD0500.(19980613074807S101702Z378634AYKD0500))
  FREE PACKAGE(A2P.YKD0500.(19980613074807S101702Z378634AYKD0500))
  FREE PACKAGE(KD.YKD0500.(19980613074807S101702Z378634AYKD0500))
  FREE PACKAGE(SX.YSXT231.(19980625130147S101702A073376AYSXT231))
  FREE PACKAGE(OD.OD7030.(19980625145545S101702A073365AOD7030))
  FREE PACKAGE(OD.OD7020.(19980625145544S101702A073365AOD7020))
  FREE PACKAGE(A1P.YKD0500.(19980701111931S101702A073364AYKD0500))
  FREE PACKAGE(A2P.YKD0500.(19980701111931S101702A073364AYKD0500))
  FREE PACKAGE(KD.YKD0500.(19980701111931S101702A073364AYKD0500))
  FREE PACKAGE(A1P.YKD0500.(19980701133922S101702A073364AYKD0500))
  FREE PACKAGE(A2P.YKD0500.(19980701133922S101702A073364AYKD0500))
  FREE PACKAGE(KD.YKD0500.(19980701133922S101702A073364AYKD0500))
  FREE PACKAGE(A1P.KD0540.(19980701134213S101702A073364AKD0540))
  FREE PACKAGE(A2P.KD0540.(19980701134213S101702A073364AKD0540))
  FREE PACKAGE(EC.YECSDOC.(19980626164741S101702A073406AYECSDOC))
  FREE PACKAGE(EC.YECSHD2.(19980626164742S101702A073406AYECSHD2))
  FREE PACKAGE(EC.YECSES.(19980626164741S101702A073406AYECSES))
  FREE PACKAGE(EC.YECSLV.(19980626164742S101702A073406AYECSLV))
  FREE PACKAGE(A1P.YKD0500.(19980702175321S101702Z381719AYKD0500))
  FREE PACKAGE(A2P.YKD0500.(19980702175321S101702Z381719AYKD0500))
  FREE PACKAGE(KD.YKD0500.(19980702175321S101702Z381719AYKD0500))
  FREE PACKAGE(EC.YECSHD1.(19980703152440S101702A073255AYECSHD1))
  FREE PACKAGE(EC.YECSLV.(19980703152443S101702A073255AYECSLV))
  FREE PACKAGE(EC.YECSDS.(19980703152438S101702A073255AYECSDS))
  FREE PACKAGE(EC.YECCRL.(19980703152444S101702A073255AYECCRL))
  FREE PACKAGE(EC.YECSAN.(19980703152435S101702A073255AYECSAN))
  FREE PACKAGE(EC.YECSDH.(19980703152437S101702A073255AYECSDH))
  FREE PACKAGE(EC.YECSHD2.(19980703152441S101702A073255AYECSHD2))
  FREE PACKAGE(EC.YECCR.(19980703152441S101702A073255AYECCR))
  FREE PACKAGE(EC.YECCRCR.(19980703152444S101702A073255AYECCRCR))
  FREE PACKAGE(EC.YECSZS.(19980703152434S101702A073255AYECSZS))
  FREE PACKAGE(EC.YECRT.(19980703152433S101702A073255AYECRT))
  FREE PACKAGE(EC.YECMUPD.(19980703152435S101702A073255AYECMUPD))
  FREE PACKAGE(EC.YECSFO.(19980703152440S101702A073255AYECSFO))
  FREE PACKAGE(EC.YECSDOC.(19980703152437S101702A073255AYECSDOC))
  FREE PACKAGE(EC.YECSAS.(19980703152436S101702A073255AYECSAS))
  FREE PACKAGE(YY.YECSAS.(19980703152436S101702A073255AYECSAS))
  FREE PACKAGE(EC.YECSEX.(19980703152439S101702A073255AYECSEX))
  FREE PACKAGE(EC.YECSEG.(19980703152438S101702A073255AYECSEG))
  FREE PACKAGE(EC.YECSES.(19980703152438S101702A073255AYECSES))
  FREE PACKAGE(EC.YECCL.(19980703152436S101702A073255AYECCL))
  FREE PACKAGE(SA.YSAT006.(A16M000011))
  FREE PACKAGE(EA.YEA0010.(19980709194554S101702M000923AYEA0010))
  FREE PACKAGE(EA.YEA0011.(19980709194555S101702M000923AYEA0011))
  FREE PACKAGE(EA.YEA0001.(19980709194601S101702M000923AYEA0001))
  FREE PACKAGE(BX.BX8000.(19980709201829S101702A073668ABX8000))
  FREE PACKAGE(KV.BX0130.(19980709201828S101702A073668ABX0130))
  FREE PACKAGE(BX.YBXBI02.(19980709201648S101702A073668AYBXBI02))
  FREE PACKAGE(BX.YBXBI01.(19980709201647S101702A073668AYBXBI01))
  FREE PACKAGE(SX.YSX64P5.(19980709134005S101702M000924AYSX64P5))
  FREE PACKAGE(SA.YSAT011.(19980709133841S101702M000924AYSAT011))
  FREE PACKAGE(OD.OD7330.(19980709142526S101702A073729AOD7330))
  FREE PACKAGE(A1P.YKD0500.(19980709142935S101702A073757AYKD0500))
  FREE PACKAGE(A2P.YKD0500.(19980709142935S101702A073757AYKD0500))
  FREE PACKAGE(KD.YKD0500.(19980709142935S101702A073757AYKD0500))
  FREE PACKAGE(TK.TK0180.(19980709140354S101702A073643ATK0180))
  FREE PACKAGE(AV.AV8810.(19980710144536S101702M000841AAV8810))
  FREE PACKAGE(BX.YBXBI01.(19980710082952S101702A073668AYBXBI01))
  FREE PACKAGE(BX.YBXBI02.(19980710082953S101702A073668AYBXBI02))
  FREE PACKAGE(KV.BX0130.(19980710083334S101702A073668ABX0130))
  FREE PACKAGE(BX.BX8000.(19980710083334S101702A073668ABX8000))
  FREE PACKAGE(AT.AT7010.(19980710095644S101702Z382648AAT7010))
  FREE PACKAGE(EA.YEA0011.(19980710093659S101702M000923AYEA0011))
  FREE PACKAGE(EA.YEA0010.(19980710093614S101702M000923AYEA0010))
  FREE PACKAGE(EA.YEA0001.(19980710093842S101702M000923AYEA0001))
  FREE PACKAGE(AT.AT7010.(19980710102939S101702Z382654AAT7010))
  FREE PACKAGE(A1P.YKD0500.(19980717194602S101702Z383292AYKD0500))
  FREE PACKAGE(A2P.YKD0500.(19980717194602S101702Z383292AYKD0500))
  FREE PACKAGE(KD.YKD0500.(19980717194602S101702Z383292AYKD0500))
  FREE PACKAGE(KD.YKD0500.(19980717193307S101702Z383289AYKD0500))
  FREE PACKAGE(A1P.KD0540.(19980717170619S101702Z383268AKD0540))
  FREE PACKAGE(A2P.KD0540.(19980717170619S101702Z383268AKD0540))
  FREE PACKAGE(A1P.YKD0500.(CRMA000128))
  FREE PACKAGE(A2P.YKD0500.(CRMA000128))
  FREE PACKAGE(A1P.YKD0500.(CRMD000263))
  FREE PACKAGE(A2P.YKD0500.(CRMD000263))
  FREE PACKAGE(A1P.YKD0500.(CRMD000281))
  FREE PACKAGE(A2P.YKD0500.(CRMD000281))
  FREE PACKAGE(A1P.YKD0500.(CRMD000283))
  FREE PACKAGE(A2P.YKD0500.(CRMD000283))
  FREE PACKAGE(M21SAMT2.SP1BS7T.())
  FREE PACKAGE(M21SAMT2.SP1BS9T.())
  FREE PACKAGE(M23SAMT2.SP1BS1T.())
  FREE PACKAGE(M23SAMT2.SP1BS3T.())
  FREE PACKAGE(M23SAMT2.SP1BS7T.())
  FREE PACKAGE(M23SAMT2.SP1BS9T.())
  FREE PACKAGE(WI.YWIASL.(A06M002543))
  FREE PACKAGE(PV.B5POCNTL.(1999-12-28-14.08.56.649262))
  FREE PACKAGE(PV.A5PO058.(2000-05-08-16.07.25.035712))
  FREE PACKAGE(PV.YPV760B.(A18Q000770))
  FREE PACKAGE(CD.CD7060.())
  FREE PACKAGE(NK.YNKUMW.())
  FREE PACKAGE(GE.YGE0001.())
  FREE PACKAGE(PC.YPC9997.())
  FREE PACKAGE(CO.CO5000.())
  FREE PACKAGE(RT.RT5411.())
  FREE PACKAGE(CO.CO0040.())
  FREE PACKAGE(KS.KS0600.())
  FREE PACKAGE(GE.YGE0002.())
  FREE PACKAGE(OE.YOEUP12.())
  FREE PACKAGE(OE.YOEUP77.())
  FREE PACKAGE(OE.YOEUP04.())
  FREE PACKAGE(WB.WB0030.())
  FREE PACKAGE(BW.YBWAHD4.())
  FREE PACKAGE(BW.YBWAEWG.())
  FREE PACKAGE(BW.YBWAEW2.())
  FREE PACKAGE(BW.YBWAEW6.())
  FREE PACKAGE(BW.YBWAEWN.())
  FREE PACKAGE(BW.YBWAO3W.())
  FREE PACKAGE(RT.RT5030.())
  FREE PACKAGE(SA.YSA0235.())
  FREE PACKAGE(SA.YSA0232.())
  FREE PACKAGE(SA.YSA0233.())
  FREE PACKAGE(SA.YSA0236.())
  FREE PACKAGE(SA.YSA0234.())
  FREE PACKAGE(SA.YSA0231.())
  FREE PACKAGE(KS.YKS0031.())
  FREE PACKAGE(BW.YBWAH57.())
  FREE PACKAGE(BW.YBWAAGE.())
  FREE PACKAGE(RT.RT5930.())
  FREE PACKAGE(SX.YSX0610.())
  FREE PACKAGE(NP.NP5410.())
  FREE PACKAGE(SY.SY9230.())
  FREE PACKAGE(YY.YYNHBS.())
  FREE PACKAGE(KS.KS8000.())
  FREE PACKAGE(KS.KS8900.())
  FREE PACKAGE(BP.YBP7020.())
  FREE PACKAGE(BP.YBPSHBP.())
  FREE PACKAGE(UP.YUP09.())
  FREE PACKAGE(UP.YUP12.())
  FREE PACKAGE(UP.YUP03.())
  FREE PACKAGE(UP.YUP06.())
  FREE PACKAGE(UP.YUP11.())
  FREE PACKAGE(UP.YUP04.())
  FREE PACKAGE(UP.YUP29.())
  FREE PACKAGE(UP.YUP44.())
  FREE PACKAGE(UP.YUP46.())
  FREE PACKAGE(UP.YUP24.())
  FREE PACKAGE(UP.YUP10.())
  FREE PACKAGE(UP.YUP22.())
  FREE PACKAGE(UP.YUP25.())
  FREE PACKAGE(UP.YUP40.())
  FREE PACKAGE(UP.YUP39.())
  FREE PACKAGE(UP.YUP45.())
  FREE PACKAGE(UP.YUP77.())
  FREE PACKAGE(NV.NVO019.(A))
  FREE PACKAGE(BW.YBWAAGF.(19960815141412S101702A056402AYBWAAGF))
  FREE PACKAGE(BW.YBWAPVY.(19960815141415S101702A056402AYBWAPVY))
  FREE PACKAGE(BW.YBWAXLQ.(19960815141411S101702A056402AYBWAXLQ))
  FREE PACKAGE(BW.YBWAH56.(19960815141413S101702A056402AYBWAH56))
  FREE PACKAGE(BW.YBWAPVZ.(19960815141410S101702A056402AYBWAPVZ))
  FREE PACKAGE(KEIN.NS0890.(19960815142208S101702A056403ANS0890))
  FREE PACKAGE(NS.NS0890.(19960815142208S101702A056403ANS0890))
  FREE PACKAGE(RR.RR7150.(19960815131413S101702A055629ARR7150))
  FREE PACKAGE(WK.YWKLUBO.(19960815172257S101702M000658AYWKLUBO))
  FREE PACKAGE(SM.SMJCLEX2.())
  FREE PACKAGE(BP.BP7030.(19960822140553S101702A056579ABP7030))
  FREE PACKAGE(SA.YSAL001.(19960822140801S101702A056643AYSAL001))
  FREE PACKAGE(SA.YSAL002.(19960822140803S101702A056643AYSAL002))
  FREE PACKAGE(VT.YVT0809.(19960822140730S101702A056608AYVT0809))
  FREE PACKAGE(SX.YSX5104.(19960822140944S101702A056633AYSX5104))
  FREE PACKAGE(KEIN.NS0890.(19960822141851S101702A056667ANS0890))
  FREE PACKAGE(NS.NS0890.(19960822141851S101702A056667ANS0890))
  FREE PACKAGE(SX.SX0540.(19960822142339S101702A056633ASX0540))
  FREE PACKAGE(NK.NK8040.(19960822153011S101702A056584ANK8040))
  FREE PACKAGE(PHPSPTA.H1116R.())
  FREE PACKAGE(PHPS53.H1116R.())
  FREE PACKAGE(PHPSPTA.H1046R.())
  FREE PACKAGE(PHPS53.H1046R.())
  FREE PACKAGE(PHPSPTA.H0106R.())
  FREE PACKAGE(PHPS53.H0106R.())
  FREE PACKAGE(PHPSPTA.H0091R.())
  FREE PACKAGE(PHPS53.H0091R.())
  FREE PACKAGE(PHPSPTA.H0093R.())
  FREE PACKAGE(PHPS53.H0093R.())
  FREE PACKAGE(PHPSPTA.H0092R.())
  FREE PACKAGE(PHPS53.H0092R.())
  FREE PACKAGE(PHPSPTA.H0096R.())
  FREE PACKAGE(PHPS53.H0096R.())
  FREE PACKAGE(PHPSPTA.H0094R.())
  FREE PACKAGE(PHPS53.H0094R.())
  FREE PACKAGE(PHPSPTA.H0095R.())
  FREE PACKAGE(PHPS53.H0095R.())
  FREE PACKAGE(PHPSPTA.H0097R.())
  FREE PACKAGE(PHPS53.H0097R.())
  FREE PACKAGE(PHPSPTA.H0098R.())
  FREE PACKAGE(PHPS53.H0098R.())
  FREE PACKAGE(PHPSPTA.H0100R.())
  FREE PACKAGE(PHPS53.H0100R.())
  FREE PACKAGE(PHPSPTA.H0099R.())
  FREE PACKAGE(PHPS53.H0099R.())
  FREE PACKAGE(PHPSPTA.H0101R.())
  FREE PACKAGE(PHPS53.H0101R.())
  FREE PACKAGE(PHPSPTA.H0102R.())
  FREE PACKAGE(PHPS53.H0102R.())
  FREE PACKAGE(PHPSPTA.H0105R.())
  FREE PACKAGE(PHPS53.H0105R.())
  FREE PACKAGE(PHPSPTA.H0104R.())
  FREE PACKAGE(PHPS53.H0104R.())
  FREE PACKAGE(PHPSPTA.H1164R.())
  FREE PACKAGE(PHPS53.H1164R.())
  FREE PACKAGE(PHPSPTA.H1165R.())
  FREE PACKAGE(PHPS53.H1165R.())
  FREE PACKAGE(PHPSPTA.H1163R.())
  FREE PACKAGE(PHPS53.H1163R.())
  FREE PACKAGE(PHPSPTA.H1168R.())
  FREE PACKAGE(PHPS53.H1168R.())
  FREE PACKAGE(PHPSPTA.H1169R.())
  FREE PACKAGE(PHPS53.H1169R.())
  FREE PACKAGE(PHPSPTA.H1166R.())
  FREE PACKAGE(PHPS53.H1166R.())
  FREE PACKAGE(PHPSPTA.H1167R.())
  FREE PACKAGE(PHPS53.H1167R.())
  FREE PACKAGE(PHPSPTA.H1172R.())
  FREE PACKAGE(PHPS53.H1172R.())
  FREE PACKAGE(PHPSPTA.H1170R.())
  FREE PACKAGE(PHPS53.H1170R.())
  FREE PACKAGE(PHPSPTA.H1171R.())
  FREE PACKAGE(PHPS53.H1171R.())
  FREE PACKAGE(PHPSPTA.H1173R.())
  FREE PACKAGE(PHPS53.H1173R.())
  FREE PACKAGE(PHPSPTA.H1174R.())
  FREE PACKAGE(PHPS53.H1174R.())
  FREE PACKAGE(PHPSPTA.H1175R.())
  FREE PACKAGE(PHPS53.H1175R.())
  FREE PACKAGE(PHPSPTA.H1178R.())
  FREE PACKAGE(PHPS53.H1178R.())
  FREE PACKAGE(PHPSPTA.H1176R.())
  FREE PACKAGE(PHPS53.H1176R.())
  FREE PACKAGE(PHPSPTA.H1177R.())
  FREE PACKAGE(PHPS53.H1177R.())
  FREE PACKAGE(PHPSPTA.H1181R.())
  FREE PACKAGE(PHPS53.H1181R.())
  FREE PACKAGE(PHPSPTA.H1182R.())
  FREE PACKAGE(PHPS53.H1182R.())
  FREE PACKAGE(PHPSPTA.H1179R.())
  FREE PACKAGE(PHPS53.H1179R.())
  FREE PACKAGE(PHPSPTA.H1180R.())
  FREE PACKAGE(PHPS53.H1180R.())
  FREE PACKAGE(PHPSPTA.H1185R.())
  FREE PACKAGE(PHPS53.H1185R.())
  FREE PACKAGE(PHPSPTA.H1183R.())
  FREE PACKAGE(PHPS53.H1183R.())
  FREE PACKAGE(PHPSPTA.H1184R.())
  FREE PACKAGE(PHPS53.H1184R.())
  FREE PACKAGE(PHPSPTA.H1188R.())
  FREE PACKAGE(PHPS53.H1188R.())
  FREE PACKAGE(PHPSPTA.H1186R.())
  FREE PACKAGE(PHPS53.H1186R.())
  FREE PACKAGE(PHPSPTA.H1187R.())
  FREE PACKAGE(PHPS53.H1187R.())
  FREE PACKAGE(PHPSPTA.H1191R.())
  FREE PACKAGE(PHPS53.H1191R.())
  FREE PACKAGE(PHPSPTA.H1189R.())
  FREE PACKAGE(PHPS53.H1189R.())
  FREE PACKAGE(PHPSPTA.H1190R.())
  FREE PACKAGE(PHPS53.H1190R.())
  FREE PACKAGE(PHPSPTA.H1194R.())
  FREE PACKAGE(PHPS53.H1194R.())
  FREE PACKAGE(PHPSPTA.H1192R.())
  FREE PACKAGE(PHPS53.H1192R.())
  FREE PACKAGE(PHPSPTA.H1193R.())
  FREE PACKAGE(PHPS53.H1193R.())
  FREE PACKAGE(PHPSPTA.H1197R.())
  FREE PACKAGE(PHPS53.H1197R.())
  FREE PACKAGE(PHPSPTA.H1198R.())
  FREE PACKAGE(PHPS53.H1198R.())
  FREE PACKAGE(PHPSPTA.H1195R.())
  FREE PACKAGE(PHPS53.H1195R.())
  FREE PACKAGE(PHPSPTA.H1196R.())
  FREE PACKAGE(PHPS53.H1196R.())
  FREE PACKAGE(PHPSPTA.H1199R.())
  FREE PACKAGE(PHPS53.H1199R.())
  FREE PACKAGE(PHPSPTA.H1200R.())
  FREE PACKAGE(PHPS53.H1200R.())
  FREE PACKAGE(OS.OS7293.(A))
  FREE PACKAGE(PHPSPTA.H0103R.())
  FREE PACKAGE(PHPS53.H0103R.())
  FREE PACKAGE(SX.YSX5104.(19960827154539S101702Z263428AYSX5104))
  FREE PACKAGE(SX.YSX5104.(19960829140441S101702A056757AYSX5104))
  FREE PACKAGE(OE.OE9250.(19960829140415S101702A056744AOE9250))
  FREE PACKAGE(SX.YSX5104.(19960829092947S101702Z263848AYSX5104))
  FREE PACKAGE(PHPSPTA.GCCRC01.())
  FREE PACKAGE(PHPS53.GCCRC01.())
  FREE PACKAGE(NV.NVO020.(A))
  FREE PACKAGE(NV.NVO033.(A))
  FREE PACKAGE(KD.KD8096.(19960905155004S101702M000711AKD8096))
  FREE PACKAGE(KD.KD0630.(19960905154850S101702M000711AKD0630))
  FREE PACKAGE(RR.RR7130.(19960905155309S101702M000711ARR7130))
  FREE PACKAGE(RR.RR7120.(19960905155309S101702M000711ARR7120))
  FREE PACKAGE(RR.RR7150.(19960905155310S101702M000711ARR7150))
  FREE PACKAGE(RR.RR7190.(19960905155311S101702M000711ARR7190))
  FREE PACKAGE(RR.RR7410.(19960905155313S101702M000711ARR7410))
  FREE PACKAGE(VT.YVT0801.(19960905152954S101702M000711AYVT0801))
  FREE PACKAGE(VT.YVT0805.(19960905152957S101702M000711AYVT0805))
  FREE PACKAGE(VT.YVT0803.(19960905152956S101702M000711AYVT0803))
  FREE PACKAGE(VT.YVT0804.(19960905152957S101702M000711AYVT0804))
  FREE PACKAGE(VT.YVT0806.(19960905152958S101702M000711AYVT0806))
  FREE PACKAGE(VT.YVT0802.(19960905152955S101702M000711AYVT0802))
  FREE PACKAGE(CD.YCDUP10.(19960905153351S101702M000711AYCDUP10))
  FREE PACKAGE(AT.YAT7010.(19960905133829S101702A056753AYAT7010))
  FREE PACKAGE(SE.YSE0301.(19960905133832S101702A056374AYSE0301))
  FREE PACKAGE(KD.KD8090.(19960912100713S101702Z265960AKD8090))
  FREE PACKAGE(ED.YED0120.(19960912212211S101702A057173AYED0120))
  FREE PACKAGE(KS.YKS5553.(19960912155328S101702A057108AYKS5553))
  FREE PACKAGE(YY.YYDAISF.(19960912154821S101702A056992AYYDAISF))
  FREE PACKAGE(AV.AV8760.(19960912182612S101702M000659AAV8760))
  FREE PACKAGE(YY.AV8760.(19960912182612S101702M000659AAV8760))
  FREE PACKAGE(WK.YWKLUBO.(19960912180055S101702M000659AYWKLUBO))
  FREE PACKAGE(YY.YYEAISM.(19960920115644S101702Z267161AYYEAISM))
  FREE PACKAGE(YY.YYDAISM.(19960920121001S101702Z267171AYYDAISM))
  FREE PACKAGE(YY.YYEAISM.(19960920121911S101702Z267173AYYEAISM))
  FREE PACKAGE(KD.KD8090.(19960916170653S101702Z266453AKD8090))
  FREE PACKAGE(PUPG53.HMCCNVT3.())
  FREE PACKAGE(PUPG53.HMCCNVT2.())
  FREE PACKAGE(PUPG53.HMCCNVK2.())
  FREE PACKAGE(PUPG53.HMCCNVS3.())
  FREE PACKAGE(PUPG53.HMCCNVS2.())
  FREE PACKAGE(PUPG53.HMCCNVI1.())
  FREE PACKAGE(KS.KS0720.(19960613175707S101702A054915AKS0720))
  FREE PACKAGE(VT.YVT0801.(19960613181338S101702A054978AYVT0801))
  FREE PACKAGE(VT.YVT0803.(19960613181234S101702A054978AYVT0803))
  FREE PACKAGE(VT.YVT0804.(19960613181241S101702A054978AYVT0804))
  FREE PACKAGE(VT.YVT0805.(19960613181244S101702A054978AYVT0805))
  FREE PACKAGE(WK.YWKLUBO.(19960613192725S101702M000641AYWKLUBO))
  FREE PACKAGE(PHPSPTA.H1116X2.())
  FREE PACKAGE(PHPS53.H1116X2.())
  FREE PACKAGE(PT.PT8520.(19960613141320S101702M000695APT8520))
  FREE PACKAGE(BX.YBXBI02.(19960613145220S101702A054888AYBXBI02))
  FREE PACKAGE(OD.OD7200.(19960613145421S101702A054902AOD7200))
  FREE PACKAGE(OD.OD7190.(19960613145420S101702A054902AOD7190))
  FREE PACKAGE(OD.OD7180.(19960613145428S101702A054902AOD7180))
  FREE PACKAGE(FD.FD8100.(19960613143639S101702A054192AFD8100))
  FREE PACKAGE(CD.YCDT10.(19960613152928S101702A054996AYCDT10))
  FREE PACKAGE(BP.YBP04NS.(19960613153121S101702A055005AYBP04NS))
  FREE PACKAGE(SX.YSXFLOG.(19960613151257S101702A054928AYSXFLOG))
  FREE PACKAGE(SA.YSAT807.(19960613151306S101702A054928AYSAT807))
  FREE PACKAGE(KD.KD8070.(19960613161006S101702A054120AKD8070))
  FREE PACKAGE(KD.KD7200.(19960614092516S101702A055036AKD7200))
  FREE PACKAGE(BP.BP7040.(19960621120626S101702Z254169ABP7040))
  FREE PACKAGE(VP.YVP7401.(19960621113929S101702Z254159AYVP7401))
  FREE PACKAGE(VP.YVP7402.(19960621113930S101702Z254159AYVP7402))
  FREE PACKAGE(VP.YVP7402.(19960621144555S101702Z254221AYVP7402))
  FREE PACKAGE(VP.YVP7401.(19960621144555S101702Z254221AYVP7401))
  FREE PACKAGE(VP.YVP7402.(19960617134247S101702Z253094AYVP7402))
  FREE PACKAGE(VP.YVP7401.(19960617134246S101702Z253094AYVP7401))
  FREE PACKAGE(PHPSPTA.H0025R.())
  FREE PACKAGE(PHPS53.H0025R.())
  FREE PACKAGE(VP.YVP7402.(19960618163031S101702Z253537AYVP7402))
  FREE PACKAGE(VP.YVP7401.(19960618163029S101702Z253537AYVP7401))
  FREE PACKAGE(SA.YSAL006.(19960620135031S101702A054814AYSAL006))
  FREE PACKAGE(NK.NK8160.(19960620154603S101702A055102ANK8160))
  FREE PACKAGE(NK.NK8110.(19960627163246S101702A055267ANK8110))
  FREE PACKAGE(NK.NK8820.(19960627163516S101702A055244ANK8820))
  FREE PACKAGE(EX.YEXERG.())
  FREE PACKAGE(VP.YVP7401.(19960627143107S101702A055358AYVP7401))
  FREE PACKAGE(VP.YVP7402.(19960627143109S101702A055358AYVP7402))
  FREE PACKAGE(NK.YNKSICH.(19960704165443S101702A055614AYNKSICH))
  FREE PACKAGE(SA.YSAL006.(19960702125049S101702A055478AYSAL006))
  FREE PACKAGE(PHPSPTA.GCSTATE.())
  FREE PACKAGE(PHPS53.GCSTATE.())
  FREE PACKAGE(NK.YNKSICH.(19960702173409S101702Z255596AYNKSICH))
  FREE PACKAGE(NK.YNKSICH.(19960702182225S101702Z255600AYNKSICH))
  FREE PACKAGE(PHPSPTA.GRENDV0.())
  FREE PACKAGE(PHPS53.GRENDV0.())
  FREE PACKAGE(NK.YNKSICH.(19960703153248S101702Z255754AYNKSICH))
  FREE PACKAGE(NK.YNKSICH.(19960703090225S101702Z255632AYNKSICH))
  FREE PACKAGE(NK.YNKSICH.(19960703093214S101702Z255641AYNKSICH))
  FREE PACKAGE(NK.YNKSICH.(19960703112609S101702Z255691AYNKSICH))
  FREE PACKAGE(NK.YNKSICH.(19960703115112S101702Z255698AYNKSICH))
  FREE PACKAGE(SA.YSAL006.(19960703124118S101702A055562AYSAL006))
  FREE PACKAGE(NK.YNKSICH.(19960703125020S101702Z255709AYNKSICH))
  FREE PACKAGE(NK.YNKSICH.(19960703122934S101702Z255706AYNKSICH))
  FREE PACKAGE(NK.YNKSICH.(19960703133410S101702Z255717AYNKSICH))
  FREE PACKAGE(NK.YNKSICH.(19960703143433S101702Z255741AYNKSICH))
  FREE PACKAGE(OD.OD7040.(19960711133939S101702A055623AOD7040))
  FREE PACKAGE(NK.YNKSICH.(19960711134332S101702A055711AYNKSICH))
  FREE PACKAGE(WK.YWKLUBO.(19960711152018S101702M000657AYWKLUBO))
  FREE PACKAGE(ED.YED0034.(19960711161137S101702A055746AYED0034))
  FREE PACKAGE(SV.SV7570.(19960711171327S101702A055415ASV7570))
  FREE PACKAGE(PHPSPTA.H1160R.())
  FREE PACKAGE(PHPS53.H1160R.())
  FREE PACKAGE(PHPSPTA.H1159R.())
  FREE PACKAGE(PHPS53.H1159R.())
  FREE PACKAGE(PHPSPTA.H1161R.())
  FREE PACKAGE(PHPS53.H1161R.())
  FREE PACKAGE(PHPSPTA.H1162R.())
  FREE PACKAGE(PHPS53.H1162R.())
  FREE PACKAGE(PHPSPTA.H1099R.())
  FREE PACKAGE(PHPS53.H1099R.())
  FREE PACKAGE(PHPSPTA.H0090R.())
  FREE PACKAGE(PHPS53.H0090R.())
  FREE PACKAGE(PHPSPTA.H0035R.())
  FREE PACKAGE(PHPS53.H0035R.())
  FREE PACKAGE(NK.YNKSICH.(19960708122220S101702Z256269AYNKSICH))
  FREE PACKAGE(RP.RP5660.(19960708130856S101702A055658ARP5660))
  FREE PACKAGE(NK.NK0030V.(19960709155209S101702Z256616ANK0030V))
  FREE PACKAGE(NK.YNKSICH.(19960709100619S101702Z256439AYNKSICH))
  FREE PACKAGE(RP.RP5660.(19960717170432S101702A055989ARP5660))
  FREE PACKAGE(BW.YBWAEW9.(19960718124101S101702A056012AYBWAEW9))
  FREE PACKAGE(BW.YBWAEWL.(19960718124102S101702A056012AYBWAEWL))
  FREE PACKAGE(BW.YBWAEWM.(19960718124103S101702A056012AYBWAEWM))
  FREE PACKAGE(BW.YBWAE3X.(19960718124102S101702A056012AYBWAE3X))
  FREE PACKAGE(BW.YBWAEW1.(19960718124100S101702A056012AYBWAEW1))
  FREE PACKAGE(YX.YXNKSIC.(19960718123939S101702A056012AYXNKSIC))
  FREE PACKAGE(YY.YNKSICB.(19960718123939S101702A056012AYNKSICB))
  FREE PACKAGE(OD.OD7140.(19960718135641S101702A055864AOD7140))
  FREE PACKAGE(OD.OD7240.(19960718135643S101702A055864AOD7240))
  FREE PACKAGE(EV.EV0600.(19960718135628S101702A055841AEV0600))
  FREE PACKAGE(OD.OD7210.(19960718135643S101702A055864AOD7210))
  FREE PACKAGE(ED.YED0034.(19960718160812S101702A055858AYED0034))
  FREE PACKAGE(ED.YED0034.(19960715110850S101702Z257531AYED0034))
  FREE PACKAGE(NV.NVB918.())
  FREE PACKAGE(NV.NVB920.())
  FREE PACKAGE(NV.NVO021.(A))
  FREE PACKAGE(NV.NVO025.(A))
  FREE PACKAGE(NV.NVO006.(A))
  FREE PACKAGE(NV.NVO010.(A))
  FREE PACKAGE(NV.NVO017.(A))
  FREE PACKAGE(NV.NVO018.(A))
  FREE PACKAGE(NV.NVO026.(A))
  FREE PACKAGE(NV.NVO027.(A))
  FREE PACKAGE(NV.NVO028.(A))
  FREE PACKAGE(NV.NVO029.(A))
  FREE PACKAGE(NV.NVO030.(A))
  FREE PACKAGE(NV.NVO042.(A))
  FREE PACKAGE(NV.NVO043.(A))
  FREE PACKAGE(NV.NVO034.(A))
  FREE PACKAGE(NV.NVO037.(A))
  FREE PACKAGE(NV.NVO038.(A))
  FREE PACKAGE(NV.NVO039.(A))
  FREE PACKAGE(NV.NVO041.(A))
  FREE PACKAGE(NV.NVO053.(A))
  FREE PACKAGE(NV.NVO055.(A))
  FREE PACKAGE(NV.NVO045.(A))
  FREE PACKAGE(NV.NVO046.(A))
  FREE PACKAGE(NV.NVO052.(A))
  FREE PACKAGE(NV.NVO060.(A))
  FREE PACKAGE(NV.NVO064.(A))
  FREE PACKAGE(NV.NVO070.(A))
  FREE PACKAGE(NV.NVO075.(A))
  FREE PACKAGE(NV.NVO076.(A))
  FREE PACKAGE(NV.NVO077.(A))
  FREE PACKAGE(NV.NVO079.(A))
  FREE PACKAGE(NV.NVO080.(A))
  FREE PACKAGE(NV.NVO071.(A))
  FREE PACKAGE(NV.NVO081.(A))
  FREE PACKAGE(NV.NVO082.(A))
  FREE PACKAGE(NV.NVO083.(A))
  FREE PACKAGE(BW.YBWAEWM.(19960722114429S101702A056037AYBWAEWM))
  FREE PACKAGE(BW.YBWAEWL.(19960722114428S101702A056037AYBWAEWL))
  FREE PACKAGE(BW.YBWAEW1.(19960722114425S101702A056037AYBWAEW1))
  FREE PACKAGE(BW.YBWAE3X.(19960722114427S101702A056037AYBWAE3X))
  FREE PACKAGE(BW.YBWAEW9.(19960722114426S101702A056037AYBWAEW9))
  FREE PACKAGE(PHPSPTA.HMPBNDM.())
  FREE PACKAGE(PHPS53.HMPBNDM.())
  FREE PACKAGE(SA.YSAL006.(19960731150427S101702A056186AYSAL006))
  FREE PACKAGE(SX.SX0540.(19960731150721S101702A056219ASX0540))
  FREE PACKAGE(NV.NVO048.(A))
  FREE PACKAGE(NV.NVO049.(A))
  FREE PACKAGE(NV.NVO057.(A))
  FREE PACKAGE(NV.NVO059.(A))
  FREE PACKAGE(NV.NVO072.(A))
  FREE PACKAGE(NV.NVO031.(A))
  FREE PACKAGE(NV.NVO032.(A))
  FREE PACKAGE(NV.NVO047.(A))
  FREE PACKAGE(NV.NVO073.(A))
  FREE PACKAGE(NV.NVO074.(A))
  FREE PACKAGE(EX.EX8888.(19960812102421S101702Z261211AEX8888))
  FREE PACKAGE(BP.BP7030.(19960808141137S101702A056223ABP7030))
  FREE PACKAGE(KEIN.NS0890.(19960808144239S101702A056331ANS0890))
  FREE PACKAGE(NS.NS0890.(19960808144239S101702A056331ANS0890))
  FREE PACKAGE(BX.YBXBI02.(19960808183124S101702A056200AYBXBI02))
  FREE PACKAGE(YY.YYDEPAY.(19960808183530S101702A056249AYYDEPAY))
  FREE PACKAGE(BP.BP7030.(19960809114839S101702Z261082ABP7030))
  FREE PACKAGE(KB.KB2010.(19961128144621S101702A059147AKB2010))
  FREE PACKAGE(YY.YYWBMOE.(19961128144620S101702A059131AYYWBMOE))
  FREE PACKAGE(YY.YYWBMOE.(19961128160532S101702A059131AYYWBMOE))
  FREE PACKAGE(ZP.YZPUSER.(19961126141035S101702A059224AYZPUSER))
  FREE PACKAGE(RP.RP9010.(19961210181748S101702A059742ARP9010))
  FREE PACKAGE(CC.CC5160.(19961212143434S101702A058962ACC5160))
  FREE PACKAGE(VT.YVT0731.(19961209174331S101702A059465AYVT0731))
  FREE PACKAGE(KS.YKSAUFT.(19961209174335S101702A059465AYKSAUFT))
  FREE PACKAGE(KS.YKSMODU.(19961209174338S101702A059465AYKSMODU))
  FREE PACKAGE(VT.YVT0809.(19961209174336S101702A059465AYVT0809))
  FREE PACKAGE(VP.YVP7401.(19961217152842S101702Z284369AYVP7401))
  FREE PACKAGE(VP.YVP7401.(19961217095521S101702Z284200AYVP7401))
  FREE PACKAGE(KS.YKSAUFT.(19961218101955S101702A059995AYKSAUFT))
  FREE PACKAGE(LB.YLB0113.(19961212161055S101702M000662AYLB0113))
  FREE PACKAGE(WK.YWKLUBO.(19961212161508S101702M000662AYWKLUBO))
  FREE PACKAGE(YY.YYWBMOE.(19961212173057S101702A059683AYYWBMOE))
  FREE PACKAGE(BG.YBG0533.(19961212184920S101702A059774AYBG0533))
  FREE PACKAGE(BG.YBG0532.(19961212185135S101702A059774AYBG0532))
  FREE PACKAGE(KS.YKSZNID.(19961213190542S101702A059882AYKSZNID))
  FREE PACKAGE(KS.YKS5553.(19961213190525S101702A059882AYKS5553))
  FREE PACKAGE(VT.YVT0731.(19961213190527S101702A059882AYVT0731))
  FREE PACKAGE(KS.YKS5552.(19961213190524S101702A059882AYKS5552))
  FREE PACKAGE(KS.YKS5551.(19961213190524S101702A059882AYKS5551))
  FREE PACKAGE(KS.KS0720.(19961213190918S101702A059882AKS0720))
  FREE PACKAGE(ED.YEDSAM.(19961219133558S101702A059912AYEDSAM))
  FREE PACKAGE(PT.PT8650.(19961231141731S101702Z286711APT8650))
  FREE PACKAGE(WK.YWK019A.(19961227141204S101702M000749AYWK019A))
  FREE PACKAGE(WK.YWKLUBO.(19961227141203S101702M000749AYWKLUBO))
  FREE PACKAGE(PT.PT8520.(19961227123142S101702M000758APT8520))
  FREE PACKAGE(BW.YBWAAGE.(19961227131948S101702A060345AYBWAAGE))
  FREE PACKAGE(BW.YBWAAGF.(19961227131949S101702A060345AYBWAAGF))
  FREE PACKAGE(BW.YBWAXLQ.(19961227132033S101702A060345AYBWAXLQ))
  FREE PACKAGE(BW.YBWAFI2.(19961227132018S101702A060345AYBWAFI2))
  FREE PACKAGE(BW.YBWAFIY.(19961227132014S101702A060345AYBWAFIY))
  FREE PACKAGE(BW.YBWAFIW.(19961227132013S101702A060345AYBWAFIW))
  FREE PACKAGE(BW.YBWAFI0.(19961227132017S101702A060345AYBWAFI0))
  FREE PACKAGE(BW.YBWAFI1.(19961227132018S101702A060345AYBWAFI1))
  FREE PACKAGE(BW.YBWAFIX.(19961227132014S101702A060345AYBWAFIX))
  FREE PACKAGE(BW.YBWAH57.(19961227132030S101702A060345AYBWAH57))
  FREE PACKAGE(BW.YBWAFIZ.(19961227132016S101702A060345AYBWAFIZ))
  FREE PACKAGE(BW.YBWAPVY.(19961227132031S101702A060345AYBWAPVY))
  FREE PACKAGE(BW.YBWAH56.(19961227132029S101702A060345AYBWAH56))
  FREE PACKAGE(BW.YBWAPVZ.(19961227132032S101702A060345AYBWAPVZ))
  FREE PACKAGE(RR.RR0240.(19961227132818S101702A060345ARR0240))
  FREE PACKAGE(KD.KD0630.(19960926134359S101702A057314AKD0630))
  FREE PACKAGE(KD.KD0640.(19960926134359S101702A057314AKD0640))
  FREE PACKAGE(NK.NK8110.(19960926162634S101702A057441ANK8110))
  FREE PACKAGE(NK.NK8170.(19960926162637S101702A057441ANK8170))
  FREE PACKAGE(PHPSPTA.GSELECT.())
  FREE PACKAGE(PHPS53.GSELECT.())
  FREE PACKAGE(KD.KD0640.(19961003141209S101702A057537AKD0640))
  FREE PACKAGE(CD.KD0600.(19961003141208S101702A057537AKD0600))
  FREE PACKAGE(KD.KD0600.(19961003141208S101702A057537AKD0600))
  FREE PACKAGE(YY.YYDAISM.(19960927122508S101702Z268064AYYDAISM))
  FREE PACKAGE(CD.KD0600.(19960927085001S101702Z268024AKD0600))
  FREE PACKAGE(KD.KD0600.(19960927085001S101702Z268024AKD0600))
  FREE PACKAGE(KD.KD0640.(19960927085317S101702Z268027AKD0640))
  FREE PACKAGE(KD.KD8090.(19960927170504S101702Z268138AKD8090))
  FREE PACKAGE(YY.YYDAISM.(19960930084648S101702Z268203AYYDAISM))
  FREE PACKAGE(YY.YYDAISM.(19960930182222S101702Z268425AYYDAISM))
  FREE PACKAGE(ED.YED0120.(19961007201605S101702Z269643AYED0120))
  FREE PACKAGE(ED.YED0120.(19961009112903S101702Z269915AYED0120))
  FREE PACKAGE(ED.YED0034.(19961009120403S101702Z269920AYED0034))
  FREE PACKAGE(ED.YED0120.(19961004122314S101702A057542AYED0120))
  FREE PACKAGE(ED.YED0034.(19961004122313S101702A057542AYED0034))
  FREE PACKAGE(ED.YED0120.(19961010135243S101702A057713AYED0120))
  FREE PACKAGE(ED.YED0034.(19961010135245S101702A057713AYED0034))
  FREE PACKAGE(VT.VT5040.(19961010135459S101702A057724AVT5040))
  FREE PACKAGE(NK.NK7920.(19961010145703S101702A057697ANK7920))
  FREE PACKAGE(NK.NK5240.(19961010145701S101702A057697ANK5240))
  FREE PACKAGE(NK.NK7030.(19961010145702S101702A057697ANK7030))
  FREE PACKAGE(NK.NK8840.(19961010145703S101702A057697ANK8840))
  FREE PACKAGE(KS.YKSMODU.(19961022142351S101702Z272071AYKSMODU))
  FREE PACKAGE(KS.YKSAUFT.(19961022142351S101702Z272071AYKSAUFT))
  FREE PACKAGE(KS.YKSAUFT.(19961022074124S101702Z271871AYKSAUFT))
  FREE PACKAGE(OD.OD7090.(19961016164015S101702Z271012AOD7090))
  FREE PACKAGE(EX.YEXERG.(19961016172704S101702A057202AYEXERG))
  FREE PACKAGE(EX.EX7010.(19961016172831S101702A057202AEX7010))
  FREE PACKAGE(OD.OD7090.(19961017072106S101702Z271040AOD7090))
  FREE PACKAGE(KS.YKSMODU.(19961017165521S101702A057903AYKSMODU))
  FREE PACKAGE(KS.YKSAUFT.(19961017165520S101702A057903AYKSAUFT))
  FREE PACKAGE(YY.YYEAISM.(19961018142720S101702M000660AYYEAISM))
  FREE PACKAGE(FI.YFI7201.(19961018112744S101702Z271383AYFI7201))
  FREE PACKAGE(YY.YYDAISM.(19961018115328S101702M000660AYYDAISM))
  FREE PACKAGE(OD.OD7070.(19961023085719S101702Z272282AOD7070))
  FREE PACKAGE(KS.YKSAUFT.(19961024144245S101702A058089AYKSAUFT))
  FREE PACKAGE(KS.YKSMODU.(19961024144246S101702A058089AYKSMODU))
  FREE PACKAGE(KS.YKSAUFT.(19961025083025S101702Z273139AYKSAUFT))
  FREE PACKAGE(KS.YKSAUFT.(19961025105240S101702Z273213AYKSAUFT))
  FREE PACKAGE(KS.YKSMODU.(19961025105241S101702Z273213AYKSMODU))
  FREE PACKAGE(PHPSPTA.HMCCNVSD.())
  FREE PACKAGE(PHPS53.HMCCNVSD.())
  FREE PACKAGE(EX.YEXERG.(19961031134918S101702A058312AYEXERG))
  FREE PACKAGE(EX.YEXERG.(19961031134918CGS101702A058312AYEXERG))
  FREE PACKAGE(ED.YED0034.(19961031145508S101702A058043AYED0034))
  FREE PACKAGE(CD.YCDUP10.(19961031150558S101702M000738AYCDUP10))
  FREE PACKAGE(PT.YPTBZAC.(19961108140519S101702Z275952AYPTBZAC))
  FREE PACKAGE(PT.YPTBAK.(19961108140520S101702Z275952AYPTBAK))
  FREE PACKAGE(PT.YPTBER.(19961108140519S101702Z275952AYPTBER))
  FREE PACKAGE(PHPSPTA.H0025X2.())
  FREE PACKAGE(PHPS53.H0025X2.())
  FREE PACKAGE(RP.RP5100.(19961106151732S101702A058507ARP5100))
  FREE PACKAGE(NTA1P.AT0070.(CIMA000450))
  FREE PACKAGE(GE.GE7620.(19961107194155S101702M000730AGE7620))
  FREE PACKAGE(GE.GE7590.(19961107194153S101702M000730AGE7590))
  FREE PACKAGE(GE.GE7580.(19961107194153S101702M000730AGE7580))
  FREE PACKAGE(WK.YWKATRE.(19961115011453S101702M000661AYWKATRE))
  FREE PACKAGE(BF.YBF530A.(19961115010108S101702M000661AYBF530A))
  FREE PACKAGE(WK.WK7160.(19961115025420S101702M000661AWK7160))
  FREE PACKAGE(SX.YSX5405.(19961114194627S101702M000743AYSX5405))
  FREE PACKAGE(SX.YSX5404.(19961114194626S101702M000743AYSX5404))
  FREE PACKAGE(CD.YCDUP10.(19961114194602S101702M000743AYCDUP10))
  FREE PACKAGE(SX.YSX8104.(19961114194632S101702M000743AYSX8104))
  FREE PACKAGE(SX.YSX8105.(19961114194633S101702M000743AYSX8105))
  FREE PACKAGE(KS.YKSMODU.(19961114194917S101702M000743AYKSMODU))
  FREE PACKAGE(KS.YKSAUFT.(19961114194908S101702M000743AYKSAUFT))
  FREE PACKAGE(SX.YSX5104.(19961114194623S101702M000743AYSX5104))
  FREE PACKAGE(SA.YSAOBP.(19961114194922S101702M000743AYSAOBP))
  FREE PACKAGE(KB.KB2010.(19961114221018S101702A058608AKB2010))
  FREE PACKAGE(FC.FC0020.(19961114221845S101702A058752AFC0020))
  FREE PACKAGE(KD.FC0020.(19961114221845S101702A058752AFC0020))
  FREE PACKAGE(BG.YBG0533.(19961115104534S101702M000774AYBG0533))
  FREE PACKAGE(BG.YBG0532.(19961115104536S101702M000774AYBG0532))
  FREE PACKAGE(PT.YPTBZAC.(19961115111204S101702A058611AYPTBZAC))
  FREE PACKAGE(PT.YPTBER.(19961115111204S101702A058611AYPTBER))
  FREE PACKAGE(PT.YPTBAK.(19961115111205S101702A058611AYPTBAK))
  FREE PACKAGE(PT.YPTBAK.(19961111225045S101702Z276501AYPTBAK))
  FREE PACKAGE(PT.YPTBAK.(19961111232114S101702Z276502AYPTBAK))
  FREE PACKAGE(PT.YPTBER.(19961112180916S101702Z276858AYPTBER))
  FREE PACKAGE(PT.YPTBZAC.(19961112180917S101702Z276858AYPTBZAC))
  FREE PACKAGE(PT.YPTBAK.(19961112180917S101702Z276858AYPTBAK))
  FREE PACKAGE(PT.YPTBZAC.(19961113024849S101702Z276869AYPTBZAC))
  FREE PACKAGE(PT.YPTBAK.(19961113024850S101702Z276869AYPTBAK))
  FREE PACKAGE(CD.YCDUP10.(19961114175618S101702M000743AYCDUP10))
  FREE PACKAGE(SX.YSX5104.(19961114144227S101702M000743AYSX5104))
  FREE PACKAGE(SX.YSX5404.(19961114144229S101702M000743AYSX5404))
  FREE PACKAGE(CD.YCDUP10.(19961114144211S101702M000743AYCDUP10))
  FREE PACKAGE(KS.YKSMODU.(19961114144530S101702M000743AYKSMODU))
  FREE PACKAGE(SX.YSX5405.(19961114144230S101702M000743AYSX5405))
  FREE PACKAGE(SX.YSX8104.(19961114144235S101702M000743AYSX8104))
  FREE PACKAGE(SX.YSX8105.(19961114144236S101702M000743AYSX8105))
  FREE PACKAGE(KS.YKSAUFT.(19961114144518S101702M000743AYKSAUFT))
  FREE PACKAGE(SA.YSAOBP.(19961114144539S101702M000743AYSAOBP))
  FREE PACKAGE(SA.YSAT807.(19961121140042S101702M000745AYSAT807))
  FREE PACKAGE(SA.YSAOBP.(19961121140042S101702M000745AYSAOBP))
  FREE PACKAGE(ED.YED0120.(19961121135415S101702A058872AYED0120))
  FREE PACKAGE(ED.YED0034.(19961121135414S101702A058872AYED0034))
  FREE PACKAGE(BG.YBG0532.(19961122143048S101702Z278945AYBG0532))
  FREE PACKAGE(BG.YBG0533.(19961122143047S101702Z278945AYBG0533))
  FREE PACKAGE(KB.KB2010.(19961118082438S101702Z277492AKB2010))
  FREE PACKAGE(SX.YSX8105.(19961118110550S101702A058913AYSX8105))
  FREE PACKAGE(PHPSPTA.HMCECR5.())
  FREE PACKAGE(PHPS53.HMCECR5.())
  FREE PACKAGE(KS.YKS5551.(19970306130420S101702A061749AYKS5551))
  FREE PACKAGE(SA.YSAT802.(19970306131335S101702M000777AYSAT802))
  FREE PACKAGE(EX.YEXERG.(19970306131334S101702A061962AYEXERG))
  FREE PACKAGE(EX.YEXERG.(19970306131334CGS101702A061962AYEXERG))
  FREE PACKAGE(BG.YBG0533.(19970306174905S101702A062187AYBG0533))
  FREE PACKAGE(BG.YBG0532.(19970306174909S101702A062187AYBG0532))
  FREE PACKAGE(VT.YVT0804.(19970307192828S101702A062025AYVT0804))
  FREE PACKAGE(PHPSPTA.GCADDE.())
  FREE PACKAGE(PHPS53.GCADDE.())
  FREE PACKAGE(PHPSPTA.GCRDENT.())
  FREE PACKAGE(PHPS53.GCRDENT.())
  FREE PACKAGE(WK.YWKLUBO.(19970313143807S101702M000717AYWKLUBO))
  FREE PACKAGE(YY.YYCXCR.(19970313110131S101702Z301064AYYCXCR))
  FREE PACKAGE(RR.RR7420.(19970313122851S101702A061790ARR7420))
  FREE PACKAGE(RR.RR7240.(19970313122849S101702A061790ARR7240))
  FREE PACKAGE(YY.RR7240.(19970313122849S101702A061790ARR7240))
  FREE PACKAGE(RR.RR7260.(19970313122851S101702A061790ARR7260))
  FREE PACKAGE(RR.RR8220.(19970313122854S101702A061790ARR8220))
  FREE PACKAGE(RR.RR8100.(19970313122854S101702A061790ARR8100))
  FREE PACKAGE(WK.YWKLUBO.(19970313192346S101702M000717AYWKLUBO))
  FREE PACKAGE(VT.YVT0805.(19970314192907S101702A062471AYVT0805))
  FREE PACKAGE(VT.YVT0801.(19970314192907S101702A062471AYVT0801))
  FREE PACKAGE(VT.YVT0804.(19970314192907S101702A062471AYVT0804))
  FREE PACKAGE(VP.YVP7401.(19970319145619S101702Z302523AYVP7401))
  FREE PACKAGE(KD.KD0620.(19970320172119S101702A062566AKD0620))
  FREE PACKAGE(BW.YBWAEWJ.(19970320173113S101702A062607AYBWAEWJ))
  FREE PACKAGE(RR.RR8300.(19970320173218S101702A062654ARR8300))
  FREE PACKAGE(YY.YYDAISF.(19970320153356S101702M000778AYYDAISF))
  FREE PACKAGE(YY.YYDEAIS.(19970320153357S101702M000778AYYDEAIS))
  FREE PACKAGE(YY.YYDAISM.(19970320153356S101702M000778AYYDAISM))
  FREE PACKAGE(YY.YYEAISM.(19970320153358S101702M000778AYYEAISM))
  FREE PACKAGE(ED.YED0034.(19970320153410S101702M000778AYED0034))
  FREE PACKAGE(ED.YED0120.(19970320153410S101702M000778AYED0120))
  FREE PACKAGE(YY.YYDEPAY.(19970320153413S101702M000778AYYDEPAY))
  FREE PACKAGE(VT.VT5040.(19970320162702S101702M000778AVT5040))
  FREE PACKAGE(PHPSPTA.GTCLUP.())
  FREE PACKAGE(PHPS53.GTCLUP.())
  FREE PACKAGE(PHPSPTA.GUIVRFY.())
  FREE PACKAGE(PHPS53.GUIVRFY.())
  FREE PACKAGE(PHPSPTA.GARESET.())
  FREE PACKAGE(PHPS53.GARESET.())
  FREE PACKAGE(PHPSPTA.GACOLSN.())
  FREE PACKAGE(PHPS53.GACOLSN.())
  FREE PACKAGE(PT.YPTBER.(19970327164021S101702Z303850AYPTBER))
  FREE PACKAGE(PT.YPTBZAC.(19970327164021S101702Z303850AYPTBZAC))
  FREE PACKAGE(PT.YPTBAK.(19970327164021S101702Z303850AYPTBAK))
  FREE PACKAGE(KD.KD8030.(19970327172217S101702Z303860AKD8030))
  FREE PACKAGE(KD.KD8012.(19970404104807S101702Z304584AKD8012))
  FREE PACKAGE(KD.KD8012.(19970401154800S101702Z304029AKD8012))
  FREE PACKAGE(KD.KD8012.(19970401115710S101702Z304029AKD8012))
  FREE PACKAGE(PHPSPTA.HMCGSET.())
  FREE PACKAGE(PHPS53.HMCGSET.())
  FREE PACKAGE(KS.YKS5553.(19970403145839S101702A062688AYKS5553))
  FREE PACKAGE(NK.NK5180.(19970403170629S101702A062868ANK5180))
  FREE PACKAGE(NK.NK5200.(19970403170632S101702A062868ANK5200))
  FREE PACKAGE(NK.NK7050.(19970403170633S101702A062868ANK7050))
  FREE PACKAGE(NK.NK8030.(19970403170634S101702A062868ANK8030))
  FREE PACKAGE(NK.NK8060.(19970403170636S101702A062868ANK8060))
  FREE PACKAGE(BG.YBG0532.(19970403171955S101702A062906AYBG0532))
  FREE PACKAGE(SY.SY9230.(A))
  FREE PACKAGE(SA.YSAL011.(19970403142901S101702M000784AYSAL011))
  FREE PACKAGE(SA.YSAL002.(19970403142856S101702M000784AYSAL002))
  FREE PACKAGE(SA.YSA5282.(19970403142915S101702M000784AYSA5282))
  FREE PACKAGE(SA.YSAL006.(19970403142900S101702M000784AYSAL006))
  FREE PACKAGE(SA.YSAL010.(19970403142900S101702M000784AYSAL010))
  FREE PACKAGE(SA.YSA5281.(19970403142907S101702M000784AYSA5281))
  FREE PACKAGE(VT.YVT0802.(19970410142924S101702A063075AYVT0802))
  FREE PACKAGE(VT.YVT0806.(19970410142929S101702A063075AYVT0806))
  FREE PACKAGE(VT.YVT0803.(19970410142925S101702A063075AYVT0803))
  FREE PACKAGE(VT.YVT0809.(19970410142932S101702A063075AYVT0809))
  FREE PACKAGE(VT.YVT0805.(19970410142928S101702A063075AYVT0805))
  FREE PACKAGE(VT.YVT0801.(19970410142923S101702A063075AYVT0801))
  FREE PACKAGE(VT.YVT0804.(19970410142926S101702A063075AYVT0804))
  FREE PACKAGE(VT.YVT0801.(19970410150032S101702A063075AYVT0801))
  FREE PACKAGE(VT.YVT0804.(19970410150033S101702A063075AYVT0804))
  FREE PACKAGE(VT.YVT0805.(19970410150034S101702A063075AYVT0805))
  FREE PACKAGE(VT.YVT0803.(19970410150033S101702A063075AYVT0803))
  FREE PACKAGE(VT.YVT0809.(19970410150035S101702A063075AYVT0809))
  FREE PACKAGE(VT.YVT0802.(19970410150032S101702A063075AYVT0802))
  FREE PACKAGE(VT.YVT0806.(19970410150034S101702A063075AYVT0806))
  FREE PACKAGE(WB.WB7490.(19970410154641S101702A063035AWB7490))
  FREE PACKAGE(VT.YVT0801.(19970407070548S101702Z304742AYVT0801))
  FREE PACKAGE(VT.YVT0805.(19970407070836S101702Z304746AYVT0805))
  FREE PACKAGE(PT.YPTBAK.(19970101010523S101702Z286736AYPTBAK))
  FREE PACKAGE(NK.NK8240.(19970101115054S101702A060411ANK8240))
  FREE PACKAGE(NK.NK8840.(19970101115056S101702A060411ANK8840))
  FREE PACKAGE(NK.NK7920.(19970101115048S101702A060411ANK7920))
  FREE PACKAGE(NK.NK5240.(19970101115037S101702A060411ANK5240))
  FREE PACKAGE(NK.NK5030.(19970101115058S101702A060411ANK5030))
  FREE PACKAGE(NK.NK7930.(19970101115051S101702A060411ANK7930))
  FREE PACKAGE(NK.NK7030.(19970101115041S101702A060411ANK7030))
  FREE PACKAGE(BW.YBWAE3X.(19970101115057S101702A060424AYBWAE3X))
  FREE PACKAGE(BW.YBWAEW6.(19970101115054S101702A060424AYBWAEW6))
  FREE PACKAGE(BW.YBWAEW9.(19970101115056S101702A060424AYBWAEW9))
  FREE PACKAGE(NK.NK5040.(19970101115059S101702A060411ANK5040))
  FREE PACKAGE(BW.YBWAEWJ.(19970101115100S101702A060424AYBWAEWJ))
  FREE PACKAGE(BW.YBWAO3W.(19970101115059S101702A060424AYBWAO3W))
  FREE PACKAGE(BW.YBWAEWL.(19970101115101S101702A060424AYBWAEWL))
  FREE PACKAGE(BW.YBWAEWM.(19970101115101S101702A060424AYBWAEWM))
  FREE PACKAGE(BW.YBWAEW1.(19970101115052S101702A060424AYBWAEW1))
  FREE PACKAGE(BW.YBWAEW2.(19970101115053S101702A060424AYBWAEW2))
  FREE PACKAGE(BW.YBWAHD4.(19970101115058S101702A060424AYBWAHD4))
  FREE PACKAGE(BW.YBWAEWN.(19970101115051S101702A060424AYBWAEWN))
  FREE PACKAGE(NK.NK7800.(19970101115537S101702A060424ANK7800))
  FREE PACKAGE(NK.NK7810.(19970101115539S101702A060424ANK7810))
  FREE PACKAGE(NK.NK8140.(19970101115542S101702A060424ANK8140))
  FREE PACKAGE(NK.NK7840.(19970101115540S101702A060424ANK7840))
  FREE PACKAGE(NK.NK8040.(19970101115540S101702A060424ANK8040))
  FREE PACKAGE(NK.NK8090.(19970101115541S101702A060424ANK8090))
  FREE PACKAGE(NK.NK8170.(19970103102547S101702Z287047ANK8170))
  FREE PACKAGE(PT.PT8650.(19970103135840S101702Z287197APT8650))
  FREE PACKAGE(SA.YSAUEB.(19970109134538S101702A060538AYSAUEB))
  FREE PACKAGE(SA.YSAOBP.(19970109133259S101702A060528AYSAOBP))
  FREE PACKAGE(SX.YSX8104.(19970109133303S101702A060530AYSX8104))
  FREE PACKAGE(SX.YSX8105.(19970109133314S101702A060530AYSX8105))
  FREE PACKAGE(YY.YYWBMOE.(19970109154730S101702A060516AYYWBMOE))
  FREE PACKAGE(YY.YYDEPAY.(19970110183204S101702Z289912AYYDEPAY))
  FREE PACKAGE(NK.NK0200V.(19970113142804S101702Z290221ANK0200V))
  FREE PACKAGE(YY.YYDEPAY.(19970114095350S101702Z290455AYYDEPAY))
  FREE PACKAGE(YY.YYDEPAY.(19970115095002S101702Z290790AYYDEPAY))
  FREE PACKAGE(SX.YSX5405.(19970116105139S101702Z291042AYSX5405))
  FREE PACKAGE(WK.YWK019A.(19970116155229S101702M000715AYWK019A))
  FREE PACKAGE(BF.BF5210.(19970116152548S101702A059717ABF5210))
  FREE PACKAGE(BW.YBWAEW1.(19970116181901S101702A060940AYBWAEW1))
  FREE PACKAGE(KD.KD8010.(19970116174423S101702A060854AKD8010))
  FREE PACKAGE(YY.YYFIKU1.(19970116181927S101702A060919AYYFIKU1))
  FREE PACKAGE(NK.NK7910.(19970116182042S101702A060940ANK7910))
  FREE PACKAGE(WK.YWK019A.(19970116200309S101702M000715AYWK019A))
  FREE PACKAGE(YY.YYDEPAY.(19970117093023S101702Z291200AYYDEPAY))
  FREE PACKAGE(YY.YYWBMOE.(19970124071700S101702A061015AYYWBMOE))
  FREE PACKAGE(RT.RE7580.(19970124071623S101702A060807ARE7580))
  FREE PACKAGE(NK.NK8240.(19970125095418S101702Z292839ANK8240))
  FREE PACKAGE(YY.YYFIKU1.(19970121101133S101702Z291909AYYFIKU1))
  FREE PACKAGE(RP.RP9010.(19970122181857S101702A061163ARP9010))
  FREE PACKAGE(RT.RE7580.(19970123170243S101702A060807ARE7580))
  FREE PACKAGE(KS.YKS5551.(19970123170322S101702A060998AYKS5551))
  FREE PACKAGE(KS.YKS5553.(19970123170324S101702A060998AYKS5553))
  FREE PACKAGE(NK.NK5030.(19970123175105S101702A061091ANK5030))
  FREE PACKAGE(YY.YYWBMOE.(19970123173704S101702A061015AYYWBMOE))
  FREE PACKAGE(YY.YYFIKU1.(19970123142101S101702A061123AYYFIKU1))
  FREE PACKAGE(YY.YYDEPAY.(19970123135201S101702A061056AYYDEPAY))
  FREE PACKAGE(VT.YVT0805.(19970123142208S101702A061139AYVT0805))
  FREE PACKAGE(VT.YVT0801.(19970123142207S101702A061139AYVT0801))
  FREE PACKAGE(NK.NK8250.(19970130130932S101702A061205ANK8250))
  FREE PACKAGE(EV.YEVSICH.(19970130162645S101702A061187AYEVSICH))
  FREE PACKAGE(NS.NS7340.(19970130162854S101702A061187ANS7340))
  FREE PACKAGE(YY.YYFIKU1.(19970131135524S101702Z294063AYYFIKU1))
  FREE PACKAGE(YY.YYFIKU1.(19970131140710S101702Z294063AYYFIKU1))
  FREE PACKAGE(PT.YPTBER.(19970131150649S101702A061364AYPTBER))
  FREE PACKAGE(PT.YPTBAK.(19970131150650S101702A061364AYPTBAK))
  FREE PACKAGE(PT.PT8650.(19970131150927S101702A061364APT8650))
  FREE PACKAGE(YY.YYFIKU1.(19970131133354S101702Z294063AYYFIKU1))
  FREE PACKAGE(KS.YKS5551.(19970127175027S101702Z293101AYKS5551))
  FREE PACKAGE(NK.NK8250.(19970128224355S101702Z293392ANK8250))
  FREE PACKAGE(PHPSPTA.H1112X.())
  FREE PACKAGE(PHPS53.H1112X.())
  FREE PACKAGE(YY.YYFIKU1.(19970129140738S101702Z293531AYYFIKU1))
  FREE PACKAGE(KS.YKS0802.(19970205171935S101702A061407AYKS0802))
  FREE PACKAGE(SX.YSX8105.(19970206135318S101702A061338AYSX8105))
  FREE PACKAGE(SX.YSX5405.(19970206135317S101702A061338AYSX5405))
  FREE PACKAGE(KD.KD8014.(19970206141304S101702A061437AKD8014))
  FREE PACKAGE(KD.KD8015.(19970206141306S101702A061437AKD8015))
  FREE PACKAGE(SA.YSAT806.(19970206143321S101702A061469AYSAT806))
  FREE PACKAGE(SA.YSAT807.(19970206143322S101702A061469AYSAT807))
  FREE PACKAGE(SA.YSAT801.(19970206143328S101702A061469AYSAT801))
  FREE PACKAGE(SA.YSAT802.(19970206143331S101702A061469AYSAT802))
  FREE PACKAGE(SA.YSAT805.(19970206143334S101702A061469AYSAT805))
  FREE PACKAGE(SA.YSAT803.(19970206143332S101702A061469AYSAT803))
  FREE PACKAGE(KS.YKS0802.(19970206151324S101702A061407AYKS0802))
  FREE PACKAGE(KD.KD8010.(19970206155033S101702A061213AKD8010))
  FREE PACKAGE(KD.KD8011.(19970206155034S101702A061213AKD8011))
  FREE PACKAGE(FC.FC0020.(19970206162503S101702A061517AFC0020))
  FREE PACKAGE(KD.FC0020.(19970206162503S101702A061517AFC0020))
  FREE PACKAGE(RK.RK2400.(19970206160942S101702A061306ARK2400))
  FREE PACKAGE(RK.RK2320.(19970206160943S101702A061306ARK2320))
  FREE PACKAGE(RK.RK2380.(19970206160944S101702A061306ARK2380))
  FREE PACKAGE(RK.RK2390.(19970206160944S101702A061306ARK2390))
  FREE PACKAGE(PHPSPTA.H0074R.())
  FREE PACKAGE(PHPS53.H0074R.())
  FREE PACKAGE(PHPSPTA.H0076R.())
  FREE PACKAGE(PHPS53.H0076R.())
  FREE PACKAGE(PHPSPTA.H0075R.())
  FREE PACKAGE(PHPS53.H0075R.())
  FREE PACKAGE(PHPSPTA.H0079R.())
  FREE PACKAGE(PHPS53.H0079R.())
  FREE PACKAGE(PHPSPTA.H0077R.())
  FREE PACKAGE(PHPS53.H0077R.())
  FREE PACKAGE(PHPSPTA.H0078R.())
  FREE PACKAGE(PHPS53.H0078R.())
  FREE PACKAGE(PHPSPTA.H0081R.())
  FREE PACKAGE(PHPS53.H0081R.())
  FREE PACKAGE(PHPSPTA.H0080R.())
  FREE PACKAGE(PHPS53.H0080R.())
  FREE PACKAGE(PHPSPTA.H0082R.())
  FREE PACKAGE(PHPS53.H0082R.())
  FREE PACKAGE(PHPSPTA.H0083R.())
  FREE PACKAGE(PHPS53.H0083R.())
  FREE PACKAGE(PHPSPTA.H0084R.())
  FREE PACKAGE(PHPS53.H0084R.())
  FREE PACKAGE(PHPSPTA.H0085R.())
  FREE PACKAGE(PHPS53.H0085R.())
  FREE PACKAGE(KS.YKS0802.(19970207112844S101702A061561AYKS0802))
  FREE PACKAGE(YY.YYFIKU1.(19970207135639S101702Z295237AYYFIKU1))
  FREE PACKAGE(YY.YYFIKU1.(19970207162252S101702Z295237AYYFIKU1))
  FREE PACKAGE(PT.YPTBAK.(19970202144825S101702Z294216AYPTBAK))
  FREE PACKAGE(PT.YPTBER.(19970202144632S101702Z294215AYPTBER))
  FREE PACKAGE(NTA1P.BC0003.())
  FREE PACKAGE(NTA1P.BC0008.(CRMB000170))
  FREE PACKAGE(NTA1P.BC0009.(CRMB000170))
  FREE PACKAGE(YY.YYFIKU1.(19970203155055S101702Z294410AYYFIKU1))
  FREE PACKAGE(YY.YYFIKU1.(19970203160358S101702Z294410AYYFIKU1))
  FREE PACKAGE(YY.YYFIKU1.(19970204094815S101702Z294522AYYFIKU1))
  FREE PACKAGE(NTA1P.BC0011.(CRMB000170))
  FREE PACKAGE(NTA1P.BC0007.(CRMB000170))
  FREE PACKAGE(YY.YYFIKU1.(19970204170805S101702Z294522AYYFIKU1))
  FREE PACKAGE(KD.KD8030.(19970212131949S101702Z295927AKD8030))
  FREE PACKAGE(KD.KD8512.(19970212075517S101702Z295814AKD8512))
  FREE PACKAGE(KD.KD8512.(19970212101134S101702Z295814AKD8512))
  FREE PACKAGE(YY.YYFIKU1.(19970213184955S101702A061650AYYFIKU1))
  FREE PACKAGE(KS.YKSAUFT.(19970213141858S101702A061515AYKSAUFT))
  FREE PACKAGE(VT.YVT0731.(19970213150302S101702A061735AYVT0731))
  FREE PACKAGE(YY.YYFIKU1.(19970211103926S101702Z295534AYYFIKU1))
  FREE PACKAGE(KD.KD8512.(19970211174525S101702Z295758AKD8512))
  FREE PACKAGE(PT.YPTBAK.(19970211152131S101702Z295652AYPTBAK))
  FREE PACKAGE(PHPSPTA.HMCECRC.())
  FREE PACKAGE(PHPS53.HMCECRC.())
  FREE PACKAGE(PHPSPTA.HMCECR2.())
  FREE PACKAGE(PHPS53.HMCECR2.())
  FREE PACKAGE(PHPSPTA.HMCECR4.())
  FREE PACKAGE(PHPS53.HMCECR4.())
  FREE PACKAGE(RK.RK2420.(19970220131051S101702A061871ARK2420))
  FREE PACKAGE(RK.RK2410.(19970220131049S101702A061871ARK2410))
  FREE PACKAGE(YY.YYFIKU1.(19970214141457S101702A061650AYYFIKU1))
  FREE PACKAGE(RE.RE7580.(19970214105944S101702A061587ARE7580))
  FREE PACKAGE(RE.RE7580.(19970214112718S101702A061587ARE7580))
  FREE PACKAGE(RT.RE7580.(19970214112718S101702A061587ARE7580))
  FREE PACKAGE(WK.YWKLUBO.(19970214111257S101702M000716AYWKLUBO))
  FREE PACKAGE(BF.YBF530C.(19970214113528S101702M000716AYBF530C))
  FREE PACKAGE(PHPSPTA.HMCRCR4.())
  FREE PACKAGE(PHPS53.HMCRCR4.())
  FREE PACKAGE(PHPSPTA.HMCRCR2.())
  FREE PACKAGE(PHPS53.HMCRCR2.())
  FREE PACKAGE(PHPSPTA.HMCRCR5.())
  FREE PACKAGE(PHPS53.HMCRCR5.())
  FREE PACKAGE(PHPSPTA.HMCRCRC.())
  FREE PACKAGE(PHPS53.HMCRCRC.())
  FREE PACKAGE(PUPG53.HMCCNVK.())
  FREE PACKAGE(PHPSPTA.H1113X.())
  FREE PACKAGE(PHPS53.H1113X.())
  FREE PACKAGE(YY.YYWBMOE.(19970220151213S101702A061848AYYWBMOE))
  FREE PACKAGE(PT.YPTBZAC.(19970301164109S101702Z298905AYPTBZAC))
  FREE PACKAGE(PT.YPTBER.(19970301164107S101702Z298905AYPTBER))
  FREE PACKAGE(PT.YPTBAK.(19970301164109S101702Z298905AYPTBAK))
  FREE PACKAGE(OE.OE8730.(19970619135856S101702A064828AOE8730))
  FREE PACKAGE(VP.YVP7403.(19970619140749S101702A064792AYVP7403))
  FREE PACKAGE(RR.RR7110.(19970619140751S101702A064773ARR7110))
  FREE PACKAGE(BP.YBPCRM.(19970619134703S101702A064764AYBPCRM))
  FREE PACKAGE(CD.KD0600.(19970619134842S101702A064764AKD0600))
  FREE PACKAGE(KD.KD0600.(19970619134842S101702A064764AKD0600))
  FREE PACKAGE(KD.KD0620.(19970619134843S101702A064764AKD0620))
  FREE PACKAGE(BF.YBF530C.(19970619135415S101702A064827AYBF530C))
  FREE PACKAGE(BG.YBG0533.(19970619145541S101702A064697AYBG0533))
  FREE PACKAGE(RR.RR7110.(19970620091818S101702Z317432ARR7110))
  FREE PACKAGE(PHPSPTA.HMCRRE5.())
  FREE PACKAGE(PHPS53.HMCRRE5.())
  FREE PACKAGE(PT.YPTBZAC.(19970626132432S101702A064909AYPTBZAC))
  FREE PACKAGE(PT.YPTBAK.(19970626132441S101702A064909AYPTBAK))
  FREE PACKAGE(PT.PT8660.(19970626132652S101702A064909APT8660))
  FREE PACKAGE(PT.PT8640.(19970626132656S101702A064909APT8640))
  FREE PACKAGE(WK.YWKLUBO.(19970702102459S101702Z319251AYWKLUBO))
  FREE PACKAGE(PT.YPTBAK.(19970702114347S101702Z319299AYPTBAK))
  FREE PACKAGE(PT.YPTBER.(19970702114345S101702Z319299AYPTBER))
  FREE PACKAGE(PT.YPTBZAC.(19970702114346S101702Z319299AYPTBZAC))
  FREE PACKAGE(EV.YEVSICH.(19970703125234S101702A064768AYEVSICH))
  FREE PACKAGE(SX.YSX5405.(19970703131040S101702M000806AYSX5405))
  FREE PACKAGE(RR.RR7110.(19970703133159S101702A064977ARR7110))
  FREE PACKAGE(PHPSPTA.H1071X.())
  FREE PACKAGE(PHPS53.H1071X.())
  FREE PACKAGE(SE.YSE0301.(19970710124842S101702A065149AYSE0301))
  FREE PACKAGE(SE.YSE0319.(19970710124845S101702A065149AYSE0319))
  FREE PACKAGE(SE.YSE0316.(19970710124842S101702A065149AYSE0316))
  FREE PACKAGE(SE.YSE0311.(19970710124837S101702A065149AYSE0311))
  FREE PACKAGE(SE.YSE0324.(19970710124850S101702A065149AYSE0324))
  FREE PACKAGE(SE.YSE0322.(19970710124848S101702A065149AYSE0322))
  FREE PACKAGE(SE.YSE0321.(19970710124847S101702A065149AYSE0321))
  FREE PACKAGE(SE.YSE0312.(19970710124838S101702A065149AYSE0312))
  FREE PACKAGE(SE.YSE0313.(19970710124839S101702A065149AYSE0313))
  FREE PACKAGE(SE.YSE0317.(19970710124843S101702A065149AYSE0317))
  FREE PACKAGE(SE.YSE0318.(19970710124844S101702A065149AYSE0318))
  FREE PACKAGE(SE.YSE0315.(19970710124841S101702A065149AYSE0315))
  FREE PACKAGE(SE.YSE0323.(19970710124849S101702A065149AYSE0323))
  FREE PACKAGE(SE.YSE0320.(19970710124845S101702A065149AYSE0320))
  FREE PACKAGE(SE.YSE0314.(19970710124840S101702A065149AYSE0314))
  FREE PACKAGE(SE.YSE0310.(19970710124852S101702A065149AYSE0310))
  FREE PACKAGE(YY.YYAKDAT.(19970710142418S101702M000721AYYAKDAT))
  FREE PACKAGE(YY.YYFIKUR.(19970710142449S101702M000721AYYFIKUR))
  FREE PACKAGE(WK.YWKLUBO.(19970710141830S101702M000721AYWKLUBO))
  FREE PACKAGE(PT.YPTBZAC.(19970710143026S101702A065152AYPTBZAC))
  FREE PACKAGE(PT.YPTBAK.(19970710143049S101702A065152AYPTBAK))
  FREE PACKAGE(PT.YPTBER.(19970710143019S101702A065152AYPTBER))
  FREE PACKAGE(NK.NK5310.(19970710143127S101702A065189ANK5310))
  FREE PACKAGE(AV.AV8780.(19970710145440S101702M000721AAV8780))
  FREE PACKAGE(WF.WF8010.(19970717145832S101702A065379AWF8010))
  FREE PACKAGE(VP.YVP7402.(19970416164056S101702Z306635AYVP7402))
  FREE PACKAGE(VP.YVP7403.(19970416164057S101702Z306635AYVP7403))
  FREE PACKAGE(VP.YVP7401.(19970416164056S101702Z306635AYVP7401))
  FREE PACKAGE(RR.RR7190.(19970417125627S101702A063110ARR7190))
  FREE PACKAGE(RR.RR7120.(19970417125620S101702A063110ARR7120))
  FREE PACKAGE(RR.RR7130.(19970417125624S101702A063110ARR7130))
  FREE PACKAGE(RR.RR7150.(19970417125625S101702A063110ARR7150))
  FREE PACKAGE(RR.RR7410.(19970417125638S101702A063110ARR7410))
  FREE PACKAGE(ED.YED0120.(19970417134223S101702A063129AYED0120))
  FREE PACKAGE(CI.YCI009A.(19970417134327S101702A063176AYCI009A))
  FREE PACKAGE(CI.YCI009.(19970417134326S101702A063176AYCI009))
  FREE PACKAGE(ED.YED0120.(19970417141749S101702A063129AYED0120))
  FREE PACKAGE(CI.YCI009A.(19970417142225S101702A063176AYCI009A))
  FREE PACKAGE(CI.YCI009.(19970417142223S101702A063176AYCI009))
  FREE PACKAGE(LB.YLB0115.(19970417145740S101702M000718AYLB0115))
  FREE PACKAGE(YX.YXBF222.(19970417150642S101702M000718AYXBF222))
  FREE PACKAGE(CI.YCI009.(19970417145207S101702A063176AYCI009))
  FREE PACKAGE(CI.YCI009A.(19970417145208S101702A063176AYCI009A))
  FREE PACKAGE(BF.YBF530A.(19970417151313S101702M000718AYBF530A))
  FREE PACKAGE(BF.YBF530C.(19970417152008S101702M000718AYBF530C))
  FREE PACKAGE(BG.YBG0533.(19970417152106S101702M000718AYBG0533))
  FREE PACKAGE(WK.YWKLUBO.(19970417150052S101702M000718AYWKLUBO))
  FREE PACKAGE(BF.BF7155.(19970418123528S101702Z306908ABF7155))
  FREE PACKAGE(VP.YVP7401.(19970416100659S101702Z306532AYVP7401))
  FREE PACKAGE(FC.FC0030.(19970420133742S101702Z307085AFC0030))
  FREE PACKAGE(RP.RP9010.(19970422184816S101702A063443ARP9010))
  FREE PACKAGE(PT.YPTBER.(19970430162531S101702Z309430AYPTBER))
  FREE PACKAGE(PT.YPTBZAC.(19970430162532S101702Z309430AYPTBZAC))
  FREE PACKAGE(PT.YPTBAK.(19970430162533S101702Z309430AYPTBAK))
  FREE PACKAGE(PT.PT8640.(19970501112819S101702Z309494APT8640))
  FREE PACKAGE(PHPSPTA.GLXSEER.())
  FREE PACKAGE(PHPS53.GLXSEER.())
  FREE PACKAGE(KS.YKS5553.(19970507131535S101702A063114AYKS5553))
  FREE PACKAGE(PT.PT8660.(19970501155240S101702Z309514APT8660))
  FREE PACKAGE(KS.YKS0806.(19970520152633S101702A064036AYKS0806))
  FREE PACKAGE(KS.YKS0802.(19970520152637S101702A064036AYKS0802))
  FREE PACKAGE(KS.YKS0802.(19970515130326S101702A063870AYKS0802))
  FREE PACKAGE(RR.RR7410.(19970515123231S101702A063836ARR7410))
  FREE PACKAGE(KS.YKS0806.(19970515130321S101702A063870AYKS0806))
  FREE PACKAGE(WF.WF8010.(19970515140836S101702A063893AWF8010))
  FREE PACKAGE(YY.YYDAISM.(19970515152456S101702M000719AYYDAISM))
  FREE PACKAGE(WK.YWKLUBO.(19970515152437S101702M000719AYWKLUBO))
  FREE PACKAGE(WF.WF8010.(19970515162454S101702A063893AWF8010))
  FREE PACKAGE(VP.YVP7403.(19970516154446S101702A064012AYVP7403))
  FREE PACKAGE(VP.YVP7402.(19970516154445S101702A064012AYVP7402))
  FREE PACKAGE(VP.YVP7401.(19970516154226S101702A064012AYVP7401))
  FREE PACKAGE(SM.SMUPDAT2.())
  FREE PACKAGE(YY.YYDAISM.(19970526154815S101702Z312955AYYDAISM))
  FREE PACKAGE(PHPSPTA.GCSTKCL.())
  FREE PACKAGE(PHPS53.GCSTKCL.())
  FREE PACKAGE(OE.YOERFT7.(19970522160854S101702A064061AYOERFT7))
  FREE PACKAGE(WK.YWK019A.(19970522081337S101702Z312321AYWK019A))
  FREE PACKAGE(OE.YOERFT7.(19970523122650S101702A064061AYOERFT7))
  FREE PACKAGE(OE.YOERFT7.(19970523134012S101702A064061AYOERFT7))
  FREE PACKAGE(OE.YOERFT7.(19970523141454S101702A064126AYOERFT7))
  FREE PACKAGE(OE.YOERFT7.(19970523145200S101702A064126AYOERFT7))
  FREE PACKAGE(OE.YOERFT7.(19970523143128S101702A064126AYOERFT7))
  FREE PACKAGE(OE.YOERFT7.(19970523154739S101702A064126AYOERFT7))
  FREE PACKAGE(WK.YWK019A.(19970529142348S101702M000773AYWK019A))
  FREE PACKAGE(WK.YWKLUBO.(19970529142336S101702M000773AYWKLUBO))
  FREE PACKAGE(BF.YBF530C.(19970529145110S101702M000773AYBF530C))
  FREE PACKAGE(PT.PT8640.(19970530134806S101702Z313782APT8640))
  FREE PACKAGE(PT.PT8660.(19970530135311S101702Z313785APT8660))
  FREE PACKAGE(PT.YPTBER.(19970530134435S101702Z313781AYPTBER))
  FREE PACKAGE(PT.YPTBAK.(19970530134436S101702Z313781AYPTBAK))
  FREE PACKAGE(PT.YPTBZAC.(19970530134435S101702Z313781AYPTBZAC))
  FREE PACKAGE(VP.YVP7403.(19970606120106S101702Z315108AYVP7403))
  FREE PACKAGE(SA.YSAL011.(19970606151531S101702A064474AYSAL011))
  FREE PACKAGE(SA.YSAL010.(19970606151531S101702A064474AYSAL010))
  FREE PACKAGE(PHPSPTA.GRSCL.())
  FREE PACKAGE(PHPS53.GRSCL.())
  FREE PACKAGE(PI.PI5330.(19970602171837S101702A064346API5330))
  FREE PACKAGE(ED.YED0034.(19970605133549S101702A064376AYED0034))
  FREE PACKAGE(ED.YED0120.(19970605133550S101702A064376AYED0120))
  FREE PACKAGE(SA.YSAL010.(19970605140228S101702M000795AYSAL010))
  FREE PACKAGE(SA.YSAL011.(19970605140229S101702M000795AYSAL011))
  FREE PACKAGE(KS.YKS5553.(19970605140318S101702A063951AYKS5553))
  FREE PACKAGE(OE.OE8730.(19970605144943S101702A064421AOE8730))
  FREE PACKAGE(KD.KD0620.(19970605170251S101702A064138AKD0620))
  FREE PACKAGE(PHPSPTA.HMCEREP.())
  FREE PACKAGE(PHPS53.HMCEREP.())
  FREE PACKAGE(PHPSPTA.HMCERE5.())
  FREE PACKAGE(PHPS53.HMCERE5.())
  FREE PACKAGE(PHPSPTA.HMCERE2.())
  FREE PACKAGE(PHPS53.HMCERE2.())
  FREE PACKAGE(PHPSPTA.HMCERE4.())
  FREE PACKAGE(PHPS53.HMCERE4.())
  FREE PACKAGE(PHPSPTA.HMCRREP.())
  FREE PACKAGE(PHPS53.HMCRREP.())
  FREE PACKAGE(PHPSPTA.HMCRRE2.())
  FREE PACKAGE(PHPS53.HMCRRE2.())
  FREE PACKAGE(PHPSPTA.HMCRRE4.())
  FREE PACKAGE(PHPS53.HMCRRE4.())
  FREE PACKAGE(BG.YBG0533.(19970613143606S101702Z316345AYBG0533))
  FREE PACKAGE(VP.VP7411.(19970610075226S101702Z315459AVP7411))
  FREE PACKAGE(VP.VP7411.(19970610162936S101702Z315459AVP7411))
  FREE PACKAGE(VP.VP7411.(19970610101931S101702Z315459AVP7411))
  FREE PACKAGE(VT.YVT0804.(19970611153558S101702A064611AYVT0804))
  FREE PACKAGE(WK.YWKLUBO.(19970612164801S101702M000720AYWKLUBO))
  FREE PACKAGE(SM.SMDEF002.())
  FREE PACKAGE(SX.YSX8105.(19970612134213S101702A064573AYSX8105))
  FREE PACKAGE(YY.YYFIBPR.(19970930091036S101702Z336218AYYFIBPR))
  FREE PACKAGE(YY.YYFIKUR.(19970930130759S101702Z336339AYYFIKUR))
  FREE PACKAGE(YY.YYFIBPR.(19970930131559S101702Z336218AYYFIBPR))
  FREE PACKAGE(ED.YED0034.(19970925142356S101702A067006AYED0034))
  FREE PACKAGE(LB.YLB0116.(19970925104749S101702Z335520AYLB0116))
  FREE PACKAGE(CD.CD8070.(19970925133611S101702A066943ACD8070))
  FREE PACKAGE(NK.YNKSIKO.(19970925134637S101702A067064AYNKSIKO))
  FREE PACKAGE(PT.YPTBZAC.(19971006103230S101702Z337756AYPTBZAC))
  FREE PACKAGE(PT.YPTBER.(19971006103226S101702Z337756AYPTBER))
  FREE PACKAGE(PT.YPTBAK.(19971006103232S101702Z337756AYPTBAK))
  FREE PACKAGE(RP.RP5100.(19971001203824S101702Z336777ARP5100))
  FREE PACKAGE(KS.YKS5553.(19971002124933S101702A067136AYKS5553))
  FREE PACKAGE(KS.YKS5551.(19971002124932S101702A067136AYKS5551))
  FREE PACKAGE(SX.YSX5405.(19971002130333S101702A067187AYSX5405))
  FREE PACKAGE(BF.BF5230.(19971002134524S101702A067141ABF5230))
  FREE PACKAGE(BF.BF5210.(19971002134504S101702A067141ABF5210))
  FREE PACKAGE(BF.BF5220.(19971002134518S101702A067141ABF5220))
  FREE PACKAGE(YY.YYFIBPR.(19971003141148S101702Z337398AYYFIBPR))
  FREE PACKAGE(NK.NK8830.(19971003162239S101702Z337521ANK8830))
  FREE PACKAGE(RE.RE9930.(19971008084159S101702Z338162ARE9930))
  FREE PACKAGE(SE.YSE0315.(19971008172603S101702A067384AYSE0315))
  FREE PACKAGE(SE.YSE0314.(19971008172558S101702A067384AYSE0314))
  FREE PACKAGE(SE.YSE0320.(19971008172534S101702A067384AYSE0320))
  FREE PACKAGE(SE.YSE0324.(19971008172537S101702A067384AYSE0324))
  FREE PACKAGE(SE.YSE0317.(19971008172531S101702A067384AYSE0317))
  FREE PACKAGE(SE.YSE0311.(19971008172549S101702A067384AYSE0311))
  FREE PACKAGE(SE.YSE0310.(19971008172544S101702A067384AYSE0310))
  FREE PACKAGE(NF.NF8800.(19971009132420S101702A067383ANF8800))
  FREE PACKAGE(NK.NK8830.(19971009142704S101702A067321ANK8830))
  FREE PACKAGE(NK.NK7200.(19971010103011S101702Z338761ANK7200))
  FREE PACKAGE(VT.YVT0805.(19971010164616S101702A067424AYVT0805))
  FREE PACKAGE(VT.YVT0801.(19971010164615S101702A067424AYVT0801))
  FREE PACKAGE(YY.YYFIBPR.(19971020081228S101702Z340073AYYFIBPR))
  FREE PACKAGE(RT.RT8412.(19971016172138S101702A067105ART8412))
  FREE PACKAGE(NK.NK7200.(19971016135112S101702M000847ANK7200))
  FREE PACKAGE(OE.OE8730.(19971016135122S101702M000847AOE8730))
  FREE PACKAGE(OE.OE8740.(19971016135123S101702M000847AOE8740))
  FREE PACKAGE(NK.NK5010.(19971016135110S101702M000847ANK5010))
  FREE PACKAGE(LB.YLB0116.(19971017154949S101702M000724AYLB0116))
  FREE PACKAGE(YY.YYDAISM.(19971017155755S101702M000724AYYDAISM))
  FREE PACKAGE(YY.YYFIKUR.(19971017155855S101702M000724AYYFIKUR))
  FREE PACKAGE(WK.YWK019A.(19971017155338S101702M000724AYWK019A))
  FREE PACKAGE(YY.YYFIBPR.(19971017155842S101702M000724AYYFIBPR))
  FREE PACKAGE(YY.YYFISER.(19971017155900S101702M000724AYYFISER))
  FREE PACKAGE(WK.YWKLUBO.(19971017155255S101702M000724AYWKLUBO))
  FREE PACKAGE(WK.WK7160.(19971017165350S101702M000724AWK7160))
  FREE PACKAGE(YY.YYCXCR.(19971023131100S101702A067654AYYCXCR))
  FREE PACKAGE(YY.YYFIBPR.(19971023134013S101702A067763AYYFIBPR))
  FREE PACKAGE(WB.WB7580.(19971023144206S101702A067639AWB7580))
  FREE PACKAGE(PT.YPTBER.(19971023145207S101702A067699AYPTBER))
  FREE PACKAGE(PT.YPTBZAC.(19971023145208S101702A067699AYPTBZAC))
  FREE PACKAGE(PT.YPTBAK.(19971023145209S101702A067699AYPTBAK))
  FREE PACKAGE(YY.YYFIKUR.(19971024070255S101702Z341447AYYFIKUR))
  FREE PACKAGE(YY.YYFIKUR.(19971027121114S101702Z341787AYYFIKUR))
  FREE PACKAGE(YY.YYFIBPR.(19971028161241S101702A067870AYYFIBPR))
  FREE PACKAGE(YY.YYFIBPR.(19971029135718S101702Z342287AYYFIBPR))
  FREE PACKAGE(YY.YYFIKUR.(19971029135652S101702Z342286AYYFIKUR))
  FREE PACKAGE(YY.YYFIBPR.(19971029152110S101702A067922AYYFIBPR))
  FREE PACKAGE(KS.YKS0806.(19970730130512S101702A065612AYKS0806))
  FREE PACKAGE(KS.YKS0802.(19970730130516S101702A065612AYKS0802))
  FREE PACKAGE(WK.YWKLUBO.(19970730125913S101702Z325019AYWKLUBO))
  FREE PACKAGE(PHPSPTA.GRRBA04.())
  FREE PACKAGE(PHPS53.GRRBA04.())
  FREE PACKAGE(NK.YNKSIKO.(19970731133829S101702A065623AYNKSIKO))
  FREE PACKAGE(PHPSPTA.GRSEED4.())
  FREE PACKAGE(PHPS53.GRSEED4.())
  FREE PACKAGE(WK.YWKLUBO.(19970806151636S101702Z325846AYWKLUBO))
  FREE PACKAGE(VT.YVT0731.(19970807131116S101702A065672AYVT0731))
  FREE PACKAGE(KS.KS0720.(19970807131518S101702A065672AKS0720))
  FREE PACKAGE(NF.NF5890.(19970807134910S101702A065780ANF5890))
  FREE PACKAGE(NK.YNKSIKO.(19970807132139S101702A065737AYNKSIKO))
  FREE PACKAGE(PT.YPTBAK.(19970807142356S101702A065756AYPTBAK))
  FREE PACKAGE(RR.YRRBLR2.(19970807161543S101702A065814AYRRBLR2))
  FREE PACKAGE(RR.YRRBLR2.(19970807161543CGS101702A065814AYRRBLR2))
  FREE PACKAGE(NS.NS7340.(19970815165414S101702A066076ANS7340))
  FREE PACKAGE(YY.EV0520.(19970815165403S101702A066076AEV0520))
  FREE PACKAGE(VT.YVT0731.(19970811170742S101702A065857AYVT0731))
  FREE PACKAGE(YY.YYFIBPR.(19970814140833S101702M000800AYYFIBPR))
  FREE PACKAGE(NK.YNKSIKO.(19970814133711S101702A066053AYNKSIKO))
  FREE PACKAGE(RR.RR8410.(19970814203017S101702A065878ARR8410))
  FREE PACKAGE(RR.RR8100.(19970814203006S101702A065878ARR8100))
  FREE PACKAGE(RR.RR8220.(19970814203010S101702A065878ARR8220))
  FREE PACKAGE(ED.YED0034.(19970814202936S101702A065906AYED0034))
  FREE PACKAGE(NK.NK5190.(19970814211257S101702A065977ANK5190))
  FREE PACKAGE(NK.NK8160.(19970814211337S101702A065977ANK8160))
  FREE PACKAGE(NK.NK5110.(19970814211251S101702A065977ANK5110))
  FREE PACKAGE(KD.KD8010.(19970814211634S101702A065956AKD8010))
  FREE PACKAGE(NK.NK7910.(19970814211302S101702A065977ANK7910))
  FREE PACKAGE(ME.ME0300.(19970814211635S101702A065803AME0300))
  FREE PACKAGE(KD.KD8030.(19970814211641S101702A065956AKD8030))
  FREE PACKAGE(KD.KD8014.(19970814211637S101702A065956AKD8014))
  FREE PACKAGE(KD.KD8015.(19970814211640S101702A065956AKD8015))
  FREE PACKAGE(NK.NK8090.(19970814211329S101702A065977ANK8090))
  FREE PACKAGE(NK.NK8020.(19970814211307S101702A065977ANK8020))
  FREE PACKAGE(YX.YXBF222.(19970814212651S101702A065276AYXBF222))
  FREE PACKAGE(NK.NK8010.(19970814211305S101702A065977ANK8010))
  FREE PACKAGE(EX.YEXERG.(19970814141321S101702M000800AYEXERG))
  FREE PACKAGE(EX.YEXERG.(19970814141321CGS101702M000800AYEXERG))
  FREE PACKAGE(SX.YSX5405.(19970814142703S101702M000819AYSX5405))
  FREE PACKAGE(VT.YVT0806.(19970814154727S101702M000820AYVT0806))
  FREE PACKAGE(VT.YVT0803.(19970814154726S101702M000820AYVT0803))
  FREE PACKAGE(VT.YVT0804.(19970814154726S101702M000820AYVT0804))
  FREE PACKAGE(VT.YVT0805.(19970814154727S101702M000820AYVT0805))
  FREE PACKAGE(VT.YVT0802.(19970814154725S101702M000820AYVT0802))
  FREE PACKAGE(KS.YKS5552.(19970814154715S101702M000820AYKS5552))
  FREE PACKAGE(KS.YKS5551.(19970814154706S101702M000820AYKS5551))
  FREE PACKAGE(VT.YVT0801.(19970814154725S101702M000820AYVT0801))
  FREE PACKAGE(KS.YKS5553.(19970814154722S101702M000820AYKS5553))
  FREE PACKAGE(SX.YSX5405.(19970814160458S101702M000819AYSX5405))
  FREE PACKAGE(YY.YYFIKUR.(19970814173534S101702M000722AYYFIKUR))
  FREE PACKAGE(WK.YWKLUBO.(19970814173305S101702M000722AYWKLUBO))
  FREE PACKAGE(YY.YYCXCR.(19970814175447S101702M000722AYYCXCR))
  FREE PACKAGE(NK.NK8190.(19970822134421S101702Z329315ANK8190))
  FREE PACKAGE(YY.YYCXCR.(19970822161513S101702A066301AYYCXCR))
  FREE PACKAGE(NK.NK8190.(19970822173219S101702Z329367ANK8190))
  FREE PACKAGE(YY.YYFIBPR.(19970818091027S101702Z327662AYYFIBPR))
  FREE PACKAGE(SA.YSAOBP.(19970819151336S101702Z328496AYSAOBP))
  FREE PACKAGE(SA.YSAOBP.(19970819152851S101702Z328527AYSAOBP))
  FREE PACKAGE(SA.YSAOBP.(19970819163654S101702Z328550AYSAOBP))
  FREE PACKAGE(NTA1P.BC0010.(CRMB000254))
  FREE PACKAGE(PI.PI5330.(19970821145248S101702A066132API5330))
  FREE PACKAGE(PT.YPTBAK.(19970821145703S101702A066147AYPTBAK))
  FREE PACKAGE(SA.YSAOBP.(19970821140528S101702A066252AYSAOBP))
  FREE PACKAGE(YY.YYFIKUR.(19970828135427S101702Z330384AYYFIKUR))
  FREE PACKAGE(OE.YOERFT7.(19970828141213S101702A066323AYOERFT7))
  FREE PACKAGE(OE.OE8740.(19970828141800S101702A066323AOE8740))
  FREE PACKAGE(YY.YYFIKUR.(19970828163505S101702Z330384AYYFIKUR))
  FREE PACKAGE(YY.YYFIBPR.(19970825143650S101702Z329469AYYFIBPR))
  FREE PACKAGE(YY.YYFIBPR.(19970825094010S101702Z329469AYYFIBPR))
  FREE PACKAGE(YY.YYFIKUR.(19970827145220S101702Z330075AYYFIKUR))
  FREE PACKAGE(YY.YYFIKUR.(19970903152517S101702Z331381AYYFIKUR))
  FREE PACKAGE(NK.YNKSIKO.(19970904132615S101702A066558AYNKSIKO))
  FREE PACKAGE(YY.YYFISER.(19970904132828S101702A066559AYYFISER))
  FREE PACKAGE(YY.YYFIBPR.(19970904132827S101702A066559AYYFIBPR))
  FREE PACKAGE(NK.YNKSIKO.(19970904151013S101702A066558AYNKSIKO))
  FREE PACKAGE(YY.YYFIKUR.(19970904113540S101702Z331512AYYFIKUR))
  FREE PACKAGE(YY.YYFIBPR.(19970910144408S101702Z332672AYYFIBPR))
  FREE PACKAGE(EB.EB9000.(19970911123324S101702A066672AEB9000))
  FREE PACKAGE(NK.YNKSIKO.(19970911124743S101702A066744AYNKSIKO))
  FREE PACKAGE(NK.NK8300.(19970911124909S101702A066744ANK8300))
  FREE PACKAGE(BF.BF5210.(19970911132316S101702A066068ABF5210))
  FREE PACKAGE(BF.BF5220.(19970911132317S101702A066068ABF5220))
  FREE PACKAGE(WK.YWKLUBO.(19970911135336S101702M000723AYWKLUBO))
  FREE PACKAGE(YY.YYFIBPR.(19970911135748S101702M000723AYYFIBPR))
  FREE PACKAGE(YY.YYFIBPR.(19970911135707S101702Z332865AYYFIBPR))
  FREE PACKAGE(YY.YYFIKUR.(19970911135753S101702M000723AYYFIKUR))
  FREE PACKAGE(PT.PT5440.(19970911145557S101702M000825APT5440))
  FREE PACKAGE(PT.PT5510.(19970911145559S101702M000825APT5510))
  FREE PACKAGE(PI.PI5330.(19970911145900S101702M000825API5330))
  FREE PACKAGE(YY.YYFIKUR.(19970911143522S101702Z332879AYYFIKUR))
  FREE PACKAGE(YY.YYDEPAY.(19970911143853S101702A066758AYYDEPAY))
  FREE PACKAGE(YY.YYFIKUR.(19970911152454S101702Z332879AYYFIKUR))
  FREE PACKAGE(YY.YYFIKUR.(19970908141644S101702Z332003AYYFIKUR))
  FREE PACKAGE(YY.YYFIKUR.(19970908142100S101702Z332003AYYFIKUR))
  FREE PACKAGE(PHPSPTA.HMPFCMP.())
  FREE PACKAGE(PHPS53.HMPFCMP.())
  FREE PACKAGE(YY.YYFIBPR.(19970908094638S101702Z331899AYYFIBPR))
  FREE PACKAGE(PHPSPTA.HMCALDB.())
  FREE PACKAGE(PHPS53.HMCALDB.())
  FREE PACKAGE(YY.YYFIBPR.(19970909124923S101702Z332260AYYFIBPR))
  FREE PACKAGE(YY.YYFIBPR.(19970916150918S101702Z333785AYYFIBPR))
  FREE PACKAGE(YY.YYFIBPR.(19970916155634S101702Z333785AYYFIBPR))
  FREE PACKAGE(NK.NK5160.(19970918124543S101702A066889ANK5160))
  FREE PACKAGE(NK.NK5140.(19970918124542S101702A066889ANK5140))
  FREE PACKAGE(PT.YPTBZAC.(19970918132511S101702A066834AYPTBZAC))
  FREE PACKAGE(PT.YPTBER.(19970918132507S101702A066834AYPTBER))
  FREE PACKAGE(PT.YPTBAK.(19970918132513S101702A066834AYPTBAK))
  FREE PACKAGE(VT.YVT0731.(19970912181134S101702A066795AYVT0731))
  FREE PACKAGE(WK.YWK019A.(19970915071921S101702Z333341AYWK019A))
  FREE PACKAGE(KS.YKS0806.(19970922185347S101702A066941AYKS0806))
  FREE PACKAGE(KS.YKS0802.(19970922185351S101702A066941AYKS0802))
  FREE PACKAGE(YY.YYFIBPR.(19970918150017S101702Z334213AYYFIBPR))
  FREE PACKAGE(PT.YPTBAK.(19980109095256S101702Z354315AYPTBAK))
  FREE PACKAGE(PT.YPTBER.(19980109095255S101702Z354315AYPTBER))
  FREE PACKAGE(RR.RR8410.(19980109174945S101702Z354478ARR8410))
  FREE PACKAGE(RP.RP5100.(19980105165723S101702A069490ARP5100))
  FREE PACKAGE(RP.RP7960.(19980105165721S101702A069490ARP7960))
  FREE PACKAGE(YY.YYFIBPR.(19980107151625S101702Z353891AYYFIBPR))
  FREE PACKAGE(EX.YEXERG.(19980108153340S101702M000886AYEXERG))
  FREE PACKAGE(EX.YEXERG.(19980108153340CGS101702M000886AYEXERG))
  FREE PACKAGE(EX.EX7010.(19980108153804S101702M000886AEX7010))
  FREE PACKAGE(KB.KB2020.(19980108153831S101702M000886AKB2020))
  FREE PACKAGE(RR.RR0240.(19980108153902S101702M000886ARR0240))
  FREE PACKAGE(RR.RR7260.(19980108153913S101702M000886ARR7260))
  FREE PACKAGE(RR.RR0180.(19980108153856S101702M000886ARR0180))
  FREE PACKAGE(RR.RR7240.(19980108153908S101702M000886ARR7240))
  FREE PACKAGE(EC.YECAVKY.(19980115174842S101702M000856AYECAVKY))
  FREE PACKAGE(ED.YED0120.(19980115174927S101702M000856AYED0120))
  FREE PACKAGE(ED.YED0034.(19980115174915S101702M000856AYED0034))
  FREE PACKAGE(SX.SX0750.(19980115181956S101702M000856ASX0750))
  FREE PACKAGE(NZ.NZ0600.(19980115181659S101702M000856ANZ0600))
  FREE PACKAGE(SA.YSA67S1.(19980115134658S101702M000890AYSA67S1))
  FREE PACKAGE(SA.YSAL001.(19980115134655S101702M000890AYSAL001))
  FREE PACKAGE(SA.YSAL002.(19980115134657S101702M000890AYSAL002))
  FREE PACKAGE(SA.YSAL006.(19980115134658S101702M000890AYSAL006))
  FREE PACKAGE(NK.NK5200.(19980115162118S101702A069682ANK5200))
  FREE PACKAGE(NK.NK8140.(19980115162120S101702A069682ANK8140))
  FREE PACKAGE(NK.NK5160.(19980115162116S101702A069682ANK5160))
  FREE PACKAGE(NK.NK5190.(19980115162118S101702A069682ANK5190))
  FREE PACKAGE(NK.NK8120.(19980115162120S101702A069682ANK8120))
  FREE PACKAGE(NK.NK5040.(19980115162123S101702A069682ANK5040))
  FREE PACKAGE(NK.NK5110.(19980115162114S101702A069682ANK5110))
  FREE PACKAGE(NK.NK5050.(19980115162124S101702A069682ANK5050))
  FREE PACKAGE(NK.NK5180.(19980115162117S101702A069682ANK5180))
  FREE PACKAGE(NK.NK5120.(19980115162114S101702A069682ANK5120))
  FREE PACKAGE(NK.NK5140.(19980115162115S101702A069682ANK5140))
  FREE PACKAGE(NK.NK8200.(19980115162121S101702A069682ANK8200))
  FREE PACKAGE(NK.NK5210.(19980115162119S101702A069682ANK5210))
  FREE PACKAGE(NK.NK5130.(19980115162115S101702A069682ANK5130))
  FREE PACKAGE(NK.NK5020.(19980115162122S101702A069682ANK5020))
  FREE PACKAGE(NK.NK5170.(19980115162116S101702A069682ANK5170))
  FREE PACKAGE(YY.YYDEPAY.(19980115174544S101702M000856AYYDEPAY))
  FREE PACKAGE(YY.YYEAISM.(19980116135025S101702M000835AYYEAISM))
  FREE PACKAGE(YY.YYFIBPR.(19980116135026S101702M000835AYYFIBPR))
  FREE PACKAGE(YY.YYDAISM.(19980116135024S101702M000835AYYDAISM))
  FREE PACKAGE(YY.YYFIKUR.(19980116135027S101702M000835AYYFIKUR))
  FREE PACKAGE(BF.YBF530A.(19980116091802S101702A069606AYBF530A))
  FREE PACKAGE(WB.YYWBBPU.(19980116193842S101702A069660AYYWBBPU))
  FREE PACKAGE(YY.YYWBBPU.(19980116193842S101702A069660AYYWBBPU))
  FREE PACKAGE(KD.KD8040.(19980122133753S101702A069908AKD8040))
  FREE PACKAGE(PT.PT8500.(19980122145053S101702A069863APT8500))
  FREE PACKAGE(WB.WB7580.(19980122145713S101702A069894AWB7580))
  FREE PACKAGE(YY.YYFIBPR.(19980122142859S101702M000889AYYFIBPR))
  FREE PACKAGE(AV.YAV0491.(19980122142900S101702M000889AYAV0491))
  FREE PACKAGE(AV.YAV0492.(19980122142900S101702M000889AYAV0492))
  FREE PACKAGE(PT.YPTBAK.(19980122150833S101702A069955AYPTBAK))
  FREE PACKAGE(PT.YPTBER.(19980122150832S101702A069955AYPTBER))
  FREE PACKAGE(AV.YAV0492.(19980120134946S101702Z356212AYAV0492))
  FREE PACKAGE(NTA1P.BC0007.(CRMB000360))
  FREE PACKAGE(NTA1P.BC0009.(CRMB000360))
  FREE PACKAGE(NTA1P.BC0003.(CRMB000360))
  FREE PACKAGE(NTA1P.BC0011.(CRMB000360))
  FREE PACKAGE(NTA1P.BC0010.(CRMB000360))
  FREE PACKAGE(KD.KD8040.(19980129132654S101702A070094AKD8040))
  FREE PACKAGE(RP.RP7960.(19980126165347S101702A070032ARP7960))
  FREE PACKAGE(NK.YNKSIKO.(19980205141607S101702A070186AYNKSIKO))
  FREE PACKAGE(CD.YCD110.(19980205134459S101702A070170AYCD110))
  FREE PACKAGE(NK.NK8210.(19980205141816S101702A070186ANK8210))
  FREE PACKAGE(YY.YYCXCR.(19980205143017S101702A070192AYYCXCR))
  FREE PACKAGE(NK.NK7300.(19971106141951S101702A068097ANK7300))
  FREE PACKAGE(KS.YKS0806.(19971106141958S101702A068104AYKS0806))
  FREE PACKAGE(SX.YSX81S1.(19971106134925S101702M000849AYSX81S1))
  FREE PACKAGE(PT.PT5440.(19971106145743S101702A067886APT5440))
  FREE PACKAGE(OE.YOERFT7.(19971106151230S101702A068068AYOERFT7))
  FREE PACKAGE(EC.YECAVKY.(19971106162740S101702A067704AYECAVKY))
  FREE PACKAGE(ED.YED0034.(19971108101340S101702Z343980AYED0034))
  FREE PACKAGE(ED.YED0034.(19971108103304S101702Z343980AYED0034))
  FREE PACKAGE(RT.RT8412.(19971105123924S101702A068100ART8412))
  FREE PACKAGE(PHPSPTA.GEXP004.())
  FREE PACKAGE(PHPS53.GEXP004.())
  FREE PACKAGE(AV.PB7100.(19971113142535S101702A068238APB7100))
  FREE PACKAGE(RR.RR7260.(19971113140418S101702A067628ARR7260))
  FREE PACKAGE(YY.YYFIBPR.(19971113142213S101702A068238AYYFIBPR))
  FREE PACKAGE(ED.YED0034.(19971113150814S101702A068155AYED0034))
  FREE PACKAGE(YY.YYFIKUR.(19971113101937CGS101702Z344648AYYFIKUR))
  FREE PACKAGE(YY.YYFIKUR.(19971113101937S101702Z344648AYYFIKUR))
  FREE PACKAGE(YY.YYFIKUR.(19971111063522S101702Z344162AYYFIKUR))
  FREE PACKAGE(YY.YYFIKUR.(19971119073725S101702Z345453AYYFIKUR))
  FREE PACKAGE(WK.YWKLUBO.(19971120155133S101702M000725AYWKLUBO))
  FREE PACKAGE(WK.WK7160.(19971120182636S101702M000725AWK7160))
  FREE PACKAGE(KD.FC5000.(19971120133503S101702A068334AFC5000))
  FREE PACKAGE(SX.YSX8105.(19971120134349S101702A068352AYSX8105))
  FREE PACKAGE(NK.NK8080.(19971120134500S101702A068428ANK8080))
  FREE PACKAGE(SA.YSA67S1.(19971120134646S101702A068355AYSA67S1))
  FREE PACKAGE(WK.YWK019A.(19971120155139S101702M000725AYWK019A))
  FREE PACKAGE(YY.YYFIBPR.(19971120155550S101702M000725AYYFIBPR))
  FREE PACKAGE(YY.YYFIKUR.(19971120155600S101702M000725AYYFIKUR))
  FREE PACKAGE(YY.YYFIKUR.(19971120155600CGS101702M000725AYYFIKUR))
  FREE PACKAGE(KD.FC5000.(19971117083808S101702Z344985AFC5000))
  FREE PACKAGE(FC.FC0030.(19971117163042S101702Z345149AFC0030))
  FREE PACKAGE(FC.FC0030.(19971117174349S101702Z345149AFC0030))
  FREE PACKAGE(YY.YYFIKUR.(19971125132146S101702Z346704AYYFIKUR))
  FREE PACKAGE(YY.YYFIKUR.(19971125132146CGS101702Z346704AYYFIKUR))
  FREE PACKAGE(YY.YYFIKUR.(19971125071800S101702Z346565AYYFIKUR))
  FREE PACKAGE(SX.YSX8105.(19971126102958S101702A068604AYSX8105))
  FREE PACKAGE(YY.YYFIKUR.(19971127133906CGS101702A068607AYYFIKUR))
  FREE PACKAGE(YY.YYFIBPR.(19971127133905S101702A068607AYYFIBPR))
  FREE PACKAGE(YY.YYFIKUR.(19971127133906S101702A068607AYYFIKUR))
  FREE PACKAGE(KD.FC5000.(19971121183017S101702Z346058AFC5000))
  FREE PACKAGE(YY.YYFIKUR.(19971124075840S101702Z346214AYYFIKUR))
  FREE PACKAGE(PI.PI9180.(19971124092916S101702Z346248API9180))
  FREE PACKAGE(PI.PI9180.(19971124114227S101702Z346248API9180))
  FREE PACKAGE(PI.PI9180.(19971124122047S101702Z346248API9180))
  FREE PACKAGE(PT.YPTBZAC.(19971127143519S101702A068552AYPTBZAC))
  FREE PACKAGE(PT.YPTBER.(19971127143518S101702A068552AYPTBER))
  FREE PACKAGE(PT.YPTBAK.(19971127143521S101702A068552AYPTBAK))
  FREE PACKAGE(NTA1P.AT0070.(CIMA000651))
  FREE PACKAGE(PT.PT5510.(19971128130923S101702Z347739APT5510))
  FREE PACKAGE(SX.YSX8105.(19971128132836S101702A068681AYSX8105))
  FREE PACKAGE(SA.YSAUEB.(19971209124732S101702A068954AYSAUEB))
  FREE PACKAGE(NK.NK8080.(19971204140627S101702A068796ANK8080))
  FREE PACKAGE(YY.YYFIKUR.(19971204165432CGS101702A068818AYYFIKUR))
  FREE PACKAGE(TEST.YYFIKUR.(19971204165432S101702A068818AYYFIKUR))
  FREE PACKAGE(YY.YYFIKUR.(19971204165432S101702A068818AYYFIKUR))
  FREE PACKAGE(PT.PT8060.(19971204163212S101702M000828APT8060))
  FREE PACKAGE(VT.YVT0805.(19971204140208S101702A068758AYVT0805))
  FREE PACKAGE(VT.YVT0804.(19971204140207S101702A068758AYVT0804))
  FREE PACKAGE(VT.YVT0801.(19971204140206S101702A068758AYVT0801))
  FREE PACKAGE(SX.SX0750.(19971204133317S101702M000869ASX0750))
  FREE PACKAGE(KS.YKSMODU.(19971216133928S101702A069161AYKSMODU))
  FREE PACKAGE(EV.YEVSICH.(19971211133042S101702A068862AYEVSICH))
  FREE PACKAGE(YY.EV0520.(19971211133228S101702A068862AEV0520))
  FREE PACKAGE(VT.YVT0623.(19971211133922S101702M000884AYVT0623))
  FREE PACKAGE(YY.YYDEPAY.(19971211134115S101702A068934AYYDEPAY))
  FREE PACKAGE(NK.NK7300.(19971211135159S101702A068963ANK7300))
  FREE PACKAGE(KS.YKSMODU.(19971211135319S101702A068968AYKSMODU))
  FREE PACKAGE(KS.YKSAUFT.(19971211135316S101702A068968AYKSAUFT))
  FREE PACKAGE(YX.YXBF224.(19971211145230S101702A068424AYXBF224))
  FREE PACKAGE(WK.YWKLUBO.(19971211152904S101702M000726AYWKLUBO))
  FREE PACKAGE(LB.YLB0115.(19971211152840S101702M000726AYLB0115))
  FREE PACKAGE(LB.YLB0113.(19971211152839S101702M000726AYLB0113))
  FREE PACKAGE(LB.YLB0116.(19971211152840S101702M000726AYLB0116))
  FREE PACKAGE(YY.YYDAISM.(19971211153706S101702M000726AYYDAISM))
  FREE PACKAGE(YY.YYFIKUR.(19971211153730S101702M000726AYYFIKUR))
  FREE PACKAGE(YY.YYFIKUR.(19971211153730CGS101702M000726AYYFIKUR))
  FREE PACKAGE(KS.YKSMODU.(19971212102013S101702Z350189AYKSMODU))
  FREE PACKAGE(VT.VT5120.(19971216174425S101702A069201AVT5120))
  FREE PACKAGE(ED.YED0034.(19971218134249S101702A069204AYED0034))
  FREE PACKAGE(NZ.NZ0600.(19971218134244S101702A069183ANZ0600))
  FREE PACKAGE(ED.YED0120.(19971218134250S101702A069204AYED0120))
  FREE PACKAGE(RR.RR7530.(19971218150113S101702A069057ARR7530))
  FREE PACKAGE(PT.PT5510.(19971218150836S101702A069263APT5510))
  FREE PACKAGE(SA.YSAL010.(19971229123211S101702A069401AYSAL010))
  FREE PACKAGE(SA.YSAL011.(19971229123211S101702A069401AYSAL011))
  FREE PACKAGE(YY.YYDEPAY.())
  FREE PACKAGE(YY.YYGE040.())
  FREE PACKAGE(VT.YVT0731.())
  FREE PACKAGE(RT.RT5410.())
  FREE PACKAGE(RT.RT5400.())
  FREE PACKAGE(RT.RT5401.())
  FREE PACKAGE(BF.BF5200.())
  FREE PACKAGE(CD.YCDGETP.())
  FREE PACKAGE(EB.EB5150.())
  FREE PACKAGE(BS.BS7630.())
  FREE PACKAGE(AC.YACM002.())
  FREE PACKAGE(BP.YBPPID.())
  FREE PACKAGE(PC.YPC0002.())
  FREE PACKAGE(DG.YDGT011.())
  FREE PACKAGE(BP.BP5110.())
  FREE PACKAGE(KS.YKSMODU.())
  FREE PACKAGE(VT.YVT0621.())
  FREE PACKAGE(BW.YBWAAGF.(19940216154925S101702A031665A))
  FREE PACKAGE(BW.YBWAXLQ.(19940216154937S101702A031665A))
  FREE PACKAGE(BW.YBWAPVZ.(19940216154932S101702A031665A))
  FREE PACKAGE(BW.YBWAPVY.(19940216154930S101702A031665A))
  FREE PACKAGE(BW.YBWAH56.(19940216154927S101702A031665A))
  FREE PACKAGE(VT.YVT0809.(19940217154709S101702A031635A))
  FREE PACKAGE(VT.YVT0806.(19940217154655S101702A031635A))
  FREE PACKAGE(VT.YVT0805.(19940217154651S101702A031635A))
  FREE PACKAGE(VT.YVT0802.(19940217154748S101702A031635A))
  FREE PACKAGE(VT.YVT0801.(19940217154745S101702A031635A))
  FREE PACKAGE(VT.YVT0804.(19940217154640S101702A031635A))
  FREE PACKAGE(VT.YVT0803.(19940217154750S101702A031635A))
  FREE PACKAGE(SX.YSXFEHL.(19940311013633S101702M000389A))
  FREE PACKAGE(SX.YSXRELK.(19940311013634S101702M000389A))
  FREE PACKAGE(KS.YKSMODU.(19940310195039S101702A032347A))
  FREE PACKAGE(CD.YCDGETJ.(19940317160328S101702A032553AYCDGETJ))
  FREE PACKAGE(KS.YKSMODU.(19940317154541S101702A032520AYKSMODU))
  FREE PACKAGE(CU.CU8320.(19940317161809S101702A032590ACU8320))
  FREE PACKAGE(SX.YSXRELK.(E))
  FREE PACKAGE(HP3.ACLQMC.())
  FREE PACKAGE(VT.YVT0802.(19940314192641S101702A032472AYVT0802))
  FREE PACKAGE(VT.YVT0801.(19940314192641S101702A032472AYVT0801))
  FREE PACKAGE(VT.YVT0806.(19940314192645S101702A032472AYVT0806))
  FREE PACKAGE(VT.YVT0809.(19940314192648S101702A032472AYVT0809))
  FREE PACKAGE(VT.YVT0805.(19940314192644S101702A032472AYVT0805))
  FREE PACKAGE(VT.YVT0803.(19940314192642S101702A032472AYVT0803))
  FREE PACKAGE(VT.YVT0804.(19940314192643S101702A032472AYVT0804))
  FREE PACKAGE(VT.YVT0801.(E))
  FREE PACKAGE(VT.YVT0802.(E))
  FREE PACKAGE(VT.YVT0804.(E))
  FREE PACKAGE(VT.YVT0806.(E))
  FREE PACKAGE(VT.YVT0809.(E))
  FREE PACKAGE(HP1.RWBC037.())
  FREE PACKAGE(HP3.RWBC037.())
  FREE PACKAGE(VT.YVT0806.(19940316185341S101702A032544AYVT0806))
  FREE PACKAGE(VT.YVT0802.(19940316185332S101702A032544AYVT0802))
  FREE PACKAGE(VT.YVT0801.(19940316185331S101702A032544AYVT0801))
  FREE PACKAGE(VT.YVT0803.(19940316185334S101702A032544AYVT0803))
  FREE PACKAGE(VT.YVT0809.(19940316185345S101702A032544AYVT0809))
  FREE PACKAGE(VT.YVT0804.(19940316185336S101702A032544AYVT0804))
  FREE PACKAGE(VT.YVT0805.(19940316185339S101702A032544AYVT0805))
  FREE PACKAGE(VT.YVT0802.(19940316143210S101702A032544AYVT0802))
  FREE PACKAGE(VT.YVT0801.(19940316143208S101702A032544AYVT0801))
  FREE PACKAGE(VT.YVT0803.(19940316143212S101702A032544AYVT0803))
  FREE PACKAGE(BW.YBWAPVZ.())
  FREE PACKAGE(BW.YBWAXLQ.())
  FREE PACKAGE(VT.YVT0806.())
  FREE PACKAGE(VT.YVT0802.())
  FREE PACKAGE(VT.YVT0801.())
  FREE PACKAGE(VT.YVT0809.())
  FREE PACKAGE(VT.YVT0805.())
  FREE PACKAGE(VT.YVT0803.())
  FREE PACKAGE(VT.YVT0804.())
  FREE PACKAGE(BW.YBWAAGF.())
  FREE PACKAGE(BW.YBWAH56.())
  FREE PACKAGE(BW.YBWAPVY.())
  FREE PACKAGE(BX.YBXBI02.())
  FREE PACKAGE(DX.DX5300.())
  FREE PACKAGE(BW.YBWAE0H.())
  FREE PACKAGE(SX.YSXFEHL.())
  FREE PACKAGE(KS.YKSAUFT.(19940602144938S101702A034556AYKSAUFT))
  FREE PACKAGE(SA.YSAT801.(19940602152851S101702A034761AYSAT801))
  FREE PACKAGE(RE.YREDAT.(19940602200603S101702A034743AYREDAT))
  FREE PACKAGE(RE.YREDAT.(19940603141908S101702A034743AYREDAT))
  FREE PACKAGE(SX.SX0650.(19940609145031S101702A034927ASX0650))
  FREE PACKAGE(YY.YYDEPAY.(19940609162215S101702A034897AYYDEPAY))
  FREE PACKAGE(YY.YYDEPAY.(19940609165924S101702A034897AYYDEPAY))
  FREE PACKAGE(SA.YSAT807.(19940616144919S101702A034999AYSAT807))
  FREE PACKAGE(HP1.RWBC041.())
  FREE PACKAGE(HP3.RWBC041.())
  FREE PACKAGE(HP1.RWBC048.())
  FREE PACKAGE(HP3.RWBC048.())
  FREE PACKAGE(HP1.RWBC049.())
  FREE PACKAGE(HP1.RWBP007.())
  FREE PACKAGE(HP3.RWBP007.())
  FREE PACKAGE(WK.WK7140.(19940617193658S101702M000399AWK7140))
  FREE PACKAGE(WK.YWKLUBO.(19940617180626S101702M000399AYWKLUBO))
  FREE PACKAGE(WK.YWK019A.(19940617175336S101702M000399AYWK019A))
  FREE PACKAGE(WK.YWK018A.(19940617175335S101702M000399AYWK018A))
  FREE PACKAGE(WK.YWK018C.(19940617175335S101702M000399AYWK018C))
  FREE PACKAGE(WK.YWK018D.(19940617175336S101702M000399AYWK018D))
  FREE PACKAGE(WK.YWKATRE.(19940617180548S101702M000399AYWKATRE))
  FREE PACKAGE(HP1.RWBP022.())
  FREE PACKAGE(HP3.RWBP022.())
  FREE PACKAGE(HP1.RWBP036.())
  FREE PACKAGE(HP1.RWBP026.())
  FREE PACKAGE(HP3.RWBP026.())
  FREE PACKAGE(HP1.RWBP029.())
  FREE PACKAGE(HP3.RWBP029.())
  FREE PACKAGE(HP1.RWBP034.())
  FREE PACKAGE(HP3.RWBP034.())
  FREE PACKAGE(HP1.RWBC024.())
  FREE PACKAGE(HP3.RWBC024.())
  FREE PACKAGE(HP1.RWBC011.())
  FREE PACKAGE(HP3.RWBC011.())
  FREE PACKAGE(HP1.RWBC032.())
  FREE PACKAGE(HP3.RWBC032.())
  FREE PACKAGE(HP1.RWBR043.())
  FREE PACKAGE(HP3.RWBR043.())
  FREE PACKAGE(YY.YYDEPAY.(19940623183033S101702A035091AYYDEPAY))
  FREE PACKAGE(WK.YWKLUBO.(19940623185421S101702M000479AYWKLUBO))
  FREE PACKAGE(DX.DX0100.(19940623142418S101702A035172ADX0100))
  FREE PACKAGE(YY.YYDEPAY.(19940623162940S101702A035091AYYDEPAY))
  FREE PACKAGE(YY.YYDEPAY.(19940623173219S101702A035091AYYDEPAY))
  FREE PACKAGE(SA.YSAT801.(19940623170035S101702A035250AYSAT801))
  FREE PACKAGE(SX.SX0650.(19940623170137S101702A035250ASX0650))
  FREE PACKAGE(KS.YKSMODU.(19940324153841S101702A032785AYKSMODU))
  FREE PACKAGE(LB.YLB0113.(19940324154725S101702A032795AYLB0113))
  FREE PACKAGE(KS.YKSZNID.(19940323113754S101702A032639AYKSZNID))
  FREE PACKAGE(VT.YVT0802.(19940330142123S101702A032942AYVT0802))
  FREE PACKAGE(VT.YVT0803.(19940330142140S101702A032942AYVT0803))
  FREE PACKAGE(VT.YVT0805.(19940330142220S101702A032942AYVT0805))
  FREE PACKAGE(BW.YBWAFIY.(19940330142400S101702A032858AYBWAFIY))
  FREE PACKAGE(BW.YBWAFIZ.(19940330142416S101702A032858AYBWAFIZ))
  FREE PACKAGE(BW.YBWAFI0.(19940330142436S101702A032858AYBWAFI0))
  FREE PACKAGE(BW.YBWAFI2.(19940330142450S101702A032858AYBWAFI2))
  FREE PACKAGE(BW.YBWAFIX.(19940330142508S101702A032858AYBWAFIX))
  FREE PACKAGE(VT.YVT0801.(19940330142350S101702A032942AYVT0801))
  FREE PACKAGE(VT.YVT0804.(19940330142205S101702A032942AYVT0804))
  FREE PACKAGE(VT.YVT0806.(19940330142237S101702A032942AYVT0806))
  FREE PACKAGE(BW.YBWAFI1.(19940330142442S101702A032858AYBWAFI1))
  FREE PACKAGE(BW.YBWAFIW.(19940330142500S101702A032858AYBWAFIW))
  FREE PACKAGE(KS.YKSZNID.(19940407150310S101702A032963AYKSZNID))
  FREE PACKAGE(YY.YYDEPAY.(19940407150944S101702A032852AYYDEPAY))
  FREE PACKAGE(KS.YKSZNID.(19940407164427S101702A032963AYKSZNID))
  FREE PACKAGE(YY.YYDEPAY.(19940407165401S101702A032852AYYDEPAY))
  FREE PACKAGE(PHPSPTA.HMCEXP3.())
  FREE PACKAGE(PHPS53.HMCEXP3.())
  FREE PACKAGE(WK.YWKLUBO.(19940408012610S101702M000391AYWKLUBO))
  FREE PACKAGE(WK.YWK019A.(19940408012536S101702M000391AYWK019A))
  FREE PACKAGE(GE.GE2950.(19940407190123S101702A033023AGE2950))
  FREE PACKAGE(YY.YYDEAIS.(19940407192650S101702A032805AYYDEAIS))
  FREE PACKAGE(NK.YNKUMW.(19940415123746S101702A032855AYNKUMW))
  FREE PACKAGE(RT.RT5030.(19940415122520S101702A032575ART5030))
  FREE PACKAGE(RT.RT5930.(19940415122513S101702A032575ART5930))
  FREE PACKAGE(YY.YYNHBS.(19940415174407S101702A033339AYYNHBS))
  FREE PACKAGE(WK.YWKLUBO.(19940415175633S101702M000426AYWKLUBO))
  FREE PACKAGE(NK.YNKUMW.(19940415193036S101702A032855AYNKUMW))
  FREE PACKAGE(GE.YYGE040.(19940421143818S101702M000442AYYGE040))
  FREE PACKAGE(YY.YYDEPAY.(19940421144515S101702A033531AYYDEPAY))
  FREE PACKAGE(GE.YYGE020.(19940421143813S101702M000442AYYGE020))
  FREE PACKAGE(PC.YPC0002.(19940421153633S101702M000442AYPC0002))
  FREE PACKAGE(YY.YYDEPAY.(19940421171023S101702A033531AYYDEPAY))
  FREE PACKAGE(RR.RR7310.(19940421200115S101702M000439ARR7310))
  FREE PACKAGE(YX.YXNKSIC.(19940428181933S101702A033825AYXNKSIC))
  FREE PACKAGE(BW.YBWAEW6.(19940428182212S101702A033825AYBWAEW6))
  FREE PACKAGE(BW.YBWAO3W.(19940428182442S101702A033825AYBWAO3W))
  FREE PACKAGE(BW.YBWAEWG.(19940428182459S101702A033825AYBWAEWG))
  FREE PACKAGE(BW.YBWAEW2.(19940428182558S101702A033825AYBWAEW2))
  FREE PACKAGE(BW.YBWAEWN.(19940428182543S101702A033825AYBWAEWN))
  FREE PACKAGE(BW.YBWAEWJ.(19940428182507S101702A033825AYBWAEWJ))
  FREE PACKAGE(BW.YBWAHD4.(19940428182421S101702A033825AYBWAHD4))
  FREE PACKAGE(VT.VT0610.(19940428145845S101702A033858AVT0610))
  FREE PACKAGE(YY.YYDEPAY.(19940505194307S101702A033876AYYDEPAY))
  FREE PACKAGE(WK.YWKLUBO.(19940505203528S101702M000394AYWKLUBO))
  FREE PACKAGE(VT.YVT0806.(19940505162943S101702A034051AYVT0806))
  FREE PACKAGE(VT.YVT0805.(19940505162933S101702A034051AYVT0805))
  FREE PACKAGE(VT.YVT0802.(19940505163025S101702A034051AYVT0802))
  FREE PACKAGE(VT.YVT0801.(19940505163017S101702A034051AYVT0801))
  FREE PACKAGE(VT.YVT0803.(19940505163031S101702A034051AYVT0803))
  FREE PACKAGE(VT.YVT0804.(19940505162908S101702A034051AYVT0804))
  FREE PACKAGE(BW.YBWAEWG.(19940511190624S101702A034204AYBWAEWG))
  FREE PACKAGE(YY.YYDEPAY.(19940511152421S101702A034077AYYDEPAY))
  FREE PACKAGE(DX.DX5100.(19940519174204S101702A034366ADX5100))
  FREE PACKAGE(DX.DX5300.(19940519174211S101702A034369ADX5300))
  FREE PACKAGE(WK.WK7140.(19940519174927S101702A034385AWK7140))
  FREE PACKAGE(DX.DX0100.(19940519144614S101702A034343ADX0100))
  FREE PACKAGE(KS.YKSAUFT.(19940519152148S101702A034419AYKSAUFT))
  FREE PACKAGE(WK.YWK019A.(19940901204355S101702M000463AYWK019A))
  FREE PACKAGE(WK.YWKLUBO.(19940901204338S101702M000463AYWKLUBO))
  FREE PACKAGE(YY.YYDEPAY.(19940901135024S101702A036991AYYDEPAY))
  FREE PACKAGE(YY.YYNFP14.(19940902165842S101702A037061AYYNFP14))
  FREE PACKAGE(WK.YWKLUBO.(19940915185724S101702M000465AYWKLUBO))
  FREE PACKAGE(WK.YWK019A.(19940915192823S101702M000465AYWK019A))
  FREE PACKAGE(YX.YXBF224.(19940915190525S101702M000465AYXBF224))
  FREE PACKAGE(HP1.AE85S3.())
  FREE PACKAGE(HP3.AE85S3.())
  FREE PACKAGE(HP1.AE86S3.())
  FREE PACKAGE(HP3.AE86S3.())
  FREE PACKAGE(HP3.AA4XTI.())
  FREE PACKAGE(HP3.ABISTI.())
  FREE PACKAGE(HP3.AE84S3.())
  FREE PACKAGE(HP3.ADECS3.())
  FREE PACKAGE(HP3.AE9SS3.())
  FREE PACKAGE(HP3.AE9TS3.())
  FREE PACKAGE(HP3.AE9US3.())
  FREE PACKAGE(HP3.AA40TI.())
  FREE PACKAGE(HP3.AA4ZTI.())
  FREE PACKAGE(HP1.ABWPTI.())
  FREE PACKAGE(HP3.ABWPTI.())
  FREE PACKAGE(HP1.ADDZS3.())
  FREE PACKAGE(HP3.ADDZS3.())
  FREE PACKAGE(HP3.ADEBS3.())
  FREE PACKAGE(WK.YWKLUBO.(19940922222855S101702M000497AYWKLUBO))
  FREE PACKAGE(YY.YYDEPAY.(19940922143400S101702A037561AYYDEPAY))
  FREE PACKAGE(SA.YSAT807.(19940922143846S101702A037594AYSAT807))
  FREE PACKAGE(NP.NP5450.(19940929140523S101702A037741ANP5450))
  FREE PACKAGE(NP.NP5000.(19940929140635S101702A037741ANP5000))
  FREE PACKAGE(NP.NP5020.(19940929140638S101702A037741ANP5020))
  FREE PACKAGE(NP.NP5450.(19940929153937S101702A037741ANP5450))
  FREE PACKAGE(NP.NP5000.(19940929154023S101702A037741ANP5000))
  FREE PACKAGE(NP.NP5020.(19940929154025S101702A037741ANP5020))
  FREE PACKAGE(NP.NP5450.(19940929164921S101702A037741ANP5450))
  FREE PACKAGE(NP.NP8900.(19940929164933S101702A037741ANP8900))
  FREE PACKAGE(NP.NP5000.(19940929164946S101702A037741ANP5000))
  FREE PACKAGE(NP.NP5020.(19940929164947S101702A037741ANP5020))
  FREE PACKAGE(NK.NK5240V.(19940929172932S101702A037879ANK5240V))
  FREE PACKAGE(YY.YYDEPAY.(19941006213821S101702M000503AYYDEPAY))
  FREE PACKAGE(HP3.AJBTSH.())
  FREE PACKAGE(BX.YBXBI02.(19941006193226S101702A037591AYBXBI02))
  FREE PACKAGE(ME.ME0300.(19941006195423S101702A037982AME0300))
  FREE PACKAGE(WK.YWKLUBO.(19941006204333S101702M000466AYWKLUBO))
  FREE PACKAGE(HP1.ACF3Q1.())
  FREE PACKAGE(HP3.ACF3Q1.())
  FREE PACKAGE(YY.YYDEPAY.(19941006165731S101702M000503AYYDEPAY))
  FREE PACKAGE(CD.YCDGETJ.(19940705103237S101702A035214AYCDGETJ))
  FREE PACKAGE(CD.YCDUP08.(19940705103248S101702A035214AYCDUP08))
  FREE PACKAGE(CD.YCDUP27.(19940705104208S101702A035214AYCDUP27))
  FREE PACKAGE(CD.YCDGETJ.(19940705140220S101702A035214AYCDGETJ))
  FREE PACKAGE(CD.YCDUP08.(19940705140233S101702A035214AYCDUP08))
  FREE PACKAGE(CD.YCDUP27.(19940705140313S101702A035214AYCDUP27))
  FREE PACKAGE(CD.YCDUP27.(19940705142545S101702A035214AYCDUP27))
  FREE PACKAGE(CD.YCDGETJ.(19940705142430S101702A035214AYCDGETJ))
  FREE PACKAGE(CD.YCDUP08.(19940705142445S101702A035214AYCDUP08))
  FREE PACKAGE(YY.YYDEPAY.(19940630144158S101702A035293AYYDEPAY))
  FREE PACKAGE(YY.YYDEPAY.(19940630151201S101702A035293AYYDEPAY))
  FREE PACKAGE(BW.YBWAAJ9.(19940630170745S101702A035238AYBWAAJ9))
  FREE PACKAGE(BW.YBWAAJT.(19940630170740S101702A035238AYBWAAJT))
  FREE PACKAGE(BW.YBWAAJ2.(19940630170742S101702A035238AYBWAAJ2))
  FREE PACKAGE(BW.YBWAAJ8.(19940630170744S101702A035238AYBWAAJ8))
  FREE PACKAGE(DX.DX5100.(19940630173128S101702A035317ADX5100))
  FREE PACKAGE(CD.YCDUP27.(19940701132626S101702A035214AYCDUP27))
  FREE PACKAGE(CD.YCDGETJ.(19940701132442S101702A035214AYCDGETJ))
  FREE PACKAGE(NK.YNKUMW.(19940707172102S101702A034690AYNKUMW))
  FREE PACKAGE(WK.YWKLUBO.(19940707185047S101702M000457AYWKLUBO))
  FREE PACKAGE(YY.YYDEPAY.(19940707133234S101702A035428AYYDEPAY))
  FREE PACKAGE(KS.YKSAUFT.(19940707194026S101702M000478AYKSAUFT))
  FREE PACKAGE(WK.WK7140.(19940707190603S101702M000457AWK7140))
  FREE PACKAGE(WK.YWKLUBO.(19940714204856S101702M000458AYWKLUBO))
  FREE PACKAGE(YY.YYDEPAY.(19940714145243S101702A035665AYYDEPAY))
  FREE PACKAGE(VT.YVT0801.(19940714151204S101702A035710AYVT0801))
  FREE PACKAGE(VT.YVT0809.(19940714151212S101702A035710AYVT0809))
  FREE PACKAGE(VT.YVT0802.(19940714151204S101702A035710AYVT0802))
  FREE PACKAGE(VT.YVT0803.(19940714151205S101702A035710AYVT0803))
  FREE PACKAGE(VT.YVT0806.(19940714151210S101702A035710AYVT0806))
  FREE PACKAGE(VT.YVT0805.(19940714151209S101702A035710AYVT0805))
  FREE PACKAGE(VT.YVT0804.(19940714151207S101702A035710AYVT0804))
  FREE PACKAGE(YY.YYNHBS.(19940714165234S101702A035718AYYNHBS))
  FREE PACKAGE(BX.YBXBI02.(19940714172643S101702A035771AYBXBI02))
  FREE PACKAGE(VT.YVT0806.(19940714180900S101702A035710AYVT0806))
  FREE PACKAGE(VT.YVT0802.(19940714180857S101702A035710AYVT0802))
  FREE PACKAGE(VT.YVT0809.(19940714180901S101702A035710AYVT0809))
  FREE PACKAGE(VT.YVT0801.(19940714180856S101702A035710AYVT0801))
  FREE PACKAGE(VT.YVT0805.(19940714180859S101702A035710AYVT0805))
  FREE PACKAGE(VT.YVT0803.(19940714180857S101702A035710AYVT0803))
  FREE PACKAGE(VT.YVT0804.(19940714180858S101702A035710AYVT0804))
  FREE PACKAGE(SA.YSAT805.(19940715094945S101702A035847AYSAT805))
  FREE PACKAGE(SA.YSAT802.(19940715094943S101702A035847AYSAT802))
  FREE PACKAGE(SA.YSAT806.(19940715094946S101702A035847AYSAT806))
  FREE PACKAGE(SA.YSAT803.(19940715094944S101702A035847AYSAT803))
  FREE PACKAGE(WK.YWKLUBO.(19940721173958S101702M000459AYWKLUBO))
  FREE PACKAGE(PHPSPTA.RMICKJB.())
  FREE PACKAGE(PHPS53.RMICKJB.())
  FREE PACKAGE(HP3.AE8GS3.())
  FREE PACKAGE(HP3.AE8HS3.())
  FREE PACKAGE(HP3.AE8IS3.())
  FREE PACKAGE(VT.YVT0803.(19940727175006S101702A036169AYVT0803))
  FREE PACKAGE(BP.YBPPID.(19940804183036S101702A036204AYBPPID))
  FREE PACKAGE(YY.YYDEPAY.(19940804181158S101702M000486AYYDEPAY))
  FREE PACKAGE(BP.BP5110.(19940804181814S101702M000488ABP5110))
  FREE PACKAGE(AC.YACM002.(19940804182728S101702A036204AYACM002))
  FREE PACKAGE(KS.YKSAUFT.(19940811140925S101702A036426AYKSAUFT))
  FREE PACKAGE(KS.YKSAUFT.(19940811195830S101702A036426AYKSAUFT))
  FREE PACKAGE(WK.YWKLUBO.(19940811215857S101702M000461AYWKLUBO))
  FREE PACKAGE(BW.YBWAAJ8.(19940811231714S101702A036260AYBWAAJ8))
  FREE PACKAGE(NH.NH5910.(19940811233300S101702A036480ANH5910))
  FREE PACKAGE(NH.NH7100.(19940811233217S101702A036480ANH7100))
  FREE PACKAGE(HP3.RWBP004.())
  FREE PACKAGE(HP3.RWBP008.())
  FREE PACKAGE(HP1.RWBP021.())
  FREE PACKAGE(HP3.RWBP021.())
  FREE PACKAGE(HP1.RWBC030.())
  FREE PACKAGE(HP3.RWBC030.())
  FREE PACKAGE(HP1.RWBM007.())
  FREE PACKAGE(HP3.RWBM007.())
  FREE PACKAGE(GE.GE7580.(19940824154405S101702A036682AGE7580))
  FREE PACKAGE(GE.GE7590.(19940824154407S101702A036682AGE7590))
  FREE PACKAGE(YY.YYDEPAY.(19940825150144S101702M000491AYYDEPAY))
  FREE PACKAGE(OD.OD7210.(19940825152244S101702A036730AOD7210))
  FREE PACKAGE(GE.GE7620.(19940825113355S101702A036682AGE7620))
  FREE PACKAGE(GE.GE7590.(19940825113352S101702A036682AGE7590))
  FREE PACKAGE(GE.GE7580.(19940825113350S101702A036682AGE7580))
  FREE PACKAGE(VT.YVT0803.(19940825170749S101702A036783AYVT0803))
  FREE PACKAGE(BF.BF5220.(19940825185414S101702A036438ABF5220))
  FREE PACKAGE(BF.BF5230.(19940825185417S101702A036438ABF5230))
  FREE PACKAGE(WK.YWKLUBO.(19940825190037S101702M000490AYWKLUBO))
  FREE PACKAGE(WK.YWKLUBO.(19941215214321S101702M000474AYWKLUBO))
  FREE PACKAGE(LB.YLB0113.(19941215214909S101702M000474AYLB0113))
  FREE PACKAGE(VT.VT8111.(19941212115358S101702A040321AVT8111))
  FREE PACKAGE(KS.YKSAUFT.(19941215164630S101702A040392AYKSAUFT))
  FREE PACKAGE(KS.KS0610.(19941215182206S101702A040306AKS0610))
  FREE PACKAGE(KS.KS0600.(19941215182205S101702A040306AKS0600))
  FREE PACKAGE(KS.YKSAUFT.(19941215182250S101702A040392AYKSAUFT))
  FREE PACKAGE(KS.KS0600.(19941215163732S101702A040306AKS0600))
  FREE PACKAGE(YX.YXBF222.(19941224125703S101702Z170599AYXBF222))
  FREE PACKAGE(VT.YVT0731.(19941219124226S101702A040594AYVT0731))
  FREE PACKAGE(WK.YWK018A.(19941229210352S101702M000523AYWK018A))
  FREE PACKAGE(WK.YWK018C.(19941229210359S101702M000523AYWK018C))
  FREE PACKAGE(WK.YWKLUBO.(19941229204640S101702M000523AYWKLUBO))
  FREE PACKAGE(WK.YWK019A.(19941229210426S101702M000523AYWK019A))
  FREE PACKAGE(VT.YVT0803.(19950105144947S101702A041005AYVT0803))
  FREE PACKAGE(VT.YVT0806.(19950105144954S101702A041005AYVT0806))
  FREE PACKAGE(VT.YVT0804.(19950105144951S101702A041005AYVT0804))
  FREE PACKAGE(VT.YVT0805.(19950105144952S101702A041005AYVT0805))
  FREE PACKAGE(VT.YVT0801.(19950105144958S101702A041005AYVT0801))
  FREE PACKAGE(VT.YVT0802.(19950105144959S101702A041005AYVT0802))
  FREE PACKAGE(YY.YYSPINS.(19950106063222S101702A041003AYYSPINS))
  FREE PACKAGE(VT.YVT0801.(19950112151630S101702A041230AYVT0801))
  FREE PACKAGE(HP1.ACDBQ1.())
  FREE PACKAGE(HP3.ACDBQ1.())
  FREE PACKAGE(WB.YWB5901.(19941013170117S101702A037988AYWB5901))
  FREE PACKAGE(HP1.RWBP023.())
  FREE PACKAGE(HP3.RWBP023.())
  FREE PACKAGE(HP1.RWBC040.())
  FREE PACKAGE(HP3.RWBC040.())
  FREE PACKAGE(HP1.ADWVQZ.())
  FREE PACKAGE(HP3.ADWVQZ.())
  FREE PACKAGE(WK.YWKLUBO.(19941020175037S101702M000468AYWKLUBO))
  FREE PACKAGE(RE.RE7520.(19941020175514S101702M000502ARE7520))
  FREE PACKAGE(RT.RT5000.(19941020143110S101702A038467ART5000))
  FREE PACKAGE(SAMDBOF.SAMB0500.())
  FREE PACKAGE(OD.OD7130.(19941027161308S101702A038607AOD7130))
  FREE PACKAGE(VT.YVT0806.(19941102124427S101702A038864AYVT0806))
  FREE PACKAGE(VT.YVT0809.(19941102124430S101702A038864AYVT0809))
  FREE PACKAGE(VT.YVT0802.(19941102124425S101702A038864AYVT0802))
  FREE PACKAGE(VT.YVT0801.(19941102124425S101702A038864AYVT0801))
  FREE PACKAGE(VT.YVT0804.(19941102124426S101702A038864AYVT0804))
  FREE PACKAGE(VT.YVT0805.(19941102124427S101702A038864AYVT0805))
  FREE PACKAGE(YY.YYDEPAY.(19941103180213S101702A038783AYYDEPAY))
  FREE PACKAGE(WK.YWKLUBO.(19941103182227S101702M000469AYWKLUBO))
  FREE PACKAGE(VT.VT0610.(E))
  FREE PACKAGE(SA.YSAUEB.(19941110174709S101702A039326AYSAUEB))
  FREE PACKAGE(WK.YWKLUBO.(19941110191853S101702M000470AYWKLUBO))
  FREE PACKAGE(SA.YSAUEB.(19941110133031S101702A039326AYSAUEB))
  FREE PACKAGE(VT.YVT0805.(19941110143933S101702A039292AYVT0805))
  FREE PACKAGE(YY.YYDEPAY.(19941121140628S101702A039653AYYDEPAY))
  FREE PACKAGE(SA.YSAUEB.(19941117140738S101702A039487AYSAUEB))
  FREE PACKAGE(RE.RE7520.(19941117161042S101702A039244ARE7520))
  FREE PACKAGE(WK.YWKLUBO.(19941117163613S101702M000471AYWKLUBO))
  FREE PACKAGE(YY.YYNHBS.(19941117161412S101702A039404AYYNHBS))
  FREE PACKAGE(YY.YYDEPAY.(19941117161523S101702A039431AYYDEPAY))
  FREE PACKAGE(WK.YWKLUBO.(19941117190715S101702M000471AYWKLUBO))
  FREE PACKAGE(VT.VT0610.(19941124145522S101702A039698AVT0610))
  FREE PACKAGE(WK.YWKLUBO.(19941124193246S101702M000517AYWKLUBO))
  FREE PACKAGE(WK.YWKLUBO.(19941201191819S101702M000472AYWKLUBO))
  FREE PACKAGE(LB.YLB0113.(19941201191749S101702M000472AYLB0113))
  FREE PACKAGE(EB.EB5150.(19941201140340S101702A039621AEB5150))
  FREE PACKAGE(BW.YBWAEWG.(19941201183642S101702A040024AYBWAEWG))
  FREE PACKAGE(OD.OD7210.(19941208141347S101702A040106AOD7210))
  FREE PACKAGE(VT.YVT0801.(19941208143554S101702A040233AYVT0801))
  FREE PACKAGE(VT.YVT0804.(19941208143556S101702A040233AYVT0804))
  FREE PACKAGE(VT.YVT0805.(19941208143559S101702A040233AYVT0805))
  FREE PACKAGE(VT.YVT0804.(19941208151812S101702A040233AYVT0804))
  FREE PACKAGE(VT.YVT0805.(19941208151813S101702A040233AYVT0805))
  FREE PACKAGE(VT.YVT0801.(19941208151811S101702A040233AYVT0801))
  FREE PACKAGE(WK.YWKLUBO.(19941208160857S101702M000473AYWKLUBO))
  FREE PACKAGE(PHPSPTA.HMCAUDT.())
  FREE PACKAGE(PHPS53.HMCAUDT.())
  FREE PACKAGE(WK.YWKLUBO.(19950403S101702Z183880AYWKLUBO))
  FREE PACKAGE(PHPSPTA.HMPSNAM.())
  FREE PACKAGE(PHPS53.HMPSNAM.())
  FREE PACKAGE(PHPSPTA.H1059R.())
  FREE PACKAGE(PHPS53.H1059R.())
  FREE PACKAGE(PHPSPTA.H1060R.())
  FREE PACKAGE(PHPS53.H1060R.())
  FREE PACKAGE(PHPSPTA.H1061R.())
  FREE PACKAGE(PHPS53.H1061R.())
  FREE PACKAGE(PHPSPTA.H1056R.())
  FREE PACKAGE(PHPS53.H1056R.())
  FREE PACKAGE(PHPSPTA.H1057R.())
  FREE PACKAGE(PHPS53.H1057R.())
  FREE PACKAGE(PHPSPTA.H1058R.())
  FREE PACKAGE(PHPS53.H1058R.())
  FREE PACKAGE(PHPSPTA.H1065R.())
  FREE PACKAGE(PHPS53.H1065R.())
  FREE PACKAGE(PHPSPTA.H1062R.())
  FREE PACKAGE(PHPS53.H1062R.())
  FREE PACKAGE(PHPSPTA.H1063R.())
  FREE PACKAGE(PHPS53.H1063R.())
  FREE PACKAGE(PHPSPTA.H1064R.())
  FREE PACKAGE(PHPS53.H1064R.())
  FREE PACKAGE(PHPSPTA.H1071R.())
  FREE PACKAGE(PHPS53.H1071R.())
  FREE PACKAGE(PHPSPTA.H1066R.())
  FREE PACKAGE(PHPS53.H1066R.())
  FREE PACKAGE(PHPSPTA.H1067R.())
  FREE PACKAGE(PHPS53.H1067R.())
  FREE PACKAGE(PHPSPTA.H1068R.())
  FREE PACKAGE(PHPS53.H1068R.())
  FREE PACKAGE(PHPSPTA.H1069R.())
  FREE PACKAGE(PHPS53.H1069R.())
  FREE PACKAGE(PHPSPTA.H1075R.())
  FREE PACKAGE(PHPS53.H1075R.())
  FREE PACKAGE(PHPSPTA.H1076R.())
  FREE PACKAGE(PHPS53.H1076R.())
  FREE PACKAGE(PHPSPTA.H1072R.())
  FREE PACKAGE(PHPS53.H1072R.())
  FREE PACKAGE(PHPSPTA.H1073R.())
  FREE PACKAGE(PHPS53.H1073R.())
  FREE PACKAGE(PHPSPTA.H1074R.())
  FREE PACKAGE(PHPS53.H1074R.())
  FREE PACKAGE(PHPSPTA.H1080R.())
  FREE PACKAGE(PHPS53.H1080R.())
  FREE PACKAGE(PHPSPTA.H1081R.())
  FREE PACKAGE(PHPS53.H1081R.())
  FREE PACKAGE(PHPSPTA.H1077R.())
  FREE PACKAGE(PHPS53.H1077R.())
  FREE PACKAGE(PHPSPTA.H1078R.())
  FREE PACKAGE(PHPS53.H1078R.())
  FREE PACKAGE(PHPSPTA.H1079R.())
  FREE PACKAGE(PHPS53.H1079R.())
  FREE PACKAGE(PHPSPTA.H1083R.())
  FREE PACKAGE(PHPS53.H1083R.())
  FREE PACKAGE(PHPSPTA.H1084R.())
  FREE PACKAGE(PHPS53.H1084R.())
  FREE PACKAGE(PHPSPTA.H1082R.())
  FREE PACKAGE(PHPS53.H1082R.())
  FREE PACKAGE(PHPSPTA.H1003R.())
  FREE PACKAGE(PHPS53.H1003R.())
  FREE PACKAGE(PHPSPTA.H1004R.())
  FREE PACKAGE(PHPS53.H1004R.())
  FREE PACKAGE(PHPSPTA.H1001R.())
  FREE PACKAGE(PHPS53.H1001R.())
  FREE PACKAGE(PHPSPTA.H1002R.())
  FREE PACKAGE(PHPS53.H1002R.())
  FREE PACKAGE(PHPSPTA.H1009R.())
  FREE PACKAGE(PHPS53.H1009R.())
  FREE PACKAGE(PHPSPTA.H1006R.())
  FREE PACKAGE(PHPS53.H1006R.())
  FREE PACKAGE(PHPSPTA.H1007R.())
  FREE PACKAGE(PHPS53.H1007R.())
  FREE PACKAGE(PHPSPTA.H1008R.())
  FREE PACKAGE(PHPS53.H1008R.())
  FREE PACKAGE(PHPSPTA.H1014R.())
  FREE PACKAGE(PHPS53.H1014R.())
  FREE PACKAGE(PHPSPTA.H1010R.())
  FREE PACKAGE(PHPS53.H1010R.())
  FREE PACKAGE(PHPSPTA.H1012R.())
  FREE PACKAGE(PHPS53.H1012R.())
  FREE PACKAGE(PHPSPTA.H1013R.())
  FREE PACKAGE(PHPS53.H1013R.())
  FREE PACKAGE(PHPSPTA.H1019R.())
  FREE PACKAGE(PHPS53.H1019R.())
  FREE PACKAGE(PHPSPTA.H1020R.())
  FREE PACKAGE(PHPS53.H1020R.())
  FREE PACKAGE(PHPSPTA.H1015R.())
  FREE PACKAGE(PHPS53.H1015R.())
  FREE PACKAGE(PHPSPTA.H1016R.())
  FREE PACKAGE(PHPS53.H1016R.())
  FREE PACKAGE(PHPSPTA.H1017R.())
  FREE PACKAGE(PHPS53.H1017R.())
  FREE PACKAGE(PHPSPTA.H1018R.())
  FREE PACKAGE(PHPS53.H1018R.())
  FREE PACKAGE(PHPSPTA.H1024R.())
  FREE PACKAGE(PHPS53.H1024R.())
  FREE PACKAGE(PHPSPTA.H1025R.())
  FREE PACKAGE(PHPS53.H1025R.())
  FREE PACKAGE(PHPSPTA.H1021R.())
  FREE PACKAGE(PHPS53.H1021R.())
  FREE PACKAGE(PHPSPTA.H1022R.())
  FREE PACKAGE(PHPS53.H1022R.())
  FREE PACKAGE(PHPSPTA.H1023R.())
  FREE PACKAGE(PHPS53.H1023R.())
  FREE PACKAGE(PHPSPTA.H1031R.())
  FREE PACKAGE(PHPS53.H1031R.())
  FREE PACKAGE(PHPSPTA.H1026R.())
  FREE PACKAGE(PHPS53.H1026R.())
  FREE PACKAGE(PHPSPTA.H1027R.())
  FREE PACKAGE(PHPS53.H1027R.())
  FREE PACKAGE(PHPSPTA.H1028R.())
  FREE PACKAGE(PHPS53.H1028R.())
  FREE PACKAGE(PHPSPTA.H1029R.())
  FREE PACKAGE(PHPS53.H1029R.())
  FREE PACKAGE(PHPSPTA.H1034R.())
  FREE PACKAGE(PHPS53.H1034R.())
  FREE PACKAGE(PHPSPTA.H1035R.())
  FREE PACKAGE(PHPS53.H1035R.())
  FREE PACKAGE(PHPSPTA.H1032R.())
  FREE PACKAGE(PHPS53.H1032R.())
  FREE PACKAGE(PHPSPTA.H1033R.())
  FREE PACKAGE(PHPS53.H1033R.())
  FREE PACKAGE(PHPSPTA.H1039R.())
  FREE PACKAGE(PHPS53.H1039R.())
  FREE PACKAGE(PHPSPTA.H1040R.())
  FREE PACKAGE(PHPS53.H1040R.())
  FREE PACKAGE(PHPSPTA.H1037R.())
  FREE PACKAGE(PHPS53.H1037R.())
  FREE PACKAGE(PHPSPTA.H1038R.())
  FREE PACKAGE(PHPS53.H1038R.())
  FREE PACKAGE(PHPSPTA.H1043R.())
  FREE PACKAGE(PHPS53.H1043R.())
  FREE PACKAGE(PHPSPTA.H1044R.())
  FREE PACKAGE(PHPS53.H1044R.())
  FREE PACKAGE(PHPSPTA.H1041R.())
  FREE PACKAGE(PHPS53.H1041R.())
  FREE PACKAGE(PHPSPTA.H1042R.())
  FREE PACKAGE(PHPS53.H1042R.())
  FREE PACKAGE(PHPSPTA.H1048R.())
  FREE PACKAGE(PHPS53.H1048R.())
  FREE PACKAGE(PHPSPTA.H1047R.())
  FREE PACKAGE(PHPS53.H1047R.())
  FREE PACKAGE(PHPSPTA.H1088R.())
  FREE PACKAGE(PHPS53.H1088R.())
  FREE PACKAGE(PHPSPTA.H1085R.())
  FREE PACKAGE(PHPS53.H1085R.())
  FREE PACKAGE(PHPSPTA.H1086R.())
  FREE PACKAGE(PHPS53.H1086R.())
  FREE PACKAGE(PHPSPTA.H1087R.())
  FREE PACKAGE(PHPS53.H1087R.())
  FREE PACKAGE(PHPSPTA.H1089R.())
  FREE PACKAGE(PHPS53.H1089R.())
  FREE PACKAGE(PHPSPTA.H1090R.())
  FREE PACKAGE(PHPS53.H1090R.())
  FREE PACKAGE(PHPSPTA.H1091R.())
  FREE PACKAGE(PHPS53.H1091R.())
  FREE PACKAGE(PHPSPTA.H1095R.())
  FREE PACKAGE(PHPS53.H1095R.())
  FREE PACKAGE(PHPSPTA.H1096R.())
  FREE PACKAGE(PHPS53.H1096R.())
  FREE PACKAGE(PHPSPTA.H1092R.())
  FREE PACKAGE(PHPS53.H1092R.())
  FREE PACKAGE(PHPSPTA.H1093R.())
  FREE PACKAGE(PHPS53.H1093R.())
  FREE PACKAGE(PHPSPTA.H1094R.())
  FREE PACKAGE(PHPS53.H1094R.())
  FREE PACKAGE(PHPSPTA.H1097R.())
  FREE PACKAGE(PHPS53.H1097R.())
  FREE PACKAGE(PHPSPTA.H1113R.())
  FREE PACKAGE(PHPS53.H1113R.())
  FREE PACKAGE(PHPSPTA.H1117R.())
  FREE PACKAGE(PHPS53.H1117R.())
  FREE PACKAGE(PHPSPTA.H1118R.())
  FREE PACKAGE(PHPS53.H1118R.())
  FREE PACKAGE(PHPSPTA.RMIPDAD.())
  FREE PACKAGE(PHPS53.RMIPDAD.())
  FREE PACKAGE(PHPSPTA.RMISTUP.())
  FREE PACKAGE(PHPS53.RMISTUP.())
  FREE PACKAGE(PHPSPTA.RMISTAD.())
  FREE PACKAGE(PHPS53.RMISTAD.())
  FREE PACKAGE(SX.YSXFLOG.(19950330S101702A043182AYSXFLOG))
  FREE PACKAGE(BW.YBWAEW1.(19950411095234S101702A043641AYBWAEW1))
  FREE PACKAGE(PHPSPTA.GCDTTM0.())
  FREE PACKAGE(PHPS53.GCDTTM0.())
  FREE PACKAGE(BW.YBWAFI1.(19950406143559S101702A043513AYBWAFI1))
  FREE PACKAGE(BW.YBWAFI0.(19950406143555S101702A043513AYBWAFI0))
  FREE PACKAGE(SX.YSXFLOG.(19950406S101702A043381AYSXFLOG))
  FREE PACKAGE(KB.KB2020.(19950406154743S101702A043366AKB2020))
  FREE PACKAGE(KD.KD5020.(19950406S101702A043419AKD5020))
  FREE PACKAGE(PHPSPTA.GCGENID.())
  FREE PACKAGE(PHPS53.GCGENID.())
  FREE PACKAGE(RK.RK2360.(19950407212049S101702Z184806ARK2360))
  FREE PACKAGE(RK.RK2340.(19950407211920S101702Z184804ARK2340))
  FREE PACKAGE(WK.YWKLUBO.(19950412S101702M000541AYWKLUBO))
  FREE PACKAGE(BX.YBXBI02.(19950412S101702A043533AYBXBI02))
  FREE PACKAGE(PHPSPTA.GRTBIND.())
  FREE PACKAGE(PHPS53.GRTBIND.())
  FREE PACKAGE(VT.VT5121.(19950419S101702A043804AVT5121))
  FREE PACKAGE(RR.RR7310.(19950420S101702A043312ARR7310))
  FREE PACKAGE(VT.VT5121.(19950425S101702A043947AVT5121))
  FREE PACKAGE(KS.YKS5551.(19950427S101702A043905AYKS5551))
  FREE PACKAGE(KS.YKS5552.(19950427S101702A043905AYKS5552))
  FREE PACKAGE(DE.YDE0860.(19950427S101702A044022AYDE0860))
  FREE PACKAGE(KEIN.KD8014.(19950119173805S101702A041425AKD8014))
  FREE PACKAGE(KEIN.KD8015.(19950119173805S101702A041425AKD8015))
  FREE PACKAGE(SA.YSAT802.(19950119145806S101702A041204AYSAT802))
  FREE PACKAGE(VT.YVT0731.(19950119144820S101702M000551AYVT0731))
  FREE PACKAGE(YY.YYDEPAY.(19950119144822S101702M000551AYYDEPAY))
  FREE PACKAGE(BW.YBWAEWL.(19950119153152S101702A041437AYBWAEWL))
  FREE PACKAGE(BW.YBWAE3X.(19950119153151S101702A041437AYBWAE3X))
  FREE PACKAGE(BW.YBWAEWM.(19950119153154S101702A041437AYBWAEWM))
  FREE PACKAGE(BW.YBWAEW9.(19950119153157S101702A041437AYBWAEW9))
  FREE PACKAGE(RP.RP7000.(19950202152307S101702A041708ARP7000))
  FREE PACKAGE(KS.YKSAUFT.(19950202142636S101702A041794AYKSAUFT))
  FREE PACKAGE(BF.BF6093.(19950210132753S101702Z176750ABF6093))
  FREE PACKAGE(KS.YKSAUFT.(19950216142447S101702A042149AYKSAUFT))
  FREE PACKAGE(WK.YWKLUBO.(19950216164131S101702M000536AYWKLUBO))
  FREE PACKAGE(WK.YWK018A.(19950216165749S101702M000536AYWK018A))
  FREE PACKAGE(WK.YWK018C.(19950216165754S101702M000536AYWK018C))
  FREE PACKAGE(WK.YWK019A.(19950216165801S101702M000536AYWK019A))
  FREE PACKAGE(WK.WK8320.(19950216173938S101702M000536AWK8320))
  FREE PACKAGE(CT.CT8500.(19950302125634S101702Z179508ACT8500))
  FREE PACKAGE(VT.VT5040.(19950302185840S101702A042571AVT5040))
  FREE PACKAGE(CT.CT8500.(19950301194008S101702Z179440ACT8500))
  FREE PACKAGE(CT.CT8500.(19950301194935S101702Z179441ACT8500))
  FREE PACKAGE(SX.YSXFLOG.(19950309140310S101702A042692AYSXFLOG))
  FREE PACKAGE(BW.YBWAFI1.(19950316130445S101702A042903AYBWAFI1))
  FREE PACKAGE(RM.RM9020.(19950316S101702A042838ARM9020))
  FREE PACKAGE(KS.ZKSFTXT.(19950316145243S101702A042669AZKSFTXT))
  FREE PACKAGE(VT.YVT0801.(19950323125517S101702A043107AYVT0801))
  FREE PACKAGE(OD.OD7130.(19950323140241S101702A043077AOD7130))
  FREE PACKAGE(KB.KB5010.(19950707S101702Z198701AKB5010))
  FREE PACKAGE(RP.RP7290.(19950703S101702Z197678ARP7290))
  FREE PACKAGE(ED.YED0034.(19950706S101702A045878AYED0034))
  FREE PACKAGE(VT.YVT0802.(19950706S101702A045888AYVT0802))
  FREE PACKAGE(VT.YVT0731.(19950706S101702A045888AYVT0731))
  FREE PACKAGE(VT.YVT0803.(19950706S101702A045888AYVT0803))
  FREE PACKAGE(VT.YVT0801.(19950706S101702A045888AYVT0801))
  FREE PACKAGE(VT.YVT0804.(19950706S101702A045888AYVT0804))
  FREE PACKAGE(VT.YVT0806.(19950706S101702A045888AYVT0806))
  FREE PACKAGE(VT.YVT0809.(19950706S101702A045888AYVT0809))
  FREE PACKAGE(VT.YVT0805.(19950706S101702A045888AYVT0805))
  FREE PACKAGE(RK.RK2330.(19950706150906S101702A045904ARK2330))
  FREE PACKAGE(YX.YXWB52M.(19950706S101702Z198507AYXWB52M))
  FREE PACKAGE(DE.YDE0860.(19950706S101702A045780AYDE0860))
  FREE PACKAGE(YX.YXWB52M.(19950706S101702A045845AYXWB52M))
  FREE PACKAGE(ED.YED0120.(19950714S101702A045968AYED0120))
  FREE PACKAGE(ED.YED0034.(19950714S101702A045968AYED0034))
  FREE PACKAGE(YX.YXWB52M.(19950714S101702Z200133AYXWB52M))
  FREE PACKAGE(DE.YDE0860.(19950713S101702A046130AYDE0860))
  FREE PACKAGE(VT.YVT0805.(19950713S101702A046105AYVT0805))
  FREE PACKAGE(VT.YVT0804.(19950713S101702A046105AYVT0804))
  FREE PACKAGE(SX.YSXFLOG.(19950713S101702A046089AYSXFLOG))
  FREE PACKAGE(SA.YSAL002.(19950713S101702A046133AYSAL002))
  FREE PACKAGE(SA.YSAL001.(19950713S101702A046133AYSAL001))
  FREE PACKAGE(YX.YXWB52M.(19950720S101702A046231AYXWB52M))
  FREE PACKAGE(YY.YYDEPAY.(19950720S101702A046223AYYDEPAY))
  FREE PACKAGE(YX.YXBF224.(19950719S101702Z200752AYXBF224))
  FREE PACKAGE(YY.YYPTM12.(19950727S101702A046364AYYPTM12))
  FREE PACKAGE(YX.YXWB52M.(19950724S101702Z201292AYXWB52M))
  FREE PACKAGE(YY.YYPTM12.(19950803S101702A046538AYYPTM12))
  FREE PACKAGE(WK.YWKLUBO.(19950803S101702M000562AYWKLUBO))
  FREE PACKAGE(ED.YED0120.(19950803S101702A046536AYED0120))
  FREE PACKAGE(ED.YED0034.(19950803S101702A046536AYED0034))
  FREE PACKAGE(YX.YXWB52M.(19950803S101702A046454AYXWB52M))
  FREE PACKAGE(DE.YDE0860.(19950803S101702A046600AYDE0860))
  FREE PACKAGE(ED.YED0120.(19950810S101702A046695AYED0120))
  FREE PACKAGE(ED.YED0034.(19950810S101702A046695AYED0034))
  FREE PACKAGE(WK.YWKLUBO.(19950810S101702Z203284AYWKLUBO))
  FREE PACKAGE(WK.YWKLUBO.(19950807S101702Z202630AYWKLUBO))
  FREE PACKAGE(RK.RK2350.(19950504142834S101702A043469ARK2350))
  FREE PACKAGE(RK.RK2420.(19950504142901S101702A043469ARK2420))
  FREE PACKAGE(RK.RK2360.(19950504142837S101702A043469ARK2360))
  FREE PACKAGE(RK.RK2400.(19950504142846S101702A043469ARK2400))
  FREE PACKAGE(RK.RK2380.(19950504142840S101702A043469ARK2380))
  FREE PACKAGE(RK.RK2320.(19950504142910S101702A043469ARK2320))
  FREE PACKAGE(RK.RK2330.(19950504142915S101702A043469ARK2330))
  FREE PACKAGE(RK.RK2410.(19950504142854S101702A043469ARK2410))
  FREE PACKAGE(RK.RK2390.(19950504142842S101702A043469ARK2390))
  FREE PACKAGE(RK.RK2340.(19950504142921S101702A043469ARK2340))
  FREE PACKAGE(DE.YDE0860.(19950511S101702Z189239AYDE0860))
  FREE PACKAGE(KS.YKSAUFT.(19950511S101702A044324AYKSAUFT))
  FREE PACKAGE(WK.YWKLUBO.(19950518S101702M000545AYWKLUBO))
  FREE PACKAGE(LB.YLB0113.(19950518S101702M000545AYLB0113))
  FREE PACKAGE(WK.WK8320.(19950518S101702M000545AWK8320))
  FREE PACKAGE(DE.YDE0860.(19950518S101702A044277AYDE0860))
  FREE PACKAGE(KB.KB5010.(19950515S101702Z189864AKB5010))
  FREE PACKAGE(KB.KB5010.(19950516S101702Z190008AKB5010))
  FREE PACKAGE(DE.YDE0860.(19950522S101702Z190760AYDE0860))
  FREE PACKAGE(VT.YVT0806.(19950601S101702M000585AYVT0806))
  FREE PACKAGE(VT.YVT0809.(19950601S101702M000585AYVT0809))
  FREE PACKAGE(VT.YVT0805.(19950601S101702M000585AYVT0805))
  FREE PACKAGE(KS.YKSAUFT.(19950601S101702M000585AYKSAUFT))
  FREE PACKAGE(VT.YVT0731.(19950601S101702M000585AYVT0731))
  FREE PACKAGE(VT.YVT0802.(19950601S101702M000585AYVT0802))
  FREE PACKAGE(VT.YVT0804.(19950601S101702M000585AYVT0804))
  FREE PACKAGE(VT.YVT0803.(19950601S101702M000585AYVT0803))
  FREE PACKAGE(VT.YVT0801.(19950601S101702M000585AYVT0801))
  FREE PACKAGE(PHPSPTA.GARD000.())
  FREE PACKAGE(PHPS53.GARD000.())
  FREE PACKAGE(DE.YDE0860.(19950601S101702A044799AYDE0860))
  FREE PACKAGE(PHPSPTA.H1115R.())
  FREE PACKAGE(PHPS53.H1115R.())
  FREE PACKAGE(VT.YVT0801.(19950608S101702A045087AYVT0801))
  FREE PACKAGE(VT.YVT0805.(19950608S101702A045087AYVT0805))
  FREE PACKAGE(VT.YVT0804.(19950608S101702A045087AYVT0804))
  FREE PACKAGE(YY.YYDEAIS.(19950608S101702M000546AYYDEAIS))
  FREE PACKAGE(YY.YYDAISF.(19950608S101702M000546AYYDAISF))
  FREE PACKAGE(DE.YDE0860.(19950608S101702A045100AYDE0860))
  FREE PACKAGE(YY.YYDEPAY.(19950608S101702A045100AYYDEPAY))
  FREE PACKAGE(ED.YED0034.(19950609S101702A044988AYED0034))
  FREE PACKAGE(RR.RR7120.(19950615S101702A044661ARR7120))
  FREE PACKAGE(SA.YSAL001.(19950615S101702A044787AYSAL001))
  FREE PACKAGE(RR.RR7190.(19950615S101702A044803ARR7190))
  FREE PACKAGE(RR.RR7310.(19950615S101702A044803ARR7310))
  FREE PACKAGE(DE.YDE0860.(19950615S101702M000591AYDE0860))
  FREE PACKAGE(YY.YYDEPAY.(19950615S101702M000591AYYDEPAY))
  FREE PACKAGE(PHPSPTA.GCCOMON.())
  FREE PACKAGE(PHPS53.GCCOMON.())
  FREE PACKAGE(RE.RE7580.(19950622S101702A045483ARE7580))
  FREE PACKAGE(RP.RP7000.(19950622S101702M000595ARP7000))
  FREE PACKAGE(SA.YSAL001.(19950622S101702A045506AYSAL001))
  FREE PACKAGE(ED.YED0034.(19950622S101702M000590AYED0034))
  FREE PACKAGE(YY.YYDAISF.(19950622S101702M000590AYYDAISF))
  FREE PACKAGE(YY.YYDEAIS.(19950622S101702M000590AYYDEAIS))
  FREE PACKAGE(DE.YDE0860.(19950622S101702M000590AYDE0860))
  FREE PACKAGE(YY.YYDEPAY.(19950622S101702M000590AYYDEPAY))
  FREE PACKAGE(ED.YED0120.(19950622S101702A045513AYED0120))
  FREE PACKAGE(RP.RP7000.(19950622S101702A045509ARP7000))
  FREE PACKAGE(RK.RK2330.(19950628151450S101702Z197041ARK2330))
  FREE PACKAGE(YX.YXWB52M.(19950630S101702Z197290AYXWB52M))
  FREE PACKAGE(YX.YXWB52M.(19950630S101702Z197327AYXWB52M))
  FREE PACKAGE(YX.YXWB52M.(19950630S101702Z197319AYXWB52M))
  FREE PACKAGE(YX.YXWB52M.(19950630S101702Z197332AYXWB52M))
  FREE PACKAGE(SA.YSAL001.(19951019S101702M000626AYSAL001))
  FREE PACKAGE(YY.YYPTM12.(19951013S101702Z212652AYYPTM12))
  FREE PACKAGE(EX.YEXERG.(19951016S101702Z213055AYEXERG))
  FREE PACKAGE(NF.YNFCGB1.(19951023S101702Z214285AYNFCGB1))
  FREE PACKAGE(NF.YNFCGB1.(19951023S101702Z214260AYNFCGB1))
  FREE PACKAGE(NF.YNFCGB1.(19951024S101702Z214404AYNFCGB1))
  FREE PACKAGE(KD.KD7000.(19951019S101702M000621AKD7000))
  FREE PACKAGE(KD.KD0670.(19951019S101702M000621AKD0670))
  FREE PACKAGE(KD.KD5020.(19951019S101702M000621AKD5020))
  FREE PACKAGE(YY.KD5020.(19951019S101702M000621AKD5020))
  FREE PACKAGE(AT.YAT7010.(19951019S101702A047927AYAT7010))
  FREE PACKAGE(SX.SX0780.(19951020S101702Z213845ASX0780))
  FREE PACKAGE(SX.SX0780.(19951020S101702Z213858ASX0780))
  FREE PACKAGE(SX.SX0780.(19951020S101702A048835ASX0780))
  FREE PACKAGE(KD.KD7000.(19951026S101702A048919AKD7000))
  FREE PACKAGE(BP.YBP01NS.(19951026S101702Z214855AYBP01NS))
  FREE PACKAGE(YY.YYCXCR.(19951026S101702A048908AYYCXCR))
  FREE PACKAGE(KD.KD5040.(19951027S101702Z214879AKD5040))
  FREE PACKAGE(BP.YBP01NS.(19951027S101702Z214995AYBP01NS))
  FREE PACKAGE(PHPSPTA.HMCCFGX.())
  FREE PACKAGE(PHPS53.HMCCFGX.())
  FREE PACKAGE(EX.YEXERG.(19951106S101702Z216751AYEXERG))
  FREE PACKAGE(NS.NS7340.(19951102S101702A049013ANS7340))
  FREE PACKAGE(BP.YBP01NS.(19951102S101702A049016AYBP01NS))
  FREE PACKAGE(EX.YEXERG.(19951102S101702A049197AYEXERG))
  FREE PACKAGE(BX.YBXBI02.(19951102S101702A048803AYBXBI02))
  FREE PACKAGE(WK.YWK019A.(19951102S101702M000606AYWK019A))
  FREE PACKAGE(WK.YWK018C.(19951102S101702M000606AYWK018C))
  FREE PACKAGE(WK.YWK018A.(19951102S101702M000606AYWK018A))
  FREE PACKAGE(WK.YWKLUBO.(19951102S101702M000606AYWKLUBO))
  FREE PACKAGE(WK.WK8320.(19951102S101702M000606AWK8320))
  FREE PACKAGE(ED.YED0034.(19951102S101702M000602AYED0034))
  FREE PACKAGE(ED.YED0120.(19951102S101702M000602AYED0120))
  FREE PACKAGE(EX.YEXERG.(19951103S101702Z216005AYEXERG))
  FREE PACKAGE(SA.YSAL001.(19951109S101702A049380AYSAL001))
  FREE PACKAGE(NF.NF8800.(19951109S101702A049436ANF8800))
  FREE PACKAGE(KD.KD5040.(19951109S101702A049329AKD5040))
  FREE PACKAGE(YY.YYDEPAY.(19951109S101702A049367AYYDEPAY))
  FREE PACKAGE(WK.YWKLUBO.(19951110S101702M000609AYWKLUBO))
  FREE PACKAGE(KD.KD5040.(19951110S101702A049329AKD5040))
  FREE PACKAGE(YY.YYDEPAY.(19951110S101702A049367AYYDEPAY))
  FREE PACKAGE(YY.YYWBPOS.(19951109S101702A049203AYYWBPOS))
  FREE PACKAGE(YY.YYWBPOS.(19951110S101702A049203AYYWBPOS))
  FREE PACKAGE(AT.YAT7010.(19951114S101702Z218883AYAT7010))
  FREE PACKAGE(NF.NF8800.(19951116S101702M000633ANF8800))
  FREE PACKAGE(EX.YEXERG.(19951116S101702A049464AYEXERG))
  FREE PACKAGE(WK.YWKLUBO.(19950816S101702Z204003AYWKLUBO))
  FREE PACKAGE(ED.YEDSAM.(19950810S101702A046615AYEDSAM))
  FREE PACKAGE(WK.YWKLUBO.(19950821S101702Z204586AYWKLUBO))
  FREE PACKAGE(YY.YYPTM12.(19950822S101702Z204939AYYPTM12))
  FREE PACKAGE(WK.YWKLUBO.(19950817S101702M000563AYWKLUBO))
  FREE PACKAGE(YX.YXWB52M.(19950817S101702A046882AYXWB52M))
  FREE PACKAGE(YX.YXBF224.(19950817S101702A046685AYXBF224))
  FREE PACKAGE(YY.YYPTM12.(19950818S101702A047074AYYPTM12))
  FREE PACKAGE(YY.YYPTM12.(19950827S101702Z205430AYYPTM12))
  FREE PACKAGE(YY.YYPTM12.(19950828S101702Z205430AYYPTM12))
  FREE PACKAGE(YY.YYPTM12.(19950828S101702Z205582AYYPTM12))
  FREE PACKAGE(WK.YWKLUBO.(19950828S101702Z205521AYWKLUBO))
  FREE PACKAGE(YY.YYPTM12.(19950829S101702Z205736AYYPTM12))
  FREE PACKAGE(WK.YWKLUBO.(19950829S101702Z205812AYWKLUBO))
  FREE PACKAGE(WK.YWKLUBO.(19950823S101702Z205049AYWKLUBO))
  FREE PACKAGE(AL.AL7501.(19950824S101702A047042AAL7501))
  FREE PACKAGE(KS.YKSAUFT.(19950824S101702A047164AYKSAUFT))
  FREE PACKAGE(KD.KD8011.(19950824S101702M000598AKD8011))
  FREE PACKAGE(WK.YWKLUBO.(19950824S101702Z205219AYWKLUBO))
  FREE PACKAGE(YY.YYPTM12.(19950825S101702Z205416AYYPTM12))
  FREE PACKAGE(YY.YYPTM12.(19950826S101702Z205430AYYPTM12))
  FREE PACKAGE(WK.YWKLUBO.(19950904S101702Z205812AYWKLUBO))
  FREE PACKAGE(WK.YWKLUBO.(19950830S101702Z205812AYWKLUBO))
  FREE PACKAGE(YY.YYPTM12.(19950830S101702Z206096AYYPTM12))
  FREE PACKAGE(YY.YYPTM12.(19950831S101702Z206167AYYPTM12))
  FREE PACKAGE(WK.YWKLUBO.(19950831S101702M000564AYWKLUBO))
  FREE PACKAGE(YY.YYPTM12.(19950901S101702Z206288AYYPTM12))
  FREE PACKAGE(WK.YWKLUBO.(19950901S101702Z205812AYWKLUBO))
  FREE PACKAGE(WK.YWKLUBO.(19950905S101702Z205812AYWKLUBO))
  FREE PACKAGE(YY.YYPTM12.(19950905S101702Z206837AYYPTM12))
  FREE PACKAGE(YY.YYPTM12.(19950906S101702Z206973AYYPTM12))
  FREE PACKAGE(WK.YWKLUBO.(19950906S101702Z205812AYWKLUBO))
  FREE PACKAGE(ED.YED0034.(19950907S101702A047537AYED0034))
  FREE PACKAGE(YY.YYPTM12.(19950907S101702A047466AYYPTM12))
  FREE PACKAGE(ED.YED0120.(19950907S101702A047537AYED0120))
  FREE PACKAGE(YY.YYPTM12.(19950908S101702Z207435AYYPTM12))
  FREE PACKAGE(ED.YED0120.(19950912S101702Z207810AYED0120))
  FREE PACKAGE(ED.YED0034.(19950912S101702Z207809AYED0034))
  FREE PACKAGE(ED.YED0120.(19950914S101702A047657AYED0120))
  FREE PACKAGE(ED.YED0034.(19950914S101702A047657AYED0034))
  FREE PACKAGE(KS.YKSAUFT.(19950914S101702A047692AYKSAUFT))
  FREE PACKAGE(WK.YWKLUBO.(19950914S101702M000565AYWKLUBO))
  FREE PACKAGE(PT.PT8520.(19950922S101702Z209475APT8520))
  FREE PACKAGE(DN.DN8020.(19950922S101702Z209425ADN8020))
  FREE PACKAGE(PT.PT5310.(19950922S101702Z209539APT5310))
  FREE PACKAGE(PI.PT5310.(19950923S101702Z209544APT5310))
  FREE PACKAGE(PT.PT5310.(19950923S101702Z209544APT5310))
  FREE PACKAGE(PT.PT5500.(19950923S101702Z209546APT5500))
  FREE PACKAGE(PT.PT5500.(19950923S101702Z209545APT5500))
  FREE PACKAGE(PT.PT5500.(19950923S101702Z209548APT5500))
  FREE PACKAGE(PI.PT5500.(19950923S101702Z209547APT5500))
  FREE PACKAGE(PT.PT5500.(19950923S101702Z209547APT5500))
  FREE PACKAGE(PT.PT5500.(19950923S101702Z209550APT5500))
  FREE PACKAGE(PI.PT5500.(19950923S101702Z209549APT5500))
  FREE PACKAGE(PT.PT5500.(19950923S101702Z209549APT5500))
  FREE PACKAGE(PI.PT5500.(19950923S101702Z209554APT5500))
  FREE PACKAGE(PT.PT5500.(19950923S101702Z209554APT5500))
  FREE PACKAGE(PT.PT8520.(19950923S101702Z209553APT8520))
  FREE PACKAGE(PT.PT5500.(19950923S101702Z209551APT5500))
  FREE PACKAGE(WK.YWKLUBO.(19950918S101702Z208465AYWKLUBO))
  FREE PACKAGE(RR.RR0010.(19950919S101702Z208678ARR0010))
  FREE PACKAGE(SAMDBOF.SP1BS5T.())
  FREE PACKAGE(SAMDBOF.SP1BS6T.())
  FREE PACKAGE(SAMDBOF.SP1TS1T.())
  FREE PACKAGE(SAMDBOF.SP1US1T.())
  FREE PACKAGE(SAMDBOF.SP1BS2T.())
  FREE PACKAGE(SAMDBOF.SP1BS1T.())
  FREE PACKAGE(SAMDBOF.SP1BS4T.())
  FREE PACKAGE(SAMDBOF.SP1BS3T.())
  FREE PACKAGE(SAMDBOF.SP1US2T.())
  FREE PACKAGE(PT.PT5500.(19950921S101702Z209329APT5500))
  FREE PACKAGE(PI.PT5500.(19950921S101702Z209353APT5500))
  FREE PACKAGE(PT.PT5500.(19950921S101702Z209353APT5500))
  FREE PACKAGE(BW.YBWAAJT.(19950921172720S101702A047654AYBWAAJT))
  FREE PACKAGE(BW.YBWAAJ8.(19950921172725S101702A047654AYBWAAJ8))
  FREE PACKAGE(BW.YBWAAJ2.(19950921172723S101702A047654AYBWAAJ2))
  FREE PACKAGE(BW.YBWAAJ9.(19950921172726S101702A047654AYBWAAJ9))
  FREE PACKAGE(PI.PT5500.(19950921S101702Z209344APT5500))
  FREE PACKAGE(PT.PT5500.(19950921S101702Z209344APT5500))
  FREE PACKAGE(PI.PT5500.(19950921S101702Z209365APT5500))
  FREE PACKAGE(PT.PT5500.(19950921S101702Z209365APT5500))
  FREE PACKAGE(DE.YDE0860.(19950921S101702A047786AYDE0860))
  FREE PACKAGE(WK.YWKLUBO.(19950921S101702Z208465AYWKLUBO))
  FREE PACKAGE(SA.YSAL001.(19950921S101702A047844AYSAL001))
  FREE PACKAGE(SA.YSAL002.(19950921S101702A047844AYSAL002))
  FREE PACKAGE(BP.YBP7020.(19950928S101702A048040AYBP7020))
  FREE PACKAGE(BP.YBP01NS.(19950928S101702A048005AYBP01NS))
  FREE PACKAGE(NK.NK8120.(19950928S101702A048069ANK8120))
  FREE PACKAGE(KD.KD7098.(19950929S101702Z210568AKD7098))
  FREE PACKAGE(YY.YYPTM12.(19950925S101702Z209742AYYPTM12))
  FREE PACKAGE(YY.YYDEAIS.(19951004S101702Z211189AYYDEAIS))
  FREE PACKAGE(YY.YYPTM12.(19951005S101702A048161AYYPTM12))
  FREE PACKAGE(KD.KD7098.(19951005S101702A048223AKD7098))
  FREE PACKAGE(EX.YEXERG.(19951005S101702A048266AYEXERG))
  FREE PACKAGE(FD.FD8100.(19951005S101702M000617AFD8100))
  FREE PACKAGE(WK.YWKLUBO.(19951005S101702M000566AYWKLUBO))
  FREE PACKAGE(NK.NK7810.(19951005S101702A048293ANK7810))
  FREE PACKAGE(SAMDBOF.SP1BS9T.())
  FREE PACKAGE(WK.YWKLUBO.(19951002S101702Z208465AYWKLUBO))
  FREE PACKAGE(KD.KD7098.(19951002S101702Z210762AKD7098))
  FREE PACKAGE(YY.YYDEPAY.(19951002S101702Z210818AYYDEPAY))
  FREE PACKAGE(YY.YYPTM12.(19951011S101702Z212376AYYPTM12))
  FREE PACKAGE(YY.YYPTM12.(19951011S101702Z212285AYYPTM12))
  FREE PACKAGE(YY.YYPTM12.(19951011S101702Z212295AYYPTM12))
  FREE PACKAGE(YY.YYDEPAY.(19951012S101702A048532AYYDEPAY))
  FREE PACKAGE(OD.OD7182.(19951012S101702A047632AOD7182))
  FREE PACKAGE(OD.OD7181.(19951012S101702A047632AOD7181))
  FREE PACKAGE(OD.OD7184.(19951012S101702A047632AOD7184))
  FREE PACKAGE(OD.OD7183.(19951012S101702A047632AOD7183))
  FREE PACKAGE(PT.YYPTM12.(19951012S101702A048386AYYPTM12))
  FREE PACKAGE(YY.YYPTM12.(19951012S101702A048386AYYPTM12))
  FREE PACKAGE(DE.YDE0860.(19951012S101702M000615AYDE0860))
  FREE PACKAGE(NR.NR8000.(19951012S101702M000624ANR8000))
  FREE PACKAGE(NTA1P.NR7110.(19951012S101702M000624ANR7110))
  FREE PACKAGE(YY.YYCXCR.(19951012S101702A048616AYYCXCR))
  FREE PACKAGE(YY.YYPTM12.(19951009S101702Z211751AYYPTM12))
  FREE PACKAGE(YY.YYPTM12.(19951010S101702Z212019AYYPTM12))
  FREE PACKAGE(VT.YVT0802.(19960129S101702Z231662AYVT0802))
  FREE PACKAGE(VT.YVT0806.(19960129S101702Z231662AYVT0806))
  FREE PACKAGE(VT.YVT0809.(19960129S101702Z231662AYVT0809))
  FREE PACKAGE(VT.YVT0801.(19960129S101702Z231662AYVT0801))
  FREE PACKAGE(VT.YVT0805.(19960129S101702Z231662AYVT0805))
  FREE PACKAGE(VT.YVT0804.(19960129S101702Z231662AYVT0804))
  FREE PACKAGE(VT.YVT0806.(19960124S101702A051425AYVT0806))
  FREE PACKAGE(VT.YVT0802.(19960124S101702A051425AYVT0802))
  FREE PACKAGE(VT.YVT0801.(19960124S101702A051425AYVT0801))
  FREE PACKAGE(VT.YVT0804.(19960124S101702A051425AYVT0804))
  FREE PACKAGE(VT.YVT0805.(19960124S101702A051425AYVT0805))
  FREE PACKAGE(VT.YVT0809.(19960124S101702A051425AYVT0809))
  FREE PACKAGE(PUPG53.HMCCNVTR.())
  FREE PACKAGE(PUPG53.HMCCNVTE.())
  FREE PACKAGE(EV.EV7130.(19960125S101702A051501AEV7130))
  FREE PACKAGE(EV.EV0600.(19960125S101702A051501AEV0600))
  FREE PACKAGE(PHPSPTA.H1139R.())
  FREE PACKAGE(PHPS53.H1139R.())
  FREE PACKAGE(PHPSPTA.H1036R.())
  FREE PACKAGE(PHPS53.H1036R.())
  FREE PACKAGE(VT.YVT0731.(19960202S101702A051729AYVT0731))
  FREE PACKAGE(VT.YVT0805.(19960202S101702A051729AYVT0805))
  FREE PACKAGE(VT.YVT0802.(19960202S101702A051729AYVT0802))
  FREE PACKAGE(VT.YVT0801.(19960202S101702A051729AYVT0801))
  FREE PACKAGE(VT.YVT0806.(19960202S101702A051729AYVT0806))
  FREE PACKAGE(VT.YVT0809.(19960202S101702A051729AYVT0809))
  FREE PACKAGE(VT.YVT0804.(19960202S101702A051729AYVT0804))
  FREE PACKAGE(PT.PT8520.(19960130S101702Z232085APT8520))
  FREE PACKAGE(VT.YVT0802.(19960206S101702A051780AYVT0802))
  FREE PACKAGE(VT.YVT0801.(19960206S101702A051780AYVT0801))
  FREE PACKAGE(VT.YVT0805.(19960206S101702A051780AYVT0805))
  FREE PACKAGE(VT.YVT0731.(19960206S101702A051780AYVT0731))
  FREE PACKAGE(VT.YVT0804.(19960206S101702A051780AYVT0804))
  FREE PACKAGE(VT.YVT0806.(19960206S101702A051780AYVT0806))
  FREE PACKAGE(VT.YVT0809.(19960206S101702A051780AYVT0809))
  FREE PACKAGE(SX.SX0540.(19960208S101702A051698ASX0540))
  FREE PACKAGE(YY.YYDEPAY.(19960215141014S101702A051716AYYDEPAY))
  FREE PACKAGE(YX.YXBF222.(19960213S101702Z233885AYXBF222))
  FREE PACKAGE(YY.YYDEPAY.(19960222143313S101702A052141AYYDEPAY))
  FREE PACKAGE(ED.YED0034.(19960222141003S101702A052082AYED0034))
  FREE PACKAGE(YX.YXBF222.(19960222171023S101702A052072AYXBF222))
  FREE PACKAGE(BF.YBF530C.(19960222171021S101702A052072AYBF530C))
  FREE PACKAGE(BF.YBF530A.(19960222171024S101702A052072AYBF530A))
  FREE PACKAGE(PHPSPTA.STKCLON.())
  FREE PACKAGE(PHPS53.STKCLON.())
  FREE PACKAGE(EX.YEXERG.(19960228145027S101702A052419AYEXERG))
  FREE PACKAGE(EX.YEXERG.(19960228151903S101702A052419AYEXERG))
  FREE PACKAGE(EX.YEXERG.(19960228155542S101702A052419AYEXERG))
  FREE PACKAGE(EX.YEXERG.(19960228161103S101702A052419AYEXERG))
  FREE PACKAGE(OD.OD7040.(19960229135951S101702Z236394AOD7040))
  FREE PACKAGE(EX.YEXERG.(A))
  FREE PACKAGE(KD.KD0068.(19960226131303S101702Z235794AKD0068))
  FREE PACKAGE(EX.YEXERG.(19960226170142S101702A052326AYEXERG))
  FREE PACKAGE(AT.YAT7010.(19951123S101702A049711AYAT7010))
  FREE PACKAGE(WK.YWKLUBO.(19951123S101702Z220705AYWKLUBO))
  FREE PACKAGE(KS.YKS5551.(19951123S101702A049861AYKS5551))
  FREE PACKAGE(KS.YKS5552.(19951123S101702A049861AYKS5552))
  FREE PACKAGE(KS.YKS5551.(19951201S101702A050046AYKS5551))
  FREE PACKAGE(KS.YKS5552.(19951201S101702A050046AYKS5552))
  FREE PACKAGE(PHPSPTA.SEDTRNS.())
  FREE PACKAGE(PHPS53.SEDTRNS.())
  FREE PACKAGE(PHPSPTA.H1051X.())
  FREE PACKAGE(PHPS53.H1051X.())
  FREE PACKAGE(PHPSPTA.H1100X.())
  FREE PACKAGE(PHPS53.H1100X.())
  FREE PACKAGE(PHPSPTA.H1101X.())
  FREE PACKAGE(PHPS53.H1101X.())
  FREE PACKAGE(WK.YWKLUBO.(19951130S101702M000610AYWKLUBO))
  FREE PACKAGE(YY.YYCXCR.(19951130S101702A049675AYYCXCR))
  FREE PACKAGE(NK.NK7800.(19951130S101702A049919ANK7800))
  FREE PACKAGE(SA.YSAL001.(19951207S101702A050221AYSAL001))
  FREE PACKAGE(BF.YBF530A.(19951207S101702M000634AYBF530A))
  FREE PACKAGE(BF.YBF530C.(19951207S101702M000634AYBF530C))
  FREE PACKAGE(YY.YYPTM12.(19951213S101702Z224731AYYPTM12))
  FREE PACKAGE(YY.YYPTM12.(19951213S101702Z224682AYYPTM12))
  FREE PACKAGE(YY.YYPTM12.(19951214S101702A050352AYYPTM12))
  FREE PACKAGE(YY.YYCXCR.(19951214S101702A050270AYYCXCR))
  FREE PACKAGE(AL.AL7501.(19951214S101702A050076AAL7501))
  FREE PACKAGE(ED.YED0034.(19951214S101702A050106AYED0034))
  FREE PACKAGE(WK.YWKLUBO.(19951214S101702M000611AYWKLUBO))
  FREE PACKAGE(FC.FC0130.(19951214S101702A050488AFC0130))
  FREE PACKAGE(FC.FC0110.(19951214S101702A050488AFC0110))
  FREE PACKAGE(KS.YKS5551.(19951214S101702A050423AYKS5551))
  FREE PACKAGE(KS.YKS5552.(19951214S101702A050423AYKS5552))
  FREE PACKAGE(YY.YYPTM12.(19951214S101702Z224779AYYPTM12))
  FREE PACKAGE(KS.YKSAUFT.(19951214S101702Z224822AYKSAUFT))
  FREE PACKAGE(KS.YKSAUFT.(19951214S101702M000648AYKSAUFT))
  FREE PACKAGE(PHPSPTA.H1115X2.())
  FREE PACKAGE(PHPS53.H1115X2.())
  FREE PACKAGE(KD.KD8096.(19951211S101702Z223940AKD8096))
  FREE PACKAGE(BF.YBF530C.(19951212S101702Z224164AYBF530C))
  FREE PACKAGE(YY.YYPTM12.(19951212S101702Z224373AYYPTM12))
  FREE PACKAGE(PHPSPTA.H1051R.())
  FREE PACKAGE(PHPS53.H1051R.())
  FREE PACKAGE(PHPSPTA.H1112R.())
  FREE PACKAGE(PHPS53.H1112R.())
  FREE PACKAGE(PHPSPTA.H1101R.())
  FREE PACKAGE(PHPS53.H1101R.())
  FREE PACKAGE(PHPSPTA.H1100R.())
  FREE PACKAGE(PHPS53.H1100R.())
  FREE PACKAGE(PHPSPTA.H1102R.())
  FREE PACKAGE(PHPS53.H1102R.())
  FREE PACKAGE(PT.PT5500.(19951221S101702Z226191APT5500))
  FREE PACKAGE(ED.YED0034.(19951221S101702A050529AYED0034))
  FREE PACKAGE(NK.NK7050.(19951221S101702A050630ANK7050))
  FREE PACKAGE(PT.PT5500.(19951217S101702Z225217APT5500))
  FREE PACKAGE(KD.KD0630.(19951228S101702A050783AKD0630))
  FREE PACKAGE(VT.VT5040.(19951231S101702Z227061AVT5040))
  FREE PACKAGE(CD.YCDT10.(19960104S101702A050732AYCDT10))
  FREE PACKAGE(NV.NVB903.())
  FREE PACKAGE(PHPSPTA.H1145R.())
  FREE PACKAGE(PHPS53.H1145R.())
  FREE PACKAGE(PHPSPTA.H1143R.())
  FREE PACKAGE(PHPS53.H1143R.())
  FREE PACKAGE(PHPSPTA.H1144R.())
  FREE PACKAGE(PHPS53.H1144R.())
  FREE PACKAGE(PHPSPTA.H1148R.())
  FREE PACKAGE(PHPS53.H1148R.())
  FREE PACKAGE(PHPSPTA.H1149R.())
  FREE PACKAGE(PHPS53.H1149R.())
  FREE PACKAGE(PHPSPTA.H1146R.())
  FREE PACKAGE(PHPS53.H1146R.())
  FREE PACKAGE(PHPSPTA.H1147R.())
  FREE PACKAGE(PHPS53.H1147R.())
  FREE PACKAGE(PHPSPTA.H1152R.())
  FREE PACKAGE(PHPS53.H1152R.())
  FREE PACKAGE(PHPSPTA.H1150R.())
  FREE PACKAGE(PHPS53.H1150R.())
  FREE PACKAGE(PHPSPTA.H1151R.())
  FREE PACKAGE(PHPS53.H1151R.())
  FREE PACKAGE(PHPSPTA.H1155R.())
  FREE PACKAGE(PHPS53.H1155R.())
  FREE PACKAGE(PHPSPTA.H1156R.())
  FREE PACKAGE(PHPS53.H1156R.())
  FREE PACKAGE(PHPSPTA.H1153R.())
  FREE PACKAGE(PHPS53.H1153R.())
  FREE PACKAGE(PHPSPTA.H1154R.())
  FREE PACKAGE(PHPS53.H1154R.())
  FREE PACKAGE(PHPSPTA.H1157R.())
  FREE PACKAGE(PHPS53.H1157R.())
  FREE PACKAGE(PHPSPTA.H1158R.())
  FREE PACKAGE(PHPS53.H1158R.())
  FREE PACKAGE(PHPSPTA.H1122R.())
  FREE PACKAGE(PHPS53.H1122R.())
  FREE PACKAGE(PHPSPTA.H1120R.())
  FREE PACKAGE(PHPS53.H1120R.())
  FREE PACKAGE(PHPSPTA.H1121R.())
  FREE PACKAGE(PHPS53.H1121R.())
  FREE PACKAGE(PHPSPTA.H1125R.())
  FREE PACKAGE(PHPS53.H1125R.())
  FREE PACKAGE(PHPSPTA.H1123R.())
  FREE PACKAGE(PHPS53.H1123R.())
  FREE PACKAGE(PHPSPTA.H1124R.())
  FREE PACKAGE(PHPS53.H1124R.())
  FREE PACKAGE(PHPSPTA.H1128R.())
  FREE PACKAGE(PHPS53.H1128R.())
  FREE PACKAGE(PHPSPTA.H1126R.())
  FREE PACKAGE(PHPS53.H1126R.())
  FREE PACKAGE(PHPSPTA.H1127R.())
  FREE PACKAGE(PHPS53.H1127R.())
  FREE PACKAGE(PHPSPTA.H1131R.())
  FREE PACKAGE(PHPS53.H1131R.())
  FREE PACKAGE(PHPSPTA.H1132R.())
  FREE PACKAGE(PHPS53.H1132R.())
  FREE PACKAGE(PHPSPTA.H1129R.())
  FREE PACKAGE(PHPS53.H1129R.())
  FREE PACKAGE(PHPSPTA.H1130R.())
  FREE PACKAGE(PHPS53.H1130R.())
  FREE PACKAGE(PHPSPTA.H1135R.())
  FREE PACKAGE(PHPS53.H1135R.())
  FREE PACKAGE(PHPSPTA.H1133R.())
  FREE PACKAGE(PHPS53.H1133R.())
  FREE PACKAGE(PHPSPTA.H1134R.())
  FREE PACKAGE(PHPS53.H1134R.())
  FREE PACKAGE(PHPSPTA.H1136R.())
  FREE PACKAGE(PHPS53.H1136R.())
  FREE PACKAGE(PHPSPTA.H1137R.())
  FREE PACKAGE(PHPS53.H1137R.())
  FREE PACKAGE(PHPSPTA.H1142R.())
  FREE PACKAGE(PHPS53.H1142R.())
  FREE PACKAGE(PHPSPTA.H1140R.())
  FREE PACKAGE(PHPS53.H1140R.())
  FREE PACKAGE(PHPSPTA.H1141R.())
  FREE PACKAGE(PHPS53.H1141R.())
  FREE PACKAGE(FD.FD8100.(19960111S101702A051006AFD8100))
  FREE PACKAGE(CD.YCDT10.(19960111S101702A050979AYCDT10))
  FREE PACKAGE(WK.YWKLUBO.(19960111S101702M000636AYWKLUBO))
  FREE PACKAGE(VT.YVT0731.(19960121S101702Z230461AYVT0731))
  FREE PACKAGE(SX.YSXFLOG.(19960118S101702A051283AYSXFLOG))
  FREE PACKAGE(RR.RR7130.(19960118S101702M000635ARR7130))
  FREE PACKAGE(RP.RP7290.(19960119S101702A051340ARP7290))
  FREE PACKAGE(BW.YBWAEW2.(19960509194857S101702A053995AYBWAEW2))
  FREE PACKAGE(BW.YBWAEW9.(19960509194858S101702A053995AYBWAEW9))
  FREE PACKAGE(BW.YBWAEW6.(19960509194857S101702A053995AYBWAEW6))
  FREE PACKAGE(BW.YBWAE3X.(19960509194859S101702A053995AYBWAE3X))
  FREE PACKAGE(BW.YBWAEW1.(19960509194856S101702A053995AYBWAEW1))
  FREE PACKAGE(BW.YBWAEWN.(19960509194904S101702A053995AYBWAEWN))
  FREE PACKAGE(BW.YBWAEWL.(19960509194902S101702A053995AYBWAEWL))
  FREE PACKAGE(BW.YBWAEWM.(19960509194903S101702A053995AYBWAEWM))
  FREE PACKAGE(BW.YBWAEWG.(19960509194901S101702A053995AYBWAEWG))
  FREE PACKAGE(BW.YBWAO3W.(19960509194901S101702A053995AYBWAO3W))
  FREE PACKAGE(BW.YBWAHD4.(19960509194900S101702A053995AYBWAHD4))
  FREE PACKAGE(BX.YBXBI02.(19960509133250S101702A054054AYBXBI02))
  FREE PACKAGE(WK.YWKLUBO.(19960509161344S101702M000640AYWKLUBO))
  FREE PACKAGE(WB.YWB5901.(19960504154552S101702A053306AYWB5901))
  FREE PACKAGE(WB.WB7460.(19960504154757S101702A053306AWB7460))
  FREE PACKAGE(BF.BF6090.(19960514130419S101702Z248334ABF6090))
  FREE PACKAGE(BF.BF6090.(19960514142627S101702Z248334ABF6090))
  FREE PACKAGE(BF.BF6090.(19960514141319S101702Z248334ABF6090))
  FREE PACKAGE(WK.YWKLUBO.(19960514071832S101702Z248142AYWKLUBO))
  FREE PACKAGE(YY.YYDEAIS.(19960515132404S101702A054107AYYDEAIS))
  FREE PACKAGE(YY.YYDAISF.(19960515132403S101702A054107AYYDAISF))
  FREE PACKAGE(WK.YWKLUBO.(19960515160311S101702M000686AYWKLUBO))
  FREE PACKAGE(VT.YVT0803.(19960515160337S101702M000686AYVT0803))
  FREE PACKAGE(KS.YKSAUFT.(19960515160557S101702M000686AYKSAUFT))
  FREE PACKAGE(VT.YVT0806.(19960515160339S101702M000686AYVT0806))
  FREE PACKAGE(VT.YVT0805.(19960515160338S101702M000686AYVT0805))
  FREE PACKAGE(VT.YVT0804.(19960515160338S101702M000686AYVT0804))
  FREE PACKAGE(VT.YVT0809.(19960515160340S101702M000686AYVT0809))
  FREE PACKAGE(VT.YVT0802.(19960515160337S101702M000686AYVT0802))
  FREE PACKAGE(VT.YVT0801.(19960515160336S101702M000686AYVT0801))
  FREE PACKAGE(KD.KD8096.(19960515153311S101702M000684AKD8096))
  FREE PACKAGE(VT.YVT0803.(19960521160920S101702A054328AYVT0803))
  FREE PACKAGE(VT.YVT0801.(19960521160919S101702A054328AYVT0801))
  FREE PACKAGE(VT.YVT0805.(19960521160921S101702A054328AYVT0805))
  FREE PACKAGE(VT.YVT0804.(19960521160920S101702A054328AYVT0804))
  FREE PACKAGE(RP.RP7280.(19960521105717S101702Z249265ARP7280))
  FREE PACKAGE(VP.YVP7402.(19960522110825S101702Z249496AYVP7402))
  FREE PACKAGE(VP.YVP7401.(19960522110824S101702Z249496AYVP7401))
  FREE PACKAGE(PHPSPTA.H0024R.())
  FREE PACKAGE(PHPS53.H0024R.())
  FREE PACKAGE(BF.BF6094.(19960528143214S101702Z250204ABF6094))
  FREE PACKAGE(BF.BF6094.(19960528154545S101702Z250204ABF6094))
  FREE PACKAGE(VP.YVP7401.(19960524122955S101702Z249868AYVP7401))
  FREE PACKAGE(VP.YVP7402.(19960524122955S101702Z249868AYVP7402))
  FREE PACKAGE(WK.YWKLUBO.(19960530161041S101702M000689AYWKLUBO))
  FREE PACKAGE(BF.BF6094.(19960531144954S101702Z250854ABF6094))
  FREE PACKAGE(BX.YBXBI02.(19960610091341S101702Z251974AYBXBI02))
  FREE PACKAGE(OD.OD7180.(19960605122405S101702Z251474AOD7180))
  FREE PACKAGE(OD.OD7180.(19960605130003S101702Z251474AOD7180))
  FREE PACKAGE(OD.OD7190.(19960605160459S101702Z251541AOD7190))
  FREE PACKAGE(OD.OD7200.(19960605162215S101702Z251546AOD7200))
  FREE PACKAGE(RK.RK2390.(19960606134538S101702A053734ARK2390))
  FREE PACKAGE(SA.YSAOBP.(19960606144320S101702A054730AYSAOBP))
  FREE PACKAGE(OD.OD7190.(19960606075419S101702Z251583AOD7190))
  FREE PACKAGE(OD.OD7200.(19960606082803S101702Z251591AOD7200))
  FREE PACKAGE(FC.FC0130.(19960607085734S101702A054822AFC0130))
  FREE PACKAGE(EX.YEXERG.(19960306164420S101702A052579AYEXERG))
  FREE PACKAGE(OD.OD7040.(19960301130327S101702Z236556AOD7040))
  FREE PACKAGE(BF.YBF530A.(19960302112542S101702Z236662AYBF530A))
  FREE PACKAGE(EX.EX8888.(19960304133631S101702Z236837AEX8888))
  FREE PACKAGE(EX.EX8888.(19960304163609S101702Z236837AEX8888))
  FREE PACKAGE(RP.RP7280.(19960313181104S101702Z238416ARP7280))
  FREE PACKAGE(BF.YBF530A.(19960307154206S101702Z237597AYBF530A))
  FREE PACKAGE(ED.YEDSAM.(19960314161457S101702M000666AYEDSAM))
  FREE PACKAGE(YY.YYDEAIS.(19960314161502S101702M000666AYYDEAIS))
  FREE PACKAGE(YY.YYDAISF.(19960314161501S101702M000666AYYDAISF))
  FREE PACKAGE(YY.YYDEPAY.(19960314161503S101702M000666AYYDEPAY))
  FREE PACKAGE(VT.YVT0804.(19960314140008S101702A052610AYVT0804))
  FREE PACKAGE(PHPSPTA.H0006R.())
  FREE PACKAGE(PHPS53.H0006R.())
  FREE PACKAGE(PHPSPTA.H0008R.())
  FREE PACKAGE(PHPS53.H0008R.())
  FREE PACKAGE(PHPSPTA.H0007R.())
  FREE PACKAGE(PHPS53.H0007R.())
  FREE PACKAGE(PHPSPTA.H0009R.())
  FREE PACKAGE(PHPS53.H0009R.())
  FREE PACKAGE(PHPSPTA.H0010R.())
  FREE PACKAGE(PHPS53.H0010R.())
  FREE PACKAGE(PHPSPTA.H0013R.())
  FREE PACKAGE(PHPS53.H0013R.())
  FREE PACKAGE(PHPSPTA.H0011R.())
  FREE PACKAGE(PHPS53.H0011R.())
  FREE PACKAGE(PHPSPTA.H0012R.())
  FREE PACKAGE(PHPS53.H0012R.())
  FREE PACKAGE(PHPSPTA.H0016R.())
  FREE PACKAGE(PHPS53.H0016R.())
  FREE PACKAGE(PHPSPTA.H0014R.())
  FREE PACKAGE(PHPS53.H0014R.())
  FREE PACKAGE(PHPSPTA.H0015R.())
  FREE PACKAGE(PHPS53.H0015R.())
  FREE PACKAGE(EX.YEXERG.(19960314141339S101702A052439AYEXERG))
  FREE PACKAGE(PHPSPTA.H0002R.())
  FREE PACKAGE(PHPS53.H0002R.())
  FREE PACKAGE(PHPSPTA.H0003R.())
  FREE PACKAGE(PHPS53.H0003R.())
  FREE PACKAGE(PHPSPTA.H0005R.())
  FREE PACKAGE(PHPS53.H0005R.())
  FREE PACKAGE(PHPSPTA.H0004R.())
  FREE PACKAGE(PHPS53.H0004R.())
  FREE PACKAGE(PHPSPTA.H0058R.())
  FREE PACKAGE(PHPS53.H0058R.())
  FREE PACKAGE(PHPSPTA.H0056R.())
  FREE PACKAGE(PHPS53.H0056R.())
  FREE PACKAGE(PHPSPTA.H0057R.())
  FREE PACKAGE(PHPS53.H0057R.())
  FREE PACKAGE(PHPSPTA.H0061R.())
  FREE PACKAGE(PHPS53.H0061R.())
  FREE PACKAGE(PHPSPTA.H0059R.())
  FREE PACKAGE(PHPS53.H0059R.())
  FREE PACKAGE(PHPSPTA.H0060R.())
  FREE PACKAGE(PHPS53.H0060R.())
  FREE PACKAGE(PHPSPTA.H0065R.())
  FREE PACKAGE(PHPS53.H0065R.())
  FREE PACKAGE(PHPSPTA.H0062R.())
  FREE PACKAGE(PHPS53.H0062R.())
  FREE PACKAGE(PHPSPTA.H0063R.())
  FREE PACKAGE(PHPS53.H0063R.())
  FREE PACKAGE(PHPSPTA.H0068R.())
  FREE PACKAGE(PHPS53.H0068R.())
  FREE PACKAGE(PHPSPTA.H0066R.())
  FREE PACKAGE(PHPS53.H0066R.())
  FREE PACKAGE(PHPSPTA.H0067R.())
  FREE PACKAGE(PHPS53.H0067R.())
  FREE PACKAGE(PHPSPTA.H0072R.())
  FREE PACKAGE(PHPS53.H0072R.())
  FREE PACKAGE(PHPSPTA.H0069R.())
  FREE PACKAGE(PHPS53.H0069R.())
  FREE PACKAGE(PHPSPTA.H0070R.())
  FREE PACKAGE(PHPS53.H0070R.())
  FREE PACKAGE(PHPSPTA.H0019R.())
  FREE PACKAGE(PHPS53.H0019R.())
  FREE PACKAGE(PHPSPTA.H0017R.())
  FREE PACKAGE(PHPS53.H0017R.())
  FREE PACKAGE(PHPSPTA.H0018R.())
  FREE PACKAGE(PHPS53.H0018R.())
  FREE PACKAGE(PHPSPTA.H0022R.())
  FREE PACKAGE(PHPS53.H0022R.())
  FREE PACKAGE(PHPSPTA.H0020R.())
  FREE PACKAGE(PHPS53.H0020R.())
  FREE PACKAGE(PHPSPTA.H0021R.())
  FREE PACKAGE(PHPS53.H0021R.())
  FREE PACKAGE(PHPSPTA.H0023R.())
  FREE PACKAGE(PHPS53.H0023R.())
  FREE PACKAGE(PHPSPTA.H0033R.())
  FREE PACKAGE(PHPS53.H0033R.())
  FREE PACKAGE(PHPSPTA.H0026R.())
  FREE PACKAGE(PHPS53.H0026R.())
  FREE PACKAGE(PHPSPTA.H0039R.())
  FREE PACKAGE(PHPS53.H0039R.())
  FREE PACKAGE(PHPSPTA.H0034R.())
  FREE PACKAGE(PHPS53.H0034R.())
  FREE PACKAGE(PHPSPTA.H0038R.())
  FREE PACKAGE(PHPS53.H0038R.())
  FREE PACKAGE(PHPSPTA.H0042R.())
  FREE PACKAGE(PHPS53.H0042R.())
  FREE PACKAGE(PHPSPTA.H0040R.())
  FREE PACKAGE(PHPS53.H0040R.())
  FREE PACKAGE(PHPSPTA.H0041R.())
  FREE PACKAGE(PHPS53.H0041R.())
  FREE PACKAGE(PHPSPTA.H0045R.())
  FREE PACKAGE(PHPS53.H0045R.())
  FREE PACKAGE(PHPSPTA.H0043R.())
  FREE PACKAGE(PHPS53.H0043R.())
  FREE PACKAGE(PHPSPTA.H0044R.())
  FREE PACKAGE(PHPS53.H0044R.())
  FREE PACKAGE(PHPSPTA.H0048R.())
  FREE PACKAGE(PHPS53.H0048R.())
  FREE PACKAGE(PHPSPTA.H0046R.())
  FREE PACKAGE(PHPS53.H0046R.())
  FREE PACKAGE(PHPSPTA.H0047R.())
  FREE PACKAGE(PHPS53.H0047R.())
  FREE PACKAGE(PHPSPTA.H0053R.())
  FREE PACKAGE(PHPS53.H0053R.())
  FREE PACKAGE(PHPSPTA.H0051R.())
  FREE PACKAGE(PHPS53.H0051R.())
  FREE PACKAGE(PHPSPTA.H0052R.())
  FREE PACKAGE(PHPS53.H0052R.())
  FREE PACKAGE(PHPSPTA.H0055R.())
  FREE PACKAGE(PHPS53.H0055R.())
  FREE PACKAGE(PHPSPTA.H0054R.())
  FREE PACKAGE(PHPS53.H0054R.())
  FREE PACKAGE(GE.GE7620.(19960314200328S101702A052811AGE7620))
  FREE PACKAGE(WK.YWKLUBO.(19960314201344S101702M000638AYWKLUBO))
  FREE PACKAGE(YY.YYCXCR.(19960321135238S101702A052860AYYCXCR))
  FREE PACKAGE(WK.YWK019A.(19960321174238S101702A052874AYWK019A))
  FREE PACKAGE(KS.YKSAUFT.(19960409173948S101702A053018AYKSAUFT))
  FREE PACKAGE(KS.YKSAUFT.(19960410132144S101702Z242748AYKSAUFT))
  FREE PACKAGE(KS.YKSAUFT.(19960410140945S101702Z242764AYKSAUFT))
  FREE PACKAGE(KS.YKSAUFT.(19960410154724S101702Z242818AYKSAUFT))
  FREE PACKAGE(RE.RE8020.(19960411154156S101702A052875ARE8020))
  FREE PACKAGE(WK.YWKLUBO.(19960411152854S101702M000639AYWKLUBO))
  FREE PACKAGE(BX.YBXBI02.(19960411160932S101702A053228AYBXBI02))
  FREE PACKAGE(BX.YBXBI02.(19960411170957S101702A053228AYBXBI02))
  FREE PACKAGE(BF.YBF530A.(19960411173314S101702A053271AYBF530A))
  FREE PACKAGE(WK.YWKLUBO.(19960411200336S101702M000639AYWKLUBO))
  FREE PACKAGE(PHPSPTA.H1138R.())
  FREE PACKAGE(PHPS53.H1138R.())
  FREE PACKAGE(BW.YBWAEW1.(19960416143108S101702Z243792AYBWAEW1))
  FREE PACKAGE(BX.YBXBI02.(19960417121909S101702Z244065AYBXBI02))
  FREE PACKAGE(PHPSPTA.HMPGPNL.())
  FREE PACKAGE(PHPS53.HMPGPNL.())
  FREE PACKAGE(BW.YBWAEW1.(19960417141232S101702A053473AYBWAEW1))
  FREE PACKAGE(BW.YBWAEW1.(19960417144123S101702A053473AYBWAEW1))
  FREE PACKAGE(PHPSPTA.H0001R.())
  FREE PACKAGE(PHPS53.H0001R.())
  FREE PACKAGE(BW.YBWAEWM.(19960418160307S101702A053532AYBWAEWM))
  FREE PACKAGE(BW.YBWAEW9.(19960418160310S101702A053532AYBWAEW9))
  FREE PACKAGE(BW.YBWAE3X.(19960418160311S101702A053532AYBWAE3X))
  FREE PACKAGE(BW.YBWAEWL.(19960418160303S101702A053532AYBWAEWL))
  FREE PACKAGE(DX.DX0100.(19960418134338S101702M000672ADX0100))
  FREE PACKAGE(FD.FD8100.(19960418134339S101702M000672AFD8100))
  FREE PACKAGE(YY.YYCXCR.(19960418135815S101702A053388AYYCXCR))
  FREE PACKAGE(KS.YKSAUFT.(19960418140918S101702A053458AYKSAUFT))
  FREE PACKAGE(CD.YCDT10.(19960418140935S101702A053432AYCDT10))
  FREE PACKAGE(YY.YYDAISF.(19960418152010S101702M000680AYYDAISF))
  FREE PACKAGE(YY.YYDEAIS.(19960418152010S101702M000680AYYDEAIS))
  FREE PACKAGE(BW.YBWAFIW.(19960425142258S101702A053631AYBWAFIW))
  FREE PACKAGE(BW.YBWAFIY.(19960425142302S101702A053631AYBWAFIY))
  FREE PACKAGE(BW.YBWAFIX.(19960425142301S101702A053631AYBWAFIX))
  FREE PACKAGE(BW.YBWAFI2.(19960425142305S101702A053631AYBWAFI2))
  FREE PACKAGE(BW.YBWAFI0.(19960425142303S101702A053631AYBWAFI0))
  FREE PACKAGE(BW.YBWAFIZ.(19960425142302S101702A053631AYBWAFIZ))
  FREE PACKAGE(BW.YBWAAGE.(19960425142305S101702A053631AYBWAAGE))
  FREE PACKAGE(BW.YBWAPVY.(19960425142311S101702A053631AYBWAPVY))
  FREE PACKAGE(BW.YBWAH56.(19960425142306S101702A053631AYBWAH56))
  FREE PACKAGE(BW.YBWAFI1.(19960425142304S101702A053631AYBWAFI1))
  FREE PACKAGE(BW.YBWAH57.(19960425142307S101702A053631AYBWAH57))
  FREE PACKAGE(BW.YBWAPVZ.(19960425142311S101702A053631AYBWAPVZ))
  FREE PACKAGE(BW.YBWAAGF.(19960425142315S101702A053631AYBWAAGF))
  FREE PACKAGE(BW.YBWAXLQ.(19960425142313S101702A053631AYBWAXLQ))
  FREE PACKAGE(OS.OS7240.(A))
  FREE PACKAGE(KS.YKSAUFT.(19960423154952S101702A053648AYKSAUFT))
  FREE PACKAGE(SAMDBOF.SP1SK1T.())
  FREE PACKAGE(SAMDBOF.SP1SK3T.())
  FREE PACKAGE(SAMDBOF.SP1SK2T.())
  FREE PACKAGE(SAMDBOF.SP1SK5T.())
  FREE PACKAGE(SAMDBOF.SP1SK4T.())
  FREE PACKAGE(YY.YYDEPAY.(19960502135824S101702A053253AYYDEPAY))
  FREE PACKAGE(BX.YBXBI02.(19960502144753S101702A053763AYBXBI02))
  FREE PACKAGE(VP.YVP7401.(19960502160759S101702A053816AYVP7401))
  FREE PACKAGE(VP.YVP7402.(19960502160803S101702A053816AYVP7402))
  FREE PACKAGE(OS.DB2EBS01.(P))
  FREE PACKAGE(A1P.PARTANA1.(A18Q000804))
  FREE PACKAGE(BF.BF8651.(A06M015279))
  FREE PACKAGE(SE.SE0560.(A20Y000523))
  FREE PACKAGE(PHPSPTA.GARD001.())
  FREE PACKAGE(PHPS53.GARD001.())
  FREE PACKAGE(FRNIBMCL.FRNPLLQ1.())
  FREE PACKAGE(BP.BP7120.(A20Y000665))
  FREE PACKAGE(A2P.YKS0801.(A13X000702))
  FREE PACKAGE(A1P.KS5780.(A13X000732))
  FREE PACKAGE(A2P.KS5780.(A13X000732))
  FREE PACKAGE(A1P.KS5800.(A13X000732))
  FREE PACKAGE(A2P.KS5800.(A13X000732))
  FREE PACKAGE(A1P.KS5330.(A13X000735))
  FREE PACKAGE(A2P.KS5330.(A13X000735))
  FREE PACKAGE(A1P.KS5330.(A13X000740))
  FREE PACKAGE(A2P.KS5330.(A13X000740))
  FREE PACKAGE(A1P.KS5800.(A13X000740))
  FREE PACKAGE(A2P.KS5800.(A13X000740))
  FREE PACKAGE(A1P.KS5780.(A13X000740))
  FREE PACKAGE(A2P.KS5780.(A13X000740))
  FREE PACKAGE(BP.BP7130.(A20Y000665))
  FREE PACKAGE(BP.BP7042.(A20Y000615))
  FREE PACKAGE(DAA400_D_MAIN.PSEBN13.(V3201))
  FREE PACKAGE(BP.BP7200.(A20Y000648))
  FREE PACKAGE(DB.DB2REORG.(PROD))
  FREE PACKAGE(A1P.KS5780.(A13X000746))
  FREE PACKAGE(A2P.KS5780.(A13X000746))
  FREE PACKAGE(A1P.KS5800.(A13X000746))
  FREE PACKAGE(A2P.KS5800.(A13X000746))
  FREE PACKAGE(FRNCOL01.FRNA0010.())
  FREE PACKAGE(FRNCOL01.FRNA0090.())
  FREE PACKAGE(A2P.YKS0801.(A13X000736))
  FREE PACKAGE(FRNCOL01.FRNV0010.())
  FREE PACKAGE(BF.BF8651.(A06M018600))
  FREE PACKAGE(BF.BF8655.(A06M018600))
  FREE PACKAGE(MF.MF8150.(A06M020109))
  FREE PACKAGE(MF.MF8900.(A06M020109))
  FREE PACKAGE(MF.MF8230.(A06M020109))
  FREE PACKAGE(GROUP00.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP01.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP02.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP03.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP04.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP05.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP06.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP07.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP08.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP09.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP10.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP11.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP12.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP13.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP14.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP15.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP16.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP17.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP18.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP19.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP20.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP21.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP22.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP23.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP24.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP25.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP26.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP27.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP28.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP29.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP30.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP31.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP32.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP33.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP34.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP35.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP36.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP37.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP38.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP39.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP40.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP41.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP42.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP43.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP44.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP45.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP46.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP47.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP48.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP49.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP50.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP51.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP52.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP53.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP54.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP55.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP56.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP57.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP58.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP59.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP60.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP61.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP62.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP63.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP64.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP65.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP66.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP67.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP68.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP69.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP70.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP71.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP72.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP73.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP74.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP75.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP76.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP77.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP78.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP79.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP80.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP81.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP82.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP83.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP84.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP85.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP86.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP87.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP88.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP89.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP90.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP91.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP92.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP93.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP94.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP95.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP96.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP97.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP98.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP99.CBRHDBS.(399935218383464102))
  FREE PACKAGE(GROUP00.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP01.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP02.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP03.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP04.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP05.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP06.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP07.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP08.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP09.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP10.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP11.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP12.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP13.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP14.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP15.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP16.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP17.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP18.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP19.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP20.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP21.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP22.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP23.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP24.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP25.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP26.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP27.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP28.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP29.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP30.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP31.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP32.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP33.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP34.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP35.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP36.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP37.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP38.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP39.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP40.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP41.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP42.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP43.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP44.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP45.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP46.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP47.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP48.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP49.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP50.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP51.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP52.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP53.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP54.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP55.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP56.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP57.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP58.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP59.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP60.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP61.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP62.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP63.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP64.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP65.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP66.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP67.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP68.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP69.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP70.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP71.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP72.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP73.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP74.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP75.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP76.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP77.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP78.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP79.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP80.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP81.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP82.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP83.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP84.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP85.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP86.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP87.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP88.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP89.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP90.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP91.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP92.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP93.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP94.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP95.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP96.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP97.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP98.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(GROUP99.CBRIDBS.(UW83215HDZ11F0))
  FREE PACKAGE(CBRHTBSV.CBRHTBSV.(2001-10-13-07.42.57.947861))
  FREE PACKAGE(CBRKCMT.CBRKCMT.(496778316382894076))
  FREE PACKAGE(CBRKCMI.CBRKCMI.(2001-10-13-07.52.05.021153))
  FREE PACKAGE(CBRKCME.CBRKCME.(2001-10-13-07.52.05.555969))
  FREE PACKAGE(CBRKISQL.CBRKISQL.(2001-10-13-07.52.02.718127))
  FREE PACKAGE(CBRKCMF.CBRKCMF.(2001-10-13-07.52.03.537835))
  FREE PACKAGE(CBRKCMR.CBRKCMR.(2001-10-13-07.52.07.338503))
  FREE PACKAGE(CBRKCMD.CBRKCMD.(2001-10-13-07.52.12.042110))
  FREE PACKAGE(CBRHCLMK.CBRHCLMK.(2001-10-13-07.27.03.676666))
  FREE PACKAGE(CBRHCLSG.CBRHCLSG.(2001-10-13-07.27.08.841977))
  FREE PACKAGE(CBRHCAUD.CBRHCAUD.(2001-10-13-07.26.46.301597))
  FREE PACKAGE(CBRHCLLU.CBRHCLLU.(2001-10-13-07.26.46.343786))
  FREE PACKAGE(CBRHCLDL.CBRHCLDL.(2001-10-13-07.26.50.951657))
  FREE PACKAGE(GROUP00.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP01.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP02.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP03.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP04.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP05.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP06.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP07.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP08.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP09.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP10.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP11.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP12.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP13.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP14.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP15.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP16.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP17.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP18.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP19.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP20.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP21.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP22.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP23.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP24.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP25.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP26.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP27.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP28.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP29.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP30.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP31.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP32.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP33.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP34.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP35.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP36.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP37.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP38.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP39.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP40.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP41.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP42.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP43.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP44.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP45.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP46.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP47.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP48.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP49.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP50.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP51.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP52.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP53.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP54.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP55.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP56.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP57.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP58.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP59.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP60.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP61.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP62.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP63.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP64.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP65.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP66.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP67.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP68.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP69.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP70.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP71.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP72.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP73.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP74.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP75.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP76.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP77.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP78.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP79.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP80.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP81.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP82.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP83.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP84.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP85.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP86.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP87.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP88.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP89.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP90.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP91.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP92.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP93.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP94.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP95.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP96.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP97.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP98.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP99.CBRHDBCV.(294249629382893950))
  FREE PACKAGE(GROUP00.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP01.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP02.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP03.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP04.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP05.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP06.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP07.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP08.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP09.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP10.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP11.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP12.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP13.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP14.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP15.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP16.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP17.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP18.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP19.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP20.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP21.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP22.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP23.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP24.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP25.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP26.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP27.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP28.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP29.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP30.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP31.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP32.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP33.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP34.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP35.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP36.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP37.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP38.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP39.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP40.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP41.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP42.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP43.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP44.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP45.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP46.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP47.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP48.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP49.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP50.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP51.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP52.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP53.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP54.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP55.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP56.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP57.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP58.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP59.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP60.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP61.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP62.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP63.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP64.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP65.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP66.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP67.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP68.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP69.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP70.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP71.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP72.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP73.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP74.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP75.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP76.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP77.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP78.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP79.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP80.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP81.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP82.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP83.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP84.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP85.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP86.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP87.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP88.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP89.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP90.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP91.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP92.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP93.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP94.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP95.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP96.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP97.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP98.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP99.CBRHDBSD.(118038573382893951))
  FREE PACKAGE(GROUP00.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP01.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP02.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP03.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP04.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP05.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP06.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP07.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP08.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP09.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP10.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP11.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP12.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP13.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP14.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP15.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP16.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP17.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP18.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP19.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP20.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP21.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP22.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP23.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP24.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP25.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP26.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP27.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP28.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP29.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP30.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP31.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP32.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP33.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP34.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP35.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP36.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP37.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP38.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP39.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP40.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP41.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP42.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP43.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP44.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP45.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP46.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP47.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP48.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP49.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP50.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP51.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP52.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP53.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP54.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP55.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP56.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP57.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP58.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP59.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP60.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP61.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP62.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP63.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP64.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP65.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP66.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP67.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP68.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP69.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP70.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP71.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP72.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP73.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP74.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP75.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP76.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP77.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP78.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP79.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP80.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP81.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP82.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP83.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP84.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP85.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP86.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP87.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP88.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP89.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP90.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP91.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP92.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP93.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP94.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP95.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP96.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP97.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP98.CBRHDBS.(368069393382893951))
  FREE PACKAGE(GROUP99.CBRHDBS.(368069393382893951))
  FREE PACKAGE(CZ.CZ6060.(CRME000713))
  FREE PACKAGE(SE.SE0560.(A20Y000517))
  FREE PACKAGE(SE.SE0560.(A20Y000936))
  FREE PACKAGE(DAA400_D_MAIN.PSSRULE.(V3401))
  FREE PACKAGE(FRNCOL01.FRNV0090.())
  FREE PACKAGE(DAA400_D_MAIN.PSSHSQL.(V4000))
  FREE PACKAGE(DAA400_D_MAIN.PSSIMPC.(V4000))
  FREE PACKAGE(BF.YBF530A.(19980416230450S101702M000838AYBF530A))
  FREE PACKAGE(AV.YAV0491.(19980416230442S101702M000838AYAV0491))
  FREE PACKAGE(AV.YAV0492.(19980416230443S101702M000838AYAV0492))
  FREE PACKAGE(BF.YBF530C.(19980416230451S101702M000838AYBF530C))
  FREE PACKAGE(WK.YWKLUBO.(19980416231747S101702M000838AYWKLUBO))
  FREE PACKAGE(WK.YWK019A.(19980416231839S101702M000838AYWK019A))
  FREE PACKAGE(YY.YYFIKUR.(19980416232808S101702M000838AYYFIKUR))
  FREE PACKAGE(YY.YYFIBPR.(19980416232803S101702M000838AYYFIBPR))
  FREE PACKAGE(YY.YYFIKUR.(19980416232808CGS101702M000838AYYFIKUR))
  FREE PACKAGE(BG.BG5030.(19980417004708S101702M000838ABG5030))
  FREE PACKAGE(VT.YVTAFS.(19980416170514S101702M000874AYVTAFS))
  FREE PACKAGE(SA.SA0980.(19980416172032S101702M000874ASA0980))
  FREE PACKAGE(RR.RR8050.(19980416192336S101702M000898ARR8050))
  FREE PACKAGE(RR.RR0210.(19980416192021S101702M000898ARR0210))
  FREE PACKAGE(RR.RR0180.(19980416191920S101702M000898ARR0180))
  FREE PACKAGE(ED.YED0034.(19980416190527S101702M000898AYED0034))
  FREE PACKAGE(RR.RR8100.(19980416191507S101702M000898ARR8100))
  FREE PACKAGE(RR.RR8220.(19980416191508S101702M000898ARR8220))
  FREE PACKAGE(RR.RR0060.(19980416191916S101702M000898ARR0060))
  FREE PACKAGE(BG.BG5030.(19980417164021S101702M000838ABG5030))
  FREE PACKAGE(WK.YWK019A.(19980417151206S101702M000838AYWK019A))
  FREE PACKAGE(YY.YYFIBPR.(19980417151921S101702M000838AYYFIBPR))
  FREE PACKAGE(YY.YYFIKUR.(19980417151937S101702M000838AYYFIKUR))
  FREE PACKAGE(BF.YBF530A.(19980417145719S101702M000838AYBF530A))
  FREE PACKAGE(BF.YBF530C.(19980417145719S101702M000838AYBF530C))
  FREE PACKAGE(AV.YAV0492.(19980417145714S101702M000838AYAV0492))
  FREE PACKAGE(AV.YAV0491.(19980417145713S101702M000838AYAV0491))
  FREE PACKAGE(YY.YYFIKUR.(19980417151937CGS101702M000838AYYFIKUR))
  FREE PACKAGE(WK.YWKLUBO.(19980417151059S101702M000838AYWKLUBO))
  FREE PACKAGE(WK.YWKLUBO.(19980424142817S101702Z371584AYWKLUBO))
  FREE PACKAGE(AV.PB7100.(19980429143617S101702Z372375APB7100))
  FREE PACKAGE(RM.RM9200.(19980430141653S101702A072046ARM9200))
  FREE PACKAGE(EC.EC8140.(19980430141651S101702A072032AEC8140))
  FREE PACKAGE(PT.PT8490.(19980430141812S101702A072050APT8490))
  FREE PACKAGE(PHPSPTA.HAXPRST.())
  FREE PACKAGE(PHPS53.HAXPRST.())
  FREE PACKAGE(WB.WB7430.(19980507164320S101702A072243AWB7430))
  FREE PACKAGE(WB.WB7530.(19980507164321S101702A072243AWB7530))
  FREE PACKAGE(KS.YKS5551.(19980507134024S101702A072187AYKS5551))
  FREE PACKAGE(NTA1P.AT0090.(CIMA000675))
  FREE PACKAGE(KS.YKS0813.(19980516114927S101702Z374928AYKS0813))
  FREE PACKAGE(PHPSPTA.GLCNVRT.())
  FREE PACKAGE(PHPS53.GLCNVRT.())
  FREE PACKAGE(NTA1P.BC0008.(CRMB000360))
  FREE PACKAGE(NF.NF5800.(19980514184411S101702A072505ANF5800))
  FREE PACKAGE(KS.YKS0813.(19980514190151S101702A072512AYKS0813))
  FREE PACKAGE(KS.YKS0806.(19980514190144S101702A072512AYKS0806))
  FREE PACKAGE(KS.YKS0802.(19980514190209S101702A072512AYKS0802))
  FREE PACKAGE(EX.YEXERG.(19980514135917S101702A072308AYEXERG))
  FREE PACKAGE(EX.YEXERG.(19980514135917CGS101702A072308AYEXERG))
  FREE PACKAGE(KS.YKS5551.(19980514140042S101702A072309AYKS5551))
  FREE PACKAGE(PT.PT8550.(19980514142122S101702A072418APT8550))
  FREE PACKAGE(CI.YCI009.(19980514165332S101702M000860AYCI009))
  FREE PACKAGE(CI.YCI009A.(19980514165332S101702M000860AYCI009A))
  FREE PACKAGE(NK.NK8060.(19980514170635S101702M000860ANK8060))
  FREE PACKAGE(NK.NK7000.(19980514170631S101702M000860ANK7000))
  FREE PACKAGE(NK.NK5130.(19980514170630S101702M000860ANK5130))
  FREE PACKAGE(NK.NK8010.(19980514170632S101702M000860ANK8010))
  FREE PACKAGE(NK.NK8050.(19980514170633S101702M000860ANK8050))
  FREE PACKAGE(NK.NK8030.(19980514170633S101702M000860ANK8030))
  FREE PACKAGE(CD.CD7360.(19980514170508S101702M000860ACD7360))
  FREE PACKAGE(AS.AS8992.(19980514171537S101702M000860AAS8992))
  FREE PACKAGE(AT.AT7225.(19980514171958S101702A072293AAT7225))
  FREE PACKAGE(NK.NK8180.(19980514170648S101702M000860ANK8180))
  FREE PACKAGE(NK.NK5020.(19980514170627S101702M000860ANK5020))
  FREE PACKAGE(NK.NK5010.(19980514170627S101702M000860ANK5010))
  FREE PACKAGE(NK.NK5120.(19980514170629S101702M000860ANK5120))
  FREE PACKAGE(NK.NK5170.(19980514170630S101702M000860ANK5170))
  FREE PACKAGE(NK.NK5050.(19980514170628S101702M000860ANK5050))
  FREE PACKAGE(BF.YBF530C.(19980514171120S101702A072190AYBF530C))
  FREE PACKAGE(BF.YBF530A.(19980514170908S101702A072190AYBF530A))
  FREE PACKAGE(WK.YWKLUBO.(19980515095019S101702M000839AYWKLUBO))
  FREE PACKAGE(YY.YYFISER.(19980515095453S101702M000839AYYFISER))
  FREE PACKAGE(BG.BG5030.(19980515101751S101702M000839ABG5030))
  FREE PACKAGE(AV.AV8780.(19980515101750S101702M000839AAV8780))
  FREE PACKAGE(AV.YAV0491.(19980520132114S101702M000911AYAV0491))
  FREE PACKAGE(KS.YKS5552.(19980520132122S101702A072626AYKS5552))
  FREE PACKAGE(AV.YAV0492.(19980520132114S101702M000911AYAV0492))
  FREE PACKAGE(SX.YSX8105.(19980520140317S101702M000912AYSX8105))
  FREE PACKAGE(PT.YPTBAK.(19980520142938S101702A072384AYPTBAK))
  FREE PACKAGE(AV.YAV0491.(19980216163702S101702Z360000AYAV0491))
  FREE PACKAGE(AV.YAV0492.(19980216094354S101702Z360001AYAV0492))
  FREE PACKAGE(AV.YAV0491.(19980216094309S101702Z360000AYAV0491))
  FREE PACKAGE(AV.YAV0491.(19980216232923S101702Z360000AYAV0491))
  FREE PACKAGE(AV.YAV0492.(19980217190815S101702Z360615AYAV0492))
  FREE PACKAGE(AV.YAV0491.(19980217190729S101702Z360614AYAV0491))
  FREE PACKAGE(VT.YVT0623.(19980217150354S101702A070537AYVT0623))
  FREE PACKAGE(YY.YYFIKUR.(19980212144259S101702M000834AYYFIKUR))
  FREE PACKAGE(KS.YKSMODU.(19980212144151S101702M000834AYKSMODU))
  FREE PACKAGE(KS.YKSAUFT.(19980212144151S101702M000834AYKSAUFT))
  FREE PACKAGE(YY.YYFIKUR.(19980212144259CGS101702M000834AYYFIKUR))
  FREE PACKAGE(AV.YAV0492.(19980212144910S101702M000834AYAV0492))
  FREE PACKAGE(AV.YAV0491.(19980212144909S101702M000834AYAV0491))
  FREE PACKAGE(NF.NF5890.(19980212145537S101702M000834ANF5890))
  FREE PACKAGE(RR.RR8050.(19980212150044S101702M000834ARR8050))
  FREE PACKAGE(WK.YWKLUBO.(19980212171239S101702M000836AYWKLUBO))
  FREE PACKAGE(SA.YSA0234.(19980212130815S101702M000885AYSA0234))
  FREE PACKAGE(SA.YSA0235.(19980212130815S101702M000885AYSA0235))
  FREE PACKAGE(SA.YSA0231.(19980212130817S101702M000885AYSA0231))
  FREE PACKAGE(SA.YSA0232.(19980212130817S101702M000885AYSA0232))
  FREE PACKAGE(SA.YSA0233.(19980212130818S101702M000885AYSA0233))
  FREE PACKAGE(DU.DU7070.(19980212134113S101702A070276ADU7070))
  FREE PACKAGE(VT.YVT0802.(19980212134231S101702A070371AYVT0802))
  FREE PACKAGE(VT.YVT0806.(19980212134234S101702A070371AYVT0806))
  FREE PACKAGE(VT.YVT0809.(19980212134236S101702A070371AYVT0809))
  FREE PACKAGE(VT.YVT0805.(19980212134233S101702A070371AYVT0805))
  FREE PACKAGE(VT.YVT0801.(19980212134230S101702A070371AYVT0801))
  FREE PACKAGE(VT.YVT0804.(19980212134232S101702A070371AYVT0804))
  FREE PACKAGE(VT.YVT0803.(19980212134231S101702A070371AYVT0803))
  FREE PACKAGE(SA.YSAOBP.(19980212191614S101702M000891AYSAOBP))
  FREE PACKAGE(SX.SX0750.(19980212191931S101702M000891ASX0750))
  FREE PACKAGE(AV.YAV0491.(19980218153923S101702Z360822AYAV0491))
  FREE PACKAGE(NK.NK8150.(19980219182538S101702A070555ANK8150))
  FREE PACKAGE(KS.YKS5553.(19980219190855S101702A070545AYKS5553))
  FREE PACKAGE(AV.YAV0492.(19980219191324S101702A070586AYAV0492))
  FREE PACKAGE(AV.YAV0491.(19980219191321S101702A070586AYAV0491))
  FREE PACKAGE(VT.VT7798.(19980220130604S101702A070613AVT7798))
  FREE PACKAGE(VP.YVP7401.(19980220093422S101702Z360998AYVP7401))
  FREE PACKAGE(KS.YKS5553.(19980220190032S101702A070545AYKS5553))
  FREE PACKAGE(VT.YVT0731.(19980302164021S101702A070775AYVT0731))
  FREE PACKAGE(VP.YVP7401.(19980226131233S101702A070664AYVP7401))
  FREE PACKAGE(NK.NK8300.(19980226131317S101702A070680ANK8300))
  FREE PACKAGE(AV.YAV0492.(19980226131307S101702A070685AYAV0492))
  FREE PACKAGE(AV.YAV0491.(19980226131304S101702A070685AYAV0491))
  FREE PACKAGE(YY.YYCXCR.(19980226131415S101702A070718AYYCXCR))
  FREE PACKAGE(YY.YYDEPAY.(19980226135927S101702A070724AYYDEPAY))
  FREE PACKAGE(LB.YLB0115.(19980305182800S101702M000837AYLB0115))
  FREE PACKAGE(AV.YAV0492.(19980305182323S101702M000837AYAV0492))
  FREE PACKAGE(WK.YWKLUBO.(19980305180826S101702M000837AYWKLUBO))
  FREE PACKAGE(AV.YAV0491.(19980305182245S101702M000837AYAV0491))
  FREE PACKAGE(LB.YLB0113.(19980305182743S101702M000837AYLB0113))
  FREE PACKAGE(VT.YVT0623.(19980305141315S101702A070824AYVT0623))
  FREE PACKAGE(SE.YSE0310.(19980312140704S101702A071005AYSE0310))
  FREE PACKAGE(KS.YKS0802.(19980312140727S101702A071004AYKS0802))
  FREE PACKAGE(KS.YKS0806.(19980312140715S101702A071004AYKS0806))
  FREE PACKAGE(EC.YECAVKY.(19980312162557S101702A070997AYECAVKY))
  FREE PACKAGE(EC.YECAVKY.(19980312175734S101702A070997AYECAVKY))
  FREE PACKAGE(SX.YSX8105.(19980320112646S101702A071216AYSX8105))
  FREE PACKAGE(SX.YSX5405.(19980320071931S101702Z365731AYSX5405))
  FREE PACKAGE(SX.YSX5405.(19980320083218S101702A071206AYSX5405))
  FREE PACKAGE(PI.PT5310.(19980316142018S101702A071106APT5310))
  FREE PACKAGE(PT.PT5310.(19980316142018S101702A071106APT5310))
  FREE PACKAGE(PI.PT5500.(19980316142018S101702A071106APT5500))
  FREE PACKAGE(PT.PT5500.(19980316142018S101702A071106APT5500))
  FREE PACKAGE(PI.PT5310.(19980316145200S101702A071106APT5310))
  FREE PACKAGE(PT.PT5310.(19980316145200S101702A071106APT5310))
  FREE PACKAGE(PI.PT5500.(19980316145200S101702A071106APT5500))
  FREE PACKAGE(PT.PT5500.(19980316145200S101702A071106APT5500))
  FREE PACKAGE(PI.PT5500.(19980316155306S101702A071106APT5500))
  FREE PACKAGE(PT.PT5500.(19980316155306S101702A071106APT5500))
  FREE PACKAGE(PI.PT5310.(19980316155305S101702A071106APT5310))
  FREE PACKAGE(PT.PT5310.(19980316155305S101702A071106APT5310))
  FREE PACKAGE(AV.YAV0492.(19980316171625S101702Z365003AYAV0492))
  FREE PACKAGE(AV.YAV0491.(19980316171545S101702Z365002AYAV0491))
  FREE PACKAGE(NTA1P.AT0070.(CIMA000663))
  FREE PACKAGE(EV.EV5080.(19980319140048S101702A070940AEV5080))
  FREE PACKAGE(YY.EV0520.(19980319140102S101702A070940AEV0520))
  FREE PACKAGE(SX.YSXFLOG.(19980319145352S101702M000893AYSXFLOG))
  FREE PACKAGE(SA.YSA67S1.(19980319145252S101702M000893AYSA67S1))
  FREE PACKAGE(SX.YSX5405.(19980319145256S101702M000893AYSX5405))
  FREE PACKAGE(SX.YSX81S1.(19980319145410S101702M000893AYSX81S1))
  FREE PACKAGE(SX.YSX8105.(19980319145430S101702M000893AYSX8105))
  FREE PACKAGE(RR.RR0240.(19980319142249S101702A071155ARR0240))
  FREE PACKAGE(RR.RR0180.(19980319142247S101702A071155ARR0180))
  FREE PACKAGE(RR.RR0210.(19980319142248S101702A071155ARR0210))
  FREE PACKAGE(SA.SA5170.(19980319145848S101702M000893ASA5170))
  FREE PACKAGE(AV.YAV0491.(19980319155434S101702M000894AYAV0491))
  FREE PACKAGE(AV.YAV0492.(19980319155435S101702M000894AYAV0492))
  FREE PACKAGE(RR.RR0060.(19980326141010S101702A071251ARR0060))
  FREE PACKAGE(VP.VP7410.(19980401210424S101702Z367944AVP7410))
  FREE PACKAGE(VP.VP7410.(19980402142025S101702A071473AVP7410))
  FREE PACKAGE(SX.YSX8105.(19980402142035S101702A071385AYSX8105))
  FREE PACKAGE(SX.YSX81S1.(19980402142033S101702A071385AYSX81S1))
  FREE PACKAGE(SA.SA0980.(19980402142445S101702A071385ASA0980))
  FREE PACKAGE(RR.RR0060.(19980402140829S101702A071359ARR0060))
  FREE PACKAGE(RR.RR8050.(19980402140836S101702A071359ARR8050))
  FREE PACKAGE(YY.YYWBTMS.(19980402145954S101702A071235AYYWBTMS))
  FREE PACKAGE(AV.YAV0491.(19980402152529S101702A071451AYAV0491))
  FREE PACKAGE(AV.YAV0492.(19980402152532S101702A071451AYAV0492))
  FREE PACKAGE(RR.RR7510.(19980402152456S101702A071430ARR7510))
  FREE PACKAGE(RR.RR7530.(19980402152459S101702A071430ARR7530))
  FREE PACKAGE(CD.CD7360.(19980402152138S101702A071420ACD7360))
  FREE PACKAGE(RR.RR7510.(19980402174722S101702A071430ARR7510))
  FREE PACKAGE(AV.YAV0492.(19980402174757S101702A071451AYAV0492))
  FREE PACKAGE(EC.EC8140.(19980402174847S101702A071444AEC8140))
  FREE PACKAGE(RR.RR7530.(19980402174728S101702A071430ARR7530))
  FREE PACKAGE(AV.YAV0491.(19980402174755S101702A071451AYAV0491))
  FREE PACKAGE(CD.CD7360.(19980402174642S101702A071420ACD7360))
  FREE PACKAGE(YY.YYWBTMS.(19980402173431S101702A071235AYYWBTMS))
  FREE PACKAGE(YY.YYWBTMS.(19980402184148S101702A071235AYYWBTMS))
  FREE PACKAGE(SX.YSX5405.(19980403101803S101702A071482AYSX5405))
  FREE PACKAGE(SX.YSX5405.(19980403085402S101702Z368118AYSX5405))
  FREE PACKAGE(EC.YECAVKY.(19980403141026S101702A071472AYECAVKY))
  FREE PACKAGE(YY.YYWBTMS.(19980403150226S101702A071235AYYWBTMS))
  FREE PACKAGE(KS.YKS5551.(19980403151109S101702Z368246AYKS5551))
  FREE PACKAGE(RR.RR7510.(19980330165030S101702Z367465ARR7510))
  FREE PACKAGE(VT.YVTAFS.(19980409113931S101702Z369138AYVTAFS))
  FREE PACKAGE(SA.YSAT805.(19980409192933S101702A071661AYSAT805))
  FREE PACKAGE(SA.YSAT803.(19980409192932S101702A071661AYSAT803))
  FREE PACKAGE(SA.YSAT801.(19980409192934S101702A071661AYSAT801))
  FREE PACKAGE(SA.YSAT802.(19980409192934S101702A071661AYSAT802))
  FREE PACKAGE(SA.YSA67S1.(19980409192933S101702A071661AYSA67S1))
  FREE PACKAGE(PHPSPTA.HMPBNDR4.())
  FREE PACKAGE(PHPS53.HMPBNDR4.())
  FREE PACKAGE(PHPSPTA.GTTOGGL.())
  FREE PACKAGE(PHPS53.GTTOGGL.())
  FREE PACKAGE(YY.YYWBTMS.(19980406113742S101702A071510AYYWBTMS))
  FREE PACKAGE(SA.YSA67S1.(A16M000011))
  FREE PACKAGE(AS.AS8992.(A15T000038))
  FREE PACKAGE(FRNIBMCL.FRNMHB10.())
  FREE PACKAGE(FRNIBMCL.FRNMHB12.())
  FREE PACKAGE(FRNIBMCL.FRNPLLQ3.())
  FREE PACKAGE(FRNIBMCL.FRNPLLUQ.())
  FREE PACKAGE(FRNIBMCL.FRNPLLQ4.())
  FREE PACKAGE(PHPSPTA.HMCCFGV.())
  FREE PACKAGE(PHPS53.HMCCFGV.())
  FREE PACKAGE(PHPSPTA.H0038.())
  FREE PACKAGE(PHPS53.H0038.())
  FREE PACKAGE(PHPSPTA.H0039.())
  FREE PACKAGE(PHPS53.H0039.())
  FREE PACKAGE(PHPSPTA.H0026.())
  FREE PACKAGE(PHPS53.H0026.())
  FREE PACKAGE(PHPSPTA.H0033.())
  FREE PACKAGE(PHPS53.H0033.())
  FREE PACKAGE(PHPSPTA.H0034.())
  FREE PACKAGE(PHPS53.H0034.())
  FREE PACKAGE(PHPSPTA.H0035.())
  FREE PACKAGE(PHPS53.H0035.())
  FREE PACKAGE(PHPSPTA.H0043.())
  FREE PACKAGE(PHPS53.H0043.())
  FREE PACKAGE(PHPSPTA.H0044.())
  FREE PACKAGE(PHPS53.H0044.())
  FREE PACKAGE(PHPSPTA.H0040.())
  FREE PACKAGE(PHPS53.H0040.())
  FREE PACKAGE(PHPSPTA.H0041.())
  FREE PACKAGE(PHPS53.H0041.())
  FREE PACKAGE(PHPSPTA.H0042.())
  FREE PACKAGE(PHPS53.H0042.())
  FREE PACKAGE(PHPSPTA.H0048.())
  FREE PACKAGE(PHPS53.H0048.())
  FREE PACKAGE(PHPSPTA.H0045.())
  FREE PACKAGE(PHPS53.H0045.())
  FREE PACKAGE(PHPSPTA.H0046.())
  FREE PACKAGE(PHPS53.H0046.())
  FREE PACKAGE(PHPSPTA.H0047.())
  FREE PACKAGE(PHPS53.H0047.())
  FREE PACKAGE(PHPSPTA.H0002.())
  FREE PACKAGE(PHPS53.H0002.())
  FREE PACKAGE(PHPSPTA.H0005.())
  FREE PACKAGE(PHPS53.H0005.())
  FREE PACKAGE(PHPSPTA.H0006.())
  FREE PACKAGE(PHPS53.H0006.())
  FREE PACKAGE(PHPSPTA.H0003.())
  FREE PACKAGE(PHPS53.H0003.())
  FREE PACKAGE(PHPSPTA.H0004.())
  FREE PACKAGE(PHPS53.H0004.())
  FREE PACKAGE(PHPSPTA.H0007.())
  FREE PACKAGE(PHPS53.H0007.())
  FREE PACKAGE(PHPSPTA.H0008.())
  FREE PACKAGE(PHPS53.H0008.())
  FREE PACKAGE(PHPSPTA.H0009.())
  FREE PACKAGE(PHPS53.H0009.())
  FREE PACKAGE(PHPSPTA.H0015.())
  FREE PACKAGE(PHPS53.H0015.())
  FREE PACKAGE(PHPSPTA.H0011.())
  FREE PACKAGE(PHPS53.H0011.())
  FREE PACKAGE(PHPSPTA.H0012.())
  FREE PACKAGE(PHPS53.H0012.())
  FREE PACKAGE(PHPSPTA.H0013.())
  FREE PACKAGE(PHPS53.H0013.())
  FREE PACKAGE(PHPSPTA.H0019.())
  FREE PACKAGE(PHPS53.H0019.())
  FREE PACKAGE(PHPSPTA.H0016.())
  FREE PACKAGE(PHPS53.H0016.())
  FREE PACKAGE(PHPSPTA.H0017.())
  FREE PACKAGE(PHPS53.H0017.())
  FREE PACKAGE(PHPSPTA.H0018.())
  FREE PACKAGE(PHPS53.H0018.())
  FREE PACKAGE(PHPSPTA.H0025.())
  FREE PACKAGE(PHPS53.H0025.())
  FREE PACKAGE(PHPSPTA.H0020.())
  FREE PACKAGE(PHPS53.H0020.())
  FREE PACKAGE(PHPSPTA.H0021.())
  FREE PACKAGE(PHPS53.H0021.())
  FREE PACKAGE(PHPSPTA.H0022.())
  FREE PACKAGE(PHPS53.H0022.())
  FREE PACKAGE(PHPSPTA.H0023.())
  FREE PACKAGE(PHPS53.H0023.())
  FREE PACKAGE(PHPSPTA.H0105.())
  FREE PACKAGE(PHPS53.H0105.())
  FREE PACKAGE(PHPSPTA.H0106.())
  FREE PACKAGE(PHPS53.H0106.())
  FREE PACKAGE(PHPSPTA.H0102.())
  FREE PACKAGE(PHPS53.H0102.())
  FREE PACKAGE(PHPSPTA.H0103.())
  FREE PACKAGE(PHPS53.H0103.())
  FREE PACKAGE(PHPSPTA.H0104.())
  FREE PACKAGE(PHPS53.H0104.())
  FREE PACKAGE(PHPSPTA.H0051.())
  FREE PACKAGE(PHPS53.H0051.())
  FREE PACKAGE(PHPSPTA.H0052.())
  FREE PACKAGE(PHPS53.H0052.())
  FREE PACKAGE(PHPSPTA.H0056.())
  FREE PACKAGE(PHPS53.H0056.())
  FREE PACKAGE(PHPSPTA.H0057.())
  FREE PACKAGE(PHPS53.H0057.())
  FREE PACKAGE(PHPSPTA.H0053.())
  FREE PACKAGE(PHPS53.H0053.())
  FREE PACKAGE(PHPSPTA.H0054.())
  FREE PACKAGE(PHPS53.H0054.())
  FREE PACKAGE(PHPSPTA.H0055.())
  FREE PACKAGE(PHPS53.H0055.())
  FREE PACKAGE(PHPSPTA.H0062.())
  FREE PACKAGE(PHPS53.H0062.())
  FREE PACKAGE(PHPSPTA.H0063.())
  FREE PACKAGE(PHPS53.H0063.())
  FREE PACKAGE(PHPSPTA.H0058.())
  FREE PACKAGE(PHPS53.H0058.())
  FREE PACKAGE(PHPSPTA.H0059.())
  FREE PACKAGE(PHPS53.H0059.())
  FREE PACKAGE(PHPSPTA.H0060.())
  FREE PACKAGE(PHPS53.H0060.())
  FREE PACKAGE(PHPSPTA.H0061.())
  FREE PACKAGE(PHPS53.H0061.())
  FREE PACKAGE(PHPSPTA.H0068.())
  FREE PACKAGE(PHPS53.H0068.())
  FREE PACKAGE(PHPSPTA.H0069.())
  FREE PACKAGE(PHPS53.H0069.())
  FREE PACKAGE(PHPSPTA.H0065.())
  FREE PACKAGE(PHPS53.H0065.())
  FREE PACKAGE(PHPSPTA.H0066.())
  FREE PACKAGE(PHPS53.H0066.())
  FREE PACKAGE(PHPSPTA.H0067.())
  FREE PACKAGE(PHPS53.H0067.())
  FREE PACKAGE(PHPSPTA.H0075.())
  FREE PACKAGE(PHPS53.H0075.())
  FREE PACKAGE(PHPSPTA.H0076.())
  FREE PACKAGE(PHPS53.H0076.())
  FREE PACKAGE(PHPSPTA.H0070.())
  FREE PACKAGE(PHPS53.H0070.())
  FREE PACKAGE(PHPSPTA.H0072.())
  FREE PACKAGE(PHPS53.H0072.())
  FREE PACKAGE(PHPSPTA.H0074.())
  FREE PACKAGE(PHPS53.H0074.())
  FREE PACKAGE(PHPSPTA.H0081.())
  FREE PACKAGE(PHPS53.H0081.())
  FREE PACKAGE(PHPSPTA.H0077.())
  FREE PACKAGE(PHPS53.H0077.())
  FREE PACKAGE(PHPSPTA.H0078.())
  FREE PACKAGE(PHPS53.H0078.())
  FREE PACKAGE(PHPSPTA.H0079.())
  FREE PACKAGE(PHPS53.H0079.())
  FREE PACKAGE(PHPSPTA.H0080.())
  FREE PACKAGE(PHPS53.H0080.())
  FREE PACKAGE(PHPSPTA.H0085.())
  FREE PACKAGE(PHPS53.H0085.())
  FREE PACKAGE(PHPSPTA.H0090.())
  FREE PACKAGE(PHPS53.H0090.())
  FREE PACKAGE(PHPSPTA.H0082.())
  FREE PACKAGE(PHPS53.H0082.())
  FREE PACKAGE(PHPSPTA.H0083.())
  FREE PACKAGE(PHPS53.H0083.())
  FREE PACKAGE(PHPSPTA.H0084.())
  FREE PACKAGE(PHPS53.H0084.())
  FREE PACKAGE(PHPSPTA.H0094.())
  FREE PACKAGE(PHPS53.H0094.())
  FREE PACKAGE(PHPSPTA.H0095.())
  FREE PACKAGE(PHPS53.H0095.())
  FREE PACKAGE(PHPSPTA.H0091.())
  FREE PACKAGE(PHPS53.H0091.())
  FREE PACKAGE(PHPSPTA.H0092.())
  FREE PACKAGE(PHPS53.H0092.())
  FREE PACKAGE(PHPSPTA.H0093.())
  FREE PACKAGE(PHPS53.H0093.())
  FREE PACKAGE(PHPSPTA.H0100.())
  FREE PACKAGE(PHPS53.H0100.())
  FREE PACKAGE(PHPSPTA.H0101.())
  FREE PACKAGE(PHPS53.H0101.())
  FREE PACKAGE(PHPSPTA.H0096.())
  FREE PACKAGE(PHPS53.H0096.())
  FREE PACKAGE(PHPSPTA.H0097.())
  FREE PACKAGE(PHPS53.H0097.())
  FREE PACKAGE(PHPSPTA.H0098.())
  FREE PACKAGE(PHPS53.H0098.())
  FREE PACKAGE(PHPSPTA.H0099.())
  FREE PACKAGE(PHPS53.H0099.())
  FREE PACKAGE(PHPSPTA.H1001.())
  FREE PACKAGE(PHPS53.H1001.())
  FREE PACKAGE(PHPSPTA.H1008.())
  FREE PACKAGE(PHPS53.H1008.())
  FREE PACKAGE(PHPSPTA.H1009.())
  FREE PACKAGE(PHPS53.H1009.())
  FREE PACKAGE(PHPSPTA.H1003.())
  FREE PACKAGE(PHPS53.H1003.())
  FREE PACKAGE(PHPSPTA.H1004.())
  FREE PACKAGE(PHPS53.H1004.())
  FREE PACKAGE(PHPSPTA.H1006.())
  FREE PACKAGE(PHPS53.H1006.())
  FREE PACKAGE(PHPSPTA.H1012.())
  FREE PACKAGE(PHPS53.H1012.())
  FREE PACKAGE(PHPSPTA.H1021.())
  FREE PACKAGE(PHPS53.H1021.())
  FREE PACKAGE(PHPSPTA.H1022.())
  FREE PACKAGE(PHPS53.H1022.())
  FREE PACKAGE(PHPSPTA.H1018.())
  FREE PACKAGE(PHPS53.H1018.())
  FREE PACKAGE(PHPSPTA.H1019.())
  FREE PACKAGE(PHPS53.H1019.())
  FREE PACKAGE(PHPSPTA.H1027.())
  FREE PACKAGE(PHPS53.H1027.())
  FREE PACKAGE(PHPSPTA.H1028.())
  FREE PACKAGE(PHPS53.H1028.())
  FREE PACKAGE(PHPSPTA.H1029.())
  FREE PACKAGE(PHPS53.H1029.())
  FREE PACKAGE(PHPSPTA.H1023.())
  FREE PACKAGE(PHPS53.H1023.())
  FREE PACKAGE(PHPSPTA.H1024.())
  FREE PACKAGE(PHPS53.H1024.())
  FREE PACKAGE(PHPSPTA.H1025.())
  FREE PACKAGE(PHPS53.H1025.())
  FREE PACKAGE(PHPSPTA.H1026.())
  FREE PACKAGE(PHPS53.H1026.())
  FREE PACKAGE(PHPSPTA.H1035.())
  FREE PACKAGE(PHPS53.H1035.())
  FREE PACKAGE(PHPSPTA.H1036.())
  FREE PACKAGE(PHPS53.H1036.())
  FREE PACKAGE(PHPSPTA.H1031.())
  FREE PACKAGE(PHPS53.H1031.())
  FREE PACKAGE(PHPSPTA.H1032.())
  FREE PACKAGE(PHPS53.H1032.())
  FREE PACKAGE(PHPSPTA.H1033.())
  FREE PACKAGE(PHPS53.H1033.())
  FREE PACKAGE(PHPSPTA.H1034.())
  FREE PACKAGE(PHPS53.H1034.())
  FREE PACKAGE(PHPSPTA.H1041.())
  FREE PACKAGE(PHPS53.H1041.())
  FREE PACKAGE(PHPSPTA.H1042.())
  FREE PACKAGE(PHPS53.H1042.())
  FREE PACKAGE(PHPSPTA.H1038.())
  FREE PACKAGE(PHPS53.H1038.())
  FREE PACKAGE(PHPSPTA.H1039.())
  FREE PACKAGE(PHPS53.H1039.())
  FREE PACKAGE(PHPSPTA.H1040.())
  FREE PACKAGE(PHPS53.H1040.())
  FREE PACKAGE(PHPSPTA.H1051.())
  FREE PACKAGE(PHPS53.H1051.())
  FREE PACKAGE(PHPSPTA.H1043.())
  FREE PACKAGE(PHPS53.H1043.())
  FREE PACKAGE(PHPSPTA.H1044.())
  FREE PACKAGE(PHPS53.H1044.())
  FREE PACKAGE(PHPSPTA.H1046.())
  FREE PACKAGE(PHPS53.H1046.())
  FREE PACKAGE(PHPSPTA.H1047.())
  FREE PACKAGE(PHPS53.H1047.())
  FREE PACKAGE(PHPSPTA.H1056.())
  FREE PACKAGE(PHPS53.H1056.())
  FREE PACKAGE(PHPSPTA.H1057.())
  FREE PACKAGE(PHPS53.H1057.())
  FREE PACKAGE(PHPSPTA.H1058.())
  FREE PACKAGE(PHPS53.H1058.())
  FREE PACKAGE(PHPSPTA.H1062.())
  FREE PACKAGE(PHPS53.H1062.())
  FREE PACKAGE(PHPSPTA.H1063.())
  FREE PACKAGE(PHPS53.H1063.())
  FREE PACKAGE(PHPSPTA.H1059.())
  FREE PACKAGE(PHPS53.H1059.())
  FREE PACKAGE(PHPSPTA.H1060.())
  FREE PACKAGE(PHPS53.H1060.())
  FREE PACKAGE(PHPSPTA.H1061.())
  FREE PACKAGE(PHPS53.H1061.())
  FREE PACKAGE(PHPSPTA.H1067.())
  FREE PACKAGE(PHPS53.H1067.())
  FREE PACKAGE(PHPSPTA.H1065.())
  FREE PACKAGE(PHPS53.H1065.())
  FREE PACKAGE(PHPSPTA.H1066.())
  FREE PACKAGE(PHPS53.H1066.())
  FREE PACKAGE(PHPSPTA.H1073.())
  FREE PACKAGE(PHPS53.H1073.())
  FREE PACKAGE(PHPSPTA.H1074.())
  FREE PACKAGE(PHPS53.H1074.())
  FREE PACKAGE(PHPSPTA.H1069.())
  FREE PACKAGE(PHPS53.H1069.())
  FREE PACKAGE(PHPSPTA.H1071.())
  FREE PACKAGE(PHPS53.H1071.())
  FREE PACKAGE(PHPSPTA.H1072.())
  FREE PACKAGE(PHPS53.H1072.())
  FREE PACKAGE(PHPSPTA.H1148.())
  FREE PACKAGE(PHPS53.H1148.())
  FREE PACKAGE(PHPSPTA.H1149.())
  FREE PACKAGE(PHPS53.H1149.())
  FREE PACKAGE(PHPSPTA.H1150.())
  FREE PACKAGE(PHPS53.H1150.())
  FREE PACKAGE(PHPSPTA.H1153.())
  FREE PACKAGE(PHPS53.H1153.())
  FREE PACKAGE(PHPSPTA.H1154.())
  FREE PACKAGE(PHPS53.H1154.())
  FREE PACKAGE(PHPSPTA.H1155.())
  FREE PACKAGE(PHPS53.H1155.())
  FREE PACKAGE(PHPSPTA.H1151.())
  FREE PACKAGE(PHPS53.H1151.())
  FREE PACKAGE(PHPSPTA.H1152.())
  FREE PACKAGE(PHPS53.H1152.())
  FREE PACKAGE(PHPSPTA.H1160.())
  FREE PACKAGE(PHPS53.H1160.())
  FREE PACKAGE(PHPSPTA.H1156.())
  FREE PACKAGE(PHPS53.H1156.())
  FREE PACKAGE(PHPSPTA.H1157.())
  FREE PACKAGE(PHPS53.H1157.())
  FREE PACKAGE(PHPSPTA.H1158.())
  FREE PACKAGE(PHPS53.H1158.())
  FREE PACKAGE(PHPSPTA.H1165.())
  FREE PACKAGE(PHPS53.H1165.())
  FREE PACKAGE(PHPSPTA.H1166.())
  FREE PACKAGE(PHPS53.H1166.())
  FREE PACKAGE(PHPSPTA.H1162.())
  FREE PACKAGE(PHPS53.H1162.())
  FREE PACKAGE(PHPSPTA.H1163.())
  FREE PACKAGE(PHPS53.H1163.())
  FREE PACKAGE(PHPSPTA.H1164.())
  FREE PACKAGE(PHPS53.H1164.())
  FREE PACKAGE(PHPSPTA.H1170.())
  FREE PACKAGE(PHPS53.H1170.())
  FREE PACKAGE(PHPSPTA.H1171.())
  FREE PACKAGE(PHPS53.H1171.())
  FREE PACKAGE(PHPSPTA.H1172.())
  FREE PACKAGE(PHPS53.H1172.())
  FREE PACKAGE(PHPSPTA.H1167.())
  FREE PACKAGE(PHPS53.H1167.())
  FREE PACKAGE(PHPSPTA.H1168.())
  FREE PACKAGE(PHPS53.H1168.())
  FREE PACKAGE(PHPSPTA.H1169.())
  FREE PACKAGE(PHPS53.H1169.())
  FREE PACKAGE(PHPSPTA.H1176.())
  FREE PACKAGE(PHPS53.H1176.())
  FREE PACKAGE(PHPSPTA.H1177.())
  FREE PACKAGE(PHPS53.H1177.())
  FREE PACKAGE(PHPSPTA.H1178.())
  FREE PACKAGE(PHPS53.H1178.())
  FREE PACKAGE(PHPSPTA.H1173.())
  FREE PACKAGE(PHPS53.H1173.())
  FREE PACKAGE(PHPSPTA.H1174.())
  FREE PACKAGE(PHPS53.H1174.())
  FREE PACKAGE(PHPSPTA.H1175.())
  FREE PACKAGE(PHPS53.H1175.())
  FREE PACKAGE(PHPSPTA.H1079.())
  FREE PACKAGE(PHPS53.H1079.())
  FREE PACKAGE(PHPSPTA.H1080.())
  FREE PACKAGE(PHPS53.H1080.())
  FREE PACKAGE(PHPSPTA.H1075.())
  FREE PACKAGE(PHPS53.H1075.())
  FREE PACKAGE(PHPSPTA.H1076.())
  FREE PACKAGE(PHPS53.H1076.())
  FREE PACKAGE(PHPSPTA.H1077.())
  FREE PACKAGE(PHPS53.H1077.())
  FREE PACKAGE(PHPSPTA.H1078.())
  FREE PACKAGE(PHPS53.H1078.())
  FREE PACKAGE(PHPSPTA.H1081.())
  FREE PACKAGE(PHPS53.H1081.())
  FREE PACKAGE(PHPSPTA.H1082.())
  FREE PACKAGE(PHPS53.H1082.())
  FREE PACKAGE(PHPSPTA.H1083.())
  FREE PACKAGE(PHPS53.H1083.())
  FREE PACKAGE(PHPSPTA.H1084.())
  FREE PACKAGE(PHPS53.H1084.())
  FREE PACKAGE(PHPSPTA.H1091.())
  FREE PACKAGE(PHPS53.H1091.())
  FREE PACKAGE(PHPSPTA.H1092.())
  FREE PACKAGE(PHPS53.H1092.())
  FREE PACKAGE(PHPSPTA.H1087.())
  FREE PACKAGE(PHPS53.H1087.())
  FREE PACKAGE(PHPSPTA.H1088.())
  FREE PACKAGE(PHPS53.H1088.())
  FREE PACKAGE(PHPSPTA.H1089.())
  FREE PACKAGE(PHPS53.H1089.())
  FREE PACKAGE(PHPSPTA.H1090.())
  FREE PACKAGE(PHPS53.H1090.())
  FREE PACKAGE(PHPSPTA.H1099.())
  FREE PACKAGE(PHPS53.H1099.())
  FREE PACKAGE(PHPSPTA.H1100.())
  FREE PACKAGE(PHPS53.H1100.())
  FREE PACKAGE(PHPSPTA.H1093.())
  FREE PACKAGE(PHPS53.H1093.())
  FREE PACKAGE(PHPSPTA.H1094.())
  FREE PACKAGE(PHPS53.H1094.())
  FREE PACKAGE(PHPSPTA.H1095.())
  FREE PACKAGE(PHPS53.H1095.())
  FREE PACKAGE(PHPSPTA.H1115.())
  FREE PACKAGE(PHPS53.H1115.())
  FREE PACKAGE(PHPSPTA.H1101.())
  FREE PACKAGE(PHPS53.H1101.())
  FREE PACKAGE(PHPSPTA.H1102.())
  FREE PACKAGE(PHPS53.H1102.())
  FREE PACKAGE(PHPSPTA.H1112.())
  FREE PACKAGE(PHPS53.H1112.())
  FREE PACKAGE(PHPSPTA.H1121.())
  FREE PACKAGE(PHPS53.H1121.())
  FREE PACKAGE(PHPSPTA.H1122.())
  FREE PACKAGE(PHPS53.H1122.())
  FREE PACKAGE(PHPSPTA.H1116.())
  FREE PACKAGE(PHPS53.H1116.())
  FREE PACKAGE(PHPSPTA.H1117.())
  FREE PACKAGE(PHPS53.H1117.())
  FREE PACKAGE(PHPSPTA.H1120.())
  FREE PACKAGE(PHPS53.H1120.())
  FREE PACKAGE(PHPSPTA.H1127.())
  FREE PACKAGE(PHPS53.H1127.())
  FREE PACKAGE(PHPSPTA.H1128.())
  FREE PACKAGE(PHPS53.H1128.())
  FREE PACKAGE(PHPSPTA.H1123.())
  FREE PACKAGE(PHPS53.H1123.())
  FREE PACKAGE(PHPSPTA.H1124.())
  FREE PACKAGE(PHPS53.H1124.())
  FREE PACKAGE(PHPSPTA.H1125.())
  FREE PACKAGE(PHPS53.H1125.())
  FREE PACKAGE(PHPSPTA.H1126.())
  FREE PACKAGE(PHPS53.H1126.())
  FREE PACKAGE(PHPSPTA.H1133.())
  FREE PACKAGE(PHPS53.H1133.())
  FREE PACKAGE(PHPSPTA.H1134.())
  FREE PACKAGE(PHPS53.H1134.())
  FREE PACKAGE(PHPSPTA.H1129.())
  FREE PACKAGE(PHPS53.H1129.())
  FREE PACKAGE(PHPSPTA.H1130.())
  FREE PACKAGE(PHPS53.H1130.())
  FREE PACKAGE(PHPSPTA.H1131.())
  FREE PACKAGE(PHPS53.H1131.())
  FREE PACKAGE(PHPSPTA.H1132.())
  FREE PACKAGE(PHPS53.H1132.())
  FREE PACKAGE(PHPSPTA.H1139.())
  FREE PACKAGE(PHPS53.H1139.())
  FREE PACKAGE(PHPSPTA.H1140.())
  FREE PACKAGE(PHPS53.H1140.())
  FREE PACKAGE(PHPSPTA.H1135.())
  FREE PACKAGE(PHPS53.H1135.())
  FREE PACKAGE(PHPSPTA.H1136.())
  FREE PACKAGE(PHPS53.H1136.())
  FREE PACKAGE(PHPSPTA.H1137.())
  FREE PACKAGE(PHPS53.H1137.())
  FREE PACKAGE(PHPSPTA.H1138.())
  FREE PACKAGE(PHPS53.H1138.())
  FREE PACKAGE(PHPSPTA.H1146.())
  FREE PACKAGE(PHPS53.H1146.())
  FREE PACKAGE(PHPSPTA.H1147.())
  FREE PACKAGE(PHPS53.H1147.())
  FREE PACKAGE(PHPSPTA.H1141.())
  FREE PACKAGE(PHPS53.H1141.())
  FREE PACKAGE(PHPSPTA.H1142.())
  FREE PACKAGE(PHPS53.H1142.())
  FREE PACKAGE(PHPSPTA.H1143.())
  FREE PACKAGE(PHPS53.H1143.())
  FREE PACKAGE(PHPSPTA.H1144.())
  FREE PACKAGE(PHPS53.H1144.())
  FREE PACKAGE(PHPSPTA.H1145.())
  FREE PACKAGE(PHPS53.H1145.())
  FREE PACKAGE(PHPSPTA.H1183.())
  FREE PACKAGE(PHPS53.H1183.())
  FREE PACKAGE(PHPSPTA.H1184.())
  FREE PACKAGE(PHPS53.H1184.())
  FREE PACKAGE(PHPSPTA.H1179.())
  FREE PACKAGE(PHPS53.H1179.())
  FREE PACKAGE(PHPSPTA.H1180.())
  FREE PACKAGE(PHPS53.H1180.())
  FREE PACKAGE(PHPSPTA.H1181.())
  FREE PACKAGE(PHPS53.H1181.())
  FREE PACKAGE(PHPSPTA.H1182.())
  FREE PACKAGE(PHPS53.H1182.())
  FREE PACKAGE(PHPSPTA.H1189.())
  FREE PACKAGE(PHPS53.H1189.())
  FREE PACKAGE(PHPSPTA.H1190.())
  FREE PACKAGE(PHPS53.H1190.())
  FREE PACKAGE(PHPSPTA.H1191.())
  FREE PACKAGE(PHPS53.H1191.())
  FREE PACKAGE(PHPSPTA.H1185.())
  FREE PACKAGE(PHPS53.H1185.())
  FREE PACKAGE(PHPSPTA.H1186.())
  FREE PACKAGE(PHPS53.H1186.())
  FREE PACKAGE(PHPSPTA.H1187.())
  FREE PACKAGE(PHPS53.H1187.())
  FREE PACKAGE(PHPSPTA.H1188.())
  FREE PACKAGE(PHPS53.H1188.())
  FREE PACKAGE(PHPSPTA.H1196.())
  FREE PACKAGE(PHPS53.H1196.())
  FREE PACKAGE(PHPSPTA.H1197.())
  FREE PACKAGE(PHPS53.H1197.())
  FREE PACKAGE(PHPSPTA.H1192.())
  FREE PACKAGE(PHPS53.H1192.())
  FREE PACKAGE(PHPSPTA.H1193.())
  FREE PACKAGE(PHPS53.H1193.())
  FREE PACKAGE(PHPSPTA.H1194.())
  FREE PACKAGE(PHPS53.H1194.())
  FREE PACKAGE(PHPSPTA.H1195.())
  FREE PACKAGE(PHPS53.H1195.())
  FREE PACKAGE(PHPSPTA.H1198.())
  FREE PACKAGE(PHPS53.H1198.())
  FREE PACKAGE(PHPSPTA.H1199.())
  FREE PACKAGE(PHPS53.H1199.())
  FREE PACKAGE(PHPSPTA.H1200.())
  FREE PACKAGE(PHPS53.H1200.())
  FREE PACKAGE(PHPSPTA.HMCPRSX.())
  FREE PACKAGE(PHPS53.HMCPRSX.())
  FREE PACKAGE(KS.KS8050.(19980528140608S101702A072741AKS8050))
  FREE PACKAGE(KS.YKS5553.(19980604135613S101702A072797AYKS5553))
  FREE PACKAGE(PT.YPTBAK.(19980603182259S101702Z377284AYPTBAK))
  FREE PACKAGE(PT.YPTBAK.(19980611141330S101702A072986AYPTBAK))
  FREE PACKAGE(SX.YSX81S1.(19980611134539S101702M000921AYSX81S1))
  FREE PACKAGE(AV.YAV0491.(19980611154441S101702M000840AYAV0491))
  FREE PACKAGE(LB.YLB0103.(19980611152558S101702M000840AYLB0103))
  FREE PACKAGE(LB.YLB0105.(19980611152558S101702M000840AYLB0105))
  FREE PACKAGE(WK.YWKLUBO.(19980611152859S101702M000840AYWKLUBO))
  FREE PACKAGE(YY.YYAKDAT.(19980611153615S101702M000840AYYAKDAT))
  FREE PACKAGE(YY.YYFIBPR.(19980611153657S101702M000840AYYFIBPR))
  FREE PACKAGE(YY.YYFIKUR.(19980611153705S101702M000840AYYFIKUR))
  FREE PACKAGE(YY.YYFIKUR.(19980611153705CGS101702M000840AYYFIKUR))
  FREE PACKAGE(SV.SV7810.(19980611190040S101702A073120ASV7810))
  FREE PACKAGE(AV.YAV0491.(19980617085448S101702Z379436AYAV0491))
  FREE PACKAGE(YY.YYFIKUR.(19980618174544S101702A072820AYYFIKUR))
  FREE PACKAGE(AV.YAV0491.(19980618174545S101702A072820AYAV0491))
  FREE PACKAGE(YY.YYFIKUR.(19980618174544CGS101702A072820AYYFIKUR))
  FREE PACKAGE(RR.RR0210.(19980618141924S101702A072843ARR0210))
  FREE PACKAGE(A1P.YKS0813.(19980618144536S101702A073286AYKS0813))
  FREE PACKAGE(A2P.YKS0813.(19980618144536S101702A073286AYKS0813))
  FREE PACKAGE(KS.YKS0813.(19980618144536S101702A073286AYKS0813))
  FREE PACKAGE(AV.YAV0491.(19980618153333S101702A072820AYAV0491))
  FREE PACKAGE(YY.YYFIKUR.(19980618153331S101702A072820AYYFIKUR))
  FREE PACKAGE(YY.YYFIKUR.(19980618153331CGS101702A072820AYYFIKUR))
  FREE PACKAGE(KS.YKS5551.(19980613150900S101702Z378654AYKS5551))
  FREE PACKAGE(EC.EC8063.(19980623143831S101702Z380538AEC8063))
  FREE PACKAGE(EC.EC8062.(19980623143853S101702Z380537AEC8062))
  FREE PACKAGE(EC.EC8062.(19980624103834S101702Z380638AEC8062))
  FREE PACKAGE(EC.EC8063.(19980624103859S101702Z380639AEC8063))
  FREE PACKAGE(EC.EC8063.(19980622145205S101702Z380283AEC8063))
  FREE PACKAGE(EC.EC8062.(19980622145120S101702Z380281AEC8062))
  FREE PACKAGE(PHPSPTA.HMCPRUP.())
  FREE PACKAGE(PHPS53.HMCPRUP.())
  FREE PACKAGE(KS.YKS5553.(19980701133926S101702Z381523AYKS5553))
  FREE PACKAGE(YY.YYFIKUR.(19980626131600S101702A073395AYYFIKUR))
  FREE PACKAGE(YY.YYFIKUR.(19980626131600CGS101702A073395AYYFIKUR))
  FREE PACKAGE(YY.YYFIKUR.(19980626134607S101702A073395AYYFIKUR))
  FREE PACKAGE(YY.YYFIKUR.(19980626134607CGS101702A073395AYYFIKUR))
  FREE PACKAGE(YY.YYFIKUR.(19980626140918S101702A073395AYYFIKUR))
  FREE PACKAGE(YY.YYFIKUR.(19980626140918CGS101702A073395AYYFIKUR))
  FREE PACKAGE(YY.YYFIKUR.(19980626151056S101702A073401AYYFIKUR))
  FREE PACKAGE(YY.YYFIKUR.(19980626151056CGS101702A073401AYYFIKUR))
  FREE PACKAGE(FARDX.DLLST1.())
  FREE PACKAGE(PT.YPTBAK.(19980706170353S101702Z382086AYPTBAK))
  FREE PACKAGE(VP.VP7400.(19980713121941S101702Z382775AVP7400))
  FREE PACKAGE(EX.YEXERG.(19980709132140S101702A073235AYEXERG))
  FREE PACKAGE(YY.YYFIKU1.(19980709132109S101702Z382599AYYFIKU1))
  FREE PACKAGE(VT.YVT0801.(19980709133842S101702M000924AYVT0801))
  FREE PACKAGE(VT.YVTAFS.(19980709134007S101702M000924AYVTAFS))
  FREE PACKAGE(EX.YEXERG.(19980709132140CGS101702A073235AYEXERG))
  FREE PACKAGE(KS.YKS5551.(19980709132913S101702A073491AYKS5551))
  FREE PACKAGE(KS.YKS5553.(19980709132913S101702A073491AYKS5553))
  FREE PACKAGE(SA.YSA5282.(19980709133946S101702M000924AYSA5282))
  FREE PACKAGE(VT.YVT0806.(19980709133843S101702M000924AYVT0806))
  FREE PACKAGE(VT.YVT0803.(19980709133843S101702M000924AYVT0803))
  FREE PACKAGE(VT.YVT0802.(19980709133842S101702M000924AYVT0802))
  FREE PACKAGE(SA.YSAT035.(19980709133855S101702M000924AYSAT035))
  FREE PACKAGE(SA.YSA5281.(19980709133945S101702M000924AYSA5281))
  FREE PACKAGE(VT.YVT0804.(19980709133843S101702M000924AYVT0804))
  FREE PACKAGE(SX.YSX8105.(19980709134006S101702M000924AYSX8105))
  FREE PACKAGE(SA.YSAT009.(19980709134033S101702M000924AYSAT009))
  FREE PACKAGE(SA.YSAT015.(19980709133846S101702M000924AYSAT015))
  FREE PACKAGE(WK.YWKLUBO.(19980710141605S101702M000841AYWKLUBO))
  FREE PACKAGE(YY.YYAKDAT.(19980710084846S101702M000841AYYAKDAT))
  FREE PACKAGE(YY.YYFIKUR.(19980710084900CGS101702M000841AYYFIKUR))
  FREE PACKAGE(YY.YYFIKUR.(19980710084900S101702M000841AYYFIKUR))
  FREE PACKAGE(WB.WB1010.(19980710082854S101702A073636AWB1010))
  FREE PACKAGE(LB.YLB0113.(19980710083933S101702M000841AYLB0113))
  FREE PACKAGE(LB.YLB0116.(19980710083934S101702M000841AYLB0116))
  FREE PACKAGE(LB.YLB0115.(19980710083934S101702M000841AYLB0115))
  FREE PACKAGE(WK.YWKLUBO.(19980710084245S101702M000841AYWKLUBO))
  FREE PACKAGE(YY.YYCXOLD.(19980710085313S101702A073727AYYCXOLD))
  FREE PACKAGE(LB.YLB0113.(19980710141321S101702M000841AYLB0113))
  FREE PACKAGE(LB.YLB0116.(19980710141322S101702M000841AYLB0116))
  FREE PACKAGE(LB.YLB0115.(19980710141321S101702M000841AYLB0115))
  FREE PACKAGE(YY.YYAKDAT.(19980710142111S101702M000841AYYAKDAT))
  FREE PACKAGE(WB.WB9993.(A06M000357))
  FREE PACKAGE(CZ.CZ6014.(19980717195822S101702Z383277ACZ6014))
  FREE PACKAGE(EC.YECAVKY.(19980717193302S101702Z383289AYECAVKY))
  FREE PACKAGE(EC.YECAVKY.(19980717194554S101702Z383292AYECAVKY))
  FREE PACKAGE(CZ.CZ6014.(19980717205332S101702Z383277ACZ6014))
  FREE PACKAGE(KD.KD0540.(19980717170619S101702Z383268AKD0540))
  FREE PACKAGE(CZ.CZ6014.(19980718113921S101702Z383299ACZ6014))
  FREE PACKAGE(PHPSPTA.GCSTMIG.())
  FREE PACKAGE(PHPS53.GCSTMIG.())
  FREE PACKAGE(PHPSPTA.GCBTOGL.())
  FREE PACKAGE(PHPS53.GCBTOGL.())
  FREE PACKAGE(SA.YSX8105.(A16M000011))
  FREE PACKAGE(PHPSPTA.HMCPRUS.())
  FREE PACKAGE(PHPS53.HMCPRUS.())
  FREE PACKAGE(SA.YSX81S1.(A16M000011))
  FREE PACKAGE(VT.YVT0578.(A15S000165))
  FREE PACKAGE(PHPSPTA.HMCXRLE.())
  FREE PACKAGE(PHPS53.HMCXRLE.())
  FREE PACKAGE(PHPSPTA.GRINSPT.())
  FREE PACKAGE(PHPS53.GRINSPT.())
  FREE PACKAGE(PHPSPTA.H0024.())
  FREE PACKAGE(PHPS53.H0024.())
  FREE PACKAGE(PHPSPTA.GRVRF00.())
  FREE PACKAGE(PHPS53.GRVRF00.())
  FREE PACKAGE(PHPSPTA.GUPDENT.())
  FREE PACKAGE(PHPS53.GUPDENT.())
  FREE PACKAGE(A1P.YKS5553.(A13X000194))
  FREE PACKAGE(A2P.YKS5553.(A13X000194))
  FREE PACKAGE(PHPSPTA.GTLMC00.())
  FREE PACKAGE(PHPS53.GTLMC00.())
  FREE PACKAGE(A1P.YKS5551.(A13X000194))
  FREE PACKAGE(A2P.YKS5551.(A13X000194))
  FREE PACKAGE(A1P.YKS5551.(A13X000153))
  FREE PACKAGE(A2P.YKS5551.(A13X000153))
  FREE PACKAGE(A1P.YKS5552.(A13X000153))
  FREE PACKAGE(A2P.YKS5552.(A13X000153))
  FREE PACKAGE(A1P.YKS5553.(A13X000153))
  FREE PACKAGE(A2P.YKS5553.(A13X000153))
  FREE PACKAGE(PHPSPTA.HMPGDDL.())
  FREE PACKAGE(PHPS53.HMPGDDL.())
  FREE PACKAGE(PHPSPTA.HMPDCLG.())
  FREE PACKAGE(PHPS53.HMPDCLG.())
  FREE PACKAGE(PHPSPTA.HMPGENP.())
  FREE PACKAGE(PHPS53.HMPGENP.())
  FREE PACKAGE(A1P.YKS5551.(A13X000155))
  FREE PACKAGE(A2P.YKS5551.(A13X000155))
  FREE PACKAGE(A1P.YKS5553.(A13X000155))
  FREE PACKAGE(A2P.YKS5553.(A13X000155))
  FREE PACKAGE(A1P.YKS5552.(A13X000155))
  FREE PACKAGE(A2P.YKS5552.(A13X000155))
  FREE PACKAGE(FRNIBMCL.FRNA0070.())
  FREE PACKAGE(FRNIBMCL.FRNA0050.())
  FREE PACKAGE(FRNIBMCL.FRNA0060.())
  FREE PACKAGE(FRNIBMCL.FRNA0020.())
  FREE PACKAGE(FRNIBMCL.FRNA0010.())
  FREE PACKAGE(FRNIBMCL.FRNA0030.())
  FREE PACKAGE(FRNIBMCL.FRNA0040.())
  FREE PACKAGE(A1P.YKS0813.(A13X000041))
  FREE PACKAGE(A2P.YKS0813.(A13X000041))
  FREE PACKAGE(PHPSPTA.GLMP000.())
  FREE PACKAGE(PHPS53.GLMP000.())
  FREE PACKAGE(PHPSPTA.HMPUTRN.())
  FREE PACKAGE(PHPS53.HMPUTRN.())
  FREE PACKAGE(PHPSPTA.GRCLUP.())
  FREE PACKAGE(PHPS53.GRCLUP.())
  FREE PACKAGE(PHPSPTA.GRSEED0.())
  FREE PACKAGE(PHPS53.GRSEED0.())
  FREE PACKAGE(A1P.YKS5551.(A13X000177))
  FREE PACKAGE(A2P.YKS5551.(A13X000177))
  FREE PACKAGE(A1P.YKS5553.(A13X000177))
  FREE PACKAGE(A2P.YKS5553.(A13X000177))
  FREE PACKAGE(PHPSPTA.HMCSIG3.())
  FREE PACKAGE(PHPS53.HMCSIG3.())
  FREE PACKAGE(PHPSPTA.GRRPT00.())
  FREE PACKAGE(PHPS53.GRRPT00.())
  FREE PACKAGE(PHPSPTA.GCEXTAT.())
  FREE PACKAGE(PHPS53.GCEXTAT.())
  FREE PACKAGE(A1P.YKS5551.(A13X000321))
  FREE PACKAGE(A2P.YKS5551.(A13X000321))
  FREE PACKAGE(A2P.RR8270.(CRMA000504))
  FREE PACKAGE(PHPSPTA.HMCQRY.())
  FREE PACKAGE(PHPS53.HMCQRY.())
  FREE PACKAGE(PHPSPTA.HMCQRY4.())
  FREE PACKAGE(PHPS53.HMCQRY4.())
  FREE PACKAGE(PHPSPTA.HMCQRY2.())
  FREE PACKAGE(PHPS53.HMCQRY2.())
  FREE PACKAGE(PHPSPTA.HMCQRY5.())
  FREE PACKAGE(PHPS53.HMCQRY5.())
  FREE PACKAGE(PHPSPTA.GCUPDRES.())
  FREE PACKAGE(PHPS53.GCUPDRES.())
  FREE PACKAGE(NTA1P.BC0009.(CRMB000430))
  FREE PACKAGE(NTA1P.BC0003.(CRMB000430))
  FREE PACKAGE(NTA1P.BC0007.(CRMB000430))
  FREE PACKAGE(NTA1P.BC0010.(CRMB000430))
  FREE PACKAGE(NTA1P.BC0008.(CRMB000430))
  FREE PACKAGE(NTA1P.BC0011.(CRMB000430))
  FREE PACKAGE(A1P.CI8520.(A12M001522))
  FREE PACKAGE(A2P.CI8520.(A12M001522))
  FREE PACKAGE(A1P.CI8520.(A12M001531))
  FREE PACKAGE(A2P.CI8520.(A12M001531))
  FREE PACKAGE(AT.AT8100.(A12M001566))
  FREE PACKAGE(PHPSPTA.GRPREP0.())
  FREE PACKAGE(PHPS53.GRPREP0.())
  FREE PACKAGE(A1P.YKS5553.(A13X000249))
  FREE PACKAGE(A2P.YKS5553.(A13X000249))
  FREE PACKAGE(A1P.YKS5551.(A13X000269))
  FREE PACKAGE(A2P.YKS5551.(A13X000269))
  FREE PACKAGE(AT.AT0090.(A12M001166))
  FREE PACKAGE(A1P.YKS5553.(A13X000279))
  FREE PACKAGE(A2P.YKS5553.(A13X000279))
  FREE PACKAGE(A2P.YSAT061.(A16M000359))
  FREE PACKAGE(AT.AT8100.(A12M001144))
  FREE PACKAGE(A1P.YSAT058.(A16M000359))
  FREE PACKAGE(A2P.YSAT058.(A16M000359))
  FREE PACKAGE(A1P.RR8420.(CRMA000539))
  FREE PACKAGE(A2P.RR8420.(CRMA000539))
  FREE PACKAGE(PHPSPTA.GEXP000.())
  FREE PACKAGE(PHPS53.GEXP000.())
  FREE PACKAGE(A1P.YKS0813.(A13X000301))
  FREE PACKAGE(A2P.YKS0813.(A13X000301))
  FREE PACKAGE(PHPSPTA.GRBNDLK.())
  FREE PACKAGE(PHPS53.GRBNDLK.())
  FREE PACKAGE(PHPSPTA.HMCCOS1.())
  FREE PACKAGE(PHPS53.HMCCOS1.())
  FREE PACKAGE(AT.AT8100.(A12M001366))
  FREE PACKAGE(A1P.RR8420.(CRMA000574))
  FREE PACKAGE(A2P.RR8420.(CRMA000574))
  FREE PACKAGE(PHPSPTA.HMCTRAN.())
  FREE PACKAGE(PHPS53.HMCTRAN.())
  FREE PACKAGE(PHPSPTA.H1037.())
  FREE PACKAGE(PHPS53.H1037.())
  FREE PACKAGE(PHPSPTA.HMPGCB.())
  FREE PACKAGE(PHPS53.HMPGCB.())
  FREE PACKAGE(FRNIBMCL.FRNPLLI4.())
  FREE PACKAGE(FRNIBMCL.FRNMHBP8.())
  FREE PACKAGE(FRNIBMCL.FRNPLLQ2.())
  FREE PACKAGE(A1P.XP8600.(CRME000264))
  FREE PACKAGE(A2P.XP8600.(CRME000264))
  FREE PACKAGE(PHPSPTA.GRRSTAT.())
  FREE PACKAGE(PHPS53.GRRSTAT.())
  FREE PACKAGE(A1P.XP8600.(CRME000268))
  FREE PACKAGE(A2P.XP8600.(CRME000268))
  FREE PACKAGE(A1P.XP8600.(CRME000269))
  FREE PACKAGE(A2P.XP8600.(CRME000269))
  FREE PACKAGE(A1P.YKS5553.(A13X000339))
  FREE PACKAGE(A2P.YKS5553.(A13X000339))
  FREE PACKAGE(PHPSPTA.GTDELTA.())
  FREE PACKAGE(PHPS53.GTDELTA.())
  FREE PACKAGE(A1P.YKS0813.(A13X000362))
  FREE PACKAGE(A2P.YKS0813.(A13X000362))
  FREE PACKAGE(A1P.YKS5551.(A13X000368))
  FREE PACKAGE(A2P.YKS5551.(A13X000368))
  FREE PACKAGE(FRNCOL01.FRNV0030.())
  FREE PACKAGE(A1P.YKS0813.(A13X000352))
  FREE PACKAGE(A2P.YKS0813.(A13X000352))
  FREE PACKAGE(FRNCOL01.FRNV0060.())
  FREE PACKAGE(FRNCOL01.FRNV0020.())
  FREE PACKAGE(A1P.CI8520.(A12M001797))
  FREE PACKAGE(A2P.CI8520.(A12M001797))
  FREE PACKAGE(A2P.RR8270.(CRMA001016))
  FREE PACKAGE(A1P.RR8420.(CRMA001016))
  FREE PACKAGE(A2P.RR8420.(CRMA001016))
  FREE PACKAGE(A1P.YKS0813.(A13X000436))
  FREE PACKAGE(A2P.YKS0813.(A13X000436))
  FREE PACKAGE(FRNIBMCL.FRNPLLI2.())
  FREE PACKAGE(BP.BP7090.(A20Y000082))
  FREE PACKAGE(PHPSPTA.GAMI000.())
  FREE PACKAGE(PHPS53.GAMI000.())
  FREE PACKAGE(A1P.KS5320.(A13X000536))
  FREE PACKAGE(A2P.KS5320.(A13X000536))
  FREE PACKAGE(BF.BF8655.(A06M010498))
  FREE PACKAGE(PHPSPTA.HMCSRVR.())
  FREE PACKAGE(PHPS53.HMCSRVR.())
  FREE PACKAGE(PHPSPTA.H0026X.())
  FREE PACKAGE(PHPS53.H0026X.())
  FREE PACKAGE(PHPSPTA.GCMIGDEL.())
  FREE PACKAGE(PHPS53.GCMIGDEL.())
  FREE PACKAGE(AT.AT0090.(A20Y000239))
  FREE PACKAGE(AT.AT7224.(A20Y000111))
  FREE PACKAGE(PHPSPTA.GTREP00.())
  FREE PACKAGE(PHPS53.GTREP00.())
  FREE PACKAGE(PHPSPTA.GCCRC00.())
  FREE PACKAGE(PHPS53.GCCRC00.())
  FREE PACKAGE(PHPSPTA.GIMP000.())
  FREE PACKAGE(PHPS53.GIMP000.())
  FREE PACKAGE(A1P.YCI009A.(A12M002427))
  FREE PACKAGE(A2P.YCI009A.(A12M002427))
  FREE PACKAGE(A1P.YCI009.(A12M002427))
  FREE PACKAGE(A2P.YCI009.(A12M002427))
  FREE PACKAGE(A1P.YKS0813.(A13X000530))
  FREE PACKAGE(A2P.YKS0813.(A13X000530))
  FREE PACKAGE(PHPSPTA.GRRBA00.())
  FREE PACKAGE(PHPS53.GRRBA00.())
  FREE PACKAGE(A1P.YKS0813.(A13X000508))
  FREE PACKAGE(A2P.YKS0813.(A13X000508))
  FREE PACKAGE(PHPSPTA.GCTMTH.())
  FREE PACKAGE(PHPS53.GCTMTH.())
  FREE PACKAGE(PHPSPTA.GRINST0.())
  FREE PACKAGE(PHPS53.GRINST0.())
  FREE PACKAGE(FRNCOL01.FRNV0040.())
  FREE PACKAGE(FRNCOL01.FRNV0050.())
  FREE PACKAGE(FRNIBMCL.FRNPLLI3.())
  FREE PACKAGE(VT.YVT0801.(A15S000580))
  FREE PACKAGE(VT.YVT0802.(A15S000580))
  FREE PACKAGE(VT.YVT0803.(A15S000580))
  FREE PACKAGE(VT.YVT0804.(A15S000580))
  FREE PACKAGE(VT.YVT0805.(A15S000580))
  FREE PACKAGE(VT.YVT0806.(A15S000580))
  FREE PACKAGE(VT.YVT0809.(A15S000580))
  FREE PACKAGE(KS.YKSAUFT.(A15S000557))
  FREE PACKAGE(AT.AT7222.(A20Y000328))
  FREE PACKAGE(AT.AT7224.(A20Y000328))
  FREE PACKAGE(AT.AT7225.(A20Y000328))
  FREE PACKAGE(FRNIBMCL.FRNPLLI1.())
  FREE PACKAGE(AT.AT0090.(A20Y000364))
  FREE PACKAGE(GROUP00.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP01.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP02.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP03.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP04.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP05.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP06.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP07.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP08.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP09.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP10.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP11.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP12.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP13.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP14.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP15.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP16.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP17.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP18.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP19.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP20.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP21.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP22.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP23.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP24.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP25.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP26.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP27.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP28.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP29.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP30.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP31.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP32.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP33.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP34.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP35.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP36.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP37.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP38.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP39.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP40.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP41.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP42.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP43.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP44.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP45.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP46.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP47.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP48.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP49.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP50.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP51.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP52.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP53.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP54.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP55.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP56.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP57.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP58.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP59.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP60.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP61.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP62.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP63.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP64.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP65.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP66.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP67.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP68.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP69.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP70.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP71.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP72.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP73.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP74.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP75.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP76.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP77.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP78.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP79.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP80.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP81.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP82.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP83.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP84.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP85.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP86.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP87.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP88.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP89.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP90.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP91.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP92.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP93.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP94.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP95.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP96.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP97.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP98.CBRHDBS.(327975575377873514))
  FREE PACKAGE(GROUP99.CBRHDBS.(327975575377873514))
  FREE PACKAGE(CBRKCMT.CBRKCMT.(439276300377892470))
  FREE PACKAGE(GROUP00.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP01.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP02.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP03.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP04.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP05.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP06.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP07.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP08.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP09.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP10.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP11.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP12.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP13.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP14.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP15.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP16.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP17.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP18.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP19.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP20.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP21.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP22.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP23.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP24.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP25.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP26.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP27.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP28.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP29.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP30.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP31.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP32.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP33.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP34.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP35.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP36.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP37.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP38.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP39.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP40.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP41.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP42.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP43.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP44.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP45.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP46.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP47.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP48.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP49.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP50.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP51.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP52.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP53.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP54.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP55.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP56.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP57.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP58.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP59.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP60.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP61.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP62.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP63.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP64.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP65.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP66.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP67.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP68.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP69.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP70.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP71.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP72.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP73.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP74.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP75.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP76.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP77.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP78.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP79.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP80.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP81.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP82.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP83.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP84.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP85.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP86.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP87.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP88.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP89.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP90.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP91.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP92.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP93.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP94.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP95.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP96.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP97.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP98.CBRHDBS.(042982409377892471))
  FREE PACKAGE(GROUP99.CBRHDBS.(042982409377892471))
  FREE PACKAGE(PHPSPTA.HMPRBDR.())
  FREE PACKAGE(PHPS53.HMPRBDR.())
  FREE PACKAGE(CBRKCMI.CBRKCMI.(UW71236HDZ11F0))
  FREE PACKAGE(CBRKCMR.CBRKCMR.(UW71236HDZ11F0))
  FREE PACKAGE(CBRKISQL.CBRKISQL.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP00.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP01.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP02.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP03.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP04.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP05.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP06.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP07.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP08.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP09.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP10.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP11.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP12.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP13.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP14.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP15.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP16.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP17.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP18.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP19.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP20.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP21.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP22.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP23.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP24.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP25.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP26.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP27.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP28.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP29.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP30.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP31.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP32.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP33.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP34.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP35.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP36.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP37.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP38.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP39.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP40.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP41.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP42.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP43.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP44.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP45.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP46.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP47.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP48.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP49.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP50.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP51.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP52.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP53.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP54.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP55.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP56.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP57.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP58.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP59.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP60.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP61.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP62.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP63.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP64.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP65.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP66.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP67.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP68.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP69.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP70.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP71.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP72.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP73.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP74.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP75.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP76.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP77.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP78.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP79.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP80.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP81.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP82.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP83.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP84.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP85.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP86.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP87.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP88.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP89.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP90.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP91.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP92.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP93.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP94.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP95.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP96.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP97.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP98.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP99.CBRIDBS.(UW71235HDZ11E0))
  FREE PACKAGE(GROUP00.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP01.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP02.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP03.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP04.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP05.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP06.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP07.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP08.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP09.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP10.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP11.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP12.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP13.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP14.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP15.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP16.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP17.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP18.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP19.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP20.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP21.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP22.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP23.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP24.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP25.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP26.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP27.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP28.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP29.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP30.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP31.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP32.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP33.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP34.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP35.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP36.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP37.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP38.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP39.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP40.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP41.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP42.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP43.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP44.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP45.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP46.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP47.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP48.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP49.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP50.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP51.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP52.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP53.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP54.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP55.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP56.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP57.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP58.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP59.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP60.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP61.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP62.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP63.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP64.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP65.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP66.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP67.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP68.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP69.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP70.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP71.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP72.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP73.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP74.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP75.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP76.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP77.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP78.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP79.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP80.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP81.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP82.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP83.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP84.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP85.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP86.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP87.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP88.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP89.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP90.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP91.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP92.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP93.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP94.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP95.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP96.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP97.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP98.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(GROUP99.CBRIDBS.(UW71236HDZ11F0))
  FREE PACKAGE(CBRKCMD.CBRKCMD.(UW71236HDZ11F0))
  FREE PACKAGE(CBRKCME.CBRKCME.(UW71236HDZ11F0))
  FREE PACKAGE(CBRKCMF.CBRKCMF.(UW71236HDZ11F0))
  FREE PACKAGE(CBRHCAUD.CBRHCAUD.(UW71236HDZ11F0))
  FREE PACKAGE(CBRHCLDL.CBRHCLDL.(UW71236HDZ11F0))
  FREE PACKAGE(CBRHCLLU.CBRHCLLU.(UW71236HDZ11F0))
  FREE PACKAGE(CBRHCLMK.CBRHCLMK.(UW71236HDZ11F0))
  FREE PACKAGE(CBRHCLSG.CBRHCLSG.(UW71236HDZ11F0))
  FREE PACKAGE(CBRHTBSV.CBRHTBSV.(UW71236HDZ11F0))
  FREE PACKAGE(A1P.KS5330.(A13X000546))
  FREE PACKAGE(A2P.KS5330.(A13X000546))
  FREE PACKAGE(A1P.KS5320.(A13X000532))
  FREE PACKAGE(A2P.KS5320.(A13X000532))
  FREE PACKAGE(A1P.KS5310.(A13X000472))
  FREE PACKAGE(A2P.KS5310.(A13X000472))
  FREE PACKAGE(BF.BF8651.(A06M014649))
  FREE PACKAGE(BP.BP7200.(A20Y000403))
  FREE PACKAGE(BF.BF8655.(A06M014649))
  FREE PACKAGE(A1P.KS5310.(A13X000651))
  FREE PACKAGE(A2P.KS5310.(A13X000651))
  FREE PACKAGE(A1P.YKS5551.(A13X000597))
  FREE PACKAGE(A2P.YKS5551.(A13X000597))
  FREE PACKAGE(A1P.YKS5553.(A13X000597))
  FREE PACKAGE(A2P.YKS5553.(A13X000597))
  FREE PACKAGE(A1P.YKS5552.(A13X000597))
  FREE PACKAGE(A2P.YKS5552.(A13X000597))
  FREE PACKAGE(PHPSPTA.GADRELS.())
  FREE PACKAGE(PHPS53.GADRELS.())
  FREE PACKAGE(A1P.KS5310.(A13X000591))
  FREE PACKAGE(A2P.KS5310.(A13X000591))
  FREE PACKAGE(A1P.KS5320.(A13X000591))
  FREE PACKAGE(A2P.KS5320.(A13X000591))
  FREE PACKAGE(A1P.YKS0813.(A13X000591))
  FREE PACKAGE(A2P.YKS0813.(A13X000591))
  FREE PACKAGE(AT.AT0100.(A20Y000431))
  FREE PACKAGE(DAA400_D_MAIN.PSEBN12.(V3201))
  FREE PACKAGE(IS.ISLP24.(DML0000006))
  FREE PACKAGE(CZ.CZ9991.(KUAN000019))
  FREE PACKAGE(CZ.CZ7021.(KUAN000023))
  FREE PACKAGE(WP.YWPR2PX.(DBH0000023558AA4ED))
  FREE PACKAGE(IS.ISLP93.(DML0000011))
  FREE PACKAGE(CZ.CZ7740.(KUAN000029))
  FREE PACKAGE(SE.SE7120.(IMS0000024))
  FREE PACKAGE(SE.SE7130.(IMS0000024))
  FREE PACKAGE(IS.ISLP23.(DML0000014))
  FREE PACKAGE(IS.ISLP88.(DML0000014))
  FREE PACKAGE(RM.RM7280.(PARS000047))
  FREE PACKAGE(TR.TR5360.(DERI000022))
  FREE PACKAGE(LQ.LQ8090.(LIQ0000015))
  FREE PACKAGE(EX.EX0500.(EXPN000020))
  FREE PACKAGE(PR.PR0700I.(PMRT00003856C451BC))
  FREE PACKAGE(PR.PR0730I.(PMRT00003856C451C9))
  FREE PACKAGE(YY.YYNFP17.(NBSI000070))
  FREE PACKAGE(VT.VT0880.(VTX0000018))
  FREE PACKAGE(WB.WB1280.(WS8B000188))
  FREE PACKAGE(FRNCOL01.FRNA0080.())
  FREE PACKAGE(WB.WB1140.(WSTS000032))
  FREE PACKAGE(RM.YRMR025.(PARS0000505666A2A0))
  FREE PACKAGE(RM.YRMR075.(PARS0000505666A2CB))
  FREE PACKAGE(RM.YRMR11O.(PARS0000505666A3C3))
  FREE PACKAGE(CZ.CZ7740.(KUAN000028))
  FREE PACKAGE(EK.EK6841.(EMA0000030))
  FREE PACKAGE(EK.EK6413.(EMA0000030))
  FREE PACKAGE(NI.YNI0201.(IPC0000123568132CD))
  FREE PACKAGE(NI.YNI0212.(IPC0000123568132CE))
  FREE PACKAGE(NI.YNI0202.(IPC0000123568132CD))
  FREE PACKAGE(NI.YNI0211.(IPC0000123568132CD))
  FREE PACKAGE(NJ.NJ7180.(QMS0000016))
  FREE PACKAGE(CD.YCDCL01.(CIIN000149))
  FREE PACKAGE(AN.ANNA001.(CIIN000149MVS))
  FREE PACKAGE(VT.YVT0509.(VTX00000185697B44F))
  FREE PACKAGE(EF.EF5940.(NOST000168))
  FREE PACKAGE(EV.EV7040.(EKVS000010))
  FREE PACKAGE(VT.YVT0532.(VTX0000018569F3DAA))
  FREE PACKAGE(CK.YCKMAPL.(DCA0000079))
  FREE PACKAGE(CK.YCKMASI.(DCA0000079569F57AA))
  FREE PACKAGE(CK.YCKMABC.(DCA0000079569F57C5))
  FREE PACKAGE(CK.YCKMABB.(DCA0000079569F57BF))
  FREE PACKAGE(CK.YCKMASL.(DCA0000079569F582F))
  FREE PACKAGE(CK.YCKMABU.(DCA0000079569F5810))
  FREE PACKAGE(CK.YCKMASG.(DCA0000079569F57E1))
  FREE PACKAGE(CK.YCKMASD.(DCA0000079569F5827))
  FREE PACKAGE(NJ.YNJ050.(QMS000001656A8CDEA))
  FREE PACKAGE(EC.YECDMAE.(SYNC00001056A8EDE4))
  FREE PACKAGE(EC.YECDMAE.(SYNC00001056A8EDE4CICS))
  FREE PACKAGE(VT.YVTBRVI.(VTX000001856AA20FB))
  FREE PACKAGE(VT.YVTCSFP.(VTX000001856AA210A))
  FREE PACKAGE(VT.YVTVWAH.(VTX000001856AA2122))
  FREE PACKAGE(VT.YVT0502.(VTX000001856AA212B))
  FREE PACKAGE(VT.YVT0531.(VTX000001856AA214A))
  FREE PACKAGE(VT.YVTDTEX.(VTX000001856A4C5D9))
  FREE PACKAGE(RT.YRT0001.(RFT000000956A4A79F))
  FREE PACKAGE(RM.RM7930.(PARS000047))
  FREE PACKAGE(VP.VP0010.(VIP0000008))
  FREE PACKAGE(RM.RM7220.(PARS000047))
  FREE PACKAGE(BF.BF7110.(DBH0000054))
  FREE PACKAGE(AS.AS0100.(KABG000030))
  FREE PACKAGE(AS.AS0610.(KABG000030))
  FREE PACKAGE(CZ.CZ6030.(KINF000006))
  FREE PACKAGE(CZ.CZ7740.(KINF000006))
  FREE PACKAGE(YY.YYNFP17.(NBSI00006156ADD502))
  FREE PACKAGE(NF.NF5910.(NBSI000061))
  FREE PACKAGE(EC.YECDMAU.(SYNC00001056AF4229))
  FREE PACKAGE(RM.YRM2680.(PARS00004756AF6A17))
  FREE PACKAGE(RM.YRM2670.(PARS00004756AF6A14))
  FREE PACKAGE(TN.TN5003.(OTXO000036))
  FREE PACKAGE(TN.TN8910.(OTXO000036))
  FREE PACKAGE(AV.AV8730.(PMRT000038))
  FREE PACKAGE(RM.YRM0760.(PARS00005056AF7949))
  FREE PACKAGE(EX.EX8030.(EXPN000020))
  FREE PACKAGE(WB.WB1140.(WSTS000025))
  FREE PACKAGE(TR.YTRT061.(RRA000003156B09495))
  FREE PACKAGE(TR.TR7040.(DERI000022))
  FREE PACKAGE(RM.RM7190.(PARS000047))
  FREE PACKAGE(CZ.CZ7270.(HOT0000021))
  FREE PACKAGE(WP.YWPXBJF.(DBH0000068575EE14B))
  FREE PACKAGE(WP.YWPXBJI.(DBH0000068575EE1AA))
  FREE PACKAGE(WP.YWPXBJH.(DBH0000068575EE1C6))
  FREE PACKAGE(WP.YWPXBJG.(DBH0000068575EE1D9))
  FREE PACKAGE(WP.YWPXB1G.(DBH0000068575EE2B1))
  FREE PACKAGE(WP.YWPXB1I.(DBH0000068575EE2ED))
  FREE PACKAGE(WP.YWPXB1F.(DBH0000068575EE2BB))
  FREE PACKAGE(WP.YWPXB1H.(DBH0000068575EE2F7))
  FREE PACKAGE(FRNCOL01.FRNV0080.())
  FREE PACKAGE(RT.RT5200.(RFT0000015))
  FREE PACKAGE(RT.RT5500.(RFT0000015))
  FREE PACKAGE(RT.RT8400.(RFT0000015))
  FREE PACKAGE(RT.RT8410.(RFT0000015))
  FREE PACKAGE(IT.IT5000.(RFT0000015))
  FREE PACKAGE(RT.RT5050.(RFT0000015))
  FREE PACKAGE(RT.YRT0011.(RFT000001556F2A4B0))
  FREE PACKAGE(EK.EK7661.(EMA0000039))
  FREE PACKAGE(EK.EK7664.(EMA0000039))
  FREE PACKAGE(EK.EK7668.(EMA0000039))
  FREE PACKAGE(EK.EK7660.(EMA0000039))
  FREE PACKAGE(EK.EK7666.(EMA0000039))
  FREE PACKAGE(EK.EK7667.(EMA0000039))
  FREE PACKAGE(RM.YRM2670.(PARS00005456FD4E7D))
  FREE PACKAGE(RM.YRM2680.(PARS00005456FD4E81))
  FREE PACKAGE(NJ.YNJ050.(QMS000001956F7B92C))
  FREE PACKAGE(EC.EC7420.(KAUS000011))
  FREE PACKAGE(SV.SV7820.(WSSV000087))
  FREE PACKAGE(EK.EK6710.(EMA0000039))
  FREE PACKAGE(EK.EK6482.(EMA0000039))
  FREE PACKAGE(EK.EK6603.(EMA0000039))
  FREE PACKAGE(EK.EK7663.(EMA0000039))
  FREE PACKAGE(EK.EK7618.(EMA0000039))
  FREE PACKAGE(EK.EK6520.(EMA0000039))
  FREE PACKAGE(EK.EK7681.(EMA0000039))
  FREE PACKAGE(NF.NF7330.(NBSI000089))
  FREE PACKAGE(PR.PR0700I.(PMRT00004756FBDF9D))
  FREE PACKAGE(PR.PR0730I.(PMRT00004756FBDFA6))
  FREE PACKAGE(NF.NF5900.(NBSI000089))
  FREE PACKAGE(NF.NF5910.(NBSI000089))
  FREE PACKAGE(RM.RM7210.(PARS000056))
  FREE PACKAGE(WB.WB1140.(WSTS000035))
  FREE PACKAGE(TR.TR7040.(DERI000026))
  FREE PACKAGE(DI.DI8290.(DI00000034))
  FREE PACKAGE(DI.YDIDB2.(DI00000034570623C3))
  FREE PACKAGE(RM.RM7220.(PARS000054))
  FREE PACKAGE(AV.AV8730.(PMRT000047))
  FREE PACKAGE(RM.YRM0760.(PARS00005557010BE4))
  FREE PACKAGE(EK.EK6510.(EMA0000039))
  FREE PACKAGE(AS.AS0101I.(KABG0000325702815B))
  FREE PACKAGE(AS.AS0100.(KABG000032))
  FREE PACKAGE(AS.AS0610.(KABG000032))
  FREE PACKAGE(CK.CK8560.(DCA0000087))
  FREE PACKAGE(CZ.CZ7270.(HOT0000018))
  FREE PACKAGE(RM.RM7280.(PARS000054))
  FREE PACKAGE(CZ.CZ7740.(KUAN000033))
  FREE PACKAGE(DI.YDIT015.(DI00000042571F1C16CICS))
  FREE PACKAGE(CZ.YCZBCAL.(ACP0000063571F51A9))
  FREE PACKAGE(TR.TR5360.(DERI000026))
  FREE PACKAGE(WB.WB1280.(TOFF000059))
  FREE PACKAGE(WB.WB7720.(TOFF000059))
  FREE PACKAGE(NJ.NJ7180.(QMS0000021))
  FREE PACKAGE(EK.EK7681.(EMA0000048))
  FREE PACKAGE(VV.YVVZZJR.(VDPS00008557CC1B89))
  FREE PACKAGE(DP.DP7010.(DP00000050))
  FREE PACKAGE(AU.YAU180F.(AURA00005057D6BBB7))
  FREE PACKAGE(AU.YAU180U.(AURA00005057D6BBC5))
  FREE PACKAGE(AU.YAU181F.(AURA00005057D6BBD9))
  FREE PACKAGE(AU.YAU181U.(AURA00005057D6BBE0))
  FREE PACKAGE(AU.YAU190F.(AURA00005057D6BC0A))
  FREE PACKAGE(AU.YAU190U.(AURA00005057D6BC0D))
  FREE PACKAGE(AU.YAU191F.(AURA00005057D6BC1D))
  FREE PACKAGE(AU.YAU191U.(AURA00005057D6BC27))
  FREE PACKAGE(WB.YWB709.(WS8B00031857D6C4E1))
  FREE PACKAGE(VV.YVVZZ21.(VDPS00008557D16DF0))
  FREE PACKAGE(EK.EK6413.(EMA0000048))
  FREE PACKAGE(EK.EK6520.(EMA0000048))
  FREE PACKAGE(EK.EK7660.(EMA0000048))
  FREE PACKAGE(EK.EK7668.(EMA0000048))
  FREE PACKAGE(EC.YECDMAE.(SYNC00001957EA4559))
  FREE PACKAGE(EC.YECDMAE.(SYNC00001957EA4559CICS))
  FREE PACKAGE(TR.YTRT061.(RRA000004357E3D5C4))
  FREE PACKAGE(NJ.NJ7180.(QMS0000023))
  FREE PACKAGE(CZ.CZ7270.(HOT0000023))
  FREE PACKAGE(SF.SF7990.(GDIR000033))
  FREE PACKAGE(LC.LC0510I.(TFBM0000255772715A))
  FREE PACKAGE(AV.AV8730.(PMRT000051))
  FREE PACKAGE(NJ.YNJ050.(QMS000002157703E45))
  FREE PACKAGE(EK.EK7681.(EMA0000034))
  FREE PACKAGE(EK.EK6413.(EMA0000034))
  FREE PACKAGE(EK.EK6481.(EMA0000034))
  FREE PACKAGE(EK.EK6510.(EMA0000034))
  FREE PACKAGE(EK.EK6520.(EMA0000034))
  FREE PACKAGE(EK.EK6710.(EMA0000034))
  FREE PACKAGE(EK.EK6482.(EMA0000034))
  FREE PACKAGE(EK.EK6603.(EMA0000034))
  FREE PACKAGE(EK.EK7618.(EMA0000034))
  FREE PACKAGE(EK.EK7663.(EMA0000034))
  FREE PACKAGE(EK.EK7672.(EMA0000034))
  FREE PACKAGE(EK.EK7661.(EMA0000034))
  FREE PACKAGE(EK.EK7666.(EMA0000034))
  FREE PACKAGE(EK.EK7664.(EMA0000034))
  FREE PACKAGE(EK.EK7660.(EMA0000034))
  FREE PACKAGE(EK.EK7667.(EMA0000034))
  FREE PACKAGE(EK.EK7668.(EMA0000034))
  FREE PACKAGE(AS.AS0100.(KABG000038))
  FREE PACKAGE(EK.EK6430.(EMA0000034))
  FREE PACKAGE(EK.EK6866.(EMA0000034))
  FREE PACKAGE(LQ.LQ8090.(LIQ0000019))
  FREE PACKAGE(ER.YERDCU0.(EAMR000003))
  FREE PACKAGE(ER.YERDUP0.(EAMR000003))
  FREE PACKAGE(ER.YERDIN0.(EAMR000003))
  FREE PACKAGE(ER.YERDGE0.(EAMR000003))
  FREE PACKAGE(SV.SV7820.(WSSV000116))
  FREE PACKAGE(TR.TR7040.(DERI000030))
  FREE PACKAGE(CZ.CZ7270.(HOT0000024))
  FREE PACKAGE(CZ.CZ7270.(HOT0000025))
  FREE PACKAGE(WB.WB5320.(TOFF000067))
  FREE PACKAGE(WB.WB1140.(WSTS000039))
  FREE PACKAGE(TN.TN8920.(OTXO000054))
  FREE PACKAGE(TN.TN5003.(OTXO000054))
  FREE PACKAGE(TR.TR5360.(DERI000030))
  FREE PACKAGE(ER.YERDUP0.(EAMR000005))
  FREE PACKAGE(ER.YERDIN0.(EAMR000005))
  FREE PACKAGE(ER.YERDCU0.(EAMR000005))
  FREE PACKAGE(ER.YERDGE0.(EAMR000005))
  FREE PACKAGE(SN.YSN110S.(NOST000268586EA52F))
  FREE PACKAGE(SN.YSN111S.(NOST0002685873C750))
  FREE PACKAGE(TR.TR5360.(DERI000033))
  FREE PACKAGE(AV.AV8730.(PMRT000061))
  FREE PACKAGE(BP.BP5020.(BPST000045))
  FREE PACKAGE(GROUP00.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP01.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP02.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP03.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP04.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP05.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP06.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP07.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP08.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP09.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP10.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP11.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP12.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP13.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP14.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP15.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP16.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP17.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP18.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP19.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP20.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP21.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP22.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP23.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP24.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP25.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP26.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP27.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP28.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP29.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP30.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP31.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP32.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP33.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP34.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP35.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP36.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP37.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP38.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP39.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP40.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP41.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP42.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP43.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP44.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP45.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP46.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP47.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP48.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP49.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP50.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP51.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP52.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP53.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP54.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP55.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP56.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP57.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP58.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP59.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP60.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP61.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP62.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP63.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP64.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP65.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP66.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP67.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP68.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP69.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP70.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP71.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP72.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP73.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP74.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP75.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP76.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP77.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP78.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP79.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP80.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP81.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP82.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP83.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP84.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP85.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP86.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP87.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP88.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP89.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP90.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP91.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP92.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP93.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP94.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP95.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP96.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP97.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP98.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(GROUP99.CBRIDBS.(UW95199HDZ11G0))
  FREE PACKAGE(DAA400_D_MAIN.PSSCSQL.(V4000))
  FREE PACKAGE(PSSSICH.PSSCSQL.(V4000))
  FREE PACKAGE(OS.DB2EBS01.(A18Q001546))
  FREE PACKAGE(OS.DB2EBS03.(A18Q001546))
  FREE PACKAGE(OS.DB2REORG.(A18Q001546))
  FREE PACKAGE(OS.DB2EBS01.(PROD))
  FREE PACKAGE(OS.DB2EBS03.(PROD))
  FREE PACKAGE(OS.DB2REORG.(PROD))
  FREE PACKAGE(YY.YYHECO.(A06M022888))
  FREE PACKAGE(WA.WK9000.(A06M012041))
  FREE PACKAGE(GROUP00.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP01.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP02.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP03.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP04.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP05.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP06.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP07.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP08.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP09.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP10.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP11.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP12.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP13.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP14.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP15.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP16.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP17.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP18.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP19.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP20.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP21.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP22.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP23.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP24.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP25.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP26.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP27.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP28.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP29.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP30.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP31.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP32.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP33.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP34.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP35.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP36.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP37.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP38.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP39.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP40.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP41.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP42.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP43.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP44.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP45.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP46.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP47.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP48.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP49.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP50.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP51.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP52.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP53.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP54.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP55.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP56.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP57.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP58.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP59.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP60.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP61.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP62.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP63.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP64.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP65.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP66.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP67.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP68.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP69.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP70.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP71.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP72.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP73.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP74.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP75.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP76.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP77.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP78.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP79.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP80.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP81.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP82.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP83.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP84.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP85.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP86.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP87.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP88.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP89.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP90.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP91.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP92.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP93.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP94.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP95.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP96.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP97.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP98.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(GROUP99.CBRIDBS.(UA03047HDZ11G0))
  FREE PACKAGE(SE.SE0560.(A20Y001226))
  FREE PACKAGE(DAA400_D_MAIN.PSSCSQL.(V4100))
  FREE PACKAGE(IS.ISLP89.(A06M024770))
  FREE PACKAGE(SE.SE0560.(A20Y001357))
  FREE PACKAGE(IS.ISLP87.(A06M025140))
  FREE PACKAGE(GROUP00.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP01.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP02.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP03.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP04.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP05.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP06.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP07.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP08.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP09.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP10.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP11.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP12.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP13.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP14.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP15.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP16.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP17.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP18.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP19.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP20.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP21.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP22.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP23.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP24.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP25.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP26.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP27.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP28.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP29.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP30.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP31.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP32.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP33.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP34.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP35.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP36.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP37.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP38.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP39.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP40.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP41.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP42.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP43.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP44.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP45.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP46.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP47.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP48.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP49.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP50.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP51.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP52.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP53.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP54.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP55.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP56.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP57.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP58.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP59.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP60.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP61.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP62.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP63.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP64.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP65.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP66.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP67.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP68.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP69.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP70.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP71.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP72.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP73.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP74.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP75.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP76.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP77.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP78.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP79.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP80.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP81.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP82.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP83.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP84.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP85.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP86.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP87.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP88.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP89.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP90.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP91.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP92.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP93.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP94.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP95.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP96.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP97.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP98.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP99.CBRHDBSD.(319441973392039077))
  FREE PACKAGE(GROUP00.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP01.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP02.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP03.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP04.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP05.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP06.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP07.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP08.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP09.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP10.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP11.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP12.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP13.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP14.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP15.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP16.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP17.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP18.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP19.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP20.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP21.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP22.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP23.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP24.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP25.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP26.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP27.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP28.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP29.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP30.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP31.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP32.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP33.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP34.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP35.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP36.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP37.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP38.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP39.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP40.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP41.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP42.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP43.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP44.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP45.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP46.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP47.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP48.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP49.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP50.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP51.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP52.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP53.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP54.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP55.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP56.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP57.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP58.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP59.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP60.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP61.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP62.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP63.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP64.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP65.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP66.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP67.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP68.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP69.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP70.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP71.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP72.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP73.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP74.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP75.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP76.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP77.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP78.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP79.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP80.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP81.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP82.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP83.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP84.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP85.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP86.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP87.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP88.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP89.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP90.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP91.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP92.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP93.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP94.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP95.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP96.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP97.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP98.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP99.CBRHDBS.(441624379392039079))
  FREE PACKAGE(GROUP00.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP01.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP02.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP03.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP04.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP05.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP06.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP07.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP08.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP09.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP10.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP11.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP12.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP13.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP14.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP15.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP16.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP17.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP18.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP19.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP20.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP21.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP22.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP23.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP24.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP25.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP26.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP27.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP28.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP29.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP30.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP31.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP32.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP33.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP34.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP35.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP36.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP37.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP38.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP39.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP40.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP41.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP42.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP43.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP44.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP45.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP46.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP47.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP48.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP49.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP50.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP51.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP52.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP53.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP54.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP55.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP56.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP57.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP58.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP59.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP60.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP61.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP62.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP63.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP64.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP65.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP66.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP67.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP68.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP69.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP70.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP71.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP72.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP73.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP74.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP75.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP76.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP77.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP78.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP79.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP80.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP81.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP82.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP83.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP84.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP85.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP86.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP87.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP88.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP89.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP90.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP91.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP92.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP93.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP94.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP95.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP96.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP97.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP98.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(GROUP99.CBRHDBCV.(051332294392039080))
  FREE PACKAGE(CBRHTBSV.CBRHTBSV.(2004-03-19-05.19.54.152123))
  FREE PACKAGE(GROUP00.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP01.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP02.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP03.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP04.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP05.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP06.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP07.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP08.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP09.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP10.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP11.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP12.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP13.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP14.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP15.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP16.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP17.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP18.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP19.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP20.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP21.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP22.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP23.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP24.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP25.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP26.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP27.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP28.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP29.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP30.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP31.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP32.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP33.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP34.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP35.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP36.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP37.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP38.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP39.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP40.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP41.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP42.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP43.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP44.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP45.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP46.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP47.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP48.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP49.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP50.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP51.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP52.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP53.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP54.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP55.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP56.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP57.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP58.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP59.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP60.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP61.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP62.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP63.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP64.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP65.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP66.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP67.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP68.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP69.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP70.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP71.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP72.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP73.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP74.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP75.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP76.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP77.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP78.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP79.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP80.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP81.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP82.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP83.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP84.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP85.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP86.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP87.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP88.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP89.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP90.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP91.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP92.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP93.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP94.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP95.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP96.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP97.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP98.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(GROUP99.CBRIDBS.(2004-03-19-05.20.09.717597))
  FREE PACKAGE(CBRKCMF.CBRKCMF.(2004-03-19-05.24.25.989125))
  FREE PACKAGE(CBRKCMD.CBRKCMD.(2004-03-19-05.24.23.684781))
  FREE PACKAGE(CBRKCMI.CBRKCMI.(2004-03-19-05.24.26.340864))
  FREE PACKAGE(CBRKCME.CBRKCME.(2004-03-19-05.24.26.563442))
  FREE PACKAGE(CBRKISQL.CBRKISQL.(2004-03-19-05.25.14.674538))
  FREE PACKAGE(CBRHCAUD.CBRHCAUD.(2004-03-19-05.11.59.464087))
  FREE PACKAGE(CBRHCLDL.CBRHCLDL.(2004-03-19-05.12.02.836637))
  FREE PACKAGE(CBRHCLLU.CBRHCLLU.(2004-03-19-05.12.15.137411))
  FREE PACKAGE(CBRHCLMK.CBRHCLMK.(2004-03-19-05.12.19.187980))
  FREE PACKAGE(CBRHCLSG.CBRHCLSG.(2004-03-19-05.12.43.102236))
  FREE PACKAGE(KS.YKSFTXT.(A14S002412533962A5))
  FREE PACKAGE(DAA420_D_MAIN.PSSCSQL.(V4100))
  FREE PACKAGE(SE.YSE09D0.(A20Y00142753971B62))
  FREE PACKAGE(CK.YCKMABU.(A12M005710534404B9))
  FREE PACKAGE(DAA420_D_MAIN.PSSHSQL.(V4200))
  FREE PACKAGE(SE.SE8710.(A12M006478))
  FREE PACKAGE(IT.IT5501.(A20Y001508))
  FREE PACKAGE(CZ.CZ5600.(CRMA003972))
  FREE PACKAGE(CBRKCMR.CBRKCMR.(UA12772HDZ11J0))
  FREE PACKAGE(CBRKCMT.CBRKCMT.(518446089393395349))
  FREE PACKAGE(NL.YNLG030.(BALR00000154735D18))
  FREE PACKAGE(IS.ISLP20.(DML0000004))
  FREE PACKAGE(SV.SV0930.(WSSV000188))
  FREE PACKAGE(CZ.YCZJ323.(GSER00017058D7E6D6))
  FREE PACKAGE(CZ.YCZJ431.(GSER00017058D7E73D))
  FREE PACKAGE(YY.YYUWI.(PSMF00001758EE0EC7))
  FREE PACKAGE(PU.PU7334.(JCLB000014))
  FREE PACKAGE(DE.DE9992.(DE00000043))
  FREE PACKAGE(FI.FI1900.(BKUR000052))
  FREE PACKAGE(VV.YVVZZAR.(VDPS00009958921A13))
  FREE PACKAGE(WB.WB1350.(WSTS000046))
  FREE PACKAGE(WB.WB1060.(WSTS000046))
  FREE PACKAGE(VV.YVVZZ2R.(VDPS00009958933BBC))
  FREE PACKAGE(ER.YERPRI.(EAMR000022))
  FREE PACKAGE(VV.YVVZZ09.(VDPS000099589B3FC8))
  FREE PACKAGE(NI.YNICOFM.(IPC000017558A323CC))
  FREE PACKAGE(FI.FI5067.(BKUR000052))
  FREE PACKAGE(ER.YERPRI.(EAMR000029))
  FREE PACKAGE(DG.YDGPORT.(DEPG000064))
  FREE PACKAGE(YY.YYGETCS.(TOFF0001095953C065))
  FREE PACKAGE(YY.YYGETCS.(TOFF0001095953C065MVS))
  FREE PACKAGE(WB.WB0720.(WS8B000473))
  FREE PACKAGE(DE.DE5031.(DE00000066))
  FREE PACKAGE(DE.DE9992.(DE00000066))
  FREE PACKAGE(FC.FC0010.(KLOM000062))
  FREE PACKAGE(WC.WC7100.(OTXO000070))
  FREE PACKAGE(TN.TN8920.(OTXO000070))
  FREE PACKAGE(WC.WC7104.(OTXO000070))
  FREE PACKAGE(WC.WC7105.(OTXO000070))
  FREE PACKAGE(WC.WC7106.(OTXO000070))
  FREE PACKAGE(WC.WC7400.(OTXO000070))
  FREE PACKAGE(WC.WC7402.(OTXO000070))
  FREE PACKAGE(WC.WC7403.(OTXO000070))
  FREE PACKAGE(SN.YSND006.(SAVS0000055960CF65))
  FREE PACKAGE(TN.YTN0180.(OTXO0000705965FEAFMVS))
  FREE PACKAGE(TN.YTN0190.(OTXO0000705965FEBFMVS))
  FREE PACKAGE(WC.WC7109.(OTXO000070))
  FREE PACKAGE(WC.WC7404.(OTXO000070))
  FREE PACKAGE(WC.WC7405.(OTXO000070))
  FREE PACKAGE(WC.WC7108.(OTXO000070))
  FREE PACKAGE(WB.WB7720.(TOFF000109))
  FREE PACKAGE(AV.AV8710.(PMRT000087))
  FREE PACKAGE(SE.SE8300.(IMS0000057))
  FREE PACKAGE(SE.SE8310.(IMS0000057))
  FREE PACKAGE(NL.YNLG140.(BALR0000745979E99AMVS))
  FREE PACKAGE(NL.YNLG050.(BALR0000745979E97F))
  FREE PACKAGE(NL.YNLG040.(BALR0000745979E97EMVS))
  FREE PACKAGE(NL.YNLG060.(BALR0000745979E986))
  FREE PACKAGE(NL.YNLG060.(BALR0000745979E986MVS))
  FREE PACKAGE(NL.YNLG050.(BALR0000745979E97FMVS))
  FREE PACKAGE(NL.YNLG121.(BALR0000745979E992))
  FREE PACKAGE(NL.YNLG130.(BALR0000745979E995MVS))
  FREE PACKAGE(NL.YNLG03M.(BALR0000745979E978MVS))
  FREE PACKAGE(NL.YNLG030.(BALR0000745979E975))
  FREE PACKAGE(NL.YNLG030.(BALR0000745979E975MVS))
  FREE PACKAGE(NL.YNLG021.(BALR0000745979E970))
  FREE PACKAGE(ED.ED5231.(ED00000052))
  FREE PACKAGE(DE.DE5080.(DE00000061))
  FREE PACKAGE(DE.DE9992.(DE00000061))
  FREE PACKAGE(WB.WB0720.(WS8B000411))
  FREE PACKAGE(CZ.CZ5494.(ACP0000107))
  FREE PACKAGE(WB.WB0720.(WS8B000441))
  FREE PACKAGE(PU.PU7334.(JCLB000021))
  FREE PACKAGE(VV.YVVZZ06.(VDPS000114594269AF))
  FREE PACKAGE(VV.YVVZZ30.(VDPS00011459426994))
  FREE PACKAGE(VV.YVVZZ15.(VDPS00011459426A38))
  FREE PACKAGE(VV.YVVZZ06.(VDPS000114594269AFMVS))
  FREE PACKAGE(VV.YVVZZ08.(VDPS000114594269CD))
  FREE PACKAGE(VV.YVVZZ21.(VDPS00011459426A44))
  FREE PACKAGE(VV.YVVZZ12.(VDPS00011459426A35))
  FREE PACKAGE(VV.YVVZZ1R.(VDPS00011459426A3E))
  FREE PACKAGE(VV.YVVZZ1R.(VDPS00011459426A3EMVS))
  FREE PACKAGE(VV.YVVZZJR.(VDPS00011459426A61))
  FREE PACKAGE(VV.YVVZZ16.(VDPS00011459426A5D))
  FREE PACKAGE(VV.YVVZZAR.(VDPS00011459426A66))
  FREE PACKAGE(VV.YVVZZ23.(VDPS00011459426A7F))
  FREE PACKAGE(VV.YVVZZ24.(VDPS00011459426A82))
  FREE PACKAGE(VV.YVVZZ09.(VDPS00011459426A6C))
  FREE PACKAGE(VV.YVVZZ2R.(VDPS0001145947F3D5MVS))
  FREE PACKAGE(VV.YVVZZ2R.(VDPS0001145947F3D5))
  FREE PACKAGE(VV.YVVZZ3R.(VDPS0001145947F471))
  FREE PACKAGE(VV.YVVZZ18.(VDPS0001145947F613))
  FREE PACKAGE(VV.YVVZZ05.(VDPS0001145947F5B1))
  FREE PACKAGE(VV.YVVZZ14.(VDPS0001145947F5C7))
  FREE PACKAGE(VV.YVVZZ17.(VDPS0001145947F5E0))
  FREE PACKAGE(VV.YVVZZFR.(VDPS0001145947F698))
  FREE PACKAGE(VV.YVVZZFR.(VDPS0001145947F698MVS))
  FREE PACKAGE(VV.YVVZZ25.(VDPS0001145947F674))
  FREE PACKAGE(VV.YVVZZ29.(VDPS0001145947F759))
  FREE PACKAGE(VV.YVVZZ03.(VDPS000114594A9918))
  FREE PACKAGE(VV.YVVZZ03.(VDPS000114594A9918MVS))
  FREE PACKAGE(BP.YBPMUT.(BPST000079594A969E))
  FREE PACKAGE(VV.YVVZZ27.(VDPS0001145946AEC8))
  FREE PACKAGE(YY.YYWBKUR.(BKUR000080594658B8))
  FREE PACKAGE(VV.YVVZZQR.(VDPS000114595120D5))
  FREE PACKAGE(VV.YVVZZ10.(VDPS00011459525BC8))
  FREE PACKAGE(WB.WB0720.(WS8B000468))
  FREE PACKAGE(YX.YXWB231.(WSTS000055594BF1B9))
  FREE PACKAGE(YX.YXWB011.(WSTS000055594BF1D5))
  FREE PACKAGE(VW.YVWB641.(WSTS000055594BF359))
  FREE PACKAGE(YY.YYWBERR.(WSTS000055594BF0A8))
  FREE PACKAGE(DI.YDITBTB.(DI00000068594F7FC8CICSMVS))
  FREE PACKAGE(DI.YDITBTB.(DI00000068594F7FC8MVS))
  FREE PACKAGE(DI.YDITBTB.(DI00000068594F7FC8))
  FREE PACKAGE(DI.YDIT015.(DI00000068594F823D))
  FREE PACKAGE(DI.YDIT015.(DI00000068594F823DMVS))
  FREE PACKAGE(DI.YDIT015.(DI00000068594F823DCICSMVS))
  FREE PACKAGE(VV.YVVZZ19.(VDPS00011759DB8665))
  FREE PACKAGE(VV.YVVZZ27.(VDPS00011759DB8776))
  FREE PACKAGE(PC.YPC0870.(IVN000003559DD0082))
  FREE PACKAGE(EQ.YEQISRK.(EAGL00002459DCE1D0CICSMVS))
  FREE PACKAGE(VV.YVVZZ10.(VDPS00011759E342BE))
  FREE PACKAGE(VV.YVVZZ22.(VDPS00011759EDC6D8))
  FREE PACKAGE(VV.YVVZZ28.(VDPS00011759EDC6FA))
  FREE PACKAGE(DP.DP0320.(DP00000071))
  FREE PACKAGE(VV.YVV3EIP.(VDPS0001175A00A470MVS))
  FREE PACKAGE(FI.YFIWMKG.(BKUR0001165A008305))
  FREE PACKAGE(VV.YVVZZ33.(VDPS00011759FB4F83))
  FREE PACKAGE(WB.WB0720.(WS8B000471))
  FREE PACKAGE(TN.TN8920.(OTXO000081))
  FREE PACKAGE(WB.WB0720.(WS8B000540))
  FREE PACKAGE(VV.YVV3EIP.(VDPS0001565A0883F9))
  FREE PACKAGE(WB.WB0720.(WS8B000535))
  FREE PACKAGE(WB.WB0720.(WS8B000443))
  FREE PACKAGE(WB.WB0720.(WS8I000307))
  FREE PACKAGE(BP.YBPMUT.(BPST000087599ECB6F))
  FREE PACKAGE(LC.YLCTF03.(TFBM00003359B6B138MVS))
  FREE PACKAGE(LC.YLCTF02.(TFBM00003359B6B121MVS))
  FREE PACKAGE(WB.WB0720.(WS8B000493))
  FREE PACKAGE(WB.WB0720.(WS8B000476))
  FREE PACKAGE(WP.YWPLBP1.(DBH000012659B8E57E))
  FREE PACKAGE(WP.YWPLBP1.(DBH000012659B8E57EMVS))
  FREE PACKAGE(WP.YWPL6P1.(DBH000012659B8E72D))
  FREE PACKAGE(WP.YWPR1QX.(DBH000012659B8E877))
  FREE PACKAGE(WP.YWPR3PX.(DBH000012659B8E97F))
  FREE PACKAGE(WP.YWPR5PX.(DBH000012659B8E9C1))
  FREE PACKAGE(WP.YWPRCPX.(DBH000012659B8FAB2))
  FREE PACKAGE(WP.YWPR6PX.(DBH000012659B8FB2E))
  FREE PACKAGE(WP.YWPR7PX.(DBH000012659B8FB4B))
  FREE PACKAGE(WP.YWPRAPX.(DBH000012659B90365))
  FREE PACKAGE(WP.YWPLAP1.(DBH000012659B91C65))
  FREE PACKAGE(WP.YWPLAP1.(DBH000012659B91C65MVS))
  FREE PACKAGE(VV.YVVZZ2R.(VDPS00011759C7AE13))
  FREE PACKAGE(VV.YVVZZ2R.(VDPS00011759C7AE13MVS))
  FREE PACKAGE(DI.YDIU015.(DI0000007059C7A76B))
  FREE PACKAGE(DI.YDIU015.(DI0000007059C7A76BMVS))
  FREE PACKAGE(DI.YDIU016.(DI0000007059C7A7B9))
  FREE PACKAGE(DI.YDIU016.(DI0000007059C7A7B9MVS))
  FREE PACKAGE(LC.LC0511I.(TFBM00003359C2729FMVS))
  FREE PACKAGE(VV.YVVZZ12.(VDPS00011759D0EFDA))
  FREE PACKAGE(EQ.YEQKDGP.(GSER00018759C91710))
  FREE PACKAGE(TN.YTN0201.(OTXO00008159CA241A))
  FREE PACKAGE(VV.YVVZZ14.(VDPS00011759D2568E))
  FREE PACKAGE(VV.YVVZZ05.(VDPS00011759D36248))
  FREE PACKAGE(WB.WB8720.(WSTS000061))
  FREE PACKAGE(WC.WC7103.(WSTS000061))
  FREE PACKAGE(WC.WC7102.(WSTS000061))
  FREE PACKAGE(WB.WB7030.(WSTS000061))
  FREE PACKAGE(WC.WC8403.(WSTS000061))
  FREE PACKAGE(WC.WC8402.(WSTS000061))
  FREE PACKAGE(WB.WB0060.(TOFF000122))
  FREE PACKAGE(WB.WB0720.(WS8B000548))
  FREE PACKAGE(RB.YRBUXY1.(RBK00000185A1D6D88MVS))
  FREE PACKAGE(VV.YVVZZ06.(VDPS0001185A1E8803))
  FREE PACKAGE(VV.YVVZZ06.(VDPS0001185A1E8803MVS))
  FREE PACKAGE(VV.YVVZZ21.(VDPS0001185A1E8890))
  FREE PACKAGE(VV.YVVZZ18.(VDPS0001185A1E8884MVS))
  FREE PACKAGE(VV.YVVZZ28.(VDPS0001185A1E88A3))
  FREE PACKAGE(WB.WB0720.(WS8B000524))
  FREE PACKAGE(BX.YBXADBR.(CLOS0001835A25007A))
  FREE PACKAGE(GM.YGMSTEU.(GM000001605A2E77C8))
  FREE PACKAGE(WF.YWFM537.(WSSW0001055A2EA204))
  FREE PACKAGE(YX.YXWB231.(WSTS0000615A39A8B6))
  FREE PACKAGE(YY.YYWBERR.(WSTS0000615A39A896))
  FREE PACKAGE(CK.YCKE025.(DCA0000188))
  FREE PACKAGE(CK.YCKE020.(DCA0000188))
  FREE PACKAGE(SN.SN5001.(SAVS000018))
  FREE PACKAGE(SN.SN5902.(SAVS000018))
  FREE PACKAGE(SN.SN5910.(SAVS000018))
  FREE PACKAGE(DE.YDE0021.(DE000000775A53475E))
  FREE PACKAGE(YY.YYFIKST.(BKUR0000965A5DE9E3))
  FREE PACKAGE(FI.FI5600.(BKUR000096))
  FREE PACKAGE(VV.YVV5070.(VDPS0001185A5DDB5D))
  FREE PACKAGE(VV.YVV5070.(VDPS0001185A5DDB5DMVS))
  FREE PACKAGE(VV.YVVZZFR.(VDPS0001185A5DDA78))
  FREE PACKAGE(VV.YVVZZFR.(VDPS0001185A5DDA78MVS))
  FREE PACKAGE(DE.DE9992.(DE00000077))
  FREE PACKAGE(CZ.YCZJABW.(GSER0002225A9C2BE5))
  FREE PACKAGE(SV.SV8410.(WSSV000151))
  FREE PACKAGE(SV.SV5940.(WSSV000151))
  FREE PACKAGE(SV.SV0950.(WSSV000151))
  FREE PACKAGE(SV.SV0250.(WSSV000151))
  FREE PACKAGE(PC.PC7040.(IVN0000028))
  FREE PACKAGE(VV.YVVZZNR.(VDPS000099587E0594))
  FREE PACKAGE(VV.YVVZZ25.(VDPS000099587E2698))
  FREE PACKAGE(CZ.CZ5494.(ACP0000103))
  FREE PACKAGE(VV.YVVZZ21.(VDPS00011459426A44MVS))
  FREE PACKAGE(VV.YVVZZ21.(VDPS00011759D24460MVS))
  FREE PACKAGE(CZ.CZ5991.(GSER000191))
  FREE PACKAGE(WQ.WQ6000.(CUBE000112))
  FREE PACKAGE(RT.RT5550.(TABS000080))
  FREE PACKAGE(NL.NL7590.(BALR000076))
  FREE PACKAGE(WQ.WQ6000.(CUBE000118))
  FREE PACKAGE(CZ.CZ6400.(GSER000206))
  FREE PACKAGE(WP.YWPR2PX.(DBH000012659B8E89C))
  FREE PACKAGE(VV.YVVZZJR.(VDPS00011459426A61MVS))
  FREE PACKAGE(VV.YVVZZ15.(VDPS00011759EDC6CA))
  FREE PACKAGE(WF.YWFCB02.(WSSW0001055A2E9AD7))
  FREE PACKAGE(WF.YWFSWC.(WSSW000073))
  FREE PACKAGE(MF.MF8950.(MFR0000049))
  FREE PACKAGE(MF.MF7750.(MFR0000073))
  FREE PACKAGE(WF.WF5410.(WSSW000073))
  FREE PACKAGE(WP.YWPXBGE.(A06M0263755379E562))
  FREE PACKAGE(WP.YWPXBYC.(A06M0263755379E9BB))
  FREE PACKAGE(WF.YWFSWC.(WS8B000357))
  FREE PACKAGE(CE.CE8440.(COPE000034))
  FREE PACKAGE(VP.VP5340.(VIP0000015))
  FREE PACKAGE(TN.TN7020.(OTXO000036))
  FREE PACKAGE(WP.YWPR5PX.(DBH000006857593EAD))
  FREE PACKAGE(TN.YTN5012.(OTXO0000545766A6D3))
  FREE PACKAGE(TN.YTN5013.(OTXO00005457A1E413))
  FREE PACKAGE(TN.TN7004.(OTXO000054))
  FREE PACKAGE(WP.YWPYBDD.(DBH000002254EDE1C2))
  FREE PACKAGE(IT.YITGTR.(TABS0000535613D1F0))
  FREE PACKAGE(EB.EB8374.(KLOM000043))
  FREE PACKAGE(EB.EB8375.(KLOM000049))
  FREE PACKAGE(TN.TN7067.(OTXO000045))
  FREE PACKAGE(TN.TN7068.(OTXO000045))
  FREE PACKAGE(TN.TN7065.(OTXO000045))
  FREE PACKAGE(CZ.CZ7510.(APEN000036))
  FREE PACKAGE(CZ.CZ8010.(APEN000032))
  FREE PACKAGE(TN.TN7066.(OTXO000054))
  FREE PACKAGE(BP.BP7161.(BPST000037))
  FREE PACKAGE(WP.YWPXB1D.(DBH0000068575EE2D0))
  FREE PACKAGE(SV.SV5750.(WSSV000116))
  FREE PACKAGE(VT.VT0120.(EBZV000009))
  FREE PACKAGE(WF.YWFSWC.(WSSW000074))
  FREE PACKAGE(WF.WF5410.(WSSW000074))
  FREE PACKAGE(EV.EV8100.(EKVS000006))
  FREE PACKAGE(RT.RT5110.(RFT0000004))
  FREE PACKAGE(MF.MF7010.(MFR0000049))
  FREE PACKAGE(NF.NF5710.(NBSI000050))
  FREE PACKAGE(TN.YTNW100.(OTXO0000235628CC9D))
  FREE PACKAGE(DE.DE7120.(DE00000023))
  FREE PACKAGE(MF.MF7801.(MFR0000078))
  FREE PACKAGE(GE.GE7770.(FFOR000021))
  FREE PACKAGE(WP.YWPXB1E.(DBH0000068575EE2C6))
  FREE PACKAGE(PC01.PC5070.(IVN0000021))
  FREE PACKAGE(PC02.PC5070.(IVN0000021))
  FREE PACKAGE(PC03.PC5070.(IVN0000021))
  FREE PACKAGE(PC04.PC5070.(IVN0000021))
  FREE PACKAGE(PC05.PC5070.(IVN0000021))
  FREE PACKAGE(PC06.PC5070.(IVN0000021))
  FREE PACKAGE(CZ.CZ5280.(KLOM000049))
  FREE PACKAGE(VV.YVVZZ04.(VDPS000077576AD450))
  FREE PACKAGE(MF.MF7000.(MFR0000082))
  FREE PACKAGE(TN.YTNBOPH.(OTXO0000545766A5BA))
  FREE PACKAGE(RT.RT5090.(RFT0000015))
  FREE PACKAGE(RT.RT5120.(RFT0000015))
  FREE PACKAGE(RT.RT5060.(RFT0000015))
  FREE PACKAGE(RT.RT5140.(RFT0000015))
  FREE PACKAGE(RT.RT5170.(RFT0000015))
  FREE PACKAGE(RT.RT5020.(RFT0000015))
  FREE PACKAGE(RT.RT5160.(RFT0000015))
  FREE PACKAGE(TN.TN8900.(OTXO000045))
  FREE PACKAGE(YY.YYFILOD.(BKUR00003857C69CB7))
  FREE PACKAGE(CZ.CZ6300.(GSER000128))
  FREE PACKAGE(WB.WB5570.(WS8B000334))
  FREE PACKAGE(ER.YERDUPD.(EAMR00000557C5BAD0))
  FREE PACKAGE(WB.WB5340.(WS8B000345))
  FREE PACKAGE(WF.YWFM537.(WSSW00007157D57C31))
  FREE PACKAGE(CU.CU9000.(CIFS000122))
  FREE PACKAGE(TN.YTNW170.(OTXO00005457724BD1))
  FREE PACKAGE(MF.MF7210.(MFR0000082))
  FREE PACKAGE(AS.AS0050.(KABG000038))
  FREE PACKAGE(WF.YWF64CA.(WSSW000064577A9CFA))
  FREE PACKAGE(KS.KS5685.(EBVV000187))
  FREE PACKAGE(SV.SV5150.(WSSV000116))
  FREE PACKAGE(SV.SV5710.(WSSV000116))
  FREE PACKAGE(SV.SV5740.(WSSV000116))
  FREE PACKAGE(SV.SV5790.(WSSV000116))
  FREE PACKAGE(SV.SV5600.(WSSV000116))
  FREE PACKAGE(SV.SV5210.(WSSV000116))
  FREE PACKAGE(MF.MF8703.(MFR0000082))
  FREE PACKAGE(MF.MF8706.(MFR0000082))
  FREE PACKAGE(MF.MF8710.(MFR0000082))
  FREE PACKAGE(MF.MF8719.(MFR0000082))
  FREE PACKAGE(EV.EV7030.(EKVS000013))
  FREE PACKAGE(DE.DE5690.(DE00000033))
  FREE PACKAGE(FF.FF5000.(FFOR000021))
  FREE PACKAGE(PC.PC5090.(IVN0000021))
  FREE PACKAGE(KS.YKS5512.(CSED00002257821E43))
  FREE PACKAGE(AZ.AZ0210.(AWZA000036))
  FREE PACKAGE(SV.SV8150.(WSSV000116))
  FREE PACKAGE(DE.DE5600.(DE00000033))
  FREE PACKAGE(SV.SV5760.(WSSV000116))
  FREE PACKAGE(YY.YYWBERX.(TOFF00006757A1E2F4))
  FREE PACKAGE(WB.WB5280.(WSTS000039))
  FREE PACKAGE(TN.TN5016.(OTXO000054))
  FREE PACKAGE(TN.TN5010.(OTXO000054))
  FREE PACKAGE(CZ.CZ5150.(KLOM000049))
  FREE PACKAGE(PC01.PC5060.(AIS0000110))
  FREE PACKAGE(PC02.PC5060.(AIS0000110))
  FREE PACKAGE(PC03.PC5060.(AIS0000110))
  FREE PACKAGE(PC04.PC5060.(AIS0000110))
  FREE PACKAGE(PC05.PC5060.(AIS0000110))
  FREE PACKAGE(PC06.PC5060.(AIS0000110))
  FREE PACKAGE(DI.DI5200.(DI00000046))
  FREE PACKAGE(WF.YWFCB02.(WSSW00003857BC040B))
  FREE PACKAGE(WQ.WQ5950.(CUBE000058))
  FREE PACKAGE(WF.YWFSWC.(WSSW000075))
  FREE PACKAGE(HP1.AAFYWR.(HPSVP2AAFYWR))
  FREE PACKAGE(VT.YVTBEDR.(A14S00248553A57407))
  FREE PACKAGE(WP.YWPXBKF.(A06M0264235370BC96))
  FREE PACKAGE(WP.YWPXBME.(A06M0264235370BD2A))
  FREE PACKAGE(WP.YWPXBMA.(A06M0264235370BCCF))
  FREE PACKAGE(WP.YWPXBMD.(A06M0264235370BCE8))
  FREE PACKAGE(WP.YWPXBMB.(A06M0264235370BD02))
  FREE PACKAGE(WP.YWPXBPA.(A06M0263755379E68B))
  FREE PACKAGE(WP.YWPXBPB.(A06M0263755379E690))
  FREE PACKAGE(WP.YWPXBPC.(A06M0263755379E696))
  FREE PACKAGE(WP.YWPXBPD.(A06M0263755379E69D))
  FREE PACKAGE(WP.YWPXBPE.(A06M0263755379E6A2))
  FREE PACKAGE(WP.YWPXBPF.(A06M0263755379E6A8))
  FREE PACKAGE(WP.YWPXBPG.(A06M0263755379E6AC))
  FREE PACKAGE(WP.YWPXBPH.(A06M0263755379E6B1))
  FREE PACKAGE(WP.YWPXBPI.(A06M0263755379E6B5))
  FREE PACKAGE(WP.YWPXBQB.(A06M0263755379E78F))
  FREE PACKAGE(WP.YWPXBQA.(A06M0263755379E6B9))
  FREE PACKAGE(WP.YWPXBQE.(A06M0263755379E79C))
  FREE PACKAGE(WP.YWPXBQD.(A06M0263755379E797))
  FREE PACKAGE(WP.YWPXBQF.(A06M0263755379E7A0))
  FREE PACKAGE(WP.YWPXBQG.(A06M0263755379E7A5))
  FREE PACKAGE(WP.YWPYBAC.(A06M0263755379FA86))
  FREE PACKAGE(WP.YWPYBAD.(A06M0263755379FA8A))
  FREE PACKAGE(WP.YWPYBAE.(A06M0263755379FA8F))
  FREE PACKAGE(WP.YWPYBAF.(A06M0263755379FA93))
  FREE PACKAGE(WP.YWPYBAG.(A06M0263755379FA97))
  FREE PACKAGE(EV.EV8220.(A19R002528))
  FREE PACKAGE(YY.YYWBKUR.(A06M027333543018CE))
  FREE PACKAGE(VT.YVTDTAT.(A14S00262754901C5B))
  FREE PACKAGE(VV.YVV5070.(VDPS00001455081B63))
  FREE PACKAGE(RT.RT5130.(RFT0000003))
  FREE PACKAGE(MF.YMFC118.(MFR0000083575FEE4D))
  FREE PACKAGE(HPS.ZANJIVS.(HPSVP2ZANJIVS))
  FREE PACKAGE(HP1.ZANJIVS.(HPSVP2ZANJIVS))
  FREE PACKAGE(HPS.ZAJVAVS.(HPSVP2ZAJVAVS))
  FREE PACKAGE(HP1.ZAJVAVS.(HPSVP2ZAJVAVS))
  FREE PACKAGE(HPS.ZAJOIVS.(HPSVP2ZAJOIVS))
  FREE PACKAGE(HP1.ZAJOIVS.(HPSVP2ZAJOIVS))
  FREE PACKAGE(HP1.AA6VV6.(HPSVP2AA6VV6))
  FREE PACKAGE(HP3.AA6VV6.(HPSVP2AA6VV6))
  FREE PACKAGE(HP1.ABMXVN.(HPSVP2ABMXVN))
  FREE PACKAGE(HP3.ABMXVN.(HPSVP2ABMXVN))
  FREE PACKAGE(HP1.AAFZWR.(HPSVP2AAFZWR))
  FREE PACKAGE(HP3.AAFZWR.(HPSVP2AAFZWR))
  FREE PACKAGE(HP1.AJ0EWS.(HPSVP2AJ0EWS))
  FREE PACKAGE(HP3.AJ0EWS.(HPSVP2AJ0EWS))
  FREE PACKAGE(HP1.AGXNLE.(HPSVP2AGXNLE))
  FREE PACKAGE(HP3.AGXNLE.(HPSVP2AGXNLE))
  FREE PACKAGE(HP1.ABC8QY.(HPSVP2ABC8QY))
  FREE PACKAGE(HP3.ABC8QY.(HPSVP2ABC8QY))
  FREE PACKAGE(WQ.YWQREPI.(CUBE000003555B64DD))
  FREE PACKAGE(NF.NF8610.(NBSC000008))
  FREE PACKAGE(AV.YAVTOTX.(AIS000002855827B69))
  FREE PACKAGE(WP.YWPXBXE.(DBH00000195582B30B))
  FREE PACKAGE(WP.YWPXBXA.(DBH00000195582B1B3))
  FREE PACKAGE(WP.YWPXBXB.(DBH00000195582B1DA))
  FREE PACKAGE(WP.YWPXBXC.(DBH00000195582B1F3))
  FREE PACKAGE(WP.YWPXBXD.(DBH00000195582B20D))
  FREE PACKAGE(EQ.YEQWAEC.(APEN000014558BE31D))
  FREE PACKAGE(WC.WC7230.(OTXO000014))
  FREE PACKAGE(WB.WB0990.(TOFF000026))
  FREE PACKAGE(MF.MF7240.(MFR0000060))
  FREE PACKAGE(MF.MF7260.(MFR0000060))
  FREE PACKAGE(MF.MF7930.(MFR0000060))
  FREE PACKAGE(MF.MF8630.(MFR0000060))
  FREE PACKAGE(NTA1P.CZA0199.(A02E00053855E028A9))
  FREE PACKAGE(MF.YMFINFO.(MFR0000050560270B4))
  FREE PACKAGE(MF.YMFINFO.(MFR0000050560270B4CICS))
  FREE PACKAGE(MF.MF7120.(MFR0000049))
  FREE PACKAGE(MF.MF7550.(MFR0000049))
  FREE PACKAGE(MF.MF8610.(MFR0000049))
  FREE PACKAGE(CZ.YCZJ323.(GSER000027560AC099))
  FREE PACKAGE(CZ.YCZM435.(BEWI000004560A9276))
  FREE PACKAGE(NF.YNFIB03.(IB00000013560BA1BD))
  FREE PACKAGE(MF.MF7902.(MFR0000049))
  FREE PACKAGE(MF.MF7580.(MFR0000049))
  FREE PACKAGE(VV.YVVZZ15.(VDPS000052561CE2B7))
  FREE PACKAGE(MF.MF7590.(MFR0000049))
  FREE PACKAGE(MF.YMFC219.(MFR000006656C33628))
  FREE PACKAGE(MF.YMFC220.(MFR000006656C33B6B))
  FREE PACKAGE(NL.NL8060.(PSFG000032))
  FREE PACKAGE(MF.MF7110.(MFR0000065))
  FREE PACKAGE(MF.MF7220.(MFR0000065))
  FREE PACKAGE(YY.YYWB101.(WS8B00018756D6FC76))
  FREE PACKAGE(DP.DP7010.(DP00000041))
  FREE PACKAGE(WQ.YWQ1502.(CUBE0000305677E85A))
  FREE PACKAGE(WQ.YWQ1501.(CUBE0000305677F9BE))
  FREE PACKAGE(BP.BP9060.(BPST000037))
  FREE PACKAGE(WP.YWPRCBX.(DBH0000054569E140F))
  FREE PACKAGE(YY.YYDB2FK.(TOFF00004856AA0B30))
  FREE PACKAGE(TN.YTNDEP.(OTXO00003656AA11D9))
  FREE PACKAGE(MF.MF7320.(MFR0000065))
  FREE PACKAGE(MF.MF7380.(MFR0000065))
  FREE PACKAGE(MF.MF7570.(MFR0000065))
  FREE PACKAGE(NG.YNGKWEL.(PROK00006556B0E9D0))
  FREE PACKAGE(NG.YNGPWEL.(PROK00006556B0EA50))
  FREE PACKAGE(MF.YMFC209.(MFR0000079574192C4))
  FREE PACKAGE(MF.YMFC217.(MFR000007957419FF1))
  FREE PACKAGE(MF.YMFC202.(MFR0000079574189AF))
  FREE PACKAGE(MF.YMFC211.(MFR000007957418AC3))
  FREE PACKAGE(MF.YMFC203.(MFR000007957418A72))
  FREE PACKAGE(WP.YWPR1PX.(DBH000006857444F52))
  FREE PACKAGE(WP.YWPR2PX.(DBH000006857444F62))
  FREE PACKAGE(WP.YWPRCPX.(DBH000006857444F41))
  FREE PACKAGE(WP.YWPRBPX.(DBH000006857444F3E))
  FREE PACKAGE(WP.YWPRAPX.(DBH000006857444F3A))
  FREE PACKAGE(WP.YWPR6PX.(DBH000006857444FA1))
  FREE PACKAGE(WP.YWPR3PX.(DBH000006857444F88))
  FREE PACKAGE(AV.YAVNV10.(AIS0000095574D8EE1))
  FREE PACKAGE(AV.YAVNV50.(AIS0000095574D922B))
  FREE PACKAGE(RT.RT5100.(RFT0000016))
  FREE PACKAGE(MF.YMFC106.(MFR000008357583124))
  FREE PACKAGE(MF.YMFC108.(MFR0000083575831C8))
  FREE PACKAGE(MF.YMFC107.(MFR00000835757D747))
  FREE PACKAGE(BP.YBPMUT.(BPST00004857589C3C))
  FREE PACKAGE(PC.YPC0570.(IVN000002157629DE6))
  FREE PACKAGE(PC01.YPC0740.(IVN000002157629A15))
  FREE PACKAGE(PC02.YPC0740.(IVN000002157629A15))
  FREE PACKAGE(PC03.YPC0740.(IVN000002157629A15))
  FREE PACKAGE(PC04.YPC0740.(IVN000002157629A15))
  FREE PACKAGE(PC05.YPC0740.(IVN000002157629A15))
  FREE PACKAGE(PC06.YPC0740.(IVN000002157629A15))
  FREE PACKAGE(PC01.YPC0730.(IVN000002157629A14))
  FREE PACKAGE(PC02.YPC0730.(IVN000002157629A14))
  FREE PACKAGE(PC03.YPC0730.(IVN000002157629A14))
  FREE PACKAGE(PC04.YPC0730.(IVN000002157629A14))
  FREE PACKAGE(PC05.YPC0730.(IVN000002157629A14))
  FREE PACKAGE(PC06.YPC0730.(IVN000002157629A14))
  FREE PACKAGE(WB.YWBCTA.(WS8B000286575E9C03))
  FREE PACKAGE(WB.YWBMAS.(WS8B000286575E9E49))
  FREE PACKAGE(NZ.NZSRV07.(NZV0000086))
  FREE PACKAGE(WP.YWPXBJA.(DBH0000068575EE13F))
  FREE PACKAGE(WP.YWPXBJE.(DBH0000068575EE157))
  FREE PACKAGE(WP.YWPXBJD.(DBH0000068575EE163))
  FREE PACKAGE(WP.YWPXBJC.(DBH0000068575EE17C))
  FREE PACKAGE(WP.YWPXBJB.(DBH0000068575EE18E))
  FREE PACKAGE(WP.YWPXB1A.(DBH0000068575EE2A7))
  FREE PACKAGE(WP.YWPXB1B.(DBH0000068575EE2E4))
  FREE PACKAGE(WP.YWPXB1C.(DBH0000068575EE2D9))
  FREE PACKAGE(WB.YWBIO.(WS8B000286575EE61A))
  FREE PACKAGE(LB.YLB0090.(AIS0000095576AAD56))
  FREE PACKAGE(CZ.CZ5270.(KLOM000049))
  FREE PACKAGE(WB.YWBEBSM.(WSTS00003957669F37))
  FREE PACKAGE(YY.YYWBVIN.(WSTS00003957669F10))
  FREE PACKAGE(TN.YTNSICH.(OTXO0000545766A5D8))
  FREE PACKAGE(SA.SA0160.(CSVE000051))
  FREE PACKAGE(SA.SA0470.(CSVE000051))
  FREE PACKAGE(MF.YMFC110.(MFR00000835767C4BD))
  FREE PACKAGE(MF.YMFC112.(MFR00000835767C4C4))
  FREE PACKAGE(MF.YMFC113.(MFR00000835767C4CA))
  FREE PACKAGE(MF.YMFC116.(MFR00000835767C4E0))
  FREE PACKAGE(MF.YMFX155.(MFR00000835767C612))
  FREE PACKAGE(AU.YAU180S.(AURA00004356F3E645))
  FREE PACKAGE(AU.YAU180D.(AURA00004356F3E622))
  FREE PACKAGE(AU.YAU180I.(AURA00004356F3E638))
  FREE PACKAGE(AU.YAU181D.(AURA00004356F3E6C6))
  FREE PACKAGE(AU.YAU181I.(AURA00004356F3E6CB))
  FREE PACKAGE(AU.YAU181S.(AURA00004356F3E6CC))
  FREE PACKAGE(AU.YAU190D.(AURA00004356F3E6FA))
  FREE PACKAGE(AU.YAU190S.(AURA00004356F3E700))
  FREE PACKAGE(AU.YAU190I.(AURA00004356F3E6FF))
  FREE PACKAGE(AU.YAU191D.(AURA00004356F3E705))
  FREE PACKAGE(AU.YAU191I.(AURA00004356F3E71C))
  FREE PACKAGE(AU.YAU191S.(AURA00004356F3E71C))
  FREE PACKAGE(WQ.YWQEXCP.(CUBE00003956FD4720))
  FREE PACKAGE(WQ.YWQ1101.(CUBE00003556FA509B))
  FREE PACKAGE(MF.MF8310.(MFR0000073))
  FREE PACKAGE(NF.YNF0101.(NBSI00005657010320))
  FREE PACKAGE(MF.MF7250.(MFR0000073))
  FREE PACKAGE(KS.KS5500.(CSED000019))
  FREE PACKAGE(YY.YYVPSVF.(VIP00000145704EE3B))
  FREE PACKAGE(WC.WC7280.(OTXO000045))
  FREE PACKAGE(CZ.YCZTPRT.(BEWI000009570E6247))
  FREE PACKAGE(WB.WB5040.(WS8B000222))
  FREE PACKAGE(WB.YWBITV.(TOFF0000595721BC72))
  FREE PACKAGE(MF.MF7330.(MFR0000078))
  FREE PACKAGE(KR.YKRBCAL.(ACP00000725735CCA5))
  FREE PACKAGE(FI.FI5200.(BKUR000038))
  FREE PACKAGE(NI.YNICS01.(IPC000015457C2DE87))
  FREE PACKAGE(CE.CE5200.(COPE000034))
  FREE PACKAGE(DE.DE0420.(DE00000029))
  FREE PACKAGE(DE.DE0820.(DE00000029))
  FREE PACKAGE(DE.DE0090.(DE00000029))
  FREE PACKAGE(DE.DE0030.(DE00000029))
  FREE PACKAGE(DE.DE0050.(DE00000029))
  FREE PACKAGE(EX.YEX0003.(EXPN00005357CDA468))
  FREE PACKAGE(NI.NI0040.(IPC0000181))
  FREE PACKAGE(EB.EB6480.(EXPN000054))
  FREE PACKAGE(CZ.YCZPABW.(BEWI00001957D171E9))
  FREE PACKAGE(EX.EX5020.(EXPN000052))
  FREE PACKAGE(WB.WB1290.(WS8B000345))
  FREE PACKAGE(WB.WB0980.(WS8B000345))
  FREE PACKAGE(AP.YAPUTGK.(APEN00003657D67A8A))
  FREE PACKAGE(ER.YERDCUR.(EAMR00001257D69A33))
  FREE PACKAGE(ER.YERDGET.(EAMR00001257D69A21))
  FREE PACKAGE(WM.WM0010.(WSIN000037))
  FREE PACKAGE(ER.YERBER.(EAMR000012))
  FREE PACKAGE(NI.YNILBPL.(IPC000017057DA8022))
  FREE PACKAGE(NI.YNILBP2.(IPC000017057DA8023))
  FREE PACKAGE(NI.NI0010.(IPC0000170))
  FREE PACKAGE(NO.NO0970.(NO00000030))
  FREE PACKAGE(LC.YLCTF03.(TFBM00002557727387))
  FREE PACKAGE(LC.YLCTF01.(TFBM0000255772734D))
  FREE PACKAGE(LC.YLCTF02.(TFBM00002557727367))
  FREE PACKAGE(WB.YWBSA2.(WS8B00028657721F2F))
  FREE PACKAGE(CI.CI0090.(GEGE000015))
  FREE PACKAGE(CD.CD2590.(UPDS000031))
  FREE PACKAGE(YY.YYNLCPO.(MOD0000021577299E0))
  FREE PACKAGE(MF.MF7300.(MFR0000082))
  FREE PACKAGE(MF.MF7340.(MFR0000082))
  FREE PACKAGE(MF.MF7310.(MFR0000082))
  FREE PACKAGE(MF.MF7360.(MFR0000082))
  FREE PACKAGE(CZ.YCZGETP.(KUAN0000375773DDC4))
  FREE PACKAGE(NTA1P.CZA0183.(A02E000561576FB9C6))
  FREE PACKAGE(CI.CI0100.(GEGE000017))
  FREE PACKAGE(WF.WF0300.(WSSW000064))
  FREE PACKAGE(WF.WF0280.(WSSW000064))
  FREE PACKAGE(WF.WF0310.(WSSW000064))
  FREE PACKAGE(WF.WF0320.(WSSW000064))
  FREE PACKAGE(WF.WF0350.(WSSW000064))
  FREE PACKAGE(UU.UU5170.(RS20000050))
  FREE PACKAGE(LB.YLB0095.(AIS000009557712672))
  FREE PACKAGE(DE.YDELSTO.(DE00000033577144E4))
  FREE PACKAGE(VD.VDGLH00.(DSPV000030))
  FREE PACKAGE(VD.VDDBM15.(DSPV000030))
  FREE PACKAGE(EK.EK6841.(EMA0000034))
  FREE PACKAGE(SV.SV0950.(WSSV000116))
  FREE PACKAGE(SV.SV0930.(WSSV000116))
  FREE PACKAGE(SV.SV0240.(WSSV000116))
  FREE PACKAGE(SV.SV5780.(WSSV000116))
  FREE PACKAGE(SV.SV5910.(WSSV000116))
  FREE PACKAGE(VP.VP5310.(VIP0000015))
  FREE PACKAGE(VP.VP5300.(VIP0000015))
  FREE PACKAGE(VP.VP5330.(VIP0000015))
  FREE PACKAGE(KS.YKS5511.(CSED000022577CE9CC))
  FREE PACKAGE(TN.YTN0021.(OTXO000054577CC9AE))
  FREE PACKAGE(TN.YTN0100.(OTXO000054577CC97A))
  FREE PACKAGE(NF.YNFIB07.(IB0000002257752C1E))
  FREE PACKAGE(SV.SV8620.(WSSV000116))
  FREE PACKAGE(SV.SV5940.(WSSV000116))
  FREE PACKAGE(SV.SV8630.(WSSV000116))
  FREE PACKAGE(NL.NL7310.(BALR000041))
  FREE PACKAGE(SV.SV0250.(WSSV000116))
  FREE PACKAGE(SV.SV8300.(WSSV000116))
  FREE PACKAGE(MF.MF7020.(MFR0000082))
  FREE PACKAGE(RT.RT0200.(RFT0000016))
  FREE PACKAGE(WI.YWI0087.(WS8B000313577A4B43))
  FREE PACKAGE(SV.SV7770.(WSSV000116))
  FREE PACKAGE(EX.EX5030.(EXPN000039))
  FREE PACKAGE(VT.VT5130.(EBZV000009))
  FREE PACKAGE(FZ.FZ0820.(FZ00000007))
  FREE PACKAGE(DE.DE0400.(DE00000033))
  FREE PACKAGE(DE.DE0490.(DE00000033))
  FREE PACKAGE(DE.DE0830.(DE00000033))
  FREE PACKAGE(CZ.CZ6500.(GSER000112))
  FREE PACKAGE(CZ.CZ6400.(GSER000112))
  FREE PACKAGE(DP.DP0920.(DP00000043))
  FREE PACKAGE(CZ.YCZJABW.(GSER0001115785141E))
  FREE PACKAGE(MF.YMFLPID.(MFR0000082577E5826))
  FREE PACKAGE(MF.MF7510.(MFR0000082))
  FREE PACKAGE(MF.MF7500.(MFR0000082))
  FREE PACKAGE(MF.MF7230.(MFR0000082))
  FREE PACKAGE(MF.MF8500.(MFR0000082))
  FREE PACKAGE(MF.MF8600.(MFR0000082))
  FREE PACKAGE(MF.MF8620.(MFR0000082))
  FREE PACKAGE(SV.YSVAUHI.(WSSV000116578CB6A6))
  FREE PACKAGE(MF.MF8110.(MFR0000082))
  FREE PACKAGE(MF.YMFC101.(MFR0000083578E3B26))
  FREE PACKAGE(MF.YMFC104.(MFR0000083578E3B39))
  FREE PACKAGE(MF.YMFC105.(MFR0000083578E3B49))
  FREE PACKAGE(MF.YMFC114.(MFR0000083578E4191))
  FREE PACKAGE(MF.MF8120.(MFR0000082))
  FREE PACKAGE(MF.MF8130.(MFR0000082))
  FREE PACKAGE(WQ.WQ6010.(CUBE000052))
  FREE PACKAGE(FF.FF0010.(FFOR000021))
  FREE PACKAGE(ED.ED0950.(ED00000036))
  FREE PACKAGE(FI.FI2100.(BKUR000020))
  FREE PACKAGE(CE.YCE1000.(COPE00002957962ADA))
  FREE PACKAGE(WP.YWPR7PX.(DBH0000068578E578A))
  FREE PACKAGE(BX.BX8280.(CLOS000125))
  FREE PACKAGE(VP.VP0030.(VIP0000015))
  FREE PACKAGE(WQ.YWQBERI.(CUBE00005257979BE0))
  FREE PACKAGE(DE.DE0430.(DE00000033))
  FREE PACKAGE(FI.FI5260.(BKUR000018))
  FREE PACKAGE(DE.DE0410.(DE00000033))
  FREE PACKAGE(AV.AV0210.(PMRT000051))
  FREE PACKAGE(AV.AV0220.(PMRT000051))
  FREE PACKAGE(AV.AV0150.(PMRT000051))
  FREE PACKAGE(AV.AV0160.(PMRT000051))
  FREE PACKAGE(AV.AV0310.(PMRT000051))
  FREE PACKAGE(AV.AV0410.(PMRT000051))
  FREE PACKAGE(EC.EC5130.(KLOM000049))
  FREE PACKAGE(AV.AV0170.(PMRT000051))
  FREE PACKAGE(MF.MF8210.(MFR0000082))
  FREE PACKAGE(AV.AV0190.(PMRT000051))
  FREE PACKAGE(LB.YLB0091.(AIS000009557A7320F))
  FREE PACKAGE(DE.YDE0021.(DE0000003357A0E330))
  FREE PACKAGE(DE.DE0810.(DE00000033))
  FREE PACKAGE(DE.DE5130.(DE00000033))
  FREE PACKAGE(CZ.CZ5400.(PIG0000008))
  FREE PACKAGE(WB.YWBBODA.(WS8B00028657A1D413))
  FREE PACKAGE(WB.YWBN100.(WS8B00028657A1D54A))
  FREE PACKAGE(WB.YWBSUM.(WS8B00028657A1DB75))
  FREE PACKAGE(WB.WB0330.(WS8B000316))
  FREE PACKAGE(TN.YTNOTF.(OTXO00005457A1E392))
  FREE PACKAGE(WB.YWB530.(WS8B000312))
  FREE PACKAGE(WB.WB0680.(WSTS000039))
  FREE PACKAGE(WB.WB0840.(WSTS000039))
  FREE PACKAGE(WB.WB1130.(WSTS000039))
  FREE PACKAGE(WB.WB0550.(WSTS000039))
  FREE PACKAGE(WB.WB0630.(WSTS000039))
  FREE PACKAGE(WB.WB5260.(WSTS000039))
  FREE PACKAGE(WC.WC5010.(OTXO000054))
  FREE PACKAGE(WC.WC5050.(OTXO000054))
  FREE PACKAGE(WC.WC8401.(OTXO000054))
  FREE PACKAGE(WC.WC8410.(OTXO000054))
  FREE PACKAGE(WB.WB0520.(WSTS000039))
  FREE PACKAGE(WB.WB0530.(WSTS000039))
  FREE PACKAGE(WB.WB0570.(WSTS000039))
  FREE PACKAGE(WB.WB0510.(WSTS000039))
  FREE PACKAGE(WB.WB0870.(WSTS000039))
  FREE PACKAGE(WB.WB0580.(WSTS000039))
  FREE PACKAGE(WB.WB0600.(WSTS000039))
  FREE PACKAGE(WB.WB0620.(WSTS000039))
  FREE PACKAGE(WB.WB0660.(WSTS000039))
  FREE PACKAGE(WB.WB0830.(WSTS000039))
  FREE PACKAGE(WB.WB0940.(WSTS000039))
  FREE PACKAGE(WB.WB0950.(WSTS000039))
  FREE PACKAGE(TN.TN0530.(OTXO000054))
  FREE PACKAGE(RI.RI0820.(RI00000012))
  FREE PACKAGE(WB.WB1110.(WSTS000039))
  FREE PACKAGE(WB.WB1310.(WSTS000039))
  FREE PACKAGE(WB.WB1340.(WSTS000039))
  FREE PACKAGE(WB.WB0970.(WSTS000039))
  FREE PACKAGE(WB.WB1020.(WSTS000039))
  FREE PACKAGE(WB.WB1030.(WSTS000039))
  FREE PACKAGE(WB.WB1040.(WSTS000039))
  FREE PACKAGE(WB.WB1050.(WSTS000039))
  FREE PACKAGE(WB.WB1070.(WSTS000039))
  FREE PACKAGE(WB.WB5270.(WSTS000039))
  FREE PACKAGE(WB.WB5290.(WSTS000039))
  FREE PACKAGE(WB.WB1080.(TOFF000067))
  FREE PACKAGE(WB.WB1090.(TOFF000067))
  FREE PACKAGE(WB.WB1100.(TOFF000067))
  FREE PACKAGE(TN.YTNUPD.(OTXO00005457A33001))
  FREE PACKAGE(CE.YCEWIAP.(COPE00002957A34674))
  FREE PACKAGE(SV.SV5650.(WSSV000116))
  FREE PACKAGE(PC01.PC5120.(IVN0000021))
  FREE PACKAGE(PC02.PC5120.(IVN0000021))
  FREE PACKAGE(PC03.PC5120.(IVN0000021))
  FREE PACKAGE(PC04.PC5120.(IVN0000021))
  FREE PACKAGE(PC05.PC5120.(IVN0000021))
  FREE PACKAGE(PC06.PC5120.(IVN0000021))
  FREE PACKAGE(CI.CI0070.(KUGE000031))
  FREE PACKAGE(CI.CI0080.(KUGE000031))
  FREE PACKAGE(DE.DE0440.(DE00000033))
  FREE PACKAGE(KA.KA0030.(KOAB000039))
  FREE PACKAGE(CZ.CZ8980.(KLOM000049))
  FREE PACKAGE(MF.MF7200.(MFR0000090))
  FREE PACKAGE(PC01.YPC0520.(AIS000011157ADCAC2))
  FREE PACKAGE(PC02.YPC0520.(AIS000011157ADCAC2))
  FREE PACKAGE(PC03.YPC0520.(AIS000011157ADCAC2))
  FREE PACKAGE(PC04.YPC0520.(AIS000011157ADCAC2))
  FREE PACKAGE(PC05.YPC0520.(AIS000011157ADCAC2))
  FREE PACKAGE(PC06.YPC0520.(AIS000011157ADCAC2))
  FREE PACKAGE(AV.AV0250.(PMRT000051))
  FREE PACKAGE(WB.YWBBOPR.(WS8B00032957AC99AE))
  FREE PACKAGE(LC.LC0511I.(TFBM00002757AC7BB6))
  FREE PACKAGE(AV.AV0180.(PMRT000064))
  FREE PACKAGE(CE.CE5230.(COPE000040))
  FREE PACKAGE(LB.YLB0120.(IPC000015457B202A2))
  FREE PACKAGE(CZ.CZ5190.(GSER000131))
  FREE PACKAGE(NF.NF8620.(NBSC000023))
  FREE PACKAGE(KE.YKEA082.(EBVV00022157B31F45))
  FREE PACKAGE(KE.YKEA083.(EBVV00022157B31F59))
  FREE PACKAGE(ED.ED0830.(ED00000043))
  FREE PACKAGE(WB.YWB0082.(WSTS00004457B43111))
  FREE PACKAGE(BP.YBPMUT.(BPST00005757B43238))
  FREE PACKAGE(GA.GA0110I.(KAUT00003357B43EE9))
  FREE PACKAGE(ED.ED0960.(ED00000039))
  FREE PACKAGE(FF.YFF0004.(FFOR00002257B98070))
  FREE PACKAGE(FF.FF0030.(FFOR000022))
  FREE PACKAGE(FF.FF0020.(FFOR000022))
  FREE PACKAGE(GM.GM0850.(GM00000092))
  FREE PACKAGE(EX.EX6010.(EXPN000050))
  FREE PACKAGE(RI.RI0810.(RI00000013))
  FREE PACKAGE(TP.TP0800.(TP00000006))
  FREE PACKAGE(ER.YERDINS.(EAMR00000557BD6545))
  FREE PACKAGE(CE.CE5300.(COPE000034))
  FREE PACKAGE(WF.WF5410.(WSSW000075))
  FREE PACKAGE(HP1.AUPDVU.(HPSVP2AUPDVU))
  FREE PACKAGE(HP1.ADJQR5.(HPSVP2ADJQR5))
  FREE PACKAGE(HPS.AGOWVT.(HPSVP2AGOWVT))
  FREE PACKAGE(HP1.AGOWVT.(HPSVP2AGOWVT))
  FREE PACKAGE(HPS.AD5WV6.(HPSVP2AD5WV6))
  FREE PACKAGE(HP1.AD5WV6.(HPSVP2AD5WV6))
  FREE PACKAGE(RP.YRPMCOD.(A12W00063052D54ED2))
  FREE PACKAGE(WP.YWPXBLC.(A06M0263755398650C))
  FREE PACKAGE(WP.YWPXBAE.(A06M0264235370B1AE))
  FREE PACKAGE(WP.YWPXBAD.(A06M0264235370B1E6))
  FREE PACKAGE(WP.YWPXBAC.(A06M0264235370B10A))
  FREE PACKAGE(WP.YWPXBBB.(A06M0264235370B45A))
  FREE PACKAGE(WP.YWPXBBE.(A06M0264235370B480))
  FREE PACKAGE(WP.YWPXBBD.(A06M0264235370B547))
  FREE PACKAGE(WP.YWPXBBA.(A06M0264235370B3E8))
  FREE PACKAGE(WP.YWPXBBC.(A06M0264235370B429))
  FREE PACKAGE(WP.YWPXBDA.(A06M0264235370B94F))
  FREE PACKAGE(WP.YWPXBDC.(A06M0264235370B829))
  FREE PACKAGE(WP.YWPXBDB.(A06M0264235370B8E2))
  FREE PACKAGE(WP.YWPXBDG.(A06M0264235370B9BD))
  FREE PACKAGE(WP.YWPXBDF.(A06M0264235370B9D2))
  FREE PACKAGE(WP.YWPXBIB.(A06M0264235370BAE8))
  FREE PACKAGE(WP.YWPXBIA.(A06M0264235370BB01))
  FREE PACKAGE(WP.YWPXBIC.(A06M0264235370BB24))
  FREE PACKAGE(WP.YWPXBID.(A06M0264235370BB38))
  FREE PACKAGE(WP.YWPXBIE.(A06M0264235370BB6C))
  FREE PACKAGE(WP.YWPXBKA.(A06M0264235370BC46))
  FREE PACKAGE(WP.YWPXBKD.(A06M0264235370BC5C))
  FREE PACKAGE(WP.YWPXBKC.(A06M0264235370BC67))
  FREE PACKAGE(WP.YWPXBKB.(A06M0264235370BC7D))
  FREE PACKAGE(WP.YWPXBKE.(A06M0264235370BCA4))
  FREE PACKAGE(WP.YWPXBMC.(A06M0264235370BCF8))
  FREE PACKAGE(WP.YWPXBTE.(A06M0264235370BDF5))
  FREE PACKAGE(WP.YWPXBTB.(A06M0264235370BD79))
  FREE PACKAGE(WP.YWPXBTA.(A06M0264235370BD89))
  FREE PACKAGE(WP.YWPXBTD.(A06M0264235370BD90))
  FREE PACKAGE(WP.YWPXBTC.(A06M0264235370BD99))
  FREE PACKAGE(WP.YWPXBUC.(A06M0264235370BE52))
  FREE PACKAGE(WP.YWPXBGA.(A06M0263755379E553))
  FREE PACKAGE(WP.YWPXBGB.(A06M0263755379E557))
  FREE PACKAGE(WP.YWPXBGC.(A06M0263755379E55B))
  FREE PACKAGE(WP.YWPXBCA.(A06M0263755379E4F0))
  FREE PACKAGE(WP.YWPXBCB.(A06M0263755379E4FF))
  FREE PACKAGE(WP.YWPXBCC.(A06M0263755379E503))
  FREE PACKAGE(WP.YWPXBCD.(A06M0263755379E50A))
  FREE PACKAGE(WP.YWPXBCE.(A06M0263755379E510))
  FREE PACKAGE(WP.YWPXBNC.(A06M0263755379E5BF))
  FREE PACKAGE(WP.YWPXBNA.(A06M0263755379E5B7))
  FREE PACKAGE(WP.YWPXBNB.(A06M0263755379E5BB))
  FREE PACKAGE(WP.YWPXBNE.(A06M0263755379E649))
  FREE PACKAGE(WP.YWPXBND.(A06M0263755379E63F))
  FREE PACKAGE(WP.YWPXBNG.(A06M0263755379E652))
  FREE PACKAGE(WP.YWPXBNF.(A06M0263755379E64D))
  FREE PACKAGE(WP.YWPXBNH.(A06M0263755379E656))
  FREE PACKAGE(WP.YWPXBNI.(A06M0263755379E65B))
  FREE PACKAGE(WP.YWPXBOA.(A06M0263755379E660))
  FREE PACKAGE(WP.YWPXBOB.(A06M0263755379E665))
  FREE PACKAGE(WP.YWPXBOC.(A06M0263755379E669))
  FREE PACKAGE(WP.YWPXBQC.(A06M0263755379E793))
  FREE PACKAGE(WP.YWPYBCA.(A06M0263755379FC8E))
  FREE PACKAGE(WP.YWPYBCB.(A06M0263755379FC94))
  FREE PACKAGE(WP.YWPYBCC.(A06M0263755379FC9A))
  FREE PACKAGE(WP.YWPYBCD.(A06M0263755379FCA0))
  FREE PACKAGE(WP.YWPYBAA.(A06M0263755379FA7F))
  FREE PACKAGE(WP.YWPYBAB.(A06M0263755379FA83))
  FREE PACKAGE(WP.YWPYBCE.(A06M0263755379FE40))
  FREE PACKAGE(CZ.CZ5200.(CRMA004099))
  FREE PACKAGE(WC.WC7250.(A06M027069))
  FREE PACKAGE(EC.YECLOK.(CRMA003976543BA4EF))
  FREE PACKAGE(EC.YECLOK.(CRMA003976543BA4EFCICS))
  FREE PACKAGE(SV.YSVBUID.(A06M02547153F08CAD))
  FREE PACKAGE(EQ.YEQISRK.(CRMA00418654106690))
  FREE PACKAGE(EQ.YEQRFT.(GSER00001454ABF60E))
  FREE PACKAGE(CZ.YCZT421.(GSER00001454ABD271))
  FREE PACKAGE(WB.YWBSYM.(WS8B00001654B22C92))
  FREE PACKAGE(NF.NF7700.(NBSI000016))
  FREE PACKAGE(EQ.YEQKDGP.(CRMA004309546CDAE6))
  FREE PACKAGE(WP.YWPYBDC.(DBH000002254EDE1AB))
  FREE PACKAGE(FF.YFF0015.(FFOR00000554F6CFF5))
  FREE PACKAGE(CZ.YCZGETP.(KUAN00001255101F7D))
  FREE PACKAGE(WB.YWBEBSM.(WSTS00004357E1024F))
  FREE PACKAGE(WQ.YWQ1502.(CUBE00005657E14527))
  FREE PACKAGE(WQ.YWQ1501.(CUBE00005657E144E3))
  FREE PACKAGE(EK.EK6841.(EMA0000048))
  FREE PACKAGE(WB.WB0870.(WSTS000043))
  FREE PACKAGE(FF.FF0010.(FFOR000023))
  FREE PACKAGE(FF.FF0020.(FFOR000023))
  FREE PACKAGE(FF.FF0030.(FFOR000023))
  FREE PACKAGE(RI.RI0820.(RI00000014))
  FREE PACKAGE(DE.DE0410.(DE00000038))
  FREE PACKAGE(WQ.WQ5950.(CUBE000056))
  FREE PACKAGE(ED.ED0830.(ED00000040))
  FREE PACKAGE(DE.DE0820.(DE00000038))
  FREE PACKAGE(DE.DE0030.(DE00000038))
  FREE PACKAGE(GM.GM0850.(GM00000105))
  FREE PACKAGE(WB.WB0680.(WS8B000320))
  FREE PACKAGE(WB.WB0630.(WS8B000320))
  FREE PACKAGE(ED.ED0960.(ED00000040))
  FREE PACKAGE(WB.WB0720.(WS8B000370))
  FREE PACKAGE(WB.YWBEBSM.(WSTS0000485828352D))
  FREE PACKAGE(WB.WB0630.(WSTS000048))
  FREE PACKAGE(WB.WB0680.(WSTS000048))
  FREE PACKAGE(GM.GM0850.(GM00000118))
  FREE PACKAGE(PC01.PC5120.(IVN0000024))
  FREE PACKAGE(PC02.PC5120.(IVN0000024))
  FREE PACKAGE(PC03.PC5120.(IVN0000024))
  FREE PACKAGE(PC04.PC5120.(IVN0000024))
  FREE PACKAGE(PC05.PC5120.(IVN0000024))
  FREE PACKAGE(PC06.PC5120.(IVN0000024))
  FREE PACKAGE(WB.YWB0082.(WSTS00004357FCFAC3))
  FREE PACKAGE(CZ.YCZJABW.(GSER0001095811EEAB))
  FREE PACKAGE(CE.CE5300.(NOST000271))
  FREE PACKAGE(WB.WB0840.(NOST000271))
  FREE PACKAGE(WB.WB1130.(NOST000271))
  FREE PACKAGE(WB.WB0720.(WS8B000373))
  FREE PACKAGE(WF.YWF64CA.(WSSW00004357DEA0AA))
  FREE PACKAGE(WB.WB1300.(TOFF000076))
  FREE PACKAGE(WF.YWFSWC.(WSSW000043))
  FREE PACKAGE(WB.WB0720.(WS8B000374))
  FREE PACKAGE(WP.YWPXBED.(A06M0263755379E538))
  FREE PACKAGE(WP.YWPXBEE.(A06M0263755379E53D))
  FREE PACKAGE(WP.YWPXBEF.(A06M0263755379E540))
  FREE PACKAGE(WP.YWPXBEG.(A06M0263755379E545))
  FREE PACKAGE(WP.YWPXBEA.(A06M0263755379E52A))
  FREE PACKAGE(WP.YWPXBEB.(A06M0263755379E52F))
  FREE PACKAGE(WP.YWPXBEC.(A06M0263755379E534))
  FREE PACKAGE(CZ.YCZPABW.(GSER00010957ED4FDC))
  FREE PACKAGE(WF.WF0310.(WSSW000043))
  FREE PACKAGE(WF.WF0300.(WSSW000043))
  FREE PACKAGE(WF.WF0320.(WSSW000043))
  FREE PACKAGE(WF.WF0280.(WSSW000043))
  FREE PACKAGE(WF.WF0350.(WSSW000043))
  FREE PACKAGE(FC.FC0050.(KLOM000050))
  FREE PACKAGE(WF.WF5410.(WSSW000043))
  FREE PACKAGE(GM.GM0850.(GM00000117))
  FREE PACKAGE(WF.YWFM537.(WSSW0000435808F092))
  FREE PACKAGE(SV.SV5770.(WSSV000121))
  FREE PACKAGE(WB.WB0720.(WS8B000376))
  FREE PACKAGE(WI.YWI0087.(TOFF00007657F28089))
  FREE PACKAGE(DE.DE0050.(DE00000038))
  FREE PACKAGE(DE.DE0090.(DE00000038))
  FREE PACKAGE(TN.YTNUPD.(OTXO00005857FBEABF))
  FREE PACKAGE(FZ.FZ0820.(FZ00000010))
  FREE PACKAGE(DE.DE0420.(DE00000038))
  FREE PACKAGE(DE.DE0810.(DE00000038))
  FREE PACKAGE(DE.DE0030.(DE00000052))
  FREE PACKAGE(ED.ED0960.(DE00000052))
  FREE PACKAGE(DE.DE0820.(DE00000052))
  FREE PACKAGE(RI.RI0820.(DE00000052))
  FREE PACKAGE(SV.SV0240.(WSSV000121))
  FREE PACKAGE(CZ.YCZJABW.(GSER000148582846ED))
  FREE PACKAGE(CZ.YCZPABW.(ACP0000086582DDBB5))
  FREE PACKAGE(DE.DE0030.(DE00000049))
  FREE PACKAGE(DE.DE0810.(DE00000049))
  FREE PACKAGE(DE.DE0420.(DE00000049))
  FREE PACKAGE(WB.WB0720.(WS8B000379))
  FREE PACKAGE(WP.YWPRDPX.(DBH000006857444F45))
  FREE PACKAGE(CE.CE8200.(COPE000034))
  FREE PACKAGE(CE.CE8500.(COPE000034))
  FREE PACKAGE(ER.YERBER.(EAMR000010))
  FREE PACKAGE(WF.YWFSWC.(WSSW000046))
  FREE PACKAGE(WP.YWPXBAA.(A06M0264235370B066))
  FREE PACKAGE(WP.YWPXBAB.(A06M0264235370B182))
  FREE PACKAGE(HPS.AHJFRK.(HPSVP2AHJFRK))
  FREE PACKAGE(HP1.AHJFRK.(HPSVP2AHJFRK))
  FREE PACKAGE(HP3.AHJFRK.(HPSVP2AHJFRK))
  FREE PACKAGE(WF.WF5410.(WSSW000046))
  FREE PACKAGE(FF.FF0030.(FFOR000027))
  FREE PACKAGE(FF.FF0020.(FFOR000027))
  FREE PACKAGE(WB.WB0720.(WS8B000386))
  FREE PACKAGE(HP1.ABAIRK.(HPSVP2ABAIRK))
  FREE PACKAGE(HP3.ABAIRK.(HPSVP2ABAIRK))
  FREE PACKAGE(PHPSPTA.H0014.())
  FREE PACKAGE(PHPS53.H0014.())
  FREE PACKAGE(MF.MF8930.(MFR0000086))
  FREE PACKAGE(FI.FI5067.(BKUR000041))
  FREE PACKAGE(FI.FI1900.(BKUR000041))
  FREE PACKAGE(VT.VT5110.(EBZV000007))
  FREE PACKAGE(WB.WB0720.(WS8B000383))
  FREE PACKAGE(CZ.CZ6300.(KLOM000058))
  FREE PACKAGE(WB.WB5340.(TOFF000076))
  FREE PACKAGE(PHPSPTA.H1007.())
  FREE PACKAGE(PHPS53.H1007.())
  FREE PACKAGE(PHPSPTA.H1002.())
  FREE PACKAGE(PHPS53.H1002.())
  FREE PACKAGE(PHPSPTA.H1015.())
  FREE PACKAGE(PHPS53.H1015.())
  FREE PACKAGE(PHPSPTA.H1016.())
  FREE PACKAGE(PHPS53.H1016.())
  FREE PACKAGE(PHPSPTA.H1010.())
  FREE PACKAGE(PHPS53.H1010.())
  FREE PACKAGE(PHPSPTA.H1013.())
  FREE PACKAGE(PHPS53.H1013.())
  FREE PACKAGE(PHPSPTA.H1014.())
  FREE PACKAGE(PHPS53.H1014.())
  FREE PACKAGE(PHPSPTA.H1017.())
  FREE PACKAGE(PHPS53.H1017.())
  FREE PACKAGE(PHPSPTA.H1020.())
  FREE PACKAGE(PHPS53.H1020.())
  FREE PACKAGE(PHPSPTA.H1048.())
  FREE PACKAGE(PHPS53.H1048.())
  FREE PACKAGE(PHPSPTA.H1068.())
  FREE PACKAGE(PHPS53.H1068.())
  FREE PACKAGE(PHPSPTA.H1064.())
  FREE PACKAGE(PHPS53.H1064.())
  FREE PACKAGE(PHPSPTA.H1159.())
  FREE PACKAGE(PHPS53.H1159.())
  FREE PACKAGE(PHPSPTA.H1161.())
  FREE PACKAGE(PHPS53.H1161.())
  FREE PACKAGE(PHPSPTA.H1085.())
  FREE PACKAGE(PHPS53.H1085.())
  FREE PACKAGE(PHPSPTA.H1086.())
  FREE PACKAGE(PHPS53.H1086.())
  FREE PACKAGE(PHPSPTA.H1097.())
  FREE PACKAGE(PHPS53.H1097.())
  FREE PACKAGE(PHPSPTA.H1096.())
  FREE PACKAGE(PHPS53.H1096.())
  FREE PACKAGE(PHPSPTA.H1113.())
  FREE PACKAGE(PHPS53.H1113.())
  FREE PACKAGE(PHPSPTA.H1118.())
  FREE PACKAGE(PHPS53.H1118.())
  FREE PACKAGE(PHPSPTA.HMPBTBL.())
  FREE PACKAGE(PHPS53.HMPBTBL.())
  FREE PACKAGE(RT.YRT0002.(RFT000000956A4A7F6))
  FREE PACKAGE(RM.YRMORGB.(PARS000054570220C1))
  FREE PACKAGE(MF.MF8706.(MFR0000086))
  FREE PACKAGE(MF.MF8719.(MFR0000086))
  FREE PACKAGE(MF.MF8710.(MFR0000086))
  FREE PACKAGE(DE.DE7120.(DE00000038))
  FREE PACKAGE(FF.FF5000.(FFOR000023))
  FREE PACKAGE(VV.YVVZZ19.(VDPS000077576FD3D1))
  FREE PACKAGE(MF.MF8717.(MFR0000082))
  FREE PACKAGE(DE.DE9992.(DE00000033))
  FREE PACKAGE(TN.YTN0180.(OTXO00005457A1E3A8))
  FREE PACKAGE(TN.YTN0190.(OTXO00005457A1E3AF))
  FREE PACKAGE(CE.CE8440.(COPE000042))
  FREE PACKAGE(KS.KS5685.(EBVV000233))
  FREE PACKAGE(CZ.CZ6300.(KLOM000050))
  FREE PACKAGE(SV.SV5790.(WSSV000121))
  FREE PACKAGE(SV.SV5760.(WSSV000121))
  FREE PACKAGE(SV.SV5750.(WSSV000121))
  FREE PACKAGE(SV.SV5740.(WSSV000121))
  FREE PACKAGE(VT.YVTDTAT.(EBZV000010580CDB55))
  FREE PACKAGE(SV.SV5600.(WSSV000121))
  FREE PACKAGE(WQ.WQ5950.(CUBE000069))
  FREE PACKAGE(DE.DE0030.(DE00000058))
  FREE PACKAGE(DE.DE0420.(DE00000058))
  FREE PACKAGE(DE.DE0810.(DE00000058))
  FREE PACKAGE(ER.YERBER.(EAMR000020))
  FREE PACKAGE(WF.YWFSWC.(WSSW000078))
  FREE PACKAGE(WB.WB0720.(WS8B000390))
  FREE PACKAGE(PU.PU7334.(A18Q002532))
  FREE PACKAGE(HP1.RWBR040.(HPSVP2RWBR040))
  FREE PACKAGE(HP3.RWBR040.(HPSVP2RWBR040))
  FREE PACKAGE(HP1.RWBM003.(HPSVP1RWBM003))
  FREE PACKAGE(NF.NF7670.(NBSI000061))
  FREE PACKAGE(VT.YVTEINS.(EBZV00000756FEA457))
  FREE PACKAGE(AV.YAVNV50.(AIS000009757D9753E))
  FREE PACKAGE(NI.YNI0161.(IPC000017957D662DA))
  FREE PACKAGE(SV.SV0930.(WSSV000121))
  FREE PACKAGE(AV.YAVNV10.(AIS000009757F15171))
  FREE PACKAGE(CE.YCE1000.(COPE00004257F22347))
  FREE PACKAGE(VT.VT0120.(EBZV000010))
  FREE PACKAGE(VT.VT5130.(EBZV000010))
  FREE PACKAGE(VT.YVTVALU.(EBZV000009577112CD))
  FREE PACKAGE(AS.AS0610.(KABG000038))
  FREE PACKAGE(NO.NO0960.(NO00000024))
  FREE PACKAGE(CE.CE0100.(COPE000029))
  FREE PACKAGE(CE.CE5730.(COPE000029))
  FREE PACKAGE(VV.YVVZZ20.(VDPS00008757BAFE47))
  FREE PACKAGE(NI.NI0010.(IPC0000156))
  FREE PACKAGE(NTA1P.CZA0199.(A02E00056457FA4F4F))
  FREE PACKAGE(NI.NI0040.(IPC0000156))
  FREE PACKAGE(NI.YNILBP2.(IPC000015657F3CF6B))
  FREE PACKAGE(CZ.CZ6500.(GSER000109))
  FREE PACKAGE(ED.ED0950.(ED00000040))
  FREE PACKAGE(ER.YERDUPD.(EAMR000010580383BA))
  FREE PACKAGE(CE.CE8500.(COPE000042))
  FREE PACKAGE(CE.CE5230.(COPE000042))
  FREE PACKAGE(ER.YERDCUR.(EAMR00001057FE19A1))
  FREE PACKAGE(ER.YERDINS.(EAMR00001057FFAD64))
  FREE PACKAGE(NO.NO0970.(NO00000027))
  FREE PACKAGE(EB.EB6480.(EXPN000051))
  FREE PACKAGE(RI.RI0810.(RI00000014))
  FREE PACKAGE(CZ.CZ6400.(GSER000123))
  FREE PACKAGE(CE.YCEWIAP.(COPE0000425806405E))
  FREE PACKAGE(CE.CE5200.(COPE000042))
  FREE PACKAGE(SV.SV5780.(WSSV000121))
  FREE PACKAGE(SV.SV5940.(WSSV000121))
  FREE PACKAGE(WQ.WQ6010.(CUBE000056))
  FREE PACKAGE(ER.YERDGET.(EAMR000010580E1012))
  FREE PACKAGE(SV.SV0250.(WSSV000121))
  FREE PACKAGE(SV.SV0950.(WSSV000121))
  FREE PACKAGE(WB.YWBBOPR.(WS8B000318581B1EC5))
  FREE PACKAGE(CE.CE8200.(COPE000042))
  FREE PACKAGE(WM.WM0010.(WSIN000032))
  FREE PACKAGE(WF.WF0350.(WSSW000046))
  FREE PACKAGE(WF.WF0280.(WSSW000046))
  FREE PACKAGE(WF.WF0310.(WSSW000046))
  FREE PACKAGE(WF.WF0320.(WSSW000046))
  FREE PACKAGE(KA.KA0030.(KOAB000047))
  FREE PACKAGE(FF.FF0010.(FFOR000027))
  FREE PACKAGE(ED.ED0830.(ED00000049))
  FREE PACKAGE(CE.CE5300.(NOST000275))
  FREE PACKAGE(GM.GM0850.(GM00000129))
  FREE PACKAGE(ED.ED0960.(DE00000049))
  FREE PACKAGE(WF.WF5410.(WSSW000078))
  FREE PACKAGE(FF.FF0020.(FFOR000029))
  FREE PACKAGE(FF.FF0030.(FFOR000029))
  FREE PACKAGE(WB.WB0720.(MKUR000032))
  FREE PACKAGE(NL.NL7310.(BALR000054))
  FREE PACKAGE(WQ.WQ5950.(CUBE000063))
  FREE PACKAGE(WB.WB0840.(NOST000275))
  FREE PACKAGE(WB.WB1130.(NOST000275))
  FREE PACKAGE(CE.CE5300.(COPE000046))
  FREE PACKAGE(CE.CE8200.(COPE000046))
  FREE PACKAGE(WB.WB0720.(WS8B000382))
  FREE PACKAGE(WB.YWBIO.(WS8B00031857DFC9A9))
  FREE PACKAGE(WB.YWBIO.(WS8B00040058525D43))
  FREE PACKAGE(WB.WB0720.(WS8B000400))
  FREE PACKAGE(HP1.ZVKUYRI.(HPSVP2ZVKUYRI))
  FREE PACKAGE(HP3.ZVKUYRI.(HPSVP2ZVKUYRI))
  FREE PACKAGE(SV.SV5150.(WSSV000121))
  FREE PACKAGE(HP1.ACUHQ1.())
  FREE PACKAGE(HP3.ACUHQ1.())
  FREE PACKAGE(HPS.AG5JS8.(HPSVP2AG5JS8))
  FREE PACKAGE(HP1.AG5JS8.(HPSVP2AG5JS8))
  FREE PACKAGE(HP3.AG5JS8.(HPSVP2AG5JS8))
  FREE PACKAGE(EX.EX5020.(EXPN000051))
  FREE PACKAGE(ER.YERDCUR.(EAMR0000175829D861))
  FREE PACKAGE(ER.YERBER.(EAMR000017))
  FREE PACKAGE(WQ.WQ6000.(CUBE000063))
  FREE PACKAGE(ER.YERDUPD.(EAMR0000175829D7DB))
  FREE PACKAGE(NF.YNFNACL.(NBSI00002455269B5B))
  FREE PACKAGE(EX.EX6010.(EXPN000051))
  FREE PACKAGE(WF.YWFM537.(WSSW0000465829B0E1))
  FREE PACKAGE(ER.ER8020.(EAMR000017))
  FREE PACKAGE(MF.MF7340.(MFR0000086))
  FREE PACKAGE(MF.MF7360.(MFR0000086))
  FREE PACKAGE(EB.EB8374.(KLOM000054))
  FREE PACKAGE(EB.EB8375.(KLOM000054))
  FREE PACKAGE(DE.DE7120.(DE00000030))
  FREE PACKAGE(HP1.DFWYAA.(HPSVP2DFWYAA))
  FREE PACKAGE(HP3.DFWYAA.(HPSVP2DFWYAA))
  FREE PACKAGE(WB.WB0060.(TOFF000076))
  FREE PACKAGE(SV.SV7520.(WSSV000121))
  FREE PACKAGE(HP1.DOSBN5.(HPSVP2DOSBN5))
  FREE PACKAGE(HP3.DOSBN5.(HPSVP2DOSBN5))
  FREE PACKAGE(ER.YERBER.(EAMR000018))
  FREE PACKAGE(YX.YXA171C.(TOFF00007657E8092C))
  FREE PACKAGE(RA.RA7240.(EGB0000020))
  FREE PACKAGE(TN.TN7004.(OTXO000058))
  FREE PACKAGE(WF.YWFSWC.(WSSW000077))
  FREE PACKAGE(WF.WF5410.(WSSW000077))
  FREE PACKAGE(VV.YVVZZ04.(VDPS00008557E2D980))
  FREE PACKAGE(SV.SV5210.(WSSV000121))
  FREE PACKAGE(WQ.WQ5950.(CUBE000075))
  FREE PACKAGE(ER.ER5080.(EAMR000018))
  FREE PACKAGE(TN.YTNW100.(OTXO00005857FE1E9A))
  FREE PACKAGE(SV.SV8410.(WSSV000121))
  FREE PACKAGE(SV.SV5600.(WSSV000146))
  FREE PACKAGE(SV.SV5940.(WSSV000146))
  FREE PACKAGE(WB.WB5340.(MKUR000032))
  FREE PACKAGE(SV.SV5740.(WSSV000146))
  FREE PACKAGE(SV.SV5760.(WSSV000146))
  FREE PACKAGE(SV.SV5770.(WSSV000146))
  FREE PACKAGE(WF.YWFSWC.(WSSW000083))
  FREE PACKAGE(ER.YERBER.(EAMR000024))
  FREE PACKAGE(VV.YVVZZ12.(VDPS00007356F4415D))
  FREE PACKAGE(CZ.YCZTPRT.(BEWI00001057D55677))
  FREE PACKAGE(VP.VP0030.(VIP0000018))
  FREE PACKAGE(WB.WB1110.(WSTS000043))
  FREE PACKAGE(WB.WB0950.(WSTS000043))
  FREE PACKAGE(WB.WB0830.(WSTS000043))
  FREE PACKAGE(WB.WB0620.(WSTS000043))
  FREE PACKAGE(WB.WB0520.(WSTS000043))
  FREE PACKAGE(WB.WB1070.(WSTS000043))
  FREE PACKAGE(WQ.YWQBERI.(CUBE00005657ECFA12))
  FREE PACKAGE(CE.CE5300.(NOST000288))
  FREE PACKAGE(CE.CE8200.(COPE000049))
  FREE PACKAGE(WB.WB1130.(NOST000288))
  FREE PACKAGE(WB.WB0840.(NOST000288))
  FREE PACKAGE(WB.WB0720.(WS8B000401))
  FREE PACKAGE(TN.TN0530.(OTXO000058))
  FREE PACKAGE(AP.YAPUTGK.(APEN00003558075175))
  FREE PACKAGE(WB.WB0940.(WSTS000043))
  FREE PACKAGE(WB.WB0970.(WSTS000043))
  FREE PACKAGE(WB.WB0530.(WSTS000043))
  FREE PACKAGE(WB.YWBMOV.(WS8B0003185811C948))
  FREE PACKAGE(SV.SV8300.(WSSV000121))
  FREE PACKAGE(SV.SV0230.(WSSV000121))
  FREE PACKAGE(WB.WB1290.(TOFF000076))
  FREE PACKAGE(SV.SV5780.(WSSV000146))
  FREE PACKAGE(WB.YWBEBSM.(WSTS000049582849AF))
  FREE PACKAGE(WB.WB0630.(WSTS000049))
  FREE PACKAGE(WB.WB0680.(WSTS000049))
  FREE PACKAGE(WB.YWB0082.(WSTS00004758282BE3))
  FREE PACKAGE(SV.SV5790.(WSSV000146))
  FREE PACKAGE(WI.YWI0087.(TOFF0000875833150E))
  FREE PACKAGE(WB.YWBBOPR.(WS8B000386583462DC))
  FREE PACKAGE(CZ.YCZPABW.(GSER00015158317679))
  FREE PACKAGE(SV.SV0250.(WSSV000146))
  FREE PACKAGE(CZ.CZ6400.(GSER000039))
  FREE PACKAGE(FF.FF0030.(FFOR000024))
  FREE PACKAGE(FF.FF0020.(FFOR000024))
  FREE PACKAGE(WQ.WQ6010.(CUBE000063))
  FREE PACKAGE(SV.SV5750.(WSSV000146))
  FREE PACKAGE(SV.SV0950.(WSSV000146))
  FREE PACKAGE(BC.BC0004.(A20Y001119507E65B1))
  FREE PACKAGE(BC.BC0005.(A20Y001119507E65BC))
  FREE PACKAGE(WF.WF5410.(WSSW000083))
  FREE PACKAGE(AZ.AZ0210.(AWZA000054))
  FREE PACKAGE(VP.VP5310.(VIP0000018))
  FREE PACKAGE(WP.YWPL9P1.(DBH000006857444F33))
  FREE PACKAGE(SV.SV7520.(WSSV000148))
  FREE PACKAGE(WB.WB1290.(TOFF000090))
  FREE PACKAGE(WB.WB0970.(WSTS000050))
  FREE PACKAGE(KS.YKS5512.(CSED000026580C796C))
  FREE PACKAGE(KS.YKS5511.(CSED000026581723E4))
  FREE PACKAGE(KS.YKS5512.(CSED0000315892F832))
  FREE PACKAGE(KS.YKS5511.(CSED0000315892F81B))
  FREE PACKAGE(FI.FI5067.(BKUR000047))
  FREE PACKAGE(WB.WB1100.(TOFF000076))
  FREE PACKAGE(WI.YWI0087.(TOFF0000905880CA48))
  FREE PACKAGE(WB.WB0720.(WS8B000359))
  FREE PACKAGE(RT.YRT025M.(RFT000001556F2A4F3))
  FREE PACKAGE(WF.YWFSWC.(WSSW000005))
  FREE PACKAGE(WF.WF5410.(WSSW000005))
  FREE PACKAGE(NTA1P.CZA0255.(A02E00054455928C30))
  FREE PACKAGE(DAA420_D_MAIN.PSSRULE.(V4100))
  FREE PACKAGE(DAA420_D_MAIN.PSSXSQL.(V4200))
  FREE PACKAGE(WB.WB0720.(WS8B000413))
  FREE PACKAGE(BP.YBPALTR.(A12M00647953E783C0))
  FREE PACKAGE(FI.FI5066.(BKUR000041))
  FREE PACKAGE(AV.YAV1002.(AIS0000095577015F3))
  FREE PACKAGE(FC.FC0010.(CRMA003935))
  FREE PACKAGE(BP.BP9060.(BPST000055))
  FREE PACKAGE(DI.DI7510.(DI00000045))
  FREE PACKAGE(TR.TR5310.(DERI000033))
  FREE PACKAGE(SV.SV5150.(WSSV000148))
  FREE PACKAGE(TR.TR5330.(DERI000033))
  FREE PACKAGE(DP.DP0320.(DI00000057))
  FREE PACKAGE(YX.YXA171C.(TOFF00009858871D68))
  FREE PACKAGE(CZ.CZ7000.(IPRI000007))
  FREE PACKAGE(CZ.CZ6020.(LOFT000035))
  FREE PACKAGE(TR.TR5320.(DERI000033))
  FREE PACKAGE(CE.CE8460.(COPS000019))
  FREE PACKAGE(WL.WL7390.(WSAW000059))
  FREE PACKAGE(WP.YWPR5PX.(DBH000007557CEF45B))
  FREE PACKAGE(MF.MF8940.(MFR0000086))
  FREE PACKAGE(MF.MF6020.(MFR0000086))
  FREE PACKAGE(TR.TR5340.(DERI000033))
  FREE PACKAGE(MF.MF6010.(MFR0000086))
  FREE PACKAGE(MF.MF6000.(MFR0000086))
  FREE PACKAGE(MF.MF8930.(MFR0000094))
  FREE PACKAGE(CZ.CZ5494.(ACP0000090))
  FREE PACKAGE(MF.MF8950.(MFR0000086))
  FREE PACKAGE(WB.WB5120.(WSTS000039))
  FREE PACKAGE(TN.TN7004.(OTXO000063))
  FREE PACKAGE(WC.WC8170.(OTXO000058))
  FREE PACKAGE(TN.TN7020.(OTXO000058))
  FREE PACKAGE(VD.VDUTI41.(DSPV000030))
  FREE PACKAGE(CZ.CZ8010.(APEN000035))
  FREE PACKAGE(NF.YNFNACL.(NBSI00005557160D8E))
  FREE PACKAGE(ER.ER8020.(EAMR000019))
  FREE PACKAGE(BP.YBPSTAM.(BPST00002254FC858F))
  FREE PACKAGE(WQ.WQ6000.(CUBE000066))
  FREE PACKAGE(WQ.WQ6000.(CUBE000084))
  FREE PACKAGE(WP.YWPR4PX.(DBH000007557CEF45A))
  FREE PACKAGE(DE.DE5130.(DE00000038))
  FREE PACKAGE(CI.CI0100.(GEGE000019))
  FREE PACKAGE(DE.DE0190.(DE00000038))
  FREE PACKAGE(HP1.ACF3Q1.(HPSVP2ACF3Q1))
  FREE PACKAGE(HP3.ACF3Q1.(HPSVP2ACF3Q1))
  FREE PACKAGE(WB.WB0060.(TOFF000100))
  FREE PACKAGE(NF.YNFDEAL.(NBSI0000505607A92A))
  FREE PACKAGE(RT.YRT0023.(RFT000001556F2A4CC))
  FREE PACKAGE(WP.YWPR3PX.(DBH000007557CEF458))
  FREE PACKAGE(DE.DE5690.(DE00000038))
  FREE PACKAGE(WB.WB1310.(WSTS000043))
  FREE PACKAGE(WP.YWPU1P5.(DBH000006857750BA6))
  FREE PACKAGE(BS.BS5030.(BUT0000006))
  FREE PACKAGE(TN.TN5004.(OTXO000054))
  FREE PACKAGE(CZ.CZ6300.(GSER000156))
  FREE PACKAGE(SV.SV5760.(WSSV000148))
  FREE PACKAGE(SV.SV5770.(WSSV000148))
  FREE PACKAGE(SV.SV5740.(WSSV000148))
  FREE PACKAGE(SV.SV0230.(WSSV000148))
  FREE PACKAGE(SV.SV5940.(WSSV000148))
  FREE PACKAGE(WF.YWFM537.(WSSW000081586E4AEB))
  FREE PACKAGE(NF.YNFNACL.(NBSI000122586CD99C))
  FREE PACKAGE(SV.SV5600.(WSSV000148))
  FREE PACKAGE(HB.HB5000.(ASIA000070))
  FREE PACKAGE(DE.DE5600.(DE00000038))
  FREE PACKAGE(PC01.PC5060.(IVN0000024))
  FREE PACKAGE(PC02.PC5060.(IVN0000024))
  FREE PACKAGE(PC03.PC5060.(IVN0000024))
  FREE PACKAGE(PC04.PC5060.(IVN0000024))
  FREE PACKAGE(PC05.PC5060.(IVN0000024))
  FREE PACKAGE(PC06.PC5060.(IVN0000024))
  FREE PACKAGE(TN.TN5016.(OTXO000058))
  FREE PACKAGE(WQ.YWQ5601.(CUBE0000565808D243))
  FREE PACKAGE(WF.YWFCB02.(WSSW0000435808F0DA))
  FREE PACKAGE(NF.NF8620.(NBSC000021))
  FREE PACKAGE(WB.WB5570.(WS8B000319))
  FREE PACKAGE(KS.KS5685.(EBVV000245))
  FREE PACKAGE(FF.FF5000.(FFOR000024))
  FREE PACKAGE(MF.MF8710.(MFR0000094))
  FREE PACKAGE(MF.MF8706.(MFR0000094))
  FREE PACKAGE(MF.MF8717.(MFR0000094))
  FREE PACKAGE(MF.MF8719.(MFR0000094))
  FREE PACKAGE(CE.CE8440.(COPE000046))
  FREE PACKAGE(PC01.PC5120.(AIS0000124))
  FREE PACKAGE(PC02.PC5120.(AIS0000124))
  FREE PACKAGE(PC03.PC5120.(AIS0000124))
  FREE PACKAGE(PC04.PC5120.(AIS0000124))
  FREE PACKAGE(PC05.PC5120.(AIS0000124))
  FREE PACKAGE(PC06.PC5120.(AIS0000124))
  FREE PACKAGE(SV.SV8410.(WSSV000148))
  FREE PACKAGE(NF.NF7650.(NF0Y000530))
  FREE PACKAGE(AP.YAPUTGK.(APEN0000385880DAE5))
  FREE PACKAGE(PC01.YPC0520.(IVN0000024580DE88D))
  FREE PACKAGE(PC06.YPC0520.(IVN0000024580DE88D))
  FREE PACKAGE(SV.YSVTXOG.(WSSV0001215819E262))
  FREE PACKAGE(EC.YECCRAC.(SYNC0000085638D27E))
  FREE PACKAGE(VV.YVVZZGR.(VDPS00006256547738))
  FREE PACKAGE(VV.YVVZZ1R.(VDPS0000525613E28D))
  FREE PACKAGE(YY.YYNFWRG.(NBSI000050))
  FREE PACKAGE(VV.YVVZZ13.(VDPS000052561CE2B1))
  FREE PACKAGE(WQ.YWQEVEO.(CUBE00003256BB4250))
  FREE PACKAGE(WI.YWI5954.(WS8I00015256E570C7))
  FREE PACKAGE(VV.YVVZZ15.(VDPS00006756A9EE3E))
  FREE PACKAGE(WB.WB7730.(WSTS000025))
  FREE PACKAGE(BX.YBXADBR.(CLOS000090573B1F04))
  FREE PACKAGE(AT.AT7500.(ACS0000009))
  FREE PACKAGE(WP.YWPL3P1.(DBH000006857444F1D))
  FREE PACKAGE(WP.YWPL4P1.(DBH000006857444F20))
  FREE PACKAGE(WP.YWPL5P1.(DBH000006857444F23))
  FREE PACKAGE(WP.YWPR1QX.(DBH000006857444F5A))
  FREE PACKAGE(WP.YWPL7P1.(DBH000006857444F2C))
  FREE PACKAGE(WP.YWPL8P1.(DBH000006857444F2F))
  FREE PACKAGE(WP.YWPL1P1.(DBH000006857572669))
  FREE PACKAGE(WP.YWPLEP1.(DBH000006857572E3A))
  FREE PACKAGE(NZ.NZDBM83.(ZVBI000015))
  FREE PACKAGE(YY.YYDMAKD.(WSIN000023))
  FREE PACKAGE(WB.YWBDGP.(WS8B000286576A566C))
  FREE PACKAGE(WB.YWBDGP2.(WS8B000286576A5674))
  FREE PACKAGE(VV.YVVZZ18.(VDPS000077576AC41A))
  FREE PACKAGE(VD.YVD0721.(DSPV00003057691EEA))
  FREE PACKAGE(VD.YVD0722.(DSPV00003057691F8F))
  FREE PACKAGE(AZ.YAZ0906.(AWZA00003556FCFB81))
  FREE PACKAGE(YY.YYNFP15.(NBSI000056))
  FREE PACKAGE(VV.YVVZZ10.(VDPS00007357051B7A))
  FREE PACKAGE(WB.WB7420.(WSTS000035))
  FREE PACKAGE(WC.WC7500.(OTXO000045))
  FREE PACKAGE(KS.YKSBKST.(CSED000019570B579E))
  FREE PACKAGE(WP.YWPRDPX.(DBH000007557CEF450))
  FREE PACKAGE(WB.YWBSA2.(WS8B00031857D6B537))
  FREE PACKAGE(FI.FI2100.(BKUR000041))
  FREE PACKAGE(WP.YWPRCPX.(DBH000007557D6F7AF))
  FREE PACKAGE(MF.MF8600.(MFR0000086))
  FREE PACKAGE(MF.MF8620.(MFR0000086))
  FREE PACKAGE(WP.YWPRAPX.(DBH000007557D56C23))
  FREE PACKAGE(WP.YWPR7PX.(DBH000007557D56C68))
  FREE PACKAGE(RT.RT0200.(TABS000119))
  FREE PACKAGE(WP.YWPRBPX.(DBH000007557D6A43E))
  FREE PACKAGE(DE.YDELSTO.(DE0000003857DFBD27))
  FREE PACKAGE(TN.YTNDEP.(OTXO00005857DFCD1D))
  FREE PACKAGE(TN.YTN0100.(OTXO00005857DFCD28))
  FREE PACKAGE(TN.YTNSICH.(OTXO00005857DFCD1F))
  FREE PACKAGE(WB.YWBCTA.(WS8B00031857DFC824))
  FREE PACKAGE(KE.YKEA082.(EBVV00023557E108BE))
  FREE PACKAGE(KE.YKEA083.(EBVV00023557E108D7))
  FREE PACKAGE(DE.YDE0021.(DE0000003857E11728))
  FREE PACKAGE(WQ.YWQ1101.(CUBE00005657E144AF))
  FREE PACKAGE(SV.SV8630.(WSSV000121))
  FREE PACKAGE(PC01.PC5070.(IVN0000024))
  FREE PACKAGE(PC02.PC5070.(IVN0000024))
  FREE PACKAGE(PC03.PC5070.(IVN0000024))
  FREE PACKAGE(PC04.PC5070.(IVN0000024))
  FREE PACKAGE(PC05.PC5070.(IVN0000024))
  FREE PACKAGE(PC06.PC5070.(IVN0000024))
  FREE PACKAGE(VD.VDDBM15.(DSPV000034))
  FREE PACKAGE(CD.CD2590.(UPDS000033))
  FREE PACKAGE(LC.LC0511I.(TFBM00002857EA823C))
  FREE PACKAGE(DE.DE0400.(DE00000038))
  FREE PACKAGE(DE.DE0490.(DE00000038))
  FREE PACKAGE(FI.FI5260.(BKUR000041))
  FREE PACKAGE(YY.YYNLCPB.(MOD000002657E253F8))
  FREE PACKAGE(YY.YYNLCPO.(MOD000002657E25407))
  FREE PACKAGE(DP.DP0920.(DP00000050))
  FREE PACKAGE(MF.MF7380.(MFR0000086))
  FREE PACKAGE(WB.WB1040.(WSTS000043))
  FREE PACKAGE(WB.WB1030.(WSTS000043))
  FREE PACKAGE(WB.WB0580.(WSTS000043))
  FREE PACKAGE(WB.WB0570.(WSTS000043))
  FREE PACKAGE(WB.WB1050.(WSTS000043))
  FREE PACKAGE(WB.WB0660.(WSTS000043))
  FREE PACKAGE(WB.WB5270.(WSTS000043))
  FREE PACKAGE(WB.WB0600.(WSTS000043))
  FREE PACKAGE(WB.WB1020.(WSTS000043))
  FREE PACKAGE(WB.WB1340.(WSTS000043))
  FREE PACKAGE(WB.WB5280.(WSTS000043))
  FREE PACKAGE(WB.WB0510.(WSTS000043))
  FREE PACKAGE(CI.CI0090.(GEGE000019))
  FREE PACKAGE(TP.TP0800.(TP00000011))
  FREE PACKAGE(FF.YFF0004.(FFOR00002357ED17E7))
  FREE PACKAGE(CZ.CZ5280.(KLOM000050))
  FREE PACKAGE(TR.TR0810.(AITR000024))
  FREE PACKAGE(DE.DE0940.(DE00000033))
  FREE PACKAGE(GM.GM0870.(GM00000084))
  FREE PACKAGE(IT.IT0010.(TABS000102))
  FREE PACKAGE(DE.DE7800.(DE00000033))
  FREE PACKAGE(DE.DE0060.(DE00000033))
  FREE PACKAGE(DE.DE0100.(DE00000033))
  FREE PACKAGE(TN.TN7080.(OTXO000054))
  FREE PACKAGE(WB.WB5090.(WSTS000039))
  FREE PACKAGE(WB.WB8010.(TOFF000067))
  FREE PACKAGE(EX.EX6020.(EXPN000050))
  FREE PACKAGE(WB.YWB0082.(WSTS000050584D1824))
  FREE PACKAGE(WB.YWBEBSM.(WSTS00005058480203))
  FREE PACKAGE(WB.YWBIO.(WS8B0004015856440E))
  FREE PACKAGE(FF.FF0020.(FFOR000030))
  FREE PACKAGE(FF.FF0030.(FFOR000030))
  FREE PACKAGE(NL.NL7310.(BALR000068))
  FREE PACKAGE(SV.SV5750.(WSSV000148))
  FREE PACKAGE(SV.SV0250.(WSSV000148))
  FREE PACKAGE(SV.SV5790.(WSSV000148))
  FREE PACKAGE(CZ.CZ6400.(GSER000157))
  FREE PACKAGE(CZ.YCZPABW.(GSER00015758629BAC))
  FREE PACKAGE(CE.CE8200.(COPE000052))
  FREE PACKAGE(CE.CE5300.(COPE000052))
  FREE PACKAGE(MF.MF7360.(MFR0000107))
  FREE PACKAGE(MF.MF7340.(MFR0000107))
  FREE PACKAGE(EX.EX6010.(EXPN000062))
  FREE PACKAGE(EX.EX5020.(EXPN000062))
  FREE PACKAGE(VV.YVVZZ12.(VDPS000103586D3B12))
  FREE PACKAGE(SV.SV5780.(WSSV000148))
  FREE PACKAGE(KS.KS5500.(CSED000026))
  FREE PACKAGE(CZ.CZ5190.(LOMN000025))
  FREE PACKAGE(UU.UU5170.(RS20000055))
  FREE PACKAGE(DE.DE0430.(DE00000038))
  FREE PACKAGE(DE.DE0830.(DE00000038))
  FREE PACKAGE(NF.YNFIB07.(IB0000002357F3A607))
  FREE PACKAGE(YY.YYWBERX.(TOFF00007657F3B1EE))
  FREE PACKAGE(NI.YNILBP3.(IPC000015657F3CF7F))
  FREE PACKAGE(LB.YLB0120.(IPC000015657F3CF5C))
  FREE PACKAGE(NI.YNILBPL.(IPC000015657F3CF61))
  FREE PACKAGE(MF.YMFC110.(MFR000008757F52498))
  FREE PACKAGE(WQ.YWQ4502.(CUBE00005657F65AA1))
  FREE PACKAGE(DE.DE0440.(DE00000038))
  FREE PACKAGE(CZ.CZ8980.(KLOM000050))
  FREE PACKAGE(EC.EC5130.(KLOM000050))
  FREE PACKAGE(EX.EX5030.(EXPN000051))
  FREE PACKAGE(MF.MF7510.(MFR0000086))
  FREE PACKAGE(PC.PC5090.(IVN0000024))
  FREE PACKAGE(WB.WB0550.(WSTS000043))
  FREE PACKAGE(WB.WB5260.(WSTS000043))
  FREE PACKAGE(YY.YYWBVIN.(WSTS00004357FCB166))
  FREE PACKAGE(FI.FI5200.(BKUR000041))
  FREE PACKAGE(VD.VDGLH00.(DSPV000034))
  FREE PACKAGE(PC01.YPC0730.(IVN000002457FF4BEB))
  FREE PACKAGE(PC02.YPC0730.(IVN000002457FF4BEB))
  FREE PACKAGE(PC03.YPC0730.(IVN000002457FF4BEB))
  FREE PACKAGE(PC04.YPC0730.(IVN000002457FF4BEB))
  FREE PACKAGE(PC05.YPC0730.(IVN000002457FF4BEB))
  FREE PACKAGE(PC06.YPC0730.(IVN000002457FF4BEB))
  FREE PACKAGE(PC01.YPC0740.(IVN000002457FF4BFF))
  FREE PACKAGE(PC02.YPC0740.(IVN000002457FF4BFF))
  FREE PACKAGE(PC03.YPC0740.(IVN000002457FF4BFF))
  FREE PACKAGE(PC04.YPC0740.(IVN000002457FF4BFF))
  FREE PACKAGE(PC05.YPC0740.(IVN000002457FF4BFF))
  FREE PACKAGE(PC06.YPC0740.(IVN000002457FF4BFF))
  FREE PACKAGE(WC.WC8401.(OTXO000058))
  FREE PACKAGE(WC.WC5050.(OTXO000058))
  FREE PACKAGE(WC.WC5010.(OTXO000058))
  FREE PACKAGE(MF.MF7230.(MFR0000086))
  FREE PACKAGE(CZ.CZ5150.(KLOM000054))
  FREE PACKAGE(EX.YEX0003.(EXPN00005158075739))
  FREE PACKAGE(NI.YNICS01.(IPC000015658079777))
  FREE PACKAGE(MF.MF7330.(MFR0000086))
  FREE PACKAGE(MF.MF7320.(MFR0000086))
  FREE PACKAGE(MF.MF7200.(MFR0000086))
  FREE PACKAGE(WC.WC8410.(OTXO000058))
  FREE PACKAGE(WB.WB0980.(TOFF000076))
  FREE PACKAGE(WB.WB1090.(TOFF000076))
  FREE PACKAGE(WB.WB1080.(TOFF000076))
  FREE PACKAGE(MF.YMFC113.(MFR0000087580E1D38))
  FREE PACKAGE(PC02.YPC0520.(IVN0000024580DE88D))
  FREE PACKAGE(PC03.YPC0520.(IVN0000024580DE88D))
  FREE PACKAGE(PC04.YPC0520.(IVN0000024580DE88D))
  FREE PACKAGE(PC05.YPC0520.(IVN0000024580DE88D))
  FREE PACKAGE(BP.YBPMUT.(BPST000055580F38EA))
  FREE PACKAGE(WB.WB5290.(WSTS000043))
  FREE PACKAGE(ED.ED0950.(ED00000044))
  FREE PACKAGE(FF.FF0010.(FFOR000024))
  FREE PACKAGE(WF.WF0300.(WSSW000046))
  FREE PACKAGE(ED.ED0830.(ED00000044))
  FREE PACKAGE(CE.CE8500.(COPE000046))
  FREE PACKAGE(CE.CE5230.(COPE000046))
  FREE PACKAGE(DE.DE0410.(DE00000053))
  FREE PACKAGE(WB.WB0870.(WS8B000373))
  FREE PACKAGE(CZ.CZ6500.(GSER000039))
  FREE PACKAGE(WF.YWF64CA.(WSSW0000465829B0C2))
  FREE PACKAGE(NI.YNI0161.(IPC00001715832F542))
  FREE PACKAGE(RI.RI0810.(RI00000015))
  FREE PACKAGE(EB.EB6480.(EXPN000058))
  FREE PACKAGE(CZ.YCZJABW.(GSER000151582DC263))
  FREE PACKAGE(WM.WM0010.(WSIN000038))
  FREE PACKAGE(NI.NI0010.(IPC0000171))
  FREE PACKAGE(GM.GM0850.(GM00000123))
  FREE PACKAGE(RI.RI0820.(DE00000049))
  FREE PACKAGE(DE.DE0050.(DE00000049))
  FREE PACKAGE(DE.DE0090.(DE00000049))
  FREE PACKAGE(CE.CE5730.(COPE000046))
  FREE PACKAGE(WF.WF0350.(WSSW000077))
  FREE PACKAGE(WF.WF0280.(WSSW000077))
  FREE PACKAGE(WF.WF0320.(WSSW000077))
  FREE PACKAGE(WF.WF0310.(WSSW000077))
  FREE PACKAGE(FZ.FZ0820.(FZ00000013))
  FREE PACKAGE(DE.DE0820.(DE00000049))
  FREE PACKAGE(AV.YAVNV10.(AIS0000118583C5023))
  FREE PACKAGE(AV.YAVNV50.(AIS0000118583C503B))
  FREE PACKAGE(NO.NO0960.(NO00000029))
  FREE PACKAGE(DE.DE0420.(AITR000030))
  FREE PACKAGE(DE.DE0810.(AITR000030))
  FREE PACKAGE(DE.DE0030.(AITR000030))
  FREE PACKAGE(CE.YCEWIAP.(COPE000046583EB13F))
  FREE PACKAGE(CE.YCE1000.(COPE000046583EB25C))
  FREE PACKAGE(ED.ED0960.(ED00000044))
  FREE PACKAGE(CE.CE5200.(COPE000046))
  FREE PACKAGE(NO.NO0970.(NO00000029))
  FREE PACKAGE(WB.YWBWRK.(WS8B00039058400836))
  FREE PACKAGE(NI.NI0040.(IPC0000171))
  FREE PACKAGE(KC.YKCWFVU.(A12M0061415321E5B0))
  FREE PACKAGE(NZ.YNZGSEL.(A14S00239353427E48))
  FREE PACKAGE(BP.YBPSUCH.(A12M00647953E786E4))
  FREE PACKAGE(BP.YBPSUCH.(A12M00647953E786E4CICS))
  FREE PACKAGE(AT.AT0099.(A20Y001519544E5A50))
  FREE PACKAGE(NTA1P.CZA0257.(A02E0005225471ACDA))
  FREE PACKAGE(NTA1P.CZA0219.(A02E00053555100C98))
  FREE PACKAGE(NTA1P.CZA0213.(A02E00053555100C8A))
  FREE PACKAGE(WB.YWBMOV.(WS8B000359587F3CA8))
  FREE PACKAGE(WB.WB5340.(TOFF000090))
  FREE PACKAGE(WB.WB0530.(WSTS000050))
  FREE PACKAGE(WB.WB0940.(WSTS000050))
  FREE PACKAGE(WB.WB0680.(WSTS000050))
  FREE PACKAGE(WB.WB0630.(WSTS000050))
  FREE PACKAGE(WB.WB0620.(WSTS000050))
  FREE PACKAGE(WB.WB0950.(WSTS000050))
  FREE PACKAGE(WB.WB0830.(WSTS000050))
  FREE PACKAGE(WB.WB1070.(WSTS000050))
  FREE PACKAGE(WB.WB1110.(WSTS000050))
  FREE PACKAGE(WB.WB0520.(WSTS000050))
  FREE PACKAGE(WQ.YWQBERI.(CUBE000066587FB128))
  FREE PACKAGE(WB.WB1130.(WSTS000050))
  FREE PACKAGE(WB.WB0840.(WSTS000050))
  FREE PACKAGE(WQ.WQ6010.(CUBE000066))
  FREE PACKAGE(WQ.WQ5950.(CUBE000066))
  FREE PACKAGE(SV.SV0950.(WSSV000148))
  FREE PACKAGE(WB.WB0970.(WSTS000052))
  FREE PACKAGE(WB.WB1290.(TOFF000100))
  FREE PACKAGE(VP.VP5310.(VIP0000023))
  FREE PACKAGE(WI.YWI0087.(TOFF0001015896D63B))
  FREE PACKAGE(WB.WB1100.(TOFF000101))
  FREE PACKAGE(KS.YKS5512.(CSED0000325896E4BF))
  FREE PACKAGE(KS.YKS5511.(CSED0000325896E675))
  FREE PACKAGE(WF.YWFSWC.(WSSW000084))
  FREE PACKAGE(WF.WF5410.(WSSW000084))
  FREE PACKAGE(WB.WB0720.(WS8B000415))
  FREE PACKAGE(WB.YWB0083.(WSTS00005458AEAFE5))
  FREE PACKAGE(NF.YNFBUG.(NBSI00005056091E27))
  FREE PACKAGE(WB.YWBBOPR.(WS8B000359587F3ED3))
  FREE PACKAGE(VV.YVVZZ11.(VDPS00006756A9E387))
  FREE PACKAGE(WP.YWPR1PX.(DBH000007557CEF455))
  FREE PACKAGE(RT.RT5910.(RFT0000016))
  FREE PACKAGE(VV.YVVZZ3R.(VDPS0000295586D7EF))
  FREE PACKAGE(YY.YYFILOD.(BKUR00004157EB8F97))
  FREE PACKAGE(EK.EK8710.(EMA0000034))
  FREE PACKAGE(WB.WB7330.(A06M025453))
  FREE PACKAGE(WB.WB7320.(A06M025453))
  FREE PACKAGE(WB.WB7340.(A06M025453))
  FREE PACKAGE(SE.SE0870.(A20Y001521))
  FREE PACKAGE(ER.YERBER.(EAMR000019))
  FREE PACKAGE(ER.ER5080.(EAMR000019))
  FREE PACKAGE(AT.AT7500.(ACS0000011))
  FREE PACKAGE(CU.CU9000.(CIFS000142))
  FREE PACKAGE(SV.SV5740.(WSSV000151))
  FREE PACKAGE(SV.SV5760.(WSSV000151))
  FREE PACKAGE(AT.AT8500.(ACS0000012))
  FREE PACKAGE(AT.AT8500.(ACS0000011))
  FREE PACKAGE(ER.YERDUPD.(EAMR0000185857FA28))
  FREE PACKAGE(ER.YERDINS.(EAMR0000175829D73A))
  FREE PACKAGE(WB.YWB0082.(WSTS00004658931E2C))
  FREE PACKAGE(ER.YERDCUR.(EAMR000018585BE7D9))
  FREE PACKAGE(ER.YERDGET.(EAMR000017583D54F9))
  FREE PACKAGE(WB.YWBSYM.(WS8B00038058A17C05))
  FREE PACKAGE(WI.YWI0087.(TOFF00008858A1871A))
  FREE PACKAGE(WP.YWPR6PX.(DBH000007557CEF45D))
  FREE PACKAGE(NO.NO0970.(NO00000031))
  FREE PACKAGE(SN.SN5901.(NOST000268))
  FREE PACKAGE(SN.SN5004.(NOST000268))
  FREE PACKAGE(UU.UU5170.(RS20000066))
  FREE PACKAGE(WQ.WQ5950.(CUBE000067))
  FREE PACKAGE(SN.SN5004.(SAVS000002))
  FREE PACKAGE(WB.WB1030.(WSTS000046))
  FREE PACKAGE(WB.WB1040.(WSTS000046))
  FREE PACKAGE(WP.YWPR2PX.(DBH000007557CEF456))
  FREE PACKAGE(ER.ER5080.(EAMR000022))
  FREE PACKAGE(ER.YERBER.(EAMR000022))
  FREE PACKAGE(YX.YXA171C.(TOFF00008858A1B300))
  FREE PACKAGE(DE.DE0430.(DE00000043))
  FREE PACKAGE(DE.DE0440.(DE00000043))
  FREE PACKAGE(DE.DE0050.(DE00000043))
  FREE PACKAGE(DE.DE0820.(DE00000043))
  FREE PACKAGE(YY.YYNLCPB.(MOD000002157729A19))
  FREE PACKAGE(DE.DE0420.(DE00000043))
  FREE PACKAGE(DE.DE0810.(DE00000043))
  FREE PACKAGE(DE.DE0090.(DE00000043))
  FREE PACKAGE(DE.DE0030.(DE00000043))
  FREE PACKAGE(DI.DI7510.(DI00000054))
  FREE PACKAGE(DP.DP0320.(DP00000059))
  FREE PACKAGE(ED.ED0960.(ED00000047))
  FREE PACKAGE(GM.GM0850.(GM00000113))
  FREE PACKAGE(DE.DE5900.(DE00000043))
  FREE PACKAGE(WQ.WQ6000.(CUBE000067))
  FREE PACKAGE(XP.XP7200.(A19R002479))
  FREE PACKAGE(SN.SN5903.(NOST000268))
  FREE PACKAGE(DE.DE5080.(DE00000043))
  FREE PACKAGE(WF.WF5410.(WSSW000069))
  FREE PACKAGE(WF.YWFSWC.(WSSW000069))
  FREE PACKAGE(ER.YERBER.(EAMR000029))
  FREE PACKAGE(WB.YWBSA4.(WS8B00038058B3F8A5))
  FREE PACKAGE(HP1.AOYURK.(HPSVP2AOYURK))
  FREE PACKAGE(HP3.AOYURK.(HPSVP2AOYURK))
  FREE PACKAGE(HP1.AC7ZRK.(HPSVP2AC7ZRK))
  FREE PACKAGE(HP3.AC7ZRK.(HPSVP2AC7ZRK))
  FREE PACKAGE(HP1.AAIORK.(HPSVP2AAIORK))
  FREE PACKAGE(HP3.AAIORK.(HPSVP2AAIORK))
  FREE PACKAGE(SN.YSN111U.(NOST000268586EA538))
  FREE PACKAGE(WB.WB5340.(TOFF000088))
  FREE PACKAGE(TN.YTNOTF.(OTXO00005857DFCC76))
  FREE PACKAGE(YY.YYWBERX.(TOFF00008858906FB5))
  FREE PACKAGE(WB.WB1290.(TOFF000088))
  FREE PACKAGE(WF.WF5410.(WSSW000091))
  FREE PACKAGE(WF.YWFSWC.(WSSW000091))
  FREE PACKAGE(WQ.YWQ4502.(CUBE0000675896F3D8))
  FREE PACKAGE(WQ.YWQ5601.(CUBE0000675896F3F9))
  FREE PACKAGE(HP1.ACZRQ2.(HPSVP2ACZRQ2))
  FREE PACKAGE(HP3.ACZRQ2.(HPSVP2ACZRQ2))
  FREE PACKAGE(HP1.AF3TQ1.(HPSVP2AF3TQ1))
  FREE PACKAGE(HP3.AF3TQ1.(HPSVP2AF3TQ1))
  FREE PACKAGE(HP1.ACDBQ1.(HPSVP1ACDBQ1))
  FREE PACKAGE(HP3.ACDBQ1.(HPSVP1ACDBQ1))
  FREE PACKAGE(HP1.ABWZQ2.(HPSVP2ABWZQ2))
  FREE PACKAGE(HP3.ABWZQ2.(HPSVP2ABWZQ2))
  FREE PACKAGE(SV.SV5770.(WSSV000151))
  FREE PACKAGE(SV.SV5600.(WSSV000151))
  FREE PACKAGE(SV.SV5790.(WSSV000151))
  FREE PACKAGE(DE.DE0190.(DE00000043))
  FREE PACKAGE(DE.DE5130.(DE00000043))
  FREE PACKAGE(CZ.CZ5494.(ACP0000084))
  FREE PACKAGE(MF.MF8940.(MFR0000096))
  FREE PACKAGE(MF.MF8930.(MFR0000096))
  FREE PACKAGE(WL.WL7390.(WSAW000086))
  FREE PACKAGE(TN.TN7080.(OTXO000060))
  FREE PACKAGE(MF.MF8950.(MFR0000096))
  FREE PACKAGE(HP1.RWBR030.(HPSVP1RWBR030))
  FREE PACKAGE(HP3.RWBR030.(HPSVP1RWBR030))
  FREE PACKAGE(ER.ER8020.(EAMR000022))
  FREE PACKAGE(AZ.AZ0210.(AWZA000052))
  FREE PACKAGE(TN.TN7004.(OTXO000060))
  FREE PACKAGE(WC.WC8170.(OTXO000060))
  FREE PACKAGE(CZ.CZ7510.(APEN000035))
  FREE PACKAGE(CZ.CZ8020.(APEN000032))
  FREE PACKAGE(CZ.CZ8010.(APEN000039))
  FREE PACKAGE(WP.YWPL2P1.(DBH00000685766559B))
  FREE PACKAGE(HP1.AB7STL.(HPSVP2AB7STL))
  FREE PACKAGE(HP3.AB7STL.(HPSVP2AB7STL))
  FREE PACKAGE(WQ.YWQ4101.(CUBE00006758AC2DF1))
  FREE PACKAGE(SV.SV5750.(WSSV000151))
  FREE PACKAGE(SN.YSN201I.(NOST000268586EA569))
  FREE PACKAGE(EC.EC7204.(DLGR000022))
  FREE PACKAGE(EC.EC7206.(DLGR000022))
  FREE PACKAGE(DE.DE7120.(DE00000064))
  FREE PACKAGE(VV.YVVZZ19.(VDPS000090582B5250))
  FREE PACKAGE(MF.MF7010.(MFR0000096))
  FREE PACKAGE(AP.YAPUTGK.(APEN000039588E05DF))
  FREE PACKAGE(DE.DE5600.(DE00000043))
  FREE PACKAGE(CZ.CZ6300.(KLOM000057))
  FREE PACKAGE(TN.TN5016.(OTXO000060))
  FREE PACKAGE(PC01.PC5060.(IVN0000028))
  FREE PACKAGE(PC02.PC5060.(IVN0000028))
  FREE PACKAGE(PC03.PC5060.(IVN0000028))
  FREE PACKAGE(PC04.PC5060.(IVN0000028))
  FREE PACKAGE(PC05.PC5060.(IVN0000028))
  FREE PACKAGE(PC06.PC5060.(IVN0000028))
  FREE PACKAGE(PC07.PC5060.(IVN0000028))
  FREE PACKAGE(DE.DE5690.(DE00000043))
  FREE PACKAGE(GM.GM7910.(GM00000065))
  FREE PACKAGE(CZ.YCZM113.(KINF00000656A66022))
  FREE PACKAGE(FI.YFI0140.(BKUR00003857BB18F4))
  FREE PACKAGE(WB.WB0990.(TOFF000076))
  FREE PACKAGE(DE.DE0030.(DE00000065))
  FREE PACKAGE(DE.DE0050.(DE00000065))
  FREE PACKAGE(DE.DE0090.(DE00000065))
  FREE PACKAGE(DE.DE0420.(DE00000065))
  FREE PACKAGE(DE.DE0430.(DE00000065))
  FREE PACKAGE(DE.DE0440.(DE00000065))
  FREE PACKAGE(DE.DE0810.(DE00000065))
  FREE PACKAGE(DE.DE0820.(DE00000065))
  FREE PACKAGE(SN.SN5004.(SAVS000004))
  FREE PACKAGE(GM.GM0850.(GM00000131))
  FREE PACKAGE(ED.ED0960.(ED00000058))
  FREE PACKAGE(ER.YERBER.(EAMR000033))
  FREE PACKAGE(WF.WF5410.(WSSW000092))
  FREE PACKAGE(WF.YWFSWC.(WSSW000092))
  FREE PACKAGE(WB.WB5340.(TOFF000110))
  FREE PACKAGE(WB.WB1290.(TOFF000110))
  FREE PACKAGE(WB.WB0970.(WSTS000046))
  FREE PACKAGE(WF.WF0320.(WSSW000069))
  FREE PACKAGE(WF.WF0350.(WSSW000069))
  FREE PACKAGE(WB.WB0550.(WSTS000046))
  FREE PACKAGE(GM.GM0870.(GM00000113))
  FREE PACKAGE(SV.SV5150.(WSSV000151))
  FREE PACKAGE(WB.WB1100.(TOFF000088))
  FREE PACKAGE(WB.WB0060.(TOFF000088))
  FREE PACKAGE(WB.WB0980.(TOFF000088))
  FREE PACKAGE(WB.WB1130.(WSTS000046))
  FREE PACKAGE(WF.WF0310.(WSSW000069))
  FREE PACKAGE(WB.YWB0083.(WS8B00038058B41EE5))
  FREE PACKAGE(SN.SN5901.(SAVS000002))
  FREE PACKAGE(UU.UU5170.(GSER000169))
  FREE PACKAGE(WB.YWB0082.(WS8B00042658C556F1))
  FREE PACKAGE(WI.YWI0087.(WS8B00042858C6D5CA))
  FREE PACKAGE(NO.NO0970.(NO00000043))
  FREE PACKAGE(ER.ER5080.(EAMR000029))
  FREE PACKAGE(WQ.WQ5950.(CUBE000090))
  FREE PACKAGE(SV.SV5600.(WSSV000222))
  FREE PACKAGE(SV.SV5790.(WSSV000222))
  FREE PACKAGE(TN.TN7080.(OTXO000072))
  FREE PACKAGE(WF.WF0300.(WSSW000069))
  FREE PACKAGE(PC.YPC0570.(IVN000002457FF4E06))
  FREE PACKAGE(FI.FI2100.(BKUR000052))
  FREE PACKAGE(MF.YMFC110.(MFR000009758A985D8))
  FREE PACKAGE(NTA1P.CZA0181.(A02E00047752976218))
  FREE PACKAGE(WB.WB0820.(WSTS000014))
  FREE PACKAGE(DE.DE0100.(DE00000043))
  FREE PACKAGE(DE.DE0490.(DE00000043))
  FREE PACKAGE(WB.WB0840.(WSTS000046))
  FREE PACKAGE(SN.YSN111I.(NOST000268586EA533))
  FREE PACKAGE(WB.YWBSA2.(WS8B00038058930202))
  FREE PACKAGE(EX.EX5020.(EXPN000059))
  FREE PACKAGE(VD.VDDBM15.(DSPV000040))
  FREE PACKAGE(WB.YWBCTA.(WS8B00038058930814))
  FREE PACKAGE(WF.WF0280.(WSSW000069))
  FREE PACKAGE(RI.RI0820.(RI00000016))
  FREE PACKAGE(YY.YYFILOD.(BKUR00005258935183))
  FREE PACKAGE(VV.YVVZZ05.(VDPS0000775794D107))
  FREE PACKAGE(TN.TN0530.(OTXO000063))
  FREE PACKAGE(WB.WB7561.(WSTS000019))
  FREE PACKAGE(WB.WB7560.(WSTS000034))
  FREE PACKAGE(NI.YNIYTLG.(IPC0000141576AA733))
  FREE PACKAGE(NI01.YNIYTLG.(IPC0000141576AA733))
  FREE PACKAGE(NI02.YNIYTLG.(IPC0000141576AA733))
  FREE PACKAGE(NI.YNI0161.(IPC0000175588646FA))
  FREE PACKAGE(CZ.CZ5280.(KLOM000057))
  FREE PACKAGE(CZ.CZ6400.(GSER000152))
  FREE PACKAGE(WB.WB5280.(WSTS000046))
  FREE PACKAGE(NO.NO0960.(NO00000031))
  FREE PACKAGE(TP.TP0800.(TP00000016))
  FREE PACKAGE(FZ.FZ0820.(FZ00000014))
  FREE PACKAGE(CZ.CZ5150.(KLOM000057))
  FREE PACKAGE(EC.EC5130.(KLOM000057))
  FREE PACKAGE(CZ.CZ6500.(GSER000152))
  FREE PACKAGE(WQ.YWQBERI.(CUBE00006758A48C9B))
  FREE PACKAGE(CZ.YCZMLIM.(KLOM00005758ADB2E7))
  FREE PACKAGE(FI.FI5200.(BKUR000052))
  FREE PACKAGE(CK.YCKT025.(DCA0000026))
  FREE PACKAGE(MF.MF7901.(MFR0000065))
  FREE PACKAGE(DE.DE0860.(DE00000028))
  FREE PACKAGE(AU.YAU190I.(AURA00005057D6BC0B))
  FREE PACKAGE(AU.YAU190D.(AURA00005057D6BC08))
  FREE PACKAGE(AU.YAU191D.(AURA00005057D6BC0E))
  FREE PACKAGE(AU.YAU191I.(AURA00005057D6BC20))
  FREE PACKAGE(MF.MF7550.(MFR0000086))
  FREE PACKAGE(MF.MF7570.(MFR0000086))
  FREE PACKAGE(WC.WC8120.(OTXO000054))
  FREE PACKAGE(NTA1P.CZA0199.(A02E0005675847D69B))
  FREE PACKAGE(TN.YTN0021.(OTXO0000585804AD7B))
  FREE PACKAGE(WB.WB7690.(A06M025453))
  FREE PACKAGE(NI.YNILBPL.(IPC000017558864653))
  FREE PACKAGE(DE.DE0400.(DE00000043))
  FREE PACKAGE(DP.DP0920.(DP00000059))
  FREE PACKAGE(NL.NL7310.(BALR000059))
  FREE PACKAGE(WB.WB0520.(WSTS000046))
  FREE PACKAGE(WB.WB0530.(WSTS000046))
  FREE PACKAGE(WB.WB5290.(WSTS000046))
  FREE PACKAGE(WB.WB5270.(WSTS000046))
  FREE PACKAGE(WF.YWF64CA.(WSSW00006958931268))
  FREE PACKAGE(WB.WB5260.(WSTS000046))
  FREE PACKAGE(DE.DE0830.(DE00000043))
  FREE PACKAGE(EX.EX6020.(EXPN000059))
  FREE PACKAGE(EX.EX6010.(EXPN000059))
  FREE PACKAGE(CZ.CZ8980.(KLOM000057))
  FREE PACKAGE(CZ.CZ5190.(LOMN000028))
  FREE PACKAGE(MF.MF7230.(MFR0000096))
  FREE PACKAGE(MF.MF7320.(MFR0000096))
  FREE PACKAGE(MF.MF8620.(MFR0000096))
  FREE PACKAGE(MF.MF7330.(MFR0000096))
  FREE PACKAGE(PC01.YPC0830.(IVN000002858A43FD4))
  FREE PACKAGE(PC02.YPC0830.(IVN000002858A43FD4))
  FREE PACKAGE(PC03.YPC0830.(IVN000002858A43FD4))
  FREE PACKAGE(PC04.YPC0830.(IVN000002858A43FD4))
  FREE PACKAGE(PC05.YPC0830.(IVN000002858A43FD4))
  FREE PACKAGE(PC06.YPC0830.(IVN000002858A43FD4))
  FREE PACKAGE(PC07.YPC0830.(IVN000002858A43FD4))
  FREE PACKAGE(SV.SV5780.(WSSV000151))
  FREE PACKAGE(WQ.WQ6010.(CUBE000067))
  FREE PACKAGE(NL.NL7810.(BALR000059))
  FREE PACKAGE(WC.WC8410.(OTXO000060))
  FREE PACKAGE(SN.YSND008.(NOST00026858AEF9FA))
  FREE PACKAGE(NI.YNICS01.(IPC000017558AED477))
  FREE PACKAGE(WB.WB5570.(WS8B000362))
  FREE PACKAGE(EX.EX5030.(EXPN000059))
  FREE PACKAGE(SV.SV5740.(WSSV000207))
  FREE PACKAGE(SV.SV5760.(WSSV000207))
  FREE PACKAGE(TR.YTRHISP.(AITR000012568CED33))
  FREE PACKAGE(WB.YWBMAS.(WS8B00031857D6B290))
  FREE PACKAGE(LC.YLCTF03.(TFBM00002857EA8045))
  FREE PACKAGE(LC.YLCTF02.(TFBM00002857ED0D2F))
  FREE PACKAGE(WB.YWBSUM.(WS8B0003185804B0D3))
  FREE PACKAGE(WB.YWB530.(WS8B000320))
  FREE PACKAGE(ER.YERDINS.(EAMR000022588F62B1))
  FREE PACKAGE(EC.YECCRAC.(SYNC0000205890AF4C))
  FREE PACKAGE(PC01.YPC0520.(IVN000002858904D09))
  FREE PACKAGE(PC02.YPC0520.(IVN000002858904D09))
  FREE PACKAGE(PC03.YPC0520.(IVN000002858904D09))
  FREE PACKAGE(PC04.YPC0520.(IVN000002858904D09))
  FREE PACKAGE(PC05.YPC0520.(IVN000002858904D09))
  FREE PACKAGE(PC06.YPC0520.(IVN000002858904D09))
  FREE PACKAGE(PC07.YPC0520.(IVN000002858904D09))
  FREE PACKAGE(WB.WB0950.(WSTS000046))
  FREE PACKAGE(WB.WB0940.(WSTS000046))
  FREE PACKAGE(WB.YWBWRK.(WS8B0003805893075A))
  FREE PACKAGE(WB.YWBEBSM.(WSTS00004658931E1A))
  FREE PACKAGE(LC.LC0511I.(TFBM000029589B10A0))
  FREE PACKAGE(WB.WB1080.(TOFF000088))
  FREE PACKAGE(WB.WB0630.(WSTS000046))
  FREE PACKAGE(WB.WB0680.(WSTS000046))
  FREE PACKAGE(WB.YWBMOV.(WS8B0003805899DEB4))
  FREE PACKAGE(TR.YTREDBM.(AITR0000155603CD16))
  FREE PACKAGE(VV.YVVZZ03.(VDPS00007357041232))
  FREE PACKAGE(AU.YAU180D.(AURA00005057D6BBB4))
  FREE PACKAGE(AU.YAU180I.(AURA00005057D6BBBE))
  FREE PACKAGE(AU.YAU181D.(AURA00005057D6BBD6))
  FREE PACKAGE(AU.YAU181I.(AURA00005057D6BBDA))
  FREE PACKAGE(AU.YAU181S.(AURA00005057D6BBDE))
  FREE PACKAGE(SN.YSND003.(NOST000268586EA49A))
  FREE PACKAGE(SN.YSN110I.(NOST000268586EA52B))
  FREE PACKAGE(SN.YSN110U.(NOST000268586EA531))
  FREE PACKAGE(DE.YDE0021.(DE0000004358849D3C))
  FREE PACKAGE(ER.YERDUPD.(EAMR000022588F76E9))
  FREE PACKAGE(TR.TR0810.(AITR000031))
  FREE PACKAGE(DE.DE0060.(DE00000043))
  FREE PACKAGE(RI.RI0810.(RI00000016))
  FREE PACKAGE(DE.DE0410.(DE00000043))
  FREE PACKAGE(MF.YMFC113.(MFR000009758B2D4AC))
  FREE PACKAGE(DE.DE0940.(DE00000043))
  FREE PACKAGE(TN.YTN0100.(OTXO00006058BD4694))
  FREE PACKAGE(VP.VP5310.(VIP0000022))
  FREE PACKAGE(ER.YERDGET.(EAMR00002258A9A437))
  FREE PACKAGE(WF.YWFM537.(WSSW00006958A48155))
  FREE PACKAGE(ER.YERDCUR.(EAMR00002258AD7708))
  FREE PACKAGE(WF.YWFCB02.(WSSW00006958AEA2AC))
  FREE PACKAGE(AU.YAU180S.(AURA00005057D6BBC2))
  FREE PACKAGE(AU.YAU190S.(AURA00005057D6BC0C))
  FREE PACKAGE(AU.YAU191S.(AURA00005057D6BC24))
  FREE PACKAGE(OE.YOE0610.(OE00000010578762EB))
  FREE PACKAGE(TN.YTNBOPH.(OTXO00005857DFCC97))
  FREE PACKAGE(TN.YTNW170.(OTXO00005857FE65F4))
  FREE PACKAGE(WC.WC5010.(OTXO000060))
  FREE PACKAGE(WC.WC8401.(OTXO000060))
  FREE PACKAGE(ED.ED0950.(ED00000047))
  FREE PACKAGE(WN.YWNOLOG.(FOND00002455FA71E6))
  FREE PACKAGE(WB.YWBBODA.(WS8B00031857D6ADA9))
  FREE PACKAGE(WB.YWBBOPR.(WS8B00038058930376))
  FREE PACKAGE(WB.YWBIO.(WS8B000380589300E4))
  FREE PACKAGE(SN.SN5920.(SAVS000001))
  FREE PACKAGE(SN.SN5920.(SAVS000008))
  FREE PACKAGE(SN.SN5920.(SAVS000006))
  FREE PACKAGE(CD.CD2590.(UPDS000037))
  FREE PACKAGE(TN.TN5030.(OTXO000054))
  FREE PACKAGE(RT.RT5910.(TABS000134))
  FREE PACKAGE(CZ.CZ7510.(APEN000040))
  FREE PACKAGE(SV.SV0280.(WSSV000188))
  FREE PACKAGE(WQ.WQ5950.(CUBE000081))
  FREE PACKAGE(AP.YAPUTGK.(APEN0000405901FCB8))
  FREE PACKAGE(WQ.WQ5950.(CUBE000100))
  FREE PACKAGE(TN.TN7080.(OTXO000066))
  FREE PACKAGE(TN.TN7080.(OTXO000075))
  FREE PACKAGE(WQ.WQ5950.(CUBE000101))
  FREE PACKAGE(WC.WC8170.(OTXO000066))
  FREE PACKAGE(CZ.CZ5494.(ACP0000098))
  FREE PACKAGE(CZ.CZ8010.(APEN000040))
  FREE PACKAGE(SV.SV5770.(WSSV000188))
  FREE PACKAGE(KA.KA0030.(KOAB000046))
  FREE PACKAGE(WB.YWB5403.(A06M02510853AC4207))
  FREE PACKAGE(WB.YWB5402.(A06M02510853AC420A))
  FREE PACKAGE(SV.SV5750.(WSSV000188))
  FREE PACKAGE(ER.YERPRI.(EAMR000028))
  FREE PACKAGE(CZ.CZ7030.(APEN000014))
  FREE PACKAGE(ER.YERBER.(EAMR000028))
  FREE PACKAGE(ER.ER5080.(EAMR000028))
  FREE PACKAGE(WI.YWI0087.(TOFF00009958EF63C0))
  FREE PACKAGE(WB.YWB0083.(WSTS00005158EF63E7))
  FREE PACKAGE(WB.YWB0082.(WSTS00005158FC9483))
  FREE PACKAGE(WB.WB0840.(WSTS000051))
  FREE PACKAGE(WB.WB0550.(WSTS000051))
  FREE PACKAGE(WB.WB0970.(WSTS000051))
  FREE PACKAGE(WB.WB0820.(WSTS000051))
  FREE PACKAGE(WB.WB1100.(TOFF000099))
  FREE PACKAGE(WB.WB1130.(WSTS000051))
  FREE PACKAGE(WB.WB1290.(TOFF000099))
  FREE PACKAGE(WB.WB5340.(TOFF000099))
  FREE PACKAGE(SV.SV5940.(WSSV000207))
  FREE PACKAGE(WB.YWB530.(WS8B000411))
  FREE PACKAGE(WB.WB0600.(WSTS000046))
  FREE PACKAGE(WB.WB0950.(WSTS000051))
  FREE PACKAGE(WB.WB0630.(WSTS000051))
  FREE PACKAGE(WB.WB0680.(WSTS000051))
  FREE PACKAGE(WB.WB0530.(WSTS000051))
  FREE PACKAGE(WB.WB0520.(WSTS000051))
  FREE PACKAGE(WB.WB0940.(WSTS000051))
  FREE PACKAGE(SV.SV5740.(WSSV000188))
  FREE PACKAGE(SV.SV5760.(WSSV000188))
  FREE PACKAGE(SV.SV0280.(WSSV000225))
  FREE PACKAGE(MF.MF8620.(MFR0000110))
  FREE PACKAGE(VV.YVVZZ28.(VDPS00010858F5FD2B))
  FREE PACKAGE(WC.WC8410.(OTXO000066))
  FREE PACKAGE(WB.WB5570.(WS8B000411))
  FREE PACKAGE(NI.YNILBPL.(IPC000019258FF52EF))
  FREE PACKAGE(DE.DE0420.(DE00000061))
  FREE PACKAGE(DE.DE0030.(DE00000061))
  FREE PACKAGE(BP.YBPMUT.(BPST000045588075D1))
  FREE PACKAGE(VV.YVVZZ04.(VDPS0001035857FF0A))
  FREE PACKAGE(CZ.YCZMLIM.(KLOM00006158D0FB62))
  FREE PACKAGE(WB.YWBBOPR.(WS8B00040958FDB730))
  FREE PACKAGE(DE.DE0810.(DE00000061))
  FREE PACKAGE(WF.WF5410.(WSSW000085))
  FREE PACKAGE(GM.GM0850.(GM00000132))
  FREE PACKAGE(DE.DE0820.(DE00000061))
  FREE PACKAGE(WC.WC5010.(OTXO000066))
  FREE PACKAGE(WC.WC8401.(OTXO000066))
  FREE PACKAGE(WC.WC8120.(OTXO000066))
  FREE PACKAGE(WB.YWBEBSM.(WSTS00005158EF63FE))
  FREE PACKAGE(TN.YTNUPD.(OTXO0000615832C7DD))
  FREE PACKAGE(WQ.WQ5950.(CUBE000103))
  FREE PACKAGE(WB.WB5280.(WSTS000051))
  FREE PACKAGE(TN.TN7080.(OTXO000076))
  FREE PACKAGE(WC.WC5010.(OTXO000073))
  FREE PACKAGE(CZ.CZ7510.(APEN000046))
  FREE PACKAGE(WB.YWBBOPR.(WS8B00044159256574))
  FREE PACKAGE(TN.TN8900.(OTXO000066))
  FREE PACKAGE(TN.YTN0160.(OTXO00005457A1E399))
  FREE PACKAGE(CZ.YCZPABW.(GSER000152588F2812))
  FREE PACKAGE(CZ.YCZJABW.(GSER0001525891A6AF))
  FREE PACKAGE(HP1.AB0ORK.(HPSVP2AB0ORK))
  FREE PACKAGE(HP3.AB0ORK.(HPSVP2AB0ORK))
  FREE PACKAGE(TN.TN5015.(OTXO000036))
  FREE PACKAGE(WC.WC8170.(OTXO000073))
  FREE PACKAGE(DE.DE5130.(DE00000061))
  FREE PACKAGE(WB.YWBSA4.(WS8B00040958DBA2D3))
  FREE PACKAGE(WB.WB7441.(WSTS000035))
  FREE PACKAGE(WB.WB7440.(WSTS000035))
  FREE PACKAGE(WB.WB5570.(WS8B000441))
  FREE PACKAGE(WB.WB5280.(WSTS000056))
  FREE PACKAGE(ER.YERPRI.(EAMR000034))
  FREE PACKAGE(TN.TN5004.(OTXO000060))
  FREE PACKAGE(WB.YWB0082.(WSTS000056592FFC68))
  FREE PACKAGE(WB.YWB0083.(WSTS000056592FFC72))
  FREE PACKAGE(WB.WB0820.(WSTS000056))
  FREE PACKAGE(WB.WB1130.(WSTS000056))
  FREE PACKAGE(WB.WB0970.(WSTS000056))
  FREE PACKAGE(WB.WB0840.(WSTS000056))
  FREE PACKAGE(WB.WB0550.(WSTS000056))
  FREE PACKAGE(WI.YWI0087.(TOFF000111593004B5))
  FREE PACKAGE(TN.TN0530.(OTXO000066))
  FREE PACKAGE(WB.WB0630.(WSTS000056))
  FREE PACKAGE(WB.WB5270.(WSTS000051))
  FREE PACKAGE(WB.WB5290.(WSTS000051))
  FREE PACKAGE(ER.YERBER.(EAMR000034))
  FREE PACKAGE(WC.WC8401.(OTXO000073))
  FREE PACKAGE(WC.WC8120.(OTXO000073))
  FREE PACKAGE(WB.WB0530.(WS8B000441))
  FREE PACKAGE(WC.WC5010.(OTXO000077))
  FREE PACKAGE(WB.YWBBOPR.(WS8B000465593D32E5))
  FREE PACKAGE(WB.WB0680.(WSTS000056))
  FREE PACKAGE(WB.WB0940.(WSTS000056))
  FREE PACKAGE(WB.WB0950.(WSTS000056))
  FREE PACKAGE(WB.WB0520.(WS8B000441))
  FREE PACKAGE(WB.YWBEBSM.(WS8B000441592FF6DF))
  FREE PACKAGE(WB.WB0060.(TOFF000099))
  FREE PACKAGE(HPS.AANQUP.(HPSVP2AANQUP))
  FREE PACKAGE(HP1.AANQUP.(HPSVP2AANQUP))
  FREE PACKAGE(HP3.AANQUP.(HPSVP2AANQUP))
  FREE PACKAGE(AT.AT0097.(IMS0000013))
  FREE PACKAGE(WP.YWPL9P1.(DBH00000835872CF09))
  FREE PACKAGE(WQ.YWQBERI.(CUBE0000815900BA99))
  FREE PACKAGE(SV.SV7520.(WSSV000151))
  FREE PACKAGE(HP1.AG23LZ.(HPSVP2AG23LZ))
  FREE PACKAGE(HPS.AA00WM.(HPSVP2AA00WM))
  FREE PACKAGE(HP1.AA00WM.(HPSVP2AA00WM))
  FREE PACKAGE(HP3.AA00WM.(HPSVP2AA00WM))
  FREE PACKAGE(HP3.AG23LZ.(HPSVP2AG23LZ))
  FREE PACKAGE(CZ.YCZJABW.(GSER000181593D7A96))
  FREE PACKAGE(WB.WB7230.(A06M025453))
  FREE PACKAGE(ER.ER5080.(EAMR000034))
  FREE PACKAGE(DE.DE0190.(DE00000061))
  FREE PACKAGE(IT.YITGT.(TABS0000535613E056))
  FREE PACKAGE(YY.YYITST.(A20Y00132952D3C3E7))
  FREE PACKAGE(IT.YITD02.(A20Y001509542022D1))
  FREE PACKAGE(IT.YITD01.(A20Y001509542022FD))
  FREE PACKAGE(DP.DP0320.(DP00000065))
  FREE PACKAGE(DI.YDIU016.(A06M02710553F33A2E))
  FREE PACKAGE(DI.YDIU015.(A06M02710553F33A22))
  FREE PACKAGE(DI.DI7510.(DI00000058))
  FREE PACKAGE(RA.RA7240.(EGB0000025))
  FREE PACKAGE(DI.DI5200.(DI00000047))
  FREE PACKAGE(NL.NL7590.(BALR000005))
  FREE PACKAGE(WQ.WQ6000.(CUBE000081))
  FREE PACKAGE(SN.SN5903.(SAVS000001))
  FREE PACKAGE(KS.YKSFTXT.(A14S002412533962A5CICS))
  FREE PACKAGE(YY.YYUWI.(A19R0024915378C4EF))
  FREE PACKAGE(VV.YVVZZ08.(VDPS00005256377304))
  FREE PACKAGE(CZ.YCZT724.(ACP000005657711403))
  FREE PACKAGE(CZ.YCZT726.(ACP0000056577D3D5C))
  FREE PACKAGE(MF.MF8930.(MFR0000110))
  FREE PACKAGE(CZ.CZ5494.(ACP0000111))
  FREE PACKAGE(WP.YWPR4PX.(DBH00000835872A6ED))
  FREE PACKAGE(YY.YYPRAD0.(A20Y001521))
  FREE PACKAGE(ER.YERPRI.(EAMR000042))
  FREE PACKAGE(WP.YWPR5PX.(DBH00000835872A738))
  FREE PACKAGE(TN.YTN5012.(OTXO00005857DFCCA4))
  FREE PACKAGE(TN.YTN5013.(OTXO0000585804AD84))
  FREE PACKAGE(ER.ER8020.(EAMR000028))
  FREE PACKAGE(TN.TN7004.(OTXO000066))
  FREE PACKAGE(TN.TN5015.(WS8B000468))
  FREE PACKAGE(WC.WC8170.(WS8B000468))
  FREE PACKAGE(WB.WB8720.(WSTS000035))
  FREE PACKAGE(WB.WB7030.(A06M025453))
  FREE PACKAGE(WB.WB7020.(WSTS000039))
  FREE PACKAGE(WB.WB7360.(A06M025453))
  FREE PACKAGE(WB.WB5120.(WSTS000046))
  FREE PACKAGE(CZ.CZ8020.(APEN000040))
  FREE PACKAGE(CZ.CZ8010.(APEN000044))
  FREE PACKAGE(CZ.CZ7510.(APEN000047))
  FREE PACKAGE(VD.VDUTI41.(DSPV000040))
  FREE PACKAGE(RT.YRT0002.(TABS0001305877A804))
  FREE PACKAGE(SV.SV5770.(WSSV000195))
  FREE PACKAGE(WQ.YWQ5601.(CUBE0000815900BC28))
  FREE PACKAGE(SV.SV5150.(WSSV000188))
  FREE PACKAGE(YY.YYWBMTU.(A06M02510853AC4233))
  FREE PACKAGE(WF.WF0310.(WSSW000085))
  FREE PACKAGE(WF.WF0320.(WSSW000085))
  FREE PACKAGE(TN.TN5004.(WS8B000468))
  FREE PACKAGE(WB.WB7441.(WS8B000468))
  FREE PACKAGE(WB.WB7440.(WS8B000468))
  FREE PACKAGE(FI.YFI0110.(A06M02733354301877))
  FREE PACKAGE(WB.YWB5417.(A06M02510853AC422D))
  FREE PACKAGE(WB.WB7770.(WSTS000035))
  FREE PACKAGE(TN.TN5014.(OTXO000045))
  FREE PACKAGE(RT.RT5120.(TABS000121))
  FREE PACKAGE(EC.EC7204.(DLGR000039))
  FREE PACKAGE(EC.EC7206.(DLGR000039))
  FREE PACKAGE(MF.MF7010.(MFR0000110))
  FREE PACKAGE(CZ.CZ6300.(KLOM000061))
  FREE PACKAGE(SN.SN5001.(SAVS000001))
  FREE PACKAGE(DE.DE5600.(DE00000061))
  FREE PACKAGE(DE.DE7120.(DE00000061))
  FREE PACKAGE(DE.DE5690.(DE00000061))
  FREE PACKAGE(RT.RT5110.(TABS000121))
  FREE PACKAGE(RT.RT5130.(TABS000121))
  FREE PACKAGE(RT.RT5140.(TABS000121))
  FREE PACKAGE(WB.WB7470.(A06M025453))
  FREE PACKAGE(PC01.PC5060.(IVN0000030))
  FREE PACKAGE(PC02.PC5060.(IVN0000030))
  FREE PACKAGE(PC03.PC5060.(IVN0000030))
  FREE PACKAGE(PC04.PC5060.(IVN0000030))
  FREE PACKAGE(PC05.PC5060.(IVN0000030))
  FREE PACKAGE(PC06.PC5060.(IVN0000030))
  FREE PACKAGE(PC07.PC5060.(IVN0000030))
  FREE PACKAGE(PC.PC5150.(IVN0000028))
  FREE PACKAGE(TN.TN5016.(OTXO000066))
  FREE PACKAGE(SV.SV0280.(WSSV000195))
  FREE PACKAGE(ER.YERDCUR.(EAMR00002858FE0AE8))
  FREE PACKAGE(BX.YBXADBR.(CLOS00014958A5761B))
  FREE PACKAGE(SN.YSN100I.(NOST000268586EA4F0))
  FREE PACKAGE(SN.YSND002.(NOST000268586EA494))
  FREE PACKAGE(SN.YSN120.(NOST000268586EA53A))
  FREE PACKAGE(SN.YSN187S.(NOST0002685889C70D))
  FREE PACKAGE(SN.YSN187I.(NOST0002685891E82E))
  FREE PACKAGE(SN.YSN110I.(SAVS00000159020504))
  FREE PACKAGE(SN.YSND003.(SAVS00000159020C56))
  FREE PACKAGE(WP.YWPR1QX.(DBH00000835872A5A5))
  FREE PACKAGE(SN.YSN110U.(SAVS0000015902056A))
  FREE PACKAGE(WB.WB0900.(WSTS000014))
  FREE PACKAGE(WB.WB1120.(WSTS000014))
  FREE PACKAGE(DI.YDITBTB.(DI000000425741C710))
  FREE PACKAGE(VV.YVVZZ22.(VDPS00008757CEED15))
  FREE PACKAGE(WB.WB1270.(TOFF000067))
  FREE PACKAGE(WB.WB5040.(WS8B000319))
  FREE PACKAGE(HP1.AN96RI.(HPSVP2AN96RI))
  FREE PACKAGE(HP3.AN96RI.(HPSVP2AN96RI))
  FREE PACKAGE(WB.WB0910.(A06M025453))
  FREE PACKAGE(PC.YPC0570.(IVN000003058D9279F))
  FREE PACKAGE(WF.WF0350.(WSSW000085))
  FREE PACKAGE(YY.YYWBERX.(TOFF00011058F89C03))
  FREE PACKAGE(WB.WB0620.(WSTS000046))
  FREE PACKAGE(WB.WB0570.(WSTS000046))
  FREE PACKAGE(WB.WB1050.(WSTS000046))
  FREE PACKAGE(WB.WB1310.(WSTS000046))
  FREE PACKAGE(WB.WB1020.(WSTS000046))
  FREE PACKAGE(WB.WB1070.(WSTS000046))
  FREE PACKAGE(ER.YERBER.(EAMR000042))
  FREE PACKAGE(WQ.YWQBERI.(CUBE0001085961F18D))
  FREE PACKAGE(CZ.YCZJABW.(GSER000185596765E3))
  FREE PACKAGE(ER.ER5080.(EAMR000044))
  FREE PACKAGE(ER.YERPRI.(EAMR000045))
  FREE PACKAGE(WQ.YWQ4502.(CUBE0000815900BDEA))
  FREE PACKAGE(SN.YSN111U.(SAVS00000159020621))
  FREE PACKAGE(GM.GM7910.(GM00000132))
  FREE PACKAGE(DE.DE0060.(DE00000061))
  FREE PACKAGE(CZ.CZ8980.(KLOM000061))
  FREE PACKAGE(WB.WB1100.(TOFF000111))
  FREE PACKAGE(WB.WB5340.(TOFF000111))
  FREE PACKAGE(WB.WB1290.(TOFF000111))
  FREE PACKAGE(WI.YWI0087.(WS8B00046859510C2E))
  FREE PACKAGE(WB.YWB0082.(WS8B00046859510BA3))
  FREE PACKAGE(WB.YWB0083.(WS8B00046859510BA9))
  FREE PACKAGE(WB.WB0820.(WS8B000468))
  FREE PACKAGE(WB.WB0970.(WS8B000468))
  FREE PACKAGE(WB.WB1130.(WS8B000468))
  FREE PACKAGE(WB.WB0840.(WS8B000468))
  FREE PACKAGE(WB.WB5290.(WS8B000468))
  FREE PACKAGE(WB.WB5270.(WS8B000468))
  FREE PACKAGE(WB.WB5570.(WS8B000468))
  FREE PACKAGE(WC.WC5010.(WS8B000468))
  FREE PACKAGE(WC.WC8401.(WS8B000468))
  FREE PACKAGE(WC.WC8120.(WS8B000468))
  FREE PACKAGE(WB.WB0550.(WS8B000468))
  FREE PACKAGE(YX.YXWB021.(A06M02422851AF2DFE))
  FREE PACKAGE(YY.YYWBPRI.(A06M02422851AF2E54))
  FREE PACKAGE(YY.YYWBESM.(A06M02510853AC4238))
  FREE PACKAGE(VV.YVVZZ24.(VDPS00008557E27B46))
  FREE PACKAGE(DE.YDELSTO.(DE0000004358849D33))
  FREE PACKAGE(MF.YMFC110.(MFR0000111590212E8))
  FREE PACKAGE(DE.DE0430.(DE00000061))
  FREE PACKAGE(DE.DE0440.(DE00000061))
  FREE PACKAGE(LC.LC0511I.(TFBM00002658C94A27))
  FREE PACKAGE(WF.WF0300.(WSSW000085))
  FREE PACKAGE(WF.WF0280.(WSSW000085))
  FREE PACKAGE(WP.YWPR3PX.(DBH00000835872A69A))
  FREE PACKAGE(WB.YWBSA2.(WS8B00040958C964D3))
  FREE PACKAGE(WB.WB0580.(WSTS000046))
  FREE PACKAGE(DE.DE0100.(DE00000061))
  FREE PACKAGE(DE.DE0050.(DE00000061))
  FREE PACKAGE(KS.YKSISOC.(CSED00000554AD468E))
  FREE PACKAGE(DE.DE0490.(DE00000061))
  FREE PACKAGE(SV.SV5780.(WSSV000188))
  FREE PACKAGE(SV.SV0950.(WSSV000208))
  FREE PACKAGE(SV.SV5790.(WSSV000188))
  FREE PACKAGE(SV.SV5940.(WSSV000195))
  FREE PACKAGE(VD.YVD0721.(DSPV000040585AB2F8))
  FREE PACKAGE(TN.YTNW100.(OTXO00006358569ED9))
  FREE PACKAGE(TN.YTN0021.(OTXO00006658D8D017))
  FREE PACKAGE(TN.YTNW170.(OTXO00006658DA8107))
  FREE PACKAGE(TN.YTNSICH.(OTXO00006058AC46FF))
  FREE PACKAGE(TN.YTNBOPH.(OTXO00006658C7C906))
  FREE PACKAGE(WB.WB0990.(TOFF000099))
  FREE PACKAGE(WB.WB0980.(TOFF000099))
  FREE PACKAGE(VV.YVVZZ04.(VDPS00011259258C31))
  FREE PACKAGE(TN.YTNUPD.(OTXO00007359300B05))
  FREE PACKAGE(EQ.YEQKDGP.(GSER00010957DA8BC7))
  FREE PACKAGE(VV.YVVZZ11.(VDPS0000995880ACAB))
  FREE PACKAGE(WB.YWBDGP2.(WS8B0003805892FBD7))
  FREE PACKAGE(WB.YWBDGP.(WS8B0003805892FBB2))
  FREE PACKAGE(VV.YVVZZ03.(VDPS00010858CFFF3B))
  FREE PACKAGE(VV.YVVZZ15.(VDPS0000995880ACF1))
  FREE PACKAGE(VV.YVVZZ1R.(VDPS00009958933B9C))
  FREE PACKAGE(WB.WB7520.(WSTS000023))
  FREE PACKAGE(CZ.YCZT397.(GSER000027560ABEC3))
  FREE PACKAGE(CZ.YCZT235.(GSER000027560AC600))
  FREE PACKAGE(KR.YKRT511.(KAUF000015560AEBA9))
  FREE PACKAGE(RM.YRMORGP.(PARS00004956A88B07))
  FREE PACKAGE(CZ.YCZT385.(GSER00004756F975B2))
  FREE PACKAGE(WB.WB7871.(WSTS000035))
  FREE PACKAGE(WB.WB7040.(WSTS000035))
  FREE PACKAGE(WB.WB7370.(WSTS000035))
  FREE PACKAGE(WB.WB7390.(WSTS000035))
  FREE PACKAGE(YY.YYWB101.(WS8B00031857D7E845))
  FREE PACKAGE(WB.YWBITV.(TOFF00007657E100DB))
  FREE PACKAGE(WQ.YWQEXCP.(CUBE00005657EA7F5E))
  FREE PACKAGE(YY.YYDB2FK.(TOFF00007657E396C1))
  FREE PACKAGE(WB.YWB551.(WS8B00028657977132))
  FREE PACKAGE(CZ.YCZJ323.(GSER00010957B4790C))
  FREE PACKAGE(VD.YVD0722.(DSPV000040585AB301))
  FREE PACKAGE(WP.YWPRCPX.(DBH00000835872A3BB))
  FREE PACKAGE(WP.YWPRBPX.(DBH00000835872A0E8))
  FREE PACKAGE(WP.YWPRAPX.(DBH00000835872A114))
  FREE PACKAGE(CZ.YCZJ431.(GSER00012257FD2866))
  FREE PACKAGE(YX.YXWB116.(A06M02422851AF2D8E))
  FREE PACKAGE(YX.YXWB231.(A06M02422851AF2E38))
  FREE PACKAGE(YX.YXWB011.(A06M02422851AF2DED))
  FREE PACKAGE(YY.YYFIKST.(A06M027333543018B2))
  FREE PACKAGE(KX.YKXO002.(CRMA00397654311C87))
  FREE PACKAGE(WB.WB7290.(A06M025453))
  FREE PACKAGE(WB.WB7650.(A06M025453))
  FREE PACKAGE(WB.WB7880.(A06M025453))
  FREE PACKAGE(VD.VDINI01.(DSPV000001))
  FREE PACKAGE(WB.WB7540.(WSTS000001))
  FREE PACKAGE(VW.YVWB641.(WSTS000003552FE2D3))
  FREE PACKAGE(WB.YWBBODA.(WS8B00040958CE50CE))
  FREE PACKAGE(TR.YTRHISP.(AITR00003558D103CA))
  FREE PACKAGE(EC.EC5130.(KLOM000061))
  FREE PACKAGE(DE.YDE0021.(DE0000006158D9002C))
  FREE PACKAGE(WF.YWFCB02.(WSSW00008558E39EB2))
  FREE PACKAGE(WF.YWFM537.(WSSW00008558E39EB7))
  FREE PACKAGE(CD.CD2590.(UPDS000043))
  FREE PACKAGE(TN.YTNOTF.(OTXO00007158F7898E))
  FREE PACKAGE(WB.WB0830.(WSTS000046))
  FREE PACKAGE(WB.WB1340.(WSTS000046))
  FREE PACKAGE(WB.WB0660.(WSTS000046))
  FREE PACKAGE(VV.YVVZZ12.(VDPS000099589B48CE))
  FREE PACKAGE(VV.YVVZZ10.(VDPS000099589B784A))
  FREE PACKAGE(WB.YWBIO.(WS8B00040958C6898F))
  FREE PACKAGE(ED.ED0950.(ED00000052))
  FREE PACKAGE(RI.RI0810.(RI00000019))
  FREE PACKAGE(WB.WB7561.(WSTS000051))
  FREE PACKAGE(WB.WB7560.(WSTS000051))
  FREE PACKAGE(CZ.CZ5280.(KLOM000061))
  FREE PACKAGE(CZ.CZ6400.(GSER000162))
  FREE PACKAGE(CZ.CZ6500.(GSER000162))
  FREE PACKAGE(DE.DE0940.(DE00000061))
  FREE PACKAGE(DE.DE0860.(DE00000061))
  FREE PACKAGE(DE.DE0400.(DE00000061))
  FREE PACKAGE(WF.YWFSWC.(WSSW000085))
  FREE PACKAGE(CZ.CZ5150.(KLOM000061))
  FREE PACKAGE(WB.YWB530.(WS8B000441))
  FREE PACKAGE(WF.WF5410.(WSSW000090))
  FREE PACKAGE(WB.WB0600.(WSTS000056))
  FREE PACKAGE(GM.GM0850.(GM00000144))
  FREE PACKAGE(DE.DE0810.(DE00000063))
  FREE PACKAGE(DE.DE0030.(DE00000063))
  FREE PACKAGE(WQ.WQ5950.(CUBE000083))
  FREE PACKAGE(WB.YWBEBSM.(WS8B00046859510C08))
  FREE PACKAGE(WB.YWBBOPR.(WS8B000468595251AE))
  FREE PACKAGE(WB.WB0680.(WS8B000468))
  FREE PACKAGE(WB.WB0940.(WS8B000468))
  FREE PACKAGE(WB.WB5280.(WS8B000468))
  FREE PACKAGE(WB.WB0630.(WS8B000468))
  FREE PACKAGE(TN.TN0530.(WS8B000468))
  FREE PACKAGE(WB.WB0530.(WS8B000468))
  FREE PACKAGE(CZ.YCZT328.(GSER00009056AE4211))
  FREE PACKAGE(WB.WB7270.(WSTS000035))
  FREE PACKAGE(VD.VDREC00.(DSPV000030))
  FREE PACKAGE(WB.WB7730.(WSTS000046))
  FREE PACKAGE(WC.WC8410.(OTXO000073))
  FREE PACKAGE(DI.YDIT015.(DI00000042571F1C16))
  FREE PACKAGE(DE.DE0090.(DE00000061))
  FREE PACKAGE(GM.YGMSTEU.(GM0000003655EEF7FB))
  FREE PACKAGE(TN.YTN0210.(OTXO000045570CE08E))
  FREE PACKAGE(WP.YWPR1PX.(DBH00000835872A4ED))
  FREE PACKAGE(WB.YWBCTA.(WS8B00040958CE5AAC))
  FREE PACKAGE(WB.YWBSUM.(WS8B00040958C69AFA))
  FREE PACKAGE(WB.WB0960.(WSTS000014))
  FREE PACKAGE(SN.YSN100S.(NOST000268586EA518))
  FREE PACKAGE(SN.YSN183I.(NOST000268586EA543))
  FREE PACKAGE(WP.YWPU1P5.(DBH0000083587689E2))
  FREE PACKAGE(WP.YWPR2PX.(DBH00000835872A647))
  FREE PACKAGE(WF.YWF64CA.(WSSW00008558CEB299))
  FREE PACKAGE(SN.YSND007.(SAVS00000159020CA9))
  FREE PACKAGE(SN.YSND008.(SAVS00000159020CEE))
  FREE PACKAGE(SN.YSN202I.(SAVS00000159020731))
  FREE PACKAGE(SN.YSND010.(SAVS0000015908BC89))
  FREE PACKAGE(NI.YNIPREU.(IPC00001235677F09E))
  FREE PACKAGE(VV.YVVZZ17.(VDPS00007757694F83))
  FREE PACKAGE(VV.YVVZZ14.(VDPS00007356F13EBD))
  FREE PACKAGE(WB.WB7410.(WSTS000035))
  FREE PACKAGE(WB.WB7280.(WSTS000035))
  FREE PACKAGE(WC.WC7220.(OTXO000045))
  FREE PACKAGE(WB.WB8650.(TOFF000059))
  FREE PACKAGE(VV.YVVZZ23.(VDPS00008557F15BB7))
  FREE PACKAGE(NI.YNIPACU.(IPC00001415784E6AB))
  FREE PACKAGE(NI01.YNIPACU.(IPC00001415784E6AB))
  FREE PACKAGE(NI02.YNIPACU.(IPC00001415784E6AB))
  FREE PACKAGE(PC.PC7030.(IVN0000028))
  FREE PACKAGE(PC.PC8000.(IVN0000028))
  FREE PACKAGE(WP.YWPRDPX.(DBH00000835872A45F))
  FREE PACKAGE(VV.YVVZZ20.(VDPS00009057FCFF37))
  FREE PACKAGE(WC.WC7280.(OTXO000058))
  FREE PACKAGE(WC.WC7240.(A06M027069))
  FREE PACKAGE(WC.WC7530.(A06M027069))
  FREE PACKAGE(WC.WC7310.(A06M027069))
  FREE PACKAGE(WC.WC7320.(A06M027069))
  FREE PACKAGE(WU.YWUGBUB.(TU0000001154AE45DF))
  FREE PACKAGE(WC.WC7260.(OTXO000008))
  FREE PACKAGE(ER.YERDINS.(EAMR00002858D1311B))
  FREE PACKAGE(NI.YNICL01.(IPC000019258D0EAF8))
  FREE PACKAGE(UU.UU5170.(RS20000072))
  FREE PACKAGE(NI.YNICS01.(IPC000019258DA340A))
  FREE PACKAGE(MF.MF7550.(MFR0000110))
  FREE PACKAGE(MF.MF7901.(MFR0000110))
  FREE PACKAGE(MF.MF7230.(MFR0000110))
  FREE PACKAGE(VV.YVVZZQR.(VDPS00010858F4F5CB))
  FREE PACKAGE(VV.YVVZZ19.(VDPS00010858F51A6F))
  FREE PACKAGE(VV.YVVZZ27.(VDPS00010858EF71CF))
  FREE PACKAGE(VV.YVVZZ18.(VDPS0000995880B2BF))
  FREE PACKAGE(PC.PC5090.(IVN0000028))
  FREE PACKAGE(YY.YYWBVIN.(WSTS000046589071B4))
  FREE PACKAGE(WB.WB7420.(WSTS000046))
  FREE PACKAGE(VV.YVVZZGR.(VDPS00009958933B61))
  FREE PACKAGE(WB.WB5090.(WSTS000046))
  FREE PACKAGE(WC.WC7500.(OTXO000060))
  FREE PACKAGE(WC.WC5050.(OTXO000060))
  FREE PACKAGE(NL.NL7810.(BALR000067))
  FREE PACKAGE(VV.YVVZZ29.(VDPS0001085900B473))
  FREE PACKAGE(WB.WB5260.(WSTS000051))
  FREE PACKAGE(SN.YSN111I.(SAVS000001590205C6))
  FREE PACKAGE(SN.YSND012.(SAVS00000159020DCD))
  FREE PACKAGE(SN.YSND013.(SAVS00000159020E14))
  FREE PACKAGE(WQ.WQ6010.(CUBE000081))
  FREE PACKAGE(SN.SN5003.(SAVS000001))
  FREE PACKAGE(SN.SN5004.(SAVS000001))
  FREE PACKAGE(SN.SN5006.(SAVS000001))
  FREE PACKAGE(SV.SV5600.(WSSV000188))
  FREE PACKAGE(CZ.CZ5190.(LOMN000029))
  FREE PACKAGE(TN.TN5030.(OTXO000074))
  FREE PACKAGE(AP.YAPUTGK.(APEN000046591DA6B5))
  FREE PACKAGE(SV.SV5750.(WSSV000195))
  FREE PACKAGE(SV.SV5760.(WSSV000195))
  FREE PACKAGE(SV.SV5740.(WSSV000195))
  FREE PACKAGE(MF.MF8620.(MFR0000127))
  FREE PACKAGE(VV.YVVZZ28.(VDPS00011259247724))
  FREE PACKAGE(TN.TN7080.(OTXO000078))
  FREE PACKAGE(VV.YVVZZ16.(VDPS00007356FD77D1))
  FREE PACKAGE(RT.YRTKOMB.(A20Y001346532AA546))
  FREE PACKAGE(WB.WB0510.(WSTS000046))
  FREE PACKAGE(DE.DE0830.(DE00000061))
  FREE PACKAGE(DE.DE0410.(DE00000061))
  FREE PACKAGE(DE.DE0420.(DE00000063))
  FREE PACKAGE(TN.YTN0200.(OTXO000054577CC9B6))
  FREE PACKAGE(TN.YTN0170.(OTXO00005457A1E39F))
  FREE PACKAGE(EC.YECCRAC.(SYNC00002558DA4B2A))
  FREE PACKAGE(WQ.YWQ4501.(CUBE00005657F65A9E))
  FREE PACKAGE(FI.YFI0120.(A06M02733354301880))
  FREE PACKAGE(PC01.YPC0830.(IVN000003058D930ED))
  FREE PACKAGE(PC02.YPC0830.(IVN000003058D930ED))
  FREE PACKAGE(PC03.YPC0830.(IVN000003058D930ED))
  FREE PACKAGE(PC04.YPC0830.(IVN000003058D930ED))
  FREE PACKAGE(PC05.YPC0830.(IVN000003058D930ED))
  FREE PACKAGE(PC06.YPC0830.(IVN000003058D930ED))
  FREE PACKAGE(PC07.YPC0830.(IVN000003058D930ED))
  FREE PACKAGE(WB.WB1110.(WSTS000046))
  FREE PACKAGE(ER.YERDGET.(EAMR000028590F474F))
  FREE PACKAGE(DE.DE0820.(DE00000063))
  FREE PACKAGE(TN.YTN0041.(OTXO000054577A2CD6))
  FREE PACKAGE(WB.WB0920.(WSTS000014))
  FREE PACKAGE(NL.NL7750.(BALR000023))
  FREE PACKAGE(YY.YYWBERR.(A06M02422851AF2E43))
  FREE PACKAGE(WN.YWNOLOG.(FOND00008558D0FF8B))
  FREE PACKAGE(TN.YTN0100.(OTXO00006658D78025))
  FREE PACKAGE(PC01.YPC0520.(IVN000003058D92770))
  FREE PACKAGE(PC02.YPC0520.(IVN000003058D92770))
  FREE PACKAGE(PC03.YPC0520.(IVN000003058D92770))
  FREE PACKAGE(PC04.YPC0520.(IVN000003058D92770))
  FREE PACKAGE(PC05.YPC0520.(IVN000003058D92770))
  FREE PACKAGE(PC06.YPC0520.(IVN000003058D92770))
  FREE PACKAGE(PC07.YPC0520.(IVN000003058D92770))
  FREE PACKAGE(NL.NL7310.(BALR000067))
  FREE PACKAGE(WB.WB0870.(WSTS000046))
  FREE PACKAGE(WB.WB0950.(WS8B000468))
  FREE PACKAGE(WB.WB0520.(WS8B000468))
  FREE PACKAGE(CZ.YCZT435.(BEWI000004560A927D))
  FREE PACKAGE(CZ.YCZM435.(BEWI00001057FE35BE))
  FREE PACKAGE(VV.YVVZZ13.(VDPS00009958887C3E))
  FREE PACKAGE(WB.WB1090.(TOFF000088))
  FREE PACKAGE(WB.YWBMAS.(WS8B00040958C68B0C))
  FREE PACKAGE(WB.YWBWRK.(WS8B00040958C69CFF))
  FREE PACKAGE(WB.WB1080.(TOFF000099))
  FREE PACKAGE(NI.YNILBPL.(IPC0000199591B2776))
  FREE PACKAGE(CD.YCDOGEM.(KUBE000026))
  FREE PACKAGE(WP.YWPL4P1.(DBH00000835872CDB3))
  FREE PACKAGE(WP.YWPL3P1.(DBH00000835872D08A))
  FREE PACKAGE(TN.TN7004.(OTXO000070))
  FREE PACKAGE(SN.SN5902.(SAVS000005))
  FREE PACKAGE(SN.SN5910.(SAVS000005))
  FREE PACKAGE(SN.SN5920.(SAVS000005))
  FREE PACKAGE(VD.VDDBM15.(DSPV000041))
  FREE PACKAGE(VV.YVVZZ05.(VDPS00010858D375E2))
  FREE PACKAGE(VV.YVVZZ3R.(VDPS00009958933BE0))
  FREE PACKAGE(YX.YXA171C.(TOFF00010858D2AB30))
  FREE PACKAGE(NTA1P.CZA0215.(A02E00054455928C16))
  FREE PACKAGE(CD.YCDOGEC.(KUBE000026))
  FREE PACKAGE(WB.WB7400.(WSTS000035))
  FREE PACKAGE(VD.VDDBM01.(DSPV000030))
  FREE PACKAGE(WP.YWPL5P1.(DBH00000835872CDF6))
  FREE PACKAGE(WP.YWPL8P1.(DBH00000835872CECA))
  FREE PACKAGE(VD.VDDBM04.(A14S002541))
  FREE PACKAGE(VD.VDGLH00.(DSPV000040))
  FREE PACKAGE(NZ.NZDBM83.(ZVBI000016))
  FREE PACKAGE(WB.WB8010.(TOFF000088))
  FREE PACKAGE(KR.YKRT385.(VEFO000008560AE85C))
  FREE PACKAGE(KR.YKRT397.(VEFO000008560AE862))
  FREE PACKAGE(WB.WB7381.(A06M025453))
  FREE PACKAGE(WB.WB7380.(A06M025453))
  FREE PACKAGE(WB.WB7340.(WSTS000046))
  FREE PACKAGE(WB.WB7320.(WSTS000046))
  FREE PACKAGE(WB.WB7330.(WSTS000046))
  FREE PACKAGE(NTA1P.CZA0213.(A02E00056858886BDA))
  FREE PACKAGE(WB.YWBEBSM.(WSTS000055595220FAMVS))
  FREE PACKAGE(WB.WB0680.(WSTS000055))
  FREE PACKAGE(WB.WB0630.(WSTS000055))
  FREE PACKAGE(HP1.ZDIYURI.(HPSVP2ZDIYURI))
  FREE PACKAGE(HP3.ZDIYURI.(HPSVP2ZDIYURI))
  FREE PACKAGE(SV.SV5640.(WSSV000196))
  FREE PACKAGE(TN.YTNUPD.(OTXO00007059791B5C))
  FREE PACKAGE(SV.SV5760.(WSSV000196))
  FREE PACKAGE(SN.SN5000.(SAVS000005))
  FREE PACKAGE(SV.SV5640.(WSSV000239))
  FREE PACKAGE(WB.WB0970.(WSTS000055))
  FREE PACKAGE(FC.FC0050.(KLOM000062))
  FREE PACKAGE(WB.WB5340.(TOFF000109))
  FREE PACKAGE(RT.YRT075M.(RFT000001556F2A505))
  FREE PACKAGE(WC.WC5010.(OTXO000070))
  FREE PACKAGE(WC.WC8401.(OTXO000070))
  FREE PACKAGE(WB.WB5570.(WS8B000444))
  FREE PACKAGE(WB.WB1290.(TOFF000109))
  FREE PACKAGE(WB.WB1100.(TOFF000109))
  FREE PACKAGE(WB.WB1130.(WSTS000055))
  FREE PACKAGE(WB.WB0840.(WSTS000055))
  FREE PACKAGE(WB.WB0680.(WS8B000479))
  FREE PACKAGE(WB.WB0630.(WS8B000479))
  FREE PACKAGE(WB.YWB530.(WS8B000443))
  FREE PACKAGE(WB.YWB5427.(WSTS000055594BF219MVS))
  FREE PACKAGE(HP1.AAAERK.(HPSVP2AAAERK))
  FREE PACKAGE(HP3.AAAERK.(HPSVP2AAAERK))
  FREE PACKAGE(HP1.AN97RI.(HPSVP2AN97RI))
  FREE PACKAGE(HP3.AN97RI.(HPSVP2AN97RI))
  FREE PACKAGE(WB.YWB5425.(WSTS000055594BF204MVS))
  FREE PACKAGE(WB.YWBSA4.(WS8B0004425958EE28MVS))
  FREE PACKAGE(WB.YWB0083.(WSTS000055596E3C20MVS))
  FREE PACKAGE(HPS.ADWVQZ.(HPSVP2ADWVQZ))
  FREE PACKAGE(HP1.ADWVQZ.(HPSVP2ADWVQZ))
  FREE PACKAGE(HP3.ADWVQZ.(HPSVP2ADWVQZ))
  FREE PACKAGE(DP.DP0320.(DP00000067))
  FREE PACKAGE(HP1.RWBR032.(HPSVP1RWBR032))
  FREE PACKAGE(HP3.RWBR032.(HPSVP1RWBR032))
  FREE PACKAGE(SN.SN5903.(SAVS000005))
  FREE PACKAGE(WQ.WQ6000.(CUBE000092))
  FREE PACKAGE(HP1.ABZJLS.(HPSVP2ABZJLS))
  FREE PACKAGE(HP1.ACEQL4.(HPSVP2ACEQL4))
  FREE PACKAGE(HP3.ACEQL4.(HPSVP2ACEQL4))
  FREE PACKAGE(HP3.ABZJLS.(HPSVP2ABZJLS))
  FREE PACKAGE(WB.WB5570.(WS8I000307))
  FREE PACKAGE(WQ.YWQ4502.(CUBE000092595E40BC))
  FREE PACKAGE(WB.WB0840.(WS8I000307))
  FREE PACKAGE(WB.WB1130.(WS8I000307))
  FREE PACKAGE(WB.WB1100.(WS8I000307))
  FREE PACKAGE(WB.WB1290.(WS8I000307))
  FREE PACKAGE(WB.WB5340.(WS8I000307))
  FREE PACKAGE(WB.WB0630.(WS8I000307))
  FREE PACKAGE(WB.WB0680.(WS8I000307))
  FREE PACKAGE(WB.YWB530.(WS8I000307))
  FREE PACKAGE(WC.WC8170.(OTXO000070))
  FREE PACKAGE(WB.WB5120.(WSTS000055))
  FREE PACKAGE(WB.WB7020.(WSTS000055))
  FREE PACKAGE(IT.IT5001.(RFT0000015))
  FREE PACKAGE(WB.YWB0083.(WS8B00049859A7FB84MVS))
  FREE PACKAGE(SV.SV5770.(WSSV000196))
  FREE PACKAGE(RT.RT5210.(RFT0000015))
  FREE PACKAGE(RT.RT5020.(TABS000121))
  FREE PACKAGE(RT.RT5060.(TABS000121))
  FREE PACKAGE(RT.RT5170.(TABS000121))
  FREE PACKAGE(RT.RT5160.(TABS000121))
  FREE PACKAGE(RT.RT5090.(TABS000121))
  FREE PACKAGE(SN.YSNB002.(SAVS0000055965F526))
  FREE PACKAGE(SN.YSND010.(SAVS0000055978AA6A))
  FREE PACKAGE(AP.YAPUTGK.(APEN000042594BAB6AMVS))
  FREE PACKAGE(SN.SN5000.(SAVS000014))
  FREE PACKAGE(SV.SV5740.(WSSV000196))
  FREE PACKAGE(YY.YYWBERX.(TOFF0001095953C073MVS))
  FREE PACKAGE(WB.WB0630.(WS8B000493))
  FREE PACKAGE(WB.WB1290.(WS8B000493))
  FREE PACKAGE(WB.WB0840.(WS8B000493))
  FREE PACKAGE(WB.WB0680.(WS8B000493))
  FREE PACKAGE(WB.WB1130.(WS8B000493))
  FREE PACKAGE(WB.WB1100.(WS8B000493))
  FREE PACKAGE(WB.WB5570.(WS8B000493))
  FREE PACKAGE(WB.YWB530.(WS8B000493))
  FREE PACKAGE(WB.WB5340.(WS8B000493))
  FREE PACKAGE(RT.YRT0006.(RFT000001556F2A499))
  FREE PACKAGE(WF.WF0300.(WSSW000089))
  FREE PACKAGE(SV.SV5750.(WSSV000196))
  FREE PACKAGE(GM.GM0850.(GM00000145))
  FREE PACKAGE(RT.YRT0007.(RFT000000956A4A858))
  FREE PACKAGE(YX.YXA171C.(TOFF0001095966040A))
  FREE PACKAGE(RT.RT5100.(TABS000121))
  FREE PACKAGE(WC.WC5050.(OTXO000070))
  FREE PACKAGE(WC.WC7220.(OTXO000070))
  FREE PACKAGE(WC.WC7240.(OTXO000070))
  FREE PACKAGE(WC.WC7260.(OTXO000070))
  FREE PACKAGE(WC.WC7530.(OTXO000070))
  FREE PACKAGE(WC.WC7310.(OTXO000070))
  FREE PACKAGE(WC.WC7320.(OTXO000070))
  FREE PACKAGE(WC.WC7500.(OTXO000070))
  FREE PACKAGE(SN.SN5004.(SAVS000005))
  FREE PACKAGE(SN.SN5005.(SAVS000005))
  FREE PACKAGE(SN.SN5901.(SAVS000005))
  FREE PACKAGE(SN.SN5006.(SAVS000005))
  FREE PACKAGE(SN.YSND013.(SAVS0000055978AA76))
  FREE PACKAGE(SN.YSND012.(SAVS000005597A035F))
  FREE PACKAGE(SN.SN5100.(SAVS000005))
  FREE PACKAGE(WF.YWF64CA.(WSSW000089594F9457))
  FREE PACKAGE(WC.WC8410.(OTXO000070))
  FREE PACKAGE(WC.WC8401.(WS8I000307))
  FREE PACKAGE(WC.WC5010.(WS8I000307))
  FREE PACKAGE(MF.MF8620.(MFR0000124))
  FREE PACKAGE(WF.WF0280.(WSSW000089))
  FREE PACKAGE(SV.SV5760.(WSSV000240))
  FREE PACKAGE(IT.YIT0022.(A20Y001569547AFE2B))
  FREE PACKAGE(IT.IT0010.(TABS000131))
  FREE PACKAGE(RT.YRT0008.(RFT000000956A4A893))
  FREE PACKAGE(RT.RT0100.(RFT0000012))
  FREE PACKAGE(RT.RT0200.(TABS000130))
  FREE PACKAGE(BP.YBPMUT.(BPST000079594A969EMVS))
  FREE PACKAGE(AT.AT0099.(ACS00000115891FA54))
  FREE PACKAGE(AT.AT0099.(ACS0000015595529B8))
  FREE PACKAGE(SN.YSNI003.(SAVS0000055960D01A))
  FREE PACKAGE(WQ.WQ5950.(CUBE000092))
  FREE PACKAGE(IT.IT8481.(TABS000160))
  FREE PACKAGE(WF.YWFSWC.(WSSW000089))
  FREE PACKAGE(WF.WF5410.(WSSW000089))
  FREE PACKAGE(SN.YSNA005.(SAVS000005597F4F58))
  FREE PACKAGE(SN.SN0200.(SAVS000005))
  FREE PACKAGE(TN.YTNUPD.(OTXO00008259906C81))
  FREE PACKAGE(RT.RT5910.(TABS000145))
  FREE PACKAGE(TN.TN7080.(OTXO000070))
  FREE PACKAGE(WB.WB7520.(WSTS000055))
  FREE PACKAGE(WQ.WQ5950.(CUBE000112))
  FREE PACKAGE(SN.SN5902.(SAVS000013))
  FREE PACKAGE(SN.SN5920.(SAVS000013))
  FREE PACKAGE(WB.WB7440.(WSTS000055))
  FREE PACKAGE(IT.IT5503.(RFT0000015))
  FREE PACKAGE(RT.RT8401.(A20Y001508))
  FREE PACKAGE(WF.YWFSWC.(WSSW000086))
  FREE PACKAGE(HP1.RWBK029.(HPSVP2RWBK029))
  FREE PACKAGE(HP3.RWBK029.(HPSVP2RWBK029))
  FREE PACKAGE(SN.SN5000.(SAVS000013))
  FREE PACKAGE(DI.YDIU015.(DI0000006459535F3EMVS))
  FREE PACKAGE(DI.YDIU016.(DI0000006459535FDDMVS))
  FREE PACKAGE(DP.DP0320.(DP00000072))
  FREE PACKAGE(CZ.CZ5991.(GSER000200))
  FREE PACKAGE(SN.SN5910.(SAVS000013))
  FREE PACKAGE(SN.SN5902.(SAVS000016))
  FREE PACKAGE(SN.SN5920.(SAVS000016))
  FREE PACKAGE(WP.YWPL9P1.(DBH00000965935C01FMVS))
  FREE PACKAGE(HP1.RWBR009.(HPSVP2RWBR009))
  FREE PACKAGE(HP3.RWBR009.(HPSVP2RWBR009))
  FREE PACKAGE(HP1.AO2QRK.(HPSVP2AO2QRK))
  FREE PACKAGE(HP3.AO2QRK.(HPSVP2AO2QRK))
  FREE PACKAGE(RT.YRT0002.(TABS000163599ACDD3))
  FREE PACKAGE(VV.YVVZZ09.(VDPS00011459426A6CMVS))
  FREE PACKAGE(WB.YWB5419.(WSTS000055594BF2C6MVS))
  FREE PACKAGE(WB.WB0910.(WSTS000055))
  FREE PACKAGE(DE.DE5130.(DE00000066))
  FREE PACKAGE(SV.SV5770.(WSSV000199))
  FREE PACKAGE(WF.WF0350.(WSSW000089))
  FREE PACKAGE(WF.WF0310.(WSSW000089))
  FREE PACKAGE(WF.WF0320.(WSSW000089))
  FREE PACKAGE(HP1.ACA0RK.(HPSVP2ACA0RK))
  FREE PACKAGE(HP3.ACA0RK.(HPSVP2ACA0RK))
  FREE PACKAGE(WF.WF0280.(WSSW000086))
  FREE PACKAGE(WF.WF0300.(WSSW000086))
  FREE PACKAGE(WQ.YWQBERI.(CUBE000092595E3A2E))
  FREE PACKAGE(WF.WF5410.(WSSW000086))
  FREE PACKAGE(WF.YWF64CA.(WSSW00008659B00DFB))
  FREE PACKAGE(WF.YWFSWC.(WSSW000104))
  FREE PACKAGE(WF.YWFCB02.(WSSW000089594FBA69MVS))
  FREE PACKAGE(WF.YWFM537.(WSSW000089594FB758MVS))
  FREE PACKAGE(SN.SN5001.(SAVS000013))
  FREE PACKAGE(DP.DP0320.(DP00000076))
  FREE PACKAGE(OE.YOE2BP1.(A12M0057985263A8B2))
  FREE PACKAGE(WB.YWBSA4.(WS8B00047659B12272MVS))
  FREE PACKAGE(NL.NL7590.(BALR000073))
  FREE PACKAGE(WQ.WQ6000.(CUBE000114))
  FREE PACKAGE(BP.YBPMUT.(BPST0000805926ACAC))
  FREE PACKAGE(TN.YTN0160.(OTXO0000705965FE8DMVS))
  FREE PACKAGE(WP.YWPR4PX.(DBH00000965935AA4BMVS))
  FREE PACKAGE(MF.MF8940.(MFR0000110))
  FREE PACKAGE(MF.MF8930.(MFR0000124))
  FREE PACKAGE(WP.YWPR5PX.(DBH00000965935AB22MVS))
  FREE PACKAGE(RT.YRT0006.(TABS000163599ACE06))
  FREE PACKAGE(RB.YRBUXY1.(RBK0000001594291B9))
  FREE PACKAGE(VV.YVVZZ08.(VDPS000114594269CDMVS))
  FREE PACKAGE(RT.YRT0007.(TABS000163599ACE23))
  FREE PACKAGE(RT.RT0200.(TABS000163))
  FREE PACKAGE(CZ.CZ5494.(ACP0000114))
  FREE PACKAGE(TN.TN7004.(OTXO000082))
  FREE PACKAGE(WC.WC8170.(OTXO000085))
  FREE PACKAGE(TN.TN5015.(OTXO000070))
  FREE PACKAGE(TN.YTN5012.(OTXO000070594BD57CMVS))
  FREE PACKAGE(TN.YTN5013.(OTXO000070594BD582MVS))
  FREE PACKAGE(WB.WB7020.(WSTS000058))
  FREE PACKAGE(RT.RT5910.(TABS000163))
  FREE PACKAGE(MF.MF8810.(MFR0000132))
  FREE PACKAGE(IT.IT5002.(RFT0000015))
  FREE PACKAGE(CZ.CZ8020.(APEN000042))
  FREE PACKAGE(CZ.CZ8010.(APEN000042))
  FREE PACKAGE(BP.BP9060.(BPST000045))
  FREE PACKAGE(WQ.YWQ5601.(CUBE000092595E40C8))
  FREE PACKAGE(WB.WB0060.(TOFF000109))
  FREE PACKAGE(ER.ER8020.(EAMR000035))
  FREE PACKAGE(SV.SV5750.(WSSV000199))
  FREE PACKAGE(WB.YWB0082.(WSTS00005559660E59MVS))
  FREE PACKAGE(CD.CD8130.(CIFS000202))
  FREE PACKAGE(WP.YWPL1W1.(A06M024666527F73FE))
  FREE PACKAGE(MF.MF7010.(MFR0000124))
  FREE PACKAGE(WB.YWBCTA.(WS8B0004425959F984))
  FREE PACKAGE(TN.TN0530.(OTXO000070))
  FREE PACKAGE(SV.SV0280.(WSSV000196))
  FREE PACKAGE(TN.YTN0041.(OTXO0000705965FE73))
  FREE PACKAGE(IT.IT5010.(RFT0000015))
  FREE PACKAGE(IT.IT5003.(RFT0000015))
  FREE PACKAGE(IT.YITD00.(A20Y001509542023A5))
  FREE PACKAGE(DE.DE5600.(DE00000066))
  FREE PACKAGE(CZ.CZ6300.(KLOM000062))
  FREE PACKAGE(TN.YTN0170.(OTXO0000705965FE9DMVS))
  FREE PACKAGE(DE.DE0830.(DE00000066))
  FREE PACKAGE(WB.YWBSA2.(WS8B00044259752FC0MVS))
  FREE PACKAGE(VV.YVVZZ30.(VDPS00011459426994MVS))
  FREE PACKAGE(PC01.PC5060.(IVN0000032))
  FREE PACKAGE(PC02.PC5060.(IVN0000032))
  FREE PACKAGE(PC03.PC5060.(IVN0000032))
  FREE PACKAGE(PC04.PC5060.(IVN0000032))
  FREE PACKAGE(PC05.PC5060.(IVN0000032))
  FREE PACKAGE(PC06.PC5060.(IVN0000032))
  FREE PACKAGE(PC07.PC5060.(IVN0000032))
  FREE PACKAGE(DE.DE7120.(DE00000066))
  FREE PACKAGE(TN.TN5014.(OTXO000070))
  FREE PACKAGE(TN.TN5004.(OTXO000070))
  FREE PACKAGE(TN.TN5016.(OTXO000070))
  FREE PACKAGE(VV.YVVZZ19.(VDPS00011459600648MVS))
  FREE PACKAGE(VV.YVVZZ16.(VDPS00011459426A5DMVS))
  FREE PACKAGE(SV.SV5640.(WSSV000240))
  FREE PACKAGE(SV.SV5740.(WSSV000199))
  FREE PACKAGE(SV.SV5760.(WSSV000199))
  FREE PACKAGE(LC.LC0511I.(TFBM000030595A0ED9))
  FREE PACKAGE(MF.YMFC110.(MFR000012559785D3C))
  FREE PACKAGE(EQ.YEQKDGP.(GSER0001775933E982))
  FREE PACKAGE(WP.YWPL4P1.(DBH00000965935BE8EMVS))
  FREE PACKAGE(WP.YWPRBPX.(DBH00000965935A7D3MVS))
  FREE PACKAGE(WP.YWPL3P1.(DBH00000965935B6F3MVS))
  FREE PACKAGE(VV.YVVZZ22.(VDPS0001145947F743MVS))
  FREE PACKAGE(WQ.YWQBERI.(CUBE00011159ECC4D5))
  FREE PACKAGE(WC.WC5010.(OTXO000090))
  FREE PACKAGE(WB.WB0970.(WSTS000059))
  FREE PACKAGE(WB.WB1130.(WSTS000058))
  FREE PACKAGE(WB.YWB0083.(WSTS00005859AFBB9DMVS))
  FREE PACKAGE(WF.YWFM537.(WSSW00009959C24789MVS))
  FREE PACKAGE(WF.YWFCB02.(WSSW00009959C3F210MVS))
  FREE PACKAGE(LC.YLCTF02.(TFBM00002658E22FB0))
  FREE PACKAGE(LC.YLCTF03.(TFBM00002658C94AB4))
  FREE PACKAGE(WP.YWPR3PX.(DBH00000965935AA2CMVS))
  FREE PACKAGE(DE.DE0100.(DE00000066))
  FREE PACKAGE(WB.YWBIO.(WS8B0004425958E985MVS))
  FREE PACKAGE(VD.YVDDFA.(DSPV00002357029E3F))
  FREE PACKAGE(WN.YWNOLOG.(FOND000087595D1286MVS))
  FREE PACKAGE(TN.YTN0101.(OTXO00007059747939))
  FREE PACKAGE(WB.WB0980.(TOFF000109))
  FREE PACKAGE(WB.WB0530.(WSTS000055))
  FREE PACKAGE(TN.YTNW100.(OTXO00007059525387MVS))
  FREE PACKAGE(TN.YTNW170.(OTXO000070594BD553MVS))
  FREE PACKAGE(VD.VDDBM01.(DSPV000042))
  FREE PACKAGE(VD.VDGLH00.(DSPV000042))
  FREE PACKAGE(WB.WB0680.(WSTS000058))
  FREE PACKAGE(WB.WB0940.(WSTS000055))
  FREE PACKAGE(VD.VDINI01.(DSPV000042))
  FREE PACKAGE(WB.YWBEBSM.(WS8B000479598D6B36))
  FREE PACKAGE(WB.WB0630.(WSTS000058))
  FREE PACKAGE(TN.YTNBOPH.(OTXO0000705959FCD2MVS))
  FREE PACKAGE(DE.DE0420.(DE00000066))
  FREE PACKAGE(DE.DE0410.(DE00000066))
  FREE PACKAGE(DE.DE0400.(DE00000066))
  FREE PACKAGE(CD.CD2590.(UPDS000044))
  FREE PACKAGE(CZ.YCZM025.(LOFT000019560AE739))
  FREE PACKAGE(EC.YECUCRK.(SYNC00001156FD2111))
  FREE PACKAGE(WP.YWPL2P1.(DBH00000835872CD6B))
  FREE PACKAGE(CZ.YCZMLIM.(KLOM00006458F49F2E))
  FREE PACKAGE(WB.YWBBODA.(WS8B0004425958DDB0MVS))
  FREE PACKAGE(VV.YVVZZ13.(VDPS0001145958CE5FMVS))
  FREE PACKAGE(WB.YWBITV.(TOFF0001095953C015MVS))
  FREE PACKAGE(CZ.CZ6400.(GSER000177))
  FREE PACKAGE(NTA1P.CZA0215.(A02E000575595D269F))
  FREE PACKAGE(CZ.CZ5280.(KLOM000062))
  FREE PACKAGE(CZ.CZ5150.(KLOM000062))
  FREE PACKAGE(EC.EC5130.(KLOM000062))
  FREE PACKAGE(RI.RI0810.(RI00000021))
  FREE PACKAGE(TN.YTN0021.(OTXO0000705965FE66))
  FREE PACKAGE(CZ.CZ6500.(GSER000177))
  FREE PACKAGE(DE.DE0860.(DE00000066))
  FREE PACKAGE(DE.DE0810.(DE00000066))
  FREE PACKAGE(DE.DE0820.(DE00000066))
  FREE PACKAGE(DE.DE0940.(DE00000066))
  FREE PACKAGE(WB.WB8010.(TOFF000109))
  FREE PACKAGE(AT.AT0099.(ACS0000017597A0EC1))
  FREE PACKAGE(WP.YWPU1P5.(DBH000009659306727MVS))
  FREE PACKAGE(WP.YWPRAPX.(DBH00000965933E137MVS))
  FREE PACKAGE(WP.YWPL5P1.(DBH00000965935BEC1MVS))
  FREE PACKAGE(WP.YWPL8P1.(DBH00000965935BF94MVS))
  FREE PACKAGE(WP.YWPRDPX.(DBH00000965935A9DDMVS))
  FREE PACKAGE(WP.YWPRCPX.(DBH00000965935A7F9MVS))
  FREE PACKAGE(VV.YVVZZ11.(VDPS00011459426A05MVS))
  FREE PACKAGE(VV.YVVZZ12.(VDPS00011459426A35MVS))
  FREE PACKAGE(VV.YVVZZ04.(VDPS0001145949721BMVS))
  FREE PACKAGE(GM.YGMSTEU.(GM000001455946A9BF))
  FREE PACKAGE(PC01.YPC0520.(IVN00000325950CA4A))
  FREE PACKAGE(PC02.YPC0520.(IVN00000325950CA4A))
  FREE PACKAGE(PC03.YPC0520.(IVN00000325950CA4A))
  FREE PACKAGE(PC04.YPC0520.(IVN00000325950CA4A))
  FREE PACKAGE(PC05.YPC0520.(IVN00000325950CA4A))
  FREE PACKAGE(PC06.YPC0520.(IVN00000325950CA4A))
  FREE PACKAGE(PC07.YPC0520.(IVN00000325950CA4A))
  FREE PACKAGE(VV.YVVZZ10.(VDPS00011459525BC8MVS))
  FREE PACKAGE(TN.YTNUPD.(OTXO000085599AC00E))
  FREE PACKAGE(VV.YVVZZ07.(VDPS00013759A46E34MVS))
  FREE PACKAGE(SN.YSNA005.(SAVS00001359A589EE))
  FREE PACKAGE(SN.SN0200.(SAVS000013))
  FREE PACKAGE(YX.YXA171C.(TOFF00011759A53A43))
  FREE PACKAGE(GM.GM0850.(GM00000150))
  FREE PACKAGE(WQ.WQ5950.(CUBE000114))
  FREE PACKAGE(TN.YTNSICH.(OTXO000070594BD52D))
  FREE PACKAGE(DE.DE0050.(DE00000066))
  FREE PACKAGE(DE.DE0440.(DE00000066))
  FREE PACKAGE(AT.AT7110.(A20Y001564))
  FREE PACKAGE(MF.MF7550.(MFR0000124))
  FREE PACKAGE(MF.MF7901.(MFR0000124))
  FREE PACKAGE(NTA1P.CZA0255.(A02E00057158A18784))
  FREE PACKAGE(NTA1P.CZA0213.(A02E000575595D2527))
  FREE PACKAGE(VV.YVVZZ24.(VDPS00011459426A82MVS))
  FREE PACKAGE(ER.YERPRI.(EAMR000035))
  FREE PACKAGE(ER.YERDCUR.(EAMR00003559186E33MVS))
  FREE PACKAGE(ER.YERDGET.(EAMR00003559186E6CMVS))
  FREE PACKAGE(WB.WB0820.(WSTS000055))
  FREE PACKAGE(BX.YBXADBR.(CLOS0001705952328DMVS))
  FREE PACKAGE(SV.YSVVORM.(WSSV000199))
  FREE PACKAGE(WB.WB0840.(WSTS000058))
  FREE PACKAGE(FI.YFI0120.(BKUR0000805946509A))
  FREE PACKAGE(FI.YFI0110.(BKUR0000805946506C))
  FREE PACKAGE(DE.DE0060.(DE00000066))
  FREE PACKAGE(DE.DE0430.(DE00000066))
  FREE PACKAGE(DE.YDE0021.(DE000000665965EE7CMVS))
  FREE PACKAGE(DE.DE0090.(DE00000066))
  FREE PACKAGE(DE.DE0030.(DE00000066))
  FREE PACKAGE(SV.SV5940.(WSSV000196))
  FREE PACKAGE(WQ.YWQ4501.(CUBE000092595E40B8))
  FREE PACKAGE(SV.SV5790.(WSSV000196))
  FREE PACKAGE(VD.VDDBM15.(DSPV000042))
  FREE PACKAGE(CD.YCDUPH0.(UPDS000044))
  FREE PACKAGE(WB.YWBSUM.(WS8B0004425958F075MVS))
  FREE PACKAGE(SV.SV0950.(WSSV000196))
  FREE PACKAGE(TN.YTN0201.(OTXO0000705974793F))
  FREE PACKAGE(EC.YECCRAC.(SYNC000028595120A9))
  FREE PACKAGE(WB.WB5340.(TOFF000117))
  FREE PACKAGE(WB.YWB530.(WS8B000476))
  FREE PACKAGE(SN.SN5000.(SAVS000016))
  FREE PACKAGE(BP.BP5030.(BPST000037))
  FREE PACKAGE(BP.BP5060.(BPST000037))
  FREE PACKAGE(NL.YNLG010.(A12P00279953023EDA))
  FREE PACKAGE(AT.AT8500.(ACS0000013))
  FREE PACKAGE(PC.PC8000.(IVN0000032))
  FREE PACKAGE(CZ.CZ8980.(KLOM000062))
  FREE PACKAGE(VV.YVVZZ20.(VDPS000114595E2936MVS))
  FREE PACKAGE(UU.UU5170.(RS20000077))
  FREE PACKAGE(WQ.WQ6010.(CUBE000092))
  FREE PACKAGE(MF.MF7230.(MFR0000124))
  FREE PACKAGE(TN.TN5030.(OTXO000070))
  FREE PACKAGE(WC.WC7280.(OTXO000070))
  FREE PACKAGE(WC.WC8120.(OTXO000070))
  FREE PACKAGE(ED.ED0950.(ED00000056))
  FREE PACKAGE(WB.WB1090.(TOFF000109))
  FREE PACKAGE(WB.WB1080.(TOFF000109))
  FREE PACKAGE(WI.YWI0087.(TOFF000109596F6A5DMVS))
  FREE PACKAGE(ER.ER5080.(EAMR000035))
  FREE PACKAGE(VV.YVVZZ28.(VDPS00011459763336MVS))
  FREE PACKAGE(CZ.CZ5190.(LOMN000030))
  FREE PACKAGE(ER.YERBER.(EAMR000035))
  FREE PACKAGE(ER.YERDUPD.(EAMR000028590F467B))
  FREE PACKAGE(VV.YVVZZ23.(VDPS00011459426A7FMVS))
  FREE PACKAGE(VV.YVVZZ17.(VDPS0001145947F5E0MVS))
  FREE PACKAGE(VV.YVVZZ14.(VDPS0001145947F5C7MVS))
  FREE PACKAGE(VV.YVVZZ18.(VDPS0001145947F613MVS))
  FREE PACKAGE(VV.YVVZZ29.(VDPS0001145947F759MVS))
  FREE PACKAGE(VV.YVVZZ27.(VDPS0001145946AEC8MVS))
  FREE PACKAGE(NI.YNIPACU.(IPC0000196594FE57D))
  FREE PACKAGE(NI01.YNIPACU.(IPC0000196594FE57D))
  FREE PACKAGE(NI02.YNIPACU.(IPC0000196594FE57D))
  FREE PACKAGE(NI.YNIPREU.(IPC000019659870E1AMVS))
  FREE PACKAGE(AP.YAPUTGK.(APEN000048599D816AMVS))
  FREE PACKAGE(YY.YYWBERX.(TOFF000117599AA4C0MVS))
  FREE PACKAGE(WL.WL8600.(WSAW000106))
  FREE PACKAGE(MF.MF8620.(MFR0000132))
  FREE PACKAGE(SN.SN5100.(SAVS000013))
  FREE PACKAGE(MF.MF8800.(MFR0000132))
  FREE PACKAGE(WB.WB5570.(WS8B000476))
  FREE PACKAGE(TN.TN7080.(OTXO000085))
  FREE PACKAGE(WC.WC5010.(OTXO000085))
  FREE PACKAGE(WC.WC5050.(OTXO000085))
  FREE PACKAGE(WC.WC8410.(OTXO000085))
  FREE PACKAGE(WC.WC8401.(OTXO000085))
  FREE PACKAGE(WB.WB1290.(TOFF000117))
  FREE PACKAGE(WB.WB1100.(TOFF000117))
  FREE PACKAGE(TN.YTN0100.(OTXO000070596B8607MVS))
  FREE PACKAGE(NL.YNLG121.(A12P0028275309D6A8))
  FREE PACKAGE(NL.YNLG140.(A12P0027995306112C))
  FREE PACKAGE(NL.YNLG03M.(A12P002799530610F5))
  FREE PACKAGE(NL.YNLG040.(A12P00279953061102))
  FREE PACKAGE(NL.YNLG120.(A12P0027995306110F))
  FREE PACKAGE(NL.YNLG130.(BALR00000154735D32))
  FREE PACKAGE(AT.AT0620.(A20Y001564))
  FREE PACKAGE(NL.YNLG020.(BALR00001254E5FBC3))
  FREE PACKAGE(NL.YNLG021.(BALR00001254E5FBC9))
  FREE PACKAGE(NL.NL5000.(BALR000012))
  FREE PACKAGE(WB.YWBMAS.(WS8B0004425958EA9AMVS))
  FREE PACKAGE(WB.YWBWRK.(WS8B0004425959FAC1))
  FREE PACKAGE(MF.YMFC113.(MFR0000111590212EB))
  FREE PACKAGE(NL.NL7310.(BALR000073))
  FREE PACKAGE(WP.YWPR1QX.(DBH00000965935ABFFMVS))
  FREE PACKAGE(WP.YWPR7PX.(DBH00000965935ABE2MVS))
  FREE PACKAGE(NL.NL7810.(BALR000073))
  FREE PACKAGE(NL.NL7750.(BALR000073))
  FREE PACKAGE(VV.YVVZZ15.(VDPS00011459426A38MVS))
  FREE PACKAGE(VV.YVVZZ05.(VDPS0001145947F5B1MVS))
  FREE PACKAGE(WC.WC5010.(OTXO000081))
  FREE PACKAGE(WC.WC8401.(OTXO000081))
  FREE PACKAGE(DE.DE0820.(DE00000070))
  FREE PACKAGE(WB.WB1130.(WSTS000057))
  FREE PACKAGE(WB.WB1290.(TOFF000112))
  FREE PACKAGE(WB.WB0840.(WSTS000057))
  FREE PACKAGE(TN.YTN0202.(OTXO00008159FDDDF0MVS))
  FREE PACKAGE(WB.WB1100.(TOFF000112))
  FREE PACKAGE(WB.WB0680.(WSTS000057))
  FREE PACKAGE(WB.WB0630.(WSTS000057))
  FREE PACKAGE(DE.DE0820.(DE00000075))
  FREE PACKAGE(WB.WB5340.(TOFF000112))
  FREE PACKAGE(WC.WC5010.(WS8B000535))
  FREE PACKAGE(WC.WC8410.(OTXO000081))
  FREE PACKAGE(TN.TN7004.(OTXO000081))
  FREE PACKAGE(TN.YTNUPD.(OTXO00008159C7784F))
  FREE PACKAGE(TN.YTNW100.(OTXO00008159E36F73MVS))
  FREE PACKAGE(WQ.YWQ4502.(CUBE00009459EF685F))
  FREE PACKAGE(WB.WB0840.(WS8B000540))
  FREE PACKAGE(WB.WB0970.(WSTS000057))
  FREE PACKAGE(WB.WB1100.(WS8B000540))
  FREE PACKAGE(WB.WB5340.(WS8B000540))
  FREE PACKAGE(WB.WB1290.(WS8B000540))
  FREE PACKAGE(YY.YYWBERX.(TOFF00011259C7788CMVS))
  FREE PACKAGE(YY.YYDB2FK.(TOFF0001095953C05BMVS))
  FREE PACKAGE(WB.WB0990.(TOFF000109))
  FREE PACKAGE(WB.WB1090.(TOFF000112))
  FREE PACKAGE(WB.WB1080.(TOFF000112))
  FREE PACKAGE(WB.WB0980.(TOFF000112))
  FREE PACKAGE(WB.WB0820.(WSTS000057))
  FREE PACKAGE(WB.WB7650.(TOFF000109))
  FREE PACKAGE(WB.WB0840.(WSTS000063))
  FREE PACKAGE(CZ.CZ8980.(KLOM000067))
  FREE PACKAGE(HPS.ZDEWERI.(HPSVP2ZDEWERI))
  FREE PACKAGE(HP1.ZDEWERI.(HPSVP2ZDEWERI))
  FREE PACKAGE(WB.YWB5403.(WSTS000055594BF33EMVS))
  FREE PACKAGE(WB.YWB5402.(WSTS000055594BF347MVS))
  FREE PACKAGE(WQ.WQ6000.(CUBE000094))
  FREE PACKAGE(VV.YVVZZ08.(VDPS00011759EDC6B6MVS))
  FREE PACKAGE(RB.YRBUXY1.(RBK000000659E48F65MVS))
  FREE PACKAGE(WP.YWPLEP1.(DBH00000835872CCA2))
  FREE PACKAGE(WB.WB0910.(WSTS000057))
  FREE PACKAGE(HB.YHBK011.(ASIA00007957F22639))
  FREE PACKAGE(SN.SN5001.(SAVS000015))
  FREE PACKAGE(ER.YERPRI.(EAMR000048))
  FREE PACKAGE(WB.YWB0083.(WSTS00005759C7789EMVS))
  FREE PACKAGE(WB.WB1130.(WS8B000540))
  FREE PACKAGE(WC.WC8401.(WS8B000535))
  FREE PACKAGE(WB.WB5340.(TOFF000119))
  FREE PACKAGE(WB.WB0840.(WSTS000064))
  FREE PACKAGE(BP.YBPMUT.(BPST000087599ECB6FMVS))
  FREE PACKAGE(SV.SV0950.(WSSV000200))
  FREE PACKAGE(WB.WB7650.(TOFF000119))
  FREE PACKAGE(ER.YERBER.(EAMR000048))
  FREE PACKAGE(ER.ER8020.(EAMR000048))
  FREE PACKAGE(WC.WC8410.(WS8B000540))
  FREE PACKAGE(WC.WC5010.(WS8B000540))
  FREE PACKAGE(BP.YBPMUT.(BPST00008859CA1D14MVS))
  FREE PACKAGE(RI.RI0810.(RI00000024))
  FREE PACKAGE(WB.WB0630.(WS8B000540))
  FREE PACKAGE(WB.WB0680.(WS8B000540))
  FREE PACKAGE(BP.YBPMUT.(BPST00008859CA1D14))
  FREE PACKAGE(WQ.WQ5950.(CUBE000094))
  FREE PACKAGE(VV.YVVZZ25.(VDPS0001145947F674MVS))
  FREE PACKAGE(WB.WB5270.(WSTS000055))
  FREE PACKAGE(WB.WB5290.(WSTS000055))
  FREE PACKAGE(KX.YKXO002.(TLBO00002358D13DB6MVS))
  FREE PACKAGE(WB.WB0060.(TOFF000112))
  FREE PACKAGE(DE.DE5130.(DE00000070))
  FREE PACKAGE(WB.WB7230.(TOFF000109))
  FREE PACKAGE(ER.ER8020.(EAMR000053))
  FREE PACKAGE(VV.YVV3EIP.(VDPS0001565A0883F9MVS))
  FREE PACKAGE(WP.YWPR6PX.(DBH00000965935AB34MVS))
  FREE PACKAGE(VV.YVVZZ09.(VDPS00011759D118C6MVS))
  FREE PACKAGE(BP.BP7161.(BPST000055))
  FREE PACKAGE(BP.YBPACF2.(A12M0061025318300D))
  FREE PACKAGE(WQ.WQ6000.(CUBE000116))
  FREE PACKAGE(NL.NL7590.(BALR000074))
  FREE PACKAGE(WC.WC8170.(OTXO000081))
  FREE PACKAGE(TN.YTN5012.(OTXO00008159C777B6MVS))
  FREE PACKAGE(TN.TN7004.(OTXO000094))
  FREE PACKAGE(WB.WB7360.(WSTS000055))
  FREE PACKAGE(WB.WB5120.(WSTS000058))
  FREE PACKAGE(WB.WB7020.(WSTS000057))
  FREE PACKAGE(WB.WB7030.(WSTS000055))
  FREE PACKAGE(WB.WB8720.(WSTS000055))
  FREE PACKAGE(CZ.CZ5494.(ACP0000112))
  FREE PACKAGE(MF.MF8940.(MFR0000135))
  FREE PACKAGE(CZ.CZ8010.(APEN000049))
  FREE PACKAGE(CZ.CZ8020.(APEN000049))
  FREE PACKAGE(MF.MF8950.(MFR0000110))
  FREE PACKAGE(MF.MF8810.(MFR0000135))
  FREE PACKAGE(DI.DI5200.(DI00000064))
  FREE PACKAGE(TN.YTN0100.(OTXO00008159C90F4FMVS))
  FREE PACKAGE(WB.WB1310.(WSTS000055))
  FREE PACKAGE(WB.WB1070.(WSTS000055))
  FREE PACKAGE(LC.YLCTF03.(TFBM00003359B6B138))
  FREE PACKAGE(WB.YWB0082.(WSTS00005759C7789AMVS))
  FREE PACKAGE(WB.YWB0083.(WSTS0000625A13F154MVS))
  FREE PACKAGE(WB.WB0970.(TOFF000119))
  FREE PACKAGE(YY.YYUWI.(PSMF00001758EE0EC7MVS))
  FREE PACKAGE(WQ.YWQ5601.(CUBE00009459EF6729))
  FREE PACKAGE(WB.WB0620.(WSTS000055))
  FREE PACKAGE(CD.YCDT115.(UPDS000006))
  FREE PACKAGE(CD.CD8130.(CIFS000210))
  FREE PACKAGE(RA.RA7240.(EGB0000034))
  FREE PACKAGE(DE.DE0030.(DE00000070))
  FREE PACKAGE(FI.YFI0110.(BKUR00009559B932C8MVS))
  FREE PACKAGE(WB.WB7770.(WSTS000055))
  FREE PACKAGE(WB.WB7440.(WSTS000060))
  FREE PACKAGE(DE.DE5600.(DE00000070))
  FREE PACKAGE(CZ.CZ6300.(KLOM000067))
  FREE PACKAGE(DE.DE5690.(DE00000066))
  FREE PACKAGE(WB.WB7441.(WSTS000055))
  FREE PACKAGE(WB.WB7470.(WSTS000055))
  FREE PACKAGE(SN.SN5000.(SAVS000015))
  FREE PACKAGE(TN.TN5016.(OTXO000081))
  FREE PACKAGE(TN.TN5004.(OTXO000081))
  FREE PACKAGE(SN.YSNB002.(SAVS00001359A58A06))
  FREE PACKAGE(AP.YAPUTGK.(APEN00004959CA802BMVS))
  FREE PACKAGE(CZ.YCZM025.(LOFT000049599C053FMVS))
  FREE PACKAGE(WB.WB0900.(WSTS000055))
  FREE PACKAGE(WB.WB1120.(WSTS000055))
  FREE PACKAGE(GM.GM7910.(GM00000145))
  FREE PACKAGE(WB.WB1050.(WSTS000055))
  FREE PACKAGE(WB.WB1020.(WSTS000055))
  FREE PACKAGE(WB.WB0570.(WSTS000055))
  FREE PACKAGE(WB.WB1270.(TOFF000109))
  FREE PACKAGE(LC.YLCTF02.(TFBM00003359B6B121))
  FREE PACKAGE(MF.YMFC110.(MFR000013659CA812D))
  FREE PACKAGE(ER.ER8020.(EAMR000063))
  FREE PACKAGE(VV.YVVZZ33.(VDPS0001685A708DD5MVS))
  FREE PACKAGE(WB.WB0980.(TOFF000119))
  FREE PACKAGE(WB.WB1290.(TOFF000119))
  FREE PACKAGE(WB.WB0990.(TOFF000119))
  FREE PACKAGE(WB.WB1100.(TOFF000119))
  FREE PACKAGE(WB.WB1080.(TOFF000119))
  FREE PACKAGE(YY.YYWBERX.(TOFF0001195A16AFD3MVS))
  FREE PACKAGE(WB.WB0820.(TOFF000119))
  FREE PACKAGE(WB.WB1090.(TOFF000119))
  FREE PACKAGE(WB.WB1130.(WSTS000062))
  FREE PACKAGE(WB.YWB5417.(WSTS000055594BF2BEMVS))
  FREE PACKAGE(NL.YNL0200.(BALR00003156B0CC3B))
  FREE PACKAGE(WB.WB1110.(WSTS000055))
  FREE PACKAGE(NTA1P.CZA0213.(A02E00058259CD0967))
  FREE PACKAGE(WB.WB0830.(WSTS000055))
  FREE PACKAGE(WQ.YWQBERI.(CUBE00009459EF6722))
  FREE PACKAGE(DE.DE0050.(DE00000070))
  FREE PACKAGE(DE.DE0440.(DE00000070))
  FREE PACKAGE(DE.DE0490.(DE00000066))
  FREE PACKAGE(FI.YFI0120.(BKUR00009559B932CCMVS))
  FREE PACKAGE(DE.DE0090.(DE00000070))
  FREE PACKAGE(DE.DE0060.(DE00000070))
  FREE PACKAGE(DE.DE0100.(DE00000070))
  FREE PACKAGE(CK.YCKT020.(DCA0000026))
  FREE PACKAGE(CK.YCKT025.(DCA0000157))
  FREE PACKAGE(DE.YDE0021.(DE0000007059FB22DBMVS))
  FREE PACKAGE(WB.WB0840.(WSTS000062))
  FREE PACKAGE(WQ.YWQEXCP.(CUBE000092595E3C05))
  FREE PACKAGE(WB.WB7040.(WSTS000055))
  FREE PACKAGE(WB.WB7370.(WSTS000055))
  FREE PACKAGE(WB.WB7540.(WSTS000055))
  FREE PACKAGE(WB.WB5280.(WSTS000055))
  FREE PACKAGE(WB.WB7290.(WSTS000055))
  FREE PACKAGE(WB.WB7730.(WSTS000055))
  FREE PACKAGE(WB.WB7560.(WSTS000055))
  FREE PACKAGE(WB.WB7871.(WSTS000055))
  FREE PACKAGE(WB.WB7390.(WSTS000055))
  FREE PACKAGE(WB.WB7561.(WSTS000055))
  FREE PACKAGE(WB.WB0950.(WSTS000055))
  FREE PACKAGE(WB.WB0960.(WSTS000055))
  FREE PACKAGE(WB.WB0920.(WSTS000055))
  FREE PACKAGE(WB.WB1340.(WSTS000055))
  FREE PACKAGE(WB.WB0870.(WSTS000055))
  FREE PACKAGE(WB.WB0660.(WSTS000055))
  FREE PACKAGE(WB.WB0600.(WSTS000055))
  FREE PACKAGE(WB.WB0580.(WSTS000055))
  FREE PACKAGE(WB.WB0520.(WSTS000055))
  FREE PACKAGE(WB.WB0510.(WSTS000055))
  FREE PACKAGE(PC01.YPC0830.(IVN00000325970E7C8))
  FREE PACKAGE(PC02.YPC0830.(IVN00000325970E7C8))
  FREE PACKAGE(PC03.YPC0830.(IVN00000325970E7C8))
  FREE PACKAGE(PC04.YPC0830.(IVN00000325970E7C8))
  FREE PACKAGE(PC05.YPC0830.(IVN00000325970E7C8))
  FREE PACKAGE(PC06.YPC0830.(IVN00000325970E7C8))
  FREE PACKAGE(PC07.YPC0830.(IVN00000325970E7C8))
  FREE PACKAGE(KR.YKRT511.(KAUF00003859160EE7MVS))
  FREE PACKAGE(PC.YPC0570.(IVN0000032593FDD43))
  FREE PACKAGE(YY.YYFIKST.(BKUR00008059465507MVS))
  FREE PACKAGE(WB.YWB551.(WS8B00044259510292MVS))
  FREE PACKAGE(NZ.NZDBM83.(ZVBI000019))
  FREE PACKAGE(YY.YYWBERR.(WSTS000055594BF0A8MVS))
  FREE PACKAGE(YX.YXWB231.(WSTS000055594BF1B9MVS))
  FREE PACKAGE(CZ.YCZMLIM.(KLOM00006759DCDE22MVS))
  FREE PACKAGE(WN.YWNOLOG.(FOND00009559DDEF94MVS))
  FREE PACKAGE(VV.YVVZZ13.(VDPS00011759E75A9CMVS))
  FREE PACKAGE(VV.YVVZZ11.(VDPS00011759EDC6C1MVS))
  FREE PACKAGE(WB.YWBEBSM.(WSTS00005759EEEEAF))
  FREE PACKAGE(DE.DE0810.(DE00000070))
  FREE PACKAGE(WF.YWFCB02.(WSSW00010059F604C2MVS))
  FREE PACKAGE(WF.YWFM537.(WSSW00010059F6038CMVS))
  FREE PACKAGE(GM.GM0850.(GM00000153))
  FREE PACKAGE(DE.DE0820.(DE00000080))
  FREE PACKAGE(ER.YERPRI.(EAMR000053))
  FREE PACKAGE(BP.YBPMUT.(BPST0000925A086E14MVS))
  FREE PACKAGE(WB.WB5040.(WS8B000444))
  FREE PACKAGE(WB.WB7520.(WSTS000058))
  FREE PACKAGE(MF.YMFC113.(MFR000013659C7A3DF))
  FREE PACKAGE(PC01.YPC0520.(IVN000003559D0F5B8))
  FREE PACKAGE(PC02.YPC0520.(IVN000003559D0F5B8))
  FREE PACKAGE(PC03.YPC0520.(IVN000003559D0F5B8))
  FREE PACKAGE(PC04.YPC0520.(IVN000003559D0F5B8))
  FREE PACKAGE(PC05.YPC0520.(IVN000003559D0F5B8))
  FREE PACKAGE(PC06.YPC0520.(IVN000003559D0F5B8))
  FREE PACKAGE(PC07.YPC0520.(IVN000003559D0F5B8))
  FREE PACKAGE(VV.YVVZZ32.(VDPS00011759D0C30EMVS))
  FREE PACKAGE(EC.EC5130.(KLOM000067))
  FREE PACKAGE(CZ.CZ6500.(GSER000187))
  FREE PACKAGE(CZ.CZ6400.(GSER000187))
  FREE PACKAGE(CZ.CZ5280.(KLOM000067))
  FREE PACKAGE(DE.DE0940.(DE00000070))
  FREE PACKAGE(DE.DE0830.(DE00000070))
  FREE PACKAGE(CZ.CZ5150.(KLOM000067))
  FREE PACKAGE(DE.DE0860.(DE00000070))
  FREE PACKAGE(WB.WB0940.(WSTS000057))
  FREE PACKAGE(WB.WB0530.(WSTS000057))
  FREE PACKAGE(TN.YTNUPD.(OTXO0000945A12B0F8))
  FREE PACKAGE(RI.RI0810.(RI00000026))
  FREE PACKAGE(WB.WB7650.(TOFF000126))
  FREE PACKAGE(WB.WB0630.(WSTS000062))
  FREE PACKAGE(WB.WB0680.(WSTS000062))
  FREE PACKAGE(WQ.WQ5950.(CUBE000116))
  FREE PACKAGE(WB.WB7270.(WSTS000055))
  FREE PACKAGE(WB.WB0550.(WSTS000055))
  FREE PACKAGE(SN.SN5100.(SAVS000015))
  FREE PACKAGE(WQ.YWQ4501.(CUBE00009459EF6858))
  FREE PACKAGE(VD.VDGLH00.(DSPV000044))
  FREE PACKAGE(DE.DE0420.(DE00000070))
  FREE PACKAGE(VV.YVVZZ12.(VDPS00011759D0EFDAMVS))
  FREE PACKAGE(DE.DE0430.(DE00000070))
  FREE PACKAGE(DE.DE0410.(DE00000070))
  FREE PACKAGE(DE.DE0400.(DE00000070))
  FREE PACKAGE(TR.YTRHISP.(AITR000041594B870D))
  FREE PACKAGE(TN.YTN0101.(OTXO00008159DCBCA0))
  FREE PACKAGE(EC.YECCRAC.(SYNC00003059F9A49E))
  FREE PACKAGE(WB.WB5340.(TOFF000126))
  FREE PACKAGE(EQ.YEQISRK.(EAGL00001857CFFEDB))
  FREE PACKAGE(PC.PC5090.(IVN0000032))
  FREE PACKAGE(PC.PC5150.(IVN0000032))
  FREE PACKAGE(YY.YYWBVIN.(WSTS0000555953702BMVS))
  FREE PACKAGE(WB.WB7420.(WSTS000055))
  FREE PACKAGE(WB.WB7410.(WSTS000055))
  FREE PACKAGE(WB.WB5090.(WSTS000055))
  FREE PACKAGE(WB.WB7280.(WSTS000055))
  FREE PACKAGE(WB.WB5260.(WSTS000055))
  FREE PACKAGE(WB.WB8650.(TOFF000109))
  FREE PACKAGE(NI.YNIPREU.(IPC000020959ECC21DMVS))
  FREE PACKAGE(WQ.WQ6010.(CUBE000094))
  FREE PACKAGE(WL.WL8600.(WSAW000104))
  FREE PACKAGE(CZ.CZ5190.(LOMN000034))
  FREE PACKAGE(WC.WC7280.(OTXO000081))
  FREE PACKAGE(WC.WC5050.(OTXO000081))
  FREE PACKAGE(SN.SN5006.(SAVS000013))
  FREE PACKAGE(WC.WC7260.(OTXO000085))
  FREE PACKAGE(WC.WC7530.(OTXO000085))
  FREE PACKAGE(WC.WC7220.(OTXO000085))
  FREE PACKAGE(WC.WC7310.(OTXO000085))
  FREE PACKAGE(WC.WC7240.(OTXO000085))
  FREE PACKAGE(WC.WC7500.(OTXO000085))
  FREE PACKAGE(WC.WC7320.(OTXO000085))
  FREE PACKAGE(TN.YTNSICH.(OTXO00008159C777D9))
  FREE PACKAGE(MF.MF7230.(MFR0000135))
  FREE PACKAGE(MF.MF8620.(MFR0000135))
  FREE PACKAGE(NI.YNIPACU.(IPC000020959C14A76MVS))
  FREE PACKAGE(NI01.YNIPACU.(IPC000020959C14A76MVS))
  FREE PACKAGE(NI02.YNIPACU.(IPC000020959C14A76MVS))
  FREE PACKAGE(MF.MF7770.(MFR0000135))
  FREE PACKAGE(MF.MF8800.(MFR0000135))
  FREE PACKAGE(ER.ER5080.(EAMR000048))
  FREE PACKAGE(PC.PC7100.(IVN0000035))
  FREE PACKAGE(PC01.PC5060.(IVN0000035))
  FREE PACKAGE(PC02.PC5060.(IVN0000035))
  FREE PACKAGE(PC03.PC5060.(IVN0000035))
  FREE PACKAGE(PC04.PC5060.(IVN0000035))
  FREE PACKAGE(PC05.PC5060.(IVN0000035))
  FREE PACKAGE(PC06.PC5060.(IVN0000035))
  FREE PACKAGE(PC07.PC5060.(IVN0000035))
  FREE PACKAGE(GM.YGMSTEU.(GM0000015359CCE121MVS))
  FREE PACKAGE(PC.PC8000.(IVN0000035))
  FREE PACKAGE(UU.UU5170.(RS20000079))
  FREE PACKAGE(VV.YVVZZ17.(VDPS00011759D21EC1MVS))
  FREE PACKAGE(VV.YVVZZ25.(VDPS00011759D246F2MVS))
  FREE PACKAGE(NL.NL5000.(BALR000074))
  FREE PACKAGE(BP.BP5030.(BPST000092))
  FREE PACKAGE(CZ.CZ8980.(GSER000211))
  FREE PACKAGE(SV.SV0950.(WSSV000246))
  FREE PACKAGE(WC.WC8410.(WSTS000062))
  FREE PACKAGE(WC.WC8401.(WSTS000062))
  FREE PACKAGE(WC.WC5010.(WSTS000062))
  FREE PACKAGE(WB.WB5270.(WSTS000065))
  FREE PACKAGE(WB.WB5290.(WSTS000065))
  FREE PACKAGE(TN.YTN0210.(OTXO00007059747A48))
  FREE PACKAGE(TN.YTN0202.(OTXO0000925A098A8AMVS))
  FREE PACKAGE(NTA1P.CZA0219.(A02E000568586CDE37))
  FREE PACKAGE(ED.ED0950.(ED00000062))
  FREE PACKAGE(WI.YWI0087.(TOFF00011259D10C51MVS))
  FREE PACKAGE(BP.YBPMUT.(BPST0000925A086E14))
  FREE PACKAGE(NTA1P.CZA0013.(A02E00056056EFE947))
  FREE PACKAGE(CZ.YCZJABW.(GSER000170596C7E08MVS))
  FREE PACKAGE(CZ.YCZPABW.(GSER000181593FC3E5))
  FREE PACKAGE(TN.YTNW170.(OTXO00008159DB43A5MVS))
  FREE PACKAGE(BX.YBXADBR.(CLOS0001805989B493MVS))
  FREE PACKAGE(VV.YVVZZ04.(VDPS00011759C9027DMVS))
  FREE PACKAGE(NTA1P.CZA0215.(A02E00058259CD097C))
  FREE PACKAGE(TN.YTNW100.(OTXO0000945A12AF80MVS))
  FREE PACKAGE(WB.WB7400.(WSTS000055))
  FREE PACKAGE(WB.WB7380.(WSTS000055))
  FREE PACKAGE(WB.WB7330.(WSTS000055))
  FREE PACKAGE(WB.WB7381.(WSTS000055))
  FREE PACKAGE(WB.WB7320.(WSTS000055))
  FREE PACKAGE(WB.WB7340.(WSTS000055))
  FREE PACKAGE(VV.YVVZZ3R.(VDPS0001145947F471MVS))
  FREE PACKAGE(WB.WB0970.(TOFF000122))
  FREE PACKAGE(WB.WB0630.(WSTS000061))
  FREE PACKAGE(WB.WB0680.(WSTS000061))
  FREE PACKAGE(WB.YWBEBSM.(WSTS0000615A39A815MVS))
  FREE PACKAGE(VV.YVVZZ33.(VDPS00011759FB4F83MVS))
  FREE PACKAGE(VD.VDGLH00.(DSPV000047))
  FREE PACKAGE(WQ.YWQ4501.(CUBE0001185A52231D))
  FREE PACKAGE(TN.TN7004.(CSQS000007))
  FREE PACKAGE(WB.WB5120.(WSTS000061))
  FREE PACKAGE(WB.WB7360.(WSTS000061))
  FREE PACKAGE(WB.WB7020.(WSTS000061))
  FREE PACKAGE(CZ.CZ8020.(APEN000050))
  FREE PACKAGE(CZ.CZ8010.(APEN000050))
  FREE PACKAGE(WB.WB0910.(WSTS000061))
  FREE PACKAGE(WQ.YWQBERI.(CUBE0001185A5220FD))
  FREE PACKAGE(RA.RA7240.(EGB0000036))
  FREE PACKAGE(CZ.YCZPABW.(GSER0001995A37D687MVS))
  FREE PACKAGE(WQ.YWQ4501.(CUBE0001325A843C30))
  FREE PACKAGE(WB.WB1070.(WSTS000061))
  FREE PACKAGE(WB.WB0620.(WSTS000061))
  FREE PACKAGE(WB.WB1270.(TOFF000122))
  FREE PACKAGE(WB.WB0970.(WSTS000069))
  FREE PACKAGE(DE.DE0030.(DE00000077))
  FREE PACKAGE(WB.WB7440.(WSTS000061))
  FREE PACKAGE(WB.WB7770.(WSTS000061))
  FREE PACKAGE(CZ.CZ6300.(KLOM000069))
  FREE PACKAGE(WB.WB7470.(WSTS000061))
  FREE PACKAGE(WB.WB7441.(WSTS000061))
  FREE PACKAGE(DE.DE5690.(DE00000077))
  FREE PACKAGE(DE.DE5600.(DE00000077))
  FREE PACKAGE(SN.SN5000.(SAVS000018))
  FREE PACKAGE(WB.WB0820.(TOFF000122))
  FREE PACKAGE(WB.WB7040.(WSTS000061))
  FREE PACKAGE(WB.WB7390.(WSTS000061))
  FREE PACKAGE(DE.DE0830.(DE00000077))
  FREE PACKAGE(WB.WB0830.(WSTS000061))
  FREE PACKAGE(WB.WB1110.(WSTS000061))
  FREE PACKAGE(WB.WB1050.(WSTS000061))
  FREE PACKAGE(WB.WB0570.(WSTS000061))
  FREE PACKAGE(WB.WB0870.(WSTS000061))
  FREE PACKAGE(WB.WB0550.(WSTS000061))
  FREE PACKAGE(WB.WB1020.(WSTS000061))
  FREE PACKAGE(WB.WB1310.(WSTS000061))
  FREE PACKAGE(WB.WB1120.(WSTS000061))
  FREE PACKAGE(WB.WB1100.(TOFF000122))
  FREE PACKAGE(WB.WB0980.(TOFF000122))
  FREE PACKAGE(WB.WB1290.(TOFF000122))
  FREE PACKAGE(WB.WB5340.(TOFF000122))
  FREE PACKAGE(WB.WB1130.(WSTS000061))
  FREE PACKAGE(CZ.CZ6400.(GSER000219))
  FREE PACKAGE(WB.WB0630.(WSTS000069))
  FREE PACKAGE(WB.WB0680.(WSTS000069))
  FREE PACKAGE(DE.DE0430.(DE00000077))
  FREE PACKAGE(DE.DE0440.(DE00000077))
  FREE PACKAGE(DE.DE0090.(DE00000077))
  FREE PACKAGE(DE.DE0050.(DE00000077))
  FREE PACKAGE(WB.WB0510.(WSTS000061))
  FREE PACKAGE(WB.WB0600.(WSTS000061))
  FREE PACKAGE(WB.WB0660.(WSTS000061))
  FREE PACKAGE(WB.WB1340.(WSTS000061))
  FREE PACKAGE(WB.WB0940.(WSTS000061))
  FREE PACKAGE(WB.WB0920.(WSTS000061))
  FREE PACKAGE(WB.WB0520.(WSTS000061))
  FREE PACKAGE(DE.DE0420.(DE00000077))
  FREE PACKAGE(WB.WB5270.(WSTS000061))
  FREE PACKAGE(WB.WB5260.(WSTS000061))
  FREE PACKAGE(WC.WC7500.(WSTS000061))
  FREE PACKAGE(WB.WB7280.(WSTS000061))
  FREE PACKAGE(WC.WC5050.(WSTS000061))
  FREE PACKAGE(WB.WB7410.(WSTS000061))
  FREE PACKAGE(WB.WB7420.(WSTS000061))
  FREE PACKAGE(WC.WC7240.(WSTS000061))
  FREE PACKAGE(WC.WC7310.(WSTS000061))
  FREE PACKAGE(WB.WB5090.(WSTS000061))
  FREE PACKAGE(WC.WC7320.(WSTS000061))
  FREE PACKAGE(WC.WC7260.(WSTS000061))
  FREE PACKAGE(WB.WB5290.(WSTS000061))
  FREE PACKAGE(WC.WC7220.(WSTS000061))
  FREE PACKAGE(WC.WC7280.(WSTS000061))
  FREE PACKAGE(WC.WC7530.(WSTS000061))
  FREE PACKAGE(WB.WB0580.(WSTS000061))
  FREE PACKAGE(WB.WB0950.(WSTS000061))
  FREE PACKAGE(WB.WB0530.(WSTS000061))
  FREE PACKAGE(WC.WC5010.(WSTS000061))
  FREE PACKAGE(WB.WB0960.(WSTS000061))
  FREE PACKAGE(WC.WC8401.(WSTS000061))
  FREE PACKAGE(WB.WB8650.(TOFF000122))
  FREE PACKAGE(WC.WC8410.(WSTS000061))
  FREE PACKAGE(WQ.WQ6010.(CUBE000118))
  FREE PACKAGE(WL.WL8600.(WSAW000110))
  FREE PACKAGE(WQ.WQ5950.(CUBE000118))
  FREE PACKAGE(CZ.CZ8980.(KLOM000069))
  FREE PACKAGE(CZ.CZ5190.(LOMN000038))
  FREE PACKAGE(SN.SN5100.(SAVS000018))
  FREE PACKAGE(WB.WB1090.(TOFF000122))
  FREE PACKAGE(NL.NL5000.(BALR000076))
  FREE PACKAGE(WB.WB0840.(WSTS000061))
  FREE PACKAGE(WB.WB1080.(TOFF000122))
  FREE PACKAGE(WB.WB7270.(WSTS000061))
  FREE PACKAGE(WB.WB7560.(WSTS000061))
  FREE PACKAGE(WB.WB7380.(WSTS000061))
  FREE PACKAGE(WB.WB7561.(WSTS000061))
  FREE PACKAGE(WB.WB7871.(WSTS000061))
  FREE PACKAGE(WB.WB7370.(WSTS000061))
  FREE PACKAGE(WB.WB5280.(WSTS000061))
  FREE PACKAGE(WB.WB7400.(WSTS000061))
  FREE PACKAGE(WB.WB7540.(WSTS000061))
  FREE PACKAGE(WB.WB7520.(WSTS000061))
  FREE PACKAGE(WB.WB7730.(WSTS000061))
  FREE PACKAGE(WB.WB7381.(WSTS000061))
  FREE PACKAGE(WB.WB7290.(WSTS000061))
  FREE PACKAGE(CZ.CZ6500.(GSER000206))
  FREE PACKAGE(WB.WB7650.(TOFF000122))
  FREE PACKAGE(WB.WB5040.(WS8B000520))
  FREE PACKAGE(EC.EC5130.(KLOM000069))
  FREE PACKAGE(WB.WB7320.(WSTS000061))
  FREE PACKAGE(WB.WB7340.(WSTS000061))
  FREE PACKAGE(WB.WB7330.(WSTS000061))
  FREE PACKAGE(CZ.CZ5150.(KLOM000069))
  FREE PACKAGE(DE.DE0400.(DE00000077))
  FREE PACKAGE(ED.ED0950.(ED00000071))
  FREE PACKAGE(DE.DE0940.(DE00000077))
  FREE PACKAGE(DE.DE0820.(DE00000077))
  FREE PACKAGE(DE.DE0810.(DE00000077))
  FREE PACKAGE(DE.DE0410.(DE00000077))
  FREE PACKAGE(RI.RI0810.(RI00000027))
  FREE PACKAGE(DE.DE0860.(DE00000077))
  FREE PACKAGE(ER.ER8020.(EAMR000061))
  FREE PACKAGE(CZ.YCZJABW.(GSER0001995A2FFFC5MVS))
  FREE PACKAGE(PHPSPTA.HMCXRL4.())
  FREE PACKAGE(PHPS53.HMCXRL4.())
  FREE PACKAGE(PHPSPTA.HMCBCRD.())
  FREE PACKAGE(PHPS53.HMCBCRD.())
  FREE PACKAGE(PHPSPTA.H0001.())
  FREE PACKAGE(PHPS53.H0001.())
  FREE PACKAGE(PHPSPTA.RMIGNID.())
  FREE PACKAGE(PHPS53.RMIGNID.())
  FREE PACKAGE(PHPSPTA.HMPGENX.())
  FREE PACKAGE(PHPS53.HMPGENX.())
  FREE PACKAGE(PHPSPTA.HMPBNDR.())
  FREE PACKAGE(PHPS53.HMPBNDR.())
  FREE PACKAGE(PHPSPTA.HMCRES.())
  FREE PACKAGE(PHPS53.HMCRES.())
  FREE PACKAGE(BP.BP9060.(BPST000082))
  FREE PACKAGE(WB.YWB0083.(WSTS0000615A39A80BMVS))
  FREE PACKAGE(AP.YAPUTGK.(APEN0000505A38FBC3MVS))
  FREE PACKAGE(CZ.YCZPABW.(VEFO0000455A8AF898MVS))
  FREE PACKAGE(WI.YWI0087.(TOFF0001225A68637AMVS))
  FREE PACKAGE(WB.YWB0082.(WSTS0000615A39A807MVS))
  FREE PACKAGE(NTA1P.CZA0255.(A02E00058259CD092F))
  FREE PACKAGE(NTA1P.CZA0215.(A02E0005745A4E0589))
  FREE PACKAGE(ER.YERBER.(EAMR000053))
  FREE PACKAGE(NZ.NZDBM83.(ZVBI000021))
  FREE PACKAGE(WB.YWBEBSM.(WSTS0000695A80713EMVS))
  FREE PACKAGE(WN.YWNOLOG.(FOND0001065A4CBEB4MVS))
  FREE PACKAGE(WP.YWPL9P1.(DBH000012659B8E75BMVS))
  FREE PACKAGE(HP1.AC7VRK.(HPSVP2AC7VRK))
  FREE PACKAGE(HP3.AC7VRK.(HPSVP2AC7VRK))
  FREE PACKAGE(HP1.AATSRK.(HPSVP2AATSRK))
  FREE PACKAGE(HP3.AATSRK.(HPSVP2AATSRK))
  FREE PACKAGE(MF.YMFC010.(MFR00001495A537D96))
  FREE PACKAGE(WP.YWPL6P1.(DBH000012659B8E72DMVS))
  FREE PACKAGE(WB.YWB5402.(WSTS0000615A39A826MVS))
  FREE PACKAGE(WB.YWB5403.(WSTS0000615A39A82CMVS))
  FREE PACKAGE(SN.SN5903.(SAVS000013))
  FREE PACKAGE(WP.YWPR5PX.(DBH000012659B8E9C1MVS))
  FREE PACKAGE(RB.YRBUXY1.(RBK00000185A1D6D88))
  FREE PACKAGE(MF.MF8940.(MFR0000148))
  FREE PACKAGE(CZ.CZ5494.(ACP0000115))
  FREE PACKAGE(SN.SN6007.(SAVS000018))
  FREE PACKAGE(MF.MF8930.(MFR0000135))
  FREE PACKAGE(WP.YWPR1PX.(DBH000012659B8E86B))
  FREE PACKAGE(MF.MF8810.(MFR0000148))
  FREE PACKAGE(MF.MF8950.(MFR0000148))
  FREE PACKAGE(CZ.CZ7510.(APEN000042))
  FREE PACKAGE(VD.VDUTI41.(DSPV000042))
  FREE PACKAGE(ER.YERDCUR.(EAMR00004859B80521MVS))
  FREE PACKAGE(VV.YVV3EIP.(VDPS0001185A68985A))
  FREE PACKAGE(YY.YYWBMTU.(WSTS000055594BF093MVS))
  FREE PACKAGE(KR.YKRT397.(VEFO00003458E0E01BMVS))
  FREE PACKAGE(SN.YSND007.(SAVS0000055960CF6D))
  FREE PACKAGE(SN.YSND008.(SAVS0000055960CF75))
  FREE PACKAGE(SN.YSN202I.(SAVS0000055970BC9A))
  FREE PACKAGE(SN.YSND011.(SAVS0000055970BD39))
  FREE PACKAGE(VV.YVVZZ19.(VDPS00011759DB8665MVS))
  FREE PACKAGE(VV.YVVZZ30.(VDPS00011759EDC710MVS))
  FREE PACKAGE(MF.MF7010.(MFR0000135))
  FREE PACKAGE(MF.MF7901.(MFR0000135))
  FREE PACKAGE(SN.YSND010.(SAVS00001359A58A57))
  FREE PACKAGE(SN.YSN183I.(SAVS0000055960D087))
  FREE PACKAGE(SN.YSN102I.(SAVS0000055960D048))
  FREE PACKAGE(SN.YSN111I.(SAVS0000055960D060))
  FREE PACKAGE(SN.YSN201I.(SAVS00000559663EDB))
  FREE PACKAGE(ER.YERPRI.(EAMR000061))
  FREE PACKAGE(SN.YSNB002.(SAVS0000185A5C7C5F))
  FREE PACKAGE(DE.YDELSTO.(DE00000066594B8B81))
  FREE PACKAGE(WP.YWPR4PX.(DBH000012659B8E9A0MVS))
  FREE PACKAGE(MF.YMFC113.(MFR00001495A3298BA))
  FREE PACKAGE(HP1.ZADOKRL.(HPSVP2ZADOKRL))
  FREE PACKAGE(HP3.ZADOKRL.(HPSVP2ZADOKRL))
  FREE PACKAGE(WP.YWPL3P1.(DBH000012659B8E6F0MVS))
  FREE PACKAGE(WP.YWPL4P1.(DBH000012659B8E702MVS))
  FREE PACKAGE(WP.YWPRBPX.(DBH000012659B8FA95MVS))
  FREE PACKAGE(WB.WB0900.(WSTS000061))
  FREE PACKAGE(WB.WB0990.(TOFF000122))
  FREE PACKAGE(WQ.YWQ5601.(CUBE0001185A522360))
  FREE PACKAGE(WQ.YWQ4502.(CUBE0001185A522322))
  FREE PACKAGE(DE.DE0490.(DE00000077))
  FREE PACKAGE(PC.YPC0570.(IVN00000385A2538BCMVS))
  FREE PACKAGE(YX.YXWB021.(WSTS000055594BF1C2MVS))
  FREE PACKAGE(WB.YWB5417.(WSTS0000615A39A861MVS))
  FREE PACKAGE(VV.YVVZZ12.(VDPS0001185A5DDF82))
  FREE PACKAGE(CK.YCKT025.(DCA0000188))
  FREE PACKAGE(SV.SV0950.(WSSV000248))
  FREE PACKAGE(KR.YKRT385.(VEFO00003458E0E00AMVS))
  FREE PACKAGE(WB.WB7880.(WSTS000055))
  FREE PACKAGE(SN.YSN120.(SAVS0000055960D067))
  FREE PACKAGE(SN.YSN187I.(SAVS0000055960D095))
  FREE PACKAGE(SN.YSN110I.(SAVS0000055960D1C4))
  FREE PACKAGE(SN.YSND003.(SAVS0000055960CF4C))
  FREE PACKAGE(SN.YSND004.(SAVS0000055960CF54))
  FREE PACKAGE(SN.YSND005.(SAVS0000055960CF5D))
  FREE PACKAGE(SN.YSND014.(SAVS0000055960CFBC))
  FREE PACKAGE(SN.YSND015.(SAVS0000055960CFC3))
  FREE PACKAGE(SN.YSNI001.(SAVS0000055960CFCC))
  FREE PACKAGE(SN.YSN100I.(SAVS0000055960D039))
  FREE PACKAGE(SN.YSN101I.(SAVS0000055960D042))
  FREE PACKAGE(SN.YSN103I.(SAVS0000055960D050))
  FREE PACKAGE(SN.YSND001.(SAVS000005597F4D78))
  FREE PACKAGE(WB.YWBDGP.(WS8B0004425950FA22MVS))
  FREE PACKAGE(YX.YXWB116.(WSTS000055594BF1B0MVS))
  FREE PACKAGE(YY.YYWBESM.(WSTS000055594BF1CCMVS))
  FREE PACKAGE(YX.YXWB011.(WSTS000055594BF1D5MVS))
  FREE PACKAGE(VW.YVWB641.(WSTS000055594BF359MVS))
  FREE PACKAGE(SN.YSNA005.(SAVS00001559F06462))
  FREE PACKAGE(SN.SN0200.(SAVS000015))
  FREE PACKAGE(SN.YSNI003.(SAVS00001359A58A67))
  FREE PACKAGE(WP.YWPL5P1.(DBH000012659B8E717MVS))
  FREE PACKAGE(WP.YWPL8P1.(DBH000012659B8E744MVS))
  FREE PACKAGE(WP.YWPR2PX.(DBH000012659B8E89CMVS))
  FREE PACKAGE(WP.YWPRCPX.(DBH000012659B8FAB2MVS))
  FREE PACKAGE(WP.YWPRDPX.(DBH000012659B8FAC3))
  FREE PACKAGE(WP.YWPR7PX.(DBH000012659B8FB4BMVS))
  FREE PACKAGE(WP.YWPR6PX.(DBH000012659B8FB2EMVS))
  FREE PACKAGE(WP.YWPRAPX.(DBH000012659B90365MVS))
  FREE PACKAGE(VV.YVVZZ07.(VDPS00011759D24F27MVS))
  FREE PACKAGE(EC.YECUCRK.(SYNC00003059D501A0MVS))
  FREE PACKAGE(VD.YVDRES.(VDSS00010259D6229C))
  FREE PACKAGE(VV.YVV3EIP.(VDPS0001185A68985AMVS))
  FREE PACKAGE(TR.YTRHISP.(AITR0000475A11C803MVS))
  FREE PACKAGE(VV.YVVZZ32.(VDPS0001185A1E88B5MVS))
  FREE PACKAGE(BX.YBXADBR.(CLOS0001835A25007AMVS))
  FREE PACKAGE(YY.YYWBERX.(TOFF0001225A39A7DFMVS))
  FREE PACKAGE(YX.YXWB231.(WSTS0000615A39A8B6MVS))
  FREE PACKAGE(YY.YYWBERR.(WSTS0000615A39A896MVS))
  FREE PACKAGE(TN.YTNW100.(CSQS0000075A39A4F1MVS))
  FREE PACKAGE(CZ.CZ5280.(KLOM000069))
  FREE PACKAGE(YY.YYFIKST.(BKUR0000965A5DE9E3MVS))
  FREE PACKAGE(VV.YVVZZ04.(VDPS0001185A5DF2D6MVS))
  FREE PACKAGE(WQ.YWQ4501.(CUBE0001295A8BFE05))
  FREE PACKAGE(MF.YMFC110.(MFR00001495A5F0CE2))
  FREE PACKAGE(WQ.YWQBERI.(CUBE0001295A8BFDDF))
  FREE PACKAGE(WB.WB7300.(A06M025453))
  FREE PACKAGE(WB.YWBDGP2.(WS8B0004425950FA29MVS))
  FREE PACKAGE(VD.VDDBM15.(DSPV000044))
  FREE PACKAGE(VV.YVVZZGR.(VDPS0001145947F6A7MVS))
  FREE PACKAGE(VV.YVVZZQR.(VDPS000114595120D5MVS))
  FREE PACKAGE(VV.YVVZZ27.(VDPS00011759DB8776MVS))
  FREE PACKAGE(VV.YVVZZ28.(VDPS00011759EDC6FAMVS))
  FREE PACKAGE(VV.YVVZZ23.(VDPS00011759EDC6E4MVS))
  FREE PACKAGE(VV.YVVZZ18.(VDPS0001175A017B9CMVS))
  FREE PACKAGE(VV.YVVZZ20.(VDPS0001175A017C26MVS))
  FREE PACKAGE(WP.YWPRDPX.(DBH000012659B8FAC3MVS))
  FREE PACKAGE(VV.YVVZZ14.(VDPS00011759D2568EMVS))
  FREE PACKAGE(NL.NL7810.(BALR000074))
  FREE PACKAGE(NL.NL7310.(BALR000074))
  FREE PACKAGE(VV.YVVZZ33.(VDPS0001745A83012DMVS))
  FREE PACKAGE(ER.ER5080.(EAMR000061))
  FREE PACKAGE(VV.YVVZZ17.(VDPS0001185A5DEDE3MVS))
  FREE PACKAGE(ER.ER8020.(EAMR000069))
  FREE PACKAGE(SN.SN5003.(SAVS000005))
  FREE PACKAGE(NI.YNIPREU.(IPC000022959F88B30MVS))
  FREE PACKAGE(NI.YNIPACU.(IPC000022959F8874AMVS))
  FREE PACKAGE(NI01.YNIPACU.(IPC000022959F8874AMVS))
  FREE PACKAGE(NI02.YNIPACU.(IPC000022959F8874AMVS))
  FREE PACKAGE(MF.MF7550.(MFR0000135))
  FREE PACKAGE(SN.YSND012.(SAVS00001359A58A5C))
  FREE PACKAGE(SN.YSND013.(SAVS00001359A58A61))
  FREE PACKAGE(SN.SN5004.(SAVS000013))
  FREE PACKAGE(SN.SN5005.(SAVS000013))
  FREE PACKAGE(SN.SN5901.(SAVS000013))
  FREE PACKAGE(PC.PC7100.(IVN0000038))
  FREE PACKAGE(PC.PC8000.(IVN0000038))
  FREE PACKAGE(MF.MF8800.(MFR0000148))
  FREE PACKAGE(EC.YECCRAC.(SYNC0000325A2E6436))
  FREE PACKAGE(UU.UU5170.(RS20000080))
  FREE PACKAGE(YY.YYWBVIN.(WSTS0000615A39A89AMVS))
  FREE PACKAGE(PC01.PC5060.(IVN0000038))
  FREE PACKAGE(PC02.PC5060.(IVN0000038))
  FREE PACKAGE(PC03.PC5060.(IVN0000038))
  FREE PACKAGE(PC04.PC5060.(IVN0000038))
  FREE PACKAGE(PC05.PC5060.(IVN0000038))
  FREE PACKAGE(PC06.PC5060.(IVN0000038))
  FREE PACKAGE(PC07.PC5060.(IVN0000038))
  FREE PACKAGE(MF.MF7230.(MFR0000148))
  FREE PACKAGE(MF.MF8620.(MFR0000148))
  FREE PACKAGE(SN.SN5006.(SAVS000018))
  FREE PACKAGE(SN.SN6005.(SAVS000018))
  FREE PACKAGE(PC.PC5090.(IVN0000038))
  FREE PACKAGE(PC.PC5150.(IVN0000038))
  FREE PACKAGE(CZ.YCZM435.(BEWI00002658E13572MVS))
  FREE PACKAGE(WP.YWPR1QX.(DBH000012659B8E877MVS))
  FREE PACKAGE(ER.YERDUPD.(EAMR00004859BAAA26))
  FREE PACKAGE(YY.YYDB2FK.(TOFF00011259D3E46AMVS))
  FREE PACKAGE(PC01.YPC0520.(IVN00000385A2535B3MVS))
  FREE PACKAGE(PC02.YPC0520.(IVN00000385A2535B3MVS))
  FREE PACKAGE(PC03.YPC0520.(IVN00000385A2535B3MVS))
  FREE PACKAGE(PC04.YPC0520.(IVN00000385A2535B3MVS))
  FREE PACKAGE(PC05.YPC0520.(IVN00000385A2535B3MVS))
  FREE PACKAGE(PC06.YPC0520.(IVN00000385A2535B3MVS))
  FREE PACKAGE(PC07.YPC0520.(IVN00000385A2535B3MVS))
  FREE PACKAGE(CK.YCKT020.(DCA0000188))
  FREE PACKAGE(PC01.YPC0830.(IVN00000385A5B39A6MVS))
  FREE PACKAGE(PC02.YPC0830.(IVN00000385A5B39A6MVS))
  FREE PACKAGE(PC03.YPC0830.(IVN00000385A5B39A6MVS))
  FREE PACKAGE(PC04.YPC0830.(IVN00000385A5B39A6MVS))
  FREE PACKAGE(PC05.YPC0830.(IVN00000385A5B39A6MVS))
  FREE PACKAGE(PC06.YPC0830.(IVN00000385A5B39A6MVS))
  FREE PACKAGE(PC07.YPC0830.(IVN00000385A5B39A6MVS))
  FREE PACKAGE(WB.YWBITV.(TOFF00011259D3E350MVS))
  FREE PACKAGE(WP.YWPR3PX.(DBH000012659B8E97FMVS))
  FREE PACKAGE(VD.VDREC00.(DSPV000042))
  FREE PACKAGE(VD.VDDBM04.(DSPV000042))
  FREE PACKAGE(VD.YVDDFA.(DSPV00004459AE7FA5MVS))
  FREE PACKAGE(VD.VDDBM01.(DSPV000044))
  FREE PACKAGE(VD.VDINI01.(DSPV000044))
  FREE PACKAGE(VV.YVVZZ05.(VDPS00011759D36248MVS))
  FREE PACKAGE(VD.VDGLH00.(DSPV000050))
  FREE PACKAGE(VV.YVVZZ3R.(VDPS0001185A5DDB06MVS))
  FREE PACKAGE(VV.YVVZZ12.(VDPS0001185A5DDF82MVS))
  FREE PACKAGE(WP.YWPR6PX.(DBH00000835872A791))
  FREE PACKAGE(VV.YVVZZ16.(VDPS00011759D3AED0MVS))
  FREE PACKAGE(VV.YVVZZ16.(VDPS00011759D3AED0))
  FREE PACKAGE(VV.YVVZZ22.(VDPS00011759EDC6D8MVS))
  FREE PACKAGE(HP1.AB70RG.(HPSVP2AB70RG))
  FREE PACKAGE(HP3.AB70RG.(HPSVP2AB70RG))
  FREE PACKAGE(HP1.AOBWRI.(HPSVP2AOBWRI))
  FREE PACKAGE(HP3.AOBWRI.(HPSVP2AOBWRI))
  FREE PACKAGE(HP1.AOBARI.(HPSVP2AOBARI))
  FREE PACKAGE(HP3.AOBARI.(HPSVP2AOBARI))
  FREE PACKAGE(HP1.AOCLRI.(HPSVP2AOCLRI))
  FREE PACKAGE(HP3.AOCLRI.(HPSVP2AOCLRI))
  FREE PACKAGE(WP.YWPR7PX.(DBH00000835872A809))
  FREE PACKAGE(ER.YERDGET.(EAMR00004859B7AC83MVS))
  FREE PACKAGE(ER.YERDCUR.(EAMR0000615A5F2EBCMVS))
  FREE PACKAGE(ER.YERDINS.(EAMR00003559186E95MVS))
  FREE PACKAGE(HP1.ALS0RI.(HPSVP2ALS0RI))
  FREE PACKAGE(HP3.ALS0RI.(HPSVP2ALS0RI))
  FREE PACKAGE(HP1.ALSZRI.(HPSVP2ALSZRI))
  FREE PACKAGE(HP3.ALSZRI.(HPSVP2ALSZRI))
  FREE PACKAGE(SN.SN6006.(SAVS000018))
  FREE PACKAGE(HB.YHBK011.(ASIA00013259B6A096))
  FREE PACKAGE(VV.YVVZZ19.(VDPS0001185A1E888B))
  FREE PACKAGE(LC.YLCTF02.(TFBM0000375A26E226))
  FREE PACKAGE(DE.DE0060.(DE00000077))
  FREE PACKAGE(CZ.YCZT397.(GSER00017058D3A132))
  FREE PACKAGE(YY.YYWBPRI.(WSTS000055594BF0FFMVS))
  FREE PACKAGE(YY.YYWBERX.(TOFF0001225A39A7DF))
  FREE PACKAGE(EQ.YEQISRK.(EAGL00002459DCE1D0MVS))
  FREE PACKAGE(DE.YDE0021.(DE000000775A53475EMVS))
  FREE PACKAGE(DE.DE0100.(DE00000077))
  FREE PACKAGE(CZ.YCZJ323.(GSER00017058D7E6D6MVS))
  FREE PACKAGE(CZ.YCZT435.(BEWI00002658E1347CMVS))
  FREE PACKAGE(VV.YVVZZ10.(VDPS00011759E342BEMVS))
  FREE PACKAGE(VV.YVVZZ07.(VDPS00011759D24F27))
  FREE PACKAGE(WF.YWFM537.(WSSW0001055A2EA204MVS))
  FREE PACKAGE(WQ.YWQEXCP.(CUBE0001185A52216F))
  FREE PACKAGE(VV.YVVZZ14.(VDPS0001185A1E887D))
  FREE PACKAGE(VV.YVVZZ11.(VDPS0001185A5DED1EMVS))
  FREE PACKAGE(FI.YFI0110.(BKUR0000965A5DE7BDMVS))
  FREE PACKAGE(CZ.YCZT328.(GSER00017058D39F5FMVS))
  FREE PACKAGE(GM.YGMSTEU.(GM000001605A2E77C8MVS))
  FREE PACKAGE(CZ.YCZT397.(GSER00017058D3A132MVS))
  FREE PACKAGE(CZ.YCZJ431.(GSER00017058D7E73DMVS))
  FREE PACKAGE(VV.YVVZZ09.(VDPS0001185A1E8862MVS))
  FREE PACKAGE(VV.YVVZZAR.(VDPS00011459426A66MVS))
  FREE PACKAGE(VV.YVVZZNR.(VDPS0001145947F723MVS))
  FREE PACKAGE(VV.YVVZZ29.(VDPS00011759EDC703MVS))
  FREE PACKAGE(VV.YVVZZ31.(VDPS00011759D26946MVS))
  FREE PACKAGE(VV.YVVZZ27.(VDPS0001185A1E889E))
  FREE PACKAGE(VV.YVVZZ25.(VDPS0001185A1E8896MVS))
  FREE PACKAGE(MF.MF7770.(MFR0000148))
  FREE PACKAGE(FI.YFI0120.(BKUR0000965A5DE7D4MVS))
  FREE PACKAGE(VV.YVVZZ11.(VDPS0001185A5DED1E))
  FREE PACKAGE(VV.YVVZZ15.(VDPS00011759EDC6CAMVS))
  FREE PACKAGE(VV.YVVZZ13.(VDPS0001185A37A9AAMVS))
  FREE PACKAGE(GM.GM7910.(GM00000160))
  FREE PACKAGE(CZ.YCZT328.(GSER00017058D39F5F))
  FREE PACKAGE(WP.YWPR1PX.(DBH000012659B8E86BMVS))
  FREE PACKAGE(HP1.RWBW050.(HPSVP2RWBW050))
  FREE PACKAGE(HP3.RWBW050.(HPSVP2RWBW050))
  FREE PACKAGE(ER.YERDINS.(EAMR00003559186E95))
  FREE PACKAGE(ER.YERDCUR.(EAMR0000615A5F2EBC))
  FREE PACKAGE(ER.YERDGET.(EAMR00004859B7AC83))
  FREE PACKAGE(HP1.RWBT008.(HPSVP2RWBT008))
  FREE PACKAGE(HP3.RWBT008.(HPSVP2RWBT008))
  FREE PACKAGE(VV.YVVZZ21.(VDPS0001185A1E8890MVS))
  FREE PACKAGE(KR.YKRT511.(KAUF00004059DA50DA))
  FREE PACKAGE(HP1.AGX3RB.(HPSVP2AGX3RB))
  FREE PACKAGE(HP3.AGX3RB.(HPSVP2AGX3RB))
  FREE PACKAGE(HP1.RWBZ010.(HPSVP2RWBZ010))
  FREE PACKAGE(HP3.RWBZ010.(HPSVP2RWBZ010))
  FREE PACKAGE(HP1.RWBZ050.(HPSVP2RWBZ050))
  FREE PACKAGE(HP3.RWBZ050.(HPSVP2RWBZ050))
  FREE PACKAGE(VV.YVVZZ08.(VDPS00011759EDC6B6))
  FREE PACKAGE(CZ.YCZT235.(GSER00017058D39E3D))
  FREE PACKAGE(HP1.RWBP032.(HPSVP2RWBP032))
  FREE PACKAGE(HP3.RWBP032.(HPSVP2RWBP032))
  FREE PACKAGE(HPS.RWBP026.(HPSVP2RWBP026))
  FREE PACKAGE(HP1.RWBP026.(HPSVP2RWBP026))
  FREE PACKAGE(HP3.RWBP026.(HPSVP2RWBP026))
  FREE PACKAGE(CZ.YCZMLIM.(KLOM0000695A2956D9))
  FREE PACKAGE(EQ.YEQKDGP.(GSER00018759C91710MVS))
  FREE PACKAGE(TN.YTNW100.(CSQS0000075A39A4F1))
  FREE PACKAGE(HBDTEST.YVVZZ04.(VDPS0001185A5DF2D6))
  FREE PACKAGE(VV.YVVZZ04.(VDPS0001185A5DF2D6))
  FREE PACKAGE(WP.YWPLEP1.(DBH000012659B8F8B5MVS))
  FREE PACKAGE(WB.YWB551.(WS8B0005185A39AE85MVS))
  FREE PACKAGE(CZ.YCZT385.(GSER00017058D3A09CMVS))
  FREE PACKAGE(CZ.YCZT235.(GSER00017058D39E3DMVS))
  FREE PACKAGE(KR.YKRT511.(KAUF00004059DA50DAMVS))
  FREE PACKAGE(EQ.YEQISRK.(EAGL00002459DCE1D0))
  FREE PACKAGE(CZ.YCZMLIM.(KLOM0000695A2956D9MVS))
  FREE PACKAGE(WF.YWFCB02.(WSSW0001055A2E9AD7MVS))
  FREE PACKAGE(WB.YWB551.(WS8B0005185A39AE85))
  FREE PACKAGE(VV.YVVZZ24.(VDPS00011759EDC6EDMVS))
  FREE PACKAGE(YY.YYWBPRI.(WSTS000055594BF0FF))
  FREE PACKAGE(WP.YWPL2P1.(DBH000012659B91C6CMVS))
  FREE PACKAGE(HPS.AKEGRI.(HPSVP2AKEGRI))
  FREE PACKAGE(HP1.AKEGRI.(HPSVP2AKEGRI))
  FREE PACKAGE(LC.LC0511I.(TFBM00003359C2729F))
  FREE PACKAGE(HP1.AOYQRK.(HPSVP2AOYQRK))
  FREE PACKAGE(HP3.AOYQRK.(HPSVP2AOYQRK))
  FREE PACKAGE(HP1.AOAVRI.(HPSVP2AOAVRI))
  FREE PACKAGE(HP3.AOAVRI.(HPSVP2AOAVRI))
  FREE PACKAGE(HP1.AOBPRI.(HPSVP2AOBPRI))
  FREE PACKAGE(HP3.AOBPRI.(HPSVP2AOBPRI))
  FREE PACKAGE(HP1.RWBW058.(HPSVP2RWBW058))
  FREE PACKAGE(HP3.RWBW058.(HPSVP2RWBW058))
$#out                                              20100623 14:55:08
}¢--- A540769.WK.REXX.O13(DRDALASC) cre=2010-06-23 mod=2010-06-23-14.27.58 A540769 ---
call sqlConnect DBOC
se = "select translate('789A4512', char(lastUsed), '123456789A')"
wh = 'where pck_id = ? and PCK_CONSIST_TOKEN = ?'
call sqlPrepare 1, se 'from RZ2.TACCT_PKGUSED' wh
call sqlPrepare 2, se 'from RR2.TACCT_PKGUSED' wh
st = 0
$;
$<A540769.WK.REXX(DRDACOMP) $>A540769.WK.TEXW(DRDALASC)
$@for li $@¢
    if abbrev($li, $'$#out') then do
        if st = 1 then
            leave
        st = 1
        iterate
        end
    if st = 0 then
       iterate
    parse value $li with vo con coll pkg vers .
 /* say 'vo' vo 'con' con 'coll' coll 'pkg' pkg 'vers' vers'|' */
    prod = left('00never', 8)
    pta  = prod
    call sqlOpen 1, pkg, con
    call sqlFetchInto 1, ':prod'
    call sqlClose 1
    call sqlOpen 2, pkg, con
    call sqlFetchInto 2, ':pta'
    call sqlClose 2
    $$- prod pta $li
    $!
call sqlDisconnect
$#out                                              20100623 14:27:12
$#out                                              20100623 14:15:35
$#out                                              20100623 12:29:54
$#out                                              20100621 14:14:38
$#out                                              20100623 12:26:49
never      never      NY 164DE2480C0C3FEF A1P CI8520 A12M001522
never      never      NY 164E114300A2F5AF A1P CI8520 A12M001531
never      never      NY 1655E97B1D4F063E A1P CI8520 A12M001797
never      never      NN 15C5EB241FB02C12 A1P KD0500 19970207084703S101702A06140
never      never      NN 1615EEB7011D2F50 A1P KD0540 19980701134213S101702A07336
never      never      NN 161878261BA05DF7 A1P KD0540 19980717170619S101702Z38326
never      never      NN 161A571710CA3A50 A1P KD0540 CRMC000003
never      never      NY 168970141A69707D A1P KS5310 A13X000472
never      never      NY 16958203060813AF A1P KS5310 A13X000591
never      never      NY 169F460705B0D87F A1P KS5310 A13X000651
never      never      NY 16882B0B0AD331E7 A1P KS5320 A13X000532
never      never      NY 167AFE2009CED156 A1P KS5320 A13X000536
never      never      NY 169582050BAA22D4 A1P KS5320 A13X000591
never      never      NY 1687667206659803 A1P KS5330 A13X000546
never      never      NY 16BCF7E30CCDA0BA A1P KS5330 A13X000735
never      never      NY 16BE63EE1EE8EF03 A1P KS5330 A13X000740
never      never      NY 16BA31CF077C15DB A1P KS5780 A13X000732
never      never      NY 16BE63E31073D6CF A1P KS5780 A13X000740
never      never      NY 16C0A07C10EB4AFD A1P KS5780 A13X000746
never      never      NY 16BA31E4006FBFBF A1P KS5800 A13X000732
never      never      NY 16BE63E213025363 A1P KS5800 A13X000740
never      never      NY 16C0A0810A5B6988 A1P KS5800 A13X000746
never      never      NY 16A152110B9FF6A6 A1P PARTANA1 A18Q000804
never      never      NY 164516BC0D280818 A1P RR8420 CRMA000539
never      never      NY 1648353F07EC4E1F A1P RR8420 CRMA000574
never      never      NY 166D04F50F6980D8 A1P RR8420 CRMA001016
never      never      NY 165CB0F905C59250 A1P XP8600 CRME000264
never      never      NY 165D75940B31D4EC A1P XP8600 CRME000268
never      never      NY 165D8AE21837148F A1P XP8600 CRME000269
never      never      NY 1676EF371EFB3B51 A1P YCI009 A12M002427
never      never      NY 1676EF371BB2AF9C A1P YCI009A A12M002427
never      never      NN 15FF2F5A02CF9692 A1P YECGRI 19980206175312S101702A07022
never      never      NN 160041540F0188B0 A1P YECGRI 19980213132027S101702A07042
never      never      NN 1604875E13ACF042 A1P YECGRI 19980312175705S101702A07099
never      never      NN 15C5EB1509074F78 A1P YKD0500 19970207084459S101702A0614
never      never      NN 15C7FD8D1B047776 A1P YKD0500 19970220131055S101702A0618
never      never      NN 15CD85F103D59AAC A1P YKD0500 19970327180544S101702A0627
never      never      NN 15E37FE91C7B23D4 A1P YKD0500 19970814140402S101702M0008
never      never      NN 15E6CEF11FA4B640 A1P YKD0500 19970904152318S101702A0660
never      never      NN 15E88BA11939633E A1P YKD0500 19970915163933S101702A0668
never      never      NN 15E8FE3F13644320 A1P YKD0500 19970918130127S101702A0668
never      never      NN 15F2EEB91D073CD8 A1P YKD0500 19971120185108S101702M0008
never      never      NN 15F3646E1EA25C0A A1P YKD0500 19971123170525S101702Z3461
never      never      NN 15F3662E1D147D34 A1P YKD0500 19971123180702S101702Z3461
never      never      NN 15F369CE0D0F47CA A1P YKD0500 19971123194631S101702Z3461
never      never      NN 15F3AC9012C73DA2 A1P YKD0500 19971125120634S101702Z3467
never      never      NN 15F51AAE092A4BFA A1P YKD0500 19971204142946S101702Z3488
never      never      NN 15F5E973080E51E4 A1P YKD0500 19971209175158S101702Z3496
never      never      NN 15F603781AF2232E A1P YKD0500 19971210092215S101702Z3497
never      never      NN 15FBBA170A2A671E A1P YKD0500 19980115174941S101702M0008
never      never      NN 15FF2F5D15AE1F82 A1P YKD0500 19980206175332S101702A0702
never      never      NN 1600415710BDCF88 A1P YKD0500 19980213132025S101702A0704
never      never      NN 16048755010B03D8 A1P YKD0500 19980312175740S101702A0709
never      never      NN 1607F2CF0A1FA4F4 A1P YKD0500 19980403141032S101702A0714
never      never      NN 160A06261A472F65 A1P YKD0500 19980416190530S101702M0008
never      never      NN 1612E4F30FCA96DA A1P YKD0500 19980612054559S101702M0009
never      never      NN 161310A30C678722 A1P YKD0500 19980613074807S101702Z3786
never      never      NN 1613E4AC0B090F20 A1P YKD0500 19980618141748S101702A0732
never      never      NN 1615EAC01A922BBA A1P YKD0500 19980701111931S101702A0733
never      never      NN 1615EEA60F9DED86 A1P YKD0500 19980701133922S101702A0733
never      never      NN 16161DF5150335D8 A1P YKD0500 19980702175321S101702Z3817
never      never      NN 161731E90D5CB082 A1P YKD0500 19980709142935S101702A0737
never      never      NN 16187CA10D0C1682 A1P YKD0500 19980717194602S101702Z3832
never      never      NN 161D4EAD04459518 A1P YKD0500 CRMA000067
never      never      NN 162D33470952FFA6 A1P YKD0500 CRMA000128
never      never      NN 161B18A00CA11C64 A1P YKD0500 CRMC000003
never      never      NN 162D5C5A0908A3AD A1P YKD0500 CRMD000263
never      never      NN 162E4AD31D2BD121 A1P YKD0500 CRMD000281
never      never      NN 162E6FE715DC4FF4 A1P YKD0500 CRMD000283
never      never      NY 1613E56F1740210C A1P YKS0813 19980618144536S101702A0732
never      never      NY 163491EB01FDB20E A1P YKS0813 A13X000041
never      never      NY 1646550719DBBDAC A1P YKS0813 A13X000301
never      never      NY 165330C00D7AB867 A1P YKS0813 A13X000352
never      never      NY 16513271056C9880 A1P YKS0813 A13X000362
never      never      NY 166D9AB11FA33E50 A1P YKS0813 A13X000436
never      never      NY 1677859011B643E5 A1P YKS0813 A13X000508
never      never      NY 1676E88707F1D935 A1P YKS0813 A13X000530
never      never      NY 1695821F098DD6EA A1P YKS0813 A13X000591
never      never      NY 1630A9DA12572F56 A1P YKS5551 A13X000153
never      never      NY 1634B7A00A6AC118 A1P YKS5551 A13X000155
never      never      NY 163745B70B5F6610 A1P YKS5551 A13X000177
never      never      NY 163E846315E5EFF5 A1P YKS5551 A13X000194
never      never      NY 1640FE87029F28D2 A1P YKS5551 A13X000269
never      never      NY 164AE8141397EFC6 A1P YKS5551 A13X000321
never      never      NY 165243271B36AE1D A1P YKS5551 A13X000368
never      never      NY 16932BF11BF1D6FA A1P YKS5551 A13X000597
never      never      NY 1630A9DF1565AD62 A1P YKS5552 A13X000153
never      never      NY 1634B7A9147E2684 A1P YKS5552 A13X000155
never      never      NY 16932C9D020E69F9 A1P YKS5552 A13X000597
never      never      NY 1630A9E30D269CF6 A1P YKS5553 A13X000153
never      never      NY 1634B7A21AFC2256 A1P YKS5553 A13X000155
never      never      NY 163745CE170BF742 A1P YKS5553 A13X000177
never      never      NY 163AE0290CA67CFE A1P YKS5553 A13X000194
never      never      NY 1640DDA6001FB321 A1P YKS5553 A13X000249
never      never      NY 1643CD8D13A137CA A1P YKS5553 A13X000279
never      never      NY 16501614117EAAEE A1P YKS5553 A13X000339
never      never      NY 16932C4511DF1A14 A1P YKS5553 A13X000597
never      never      NY 164445390715E376 A1P YSAT058 A16M000359
never      never      NN 15F2EEB81F753348 A1P YYECGRI 19971120185114S101702M0008
never      never      NN 15F369CC0439D86A A1P YYECGRI 19971123194631S101702Z3461
never      never      NN 15F519F619C6885F A1P YYECGRI 19971204140411S101702Z3488
never      never      NN 15FBB9F00F950012 A1P YYECGRI 19980115174545S101702M0008
never      never      NY 164DE2480C0C3FEF A2P CI8520 A12M001522
never      never      NY 164E114300A2F5AF A2P CI8520 A12M001531
never      never      NY 1655E97B1D4F063E A2P CI8520 A12M001797
never      never      NN 15C467A81072B294 A2P FD0350 19970128173847S101702Z29337
never      never      NN 15CFB3DA0DA10990 A2P FD0350 19970410145407S101702A06297
never      never      NN 160041A1013AD3F8 A2P FD0350 19980213133248S101702A07046
never      never      NN 15C5EB241FB02C12 A2P KD0500 19970207084703S101702A06140
never      never      NN 1615EEB7011D2F50 A2P KD0540 19980701134213S101702A07336
never      never      NN 161878261BA05DF7 A2P KD0540 19980717170619S101702Z38326
never      never      NN 161A571710CA3A50 A2P KD0540 CRMC000003
never      never      NY 168970141A69707D A2P KS5310 A13X000472
never      never      NY 16958203060813AF A2P KS5310 A13X000591
never      never      NY 169F460705B0D87F A2P KS5310 A13X000651
never      never      NY 16882B0B0AD331E7 A2P KS5320 A13X000532
never      never      NY 167AFE2009CED156 A2P KS5320 A13X000536
never      never      NY 169582050BAA22D4 A2P KS5320 A13X000591
never      never      NY 1687667206659803 A2P KS5330 A13X000546
never      never      NY 16BCF7E30CCDA0BA A2P KS5330 A13X000735
never      never      NY 16BE63EE1EE8EF03 A2P KS5330 A13X000740
never      never      NY 16BA31CF077C15DB A2P KS5780 A13X000732
never      never      NY 16BE63E31073D6CF A2P KS5780 A13X000740
never      never      NY 16C0A07C10EB4AFD A2P KS5780 A13X000746
never      never      NY 16BA31E4006FBFBF A2P KS5800 A13X000732
never      never      NY 16BE63E213025363 A2P KS5800 A13X000740
never      never      NY 16C0A0810A5B6988 A2P KS5800 A13X000746
never      never      NY 164B053E00772199 A2P RR8270 CRMA000504
never      never      NY 166D04ED01A34479 A2P RR8270 CRMA001016
never      never      NY 164516BC0D280818 A2P RR8420 CRMA000539
never      never      NY 1648353F07EC4E1F A2P RR8420 CRMA000574
never      never      NY 166D04F50F6980D8 A2P RR8420 CRMA001016
never      never      NY 165CB0F905C59250 A2P XP8600 CRME000264
never      never      NY 165D75940B31D4EC A2P XP8600 CRME000268
never      never      NY 165D8AE21837148F A2P XP8600 CRME000269
never      never      NY 1676EF371EFB3B51 A2P YCI009 A12M002427
never      never      NY 1676EF371BB2AF9C A2P YCI009A A12M002427
never      never      NN 15FF2F5A02CF9692 A2P YECGRI 19980206175312S101702A07022
never      never      NN 160041540F0188B0 A2P YECGRI 19980213132027S101702A07042
never      never      NN 1604875E13ACF042 A2P YECGRI 19980312175705S101702A07099
never      never      NN 15C5EB1509074F78 A2P YKD0500 19970207084459S101702A0614
never      never      NN 15C7FD8D1B047776 A2P YKD0500 19970220131055S101702A0618
never      never      NN 15CD85F103D59AAC A2P YKD0500 19970327180544S101702A0627
never      never      NN 15E37FE91C7B23D4 A2P YKD0500 19970814140402S101702M0008
never      never      NN 15E6CEF11FA4B640 A2P YKD0500 19970904152318S101702A0660
never      never      NN 15E88BA11939633E A2P YKD0500 19970915163933S101702A0668
never      never      NN 15E8FE3F13644320 A2P YKD0500 19970918130127S101702A0668
never      never      NN 15F2EEB91D073CD8 A2P YKD0500 19971120185108S101702M0008
never      never      NN 15F3646E1EA25C0A A2P YKD0500 19971123170525S101702Z3461
never      never      NN 15F3662E1D147D34 A2P YKD0500 19971123180702S101702Z3461
never      never      NN 15F369CE0D0F47CA A2P YKD0500 19971123194631S101702Z3461
never      never      NN 15F3AC9012C73DA2 A2P YKD0500 19971125120634S101702Z3467
never      never      NN 15F51AAE092A4BFA A2P YKD0500 19971204142946S101702Z3488
never      never      NN 15F5E973080E51E4 A2P YKD0500 19971209175158S101702Z3496
never      never      NN 15F603781AF2232E A2P YKD0500 19971210092215S101702Z3497
never      never      NN 15FBBA170A2A671E A2P YKD0500 19980115174941S101702M0008
never      never      NN 15FF2F5D15AE1F82 A2P YKD0500 19980206175332S101702A0702
never      never      NN 1600415710BDCF88 A2P YKD0500 19980213132025S101702A0704
never      never      NN 16048755010B03D8 A2P YKD0500 19980312175740S101702A0709
never      never      NN 1607F2CF0A1FA4F4 A2P YKD0500 19980403141032S101702A0714
never      never      NN 160A06261A472F65 A2P YKD0500 19980416190530S101702M0008
never      never      NN 1612E4F30FCA96DA A2P YKD0500 19980612054559S101702M0009
never      never      NN 161310A30C678722 A2P YKD0500 19980613074807S101702Z3786
never      never      NN 1613E4AC0B090F20 A2P YKD0500 19980618141748S101702A0732
never      never      NN 1615EAC01A922BBA A2P YKD0500 19980701111931S101702A0733
never      never      NN 1615EEA60F9DED86 A2P YKD0500 19980701133922S101702A0733
never      never      NN 16161DF5150335D8 A2P YKD0500 19980702175321S101702Z3817
never      never      NN 161731E90D5CB082 A2P YKD0500 19980709142935S101702A0737
never      never      NN 16187CA10D0C1682 A2P YKD0500 19980717194602S101702Z3832
never      never      NN 161D4EAD04459518 A2P YKD0500 CRMA000067
never      never      NN 162D33470952FFA6 A2P YKD0500 CRMA000128
never      never      NN 161B18A00CA11C64 A2P YKD0500 CRMC000003
never      never      NN 162D5C5A0908A3AD A2P YKD0500 CRMD000263
never      never      NN 162E4AD31D2BD121 A2P YKD0500 CRMD000281
never      never      NN 162E6FE715DC4FF4 A2P YKD0500 CRMD000283
never      never      NY 16BA30A41C0F6F67 A2P YKS0801 A13X000702
never      never      NY 16C07605061FBB71 A2P YKS0801 A13X000736
never      never      NY 1613E56F1740210C A2P YKS0813 19980618144536S101702A0732
never      never      NY 163491EB01FDB20E A2P YKS0813 A13X000041
never      never      NY 1646550719DBBDAC A2P YKS0813 A13X000301
never      never      NY 165330C00D7AB867 A2P YKS0813 A13X000352
never      never      NY 16513271056C9880 A2P YKS0813 A13X000362
never      never      NY 166D9AB11FA33E50 A2P YKS0813 A13X000436
never      never      NY 1677859011B643E5 A2P YKS0813 A13X000508
never      never      NY 1676E88707F1D935 A2P YKS0813 A13X000530
never      never      NY 1695821F098DD6EA A2P YKS0813 A13X000591
never      never      NY 1630A9DA12572F56 A2P YKS5551 A13X000153
never      never      NY 1634B7A00A6AC118 A2P YKS5551 A13X000155
never      never      NY 163745B70B5F6610 A2P YKS5551 A13X000177
never      never      NY 163E846315E5EFF5 A2P YKS5551 A13X000194
never      never      NY 1640FE87029F28D2 A2P YKS5551 A13X000269
never      never      NY 164AE8141397EFC6 A2P YKS5551 A13X000321
never      never      NY 165243271B36AE1D A2P YKS5551 A13X000368
never      never      NY 16932BF11BF1D6FA A2P YKS5551 A13X000597
never      never      NY 1630A9DF1565AD62 A2P YKS5552 A13X000153
never      never      NY 1634B7A9147E2684 A2P YKS5552 A13X000155
never      never      NY 16932C9D020E69F9 A2P YKS5552 A13X000597
never      never      NY 1630A9E30D269CF6 A2P YKS5553 A13X000153
never      never      NY 1634B7A21AFC2256 A2P YKS5553 A13X000155
never      never      NY 163745CE170BF742 A2P YKS5553 A13X000177
never      never      NY 163AE0290CA67CFE A2P YKS5553 A13X000194
never      never      NY 1640DDA6001FB321 A2P YKS5553 A13X000249
never      never      NY 1643CD8D13A137CA A2P YKS5553 A13X000279
never      never      NY 16501614117EAAEE A2P YKS5553 A13X000339
never      never      NY 16932C4511DF1A14 A2P YKS5553 A13X000597
never      never      NY 164445390715E376 A2P YSAT058 A16M000359
never      never      NY 16435A6F11693957 A2P YSAT061 A16M000359
never      never      NN 15F2EEB81F753348 A2P YYECGRI 19971120185114S101702M0008
never      never      NN 15F369CC0439D86A A2P YYECGRI 19971123194631S101702Z3461
never      never      NN 15F519F619C6885F A2P YYECGRI 19971204140411S101702Z3488
never      never      NN 15FBB9F00F950012 A2P YYECGRI 19980115174545S101702M0008
never      never      NY 150316DB1D65BC0E AC YACM002
never      never      NY 1535B571062A8382 AC YACM002 19940804182728S101702A03620
never      never      NY 15722F7818523CAA AL AL7501 19950824S101702A047042AAL750
never      never      NY 1583CDBC12FD69C8 AL AL7501 19951214S101702A050076AAL750
never      never      NY 17C52B9F140DD234 AN ANNA001 CIIN000149MVS
never      never      NY 17C9C23B0EA9675A AS AS0100 KABG000030
never      never      NY 17D3559116861C28 AS AS0100 KABG000032
never      never      NY 17E1A51A17E0F50C AS AS0100 KABG000038
never      never      NY 17D3558A0C154045 AS AS0101I KABG0000325702815B
never      never      NY 17C9C23C12AF79BC AS AS0610 KABG000030
never      never      NY 17D3559519C2E6E1 AS AS0610 KABG000032
never      never      NY 160E69CA19939C46 AS AS8992 19980514171537S101702M000860
never      never      NY 161B932817CAEAAE AS AS8992 A15T000038
never      never      NY 1641EA5C07BD0976 AT AT0090 A12M001166
never      never      NY 16701F2E068440B8 AT AT0090 A20Y000239
never      never      NY 1684DF0C1CAAE6CA AT AT0090 A20Y000364
never      never      NY 169584351662C65F AT AT0100 A20Y000431
never      never      NN 161752A819909F4A AT AT7010 19980710095644S101702Z382648
never      never      NN 1617536E04B0F3C2 AT AT7010 19980710102939S101702Z382654
never      never      NN 159216F71F876EB6 AT AT7060 19960314140003S101702A052607
never      never      NN 15967D67056F4424 AT AT7060 19960411135637S101702A053258
never      never      NN 15B897D016771B92 AT AT7060 19961114135124S101702A058435
never      never      NN 15E497E61F0D4E14 AT AT7200 19970821130820S101702A065919
never      never      NY 16804E200C818C3D AT AT7222 A20Y000328
never      never      NY 167052EB121BF030 AT AT7224 A20Y000111
never      never      NY 16804E280E27D697 AT AT7224 A20Y000328
never      never      NY 160E69CD130FE694 AT AT7225 19980514171958S101702A072293
never      never      NY 16804E4C09EB407F AT AT7225 A20Y000328
never      never      NY 1644F3CA173A61B0 AT AT8100 A12M001144
never      never      NY 1648DBBC02AB08EC AT AT8100 A12M001366
never      never      NY 164F2A4B0F8D30EC AT AT8100 A12M001566
never      never      NN 159F4AC31EED2BB6 AT AT9000 19960606140803S101702A054557
never      never      NN 16124BD61907BF70 AT AT9000 19980608102520S101702Z377704
never      never      NN 1612799103DC119E AT AT9000 19980609134214S101702Z377955
never      never      NN 159F4AC41BD178A0 AT AT9002 19960606140805S101702A054557
never      never      NN 159F4AC31F9F0C82 AT AT9010 19960606140801S101702A054557
never      never      NY 157B028C0F2080C4 AT YAT7010 19951019S101702A047927AYAT7
never      never      NY 157F16DF06FB2C46 AT YAT7010 19951114S101702Z218883AYAT7
never      never      NY 15807BE3061C6BE0 AT YAT7010 19951123S101702A049711AYAT7
never      never      NY 15AD972311C5029A AT YAT7010 19960905133829S101702A05675
never      never      NY 17ECA23A0C6EB668 AU YAU180F AURA00005057D6BBB7
never      never      NY 17ECA23B1FBFA9C1 AU YAU180U AURA00005057D6BBC5
never      never      NY 17ECA23E0FABF3D8 AU YAU181F AURA00005057D6BBD9
never      never      NY 17ECA23F0E1D66B0 AU YAU181U AURA00005057D6BBE0
never      never      NY 17ECA2450050B44A AU YAU190F AURA00005057D6BC0A
never      never      NY 17ECA245060F76D6 AU YAU190U AURA00005057D6BC0D
never      never      NY 17ECA2470B09C3B9 AU YAU191F AURA00005057D6BC1D
never      never      NY 17ECA2481CF2F5C5 AU YAU191U AURA00005057D6BC27
never      never      NY 181D086E1A4ECCC0 AV AV8710 PMRT000087
never      never      NY 17C9679213BF125F AV AV8730 PMRT000038
never      never      NY 17D3270F03D52A4A AV AV8730 PMRT000047
never      never      NY 17E0D3341267EA4F AV AV8730 PMRT000051
never      never      NY 17F01A1317E6CC4B AV AV8730 PMRT000061
never      never      NY 15AEB8D707346442 AV AV8760 19960912182612S101702M000659
never      never      NY 15DE01241F8A2456 AV AV8780 19970710145440S101702M000721
never      never      NY 160E86341A290D7D AV AV8780 19980515101750S101702M000839
never      never      NN 16175AA10B3A7C03 AV AV8810 19980710144536S101702M000841
never      never      NY 15F1CDA61F5655E8 AV PB7100 19971113142535S101702A068238
never      never      NY 160C09871F9001F2 AV PB7100 19980429143617S101702Z372375
never      never      NY 15FCCE141AF5E25E AV YAV0491 19980122142900S101702M00088
never      never      NY 16001B8F0EA53D76 AV YAV0491 19980212144909S101702M00083
never      never      NY 1600B3EE11290746 AV YAV0491 19980216094309S101702Z36000
never      never      NY 1600BF7D1404B85A AV YAV0491 19980216163702S101702Z36000
never      never      NY 1600CAFD18A258AA AV YAV0491 19980216232923S101702Z36000
never      never      NY 1600EBE8145E9F50 AV YAV0491 19980217190729S101702Z36061
never      never      NY 16010E541A175F54 AV YAV0491 19980218153923S101702Z36082
never      never      NY 16013C930285B008 AV YAV0491 19980219191321S101702A07058
never      never      NY 16024C24072CD91A AV YAV0491 19980226131304S101702A07068
never      never      NY 16036E7B169C9BD6 AV YAV0491 19980305182245S101702M00083
never      never      NY 160527120CD1FE62 AV YAV0491 19980316171545S101702Z36500
never      never      NY 16059D8E01DEE026 AV YAV0491 19980319155434S101702M00089
never      never      NY 1607CCAC09C7A50C AV YAV0491 19980402152529S101702A07145
never      never      NY 1607D0CE0B4721CA AV YAV0491 19980402174755S101702A07145
never      never      NY 160A0CBE1D77D87E AV YAV0491 19980416230442S101702M00083
never      never      NY 160A27690E1AAF44 AV YAV0491 19980417145713S101702M00083
never      never      NY 160F546B090D6BAA AV YAV0491 19980520132114S101702M00091
never      never      NY 1612CDA703B93646 AV YAV0491 19980611154441S101702M00084
never      never      NY 1613B369128241CA AV YAV0491 19980617085448S101702Z37943
never      never      NY 1613E6D00583D5FF AV YAV0491 19980618153333S101702A07282
never      never      NY 1613EA7F03A57AF7 AV YAV0491 19980618174545S101702A07282
never      never      NY 15FC7C8015088BF0 AV YAV0492 19980120134946S101702Z35621
never      never      NY 15FCCE141FD171CA AV YAV0492 19980122142900S101702M00088
never      never      NY 16001B8E18CF2BEC AV YAV0492 19980212144910S101702M00083
never      never      NY 1600B3EE109EBF4E AV YAV0492 19980216094354S101702Z36000
never      never      NY 1600EBED0F410816 AV YAV0492 19980217190815S101702Z36061
never      never      NY 16013C910AA3ADF6 AV YAV0492 19980219191324S101702A07058
never      never      NY 16024C2203916548 AV YAV0492 19980226131307S101702A07068
never      never      NY 16036EA9020D1582 AV YAV0492 19980305182323S101702M00083
never      never      NY 1605271C18775376 AV YAV0492 19980316171625S101702Z36500
never      never      NY 16059D8F01CA216B AV YAV0492 19980319155435S101702M00089
never      never      NY 1607CCAE0F0B319A AV YAV0492 19980402152532S101702A07145
never      never      NY 1607D0A60D2960CC AV YAV0492 19980402174757S101702A07145
never      never      NY 160A0CBF09C6F1B4 AV YAV0492 19980416230443S101702M00083
never      never      NY 160A2768153C9AC8 AV YAV0492 19980417145714S101702M00083
never      never      NY 160F546709B5FEF6 AV YAV0492 19980520132114S101702M00091
never      never      NN 15FCEA5A0A642344 BB BB0610 19980123072119S101702A069974
never      never      NN 160367661777B7FA BB BB0610 19980305141209S101702A070764
never      never      NN 160A031D0D9A1220 BB BB0610 19980416171757S101702M000874
never      never      NN 14FEB040124F01EC BB BB0620
never      never      NN 1525374C1A6758F8 BB BB0620 19940421195008S101702A033635
never      never      NN 157464C8115986E4 BB BB0630 19950907S101702A047247ABB063
never      never      NN 15A06AB904A0B1A4 BB BB0630 19960613175401S101702A054931
never      never      NN 15E38BA81ABEAD50 BB BB0630 19970814210720S101702A065981
never      never      NN 1522AAC808CA5442 BB0610 BB0610 E
never      never      NY 150F4BA41E900E9A BF BF5200
never      never      NY 15C281291C65DA6C BF BF5210 19970116152548S101702A059717
never      never      NY 15E7E5361957B936 BF BF5210 19970911132316S101702A066068
never      never      NY 15EB32C21FF75BF7 BF BF5210 19971002134504S101702A067141
never      never      NY 153902F6137C8A30 BF BF5220 19940825185414S101702A036438
never      never      NY 15E7E5370F068ADE BF BF5220 19970911132317S101702A066068
never      never      NY 15EB32C41C4B73B4 BF BF5220 19971002134518S101702A067141
never      never      NY 153902F700814934 BF BF5230 19940825185417S101702A036438
never      never      NY 15EB32BF04D1918E BF BF5230 19971002134524S101702A067141
never      never      NN 15F635010D0A5D46 BF BF5800 19971211145411S101702A068424
never      never      NN 15DE014E04577D2C BF BF5820 19970710145443S101702M000721
never      never      NN 15F634FE137FA476 BF BF5820 19971211145412S101702A068424
never      never      NY 159BAB9B0A182D28 BF BF6090 19960514130419S101702Z248334
never      never      NY 159BAD8813D65D82 BF BF6090 19960514141319S101702Z248334
never      never      NY 159BADE616475D14 BF BF6090 19960514142627S101702Z248334
never      never      NY 155389391E7448C2 BF BF6093 19950210132753S101702Z176750
never      never      NY 159DE1540BE5E038 BF BF6094 19960528143214S101702Z250204
never      never      NY 159DE36206C41602 BF BF6094 19960528154545S101702Z250204
never      never      NY 159E5A841F3B0042 BF BF6094 19960531144954S101702Z250854
never      never      NY 17C9B91418F8CED6 BF BF7110 DBH0000054
never      never      NY 15D0F1D91905D620 BF BF7155 19970418123528S101702Z306908
never      never      NY 169B32D400FC7E4F BF BF8651 A06M014649
never      never      NY 16A2BF941EFADE7F BF BF8651 A06M015279
never      never      NY 16C8F25E01CF6F97 BF BF8651 A06M018600
never      never      NY 167A09691326E76E BF BF8655 A06M010498
never      never      NY 169C55070A2B53F1 BF BF8655 A06M014649
never      never      NY 16C919050C1F9F1D BF BF8655 A06M018600
never      never      NY 1582B4CA08C9FFD8 BF YBF530A 19951207S101702M000634AYBF5
never      never      NY 158ECF6214B03EEC BF YBF530A 19960222171024S101702A05207
never      never      NY 15902FD502A31894 BF YBF530A 19960302112542S101702Z23666
never      never      NY 1591002A01037F40 BF YBF530A 19960307154206S101702Z23759
never      never      NY 1596837113C0C91A BF YBF530A 19960411173314S101702A05327
never      never      NY 15B8AA8F02CE70A0 BF YBF530A 19961115010108S101702M00066
never      never      NY 15D0CE0D19C13B8A BF YBF530A 19970417151313S101702M00071
never      never      NY 15FBD3FB1547C6FC BF YBF530A 19980116091802S101702A06960
never      never      NY 160A0CBE0C8067EA BF YBF530A 19980416230450S101702M00083
never      never      NY 160A275B1FFBCE22 BF YBF530A 19980417145719S101702M00083
never      never      NY 160E6991020CE58A BF YBF530A 19980514170908S101702A07219
never      never      NY 1582B4CF107AF85A BF YBF530C 19951207S101702M000634AYBF5
never      never      NY 158366D90A273776 BF YBF530C 19951212S101702Z224164AYBF5
never      never      NY 158ECF62134EFED2 BF YBF530C 19960222171021S101702A05207
never      never      NY 15C70985032B4F18 BF YBF530C 19970214113528S101702M00071
never      never      NY 15D0CE3F180E9E6C BF YBF530C 19970417152008S101702M00071
never      never      NY 15D76735093AE61C BF YBF530C 19970529145110S101702M00077
never      never      NY 15DAB28210DBC286 BF YBF530C 19970619135415S101702A06482
never      never      NY 160A0CB0047FDAC8 BF YBF530C 19980416230451S101702M00083
never      never      NY 160A2758111F9E66 BF YBF530C 19980417145719S101702M00083
never      never      NY 160E699B00605186 BF YBF530C 19980514171120S101702A07219
never      never      NY 160A0FFB14698DD0 BG BG5030 19980417004708S101702M000838
never      never      NY 160A2A331314C09A BG BG5030 19980417164021S101702M000838
never      never      NY 160E86301107EC02 BG BG5030 19980515101751S101702M000839
never      never      NY 15B8BADD12C21910 BG YBG0532 19961115104536S101702M00077
never      never      NY 15B9DACA017F6818 BG YBG0532 19961122143048S101702Z27894
never      never      NY 15BD06F402869D92 BG YBG0532 19961212185135S101702A05977
never      never      NY 15CA3899152E40AA BG YBG0532 19970306174909S101702A06218
never      never      NY 15CE9E49181FB8B2 BG YBG0532 19970403171955S101702A06290
never      never      NY 15B8BADD1AA85D42 BG YBG0533 19961115104534S101702M00077
never      never      NY 15B9DACB0CF401B4 BG YBG0533 19961122143047S101702Z27894
never      never      NY 15BD06E10C9D2BCA BG YBG0533 19961212184920S101702A05977
never      never      NY 15CA389910E791DC BG YBG0533 19970306174905S101702A06218
never      never      NY 15D0CE4A19DD3F2A BG YBG0533 19970417152106S101702M00071
never      never      NY 15D9C24213072E21 BG YBG0533 19970613143606S101702Z31634
never      never      NY 15DAB43604062EC2 BG YBG0533 19970619145541S101702A06469
never      never      NY 17F6AA560A34ED8A BP BP5020 BPST000045
never      never      NY 1506668818CF2372 BP BP5110
never      never      NY 1535B51614B1A26A BP BP5110 19940804181814S101702M000488
never      never      NN 150666840082209C BP BP5300
never      never      NN 1577B0C60EBA90F4 BP BP5300 19950928S101702A048040ABP530
never      never      NN 1515CB39102F3BAC BP BP6000
never      never      NN 14DEC9231A6F93D6 BP BP6020
never      never      NN 1515CB251704A156 BP BP6060
never      never      NN 15F633A91B86136E BP BP7000 19971211140642S101702A069088
never      never      NN 15F657CF166B9186 BP BP7000 19971212114155S101702Z350210
never      never      NN 15F721140F5090C2 BP BP7000 19971217114439S101702A069235
never      never      NY 15A9318801F6F29C BP BP7030 19960808141137S101702A056223
never      never      NY 15A955C60B512CE8 BP BP7030 19960809114839S101702Z261082
never      never      NY 15AB64A015540528 BP BP7030 19960822140553S101702A056579
never      never      NY 15A1A2D81FF23DC8 BP BP7040 19960621120626S101702Z254169
never      never      NY 16B27B3C1630432F BP BP7042 A20Y000615
never      never      NN 148919C41FD6B1B4 BP BP7090
never      never      NN 1577B0C21280B95C BP BP7090 19950928S101702A048040ABP709
never      never      NY 16675AC9070B1EC2 BP BP7090 A20Y000082
never      never      NY 16BA2AD11D9A7732 BP BP7120 A20Y000665
never      never      NY 16BE8CF60D490B16 BP BP7130 A20Y000665
never      never      NY 169B33C51657A5E1 BP BP7200 A20Y000403
never      never      NY 16B6B9F81C9E53D1 BP BP7200 A20Y000648
never      never      NY 1577B01A0ACA6D00 BP YBP01NS 19950928S101702A048005AYBP0
never      never      NY 157C19F315459D6C BP YBP01NS 19951026S101702Z214855AYBP0
never      never      NY 157C3E731202D132 BP YBP01NS 19951027S101702Z214995AYBP0
never      never      NY 157D30D41ECCE710 BP YBP01NS 19951102S101702A049016AYBP0
never      never      NY 15A066B51EF1FB26 BP YBP04NS 19960613153121S101702A05500
never      never      NY 147660C41FD5D044 BP YBP7020
never      never      NY 1577B0B810DBF3CC BP YBP7020 19950928S101702A048040AYBP7
never      never      NY 15DAB24A0AF3AA74 BP YBPCRM 19970619134703S101702A064764
never      never      NY 1818F6591AC16718 BP YBPMUT BPST000079594A969E
never      never      NY 1823001E039F38F8 BP YBPMUT BPST000087599ECB6F
never      never      NY 150316DC04471502 BP YBPPID
never      never      NY 1535B5A51890624A BP YBPPID 19940804183036S101702A036204
never      never      NY 147692731D721634 BP YBPSHBP
never      never      NY 1503143A0A6B5CA0 BS BS7630
never      never      NY 14F6FE851244A2C6 BW YBWAAGE
never      never      NY 1598B165187DA214 BW YBWAAGE 19960425142305S101702A05363
never      never      NY 15BF591E03C77C20 BW YBWAAGE 19961227131948S101702A06034
never      never      NY 151167350EB77844 BW YBWAAGF
never      never      NY 151B218309B9B006 BW YBWAAGF 19940216154925S101702A03166
never      never      NY 1598B167127A6A6E BW YBWAAGF 19960425142315S101702A05363
never      never      NY 15AA4B5C1E0F52D4 BW YBWAAGF 19960815141412S101702A05640
never      never      NY 15BF591F068580AC BW YBWAAGF 19961227131949S101702A06034
never      never      NY 153032E512219A9E BW YBWAAJ2 19940630170742S101702A03523
never      never      NY 15769BEC05314EBA BW YBWAAJ2 19950921172723S101702A04765
never      never      NY 153032E91F1F1E52 BW YBWAAJ8 19940630170744S101702A03523
never      never      NY 1536D7310C0BC814 BW YBWAAJ8 19940811231714S101702A03626
never      never      NY 15769BEC0CDAD2FC BW YBWAAJ8 19950921172725S101702A04765
never      never      NY 153032EE08F705A6 BW YBWAAJ9 19940630170745S101702A03523
never      never      NY 15769BEC14901608 BW YBWAAJ9 19950921172726S101702A04765
never      never      NY 153032E317CD9C54 BW YBWAAJT 19940630170740S101702A03523
never      never      NY 15769BEA0C918E30 BW YBWAAJT 19950921172720S101702A04765
never      never      NY 1516E59F12C865DE BW YBWAE0H
never      never      NY 155017A01D39050E BW YBWAE3X 19950119153151S101702A04143
never      never      NY 15979A8F18623C0A BW YBWAE3X 19960418160311S101702A05353
never      never      NY 159AEDBB1049E920 BW YBWAE3X 19960509194859S101702A05399
never      never      NY 15A5E21D16F89B16 BW YBWAE3X 19960718124102S101702A05601
never      never      NY 15A6817902D78222 BW YBWAE3X 19960722114427S101702A05603
never      never      NY 15C01FBA0A72BD02 BW YBWAE3X 19970101115057S101702A06042
never      never      NN 1516E57012F552A4 BW YBWAELC
never      never      NY 155CF1350B725110 BW YBWAEW1 19950411095234S101702A04364
never      never      NY 159747811F1E9FA0 BW YBWAEW1 19960416143108S101702Z24379
never      never      NY 15976F3814F7499E BW YBWAEW1 19960417141232S101702A05347
never      never      NY 1597700603AB6250 BW YBWAEW1 19960417144123S101702A05347
never      never      NY 159AEDB910F31422 BW YBWAEW1 19960509194856S101702A05399
never      never      NY 15A5E21D193721F0 BW YBWAEW1 19960718124100S101702A05601
never      never      NY 15A68179001193D2 BW YBWAEW1 19960722114425S101702A05603
never      never      NY 15C01FB316DFC146 BW YBWAEW1 19970101115052S101702A06042
never      never      NY 15C285FD06034432 BW YBWAEW1 19970116181901S101702A06094
never      never      NY 14E5629B1F1F866E BW YBWAEW2
never      never      NY 15264E7F016424EC BW YBWAEW2 19940428182558S101702A03382
never      never      NY 159AEDBA1E955F56 BW YBWAEW2 19960509194857S101702A05399
never      never      NY 15C01FB91A932516 BW YBWAEW2 19970101115053S101702A06042
never      never      NY 14E5629F0B642836 BW YBWAEW6
never      never      NY 15264E6515A07DBA BW YBWAEW6 19940428182212S101702A03382
never      never      NY 159AEDBB02A632D0 BW YBWAEW6 19960509194857S101702A05399
never      never      NY 15C01FBA00CC09A0 BW YBWAEW6 19970101115054S101702A06042
never      never      NY 1550179903F4E224 BW YBWAEW9 19950119153157S101702A04143
never      never      NY 15979A8F07D8714A BW YBWAEW9 19960418160310S101702A05353
never      never      NY 159AEDBB0E0852FC BW YBWAEW9 19960509194858S101702A05399
never      never      NY 15A5E21C06FFD6FA BW YBWAEW9 19960718124101S101702A05601
never      never      NY 15A68179062805FA BW YBWAEW9 19960722114426S101702A05603
never      never      NY 15C01FBA07885BD4 BW YBWAEW9 19970101115056S101702A06042
never      never      NY 14E5628207E87EB4 BW YBWAEWG
never      never      NY 15264E7D1743FECA BW YBWAEWG 19940428182459S101702A03382
never      never      NY 15285AB30043DA0E BW YBWAEWG 19940511190624S101702A03420
never      never      NY 154869550BD27064 BW YBWAEWG 19941201183642S101702A04002
never      never      NY 159AEDC61C14E3D0 BW YBWAEWG 19960509194901S101702A05399
never      never      NY 15264E7402CCD4DA BW YBWAEWJ 19940428182507S101702A03382
never      never      NY 15C01FB204A6F0BA BW YBWAEWJ 19970101115100S101702A06042
never      never      NY 15CC6B541DF61FD8 BW YBWAEWJ 19970320173113S101702A06260
never      never      NY 155017A00C33F4C4 BW YBWAEWL 19950119153152S101702A04143
never      never      NY 15979A9004882B82 BW YBWAEWL 19960418160303S101702A05353
never      never      NY 159AEDC509CE74BC BW YBWAEWL 19960509194902S101702A05399
never      never      NY 15A5E21D11DAD092 BW YBWAEWL 19960718124102S101702A05601
never      never      NY 15A681781DD12494 BW YBWAEWL 19960722114428S101702A05603
never      never      NY 15C01FB307AE7E58 BW YBWAEWL 19970101115101S101702A06042
never      never      NY 1550179F10DDCEF0 BW YBWAEWM 19950119153154S101702A04143
never      never      NY 15979A8F03A3DFDC BW YBWAEWM 19960418160307S101702A05353
never      never      NY 159AEDC5105C830E BW YBWAEWM 19960509194903S101702A05399
never      never      NY 15A5E21D1491CEE0 BW YBWAEWM 19960718124103S101702A05601
never      never      NY 15A681781B943B82 BW YBWAEWM 19960722114429S101702A05603
never      never      NY 15C01FB3142ED2E6 BW YBWAEWM 19970101115101S101702A06042
never      never      NY 14E562940BE19ABA BW YBWAEWN
never      never      NY 15264E720403AA7E BW YBWAEWN 19940428182543S101702A03382
never      never      NY 159AEDC50D42395C BW YBWAEWN 19960509194904S101702A05399
never      never      NY 15C01FB9140339D6 BW YBWAEWN 19970101115051S101702A06042
never      never      NY 1521B8FD15680B22 BW YBWAFI0 19940330142436S101702A03285
never      never      NY 155C2FF915283E98 BW YBWAFI0 19950406143555S101702A04351
never      never      NY 1598B1651EEB8A26 BW YBWAFI0 19960425142303S101702A05363
never      never      NY 15BF5914191E3E26 BW YBWAFI0 19961227132017S101702A06034
never      never      NY 1521B8F50DC19804 BW YBWAFI1 19940330142442S101702A03285
never      never      NY 1558E08C0887E942 BW YBWAFI1 19950316130445S101702A04290
never      never      NY 155C2FF91F11439A BW YBWAFI1 19950406143559S101702A04351
never      never      NY 1598B166063D52C8 BW YBWAFI1 19960425142304S101702A05363
never      never      NY 15BF59150CA67CE0 BW YBWAFI1 19961227132018S101702A06034
never      never      NY 1521B8FE0A17A64C BW YBWAFI2 19940330142450S101702A03285
never      never      NY 1598B1651BF11CE2 BW YBWAFI2 19960425142305S101702A05363
never      never      NY 15BF5913049FE184 BW YBWAFI2 19961227132018S101702A06034
never      never      NY 1521B8F61DAC2DC2 BW YBWAFIW 19940330142500S101702A03285
never      never      NY 1598B15B052AFE12 BW YBWAFIW 19960425142258S101702A05363
never      never      NY 15BF59141287EB16 BW YBWAFIW 19961227132013S101702A06034
never      never      NY 1521B8FE1F864D24 BW YBWAFIX 19940330142508S101702A03285
never      never      NY 1598B1641BD08E54 BW YBWAFIX 19960425142301S101702A05363
never      never      NY 15BF59161F9AD290 BW YBWAFIX 19961227132014S101702A06034
never      never      NY 1521B8FA1650FBA8 BW YBWAFIY 19940330142400S101702A03285
never      never      NY 1598B163133B9970 BW YBWAFIY 19960425142302S101702A05363
never      never      NY 15BF5914081F89C2 BW YBWAFIY 19961227132014S101702A06034
never      never      NY 1521B8FC087A0EF8 BW YBWAFIZ 19940330142416S101702A03285
never      never      NY 1598B165105A5288 BW YBWAFIZ 19960425142302S101702A05363
never      never      NY 15BF591708584444 BW YBWAFIZ 19961227132016S101702A06034
never      never      NY 1511676B126756D6 BW YBWAH56
never      never      NY 151B2186118141C4 BW YBWAH56 19940216154927S101702A03166
never      never      NY 1598B16602F6C07A BW YBWAH56 19960425142306S101702A05363
never      never      NY 15AA4B58030FFDF6 BW YBWAH56 19960815141413S101702A05640
never      never      NY 15BF5919053C23EE BW YBWAH56 19961227132029S101702A06034
never      never      NY 14F6FEE40DDBF7D0 BW YBWAH57
never      never      NY 1598B16609D15584 BW YBWAH57 19960425142307S101702A05363
never      never      NY 15BF591703F9FF84 BW YBWAH57 19961227132030S101702A06034
never      never      NY 14E562FD03599EA6 BW YBWAHD4
never      never      NY 15264E7907D18426 BW YBWAHD4 19940428182421S101702A03382
never      never      NY 159AEDC61FBF7C90 BW YBWAHD4 19960509194900S101702A05399
never      never      NY 15C01FB91D5255E8 BW YBWAHD4 19970101115058S101702A06042
never      never      NY 14E563410BC15EDC BW YBWAO3W
never      never      NY 15264E7B164F3C72 BW YBWAO3W 19940428182442S101702A03382
never      never      NY 159AEDC61DFDA230 BW YBWAO3W 19960509194901S101702A05399
never      never      NY 15C01FB20734FB6C BW YBWAO3W 19970101115059S101702A06042
never      never      NY 1511678007403006 BW YBWAPVY
never      never      NY 151B21860905A464 BW YBWAPVY 19940216154930S101702A03166
never      never      NY 1598B1660C022D8E BW YBWAPVY 19960425142311S101702A05363
never      never      NY 15AA4B571D5BBA10 BW YBWAPVY 19960815141415S101702A05640
never      never      NY 15BF591808145EDA BW YBWAPVY 19961227132031S101702A06034
never      never      NY 151167A918CC2004 BW YBWAPVZ
never      never      NY 151B218318AA6790 BW YBWAPVZ 19940216154932S101702A03166
never      never      NY 1598B1670DBD0A2E BW YBWAPVZ 19960425142311S101702A05363
never      never      NY 15AA4B581162478C BW YBWAPVZ 19960815141410S101702A05640
never      never      NY 15BF591908E8C6B4 BW YBWAPVZ 19961227132032S101702A06034
never      never      NY 151167B01D57144E BW YBWAXLQ
never      never      NY 151B21831318EFE2 BW YBWAXLQ 19940216154937S101702A03166
never      never      NY 1598B167191D450E BW YBWAXLQ 19960425142313S101702A05363
never      never      NY 15AA4B580AE003AE BW YBWAXLQ 19960815141411S101702A05640
never      never      NY 15BF591F16BCCFC8 BW YBWAXLQ 19961227132033S101702A06034
never      never      NN 14DDB433139A8DCC BX BX0330
never      never      NN 1524171A15C1F372 BX BX0330 19940414155938S101702A033405
never      never      NN 15A938F0027489B2 BX BX0330 19960808183517S101702A056200
never      never      NN 15E030ED03C2ED60 BX BX5100 19970724125214S101702A065494
never      never      NN 14EAE56D0E216AAC BX BX5200
never      never      NN 154A9D950574CA9A BX BX5200 19941215191359S101702A040134
never      never      NN 15B0E7CC19E4F582 BX BX5200 19960926155311S101702A057383
never      never      NN 15DF17CE10E3F8E8 BX BX6400 19970717131027S101702A065289
never      never      NN 1543FD0E0F7E84A6 BX BX6410 19941103151044S101702A038911
never      never      NN 15B0E7D20E740CF8 BX BX6410 19960926155312S101702A057383
never      never      NN 15BCFDB81BE1E830 BX BX6410 19961212132749S101702A059703
never      never      NN 15A8E25E05D16382 BX BX6500 19960806145757S101702Z260717
never      never      NN 15AFCB4B05BD16DE BX BX6500 19960919140931S101702A057271
never      never      NN 15BCFDB30A119D48 BX BX6500 19961212132750S101702A059703
never      never      NN 15AB6A8E1828D382 BX BX6550 19960822173742S101702Z262853
never      never      NN 15AFCB4C074093F0 BX BX6550 19960919140932S101702A057273
never      never      NN 15BCFDC10B7D7C14 BX BX6550 19961212132745S101702A059703
never      never      NN 15AC0710003145C8 BX BX6560 19960826145905S101702Z263181
never      never      NN 15AFCB4C03BF4D84 BX BX6560 19960919140932S101702A057273
never      never      NN 15BCFDC31FB936F2 BX BX6560 19961212132746S101702A059703
never      never      NN 15AEAB4215CC4452 BX BX6570 19960912102108S101702Z265961
never      never      NN 15AFCB4C04085138 BX BX6570 19960919140933S101702A057273
never      never      NN 15BCFDC311D7C1C4 BX BX6570 19961212132746S101702A059703
never      never      NN 15EB32C617030990 BX BX6700 19971002134658S101702A067077
never      never      NN 1611B0D41D5CB5AE BX BX6700 19980604135634S101702A072837
never      never      NN 15D3F46103C1645C BX BX6750 19970507161423S101702Z310325
never      never      NN 15D7638C0B0BA518 BX BX6750 19970529124001S101702A064140
never      never      NN 1611B0D3162F8C6E BX BX6750 19980604135635S101702A072837
never      never      NN 15486934015A2970 BX BX7150 19941201183328S101702A039829
never      never      NN 15609512113BC514 BX BX7150 19950504S101702A044162ABX715
never      never      NN 15B0E7CC1F685528 BX BX7150 19960926155302S101702A057383
never      never      NN 14EB001A1851033E BX BX7200
never      never      NN 14EAFFFB1A72D1FA BX BX7400
never      never      NN 14EB000B1CEB7EE0 BX BX7410
never      never      NN 150665481D304842 BX BX7620
never      never      NN 153F94601E5A8978 BX BX7620 19941006135422S101702A037791
never      never      NN 15B0E7CE03D083CC BX BX7620 19960926155305S101702A057383
never      never      NN 14C8C88F1232C564 BX BX7900
never      never      NN 15EB32D00CA588A2 BX BX8000 19971002134658S101702A067077
never      never      NN 16173BB6085000B0 BX BX8000 19980709201829S101702A073668
never      never      NN 1617503911A3AAAD BX BX8000 19980710083334S101702A073668
never      never      NN 156B92E51CDFF42C BX BX8100 19950713S101702Z199809ABX810
never      never      NN 156B93B41230F73A BX BX8100 19950713S101702Z199813ABX810
never      never      NN 15B0E7D1090EA204 BX BX8100 19960926155310S101702A057383
never      never      NN 15BCFDB90A440BF0 BX BX8110 19961212132748S101702A059703
never      never      NN 1611B0D51958A307 BX BX8110 19980604135636S101702A072837
never      never      NN 153F9DD401823670 BX YBX0121 19941006193229S101702A03759
never      never      NN 155D26370DF7E3B4 BX YBX0121 19950412S101702A043533AYBX0
never      never      NN 157D3328100B4204 BX YBX0121 19951102S101702A048803AYBX0
never      never      NN 1596811916897804 BX YBX0121 19960411160906S101702A05322
never      never      NN 159682C60968F844 BX YBX0121 19960411170949S101702A05322
never      never      NN 15A938CA1F752144 BX YBX0121 19960808183126S101702A05620
never      never      NN 15B2001C089B4AAC BX YBX0121 19961003150558S101702A05748
never      never      NN 15B20298016DEE2C BX YBX0121 19961003163437S101702A05748
never      never      NN 15BD048619B26D8C BX YBX0121 19961212173258S101702A05967
never      never      NN 15CFB33D0A70748C BX YBX0121 19970410143059S101702A06303
never      never      NN 15D8853008179396 BX YBX0121 19970605172720S101702A06422
never      never      NN 15DCE9521D0702E4 BX YBX0121 19970703160016S101702A06492
never      never      NN 15DF17F107130182 BX YBX0121 19970717131555S101702A06536
never      never      NN 15DF18610ECD5B8C BX YBX0121 19970717133108S101702A06536
never      never      NN 15EF9948056B3B58 BX YBX0121 19971030134551S101702A06783
never      never      NN 1517FBEA1EB63092 BX YBX0311
never      never      NN 151B47C60BD65A5E BX YBX0311 19940217143350S101702A03150
never      never      NN 153264DD01428E8A BX YBX0311 19940714161915S101702A03497
never      never      NN 1535ADFE06D1EBB8 BX YBX0311 19940804140337S101702A03603
never      never      NN 153F9DD204C38F38 BX YBX0311 19941006193204S101702A03759
never      never      NN 1540AEA40F98C7D2 BX YBX0311 19941013141432S101702A03823
never      never      NN 155D263E1A28B2F2 BX YBX0311 19950412S101702A043533AYBX0
never      never      NN 155E1710155D711E BX YBX0311 19950418S101702Z185893AYBX0
never      never      NN 155E80A60D44FFA0 BX YBX0311 19950421S101702Z186279AYBX0
never      never      NN 15609509084E36C4 BX YBX0311 19950504S101702A044162AYBX0
never      never      NN 1560C001172F0450 BX YBX0311 19950505S101702Z188373AYBX0
never      never      NN 15617FC50D017534 BX YBX0311 19950510S101702Z189043AYBX0
never      never      NN 1561B0C71A8B2706 BX YBX0311 19950511S101702A044343AYBX0
never      never      NN 157D332D0550BDB2 BX YBX0311 19951102S101702A048803AYBX0
never      never      NN 15941BBC05159502 BX YBX0311 19960327101616S101702Z24063
never      never      NN 159681200895446C BX YBX0311 19960411160908S101702A05322
never      never      NN 159682CC1D267992 BX YBX0311 19960411170950S101702A05322
never      never      NN 15971ECB1DA3822C BX YBX0311 19960415141359S101702Z24357
never      never      NN 159722F91585F2FE BX YBX0311 19960415164333S101702Z24361
never      never      NN 1597252E09386C10 BX YBX0311 19960415180232S101702Z24363
never      never      NN 15972745155833D2 BX YBX0311 19960415191722S101702Z24364
never      never      NN 159748B81003BA9E BX YBX0311 19960416151429S101702Z24380
never      never      NN 15976D991D7CDA82 BX YBX0311 19960417131431S101702Z24408
never      never      NN 1597903017420BBE BX YBX0311 19960418095238S101702Z24422
never      never      NN 159831BA0D5EE4DC BX YBX0311 19960422101406S101702Z24464
never      never      NN 1598332E1C29CC10 BX YBX0311 19960422110638S101702Z24467
never      never      NN 1599CBB81AE369D0 BX YBX0311 19960502144753S101702A05376
never      never      NN 15A1335E1F997436 BX YBX0311 19960618173627S101702Z25357
never      never      NN 15A179A51E86CDC2 BX YBX0311 19960620113120S101702Z25396
never      never      NN 15A3B56317BBB064 BX YBX0311 19960704163425S101702A05521
never      never      NN 15A4CA4A0322036E BX YBX0311 19960711134555S101702A05574
never      never      NN 15A7C1460378D528 BX YBX0311 19960730103037S101702Z25999
never      never      NN 15A7C6CC1C6A438A BX YBX0311 19960730134827S101702Z25999
never      never      NN 15A938CD172EC0B0 BX YBX0311 19960808183112S101702A05620
never      never      NN 15B200200B80CF70 BX YBX0311 19961003150552S101702A05748
never      never      NN 15B2029D0C7CFC30 BX YBX0311 19961003163431S101702A05748
never      never      NN 15B2EF2A1ED07B58 BX YBX0311 19961009134202S101702Z26995
never      never      NN 15B54BB705E80C82 BX YBX0311 19961024141922S101702A05787
never      never      NN 15BD048D164A21A0 BX YBX0311 19961212173254S101702A05967
never      never      NN 15CFB346118B6B8C BX YBX0311 19970410143100S101702A06303
never      never      NN 15D0CBB917158A90 BX YBX0311 19970417134902S101702A06320
never      never      NN 15D0CCBB06F0E2EA BX YBX0311 19970417142628S101702A06320
never      never      NN 15D8853D1F056A3A BX YBX0311 19970605172721S101702A06422
never      never      NN 15DCE95D18BB4012 BX YBX0311 19970703160008S101702A06492
never      never      NN 15DE1C6210BDD89C BX YBX0311 19970711071158S101702Z32084
never      never      NN 15DF180005AF0A52 BX YBX0311 19970717131546S101702A06536
never      never      NN 15DF185A1F941BE4 BX YBX0311 19970717133054S101702A06536
never      never      NN 15E002C71642A4E4 BX YBX0311 19970723092030S101702Z32387
never      never      NN 15E030DC18E09A2C BX YBX0311 19970724124832S101702A06549
never      never      NN 15E6CB4016FAA2EC BX YBX0311 19970904130822S101702A06649
never      never      NN 15E6CE9801253748 BX YBX0311 19970904151111S101702A06649
never      never      NN 1517FBD607FD5CC8 BX YBX0312
never      never      NN 153264EE08043EBE BX YBX0312 19940714161917S101702A03497
never      never      NN 153F9DD108F4D7C4 BX YBX0312 19941006193205S101702A03759
never      never      NN 1540AEA618EB03C6 BX YBX0312 19941013141433S101702A03823
never      never      NN 155D263E150A5D2C BX YBX0312 19950412S101702A043533AYBX0
never      never      NN 155E622604D35082 BX YBX0312 19950420S101702A043759AYBX0
never      never      NN 157D332B0A0B7E30 BX YBX0312 19951102S101702A048803AYBX0
never      never      NN 15941BBB0BF5B9D6 BX YBX0312 19960327101618S101702Z24063
never      never      NN 1596811F09BF9F52 BX YBX0312 19960411160910S101702A05322
never      never      NN 159682CB0B2DF134 BX YBX0312 19960411170951S101702A05322
never      never      NN 1599CBBC015EEAE0 BX YBX0312 19960502144754S101702A05376
never      never      NN 15A179A51B20272C BX YBX0312 19960620113121S101702Z25396
never      never      NN 15A3B5630AF705BA BX YBX0312 19960704163425S101702A05521
never      never      NN 15A4CA510C99DEFE BX YBX0312 19960711134559S101702A05574
never      never      NN 15A7C1451DC36FD8 BX YBX0312 19960730103038S101702Z25999
never      never      NN 15A7C6CC16A54468 BX YBX0312 19960730134828S101702Z25999
never      never      NN 15A938D01CEA5422 BX YBX0312 19960808183113S101702A05620
never      never      NN 15B2001F0F5C32C2 BX YBX0312 19961003150554S101702A05748
never      never      NN 15B2029D033D3538 BX YBX0312 19961003163432S101702A05748
never      never      NN 15C28557101E932E BX YBX0312 19970116175259S101702A06089
never      never      NN 15CFB33B0B681EE6 BX YBX0312 19970410143101S101702A06303
never      never      NN 15D0CBB81D354FFA BX YBX0312 19970417134903S101702A06320
never      never      NN 15D0CCBD1491C23A BX YBX0312 19970417142629S101702A06320
never      never      NN 15D8853D064FD986 BX YBX0312 19970605172722S101702A06422
never      never      NN 15D9983E03755D82 BX YBX0312 19970612132948S101702A06457
never      never      NN 15DCE95A1C555F2A BX YBX0312 19970703160008S101702A06492
never      never      NN 15DDA34A1971DA6E BX YBX0312 19970708065743S101702Z32010
never      never      NN 15DDFE000D06E702 BX YBX0312 19970710130348S101702A06520
never      never      NN 15DF17FF01855A46 BX YBX0312 19970717131547S101702A06536
never      never      NN 15DF185C07C25A74 BX YBX0312 19970717133055S101702A06536
never      never      NN 15E002C71946719A BX YBX0312 19970723092031S101702Z32387
never      never      NN 15E030D51FF9926A BX YBX0312 19970724124835S101702A06549
never      never      NN 1516E62916E6DCBC BX YBX0313
never      never      NN 153264EC18C3BC18 BX YBX0313 19940714161918S101702A03497
never      never      NN 153F9DCF12275A92 BX YBX0313 19941006193206S101702A03759
never      never      NN 1540AEA70B5A92B4 BX YBX0313 19941013141434S101702A03823
never      never      NN 155D263D1BB91C1E BX YBX0313 19950412S101702A043533AYBX0
never      never      NN 157D33291FDAFD5C BX YBX0313 19951102S101702A048803AYBX0
never      never      NN 1582314E009C9376 BX YBX0313 19951204S101702Z222592AYBX0
never      never      NN 1582B64D0AF8ABF8 BX YBX0313 19951207S101702A050132AYBX0
never      never      NN 15941BBB02F08FC2 BX YBX0313 19960327101619S101702Z24063
never      never      NN 1596811E13F50B5C BX YBX0313 19960411160913S101702A05322
never      never      NN 159682CB0D6E49BE BX YBX0313 19960411170951S101702A05322
never      never      NN 15A4CA4F184F10C2 BX YBX0313 19960711134603S101702A05574
never      never      NN 15A7C1450E3FF328 BX YBX0313 19960730103039S101702Z25999
never      never      NN 15A7C6CC0CAD717A BX YBX0313 19960730134829S101702Z25999
never      never      NN 15A938CC16BE299E BX YBX0313 19960808183114S101702A05620
never      never      NN 15B2001F0323D070 BX YBX0313 19961003150554S101702A05748
never      never      NN 15B2029C1292CB4A BX YBX0313 19961003163433S101702A05748
never      never      NN 15CFB34314D5BFF0 BX YBX0313 19970410143102S101702A06303
never      never      NN 15D0CBB70926EE64 BX YBX0313 19970417134905S101702A06320
never      never      NN 15D0CCBC1F143758 BX YBX0313 19970417142630S101702A06320
never      never      NN 15D8853C122DD322 BX YBX0313 19970605172723S101702A06422
never      never      NN 15DCE95B0CCF5F5A BX YBX0313 19970703160009S101702A06492
never      never      NN 15DF17FD0DC03A52 BX YBX0313 19970717131547S101702A06536
never      never      NN 15DF185B19886000 BX YBX0313 19970717133056S101702A06536
never      never      NN 15E002C711B32726 BX YBX0313 19970723092031S101702Z32387
never      never      NN 15E030DB1C9062E2 BX YBX0313 19970724124837S101702A06549
never      never      NN 15EB32B410F0C588 BX YBX0313 19971002134434S101702A06707
never      never      NN 160F56EE071F7EDA BX YBX0313 19980520145159S101702A07269
never      never      NN 15B2002000B550CE BX YBX0320 19961003150555S101702A05748
never      never      NN 15B2029D0345B242 BX YBX0320 19961003163434S101702A05748
never      never      NN 15C285560E4FEF82 BX YBX0320 19970116175300S101702A06089
never      never      NN 15CFB35107DA49EC BX YBX0320 19970410143103S101702A06303
never      never      NN 15D8853800DAC4EA BX YBX0320 19970605172724S101702A06422
never      never      NN 15DCE95D0B47FDE2 BX YBX0320 19970703160010S101702A06492
never      never      NN 15DDA4B911D2643C BX YBX0320 19970708074923S101702Z32011
never      never      NN 15DDA6051ECDC0F6 BX YBX0320 19970708083532S101702Z32012
never      never      NN 15DDA6A517E6EA46 BX YBX0320 19970708085756S101702Z32012
never      never      NN 15DDA77B0568987A BX YBX0320 19970708092727S101702Z32013
never      never      NN 15DDFE071D0A49CE BX YBX0320 19970710130345S101702A06520
never      never      NN 15DF17FF112F1BE0 BX YBX0320 19970717131548S101702A06536
never      never      NN 15DF185B0C43B52F BX YBX0320 19970717133057S101702A06536
never      never      NN 15E002CF0F2B1003 BX YBX0320 19970723092127S101702Z32387
never      never      NN 15E030D601AD678C BX YBX0320 19970724124839S101702A06549
never      never      NN 1516E62C137D5C3A BX YBX0321
never      never      NN 153264EC0AA30052 BX YBX0321 19940714161919S101702A03497
never      never      NN 153F9DD01CA9EE92 BX YBX0321 19941006193207S101702A03759
never      never      NN 1540AEA716201D84 BX YBX0321 19941013141435S101702A03823
never      never      NN 155D263E1244FDDC BX YBX0321 19950412S101702A043533AYBX0
never      never      NN 157D332A085A6C04 BX YBX0321 19951102S101702A048803AYBX0
never      never      NN 1594229317A53EF6 BX YBX0321 19960327142142S101702Z24075
never      never      NN 1596811E0DE1D5D2 BX YBX0321 19960411160914S101702A05322
never      never      NN 159682CB04B3976A BX YBX0321 19960411170952S101702A05322
never      never      NN 1596CD6A1F32CB0C BX YBX0321 19960413134150S101702Z24337
never      never      NN 1596D2641F8A642E BX YBX0321 19960413163905S101702Z24338
never      never      NN 1599CBC411156162 BX YBX0321 19960502144748S101702A05376
never      never      NN 15A0662C05DCE642 BX YBX0321 19960613151234S101702A05492
never      never      NN 15A080C10A9A4BAC BX YBX0321 19960614070338S101702Z25274
never      never      NN 15A0811E1115DF82 BX YBX0321 19960614071636S101702Z25274
never      never      NN 15A3B55F01EC0ED2 BX YBX0321 19960704163427S101702A05521
never      never      NN 15A4CA480F1C4FF0 BX YBX0321 19960711134539S101702A05574
never      never      NN 15A7C1A2045F6494 BX YBX0321 19960730104336S101702Z25999
never      never      NN 15A7C6F10DBAC6B4 BX YBX0321 19960730135345S101702Z26005
never      never      NN 15AA50F2045D52C4 BX YBX0321 19960815173129S101702A05635
never      never      NN 15B2001B1AD70544 BX YBX0321 19961003150555S101702A05748
never      never      NN 15B2029A154E50C2 BX YBX0321 19961003163434S101702A05748
never      never      NN 15CFB3450ED969AC BX YBX0321 19970410143104S101702A06303
never      never      NN 15D0CBB80FAD6102 BX YBX0321 19970417134905S101702A06320
never      never      NN 15D0CCBA04FF6F9C BX YBX0321 19970417142631S101702A06320
never      never      NN 15D885321E817402 BX YBX0321 19970605172725S101702A06422
never      never      NN 15DCE95B0404DD6C BX YBX0321 19970703160011S101702A06492
never      never      NN 15DDA4B911C4600E BX YBX0321 19970708074924S101702Z32011
never      never      NN 15DDA6040C4E5E70 BX YBX0321 19970708083532S101702Z32012
never      never      NN 15DDA6A512ADDB70 BX YBX0321 19970708085757S101702Z32012
never      never      NN 15DDA77B023A932A BX YBX0321 19970708092728S101702Z32013
never      never      NN 15DDFE0713FD52F0 BX YBX0321 19970710130346S101702A06520
never      never      NN 15DF17F6166F71AF BX YBX0321 19970717131549S101702A06536
never      never      NN 15DF185B1E67D71A BX YBX0321 19970717133058S101702A06536
never      never      NN 15E002CE0290DF54 BX YBX0321 19970723092128S101702Z32387
never      never      NN 15E030D7095E96AF BX YBX0321 19970724124827S101702A06549
never      never      NN 1516E64C0425C854 BX YBX0322
never      never      NN 153264ED162856B6 BX YBX0322 19940714161906S101702A03497
never      never      NN 153F9DD21A270844 BX YBX0322 19941006193208S101702A03759
never      never      NN 1540AEA40F3B6112 BX YBX0322 19941013141416S101702A03823
never      never      NN 155D263F0256AA00 BX YBX0322 19950412S101702A043533AYBX0
never      never      NN 155E622604C3A1C6 BX YBX0322 19950420S101702A043759AYBX0
never      never      NN 157D332B13FE5C94 BX YBX0322 19951102S101702A048803AYBX0
never      never      NN 1594226F03985B38 BX YBX0322 19960327141624S101702Z24075
never      never      NN 1596811F044C267E BX YBX0322 19960411160917S101702A05322
never      never      NN 159682C916255372 BX YBX0322 19960411170953S101702A05322
never      never      NN 1596CD6B0BF18AE4 BX YBX0322 19960413134151S101702Z24337
never      never      NN 1599CBC41E4A5392 BX YBX0322 19960502144750S101702A05376
never      never      NN 15A0662E03528420 BX YBX0322 19960613151235S101702A05492
never      never      NN 15A080C10701BF28 BX YBX0322 19960614070339S101702Z25274
never      never      NN 15A0811119DA5484 BX YBX0322 19960614071450S101702Z25274
never      never      NN 15A3B5650251D4C0 BX YBX0322 19960704163429S101702A05521
never      never      NN 15A4CA4811445A0E BX YBX0322 19960711134542S101702A05574
never      never      NN 15A7C1A208FF7610 BX YBX0322 19960730104336S101702Z25999
never      never      NN 15A7C6E106F235C2 BX YBX0322 19960730135122S101702Z26005
never      never      NN 15A938D019271ACC BX YBX0322 19960808183124S101702A05620
never      never      NN 1516E6481F5112F8 BX YBX0323
never      never      NN 153264EB1CB75F7E BX YBX0323 19940714161908S101702A03497
never      never      NN 153F9DD00CED9794 BX YBX0323 19941006193209S101702A03759
never      never      NN 1540AE9D08925546 BX YBX0323 19941013141420S101702A03823
never      never      NN 155D263D13F05A5C BX YBX0323 19950412S101702A043533AYBX0
never      never      NN 157D332A063DC782 BX YBX0323 19951102S101702A048803AYBX0
never      never      NN 159422991D21EB22 BX YBX0323 19960327142214S101702Z24075
never      never      NN 1596811C1BFEA9A8 BX YBX0323 19960411160918S101702A05322
never      never      NN 159682CA10363E50 BX YBX0323 19960411170953S101702A05322
never      never      NN 1596CD6A1B0448C6 BX YBX0323 19960413134151S101702Z24337
never      never      NN 1599CBBA1BEBF8CA BX YBX0323 19960502144751S101702A05376
never      never      NN 15A0662C06291CC2 BX YBX0323 19960613151236S101702A05492
never      never      NN 15A080C214C15398 BX YBX0323 19960614070339S101702Z25274
never      never      NN 15A0811E111DEFF2 BX YBX0323 19960614071637S101702Z25274
never      never      NN 15A3B5621E047D64 BX YBX0323 19960704163416S101702A05521
never      never      NN 15A4CA491DD17A24 BX YBX0323 19960711134551S101702A05574
never      never      NN 15A7C1A2007B8B2C BX YBX0323 19960730104336S101702Z25999
never      never      NN 15A7C6F10B10C57A BX YBX0323 19960730135346S101702Z26005
never      never      NN 15AA50D313BAACC8 BX YBX0323 19960815173146S101702A05635
never      never      NN 15B2001C0BCBC75E BX YBX0323 19961003150556S101702A05748
never      never      NN 15B202990AE69FD4 BX YBX0323 19961003163435S101702A05748
never      never      NN 15CFB33A0A9B41A8 BX YBX0323 19970410143107S101702A06303
never      never      NN 15D88538130A01B6 BX YBX0323 19970605172726S101702A06422
never      never      NN 15DCE94C10359FEE BX YBX0323 19970703160012S101702A06492
never      never      NN 15DF17F51C4D0118 BX YBX0323 19970717131550S101702A06536
never      never      NN 15DF186409B3ACAC BX YBX0323 19970717133101S101702A06536
never      never      NN 15E002CD1DA6D38E BX YBX0323 19970723092129S101702Z32387
never      never      NN 15E030DB0890851C BX YBX0323 19970724124829S101702A06549
never      never      NN 15EB32B4148D7FCF BX YBX0323 19971002134435S101702A06707
never      never      NN 160F56EA11499522 BX YBX0323 19980520145201S101702A07269
never      never      NN 1524170C0EFD27C2 BX YBX0341 19940414155510S101702A03340
never      never      NN 1527643A1C7926E6 BX YBX0341 19940505160752S101702A03361
never      never      NN 153F9DD504C0AC28 BX YBX0341 19941006193211S101702A03759
never      never      NN 155D263D15F90954 BX YBX0341 19950412S101702A043533AYBX0
never      never      NN 155FA55E0D51C342 BX YBX0341 19950428S101702Z187241AYBX0
never      never      NN 15609508105B9CF8 BX YBX0341 19950504S101702A044162AYBX0
never      never      NN 15A938D0146A0122 BX YBX0341 19960808183116S101702A05620
never      never      NN 152416F61F5DDD16 BX YBX0342 19940414155516S101702A03340
never      never      NN 1527643A1702559A BX YBX0342 19940505160753S101702A03361
never      never      NN 153F9DD306D678DE BX YBX0342 19941006193213S101702A03759
never      never      NN 155D263D108760DC BX YBX0342 19950412S101702A043533AYBX0
never      never      NN 15A938CC00667982 BX YBX0342 19960808183116S101702A05620
never      never      NN 152417031461C6F2 BX YBX0343 19940414155517S101702A03340
never      never      NN 153F9DD10CA45788 BX YBX0343 19941006193214S101702A03759
never      never      NN 155D263C149C5570 BX YBX0343 19950412S101702A043533AYBX0
never      never      NN 15A938CC1579D790 BX YBX0343 19960808183117S101702A05620
never      never      NN 1516E6321D4DD2A8 BX YBX0361
never      never      NN 153F9DD40F45E0FE BX YBX0361 19941006193216S101702A03759
never      never      NN 155D263D1C5CD71E BX YBX0361 19950412S101702A043533AYBX0
never      never      NN 157D332817D7CE46 BX YBX0361 19951102S101702A048803AYBX0
never      never      NN 1596811C0257426A BX YBX0361 19960411160919S101702A05322
never      never      NN 159682C71D836602 BX YBX0361 19960411170954S101702A05322
never      never      NN 15A1786F08528712 BX YBX0361 19960620104731S101702Z25393
never      never      NN 15A3B55E1F0385B0 BX YBX0361 19960704163417S101702A05521
never      never      NN 15A938CE14708904 BX YBX0361 19960808183119S101702A05620
never      never      NN 1515CC090B9D52AC BX YBX0362
never      never      NN 153F9DD0057E2130 BX YBX0362 19941006193218S101702A03759
never      never      NN 155D263C1DA479CE BX YBX0362 19950412S101702A043533AYBX0
never      never      NN 157D332819D4E5DE BX YBX0362 19951102S101702A048803AYBX0
never      never      NN 1596811814BBA5A6 BX YBX0362 19960411160920S101702A05322
never      never      NN 159682C910E9890A BX YBX0362 19960411170954S101702A05322
never      never      NN 15A1786F07B82056 BX YBX0362 19960620104732S101702Z25393
never      never      NN 15A3B562165676B2 BX YBX0362 19960704163419S101702A05521
never      never      NN 15A938D0009B6514 BX YBX0362 19960808183120S101702A05620
never      never      NN 1515CC08163BC306 BX YBX0363
never      never      NN 153F9DD017F9257E BX YBX0363 19941006193219S101702A03759
never      never      NN 155D263E009C9196 BX YBX0363 19950412S101702A043533AYBX0
never      never      NN 157D33231CD9725A BX YBX0363 19951102S101702A048803AYBX0
never      never      NN 1596811B0926CAE6 BX YBX0363 19960411160921S101702A05322
never      never      NN 159682C90FA3739A BX YBX0363 19960411170955S101702A05322
never      never      NN 15A1786F07ADAD66 BX YBX0363 19960620104733S101702Z25393
never      never      NN 15A3B55E1EDCD382 BX YBX0363 19960704163424S101702A05521
never      never      NN 15A938CE11DBCD08 BX YBX0363 19960808183121S101702A05620
never      never      NN 1516E63609520A58 BX YBX0381
never      never      NN 153264EC014C1AD0 BX YBX0381 19940714161912S101702A03497
never      never      NN 153F9DD510104A74 BX YBX0381 19941006193220S101702A03759
never      never      NN 1540AE9D05DBC006 BX YBX0381 19941013141427S101702A03823
never      never      NN 155D263F06EDF958 BX YBX0381 19950412S101702A043533AYBX0
never      never      NN 157D332B0E36B73A BX YBX0381 19951102S101702A048803AYBX0
never      never      NN 15941D1A1D252970 BX YBX0381 19960327110524S101702Z24066
never      never      NN 1596811F08577916 BX YBX0381 19960411160922S101702A05322
never      never      NN 159682CB0E6350B6 BX YBX0381 19960411170955S101702A05322
never      never      NN 15A938D000ABCED8 BX YBX0381 19960808183121S101702A05620
never      never      NN 15CFB33A1E6D8108 BX YBX0381 19970410143108S101702A06303
never      never      NN 15D8853A1C0E90A4 BX YBX0381 19970605172728S101702A06422
never      never      NN 15DCE95B04C616B4 BX YBX0381 19970703160012S101702A06492
never      never      NN 15DF17F41751D58E BX YBX0381 19970717131551S101702A06536
never      never      NN 15DF1862019374D8 BX YBX0381 19970717133103S101702A06536
never      never      NN 1516E6440D80E304 BX YBX0382
never      never      NN 151B47D002F8C64A BX YBX0382 19940217143416S101702A03150
never      never      NN 151FAFB2178CABE6 BX YBX0382 19940317152239S101702A03245
never      never      NN 153264D21FC2586C BX YBX0382 19940714161913S101702A03497
never      never      NN 153F9DD5190A965C BX YBX0382 19941006193223S101702A03759
never      never      NN 1540AE9D0FE4A544 BX YBX0382 19941013141428S101702A03823
never      never      NN 155D263F0C849DE0 BX YBX0382 19950412S101702A043533AYBX0
never      never      NN 155E6224079BF6F8 BX YBX0382 19950420S101702A043759AYBX0
never      never      NN 157D332B1B1D0434 BX YBX0382 19951102S101702A048803AYBX0
never      never      NN 15941D1A1C21EDD8 BX YBX0382 19960327110525S101702Z24066
never      never      NN 1596811E1D9F7546 BX YBX0382 19960411160923S101702A05322
never      never      NN 159682C91FBEB76E BX YBX0382 19960411170956S101702A05322
never      never      NN 1599CBB7047028D8 BX YBX0382 19960502144752S101702A05376
never      never      NN 15A938D00AFBECBE BX YBX0382 19960808183122S101702A05620
never      never      NN 15B2001F1BFA00D6 BX YBX0382 19961003150556S101702A05748
never      never      NN 15B2029C05524AC2 BX YBX0382 19961003163435S101702A05748
never      never      NN 15C28556133EC9B8 BX YBX0382 19970116175301S101702A06089
never      never      NN 15CFB3450E9DAF24 BX YBX0382 19970410143109S101702A06303
never      never      NN 15D8853C1B6DF5B6 BX YBX0382 19970605172730S101702A06422
never      never      NN 15DCE94E1744EEAC BX YBX0382 19970703160012S101702A06492
never      never      NN 15DF17F50CF6D250 BX YBX0382 19970717131552S101702A06536
never      never      NN 15DF18641CBF3C6A BX YBX0382 19970717133104S101702A06536
never      never      NN 1516E65801A2C496 BX YBX0383
never      never      NN 153264EA03C2BE8C BX YBX0383 19940714161914S101702A03497
never      never      NN 153F9DD5098442D2 BX YBX0383 19941006193225S101702A03759
never      never      NN 1540AE9C12F0F080 BX YBX0383 19941013141431S101702A03823
never      never      NN 155D263B02222BD6 BX YBX0383 19950412S101702A043533AYBX0
never      never      NN 157D33261FE0BCEC BX YBX0383 19951102S101702A048803AYBX0
never      never      NN 15941D1A084E4444 BX YBX0383 19960327110526S101702Z24066
never      never      NN 1596811C0CBC01B2 BX YBX0383 19960411160927S101702A05322
never      never      NN 159682C50C3D2D6A BX YBX0383 19960411170956S101702A05322
never      never      NN 15A938CF0E5EA55C BX YBX0383 19960808183123S101702A05620
never      never      NN 15CFB34B19BCF5C2 BX YBX0383 19970410143110S101702A06303
never      never      NN 15D8853905F17870 BX YBX0383 19970605172732S101702A06422
never      never      NN 15DCE94C13ACAC67 BX YBX0383 19970703160013S101702A06492
never      never      NN 15DF17F31C504EAE BX YBX0383 19970717131553S101702A06536
never      never      NN 15DF18630EA3E700 BX YBX0383 19970717133105S101702A06536
never      never      NN 15EB32B80159F40A BX YBX0383 19971002134435S101702A06707
never      never      NY 183301791923BC7D BX YBXADBR CLOS0001835A25007A
never      never      NN 1515CC1B1AA08BAC BX YBXBI01
never      never      NN 152442BE014C38E6 BX YBXBI01 19940415175222S101702A03346
never      never      NN 152497B30A4C17CA BX YBXBI01 19940417194441S101702A03346
never      never      NN 152764351069AADE BX YBXBI01 19940505160733S101702A03357
never      never      NN 152856A412790D32 BX YBXBI01 19940511164541S101702A03420
never      never      NN 152996220CA98AFA BX YBXBI01 19940519151914S101702A03438
never      never      NN 153266DA1B805386 BX YBXBI01 19940714172642S101702A03577
never      never      NN 153F9DD60B8A0A02 BX YBXBI01 19941006193210S101702A03759
never      never      NN 155D263C097BBD46 BX YBXBI01 19950412S101702A043533AYBXB
never      never      NN 157D332E09B660B6 BX YBXBI01 19951102S101702A048803AYBXB
never      never      NN 1596812016DBA0C8 BX YBXBI01 19960411160928S101702A05322
never      never      NN 159682CC01CDCC68 BX YBXBI01 19960411170957S101702A05322
never      never      NN 1599CBBB03D51896 BX YBXBI01 19960502144752S101702A05376
never      never      NN 159F500F07FA42C2 BX YBXBI01 19960606171752S101702A05472
never      never      NN 15A938D10D219114 BX YBXBI01 19960808183118S101702A05620
never      never      NN 15B2001B1C9286C2 BX YBXBI01 19961003150557S101702A05748
never      never      NN 15B2029D0BDACE34 BX YBXBI01 19961003163436S101702A05748
never      never      NN 15BD048D073F608C BX YBXBI01 19961212173255S101702A05967
never      never      NN 15CFB35405DFBF5A BX YBXBI01 19970410143057S101702A06303
never      never      NN 15D885391779C6FB BX YBXBI01 19970605172716S101702A06422
never      never      NN 15DCE95E0156E8B0 BX YBXBI01 19970703160014S101702A06492
never      never      NN 15DF17F710332F76 BX YBXBI01 19970717131551S101702A06536
never      never      NN 15DF186511E6C2C8 BX YBXBI01 19970717133102S101702A06536
never      never      NN 15F80E06112DB78A BX YBXBI01 19971223090545S101702Z35232
never      never      NN 15FBB2F7122E46C8 BX YBXBI01 19980115133559S101702A06935
never      never      NN 16173B98043FD920 BX YBXBI01 19980709201647S101702A07366
never      never      NN 1617501718E9DDFA BX YBXBI01 19980710082952S101702A07366
never      never      NY 1515CC14146AF5C4 BX YBXBI02
never      never      NY 153266CC06950520 BX YBXBI02 19940714172643S101702A03577
never      never      NY 153F9DCF159A5A4A BX YBXBI02 19941006193226S101702A03759
never      never      NY 155D263A1BE3E226 BX YBXBI02 19950412S101702A043533AYBXB
never      never      NY 157D3321049912F8 BX YBXBI02 19951102S101702A048803AYBXB
never      never      NY 1596811E0E952A20 BX YBXBI02 19960411160932S101702A05322
never      never      NY 159682CA15F0B836 BX YBXBI02 19960411170957S101702A05322
never      never      NY 15976C0F0BF07EB4 BX YBXBI02 19960417121909S101702Z24406
never      never      NY 1599CBC303481EC6 BX YBXBI02 19960502144753S101702A05376
never      never      NY 159AE3411AACAFBC BX YBXBI02 19960509133250S101702A05405
never      never      NY 159FE3750F03EAA2 BX YBXBI02 19960610091341S101702Z25197
never      never      NY 15A065A211473E46 BX YBXBI02 19960613145220S101702A05488
never      never      NY 15A938CD19801C72 BX YBXBI02 19960808183124S101702A05620
never      never      NN 15B2001A082C1E72 BX YBXBI02 19961003150557S101702A05748
never      never      NN 15B2029B193C9E98 BX YBXBI02 19961003163436S101702A05748
never      never      NN 15BD048A0AC623A8 BX YBXBI02 19961212173256S101702A05967
never      never      NN 15CFB33B1E6D46A0 BX YBXBI02 19970410143058S101702A06303
never      never      NN 15D8853C0CCE4658 BX YBXBI02 19970605172718S101702A06422
never      never      NN 15DCE95A166E6354 BX YBXBI02 19970703160014S101702A06492
never      never      NN 15DF17FF0B5BC3B0 BX YBXBI02 19970717131554S101702A06536
never      never      NN 15DF18630359F1BA BX YBXBI02 19970717133106S101702A06536
never      never      NN 15F1CD80042EC1D0 BX YBXBI02 19971113142012S101702A06818
never      never      NN 16173B960230D682 BX YBXBI02 19980709201648S101702A07366
never      never      NN 1617502115928024 BX YBXBI02 19980710082953S101702A07366
never      never      NN 1515CC161CFB69BC BX YBXBI03
never      never      NN 153266D112454074 BX YBXBI03 19940714172644S101702A03577
never      never      NN 153F9DD30AA1AE10 BX YBXBI03 19941006193227S101702A03759
never      never      NN 155D2638146ED044 BX YBXBI03 19950412S101702A043533AYBXB
never      never      NN 157D332715BEAC82 BX YBXBI03 19951102S101702A048803AYBXB
never      never      NN 1596811E1CE8D736 BX YBXBI03 19960411160937S101702A05322
never      never      NN 159682CA0817474A BX YBXBI03 19960411170957S101702A05322
never      never      NN 15A938CF0B61F9A8 BX YBXBI03 19960808183125S101702A05620
never      never      NN 15B2001908A2BEF2 BX YBXBI03 19961003150558S101702A05748
never      never      NN 15B202991591C6E2 BX YBXBI03 19961003163436S101702A05748
never      never      NN 15BD04871D1AAE42 BX YBXBI03 19961212173257S101702A05967
never      never      NN 15CFB33513CD2048 BX YBXBI03 19970410143058S101702A06303
never      never      NN 15D88535191DE38F BX YBXBI03 19970605172719S101702A06422
never      never      NN 15DCE95503E123A4 BX YBXBI03 19970703160015S101702A06492
never      never      NN 15DF17FA13612488 BX YBXBI03 19970717131555S101702A06536
never      never      NN 15DF186406354B8E BX YBXBI03 19970717133107S101702A06536
never      never      NN 15EF99491675D14D BX YBXBI03 19971030134549S101702A06783
never      never      NY 16D27F481B54E74C CBRHCAUD CBRHCAUD 2001-10-13-07.26.46.
never      never      NY 175E0A8A1FBEA5F5 CBRHCAUD CBRHCAUD 2004-03-19-05.11.59.
never      never      NY 168751910186F7D0 CBRHCAUD CBRHCAUD UW71236HDZ11F0
never      never      NY 16D27F490D11FA4A CBRHCLDL CBRHCLDL 2001-10-13-07.26.50.
never      never      NY 175E0A8B0C9C2749 CBRHCLDL CBRHCLDL 2004-03-19-05.12.02.
never      never      NY 168751920A386B30 CBRHCLDL CBRHCLDL UW71236HDZ11F0
never      never      NY 16D27F481B7E1A9D CBRHCLLU CBRHCLLU 2001-10-13-07.26.46.
never      never      NY 175E0A8C1B88A0CC CBRHCLLU CBRHCLLU 2004-03-19-05.12.15.
never      never      NY 16875193133CA944 CBRHCLLU CBRHCLLU UW71236HDZ11F0
never      never      NY 16D27F4A1D9CBEA0 CBRHCLMK CBRHCLMK 2001-10-13-07.27.03.
never      never      NY 175E0A8D0AFC4313 CBRHCLMK CBRHCLMK 2004-03-19-05.12.19.
never      never      NY 168751941DE271C8 CBRHCLMK CBRHCLMK UW71236HDZ11F0
never      never      NY 16D27F4B1150FE60 CBRHCLSG CBRHCLSG 2001-10-13-07.27.08.
never      never      NY 175E0A900636073F CBRHCLSG CBRHCLSG 2004-03-19-05.12.43.
never      never      NY 1687519609210A50 CBRHCLSG CBRHCLSG UW71236HDZ11F0
never      never      NY 16D27FBC15DE355A CBRHTBSV CBRHTBSV 2001-10-13-07.42.57.
never      never      NY 175E0AC312892ED3 CBRHTBSV CBRHTBSV 2004-03-19-05.19.54.
never      never      NY 168751990A0FFBF0 CBRHTBSV CBRHTBSV UW71236HDZ11F0
never      never      NY 16D27FFE1791DFB1 CBRKCMD CBRKCMD 2001-10-13-07.52.12.04
never      never      NY 175E0AE316B8AB51 CBRKCMD CBRKCMD 2004-03-19-05.24.23.68
never      never      NY 1687519C0D8BBF84 CBRKCMD CBRKCMD UW71236HDZ11F0
never      never      NY 16D27FFD1ED3C060 CBRKCME CBRKCME 2001-10-13-07.52.05.55
never      never      NY 175E0AE401B3DC9A CBRKCME CBRKCME 2004-03-19-05.24.26.56
never      never      NY 1687519E0C2D38C0 CBRKCME CBRKCME UW71236HDZ11F0
never      never      NY 16D27FFD1720EAF2 CBRKCMF CBRKCMF 2001-10-13-07.52.03.53
never      never      NY 175E0AE31F83014F CBRKCMF CBRKCMF 2004-03-19-05.24.25.98
never      never      NY 1687519F1B2CB520 CBRKCMF CBRKCMF UW71236HDZ11F0
never      never      NY 16D27FFD1CC97878 CBRKCMI CBRKCMI 2001-10-13-07.52.05.02
never      never      NY 175E0AE400DA8001 CBRKCMI CBRKCMI 2004-03-19-05.24.26.34
never      never      NY 168751A10E0673A8 CBRKCMI CBRKCMI UW71236HDZ11F0
never      never      NY 16D27FFE05A081C2 CBRKCMR CBRKCMR 2001-10-13-07.52.07.33
never      never      NY 1772BC8E068E4349 CBRKCMR CBRKCMR UA12772HDZ11J0
never      never      NY 168751A30435DE34 CBRKCMR CBRKCMR UW71236HDZ11F0
never      never      NY 16862E761A2ED30C CBRKCMT CBRKCMT 439276300377892470
never      never      NY 16D27FFC1D9C3C4C CBRKCMT CBRKCMT 496778316382894076
never      never      NY 1772BC951EE6DC09 CBRKCMT CBRKCMT 518446089393395349
never      never      NY 16D27FFD14006BF9 CBRKISQL CBRKISQL 2001-10-13-07.52.02.
never      never      NY 175E0AE9193B5A99 CBRKISQL CBRKISQL 2004-03-19-05.25.14.
never      never      NY 168751A4197A2A6C CBRKISQL CBRKISQL UW71236HDZ11F0
never      never      NY 15BCFF9211D7D5F2 CC CC5160 19961212143434S101702A058962
never      never      NY 14BBBCEB10562DAC CD CD7060
never      never      NY 1607CC87009377F2 CD CD7360 19980402152138S101702A071420
never      never      NY 1607D0CE1E40D76C CD CD7360 19980402174642S101702A071420
never      never      NY 160E69CA02CA2E04 CD CD7360 19980514170508S101702M000860
never      never      NN 1579EA0719E61C64 CD CD7400 19951012S101702A048447ACD740
never      never      NY 15EA18DF00A0C786 CD CD8070 19970925133611S101702A066943
never      never      NN 159F6A5202352D98 CD FC0100 19960607085733S101702A054822
never      never      NN 15F74CAA04C50F62 CD FC0100 19971218134434S101702A069142
never      never      NY 15B104390214625A CD KD0600 19960927085001S101702Z268024
never      never      NY 15B1FEA60B8D931A CD KD0600 19961003141208S101702A057537
never      never      NY 15DAB25E0DF199C4 CD KD0600 19970619134842S101702A064764
never      never      NN 15077C791908E980 CD YCD0020
never      never      NN 151FB5DB02B76488 CD YCD0020 19940317190318S101702A03246
never      never      NN 15305500137FDB66 CD YCD0020 19940701132652S101702A03521
never      never      NN 1530F1710F009558 CD YCD0020 19940705104246S101702A03521
never      never      NN 1530F70614D77016 CD YCD0020 19940705140411S101702A03521
never      never      NN 1530F7A51AC00442 CD YCD0020 19940705142646S101702A03521
never      never      NN 156734E0079F570E CD YCD0020 19950615S101702A045345AYCD0
never      never      NN 156967FE0AEFA1D0 CD YCD0020 19950629S101702A045492AYCD0
never      never      NN 157F6A4E085AAA98 CD YCD0020 19951116S101702A049627AYCD0
never      never      NN 158B83D1176585EC CD YCD0020 19960201S101702A051689AYCD0
never      never      NN 159450A90E30F3E8 CD YCD0020 19960328175022S101702A05306
never      never      NN 15A3B5BA1726FE08 CD YCD0020 19960704164722S101702A05552
never      never      NN 15A3B6F901A7DD12 CD YCD0020 19960704173143S101702A05552
never      never      NN 15A3CF05023D424A CD YCD0020 19960705075225S101702A05552
never      never      NN 15AD97B41E3F7E22 CD YCD0020 19960905135843S101702A05681
never      never      NY 15FF00181D660876 CD YCD110 19980205134459S101702A070170
never      never      NN 1540AE5C1A55C162 CD YCDCIFD 19941013140654S101702A03815
never      never      NN 1556AEC90FAD7926 CD YCDCIFD 19950302135905S101702A04246
never      never      NN 1568502611151630 CD YCDCIFD 19950622S101702M000590AYCDC
never      never      NN 156FFEBB0A81C644 CD YCDCIFD 19950810S101702A046728AYCDC
never      never      NN 15921ACF14E4FCE8 CD YCDCIFD 19960314161808S101702M00066
never      never      NN 15967DA613BB57BC CD YCDCIFD 19960411140629S101702A05334
never      never      NN 1597995A15E7FACA CD YCDCIFD 19960418152009S101702M00068
never      never      NN 159BD63C1139329C CD YCDCIFD 19960515142952S101702A05406
never      never      NN 159BD6FD14A669EE CD YCDCIFD 19960515145654S101702A05406
never      never      NN 15AD9A581B4F93A6 CD YCDCIFD 19960905153115S101702M00071
never      never      NN 15B899580C8E1338 CD YCDCIFD 19961114144241S101702M00074
never      never      NN 15B89EB512A292AE CD YCDCIFD 19961114175616S101702M00074
never      never      NN 15B8A1D910952E1A CD YCDCIFD 19961114194635S101702M00074
never      never      NN 15BBE8AC12C0D3EA CD YCDCIFD 19961205161342S101702A05952
never      never      NN 15C91AA00277CADC CD YCDCIFD 19970227151435S101702A06186
never      never      NN 15CC68351522E6DA CD YCDCIFD 19970320153542S101702M00077
never      never      NN 15E3800816237E30 CD YCDCIFD 19970814141023S101702M00080
never      never      NN 15F2E5D6066FBD54 CD YCDCIFD 19971120133445S101702A06824
never      never      NN 15FBBA17119631CA CD YCDCIFD 19980115174306S101702M00085
never      never      NY 17C52B9D06384F83 CD YCDCL01 CIIN000149
never      never      NN 1514B70C12D99AC6 CD YCDGETJ
never      never      NY 151FB0AC01F220D4 CD YCDGETJ 19940317160328S101702A03255
never      never      NY 153054EE18466F2E CD YCDGETJ 19940701132442S101702A03521
never      never      NY 1530F1490653D362 CD YCDGETJ 19940705103237S101702A03521
never      never      NY 1530F6DF06087278 CD YCDGETJ 19940705140220S101702A03521
never      never      NY 1530F7891CBA21E2 CD YCDGETJ 19940705142430S101702A03521
never      never      NY 1501FC62060A9EE0 CD YCDGETP
never      never      NN 1501FC601768D118 CD YCDGETV
never      never      NN 151FB0A70E8B697C CD YCDGETV 19940317160338S101702A03255
never      never      NN 153054EE141462B6 CD YCDGETV 19940701132444S101702A03521
never      never      NN 1530F14B1B482D88 CD YCDGETV 19940705103237S101702A03521
never      never      NN 1530F6DF0AA29580 CD YCDGETV 19940705140221S101702A03521
never      never      NN 1530F78910EB04BA CD YCDGETV 19940705142431S101702A03521
never      never      NY 1587169C1C253D90 CD YCDT10 19960104S101702A050732AYCDT1
never      never      NY 158831A10E76C474 CD YCDT10 19960111S101702A050979AYCDT1
never      never      NY 159797650F79D1D2 CD YCDT10 19960418140935S101702A053432
never      never      NY 15A066AD1C558870 CD YCDT10 19960613152928S101702A054996
never      never      NY 1530F15801C41E26 CD YCDUP08 19940705103248S101702A03521
never      never      NY 1530F6EB0732D234 CD YCDUP08 19940705140233S101702A03521
never      never      NY 1530F7941949B6D8 CD YCDUP08 19940705142445S101702A03521
never      never      NN 1501FC6F0E68F5F8 CD YCDUP10
never      never      NN 1520C9941AA56AE6 CD YCDUP10 19940324153717S101702A03271
never      never      NN 1520CF8C0430E5D4 CD YCDUP10 19940324191112S101702A03271
never      never      NN 1520D16C0A4DF29E CD YCDUP10 19940324201829S101702A03271
never      never      NN 153054F71D673956 CD YCDUP10 19940701132538S101702A03521
never      never      NN 1530F15A1892E6A2 CD YCDUP10 19940705103250S101702A03521
never      never      NN 1530F6F6000FEAD4 CD YCDUP10 19940705140235S101702A03521
never      never      NN 1530F78816A1F872 CD YCDUP10 19940705142447S101702A03521
never      never      NN 15921ADC03986FE2 CD YCDUP10 19960314161929S101702M00066
never      never      NY 15AD9A5E11A26544 CD YCDUP10 19960905153351S101702M00071
never      never      NY 15B6669C1A565FA0 CD YCDUP10 19961031150558S101702M00073
never      never      NY 15B8994607BDC728 CD YCDUP10 19961114144211S101702M00074
never      never      NY 15B89EB501B46BC4 CD YCDUP10 19961114175618S101702M00074
never      never      NY 15B8A1C010F53106 CD YCDUP10 19961114194602S101702M00074
never      never      NN 1520C9B40B86C616 CD YCDUP14 19940324153826S101702A03271
never      never      NN 1520CF8D13D1E3B4 CD YCDUP14 19940324191114S101702A03271
never      never      NN 1520D16711261DC8 CD YCDUP14 19940324201833S101702A03271
never      never      NN 153054FB064D3EEE CD YCDUP14 19940701132551S101702A03521
never      never      NN 1530F15D1D69D956 CD YCDUP14 19940705103255S101702A03521
never      never      NN 1530F6F81E751416 CD YCDUP14 19940705140239S101702A03521
never      never      NN 1530F79D1AFD0B1A CD YCDUP14 19940705142451S101702A03521
never      never      NN 15921ADE0FA3CF08 CD YCDUP14 19960314161951S101702M00066
never      never      NN 15AD9A321DB80298 CD YCDUP14 19960905152821S101702M00071
never      never      NN 15B666A81CF5C154 CD YCDUP14 19961031150600S101702M00073
never      never      NN 15B899461C768258 CD YCDUP14 19961114144213S101702M00074
never      never      NN 15B89EAC0CC4C672 CD YCDUP14 19961114175620S101702M00074
never      never      NN 15B8A1C310FEE20E CD YCDUP14 19961114194605S101702M00074
never      never      NY 153054ED02FB5328 CD YCDUP27 19940701132626S101702A03521
never      never      NY 1530F1631F6D1C68 CD YCDUP27 19940705104208S101702A03521
never      never      NY 1530F6FE0EAFF784 CD YCDUP27 19940705140313S101702A03521
never      never      NY 1530F7A00F4E651A CD YCDUP27 19940705142545S101702A03521
never      never      NN 15997B3D1157CD8E CD YKDX81 19960430144759S101702Z245908
never      never      NN 15997B6A10193FCA CD YKDX81 19960430145417S101702Z245908
never      never      NN 1599CDF318B0CD4E CD YKDX81 19960502160759S101702A053827
never      never      NN 159BD7E901D3785E CD YKDX81 19960515152931S101702M000684
never      never      NN 1597995A15E7FACA CE YCDCIFD 19960418152009S101702M00068
never      never      NN 14ED14B302817AC6 CI YCI009
never      never      NN 151FB5B81F5D3A2C CI YCI009 19940317190314S101702A032565
never      never      NN 153054DD0BE4164A CI YCI009 19940701132426S101702A035214
never      never      NN 1530F13F0C86A2CA CI YCI009 19940705103230S101702A035214
never      never      NN 1530F6DB02EB253A CI YCI009 19940705140212S101702A035214
never      never      NN 1530F7790C6C3940 CI YCI009 19940705142422S101702A035214
never      never      NY 15D0CB8004E979FE CI YCI009 19970417134326S101702A063176
never      never      NY 15D0CC9915DD70C2 CI YCI009 19970417142223S101702A063176
never      never      NY 15D0CD6B0DF09770 CI YCI009 19970417145207S101702A063176
never      never      NY 160E68E812A6A060 CI YCI009 19980514165332S101702M000860
never      never      NN 14ED14B70AC4C416 CI YCI009A
never      never      NN 151FB5E613026890 CI YCI009A 19940317190359S101702A03256
never      never      NN 153054DD11E8AA18 CI YCI009A 19940701132427S101702A03521
never      never      NN 1530F13C1951842C CI YCI009A 19940705103231S101702A03521
never      never      NN 1530F6DA1CF9EFDC CI YCI009A 19940705140214S101702A03521
never      never      NN 1530F77910DB11E8 CI YCI009A 19940705142423S101702A03521
never      never      NN 15921AC00EE448B4 CI YCI009A 19960314161448S101702M00066
never      never      NY 15D0CB8004A38E08 CI YCI009A 19970417134327S101702A06317
never      never      NY 15D0CC9A1FE21D84 CI YCI009A 19970417142225S101702A06317
never      never      NY 15D0CD6B08B0F534 CI YCI009A 19970417145208S101702A06317
never      never      NY 160E68FB06CB88F5 CI YCI009A 19980514165332S101702M00086
never      never      NY 17D4BE6119F0C03B CK CK8560 DCA0000087
never      never      NY 183634291D0D29A6 CK YCKE020 DCA0000188
never      never      NY 1836342F07F0041E CK YCKE025 DCA0000188
never      never      NY 17C7850F18022182 CK YCKMABB DCA0000079569F57BF
never      never      NY 17C7850F0E39A64E CK YCKMABC DCA0000079569F57C5
never      never      NY 176112D90A8C7BBC CK YCKMABU A12M005710534404B9
never      never      NY 17C785100E37D10D CK YCKMABU DCA0000079569F5810
never      never      NY 17C785A4143B13AB CK YCKMAPL DCA0000079
never      never      NY 17C785181484066B CK YCKMASD DCA0000079569F5827
never      never      NY 17C7851206FDAB95 CK YCKMASG DCA0000079569F57E1
never      never      NY 17C7850F0E23E03B CK YCKMASI DCA0000079569F57AA
never      never      NY 17C7851A05E79EB0 CK YCKMASL DCA0000079569F582F
never      never      NN 15547BB204297AD4 CO CO0020 19950216140329S101702A041670
never      never      NN 1558E09416CC4790 CO CO0020 19950316125817S101702A042779
never      never      NN 1561AFE40FB3FD46 CO CO0020 19950511142640S101702A044204
never      never      NN 14DEC79F0F44B9EA CO CO0030
never      never      NN 15547BB003A9BF52 CO CO0030 19950216140330S101702A041670
never      never      NY 14DDAE47110134CE CO CO0040
never      never      NN 15547BB10979E092 CO CO0040 19950216140333S101702A041670
never      never      NN 1501FD0B1A94F29E CO CO0050
never      never      NN 15547BB20BB06736 CO CO0050 19950216140336S101702A041670
never      never      NY 14C9E4321B25BBB2 CO CO5000
never      never      NN 15547BA211B83AC2 CO CO5000 19950216140316S101702A041670
never      never      NN 14DDAE4309588CF6 CO CO8000
never      never      NN 15547BA312BE4728 CO CO8000 19950216140319S101702A041670
never      never      NN 1516E5C215391FD0 CO CO8100
never      never      NN 15547BA61C4CC03C CO CO8100 19950216140321S101702A041670
never      never      NN 1516E5C3182E5E5C CO CO8200
never      never      NN 15547BA610A13436 CO CO8200 19950216140324S101702A041670
never      never      NN 16B3997B03D87FD3 CONVERT ASUCONV V6102
never      never      NN 150BE6781CFED35E CR CR5000
never      never      NN 155481450ACD38F6 CR CR5000 19950216172233S101702A042017
never      never      NN 15C5CB77129611DE CR CR5000 19970206135312S101702A061341
never      never      NN 152442BE014C38E6 CR YBXBI01 19940415175222S101702A03346
never      never      NN 14DDB3DE0606977A CR YCRAN01
never      never      NN 152CE1E5112F22D0 CR YCRAN01 19940609143524S101702A03484
never      never      NN 15A938DC1311D5A6 CR YCRAN01 19960808183350S101702A05620
never      never      NN 14DDB4541BF70BE6 CR YCRAN02
never      never      NN 155D23331D1F648A CR YCRAN02 19950412S101702A043707AYCRA
never      never      NN 15A938EC05F068FA CR YCRAN02 19960808183522S101702A05620
never      never      NY 1556900E0BBC5E4C CT CT8500 19950301194008S101702Z179440
never      never      NY 155690511D77C482 CT CT8500 19950301194935S101702Z179441
never      never      NY 1556AD0313EEBBA4 CT CT8500 19950302125634S101702Z179508
never      never      NY 151FB1121C7706C8 CU CU8320 19940317161809S101702A032590
never      never      NN 15497B6012F722AC CU CU8322 19941208140545S101702A040093
never      never      NY 181435171840D2E8 CZ CZ5494 ACP0000107
never      never      NY 177D7F491C6F5900 CZ CZ5600 CRMA003972
never      never      NY 16187CF101BACF70 CZ CZ6014 19980717195822S101702Z383277
never      never      NY 16187E7D02A03B02 CZ CZ6014 19980717205332S101702Z383277
never      never      NY 1618973B014362AA CZ CZ6014 19980718113921S101702Z383299
never      never      NY 17C93DC904E706E9 CZ CZ6030 KINF000006
never      never      NY 16D9741B01942356 CZ CZ6060 CRME000713
never      never      NY 17AFA2E61E170B30 CZ CZ7021 KUAN000023
never      never      NY 17D5CEE8094CE9C8 CZ CZ7270 HOT0000018
never      never      NY 17DD6191102FC877 CZ CZ7270 HOT0000021
never      never      NY 17EFEC59032FAAB7 CZ CZ7270 HOT0000023
never      never      NY 17E519721192463B CZ CZ7270 HOT0000024
never      never      NY 17E630DD0B59F1F0 CZ CZ7270 HOT0000025
never      never      NY 17C93DF7180711C4 CZ CZ7740 KINF000006
never      never      NY 17C18B6710085915 CZ CZ7740 KUAN000028
never      never      NY 17BEE43413AC55ED CZ CZ7740 KUAN000029
never      never      NY 17D6A53C06959321 CZ CZ7740 KUAN000033
never      never      NY 17AB171A0EEBDBA5 CZ CZ9991 KUAN000019
never      never      NY 17D6C4DE09142BBE CZ YCZBCAL ACP0000063571F51A9
never      never      NY 180B4A640B9CA6FA CZ YCZJ323 GSER00017058D7E6D6
never      never      NY 180B4A7105CC60FF CZ YCZJ431 GSER00017058D7E73D
never      never      NY 1841363C1F8BE2C9 CZ YCZJABW GSER0002225A9C2BE5
never      never      NY 1699CF290AFBC42A DAA400_D_MAIN PSEBN12 V3201
never      never      NY 16B5591E07CB67B9 DAA400_D_MAIN PSEBN13 V3201
never      never      NY 1700981E0C5A22E0 DAA400_D_MAIN PSSCSQL V4000
never      never      NY 1742296C07BC9A55 DAA400_D_MAIN PSSCSQL V4100
never      never      NY 16FB8F3D0D70F824 DAA400_D_MAIN PSSHSQL V4000
never      never      NY 16F72C5202566B34 DAA400_D_MAIN PSSIMPC V4000
never      never      NY 16E6B6EC07448B74 DAA400_D_MAIN PSSRULE V3401
never      never      NY 175559D31D3385AB DAA420_D_MAIN PSSCSQL V4100
never      never      NY 1765B19A01245409 DAA420_D_MAIN PSSHSQL V4200
never      never      NY 16CFB2AE19427F3B DB DB2REORG PROD
never      never      NY 181B2AEA04F96F90 DE DE5031 DE00000066
never      never      NY 1810528F0FB655C8 DE DE5080 DE00000061
never      never      NN 1511620504EC1CFE DE DE5630
never      never      NY 1802C8CF128E0800 DE DE9992 DE00000043
never      never      NY 1810529400FA47BC DE DE9992 DE00000061
never      never      NY 181B2AF7052B00F4 DE DE9992 DE00000066
never      never      NY 1839EFDC13261162 DE DE9992 DE00000077
never      never      NY 183885BB12DD75FC DE YDE0021 DE000000775A53475E
never      never      NY 155F7C6C1E180AE2 DE YDE0860 19950427S101702A044022AYDE0
never      never      NY 1561A8500A42762E DE YDE0860 19950511S101702Z189239AYDE0
never      never      NY 1562D01111457CC8 DE YDE0860 19950518S101702A044277AYDE0
never      never      NY 156366B61CF57B20 DE YDE0860 19950522S101702Z190760AYDE0
never      never      NY 15650056151C9842 DE YDE0860 19950601S101702A044799AYDE0
never      never      NY 1566199E198DE23C DE YDE0860 19950608S101702A045100AYDE0
never      never      NY 1567330710B49F86 DE YDE0860 19950615S101702M000591AYDE0
never      never      NY 1568502C1F47F1A0 DE YDE0860 19950622S101702M000590AYDE0
never      never      NY 156A83DA12D66C94 DE YDE0860 19950706S101702A045780AYDE0
never      never      NY 156B9C8A0BCE2502 DE YDE0860 19950713S101702A046130AYDE0
never      never      NY 156EE6770E9F8DF6 DE YDE0860 19950803S101702A046600AYDE0
never      never      NY 15769C3D10BF06C4 DE YDE0860 19950921S101702A047786AYDE0
never      never      NY 1579E34600FDC800 DE YDE0860 19951012S101702M000615AYDE0
never      never      NY 181AFA9508EE4408 DG YDGPORT DEPG000064
never      never      NY 15054CF11B1A0B6C DG YDGT011
never      never      NN 14F5E37B1C8D4C66 DG YDGT031
never      never      NY 17D3C4750C448953 DI DI8290 DI00000034
never      never      NY 17D3C4770B2D72AC DI YDIDB2 DI00000034570623C3
never      never      NY 17D6BE7C11CC2785 DI YDIT015 DI00000042571F1C16CICS
never      never      NY 18198C8304C23945 DI YDIT015 DI00000068594F823D
never      never      NY 18198C8507892155 DI YDIT015 DI00000068594F823DCICSMVS
never      never      NY 18198C841D3619BA DI YDIT015 DI00000068594F823DMVS
never      never      NY 18198C381FD89BCF DI YDITBTB DI00000068594F7FC8
never      never      NY 18198C3A1D3FE898 DI YDITBTB DI00000068594F7FC8CICSMVS
never      never      NY 18198C3A137B3E7F DI YDITBTB DI00000068594F7FC8MVS
never      never      NY 1827DF0B02EABE6E DI YDIU015 DI0000007059C7A76B
never      never      NY 1827DF0C1186792A DI YDIU015 DI0000007059C7A76BMVS
never      never      NY 1827DF141AD8064A DI YDIU016 DI0000007059C7A7B9
never      never      NY 1827DF161093B4F8 DI YDIU016 DI0000007059C7A7B9MVS
never      never      NY 1576B79804B3E908 DN DN8020 19950922S101702Z209425ADN802
never      never      NY 182DD5810A5D5CED DP DP0320 DP00000071
never      never      NY 17EB5ED91BBD159F DP DP7010 DP00000050
never      never      NY 160019B41D02BD2E DU DU7070 19980212134113S101702A070276
never      never      NY 152995530C6787B4 DX DX0100 19940519144614S101702A034343
never      never      NY 152F14DD070D004A DX DX0100 19940623142418S101702A035172
never      never      NY 159796A512C93048 DX DX0100 19960418134338S101702M000672
never      never      NY 15299A1D113F3DD4 DX DX5100 19940519174204S101702A034366
never      never      NY 1530338B0769824C DX DX5100 19940630173128S101702A035317
never      never      NY 1516E56C0BE01E84 DX DX5300
never      never      NY 15299A190482F6DA DX DX5300 19940519174211S101702A034369
never      never      NN 152537051F0FFE2A DX DX5400 19940421194557S101702A033552
never      never      NN 15D0CA270B156F6C DX DX5400 19970417125527S101702A063250
never      never      NN 152537120A71395C DX DX5410 19940421194631S101702A033552
never      never      NN 15D0CA28121AA544 DX DX5410 19970417125528S101702A063250
never      never      NN 1517FD751514FA70 EA YEA0001
never      never      NN 15337F06124853A6 EA YEA0001 19940721163813S101702M00043
never      never      NN 15462E13037918F4 EA YEA0001 19941117135202S101702M00051
never      never      NN 154A9E690B82CCDC EA YEA0001 19941215193956S101702M00052
never      never      NN 156A81DD1473F742 EA YEA0001 19950706S101702M000589AYEA0
never      never      NN 1572335409F1DA52 EA YEA0001 19950824S101702M000598AYEA0
never      never      NN 1581B8DD06D68B9A EA YEA0001 19951201S101702A049916AYEA0
never      never      NN 158B83251513C29A EA YEA0001 19960201S101702A051573AYEA0
never      never      NN 158ECB291091D9D8 EA YEA0001 19960222143902S101702A05219
never      never      NN 1599CA591992D64E EA YEA0001 19960502135830S101702A05328
never      never      NN 159B89AA04BBEFA8 EA YEA0001 19960513164908S101702Z24811
never      never      NN 159BD7ED11EE1660 EA YEA0001 19960515152936S101702M00068
never      never      NN 159CC6371E2C7964 EA YEA0001 19960521133901S101702Z24930
never      never      NN 159D18E30AFB83D6 EA YEA0001 19960523145633S101702A05431
never      never      NN 15A7F086162D4D0C EA YEA0001 19960731143941S101702A05613
never      never      NN 15AEBE9D15F33A68 EA YEA0001 19960912215250S101702M00071
never      never      NN 15BD047B01912116 EA YEA0001 19961212173052S101702A05967
never      never      NN 15BF58D41079A2D0 EA YEA0001 19961227131336S101702A06031
never      never      NN 15BF5E0017DFF52A EA YEA0001 19961227161942S101702A06031
never      never      NN 15C5CEC41E1B2A90 EA YEA0001 19970206155025S101702M00076
never      never      NN 15E38BB20573593B EA YEA0001 19970814210804S101702A06595
never      never      NN 160A06290BCC9706 EA YEA0001 19980416190745S101702M00089
never      never      NN 16173AC21148A7DA EA YEA0001 19980709194601S101702M00092
never      never      NN 1617527B0AF87D0C EA YEA0001 19980710093842S101702M00092
never      never      NN 15BF58D609596784 EA YEA0010 19961227131338S101702A06031
never      never      NN 15BF5E040E491842 EA YEA0010 19961227161943S101702A06031
never      never      NN 15C141DE0C350344 EA YEA0010 19970108165717S101702Z28911
never      never      NN 15C3983016D1F88C EA YEA0010 19970123135233S101702A06104
never      never      NN 15C5CECA033765D4 EA YEA0010 19970206155028S101702M00076
never      never      NN 15CC64A311C97686 EA YEA0010 19970320132759S101702A06255
never      never      NN 15CE49A71ED235A6 EA YEA0010 19970401145030S101702Z30409
never      never      NN 15D0CFBD11B65C6C EA YEA0010 19970417154119S101702A06329
never      never      NN 15D1698617CD912A EA YEA0010 19970421115820S101702Z30734
never      never      NN 15D16BFE136277A6 EA YEA0010 19970421132703S101702Z30734
never      never      NN 15D1E41110045C64 EA YEA0010 19970424130254S101702A06345
never      never      NN 15DF1806085C11CC EA YEA0010 19970717131720S101702A06536
never      never      NN 15E38BB51B10836F EA YEA0010 19970814210808S101702A06595
never      never      NN 15E6CF6917BFF48A EA YEA0010 19970904153951S101702A06652
never      never      NN 15F1CEBE0774381C EA YEA0010 19971113150405S101702A06804
never      never      NN 15FA9CA40C77607C EA YEA0010 19980108153347S101702M00088
never      never      NN 15FF02A81B8BDC78 EA YEA0010 19980205151554S101702A07015
never      never      NN 16001B6906823AE0 EA YEA0010 19980212144146S101702M00083
never      never      NN 160A062B111DAC8A EA YEA0010 19980416190746S101702M00089
never      never      NN 160E67361D9AB912 EA YEA0010 19980514155250S101702M00091
never      never      NN 1612E4FE00148DF8 EA YEA0010 19980612054603S101702M00092
never      never      NN 16173ABD1E4AD1F6 EA YEA0010 19980709194554S101702M00092
never      never      NN 161752420B5511C2 EA YEA0010 19980710093614S101702M00092
never      never      NN 15BF58D4128C7AE8 EA YEA0011 19961227131340S101702A06031
never      never      NN 15BF5E020D42049A EA YEA0011 19961227161943S101702A06031
never      never      NN 15C141DC1A13AE6E EA YEA0011 19970108165718S101702Z28911
never      never      NN 15C3982E0E026572 EA YEA0011 19970123135233S101702A06104
never      never      NN 15C5CEC502A3D5C8 EA YEA0011 19970206155016S101702M00076
never      never      NN 15DF17FF001DA882 EA YEA0011 19970717131722S101702A06536
never      never      NN 15E38BB719377B7C EA YEA0011 19970814210813S101702A06595
never      never      NN 16001B65158B5B5C EA YEA0011 19980212144147S101702M00083
never      never      NN 160A063103FDDA9E EA YEA0011 19980416190755S101702M00089
never      never      NN 1612E4FC061B9217 EA YEA0011 19980612054603S101702M00092
never      never      NN 16173ABF00107CA0 EA YEA0011 19980709194555S101702M00092
never      never      NN 1617523017C7E3F2 EA YEA0011 19980710093659S101702M00092
never      never      NY 150200EA16D66220 EB EB5150
never      never      NY 154861AB06B76EA8 EB EB5150 19941201140340S101702A039621
never      never      NY 15E7E3D614E929D4 EB EB9000 19970911123324S101702A066672
never      never      NN 15F32B6F18A72244 EC EC5099 19971122070527S101702Z346068
never      never      NN 15F363BB0B30A920 EC EC5099 19971123164056S101702Z346149
never      never      NN 15FCCEB10C9D55EE EC EC5099 19980122145046S101702A069866
never      never      NN 15ED681E09A24E46 EC EC7103 19971016150142S101702A067558
never      never      NN 15F3119B186B71AC EC EC7103 19971121154032S101702A068485
never      never      NY 17D233BB160F6221 EC EC7420 KAUS000011
never      never      NY 1614868703298A1A EC EC8062 19980622145120S101702Z380281
never      never      NY 1614AE6D069F4589 EC EC8062 19980623143853S101702Z380537
never      never      NY 1614CFEC18313F0C EC EC8062 19980624103834S101702Z380638
never      never      NY 1614868E1B2D9E84 EC EC8063 19980622145205S101702Z380283
never      never      NY 1614AE6C0563C024 EC EC8063 19980623143831S101702Z380538
never      never      NY 1614CFF814886764 EC EC8063 19980624103859S101702Z380639
never      never      NN 16059B1917DAB9F4 EC EC8067 19980319142758S101702A071130
never      never      NY 1607D0BC0053FFC6 EC EC8140 19980402174847S101702A071444
never      never      NY 160C31381514C7A2 EC EC8140 19980430141651S101702A072032
never      never      NN 1607F23A0D2D8D08 EC EC8698 19980403135200S101702A071490
never      never      NN 15F0B830135F9E5C EC YECAV 19971106165427S101702A068113A
never      never      NN 15F0D48B1F4427D2 EC YECAV 19971107094915S101702A068113A
never      never      NN 15F545B30A0C7088 EC YECAV 19971205161051S101702A068771A
never      never      NN 15FBBA0E07F43A00 EC YECAV 19980115174314S101702M000856A
never      never      NN 15FF2F3B1A2C9016 EC YECAV 19980206175259S101702A070225A
never      never      NN 16004156009EBBC6 EC YECAV 19980213132027S101702A070420A
never      never      NN 160484CF1FE9F394 EC YECAV 19980312162542S101702A070997A
never      never      NN 160487610B1F3D9E EC YECAV 19980312175718S101702A070997A
never      never      NN 1607F2C7192E8D04 EC YECAV 19980403141043S101702A071472A
never      never      NN 160A061B116002BC EC YECAV 19980416190501S101702M000898A
never      never      NY 15F0B76E05CF8658 EC YECAVKY 19971106162740S101702A06770
never      never      NY 15FBBA000FC923D2 EC YECAVKY 19980115174842S101702M00085
never      never      NY 160484BA031BAB26 EC YECAVKY 19980312162557S101702A07099
never      never      NY 16048752153D688E EC YECAVKY 19980312175734S101702A07099
never      never      NY 1607F2C615750B60 EC YECAVKY 19980403141026S101702A07147
never      never      NY 16187C430C3C3C2C EC YECAVKY 19980717193302S101702Z38328
never      never      NY 16187C9515EBB6E4 EC YECAVKY 19980717194554S101702Z38329
never      never      NN 15F0B82D01D418AC EC YECCL 19971106165431S101702A068113A
never      never      NN 15F0D48C07A3F0A0 EC YECCL 19971107094920S101702A068113A
never      never      NN 15F545C1006F6182 EC YECCL 19971205161052S101702A068771A
never      never      NN 15FBB9E8013285E2 EC YECCL 19980115174315S101702M000856A
never      never      NN 15FF2F5C08CEC51E EC YECCL 19980206175302S101702A070225A
never      never      NN 160484CB09405DA6 EC YECCL 19980312162548S101702A070997A
never      never      NN 160487651199F533 EC YECCL 19980312175726S101702A070997A
never      never      NN 1607F2E713849224 EC YECCL 19980403141044S101702A071472A
never      never      NN 160A06221E744414 EC YECCL 19980416190801S101702M000898A
never      never      NN 1611DC2817134B14 EC YECCL 19980605154804S101702A072938A
never      never      NN 1616421401679618 EC YECCL 19980703152436S101702A073255A
never      never      NN 15F0B82E094D8612 EC YECCLAR 19971106165420S101702A06811
never      never      NN 15F0D48B1181760E EC YECCLAR 19971107094906S101702A06811
never      never      NN 15F545BA054E1286 EC YECCLAR 19971205161053S101702A06877
never      never      NN 15FBBA06123E0AD2 EC YECCLAR 19980115174315S101702M00085
never      never      NN 15FF2F4A016A922E EC YECCLAR 19980206175303S101702A07022
never      never      NN 1607F2C41EA50197 EC YECCLAR 19980403141045S101702A07147
never      never      NN 160A061805DF2698 EC YECCLAR 19980416190501S101702M00089
never      never      NN 15F0B830153EB424 EC YECCLC 19971106165420S101702A068113
never      never      NN 15F0D48B1CA47328 EC YECCLC 19971107094907S101702A068113
never      never      NN 15F545BB0E124242 EC YECCLC 19971205161054S101702A068771
never      never      NN 15FF2F5A0246B50E EC YECCLC 19980206175303S101702A070225
never      never      NN 1607F2C70D40CC2E EC YECCLC 19980403141046S101702A071472
never      never      NN 160A060C03D40B44 EC YECCLC 19980416190502S101702M000898
never      never      NN 15F0B82F045E008E EC YECCLV 19971106165421S101702A068113
never      never      NN 15F0D48B18A41362 EC YECCLV 19971107094908S101702A068113
never      never      NN 15F545B80366C636 EC YECCLV 19971205161054S101702A068771
never      never      NN 15FF2F510865C1D4 EC YECCLV 19980206175304S101702A070225
never      never      NN 1607F2C607AE3242 EC YECCLV 19980403141033S101702A071472
never      never      NN 160A061B069AA6AE EC YECCLV 19980416190502S101702M000898
never      never      NN 15F0B83106C6764E EC YECCR 19971106165421S101702A068113A
never      never      NN 15F0D48A14858024 EC YECCR 19971107094908S101702A068113A
never      never      NN 15F545C100A253DE EC YECCR 19971205161055S101702A068771A
never      never      NN 15F71EFE0E9B63C2 EC YECCR 19971217103059S101702Z351294A
never      never      NN 15F7E7CA0BB619B0 EC YECCR 19971222101649S101702Z352108A
never      never      NN 15F956E80B940962 EC YECCR 19971231131652S101702Z353056A
never      never      NN 15FBB9DE1D7488C4 EC YECCR 19980115174315S101702M000856A
never      never      NN 15FF2F5D03F13F8C EC YECCR 19980206175304S101702A070225A
never      never      NN 160484D7173C5432 EC YECCR 19980312162559S101702A070997A
never      never      NN 1604875C12E9E7DC EC YECCR 19980312175737S101702A070997A
never      never      NN 16059B090567D7A6 EC YECCR 19980319142423S101702A071130A
never      never      NN 160640260A2A9EBE EC YECCR 19980323165535S101702A071245A
never      never      NN 1607F2E81A55C2E6 EC YECCR 19980403141046S101702A071472A
never      never      NN 160A062C1452E3E8 EC YECCR 19980416190503S101702M000898A
never      never      NN 1610972C0E9C23AC EC YECCR 19980528135617S101702A072724A
never      never      NN 1616420F068A6102 EC YECCR 19980703152441S101702A073255A
never      never      NN 15F0B82F1F49F366 EC YECCRAR 19971106165422S101702A06811
never      never      NN 15F0D48A00CA61E2 EC YECCRAR 19971107094909S101702A06811
never      never      NN 15F545B409D26B5C EC YECCRAR 19971205161056S101702A06877
never      never      NN 15FF2F551FB7E5EE EC YECCRAR 19980206175305S101702A07022
never      never      NN 1607F2C608B1D4A2 EC YECCRAR 19980403141048S101702A07147
never      never      NN 160A060906D81AD8 EC YECCRAR 19980416190504S101702M00089
never      never      NN 15F0B82F12EAD36A EC YECCRC 19971106165423S101702A068113
never      never      NN 15F0D48A144CE4AC EC YECCRC 19971107094910S101702A068113
never      never      NN 15F545BA0AF8B628 EC YECCRC 19971205161056S101702A068771
never      never      NN 15FF2F570F10E654 EC YECCRC 19980206175306S101702A070225
never      never      NN 160484CF1A9BEEBA EC YECCRC 19980312162645S101702A070997
never      never      NN 160487510980BD14 EC YECCRC 19980312175740S101702A070997
never      never      NN 1607F2C608BE25AC EC YECCRC 19980403141048S101702A071472
never      never      NN 160A060D16C49E12 EC YECCRC 19980416190505S101702M000898
never      never      NN 15F0B8301141ED4C EC YECCRCR 19971106165423S101702A06811
never      never      NN 15F0D48A12AEF7FA EC YECCRCR 19971107094911S101702A06811
never      never      NN 15F545B71862DA86 EC YECCRCR 19971205161057S101702A06877
never      never      NN 15FBB9DE0A10A518 EC YECCRCR 19980115174316S101702M00085
never      never      NN 15FF2F5B09F0782E EC YECCRCR 19980206175307S101702A07022
never      never      NN 1607F2C316838156 EC YECCRCR 19980403141049S101702A07147
never      never      NN 160A061415820813 EC YECCRCR 19980416190505S101702M00089
never      never      NN 1616421015998925 EC YECCRCR 19980703152444S101702A07325
never      never      NN 15F0B83007DF8FC4 EC YECCRL 19971106165424S101702A068113
never      never      NN 15F0D48A07D29C26 EC YECCRL 19971107094912S101702A068113
never      never      NN 15F545B919345596 EC YECCRL 19971205161057S101702A068771
never      never      NN 15F6D603188DDDC2 EC YECCRL 19971215145836S101702Z350817
never      never      NN 15F956B9029215A2 EC YECCRL 19971231130928S101702Z353046
never      never      NN 15FBB9F819707B6D EC YECCRL 19980115174316S101702M000856
never      never      NN 15FF2F521788B1CC EC YECCRL 19980206175308S101702A070225
never      never      NN 160484CE0F9D314B EC YECCRL 19980312162647S101702A070997
never      never      NN 1604875F13D0FBCB EC YECCRL 19980312175741S101702A070997
never      never      NN 1607F2C213A6DF6E EC YECCRL 19980403141049S101702A071472
never      never      NN 160A06131A415106 EC YECCRL 19980416190507S101702M000898
never      never      NN 1616420D065CE312 EC YECCRL 19980703152444S101702A073255
never      never      NN 15F0B8300D5ED954 EC YECCRV 19971106165424S101702A068113
never      never      NN 15F0D4881021850A EC YECCRV 19971107094912S101702A068113
never      never      NN 15F545BA0B5DB7A2 EC YECCRV 19971205161058S101702A068771
never      never      NN 15FF2F581FFD9074 EC YECCRV 19980206175309S101702A070225
never      never      NN 160484C403CA55C4 EC YECCRV 19980312162532S101702A070997
never      never      NN 1604875901460CBE EC YECCRV 19980312175704S101702A070997
never      never      NN 1607F2C1176F4294 EC YECCRV 19980403141050S101702A071472
never      never      NN 160A060E18B95F84 EC YECCRV 19980416190508S101702M000898
never      never      NN 15F0B8300D7C7056 EC YECDCI 19971106165425S101702A068113
never      never      NN 15F0D48B136FDD42 EC YECDCI 19971107094913S101702A068113
never      never      NN 15F545BD0A1D1B02 EC YECDCI 19971205161058S101702A068771
never      never      NN 15FF2F5B09ED90EC EC YECDCI 19980206175310S101702A070225
never      never      NN 160484C60554B842 EC YECDCI 19980312162533S101702A070997
never      never      NN 1604875A091438D8 EC YECDCI 19980312175704S101702A070997
never      never      NN 1607F2CB07EA886E EC YECDCI 19980403141051S101702A071472
never      never      NN 160A06170BD33D3A EC YECDCI 19980416190509S101702M000898
never      never      NN 160A96500BAC1586 EC YECDCI 19980420091008S101702A071906
never      never      NN 160BBB7A05EF4EA4 EC YECDCI 19980427160238S101702A072040
never      never      NY 17C8A99219A4B2B0 EC YECDMAE SYNC00001056A8EDE4
never      never      NY 17C8A993064683A1 EC YECDMAE SYNC00001056A8EDE4CICS
never      never      NY 17EEF6801E478A10 EC YECDMAE SYNC00001957EA4559
never      never      NY 17EEF6810A7BE081 EC YECDMAE SYNC00001957EA4559CICS
never      never      NY 17C96ABA10AE6176 EC YECDMAU SYNC00001056AF4229
never      never      NN 160018711CE7C5AE EC YECGR2 19980212125839CGS101702A0699
never      never      NN 1600187000F79F58 EC YECGR2 19980212125839S101702A069923
never      never      NN 1600BFE91492DA18 EC YECGR2 19980216165226CGS101702A0704
never      never      NN 1600BFE7162F1488 EC YECGR2 19980216165226S101702A070496
never      never      NN 15FF2F5A02CF9692 EC YECGRI 19980206175312S101702A070225
never      never      NN 160041540F0188B0 EC YECGRI 19980213132027S101702A070420
never      never      NN 160484C40DB4FBC4 EC YECGRI 19980312162534S101702A070997
never      never      NN 1604875E13ACF042 EC YECGRI 19980312175705S101702A070997
never      never      NN 15F0B82E10911A5A EC YECIN 19971106165426S101702A068113A
never      never      NN 15F0D48B0FFBB328 EC YECIN 19971107094915S101702A068113A
never      never      NN 15F545BD0D1AF412 EC YECIN 19971205161103S101702A068771A
never      never      NN 15FF2F490C6FF92A EC YECIN 19980206175315S101702A070225A
never      never      NN 160484CB1E18039A EC YECIN 19980312162534S101702A070997A
never      never      NN 1604875C0C3A341C EC YECIN 19980312175705S101702A070997A
never      never      NN 1607F2DC09F82C28 EC YECIN 19980403141052S101702A071472A
never      never      NN 160A06171232C8CE EC YECIN 19980416190510S101702M000898A
never      never      NN 15F2EF330D950AE4 EC YECMUPD 19971120190914S101702M00085
never      never      NN 15F387000255D614 EC YECMUPD 19971124134218S101702Z34640
never      never      NN 15F3B4610C099D6C EC YECMUPD 19971125164536S101702A06856
never      never      NN 15F3D3BB0BB4D45C EC YECMUPD 19971126112833S101702A06862
never      never      NN 15F3D5D401BFFED8 EC YECMUPD 19971126124340S101702Z34706
never      never      NN 15F545B70FB66FDC EC YECMUPD 19971205161051S101702A06877
never      never      NN 15FBB9E31019A47F EC YECMUPD 19980115174318S101702M00085
never      never      NN 15FF2F49181AFB64 EC YECMUPD 19980206175318S101702A07022
never      never      NN 1600415403E607FA EC YECMUPD 19980213132028S101702A07042
never      never      NN 161642111D850403 EC YECMUPD 19980703152435S101702A07325
never      never      NN 15F0B82F152B51B2 EC YECRP 19971106165427S101702A068113A
never      never      NN 15F0D48B11FC3302 EC YECRP 19971107094916S101702A068113A
never      never      NN 15F545C01225D6AA EC YECRP 19971205161104S101702A068771A
never      never      NN 15FF2F49062A0CF8 EC YECRP 19980206175319S101702A070225A
never      never      NN 160484C41CDD0F82 EC YECRP 19980312162535S101702A070997A
never      never      NN 1604875E11025398 EC YECRP 19980312175706S101702A070997A
never      never      NN 1607F2DD0724DE18 EC YECRP 19980403141052S101702A071472A
never      never      NN 160A061612B29FE8 EC YECRP 19980416190511S101702M000898A
never      never      NN 1610972B18CC52C4 EC YECRP 19980528135618S101702A072724A
never      never      NN 15F0B82E04423B7A EC YECRPA 19971106165428S101702A068113
never      never      NN 15F0D48A1D480570 EC YECRPA 19971107094916S101702A068113
never      never      NN 15F545BB15A94788 EC YECRPA 19971205161104S101702A068771
never      never      NN 15FF2F4C007B2C5C EC YECRPA 19980206175319S101702A070225
never      never      NN 160484C3174DAEC4 EC YECRPA 19980312162535S101702A070997
never      never      NN 1604875B0FD6041D EC YECRPA 19980312175706S101702A070997
never      never      NN 1607F2DC1F8EBB30 EC YECRPA 19980403141052S101702A071472
never      never      NN 1609AC82002786F4 EC YECRPA 19980414134151S101702A071717
never      never      NN 160A060B1ED165E8 EC YECRPA 19980416190512S101702M000898
never      never      NN 15F0B82E04E9C92E EC YECRPAV 19971106165428S101702A06811
never      never      NN 15F0D48B12E16B50 EC YECRPAV 19971107094917S101702A06811
never      never      NN 15F545C0121A79C6 EC YECRPAV 19971205161105S101702A06877
never      never      NN 15FF2F4C1F88B18C EC YECRPAV 19980206175320S101702A07022
never      never      NN 160484CC0635351C EC YECRPAV 19980312162536S101702A07099
never      never      NN 160487550C717D57 EC YECRPAV 19980312175707S101702A07099
never      never      NN 1607F2CA16F8C5E6 EC YECRPAV 19980403141053S101702A07147
never      never      NN 160A060C00394802 EC YECRPAV 19980416190513S101702M00089
never      never      NN 1607F2CB032AD41C EC YECRPV 19980403141036S101702A071472
never      never      NN 1609AC820035CA36 EC YECRPV 19980414134152S101702A071717
never      never      NN 160A060A1E0929E8 EC YECRPV 19980416190513S101702M000898
never      never      NN 15F0B82E0BF34610 EC YECRT 19971106165428S101702A068113A
never      never      NN 15F0D48B0467727C EC YECRT 19971107094917S101702A068113A
never      never      NN 15F545BD0B9C052C EC YECRT 19971205161105S101702A068771A
never      never      NN 15FF2F590391F820 EC YECRT 19980206175322S101702A070225A
never      never      NN 160484C403D12582 EC YECRT 19980312162537S101702A070997A
never      never      NN 1604875F00B82508 EC YECRT 19980312175708S101702A070997A
never      never      NN 1607F2DC0A208E66 EC YECRT 19980403141054S101702A071472A
never      never      NN 160A060A034547EE EC YECRT 19980416190514S101702M000898A
never      never      NN 161642111C8054A1 EC YECRT 19980703152433S101702A073255A
never      never      NN 15F0B82D15233B98 EC YECRTV 19971106165429S101702A068113
never      never      NN 15F0D48A070F484A EC YECRTV 19971107094918S101702A068113
never      never      NN 15F545BC08DAF174 EC YECRTV 19971205161106S101702A068771
never      never      NN 15FF2F5A037AE4C6 EC YECRTV 19980206175323S101702A070225
never      never      NN 160484C40DE31684 EC YECRTV 19980312162537S101702A070997
never      never      NN 1604875F1A3BF29A EC YECRTV 19980312175708S101702A070997
never      never      NN 1607F2CB17A2D227 EC YECRTV 19980403141054S101702A071472
never      never      NN 160A060A1E0A437C EC YECRTV 19980416190514S101702M000898
never      never      NN 15FF2F490A9CA6E4 EC YECSAN 19980206175323S101702A070225
never      never      NN 1600415017B31312 EC YECSAN 19980213132028S101702A070420
never      never      NN 160484C313321A88 EC YECSAN 19980312162538S101702A070997
never      never      NN 160487570783DF34 EC YECSAN 19980312175709S101702A070997
never      never      NN 1616420E0CE0CFBF EC YECSAN 19980703152435S101702A073255
never      never      NN 15FF2F4C16BF00A4 EC YECSAS 19980206175324S101702A070225
never      never      NN 160041540F3D2242 EC YECSAS 19980213132029S101702A070420
never      never      NN 160484C51A2027F0 EC YECSAS 19980312162539S101702A070997
never      never      NN 1604875B02B0189E EC YECSAS 19980312175709S101702A070997
never      never      NN 16164212086E9087 EC YECSAS 19980703152436S101702A073255
never      never      NN 15FF2F470F39A554 EC YECSBR 19980206175325S101702A070225
never      never      NN 160041501368CE0A EC YECSBR 19980213132030S101702A070420
never      never      NN 160484C30329E5AE EC YECSBR 19980312162539S101702A070997
never      never      NN 160487521B312888 EC YECSBR 19980312175714S101702A070997
never      never      NN 15FF2F461700EBBA EC YECSDH 19980206175326S101702A070225
never      never      NN 16004151048CF610 EC YECSDH 19980213132030S101702A070420
never      never      NN 160484C81DE619D4 EC YECSDH 19980312162540S101702A070997
never      never      NN 160487570B55B50E EC YECSDH 19980312175716S101702A070997
never      never      NN 1616420E04FE214A EC YECSDH 19980703152437S101702A073255
never      never      NN 15FF2F5917BA309C EC YECSDOC 19980206175327S101702A07022
never      never      NN 160041531948C7A2 EC YECSDOC 19980213132031S101702A07042
never      never      NN 160484CD1A8B157A EC YECSDOC 19980312162536S101702A07099
never      never      NN 16048756100F02D3 EC YECSDOC 19980312175707S101702A07099
never      never      NN 16152AB40D046814 EC YECSDOC 19980626164741S101702A07340
never      never      NN 1616421115748287 EC YECSDOC 19980703152437S101702A07325
never      never      NN 15FF2F4F1510811A EC YECSDS 19980206175327S101702A070225
never      never      NN 160041560954D5F4 EC YECSDS 19980213132031S101702A070420
never      never      NN 160484C415E8CB7E EC YECSDS 19980312162540S101702A070997
never      never      NN 160487620F1F3ECA EC YECSDS 19980312175716S101702A070997
never      never      NN 1616420D04A1C21C EC YECSDS 19980703152438S101702A073255
never      never      NN 15FF2F5B198212D6 EC YECSEG 19980206175328S101702A070225
never      never      NN 1600415605BF38C8 EC YECSEG 19980213132031S101702A070420
never      never      NN 160484C90E7AFB84 EC YECSEG 19980312162541S101702A070997
never      never      NN 160487611AC4970E EC YECSEG 19980312175717S101702A070997
never      never      NN 1616421304F698FF EC YECSEG 19980703152438S101702A073255
never      never      NN 15FF2F5C11BB925C EC YECSES 19980206175329S101702A070225
never      never      NN 1600414A1DE1C5D6 EC YECSES 19980213132036S101702A070420
never      never      NN 160484D71DC306BC EC YECSES 19980312162542S101702A070997
never      never      NN 16048762158B978E EC YECSES 19980312175717S101702A070997
never      never      NN 16152AB51BABDC72 EC YECSES 19980626164741S101702A073406
never      never      NN 161642131DB961A4 EC YECSES 19980703152438S101702A073255
never      never      NN 15FF2F57082A662B EC YECSEX 19980206175329S101702A070225
never      never      NN 1600415600DF16DE EC YECSEX 19980213132037S101702A070420
never      never      NN 160484D608E3E36C EC YECSEX 19980312162543S101702A070997
never      never      NN 1604876415134F29 EC YECSEX 19980312175719S101702A070997
never      never      NN 161642121348C1C3 EC YECSEX 19980703152439S101702A073255
never      never      NN 15FF2F590C0AFBCC EC YECSFO 19980206175330S101702A070225
never      never      NN 160041490F2D5B4A EC YECSFO 19980213132037S101702A070420
never      never      NN 160484CD0BD3E7AA EC YECSFO 19980312162543S101702A070997
never      never      NN 1604875A07A87CEA EC YECSFO 19980312175719S101702A070997
never      never      NN 16164211143C049F EC YECSFO 19980703152440S101702A073255
never      never      NN 15F0B82E109039FC EC YECSFPR 19971106165429S101702A06811
never      never      NN 15F0D48A1B6A84DE EC YECSFPR 19971107094918S101702A06811
never      never      NN 15F545C0125233C2 EC YECSFPR 19971205161106S101702A06877
never      never      NN 15FF2F47014A4A1C EC YECSFPR 19980206175330S101702A07022
never      never      NN 1607F2CB121B4943 EC YECSFPR 19980403141055S101702A07147
never      never      NN 160A06121A4A30AB EC YECSFPR 19980416190515S101702M00089
never      never      NN 15FF2F5B07A35048 EC YECSHD1 19980206175331S101702A07022
never      never      NN 16004155185CC706 EC YECSHD1 19980213132039S101702A07042
never      never      NN 1600B45515A0C3AC EC YECSHD1 19980216095837S101702Z36001
never      never      NN 1600BFE615815A32 EC YECSHD1 19980216165227S101702A07049
never      never      NN 160484D31E39BD48 EC YECSHD1 19980312162544S101702A07099
never      never      NN 1604876116E64CD4 EC YECSHD1 19980312175720S101702A07099
never      never      NN 1616420C1FB74786 EC YECSHD1 19980703152440S101702A07325
never      never      NN 15FF2F5B1D6B3BCA EC YECSHD2 19980206175332S101702A07022
never      never      NN 160041531687EED4 EC YECSHD2 19980213132039S101702A07042
never      never      NN 1600BFE70F114AA4 EC YECSHD2 19980216165227S101702A07049
never      never      NN 160484CE162D15E5 EC YECSHD2 19980312162544S101702A07099
never      never      NN 160487611FCACF76 EC YECSHD2 19980312175720S101702A07099
never      never      NN 1607F2DD0C724220 EC YECSHD2 19980403141037S101702A07147
never      never      NN 16152AB50A11958A EC YECSHD2 19980626164742S101702A07340
never      never      NN 1616420E054F96AE EC YECSHD2 19980703152441S101702A07325
never      never      NN 15F0B82E012FC6E8 EC YECSL 19971106165430S101702A068113A
never      never      NN 15F0D48B17AAB044 EC YECSL 19971107094918S101702A068113A
never      never      NN 15F545BD137FAFF4 EC YECSL 19971205161107S101702A068771A
never      never      NN 15F7008209FCAAF2 EC YECSL 19971216161903S101702Z351139A
never      never      NN 15FF2F560DAE488F EC YECSL 19980206175333S101702A070225A
never      never      NN 160041551E914834 EC YECSL 19980213132041S101702A070420A
never      never      NN 160484CF1D282D8C EC YECSL 19980312162545S101702A070997A
never      never      NN 160487610459B650 EC YECSL 19980312175721S101702A070997A
never      never      NN 160640261681A032 EC YECSL 19980323165535S101702A071245A
never      never      NN 1607F2CC0AE1ED3F EC YECSL 19980403141055S101702A071472A
never      never      NN 160A061E042CA1DA EC YECSL 19980416190516S101702M000898A
never      never      NN 160BBB7B12704280 EC YECSL 19980427160239S101702A072040A
never      never      NN 15FF2F5C15DC2968 EC YECSLV 19980206175333S101702A070225
never      never      NN 160041561AAC5290 EC YECSLV 19980213132041S101702A070420
never      never      NN 160484D806F1F62A EC YECSLV 19980312162546S101702A070997
never      never      NN 160487650BF685FF EC YECSLV 19980312175723S101702A070997
never      never      NN 16152AB601D491D6 EC YECSLV 19980626164742S101702A073406
never      never      NN 1616420D0AD154E0 EC YECSLV 19980703152443S101702A073255
never      never      NN 15FF2F5516E6C2FB EC YECSZS 19980206175335S101702A070225
never      never      NN 1600414E00E3ADCA EC YECSZS 19980213132043S101702A070420
never      never      NN 160484D21BC4957C EC YECSZS 19980312162547S101702A070997
never      never      NN 160487600B4AF5E8 EC YECSZS 19980312175724S101702A070997
never      never      NN 161642111CF02726 EC YECSZS 19980703152434S101702A073255
never      never      NY 1810C2B0193ACBC4 ED ED5231 ED00000052
never      never      NY 1566417010DB145A ED YED0034 19950609S101702A044988AYED0
never      never      NY 1568502A12EA53EE ED YED0034 19950622S101702M000590AYED0
never      never      NY 156A7D740EF1DA36 ED YED0034 19950706S101702A045878AYED0
never      never      NY 156BBE641F78FDAA ED YED0034 19950714S101702A045968AYED0
never      never      NY 156EE5DC0F1AEF5E ED YED0034 19950803S101702A046536AYED0
never      never      NY 156FFEB70D461402 ED YED0034 19950810S101702A046695AYED0
never      never      NY 157463A6169F0466 ED YED0034 19950907S101702A047537AYED0
never      never      NY 157528A60F3CE620 ED YED0034 19950912S101702Z207809AYED0
never      never      NY 15757BFB1CF17C1C ED YED0034 19950914S101702A047657AYED0
never      never      NY 157D387C01EA2D66 ED YED0034 19951102S101702M000602AYED0
never      never      NY 1583CDC00E9B18B2 ED YED0034 19951214S101702A050106AYED0
never      never      NY 1584E3BC0A5C26D6 ED YED0034 19951221S101702A050529AYED0
never      never      NY 158ECA5B159EFCBC ED YED0034 19960222141003S101702A05208
never      never      NY 15A4CE65134A8D48 ED YED0034 19960711161137S101702A05574
never      never      NY 15A566D70ACC5286 ED YED0034 19960715110850S101702Z25753
never      never      NY 15A5E7E70A73B282 ED YED0034 19960718160812S101702A05585
never      never      NY 15B223D30ACB242C ED YED0034 19961004122313S101702A05754
never      never      NY 15B2EC7401143D70 ED YED0034 19961009120403S101702Z26992
never      never      NY 15B317B91753C5B0 ED YED0034 19961010135245S101702A05771
never      never      NY 15B666561EEE08D2 ED YED0034 19961031145508S101702A05804
never      never      NY 15B9B18E0267BF18 ED YED0034 19961121135414S101702A05887
never      never      NY 15CC68211B0C0B7A ED YED0034 19970320153410S101702M00077
never      never      NY 15D87EBC1D45DBDB ED YED0034 19970605133549S101702A06437
never      never      NY 15E38AC400E62ECF ED YED0034 19970814202936S101702A06590
never      never      NY 15EA1A2B1C06D80E ED YED0034 19970925142356S101702A06700
never      never      NY 15F0FD7200FFCEE8 ED YED0034 19971108101340S101702Z34398
never      never      NY 15F0FE010A00B682 ED YED0034 19971108103304S101702Z34398
never      never      NY 15F1CEDC12072222 ED YED0034 19971113150814S101702A06815
never      never      NY 15F74CAA1A20C0D8 ED YED0034 19971218134249S101702A06920
never      never      NY 15FBBA1606AA183C ED YED0034 19980115174915S101702M00085
never      never      NY 160A062D0B3E9FA4 ED YED0034 19980416190527S101702M00089
never      never      NY 15685174095D110A ED YED0120 19950622S101702A045513AYED0
never      never      NY 156BBE640505F766 ED YED0120 19950714S101702A045968AYED0
never      never      NY 156EE5DB0A2F55CC ED YED0120 19950803S101702A046536AYED0
never      never      NY 156FFEB6093D4742 ED YED0120 19950810S101702A046695AYED0
never      never      NY 1574639E0C6EB142 ED YED0120 19950907S101702A047537AYED0
never      never      NY 157528AE03A5E27A ED YED0120 19950912S101702Z207810AYED0
never      never      NY 15757BFA0FCEFFB2 ED YED0120 19950914S101702A047657AYED0
never      never      NY 157D38821A5BA470 ED YED0120 19951102S101702M000602AYED0
never      never      NY 15AEBDC4015853E2 ED YED0120 19960912212211S101702A05717
never      never      NY 15B223CF0FEF4474 ED YED0120 19961004122314S101702A05754
never      never      NY 15B2A9B60121523C ED YED0120 19961007201605S101702Z26964
never      never      NY 15B2EB730DA6AA98 ED YED0120 19961009112903S101702Z26991
never      never      NY 15B317B819BBFB8A ED YED0120 19961010135243S101702A05771
never      never      NY 15B9B18B120E5FA8 ED YED0120 19961121135415S101702A05887
never      never      NY 15CC68281F88EF0C ED YED0120 19970320153410S101702M00077
never      never      NY 15D0CB7E085D9D44 ED YED0120 19970417134223S101702A06312
never      never      NY 15D0CC7117DFCF44 ED YED0120 19970417141749S101702A06312
never      never      NY 15D87EB8047D5C74 ED YED0120 19970605133550S101702A06437
never      never      NY 15F74CA2076C224E ED YED0120 19971218134250S101702A06920
never      never      NY 15FBBA101F5323B4 ED YED0120 19980115174927S101702M00085
never      never      NY 15700051176AB94C ED YEDSAM 19950810S101702A046615AYEDSA
never      never      NY 15921AC110CE0074 ED YEDSAM 19960314161457S101702M000666
never      never      NY 15BE17851035E7FA ED YEDSAM 19961219133558S101702A059912
never      never      NY 17C7B36A1D8D0FC8 EF EF5940 NOST000168
never      never      NY 17C1924B0A132399 EK EK6413 EMA0000030
never      never      NY 17E1A3850FCCF80D EK EK6413 EMA0000034
never      never      NY 17EEAE84187F09D9 EK EK6413 EMA0000048
never      never      NY 17E1C2440DC4CD36 EK EK6430 EMA0000034
never      never      NY 17E1A387132517C3 EK EK6481 EMA0000034
never      never      NY 17E1A439161BBAA5 EK EK6482 EMA0000034
never      never      NY 17D25C881E21F8BD EK EK6482 EMA0000039
never      never      NY 17E1A41C1AE65BF8 EK EK6510 EMA0000034
never      never      NY 17D347E80EF19A3A EK EK6510 EMA0000039
never      never      NY 17E1A41D1F2550AD EK EK6520 EMA0000034
never      never      NY 17D2602F08F76315 EK EK6520 EMA0000039
never      never      NY 17EEAF4F04638410 EK EK6520 EMA0000048
never      never      NY 17E1A4400D523B90 EK EK6603 EMA0000034
never      never      NY 17D25C9601951F3A EK EK6603 EMA0000039
never      never      NY 17E1A41E02189BE0 EK EK6710 EMA0000034
never      never      NY 17D25CA61F344B17 EK EK6710 EMA0000039
never      never      NY 17C18E7F176F0EA2 EK EK6841 EMA0000030
never      never      NY 17E1C2470F915C7A EK EK6866 EMA0000034
never      never      NY 17E1A45B0A93338D EK EK7618 EMA0000034
never      never      NY 17D25D9C0E1F3C1D EK EK7618 EMA0000039
never      never      NY 17E1A4831D6E96B9 EK EK7660 EMA0000034
never      never      NY 17D175FF02AB80BE EK EK7660 EMA0000039
never      never      NY 17EED3EA056D3EC9 EK EK7660 EMA0000048
never      never      NY 17E1A4821936F725 EK EK7661 EMA0000034
never      never      NY 17D175B20CB8FC90 EK EK7661 EMA0000039
never      never      NY 17E1A469191AB638 EK EK7663 EMA0000034
never      never      NY 17D25DAB1EC924C8 EK EK7663 EMA0000039
never      never      NY 17E1A48304A4E6CD EK EK7664 EMA0000034
never      never      NY 17D175B30EB36EF3 EK EK7664 EMA0000039
never      never      NY 17E1A4830F169014 EK EK7666 EMA0000034
never      never      NY 17D175FF1EC6E0F1 EK EK7666 EMA0000039
never      never      NY 17E1A4831742C891 EK EK7667 EMA0000034
never      never      NY 17D17602053BD87A EK EK7667 EMA0000039
never      never      NY 17E1A4921C25946D EK EK7668 EMA0000034
never      never      NY 17D175B51FC7BD65 EK EK7668 EMA0000039
never      never      NY 17EED42D0FDF9559 EK EK7668 EMA0000048
never      never      NY 17E1A48F1ABCAAD1 EK EK7672 EMA0000034
never      never      NY 17E1A35C07A3BE74 EK EK7681 EMA0000034
never      never      NY 17D2605B1D3CAA78 EK EK7681 EMA0000039
never      never      NY 17EBAE821DDF05B4 EK EK7681 EMA0000048
never      never      NN 15EF996A1ACC4EFA EM EM0060 19971030134545S101702A067897
never      never      NN 15FA9D32110EF5C7 EM EM0060 19980108153802S101702M000886
never      never      NN 152994E8113CD614 EM EM0070 19940519143412S101702A034287
never      never      NN 15ECE58705353AA0 EM EM0070 19971013090717S101702A067405
never      never      NN 15ECE58713D35E82 EM EM0080 19971013090718S101702A067405
never      never      NN 15A3B13C172C9DF0 EM EM0900 19960704140613S101702A055506
never      never      NN 15D8849107A9C884 EM EM0900 19970605170247S101702A064138
never      never      NN 15ECE5851EE2590C EM EM0900 19971013090719S101702A067405
never      never      NN 1514B83B0DC8CC08 EM YEM0061
never      never      NN 152994CA0221EF9C EM YEM0061 19940519142707S101702A03428
never      never      NN 15337F0507367F0C EM YEM0061 19940721163814S101702M00043
never      never      NN 154A9E681CA1DF62 EM YEM0061 19941215194000S101702M00052
never      never      NN 1558E4FE0B6522AC EM YEM0061 19950316154216S101702A04291
never      never      NN 1558EADE19AB5752 EM YEM0061 19950316191311S101702A04291
never      never      NN 1568502817757B04 EM YEM0061 19950622S101702M000590AYEM0
never      never      NN 157233531614ADDE EM YEM0061 19950824S101702M000598AYEM0
never      never      NN 157B01331F7A1DA4 EM YEM0061 19951019S101702M000621AYEM0
never      never      NN 157C16B3083537D8 EM YEM0061 19951026S101702A048979AYEM0
never      never      NN 157EEA2C176B6C54 EM YEM0061 19951113S101702A048936AYEM0
never      never      NN 158197AC147EA2F2 EM YEM0061 19951130S101702A049980AYEM0
never      never      NN 1584E7221B6BE9A4 EM YEM0061 19951221S101702A050563AYEM0
never      never      NN 158A0DF90FDFA6AA EM YEM0061 19960123S101702A051440AYEM0
never      never      NN 15921AC70E6FF484 EM YEM0061 19960314161545S101702M00066
never      never      NN 159796990F7B0F96 EM YEM0061 19960418134157S101702M00067
never      never      NN 159BD7EB1ECDB4A0 EM YEM0061 19960515152929S101702M00068
never      never      NN 15A9321F1B3401E4 EM YEM0061 19960808143147S101702A05627
never      never      NN 15AD9A501ACCC89C EM YEM0061 19960905153007S101702M00071
never      never      NN 15AEBEA00B48655E EM YEM0061 19960912215244S101702M00071
never      never      NN 15B0E4210CE53A2A EM YEM0061 19960926133930S101702A05731
never      never      NN 15B1047A0F52C930 EM YEM0061 19960927085815S101702Z26803
never      never      NN 15B1FE8D1C446AB0 EM YEM0061 19961003140825S101702A05753
never      never      NN 15ECE57809449E14 EM YEM0061 19971013090422S101702A06740
never      never      NN 15FA9CA80186FA3A EM YEM0061 19980108153349S101702M00088
never      never      NN 1514B84204A1D5C6 EM YEM0064
never      never      NN 152994CA18CEA1CC EM YEM0064 19940519142722S101702A03428
never      never      NN 157233520B29A8F0 EM YEM0064 19950824S101702M000598AYEM0
never      never      NN 157B013609038C48 EM YEM0064 19951019S101702M000621AYEM0
never      never      NN 158A0DF909B1805C EM YEM0064 19960123S101702A051440AYEM0
never      never      NN 158DB1B910807322 EM YEM0064 19960215144640S101702A05202
never      never      NN 15921AC91B15A402 EM YEM0064 19960314161635S101702M00066
never      never      NN 159BD7EA0650B316 EM YEM0064 19960515152934S101702M00068
never      never      NN 15ECE57507CC61FA EM YEM0064 19971013090424S101702A06740
never      never      NN 1514B84313396AE6 EM YEM0065
never      never      NN 152994CB19A92F88 EM YEM0065 19940519142723S101702A03428
never      never      NN 15337F07120015E4 EM YEM0065 19940721163815S101702M00043
never      never      NN 154A9E6904259C0C EM YEM0065 19941215193958S101702M00052
never      never      NN 156A81DE172F3BE0 EM YEM0065 19950706S101702M000589AYEM0
never      never      NN 1572335400A67C02 EM YEM0065 19950824S101702M000598AYEM0
never      never      NN 157B013619D82A3A EM YEM0065 19951019S101702M000621AYEM0
never      never      NN 158A0DFA08AE3C46 EM YEM0065 19960123S101702A051440AYEM0
never      never      NN 159BD7EA0E3015F2 EM YEM0065 19960515152930S101702M00068
never      never      NN 15AEBEA0003BE012 EM YEM0065 19960912215245S101702M00071
never      never      NN 15ECE5771F7CE15A EM YEM0065 19971013090419S101702A06740
never      never      NN 15FA9CA805C4D2E6 EM YEM0065 19980108153339S101702M00088
never      never      NN 1514B8441565B9E8 EM YEM0900
never      never      NN 152994CD0210D646 EM YEM0900 19940519142705S101702A03428
never      never      NN 1558E525004548C8 EM YEM0900 19950316154229S101702A04291
never      never      NN 1558EB0310B3C374 EM YEM0900 19950316191311S101702A04291
never      never      NN 1572335610182A54 EM YEM0900 19950824S101702M000598AYEM0
never      never      NN 157B01371F894A42 EM YEM0900 19951019S101702M000621AYEM0
never      never      NN 1584E4E90EBBDA2C EM YEM0900 19951221S101702A050710AYEM0
never      never      NN 158A0DFB046626F6 EM YEM0900 19960123S101702A051440AYEM0
never      never      NN 15A06A5E082E15C4 EM YEM0900 19960613174145S101702A05488
never      never      NN 15A17DF715AF230C EM YEM0900 19960620140644S101702A05506
never      never      NN 15ECE57817CE0694 EM YEM0900 19971013090419S101702A06740
never      never      NY 182A66E30C7841E8 EQ YEQISRK EAGL00002459DCE1D0CICSMVS
never      never      NY 18280ADF1B68D8DD EQ YEQKDGP GSER00018759C91710
never      never      NY 17E1EAC319BE8F5A ER YERDCU0 EAMR000003
never      never      NY 17E9804F0DE7FF19 ER YERDCU0 EAMR000005
never      never      NY 17E1EA611713CF7D ER YERDGE0 EAMR000003
never      never      NY 17E9806817F60985 ER YERDGE0 EAMR000005
never      never      NY 17E1EA6116ED0BFB ER YERDIN0 EAMR000003
never      never      NY 17E97A9B07E92630 ER YERDIN0 EAMR000005
never      never      NY 17E1EA600D19F422 ER YERDUP0 EAMR000003
never      never      NY 17E97AAC09FDAE7D ER YERDUP0 EAMR000005
never      never      NY 1803185A0432B3A6 ER YERPRI EAMR000022
never      never      NY 18089AD00FDD8734 ER YERPRI EAMR000029
never      never      NY 158A64AE135ACFC6 EV EV0600 19960125S101702A051501AEV060
never      never      NY 15A5E43C12F2EE58 EV EV0600 19960718135628S101702A055841
never      never      NY 16059A510FD3BAB4 EV EV5080 19980319140048S101702A070940
never      never      NY 17C78DE50E100676 EV EV7040 EKVS000010
never      never      NY 158A64AD02795C50 EV EV7130 19960125S101702A051501AEV713
never      never      NY 15C4B61C0EE8F8B0 EV YEVSICH 19970130162645S101702A06118
never      never      NY 15DCE40D038545EA EV YEVSICH 19970703125234S101702A06476
never      never      NY 15F632A60069883A EV YEVSICH 19971211133042S101702A06886
never      never      NN 15B9B6B502EF5E20 EW EW7010 19961121165906S101702A058971
never      never      NN 15BACAC614420C4E EW EW7010 19961128134025S101702A059169
never      never      NN 15D0C9D1065BD84A EW EW7010 19970417124259S101702A063168
never      never      NN 15D5300D19A5D517 EW EW7020 19970515123226S101702A063787
never      never      NN 15D64F5F09BC6D0B EW EW7020 19970522155508S101702A064034
never      never      NY 17CBEB64122862E6 EX EX0500 EXPN000020
never      never      NY 15B40F211A48DD32 EX EX7010 19961016172831S101702A057202
never      never      NY 15FA9CC00F901AA0 EX EX7010 19980108153804S101702M000886
never      never      NY 17C9756E06D8B8BB EX EX8030 EXPN000020
never      never      NY 159083F411E8405A EX EX8888 19960304133631S101702Z236837
never      never      NY 159088F91A7BEC24 EX EX8888 19960304163609S101702Z236837
never      never      NY 15A9CC1E0CCCFEE8 EX EX8888 19960812102421S101702Z261211
never      never      NY 15A29B9013B916B6 EX YEXERG
never      never      NY 1578CA730AC3964E EX YEXERG 19951005S101702A048266AYEXER
never      never      NY 157A826407C68504 EX YEXERG 19951016S101702Z213055AYEXER
never      never      NY 157D319A15207EDE EX YEXERG 19951102S101702A049197AYEXER
never      never      NY 157D584516B499E6 EX YEXERG 19951103S101702Z216005AYEXER
never      never      NY 157DD3E30ABDF378 EX YEXERG 19951106S101702Z216751AYEXER
never      never      NY 157F69BD0AD5EEE0 EX YEXERG 19951116S101702A049464AYEXER
never      never      NY 158F701000527FFA EX YEXERG 19960226170142S101702A052326
never      never      NY 158FBCDC199B20AE EX YEXERG 19960228145027S101702A052419
never      never      NY 158FBDA41EE2753E EX YEXERG 19960228151903S101702A052419
never      never      NY 158FBEAE157623C6 EX YEXERG 19960228155542S101702A052419
never      never      NY 158FBF1E0FD2FA18 EX YEXERG 19960228161103S101702A052419
never      never      NY 1590D9AD10744B34 EX YEXERG 19960306164420S101702A052579
never      never      NY 15921751133DD504 EX YEXERG 19960314141339S101702A052439
never      never      NY 15B40F150B5CA384 EX YEXERG 19961016172704S101702A057202
never      never      NY 15B664871C972068 EX YEXERG 19961031134918CGS101702A0583
never      never      NY 15B6648418AC57A8 EX YEXERG 19961031134918S101702A058312
never      never      NY 15CA30E416B57CE6 EX YEXERG 19970306131334CGS101702A0619
never      never      NY 15CA30E217120BC4 EX YEXERG 19970306131334S101702A061962
never      never      NY 15E3802F06B170EE EX YEXERG 19970814141321CGS101702M0008
never      never      NY 15E3801A12F6A18E EX YEXERG 19970814141321S101702M000800
never      never      NY 15FA9CA806B826D0 EX YEXERG 19980108153340CGS101702M0008
never      never      NY 15FA9CA318EC4E90 EX YEXERG 19980108153340S101702M000886
never      never      NY 160E640602611798 EX YEXERG 19980514135917CGS101702A0723
never      never      NY 160E64011C58086F EX YEXERG 19980514135917S101702A072308
never      never      NY 16173001093E34D9 EX YEXERG 19980709132140CGS101702A0732
never      never      NY 16172FFF0DFD3771 EX YEXERG 19980709132140S101702A073235
never      never      NY 158F6C62108FBF68 EX YEXERG A
never      never      NY 1615952900B52150 FARDX DLLST1
never      never      NY 181B2C1012D10CA9 FC FC0010 KLOM000062
never      never      NY 15B8A6000554B20A FC FC0020 19961114221845S101702A058752
never      never      NY 15C5CFB9066B8104 FC FC0020 19970206162503S101702A061517
never      never      NY 15D1440911D11632 FC FC0030 19970420133742S101702Z307085
never      never      NY 15F272141486C8A8 FC FC0030 19971117163042S101702Z345149
never      never      NY 15F2741C0775176E FC FC0030 19971117174349S101702Z345149
never      never      NY 1583CFBF17F11168 FC FC0110 19951214S101702A050488AFC011
never      never      NN 159F6A51192B35CE FC FC0110 19960607085733S101702A054822
never      never      NY 1583CFBF0E97E704 FC FC0130 19951214S101702A050488AFC013
never      never      NY 159F6A510105E148 FC FC0130 19960607085734S101702A054822
never      never      NN 1563BF580033685A FC FC0400 19950524170555S101702A044625
never      never      NN 1583CFB30C9CFCB8 FC YFCM02 19951214S101702A050488AYFCM0
never      never      NN 1583CFB315EE2A20 FC YFCM03 19951214S101702A050488AYFCM0
never      never      NY 1578CC300ECCEEEC FD FD8100 19951005S101702M000617AFD810
never      never      NY 15883B181CD1D36A FD FD8100 19960111S101702A051006AFD810
never      never      NY 159796A80233C87A FD FD8100 19960418134339S101702M000672
never      never      NY 15A0652F089DD038 FD FD8100 19960613143639S101702A054192
never      never      NY 1802F3FD105F252E FI FI1900 BKUR000052
never      never      NY 1806166C14EA9FCE FI FI5067 BKUR000052
never      never      NY 1839CCFE0FD5806C FI FI5600 BKUR000096
never      never      NY 15B455830C0F1B84 FI YFI7201 19961018112744S101702Z27138
never      never      NY 182EA7E4060BA193 FI YFIWMKG BKUR0001165A008305
never      never      NY 16C0C7BD0C245E90 FRNCOL01 FRNA0010
never      never      NY 17CF71E11BB5D3A3 FRNCOL01 FRNA0080
never      never      NY 16C0C7BF10256446 FRNCOL01 FRNA0090
never      never      NY 16C16606141B3A85 FRNCOL01 FRNV0010
never      never      NY 165453040F28F7E8 FRNCOL01 FRNV0020
never      never      NY 1653DC83116290ED FRNCOL01 FRNV0030
never      never      NY 168BCD8815A155A4 FRNCOL01 FRNV0040
never      never      NY 168BCD9015D3429D FRNCOL01 FRNV0050
never      never      NY 1654EF7A0DFAA909 FRNCOL01 FRNV0060
never      never      NY 17D039BC09098D7C FRNCOL01 FRNV0080
never      never      NY 16FA6C8E1DD8C165 FRNCOL01 FRNV0090
never      never      NY 1634778217891D68 FRNIBMCL FRNA0010
never      never      NY 1634778A02168C10 FRNIBMCL FRNA0020
never      never      NY 1634779117DEC4A8 FRNIBMCL FRNA0030
never      never      NY 163477991459D64C FRNIBMCL FRNA0040
never      never      NY 163477A007BAD74C FRNIBMCL FRNA0050
never      never      NY 163477A70ABC080C FRNIBMCL FRNA0060
never      never      NY 163477AE0FC131E4 FRNIBMCL FRNA0070
never      never      NY 161DFEA1095C0F68 FRNIBMCL FRNMHB10
never      never      NY 161DFEB0106B99CC FRNIBMCL FRNMHB12
never      never      NY 165B26910A397E28 FRNIBMCL FRNMHBP8
never      never      NY 1681ADA3093D2D38 FRNIBMCL FRNPLLI1
never      never      NY 1661E76C10A34DB0 FRNIBMCL FRNPLLI2
never      never      NY 168B8B19007CF24C FRNIBMCL FRNPLLI3
never      never      NY 164981C7012F4818 FRNIBMCL FRNPLLI4
never      never      NY 16A8743D18D8A8DD FRNIBMCL FRNPLLQ1
never      never      NY 165B277F1B16E244 FRNIBMCL FRNPLLQ2
never      never      NY 161DFF7710F73994 FRNIBMCL FRNPLLQ3
never      never      NY 161DFF821A28E6DC FRNIBMCL FRNPLLQ4
never      never      NY 161DFF8C1176ECCC FRNIBMCL FRNPLLUQ
never      never      YY 16A874400B85A2B5 FRNIBMCL FRNPLLVS
never      never      NY 152302E11FA2EA7C GE GE2950 19940407190123S101702A033023
never      never      NN 1538F6AE04CA1C96 GE GE7550 19940825113402S101702A036682
never      never      NN 15B787FF08E833F0 GE GE7550 19961107194151S101702M000730
never      never      NN 15BCFD791EC62704 GE GE7550 19961212131947S101702A059641
never      never      NY 1538D56D1AADC70C GE GE7580 19940824154405S101702A036682
never      never      NY 1538F6A60C81791C GE GE7580 19940825113350S101702A036682
never      never      NY 15B7880710170D42 GE GE7580 19961107194153S101702M000730
never      never      NY 1538D56E08437268 GE GE7590 19940824154407S101702A036682
never      never      NY 1538F6A51AEDBAB0 GE GE7590 19940825113352S101702A036682
never      never      NY 15B788010DB26162 GE GE7590 19961107194153S101702M000730
never      never      NY 1538F6AA1D334BC4 GE GE7620 19940825113355S101702A036682
never      never      NY 1592211D031E9F82 GE GE7620 19960314200328S101702A052811
never      never      NY 15B7880B16521910 GE GE7620 19961107194155S101702M000730
never      never      NN 1559F9E21ED3131E GE GE7690 19950323125534S101702A043120
never      never      NY 14CAF9DF119F2210 GE YGE0001
never      never      NY 14EAE58B114E8DDC GE YGE0002
never      never      NN 1516E60C0D740706 GE YGESP01
never      never      NN 152303221BCEECC4 GE YGESP01 19940407191249S101702A03303
never      never      NN 15501B270ABBB5A0 GE YGESP01 19950119173828S101702A04139
never      never      NN 1516E60211AB8964 GE YGESP02
never      never      NN 152303240CE82E84 GE YGESP02 19940407191251S101702A03303
never      never      NN 1516E61004901A30 GE YGESP04
never      never      NN 1523032605360DA6 GE YGESP04 19940407191258S101702A03303
never      never      NN 15501B28137EDB10 GE YGESP04 19950119173814S101702A04139
never      never      NY 15252E9609AF6D7C GE YYGE020 19940421143813S101702M00044
never      never      NY 15252EAC0ABF8F78 GE YYGE040 19940421143818S101702M00044
never      never      NY 1834227511CD1BCA GM YGMSTEU GM000001605A2E77C8
never      never      NY 175E0AA8030F44C6 GROUP00 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP00 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP00 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP00 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP00 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP00 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP00 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP00 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP00 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP00 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP00 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP00 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP00 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP00 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP00 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP01 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP01 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP01 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP01 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP01 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP01 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP01 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP01 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP01 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP01 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP01 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP01 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP01 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP01 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP01 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP02 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP02 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP02 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP02 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP02 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP02 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP02 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP02 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP02 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP02 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP02 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP02 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP02 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP02 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP02 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP03 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP03 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP03 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP03 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP03 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP03 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP03 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP03 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP03 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP03 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP03 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP03 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP03 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP03 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP03 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP04 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP04 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP04 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP04 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP04 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP04 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP04 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP04 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP04 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP04 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP04 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP04 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP04 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP04 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP04 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP05 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP05 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP05 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP05 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP05 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP05 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP05 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP05 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP05 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP05 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP05 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP05 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP05 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP05 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP05 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP06 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP06 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP06 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP06 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP06 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP06 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP06 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP06 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP06 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP06 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP06 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP06 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP06 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP06 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP06 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP07 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP07 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP07 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP07 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP07 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP07 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP07 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP07 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP07 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP07 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP07 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP07 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP07 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP07 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP07 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP08 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP08 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP08 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP08 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP08 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP08 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP08 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP08 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP08 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP08 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP08 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP08 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP08 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP08 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP08 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP09 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP09 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP09 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP09 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP09 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP09 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP09 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP09 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP09 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP09 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP09 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP09 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP09 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP09 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP09 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP10 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP10 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP10 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP10 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP10 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP10 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP10 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP10 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP10 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP10 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP10 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP10 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP10 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP10 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP10 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP11 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP11 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP11 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP11 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP11 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP11 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP11 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP11 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP11 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP11 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP11 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP11 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP11 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP11 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP11 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP12 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP12 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP12 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP12 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP12 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP12 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP12 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP12 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP12 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP12 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP12 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP12 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP12 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP12 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP12 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP13 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP13 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP13 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP13 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP13 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP13 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP13 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP13 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP13 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP13 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP13 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP13 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP13 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP13 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP13 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP14 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP14 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP14 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP14 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP14 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP14 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP14 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP14 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP14 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP14 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP14 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP14 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP14 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP14 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP14 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP15 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP15 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP15 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP15 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP15 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP15 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP15 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP15 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP15 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP15 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP15 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP15 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP15 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP15 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP15 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP16 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP16 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP16 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP16 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP16 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP16 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP16 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP16 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP16 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP16 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP16 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP16 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP16 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP16 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP16 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP17 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP17 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP17 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP17 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP17 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP17 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP17 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP17 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP17 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP17 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP17 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP17 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP17 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP17 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP17 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP18 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP18 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP18 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP18 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP18 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP18 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP18 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP18 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP18 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP18 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP18 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP18 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP18 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP18 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP18 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP19 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP19 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP19 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP19 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP19 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP19 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP19 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP19 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP19 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP19 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP19 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP19 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP19 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP19 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP19 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP20 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP20 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP20 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP20 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP20 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP20 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP20 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP20 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP20 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP20 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP20 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP20 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP20 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP20 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP20 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP21 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP21 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP21 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP21 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP21 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP21 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP21 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP21 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP21 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP21 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP21 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP21 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP21 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP21 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP21 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP22 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP22 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP22 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP22 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP22 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP22 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP22 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP22 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP22 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP22 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP22 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP22 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP22 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP22 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP22 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP23 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP23 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP23 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP23 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP23 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP23 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP23 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP23 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP23 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP23 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP23 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP23 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP23 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP23 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP23 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP24 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP24 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP24 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP24 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP24 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP24 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP24 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP24 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP24 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP24 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP24 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP24 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP24 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP24 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP24 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP25 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP25 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP25 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP25 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP25 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP25 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP25 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP25 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP25 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP25 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP25 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP25 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP25 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP25 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP25 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP26 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP26 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP26 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP26 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP26 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP26 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP26 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP26 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP26 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP26 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP26 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP26 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP26 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP26 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP26 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP27 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP27 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP27 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP27 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP27 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP27 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP27 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP27 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP27 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP27 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP27 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP27 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP27 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP27 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP27 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP28 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP28 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP28 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP28 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP28 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP28 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP28 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP28 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP28 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP28 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP28 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP28 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP28 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP28 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP28 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP29 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP29 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP29 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP29 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP29 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP29 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP29 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP29 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP29 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP29 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP29 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP29 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP29 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP29 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP29 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP30 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP30 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP30 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP30 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP30 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP30 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP30 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP30 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP30 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP30 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP30 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP30 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP30 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP30 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP30 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP31 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP31 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP31 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP31 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP31 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP31 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP31 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP31 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP31 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP31 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP31 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP31 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP31 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP31 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP31 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP32 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP32 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP32 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP32 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP32 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP32 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP32 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP32 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP32 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP32 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP32 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP32 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP32 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP32 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP32 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP33 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP33 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP33 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP33 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP33 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP33 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP33 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP33 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP33 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP33 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP33 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP33 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP33 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP33 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP33 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP34 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP34 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP34 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP34 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP34 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP34 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP34 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP34 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP34 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP34 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP34 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP34 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP34 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP34 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP34 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP35 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP35 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP35 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP35 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP35 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP35 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP35 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP35 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP35 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP35 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP35 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP35 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP35 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP35 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP35 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP36 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP36 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP36 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP36 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP36 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP36 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP36 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP36 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP36 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP36 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP36 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP36 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP36 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP36 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP36 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP37 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP37 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP37 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP37 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP37 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP37 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP37 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP37 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP37 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP37 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP37 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP37 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP37 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP37 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP37 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP38 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP38 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP38 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP38 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP38 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP38 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP38 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP38 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP38 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP38 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP38 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP38 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP38 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP38 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP38 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP39 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP39 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP39 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP39 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP39 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP39 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP39 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP39 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP39 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP39 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP39 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP39 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP39 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP39 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP39 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP40 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP40 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP40 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP40 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP40 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP40 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP40 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP40 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP40 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP40 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP40 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP40 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP40 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP40 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP40 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP41 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP41 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP41 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP41 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP41 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP41 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP41 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP41 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP41 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP41 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP41 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP41 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP41 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP41 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP41 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP42 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP42 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP42 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP42 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP42 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP42 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP42 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP42 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP42 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP42 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP42 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP42 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP42 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP42 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP42 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP43 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP43 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP43 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP43 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP43 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP43 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP43 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP43 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP43 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP43 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP43 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP43 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP43 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP43 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP43 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP44 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP44 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP44 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP44 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP44 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP44 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP44 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP44 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP44 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP44 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP44 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP44 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP44 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP44 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP44 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP45 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP45 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP45 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP45 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP45 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP45 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP45 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP45 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP45 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP45 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP45 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP45 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP45 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP45 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP45 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP46 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP46 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP46 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP46 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP46 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP46 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP46 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP46 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP46 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP46 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP46 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP46 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP46 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP46 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP46 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP47 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP47 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP47 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP47 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP47 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP47 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP47 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP47 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP47 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP47 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP47 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP47 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP47 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP47 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP47 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP48 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP48 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP48 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP48 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP48 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP48 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP48 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP48 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP48 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP48 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP48 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP48 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP48 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP48 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP48 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP49 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP49 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP49 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP49 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP49 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP49 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP49 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP49 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP49 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP49 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP49 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP49 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP49 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP49 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP49 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP50 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP50 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP50 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP50 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP50 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP50 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP50 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP50 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP50 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP50 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP50 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP50 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP50 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP50 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP50 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP51 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP51 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP51 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP51 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP51 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP51 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP51 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP51 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP51 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP51 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP51 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP51 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP51 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP51 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP51 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP52 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP52 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP52 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP52 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP52 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP52 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP52 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP52 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP52 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP52 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP52 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP52 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP52 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP52 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP52 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP53 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP53 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP53 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP53 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP53 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP53 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP53 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP53 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP53 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP53 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP53 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP53 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP53 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP53 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP53 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP54 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP54 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP54 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP54 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP54 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP54 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP54 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP54 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP54 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP54 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP54 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP54 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP54 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP54 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP54 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP55 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP55 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP55 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP55 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP55 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP55 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP55 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP55 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP55 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP55 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP55 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP55 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP55 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP55 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP55 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP56 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP56 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP56 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP56 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP56 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP56 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP56 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP56 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP56 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP56 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP56 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP56 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP56 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP56 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP56 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP57 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP57 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP57 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP57 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP57 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP57 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP57 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP57 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP57 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP57 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP57 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP57 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP57 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP57 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP57 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP58 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP58 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP58 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP58 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP58 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP58 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP58 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP58 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP58 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP58 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP58 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP58 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP58 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP58 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP58 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP59 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP59 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP59 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP59 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP59 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP59 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP59 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP59 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP59 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP59 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP59 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP59 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP59 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP59 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP59 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP60 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP60 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP60 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP60 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP60 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP60 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP60 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP60 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP60 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP60 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP60 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP60 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP60 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP60 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP60 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP61 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP61 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP61 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP61 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP61 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP61 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP61 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP61 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP61 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP61 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP61 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP61 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP61 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP61 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP61 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP62 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP62 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP62 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP62 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP62 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP62 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP62 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP62 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP62 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP62 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP62 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP62 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP62 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP62 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP62 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP63 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP63 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP63 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP63 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP63 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP63 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP63 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP63 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP63 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP63 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP63 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP63 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP63 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP63 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP63 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP64 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP64 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP64 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP64 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP64 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP64 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP64 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP64 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP64 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP64 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP64 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP64 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP64 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP64 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP64 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP65 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP65 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP65 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP65 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP65 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP65 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP65 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP65 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP65 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP65 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP65 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP65 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP65 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP65 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP65 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP66 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP66 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP66 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP66 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP66 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP66 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP66 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP66 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP66 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP66 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP66 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP66 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP66 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP66 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP66 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP67 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP67 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP67 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP67 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP67 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP67 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP67 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP67 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP67 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP67 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP67 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP67 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP67 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP67 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP67 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP68 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP68 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP68 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP68 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP68 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP68 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP68 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP68 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP68 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP68 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP68 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP68 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP68 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP68 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP68 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP69 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP69 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP69 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP69 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP69 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP69 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP69 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP69 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP69 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP69 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP69 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP69 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP69 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP69 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP69 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP70 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP70 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP70 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP70 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP70 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP70 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP70 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP70 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP70 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP70 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP70 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP70 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP70 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP70 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP70 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP71 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP71 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP71 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP71 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP71 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP71 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP71 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP71 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP71 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP71 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP71 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP71 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP71 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP71 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP71 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP72 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP72 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP72 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP72 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP72 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP72 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP72 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP72 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP72 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP72 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP72 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP72 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP72 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP72 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP72 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP73 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP73 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP73 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP73 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP73 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP73 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP73 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP73 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP73 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP73 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP73 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP73 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP73 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP73 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP73 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP74 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP74 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP74 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP74 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP74 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP74 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP74 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP74 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP74 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP74 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP74 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP74 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP74 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP74 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP74 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP75 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP75 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP75 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP75 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP75 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP75 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP75 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP75 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP75 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP75 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP75 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP75 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP75 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP75 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP75 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP76 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP76 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP76 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP76 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP76 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP76 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP76 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP76 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP76 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP76 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP76 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP76 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP76 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP76 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP76 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP77 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP77 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP77 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP77 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP77 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP77 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP77 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP77 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP77 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP77 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP77 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP77 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP77 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP77 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP77 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP78 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP78 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP78 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP78 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP78 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP78 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP78 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP78 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP78 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP78 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP78 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP78 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP78 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP78 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP78 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP79 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP79 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP79 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP79 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP79 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP79 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP79 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP79 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP79 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP79 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP79 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP79 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP79 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP79 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP79 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP80 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP80 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP80 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP80 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP80 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP80 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP80 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP80 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP80 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP80 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP80 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP80 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP80 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP80 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP80 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP81 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP81 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP81 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP81 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP81 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP81 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP81 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP81 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP81 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP81 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP81 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP81 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP81 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP81 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP81 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP82 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP82 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP82 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP82 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP82 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP82 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP82 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP82 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP82 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP82 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP82 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP82 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP82 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP82 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP82 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP83 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP83 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP83 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP83 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP83 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP83 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP83 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP83 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP83 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP83 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP83 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP83 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP83 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP83 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP83 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP84 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP84 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP84 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP84 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP84 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP84 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP84 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP84 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP84 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP84 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP84 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP84 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP84 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP84 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP84 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP85 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP85 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP85 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP85 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP85 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP85 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP85 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP85 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP85 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP85 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP85 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP85 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP85 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP85 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP85 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP86 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP86 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP86 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP86 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP86 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP86 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP86 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP86 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP86 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP86 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP86 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP86 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP86 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP86 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP86 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP87 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP87 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP87 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP87 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP87 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP87 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP87 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP87 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP87 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP87 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP87 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP87 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP87 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP87 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP87 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP88 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP88 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP88 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP88 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP88 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP88 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP88 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP88 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP88 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP88 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP88 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP88 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP88 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP88 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP88 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP89 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP89 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP89 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP89 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP89 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP89 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP89 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP89 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP89 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP89 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP89 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP89 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP89 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP89 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP89 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP90 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP90 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP90 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP90 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP90 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP90 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP90 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP90 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP90 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP90 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP90 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP90 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP90 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP90 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP90 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP91 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP91 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP91 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP91 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP91 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP91 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP91 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP91 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP91 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP91 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP91 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP91 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP91 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP91 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP91 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP92 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP92 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP92 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP92 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP92 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP92 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP92 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP92 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP92 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP92 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP92 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP92 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP92 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP92 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP92 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP93 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP93 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP93 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP93 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP93 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP93 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP93 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP93 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP93 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP93 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP93 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP93 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP93 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP93 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP93 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP94 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP94 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP94 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP94 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP94 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP94 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP94 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP94 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP94 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP94 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP94 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP94 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP94 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP94 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP94 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP95 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP95 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP95 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP95 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP95 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP95 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP95 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP95 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP95 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP95 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP95 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP95 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP95 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP95 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP95 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP96 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP96 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP96 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP96 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP96 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP96 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP96 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP96 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP96 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP96 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP96 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP96 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP96 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP96 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP96 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP97 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP97 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP97 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP97 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP97 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP97 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP97 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP97 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP97 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP97 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP97 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP97 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP97 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP97 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP97 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP98 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP98 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP98 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP98 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP98 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP98 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP98 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP98 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP98 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP98 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP98 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP98 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP98 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP98 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP98 CBRIDBS UW95199HDZ11G0
never      never      NY 175E0AA8030F44C6 GROUP99 CBRHDBCV 051332294392039080
never      never      NY 16D27F7E1189E49D GROUP99 CBRHDBCV 294249629382893950
never      never      NY 16862E77028FDC09 GROUP99 CBRHDBS 042982409377892471
never      never      NY 1685E46A138C8297 GROUP99 CBRHDBS 327975575377873514
never      never      NY 16D27F7F15F04B11 GROUP99 CBRHDBS 368069393382893951
never      never      NY 16DB32A617D686F2 GROUP99 CBRHDBS 399935218383464102
never      never      NY 175E0AA71A52A73B GROUP99 CBRHDBS 441624379392039079
never      never      NY 16D27F7F0709202D GROUP99 CBRHDBSD 118038573382893951
never      never      NY 175E0AA5130A4C35 GROUP99 CBRHDBSD 319441973392039077
never      never      NY 175E0AC50DE9D776 GROUP99 CBRIDBS 2004-03-19-05.20.09.71
never      never      NY 172D6C3000FA1F04 GROUP99 CBRIDBS UA03047HDZ11G0
never      never      NY 16875152183ED528 GROUP99 CBRIDBS UW71235HDZ11E0
never      never      NY 1687519A17B3DC28 GROUP99 CBRIDBS UW71236HDZ11F0
never      never      NY 16DB329B1E00E1AC GROUP99 CBRIDBS UW83215HDZ11F0
never      never      NY 170E96631BD73BD0 GROUP99 CBRIDBS UW95199HDZ11G0
never      never      NY 153C6C3E10C0C460 HP1 ABWPTI
never      never      NY 1540AA0803E417E2 HP1 ACDBQ1
never      never      NY 153F980E0C205CC8 HP1 ACF3Q1
never      never      NY 153C6C8F1AF3D322 HP1 ADDZS3
never      never      NY 154089200AE6C024 HP1 ADWVQZ
never      never      NY 153C6BBF1C19759C HP1 AE85S3
never      never      NY 153C6BD70100FAB4 HP1 AE86S3
never      never      NN 15407F9F0CCB1902 HP1 RWBB022
never      never      NN 15407FB31729AD6A HP1 RWBB023
never      never      NY 152FB5701C6932B0 HP1 RWBC011
never      never      NY 152FB5EE0BEA1C56 HP1 RWBC024
never      never      NY 1537C0B706E9DE34 HP1 RWBC030
never      never      NY 152FB61B195716C4 HP1 RWBC032
never      never      NY 151F7BE70A8C1BFC HP1 RWBC037
never      never      NY 15407DDD08692D98 HP1 RWBC040
never      never      NY 152DFCA20786D508 HP1 RWBC041
never      never      NY 152DFCC804CEFB6A HP1 RWBC048
never      never      NY 152DFCD404C000FC HP1 RWBC049
never      never      NY 1537C02E0C9F972C HP1 RWBM007
never      never      NY 152E1FFC0B491014 HP1 RWBP007
never      never      NY 1537BF930E473BB4 HP1 RWBP021
never      never      NY 152FAB140165D1D2 HP1 RWBP022
never      never      NY 1540631904C31DFA HP1 RWBP023
never      never      NY 152FAB3B114D87BC HP1 RWBP026
never      never      NY 152FAB4A02823CEA HP1 RWBP029
never      never      NN 1538A00914D55CE4 HP1 RWBP030
never      never      NN 1538A01413F6782A HP1 RWBP032
never      never      NY 152FAB5719A2830A HP1 RWBP034
never      never      NY 152FAB2E0B26D1FA HP1 RWBP036
never      never      NN 1537C09E09539F82 HP1 RWBR040
never      never      NY 152FB8CA00AF4C9A HP1 RWBR043
never      never      NN 1537BFBB159E5AE6 HP1 RWBT033
never      never      NY 153C6C1A1C3B58FE HP3 AA40TI
never      never      NY 153C6BEA0A6228AE HP3 AA4XTI
never      never      NY 153C6C26027ABF90 HP3 AA4ZTI
never      never      NY 153C6BFD0945DAE6 HP3 ABISTI
never      never      NY 153C6C3E10C0C460 HP3 ABWPTI
never      never      NY 1540AA0803E417E2 HP3 ACDBQ1
never      never      NY 153F980E0C205CC8 HP3 ACF3Q1
never      never      NY 151F3A881767B85C HP3 ACLQMC
never      never      NY 153C6C8F1AF3D322 HP3 ADDZS3
never      never      NY 153C6C9D092DCB32 HP3 ADEBS3
never      never      NY 153C6CAA08F9C4A0 HP3 ADECS3
never      never      NY 154089200AE6C024 HP3 ADWVQZ
never      never      NY 153C6B9F12D1BB4C HP3 AE84S3
never      never      NY 153C6BBF1C19759C HP3 AE85S3
never      never      NY 153C6BD70100FAB4 HP3 AE86S3
never      never      NY 153446601A7F2242 HP3 AE8GS3
never      never      NY 15344679154EDF92 HP3 AE8HS3
never      never      NY 1534468711EDB08E HP3 AE8IS3
never      never      NY 153C6CBF107E7C66 HP3 AE9SS3
never      never      NY 153C6CC91181313E HP3 AE9TS3
never      never      NY 153C6CD318660C1A HP3 AE9US3
never      never      NY 153F160509A1F5E8 HP3 AJBTSH
never      never      NN 1540D52D072A8A1C HP3 RWBB004
never      never      NN 1540D5B902BD3748 HP3 RWBB015
never      never      NN 1540D5C8167A26DE HP3 RWBB019
never      never      NN 1540D5D804C10A84 HP3 RWBB020
never      never      NN 15407F9F0CCB1902 HP3 RWBB022
never      never      NN 15407FB31729AD6A HP3 RWBB023
never      never      NY 152FB5701C6932B0 HP3 RWBC011
never      never      NY 152FB5EE0BEA1C56 HP3 RWBC024
never      never      NY 1537C0B706E9DE34 HP3 RWBC030
never      never      NY 152FB61B195716C4 HP3 RWBC032
never      never      NY 151F7BE70A8C1BFC HP3 RWBC037
never      never      NY 15407DDD08692D98 HP3 RWBC040
never      never      NY 152DFCA20786D508 HP3 RWBC041
never      never      NY 152DFCC804CEFB6A HP3 RWBC048
never      never      NN 1540A7B71375BA42 HP3 RWBM003
never      never      NY 1537C02E0C9F972C HP3 RWBM007
never      never      NY 1537BF70086EBD5E HP3 RWBP004
never      never      NY 152E1FFC0B491014 HP3 RWBP007
never      never      NY 1537BF8712B0D1C8 HP3 RWBP008
never      never      NY 1537BF930E473BB4 HP3 RWBP021
never      never      NY 152FAB140165D1D2 HP3 RWBP022
never      never      NY 1540631904C31DFA HP3 RWBP023
never      never      NY 152FAB3B114D87BC HP3 RWBP026
never      never      NY 152FAB4A02823CEA HP3 RWBP029
never      never      NN 1538A00914D55CE4 HP3 RWBP030
never      never      NN 1538A01413F6782A HP3 RWBP032
never      never      NY 152FAB5719A2830A HP3 RWBP034
never      never      NN 1537C09E09539F82 HP3 RWBR040
never      never      NY 152FB8CA00AF4C9A HP3 RWBR043
never      never      NN 15407E8D1F133F46 HP3 RWBT027
never      never      NN 1540D57708047726 HP3 RWBW032
never      never      NN 1540D5870CB279C6 HP3 RWBZ014
never      never      NN 1540D5990AC82F9E HP3 RWBZ015
never      never      NN 1540D53C19C96B78 HP3 RWBZ033
never      never      NN 1540D54D190FFB2C HP3 RWBZ034
never      never      NY 1793CF0C06D87AE9 IS ISLP20 DML0000004
never      never      NY 17B1B2461C68A334 IS ISLP23 DML0000014
never      never      NY 17AB0ED618CF9F61 IS ISLP24 DML0000006
never      never      NY 175EB87A0046401E IS ISLP87 A06M025140
never      never      NY 17B299AF1547470C IS ISLP88 DML0000014
never      never      NY 17465B0D02D59615 IS ISLP89 A06M024770
never      never      NY 17A867CF1027FFEA IS ISLP93 DML0000011
never      never      NY 17D16E691E9EC1CE IT IT5000 RFT0000015
never      never      NY 177C9DD11A871B48 IT IT5501 A20Y001508
never      never      NY 15B8A5E81D691C64 KB KB2010 19961114221018S101702A058608
never      never      NY 15B92FA10D1799D0 KB KB2010 19961118082438S101702Z277492
never      never      NY 15BACCA11C862B22 KB KB2010 19961128144621S101702A059147
never      never      NY 155C31F619477AAA KB KB2020 19950406154743S101702A043366
never      never      NY 15FA9CDA00594348 KB KB2020 19980108153831S101702M000886
never      never      NY 156259B200F60008 KB KB5010 19950515S101702Z189864AKB501
never      never      NY 156273BC149B0D46 KB KB5010 19950516S101702Z190008AKB501
never      never      NY 156AB0B11D491CE2 KB KB5010 19950707S101702Z198701AKB501
never      never      NY 15B8A6000554B20A KD FC0020 19961114221845S101702A058752
never      never      NY 15C5CFB9066B8104 KD FC0020 19970206162503S101702A061517
never      never      NY 15F264DE161D7C18 KD FC5000 19971117083808S101702Z344985
never      never      NY 15F2E5E2114F55C6 KD FC5000 19971120133503S101702A068334
never      never      NY 15F3165B1CF1E4D4 KD FC5000 19971121183017S101702Z346058
never      never      NY 158F69AA0EA4C302 KD KD0068 19960226131303S101702Z235794
never      never      NY 161878261BA05DF7 KD KD0540 19980717170619S101702Z383268
never      never      NY 15B104390214625A KD KD0600 19960927085001S101702Z268024
never      never      NY 15B1FEA60B8D931A KD KD0600 19961003141208S101702A057537
never      never      NY 15DAB25E0DF199C4 KD KD0600 19970619134842S101702A064764
never      never      NY 15CC6B18173BBEC6 KD KD0620 19970320172119S101702A062566
never      never      NY 15D8848F16F2D0C2 KD KD0620 19970605170251S101702A064138
never      never      NY 15DAB2591D03FCEE KD KD0620 19970619134843S101702A064764
never      never      NY 1585FD900D3959B0 KD KD0630 19951228S101702A050783AKD063
never      never      NY 15AD9AE0108393F0 KD KD0630 19960905154850S101702M000711
never      never      NY 15B0E4331D085892 KD KD0630 19960926134359S101702A057314
never      never      NY 15B0E4360F49A806 KD KD0640 19960926134359S101702A057314
never      never      NY 15B1044C1D3B5666 KD KD0640 19960927085317S101702Z268027
never      never      NY 15B1FEA00F75F5FA KD KD0640 19961003141209S101702A057537
never      never      NY 157B014C1A9528B6 KD KD0670 19951019S101702M000621AKD067
never      never      NY 155C323703EB05A2 KD KD5020 19950406S101702A043419AKD502
never      never      NY 157B014C12699D0A KD KD5020 19951019S101702M000621AKD502
never      never      NY 157C2E08114EF1AC KD KD5040 19951027S101702Z214879AKD504
never      never      NY 157E4FDB0D153F30 KD KD5040 19951109S101702A049329AKD504
never      never      NY 157E5C6E013FDBE8 KD KD5040 19951110S101702A049329AKD504
never      never      NY 157B014C05F1EFD4 KD KD7000 19951019S101702M000621AKD700
never      never      NY 157C161D12025286 KD KD7000 19951026S101702A048919AKD700
never      never      NY 1577DCD711F06A74 KD KD7098 19950929S101702Z210568AKD709
never      never      NY 15784CB413F1E26E KD KD7098 19951002S101702Z210762AKD709
never      never      NY 1578CA630B64679E KD KD7098 19951005S101702A048223AKD709
never      never      NY 15A084B61057ECFC KD KD7200 19960614092516S101702A055036
never      never      NY 15C285030193C06A KD KD8010 19970116174423S101702A060854
never      never      NY 15C5CEC01010BD42 KD KD8010 19970206155033S101702A061213
never      never      NY 15E38BF50169C18A KD KD8010 19970814211634S101702A065956
never      never      NY 1572336409D76370 KD KD8011 19950824S101702M000598AKD801
never      never      NY 15C5CEC108DF46DC KD KD8011 19970206155034S101702A061213
never      never      NY 15CE44D016153D5C KD KD8012 19970401115710S101702Z304029
never      never      NY 15CE4B401A011FA0 KD KD8012 19970401154800S101702Z304029
never      never      NY 15CEBB92073E4C12 KD KD8012 19970404104807S101702Z304584
never      never      NY 15C5CC090DF64506 KD KD8014 19970206141304S101702A061437
never      never      NY 15E38C1F1BA0260A KD KD8014 19970814211637S101702A065956
never      never      NY 15C5CC091133ABDE KD KD8015 19970206141306S101702A061437
never      never      NY 15E38C230DB7BDEC KD KD8015 19970814211640S101702A065956
never      never      NY 15C6BBEB01E36862 KD KD8030 19970212131949S101702Z295927
never      never      NY 15CD84B711145636 KD KD8030 19970327172217S101702Z303860
never      never      NY 15E38C0905BCFF08 KD KD8030 19970814211641S101702A065956
never      never      NY 15FCCCAA036D0FEA KD KD8040 19980122133753S101702A069908
never      never      NY 15FDE5FE0314BA2E KD KD8040 19980129132654S101702A070094
never      never      NY 15A067CB119AD1EC KD KD8070 19960613161006S101702A054120
never      never      NY 15AEAADF1C7E1118 KD KD8090 19960912100713S101702Z265960
never      never      NY 15AF57861B8B8DDE KD KD8090 19960916170653S101702Z266453
never      never      NY 15B1120A06301B18 KD KD8090 19960927170504S101702Z268138
never      never      NY 15834A2D135F83E0 KD KD8096 19951211S101702Z223940AKD809
never      never      NY 159BD80404846662 KD KD8096 19960515153311S101702M000684
never      never      NY 15AD9ADE0046B79C KD KD8096 19960905155004S101702M000711
never      never      NN 1583CFC0008CCFE0 KD KD8200 19951214S101702A050488AKD820
never      never      NN 1585FD791FFF0AEA KD KD8200 19951228S101702A050761AKD820
never      never      NY 15C69B1A1FCADB2E KD KD8512 19970211174525S101702Z295758
never      never      NY 15C6B2D912026632 KD KD8512 19970212075517S101702Z295814
never      never      NY 15C6B6A814B7A556 KD KD8512 19970212101134S101702Z295814
never      never      NN 155C32451E87F830 KD YKD0500 19950406S101702A043450AYKD0
never      never      NN 1563BCFD0EDB2042 KD YKD0500 19950524S101702A044691AYKD0
never      never      NN 1568EAFE0D5A3F90 KD YKD0500 19950626S101702A045713AYKD0
never      never      NN 1572335406D0308E KD YKD0500 19950824S101702M000598AYKD0
never      never      NN 15894B480F964A0E KD YKD0500 19960118S101702A051288AYKD0
never      never      NN 158ECAFF138EEB44 KD YKD0500 19960222143318S101702A05216
never      never      NN 159F26CD05C1FA22 KD YKD0500 19960605164059S101702Z25155
never      never      NN 15A17DF80F05374E KD YKD0500 19960620140638S101702A05506
never      never      NN 15AD1AFC03B5B9C2 KD YKD0500 19960902113434S101702Z26425
never      never      NN 15AD9A511B94EA2E KD YKD0500 19960905153037S101702M00071
never      never      NN 15C5EB1509074F78 KD YKD0500 19970207084459S101702A06140
never      never      NN 15C7FD8D1B047776 KD YKD0500 19970220131055S101702A06185
never      never      NN 15CD59581F868D66 KD YKD0500 19970326152928S101702A06277
never      never      NN 15CD85F103D59AAC KD YKD0500 19970327180544S101702A06277
never      never      NN 15E37FE91C7B23D4 KD YKD0500 19970814140402S101702M00080
never      never      NN 15E6CEF11FA4B640 KD YKD0500 19970904152318S101702A06608
never      never      NN 15E88BA11939633E KD YKD0500 19970915163933S101702A06682
never      never      NN 15E8FE3F13644320 KD YKD0500 19970918130127S101702A06687
never      never      NN 15F2EEB91D073CD8 KD YKD0500 19971120185108S101702M00081
never      never      NN 15F35ED91227D75A KD YKD0500 19971123134508S101702Z34613
never      never      NN 15F362DB077F0C56 KD YKD0500 19971123160833S101702Z34614
never      never      NN 15F3646E1EA25C0A KD YKD0500 19971123170525S101702Z34614
never      never      NN 15F3662E1D147D34 KD YKD0500 19971123180702S101702Z34615
never      never      NN 15F369CE0D0F47CA KD YKD0500 19971123194631S101702Z34616
never      never      NN 15F3AC9012C73DA2 KD YKD0500 19971125120634S101702Z34670
never      never      NN 15F51AAE092A4BFA KD YKD0500 19971204142946S101702Z34881
never      never      NN 15F5E973080E51E4 KD YKD0500 19971209175158S101702Z34969
never      never      NN 15F603000BF7D730 KD YKD0500 19971210090526S101702Z34976
never      never      NN 15F603781AF2232E KD YKD0500 19971210092215S101702Z34979
never      never      NN 15FBBA170A2A671E KD YKD0500 19980115174941S101702M00085
never      never      NN 15FF2F5D15AE1F82 KD YKD0500 19980206175332S101702A07022
never      never      NN 1600415710BDCF88 KD YKD0500 19980213132025S101702A07042
never      never      NN 160484D90C45D320 KD YKD0500 19980312162639S101702A07099
never      never      NN 16048755010B03D8 KD YKD0500 19980312175740S101702A07099
never      never      NN 1607F2CF0A1FA4F4 KD YKD0500 19980403141032S101702A07147
never      never      NN 160A06261A472F65 KD YKD0500 19980416190530S101702M00089
never      never      NN 1612E4F30FCA96DA KD YKD0500 19980612054559S101702M00092
never      never      NN 161310A30C678722 KD YKD0500 19980613074807S101702Z37863
never      never      NN 1613E4AC0B090F20 KD YKD0500 19980618141748S101702A07326
never      never      NN 1615EAC01A922BBA KD YKD0500 19980701111931S101702A07336
never      never      NN 1615EEA60F9DED86 KD YKD0500 19980701133922S101702A07336
never      never      NN 16161DF5150335D8 KD YKD0500 19980702175321S101702Z38171
never      never      NN 161731E90D5CB082 KD YKD0500 19980709142935S101702A07375
never      never      NN 16187C441D650656 KD YKD0500 19980717193307S101702Z38328
never      never      NN 16187CA10D0C1682 KD YKD0500 19980717194602S101702Z38329
never      never      NN 157B01301557EAE2 KD YKD0640 19951019S101702M000621AYKD0
never      never      NN 157EEA2B0B614E78 KD YKD0640 19951113S101702A048936AYKD0
never      never      NN 1590FD5E01CE84F8 KD YKD0640 19960307140102S101702A05214
never      never      NN 15A17DF50EA9DEEA KD YKD0640 19960620140639S101702A05506
never      never      NN 15B0E4230CBCBF48 KD YKD0640 19960926133932S101702A05731
never      never      NN 157B013102691596 KD YKD0641 19951019S101702M000621AYKD0
never      never      NN 157EEA2B006453EC KD YKD0641 19951113S101702A048936AYKD0
never      never      NN 1590FD5D0499C14E KD YKD0641 19960307140103S101702A05214
never      never      NN 15A17DF50EB09798 KD YKD0641 19960620140639S101702A05506
never      never      NN 15B0E41008853F86 KD YKD0641 19960926133927S101702A05731
never      never      NN 157B013103143876 KD YKD0642 19951019S101702M000621AYKD0
never      never      NN 157EEA2C118B488E KD YKD0642 19951113S101702A048936AYKD0
never      never      NN 158197AC1508C70A KD YKD0642 19951130S101702A049980AYKD0
never      never      NN 1590FD5C1E039004 KD YKD0642 19960307140103S101702A05214
never      never      NN 15921ACD0C53E05C KD YKD0642 19960314161748S101702M00066
never      never      NN 1597969911B74380 KD YKD0642 19960418134159S101702M00067
never      never      NN 159BD7EA0A2201E4 KD YKD0642 19960515152932S101702M00068
never      never      NN 15A932370B9BDBC6 KD YKD0642 19960808143158S101702A05627
never      never      NN 15AD9A60060A0F4E KD YKD0642 19960905153039S101702M00071
never      never      NN 15B0E420059B0CC4 KD YKD0642 19960926133928S101702A05731
never      never      NN 15B1044114608070 KD YKD0642 19960927085133S101702Z26802
never      never      NN 15B1FE8700AD7DF0 KD YKD0642 19961003140829S101702A05753
never      never      NN 157B01300CD380D0 KD YKD0643 19951019S101702M000621AYKD0
never      never      NN 157EEA2B04950E2A KD YKD0643 19951113S101702A048936AYKD0
never      never      NN 159E0CE1082F7438 KD YKD0643 19960529163059S101702Z25054
never      never      NN 15A473800933E026 KD YKD0643 19960709095917S101702Z25643
never      never      NN 15A5E43F034B9320 KD YKD0643 19960718135640S101702A05586
never      never      NN 15B0E41605439978 KD YKD0643 19960926133929S101702A05731
never      never      NN 157B013314A80B84 KD YKDC91 19951019S101702M000621AYKDC9
never      never      NN 155C323E135E2824 KD YKDH00 19950406S101702A043450AYKDH0
never      never      NN 15CD59540ABCE1C8 KD YKDH00 19970326152925S101702A062772
never      never      NN 15CD85F10E6A5B02 KD YKDH00 19970327180543S101702A062772
never      never      NN 155C3243073ED954 KD YKDH01 19950406S101702A043450AYKDH0
never      never      NN 155C3243037F14D4 KD YKDH02 19950406S101702A043450AYKDH0
never      never      NN 155C32430C15DA0E KD YKDH03 19950406S101702A043450AYKDH0
never      never      NN 15E3801909B1647C KD YKDH03 19970814141325S101702M000800
never      never      NN 155C323C1F691A1C KD YKDH04 19950406S101702A043450AYKDH0
never      never      NN 155C323D0BF5FB1C KD YKDH05 19950406S101702A043450AYKDH0
never      never      NN 155C323D1FDE6A50 KD YKDH06 19950406S101702A043450AYKDH0
never      never      NN 155C323D1DB64B6E KD YKDH50 19950406S101702A043450AYKDH5
never      never      NN 155C323E13450388 KD YKDH51 19950406S101702A043450AYKDH5
never      never      NN 155C323E13F52FD8 KD YKDH52 19950406S101702A043450AYKDH5
never      never      NN 155C323F1DA6EE94 KD YKDH53 19950406S101702A043450AYKDH5
never      never      NN 155C323F15AD8A24 KD YKDH58 19950406S101702A043450AYKDH5
never      never      NN 155C324019D2BF54 KD YKDH59 19950406S101702A043450AYKDH5
never      never      NN 155C32410F7AEF26 KD YKDH60 19950406S101702A043450AYKDH6
never      never      NN 155C32410922D810 KD YKDH61 19950406S101702A043450AYKDH6
never      never      NN 155C324215629C66 KD YKDH91 19950406S101702A043450AYKDH9
never      never      NN 15BACC9313B278D8 KD YKDH91 19961128144447S101702A059147
never      never      NN 155C3242044DC582 KD YKDH92 19950406S101702A043450AYKDH9
never      never      NN 157B0133172455E4 KD YKDR00 19951019S101702M000621AYKDR0
never      never      NN 157B01331881AB60 KD YKDR01 19951019S101702M000621AYKDR0
never      never      NN 157B013407DC7C62 KD YKDR03 19951019S101702M000621AYKDR0
never      never      NN 157B013510F9BF94 KD YKDR04 19951019S101702M000621AYKDR0
never      never      NN 157B01350071D5B8 KD YKDR06 19951019S101702M000621AYKDR0
never      never      NN 157B01360C742192 KD YKDR16 19951019S101702M000621AYKDR1
never      never      NN 157B013608401B52 KD YKDR17 19951019S101702M000621AYKDR1
never      never      NN 157B01360F463884 KD YKDR18 19951019S101702M000621AYKDR1
never      never      NN 157B01360F346934 KD YKDR19 19951019S101702M000621AYKDR1
never      never      NN 157B013702C1292E KD YKDR20 19951019S101702M000621AYKDR2
never      never      NN 157B01360FA330A0 KD YKDR21 19951019S101702M000621AYKDR2
never      never      NN 157B013711EC162A KD YKDR22 19951019S101702M000621AYKDR2
never      never      NN 157B013703BE3850 KD YKDR50 19951019S101702M000621AYKDR5
never      never      NN 157B013715FBC704 KD YKDR51 19951019S101702M000621AYKDR5
never      never      NN 157B013710BC5C4A KD YKDR53 19951019S101702M000621AYKDR5
never      never      NN 157B0138152B6542 KD YKDR59 19951019S101702M000621AYKDR5
never      never      NN 157B013D1BB7A3FA KD YKDR60 19951019S101702M000621AYKDR6
never      never      NN 157B013C1712294C KD YKDR61 19951019S101702M000621AYKDR6
never      never      NN 157B013E07B45500 KD YKDR67 19951019S101702M000621AYKDR6
never      never      NN 157B012B1FE83E02 KD YKDR68 19951019S101702M000621AYKDR6
never      never      NN 157B012F1074D6D2 KD YKDR73 19951019S101702M000621AYKDR7
never      never      NN 157B012D0425CD12 KD YKDR74 19951019S101702M000621AYKDR7
never      never      NN 157B012D03F7BFF2 KD YKDR75 19951019S101702M000621AYKDR7
never      never      NN 157B012B19851ABA KD YKDR78 19951019S101702M000621AYKDR7
never      never      NN 15B0E40F07484198 KD YKDR78 19960926133932S101702A057314
never      never      NN 157B012B0A684DD8 KD YKDR88 19951019S101702M000621AYKDR8
never      never      NN 157B012B1A32EC8C KD YKDR89 19951019S101702M000621AYKDR8
never      never      NN 157B012B11253B60 KD YKDR91 19951019S101702M000621AYKDR9
never      never      NN 157B012F17B71458 KD YKDR92 19951019S101702M000621AYKDR9
never      never      NN 157B012D1E69E1EC KD YKDR93 19951019S101702M000621AYKDR9
never      never      NN 157B012E0D3DCD80 KD YKDR97 19951019S101702M000621AYKDR9
never      never      NN 157B012E10191FDA KD YKDR98 19951019S101702M000621AYKDR9
never      never      NN 155C32440D013D8C KD YKDS91 19950406S101702A043450AYKDS9
never      never      NN 15CD85F013C52902 KD YKDS91 19970327180544S101702A062772
never      never      NN 157B012E1793B91C KD YKDT00 19951019S101702M000621AYKDT0
never      never      NN 15A932271B75D182 KD YKDT00 19960808143156S101702A056273
never      never      NN 157B012F13FEF75A KD YKDV81 19951019S101702M000621AYKDV8
never      never      NN 157B9F2C1C4E9826 KD YKDV81 19951023S101702Z214190AYKDV8
never      never      NN 157BC01D0B0D5624 KD YKDV81 19951024S101702Z214339AYKDV8
never      never      NN 157BC607119387BA KD YKDV81 19951024S101702Z214421AYKDV8
never      never      NN 157EEA2B00BA6AE2 KD YKDV81 19951113S101702A048936AYKDV8
never      never      NN 158147710CCE6808 KD YKDV81 19951128S101702Z221489AYKDV8
never      never      NN 158197A91A6277CE KD YKDV81 19951130S101702A049980AYKDV8
never      never      NN 15921ACA1E8A2146 KD YKDV81 19960314161746S101702M000666
never      never      NN 159BD7EA06A58A10 KD YKDV81 19960515152935S101702M000684
never      never      NN 15A9321C1348F6C4 KD YKDV81 19960808143159S101702A056273
never      never      NN 15AD9A511306D3F8 KD YKDV81 19960905153031S101702M000711
never      never      NN 15B0E41A07BB2F12 KD YKDV81 19960926133929S101702A057314
never      never      NN 15B104221CBF2376 KD YKDV81 19960927084725S101702Z268022
never      never      NN 15B1FE8707CC76AE KD YKDV81 19961003140832S101702A057537
never      never      NN 15997B3D1157CD8E KD YKDX81 19960430144759S101702Z245908
never      never      NN 15997B6A10193FCA KD YKDX81 19960430145417S101702Z245908
never      never      NN 1599CDF318B0CD4E KD YKDX81 19960502160759S101702A053827
never      never      NN 159BD7E901D3785E KD YKDX81 19960515152931S101702M000684
never      never      NY 15501B1D1894F578 KEIN KD8014 19950119173805S101702A0414
never      never      NY 15501B1F12A18210 KEIN KD8015 19950119173805S101702A0414
never      never      NY 15A93269122828C2 KEIN NS0890 19960808144239S101702A0563
never      never      NY 15AA4B82062790A6 KEIN NS0890 19960815142208S101702A0564
never      never      NY 15AB65010A6D2094 KEIN NS0890 19960822141851S101702A0566
never      never      NY 14DD80E91611F964 KS KS0600
never      never      NY 154A994901A34B88 KS KS0600 19941215163732S101702A040306
never      never      NY 154A9C390108A038 KS KS0600 19941215182205S101702A040306
never      never      NY 154A9C3C0B81E13E KS KS0610 19941215182206S101702A040306
never      never      NY 15A06AC81EDFD8D2 KS KS0720 19960613175707S101702A054915
never      never      NY 15BD2F7B06D4DCDE KS KS0720 19961213190918S101702A059882
never      never      NY 15E264D91A9172D8 KS KS0720 19970807131518S101702A065672
never      never      NY 146931EA089B3C10 KS KS8000
never      never      NY 161097811AD2C3B8 KS KS8050 19980528140608S101702A072741
never      never      NY 1469311008FAC394 KS KS8900
never      never      NY 14F07EEA108A9BFE KS YKS0031
never      never      NY 15C5A9021D11D1B0 KS YKS0802 19970205171935S101702A06140
never      never      NY 15C5CDB80290E4FC KS YKS0802 19970206151324S101702A06140
never      never      NY 15C5EFAE046AC4F4 KS YKS0802 19970207112844S101702A06156
never      never      NY 15D530F806BAC2AF KS YKS0802 19970515130326S101702A06387
never      never      NY 15D5FE1E087A8967 KS YKS0802 19970520152637S101702A06403
never      never      NY 15E122B6100B6608 KS YKS0802 19970730130516S101702A06561
never      never      NY 15E9A9080C11DC3A KS YKS0802 19970922185351S101702A06694
never      never      NY 160480F70195E1E2 KS YKS0802 19980312140727S101702A07100
never      never      NY 160E6C9414C2B25E KS YKS0802 19980514190209S101702A07251
never      never      NY 15D531011C2714A2 KS YKS0806 19970515130321S101702A06387
never      never      NY 15D5FE1E06E0015E KS YKS0806 19970520152633S101702A06403
never      never      NY 15E122B215B0F988 KS YKS0806 19970730130512S101702A06561
never      never      NY 15E9A9080B234082 KS YKS0806 19970922185347S101702A06694
never      never      NY 15F0B3E204C81A5E KS YKS0806 19971106141958S101702A06810
never      never      NY 160480F704784A38 KS YKS0806 19980312140715S101702A07100
never      never      NY 160E6C9215393F5C KS YKS0806 19980514190144S101702A07251
never      never      NN 15D530FE0FDD980E KS YKS0809 19970515130322S101702A06387
never      never      NN 15D5FE1D18543E3B KS YKS0809 19970520152634S101702A06403
never      never      NY 160E6C8E1CEFC334 KS YKS0813 19980514190151S101702A07251
never      never      NY 160EB0D40F5D0D0E KS YKS0813 19980516114927S101702Z37492
never      never      NY 1613E56F1740210C KS YKS0813 19980618144536S101702A07328
never      never      NY 155F7CCB14535948 KS YKS5551 19950427S101702A043905AYKS5
never      never      NY 15807C8F0A393196 KS YKS5551 19951123S101702A049861AYKS5
never      never      NY 1581BC9B17CE2FBC KS YKS5551 19951201S101702A050046AYKS5
never      never      NY 1583CF950A954152 KS YKS5551 19951214S101702A050423AYKS5
never      never      NY 15BD2F690661B65C KS YKS5551 19961213190524S101702A05988
never      never      NY 15C39D880FA90CA2 KS YKS5551 19970123170322S101702A06099
never      never      NY 15C43FC108E725F4 KS YKS5551 19970127175027S101702Z29310
never      never      NY 15CA30A11FB83D46 KS YKS5551 19970306130420S101702A06174
never      never      NY 15E382E11FD1313C KS YKS5551 19970814154706S101702M00082
never      never      NY 15EB3140182E11DE KS YKS5551 19971002124932S101702A06713
never      never      NY 1607F47213DDE91A KS YKS5551 19980403151109S101702Z36824
never      never      NY 160D49D91657B8F8 KS YKS5551 19980507134024S101702A07218
never      never      NY 160E641E15A66F6B KS YKS5551 19980514140042S101702A07230
never      never      NY 16131CF0132EF012 KS YKS5551 19980613150900S101702Z37865
never      never      NY 1617303B115B2127 KS YKS5551 19980709132913S101702A07349
never      never      NY 155F7CCB1751D630 KS YKS5552 19950427S101702A043905AYKS5
never      never      NY 15807C91122733AE KS YKS5552 19951123S101702A049861AYKS5
never      never      NY 1581BC9C16B9BFB4 KS YKS5552 19951201S101702A050046AYKS5
never      never      NY 1583CF961ED82F84 KS YKS5552 19951214S101702A050423AYKS5
never      never      NY 15BD2F681AE16098 KS YKS5552 19961213190524S101702A05988
never      never      NY 15E382E11DAE20C0 KS YKS5552 19970814154715S101702M00082
never      never      NY 160F546507A4E9F8 KS YKS5552 19980520132122S101702A07262
never      never      NY 15AEB4BE0882A382 KS YKS5553 19960912155328S101702A05710
never      never      NY 15BD2F6A06FD2C8A KS YKS5553 19961213190525S101702A05988
never      never      NY 15C39D8815111DC2 KS YKS5553 19970123170324S101702A06099
never      never      NY 15CE9A5317318254 KS YKS5553 19970403145839S101702A06268
never      never      NY 15D3EF6706F673D4 KS YKS5553 19970507131535S101702A06311
never      never      NY 15D87F81108E9D1C KS YKS5553 19970605140318S101702A06395
never      never      NY 15E382E218DDB9A6 KS YKS5553 19970814154722S101702M00082
never      never      NY 15EB3133182C165A KS YKS5553 19971002124933S101702A06713
never      never      NY 16013C6610826A82 KS YKS5553 19980219190855S101702A07054
never      never      NY 1601646C0EAA38C2 KS YKS5553 19980220190032S101702A07054
never      never      NY 1611B0D9040F1E43 KS YKS5553 19980604135613S101702A07279
never      never      NY 1615EEA81940ABD3 KS YKS5553 19980701133926S101702Z38152
never      never      NY 1617303D133A78E8 KS YKS5553 19980709132913S101702A07349
never      never      NN 150CFBA511783720 KS YKSAUFT
never      never      NN 151E9D6D18BC86E4 KS YKSAUFT 19940310195022S101702A03234
never      never      NN 151FB036173F5ACA KS YKSAUFT 19940317154525S101702A03252
never      never      NN 1520C9B3183C5B60 KS YKSAUFT 19940324153804S101702A03278
never      never      NN 152648891D64FB0E KS YKSAUFT 19940428145413S101702A03378
never      never      NY 1529963E17645A12 KS YKSAUFT 19940519152148S101702A03441
never      never      NY 152BC8D10ECBBD12 KS YKSAUFT 19940602144938S101702A03455
never      never      NY 153150E30C41AED0 KS YKSAUFT 19940707194026S101702M00047
never      never      NY 1536C7C71622437C KS YKSAUFT 19940811140925S101702A03642
never      never      NY 1536D1C90537339C KS YKSAUFT 19940811195830S101702A03642
never      never      NY 154A9A510B790ED4 KS YKSAUFT 19941215164630S101702A04039
never      never      NY 154A9C40009D10C8 KS YKSAUFT 19941215182250S101702A04039
never      never      NY 155249051560D374 KS YKSAUFT 19950202142636S101702A04179
never      never      NY 15547C421718CC92 KS YKSAUFT 19950216142447S101702A04214
never      never      NY 1561B0C50FB84470 KS YKSAUFT 19950511S101702A044324AYKSA
never      never      NY 1564FD5A1A35CDA6 KS YKSAUFT 19950601S101702M000585AYKSA
never      never      NY 157230400F815CA8 KS YKSAUFT 19950824S101702A047164AYKSA
never      never      NY 15757C0513447D46 KS YKSAUFT 19950914S101702A047692AYKSA
never      never      NY 1583C99706009534 KS YKSAUFT 19951214S101702M000648AYKSA
never      never      NY 1583C51515E20594 KS YKSAUFT 19951214S101702Z224822AYKSA
never      never      NY 159633290999DBF2 KS YKSAUFT 19960409173948S101702A05301
never      never      NY 1596542B19C2BDBC KS YKSAUFT 19960410132144S101702Z24274
never      never      NY 15965583058DD2EA KS YKSAUFT 19960410140945S101702Z24276
never      never      NY 1596583D1FA84186 KS YKSAUFT 19960410154724S101702Z24281
never      never      NY 159797631046EF48 KS YKSAUFT 19960418140918S101702A05345
never      never      NY 159863560871884C KS YKSAUFT 19960423154952S101702A05364
never      never      NY 159BD8ED1B350282 KS YKSAUFT 19960515160557S101702M00068
never      never      NY 15B43678023ED9C8 KS YKSAUFT 19961017165520S101702A05790
never      never      NY 15B4F01F0A5E5F86 KS YKSAUFT 19961022074124S101702Z27187
never      never      NY 15B4FB5F1C8B104C KS YKSAUFT 19961022142351S101702Z27207
never      never      NY 15B54C5A0137E976 KS YKSAUFT 19961024144245S101702A05808
never      never      NY 15B56A3105C55AE0 KS YKSAUFT 19961025083025S101702Z27313
never      never      NY 15B56E2A17DA35EA KS YKSAUFT 19961025105240S101702Z27321
never      never      NY 15B8996708F1EF16 KS YKSAUFT 19961114144518S101702M00074
never      never      NY 15B8A1DE0F9BDBD2 KS YKSAUFT 19961114194908S101702M00074
never      never      NY 15BC8C2E175FC006 KS YKSAUFT 19961209174335S101702A05946
never      never      NY 15BDE9D711B2E6CA KS YKSAUFT 19961218101955S101702A05999
never      never      NY 15C6E5C918C07FF4 KS YKSAUFT 19970213141858S101702A06151
never      never      NY 15F6334F1B6852B8 KS YKSAUFT 19971211135316S101702A06896
never      never      NY 16001B63183B2DD4 KS YKSAUFT 19980212144151S101702M00083
never      never      NY 168DD4C201466813 KS YKSAUFT A15S000557
never      never      NY 175FCE5A0CFDC6CD KS YKSFTXT A14S002412533962A5
never      never      NN 14F17F570C179124 KS YKSLFNR
never      never      NN 154A99271F6F15FA KS YKSLFNR 19941215163239S101702A04030
never      never      NN 154A9C1014114058 KS YKSLFNR 19941215181826S101702A04030
never      never      NY 1509AEAE1561F664 KS YKSMODU
never      never      NY 151E9D6A0132D42C KS YKSMODU 19940310195039S101702A03234
never      never      NY 151FB0320BB17792 KS YKSMODU 19940317154541S101702A03252
never      never      NY 1520C9C70B72BB8A KS YKSMODU 19940324153841S101702A03278
never      never      NN 152648861B54F39A KS YKSMODU 19940428145414S101702A03378
never      never      NN 152996380925ED74 KS YKSMODU 19940519152202S101702A03441
never      never      NN 152BC8CC09049F8C KS YKSMODU 19940602145024S101702A03455
never      never      NN 153150E2172DF882 KS YKSMODU 19940707194027S101702M00047
never      never      NN 1536C7BD13F3E0B8 KS YKSMODU 19940811140924S101702A03642
never      never      NN 1536D1B018842212 KS YKSMODU 19940811195758S101702A03642
never      never      NN 154A9A4F0D858DAC KS YKSMODU 19941215164631S101702A04039
never      never      NN 154A9C3E15381990 KS YKSMODU 19941215182251S101702A04039
never      never      NN 155249031B3E8EF4 KS YKSMODU 19950202142637S101702A04179
never      never      NN 15547C421CBF9A46 KS YKSMODU 19950216142448S101702A04214
never      never      NN 1561B0C21E8AAE32 KS YKSMODU 19950511S101702A044324AYKSM
never      never      NN 1572303E1E0F82E0 KS YKSMODU 19950824S101702A047164AYKSM
never      never      NN 1583C997096B3DC0 KS YKSMODU 19951214S101702M000648AYKSM
never      never      NN 1596332906AE8548 KS YKSMODU 19960409173948S101702A05301
never      never      NN 159797630E3B1B3A KS YKSMODU 19960418140921S101702A05345
never      never      NN 159BD8DC1077A2DA KS YKSMODU 19960515160306S101702M00068
never      never      NY 15B43677179A5E04 KS YKSMODU 19961017165521S101702A05790
never      never      NY 15B4FB5F07CE385C KS YKSMODU 19961022142351S101702Z27207
never      never      NY 15B54C590CEE7BEE KS YKSMODU 19961024144246S101702A05808
never      never      NY 15B56E2C177B6FF8 KS YKSMODU 19961025105241S101702Z27321
never      never      NY 15B8995A103CBC86 KS YKSMODU 19961114144530S101702M00074
never      never      NY 15B8A1DC1ED5141C KS YKSMODU 19961114194917S101702M00074
never      never      NY 15BC8C281F924658 KS YKSMODU 19961209174338S101702A05946
never      never      NY 15F6334E1FE33AFA KS YKSMODU 19971211135319S101702A06896
never      never      NY 15F6558D09AD722A KS YKSMODU 19971212102013S101702Z35018
never      never      NY 15F6FC0D0EC3E22C KS YKSMODU 19971216133928S101702A06916
never      never      NY 16001B63137CA2D8 KS YKSMODU 19980212144151S101702M00083
never      never      NY 15209A9E0FE56B14 KS YKSZNID 19940323113754S101702A03263
never      never      NY 1522FC091E9A706A KS YKSZNID 19940407150310S101702A03296
never      never      NY 1522FEAF1380473A KS YKSZNID 19940407164427S101702A03296
never      never      NY 15BD2F5C18903F58 KS YKSZNID 19961213190542S101702A05988
never      never      NY 1558E39009FCEDEA KS ZKSFTXT 19950316145243S101702A04266
never      never      NN 15FBB30A0E3F3E8E KV BX0130 19980115133833S101702A069359
never      never      NN 16173BB70544877E KV BX0130 19980709201828S101702A073668
never      never      NN 1617503A06090CEE KV BX0130 19980710083334S101702A073668
never      never      NN 157B2587123CB8B4 KX YKX002 19951020S101702A048828AYKX00
never      never      NN 158007560378CA20 KX YKX002 19951120S101702A049712AYKX00
never      never      NN 1594ED0E0A16EBD2 KX YKX002 19960401150805S101702A053178
never      never      NN 15A7F1480F9F145C KX YKX002 19960731150729S101702A056211
never      never      NN 15D2FCC7120F4E2E KX YKX002 19970501123152S101702A063604
never      never      NN 15E38A0F16ED64F8 KX YKX002 19970814200734S101702A065850
never      never      NN 15ED6AF904FAFFCE KX YKX002 19971016164307S101702A067570
never      never      NN 16001B5403154BE6 KX YKX002 19980212144153S101702M000834
never      never      NN 160A061D0CF7A3EF KX YKX002 19980416190522S101702M000898
never      never      NY 1612CD00175CB72B LB YLB0103 19980611152558S101702M00084
never      never      NY 1612CD020FB49484 LB YLB0105 19980611152558S101702M00084
never      never      NY 1520C9EE1D904E1E LB YLB0113 19940324154725S101702A03279
never      never      NY 15486A821EBF08C6 LB YLB0113 19941201191749S101702M00047
never      never      NY 154AA1F803CBB844 LB YLB0113 19941215214909S101702M00047
never      never      NY 1562CD131A892102 LB YLB0113 19950518S101702M000545AYLB0
never      never      NY 15BD026108E2C2B8 LB YLB0113 19961212161055S101702M00066
never      never      NY 15F6360F0531FD1E LB YLB0113 19971211152839S101702M00072
never      never      NY 16036E9A04DDBB84 LB YLB0113 19980305182743S101702M00083
never      never      NY 161750690E76B6CA LB YLB0113 19980710083933S101702M00084
never      never      NY 161759BC1D3EE66C LB YLB0113 19980710141321S101702M00084
never      never      NY 15D0CDB70411E4DC LB YLB0115 19970417145740S101702M00071
never      never      NY 15F6360E17A6E950 LB YLB0115 19971211152840S101702M00072
never      never      NY 16036EA81BEABB18 LB YLB0115 19980305182800S101702M00083
never      never      NY 1617507D166076FF LB YLB0115 19980710083934S101702M00084
never      never      NY 161759E012ACD504 LB YLB0115 19980710141321S101702M00084
never      never      NY 15EA14201E07BD7A LB YLB0116 19970925104749S101702Z33552
never      never      NY 15ED91DE1F2AF776 LB YLB0116 19971017154949S101702M00072
never      never      NY 15F636091D5A0768 LB YLB0116 19971211152840S101702M00072
never      never      NY 1617507D0C167F85 LB YLB0116 19980710083934S101702M00084
never      never      NY 161759DB037762FF LB YLB0116 19980710141322S101702M00084
never      never      NY 17E0AD9B1FE3B731 LC LC0510I TFBM0000255772715A
never      never      NY 1827403014BBFFD7 LC LC0511I TFBM00003359C2729FMVS
never      never      NN 15BACACC0E8F24AC LC LC5000 19961128134126S101702A059244
never      never      NN 15E382F11A2120A2 LC LC5000 19970814155557S101702M000820
never      never      NN 15FCCE3E0C84AEF2 LC LC5000 19980122143236S101702M000889
never      never      NY 1825D9701EE97EAD LC YLCTF02 TFBM00003359B6B121MVS
never      never      NY 1825D96E188133E4 LC YLCTF03 TFBM00003359B6B138MVS
never      never      NY 17CBEB3000D70B3A LQ LQ8090 LIQ0000015
never      never      NY 17E1D01E1601F401 LQ LQ8090 LIQ0000019
never      never      NN 14EBFA8A0437A5F0 LV YLV001D
never      never      NN 14A362EE0CBD3CB8 LV YLV001E
never      never      NN 15A7A55812697092 LV YLV0024 19960729175120S101702A05613
never      never      NN 15A953FA0457560A LV YLV0024 19960809104406S101702A05638
never      never      NN 15AF468412991118 LV YLV0024 19960916065859S101702Z26623
never      never      NN 15AFCAA21C6C5E26 LV YLV0024 19960919134517S101702A05720
never      never      NN 15C1666300ED22BA LV YLV0024 19970109144533S101702A06065
never      never      NN 15CB4A5904364DB6 LV YLV0024 19970313130752S101702A06231
never      never      NN 15E8FDCB178BE292 LV YLV0024 19970918124528S101702A06687
never      never      NN 15EC4D9A12ACAA38 LV YLV0024 19971009142943S101702A06732
never      never      NN 15F4025316263006 LV YLV0024 19971127151620S101702A06852
never      never      NN 160577C3112FE878 LV YLV0024 19980318172336S101702Z36548
never      never      NN 16076EA91CAD28B2 LV YLV0024 19980331072213S101702Z36753
never      never      NN 160780911073932A LV YLV0024 19980331180350S101702Z36753
never      never      NN 1607824E05B6C55A LV YLV0024 19980331190659S101702Z36753
never      never      NN 1608BBA6013713C6 LV YLV0024 19980408135941S101702A07156
never      never      NN 16240C4A058C2B68 M21SAMT2 SP1BS7T
never      never      NN 16240C4B0A3A1108 M21SAMT2 SP1BS9T
never      never      NN 1624161907231ECE M23SAMT2 SP1BS1T
never      never      NN 1624163601CBD7CA M23SAMT2 SP1BS3T
never      never      NN 162416531343F742 M23SAMT2 SP1BS7T
never      never      NN 162416551EA5E2F2 M23SAMT2 SP1BS9T
never      never      NN 154921C4195BA576 MD YMD0651 19941206083936S101702A04010
never      never      NN 15497F2E0875479E MD YMD0651 19941208162230S101702A04010
never      never      NN 154A41F31EE37A4C MD YMD0651 19941213123405S101702A04038
never      never      NN 155B13C313C15ED8 MD YMD0651 19950330S101702A043203AYMD0
never      never      NN 1564FD7A1F9F1CE0 MD YMD0651 19950601S101702M000585AYMD0
never      never      NY 153F9E6E00703118 ME ME0300 19941006195423S101702A037982
never      never      NY 15E38C0119181CAA ME ME0300 19970814211635S101702A065803
never      never      NY 16DAFC971DC41148 MF MF8150 A06M020109
never      never      NY 16DB013C0B1F2689 MF MF8230 A06M020109
never      never      NY 16DB00FE074B050D MF MF8900 A06M020109
never      never      NY 160E6BF9131F0AC4 NF NF5800 19980514184411S101702A072505
never      never      NY 15E265C8114413FC NF NF5890 19970807134910S101702A065780
never      never      NY 16001C0A18FC764B NF NF5890 19980212145537S101702M000834
never      never      NY 17D28B72048870D4 NF NF5900 NBSI000089
never      never      NY 17C93F6F1DD81E53 NF NF5910 NBSI000061
never      never      NY 17D28B730AA89FAB NF NF5910 NBSI000089
never      never      NY 17D265751A3AD9EA NF NF7330 NBSI000089
never      never      NY 157E4B0F074029E2 NF NF8800 19951109S101702A049436ANF880
never      never      NY 157F661208014560 NF NF8800 19951116S101702M000633ANF880
never      never      NY 15EC4BC5009019D6 NF NF8800 19971009132420S101702A067383
never      never      NY 157BA294020428A8 NF YNFCGB1 19951023S101702Z214260AYNFC
never      never      NY 157BABF11868E936 NF YNFCGB1 19951023S101702Z214285AYNFC
never      never      NY 157BC49D1DA8EFF8 NF YNFCGB1 19951024S101702Z214404AYNFC
never      never      NY 1536D79D0AD9ED8C NH NH5910 19940811233300S101702A036480
never      never      NY 1536D79906531EF8 NH NH7100 19940811233217S101702A036480
never      never      NY 17C3ED151B66666A NI YNI0201 IPC0000123568132CD
never      never      NY 17C3ED15184BA740 NI YNI0202 IPC0000123568132CD
never      never      NY 17C3ED1519269AB5 NI YNI0211 IPC0000123568132CD
never      never      NY 17C3ED151D30534F NI YNI0212 IPC0000123568132CE
never      never      NY 180501E71FCD78AD NI YNICOFM IPC000017558A323CC
never      never      NY 17C4447209FA921A NJ NJ7180 QMS0000016
never      never      NY 17D976D91B90EB24 NJ NJ7180 QMS0000021
never      never      NY 17EE39061D91F223 NJ NJ7180 QMS0000023
never      never      NY 17C8A5C31BC42BED NJ YNJ050 QMS000001656A8CDEA
never      never      NY 17D20C8007EE8080 NJ YNJ050 QMS000001956F7B92C
never      never      NY 17E06A7A0986A8D1 NJ YNJ050 QMS000002157703E45
never      never      NY 15A47D5B03D9DC8A NK NK0030V 19960709155209S101702Z25661
never      never      NY 15C206D6072A1C08 NK NK0200V 19970113142804S101702Z29022
never      never      NY 15ED6648009BB03A NK NK5010 19971016135110S101702M000847
never      never      NY 160E6980140B1D42 NK NK5010 19980514170627S101702M000860
never      never      NY 15FBB79906BD0AD4 NK NK5020 19980115162122S101702A069682
never      never      NY 160E697B14D5EE52 NK NK5020 19980514170627S101702M000860
never      never      NY 15C01FA60D4ED9B0 NK NK5030 19970101115058S101702A060411
never      never      NY 15C39ED8061F4E74 NK NK5030 19970123175105S101702A061091
never      never      NY 15C01FB1151D534A NK NK5040 19970101115059S101702A060411
never      never      NY 15FBB7960A23FD42 NK NK5040 19980115162123S101702A069682
never      never      NY 15FBB7961D3CDECC NK NK5050 19980115162124S101702A069682
never      never      NY 160E698112EF9EDC NK NK5050 19980514170628S101702M000860
never      never      NY 15E38BDD1ACA7F32 NK NK5110 19970814211251S101702A065977
never      never      NY 15FBB796072CA953 NK NK5110 19980115162114S101702A069682
never      never      NY 15FBB79707BD1CDA NK NK5120 19980115162114S101702A069682
never      never      NY 160E69810FEBB4BA NK NK5120 19980514170629S101702M000860
never      never      NY 15FBB7990C0EDFEA NK NK5130 19980115162115S101702A069682
never      never      NY 160E69B30325EB5B NK NK5130 19980514170630S101702M000860
never      never      NY 15E8FDC818210CCA NK NK5140 19970918124542S101702A066889
never      never      NY 15FBB7971A9A83B0 NK NK5140 19980115162115S101702A069682
never      never      NY 15E8FDCA1AE5E722 NK NK5160 19970918124543S101702A066889
never      never      NY 15FBB79400F8B2B6 NK NK5160 19980115162116S101702A069682
never      never      NY 15FBB79914485CBA NK NK5170 19980115162116S101702A069682
never      never      NY 160E698103038518 NK NK5170 19980514170630S101702M000860
never      never      NY 15CE9DEB08F6D08A NK NK5180 19970403170629S101702A062868
never      never      NY 15FBB7970F0C0F41 NK NK5180 19980115162117S101702A069682
never      never      NY 15E38BCA046A68F7 NK NK5190 19970814211257S101702A065977
never      never      NY 15FBB794007A552C NK NK5190 19980115162118S101702A069682
never      never      NY 15CE9DEC120CE330 NK NK5200 19970403170632S101702A062868
never      never      NY 15FBB79210B53BA6 NK NK5200 19980115162118S101702A069682
never      never      NY 15FBB7980B8106C1 NK NK5210 19980115162119S101702A069682
never      never      NY 15B3198106D4ACDA NK NK5240 19961010145701S101702A057697
never      never      NY 15C01FA505B2FBC2 NK NK5240 19970101115037S101702A060411
never      never      NY 153E80C716BFB5BE NK NK5240V 19940929172932S101702A03787
never      never      NY 15DE008000BCD94E NK NK5310 19970710143127S101702A065189
never      never      NY 160E69A70EAB22AB NK NK7000 19980514170631S101702M000860
never      never      NY 15B3198115703F7A NK NK7030 19961010145702S101702A057697
never      never      NY 15C01FA80EE059B8 NK NK7030 19970101115041S101702A060411
never      never      NY 1584E7FC02BEC326 NK NK7050 19951221S101702A050630ANK705
never      never      NY 15CE9DED060E7572 NK NK7050 19970403170633S101702A062868
never      never      NY 15EC6F261F3D978E NK NK7200 19971010103011S101702Z338761
never      never      NY 15ED663E151A0002 NK NK7200 19971016135112S101702M000847
never      never      NY 15F0B3DA1583261A NK NK7300 19971106141951S101702A068097
never      never      NY 15F633341D5D0D06 NK NK7300 19971211135159S101702A068963
never      never      NY 15819756011997CC NK NK7800 19951130S101702A049919ANK780
never      never      NY 15C01FCD02A4E69C NK NK7800 19970101115537S101702A060424
never      never      NY 1578CD8D14602938 NK NK7810 19951005S101702A048293ANK781
never      never      NY 15C01FCD1B398D1C NK NK7810 19970101115539S101702A060424
never      never      NY 15C01FCF11D74902 NK NK7840 19970101115540S101702A060424
never      never      NY 15C2860910718C26 NK NK7910 19970116182042S101702A060940
never      never      NY 15E38C0C1563C3E6 NK NK7910 19970814211302S101702A065977
never      never      NY 15B3197E141AF95C NK NK7920 19961010145703S101702A057697
never      never      NY 15C01FA31137941C NK NK7920 19970101115048S101702A060411
never      never      NY 15C01FA715760F8A NK NK7930 19970101115051S101702A060411
never      never      NY 15E38C371965C976 NK NK8010 19970814211305S101702A065977
never      never      NY 160E69B90A21EFD4 NK NK8010 19980514170632S101702M000860
never      never      NY 15E38C3A10D4453E NK NK8020 19970814211307S101702A065977
never      never      NY 15CE9DF109460DA8 NK NK8030 19970403170634S101702A062868
never      never      NY 160E69B90A5D5710 NK NK8030 19980514170633S101702M000860
never      never      NY 15AB67041486344C NK NK8040 19960822153011S101702A056584
never      never      NY 15C01FD116E4DD16 NK NK8040 19970101115540S101702A060424
never      never      NY 160E69B90A43C29D NK NK8050 19980514170633S101702M000860
never      never      NY 15CE9DF40E3F8606 NK NK8060 19970403170636S101702A062868
never      never      NY 160E69AC1DE0B3AA NK NK8060 19980514170635S101702M000860
never      never      NY 15F2E6271C5658E4 NK NK8080 19971120134500S101702A068428
never      never      NY 15F51A1312E2B2B8 NK NK8080 19971204140627S101702A068796
never      never      NY 15C01FD2160756D8 NK NK8090 19970101115541S101702A060424
never      never      NY 15E38C3A0AB69AD4 NK NK8090 19970814211329S101702A065977
never      never      NY 15A29BAC004F4372 NK NK8110 19960627163246S101702A055267
never      never      NY 15B0E8C805FC95B8 NK NK8110 19960926162634S101702A057441
never      never      NY 1577B36A17DC34EC NK NK8120 19950928S101702A048069ANK812
never      never      NY 15FBB795196939D6 NK NK8120 19980115162120S101702A069682
never      never      NY 15C01FCF1A051F5E NK NK8140 19970101115542S101702A060424
never      never      NY 15FBB793138E453A NK NK8140 19980115162120S101702A069682
never      never      NY 16013B4D0BCD7988 NK NK8150 19980219182538S101702A070555
never      never      NY 15A180CB005D4B60 NK NK8160 19960620154603S101702A055102
never      never      NY 15E38BDB0CE4AA8A NK NK8160 19970814211337S101702A065977
never      never      NY 15B0E8C807928D88 NK NK8170 19960926162637S101702A057441
never      never      NY 15C06DBE1C90143C NK NK8170 19970103102547S101702Z287047
never      never      NY 160E696107986578 NK NK8180 19980514170648S101702M000860
never      never      NY 15E4C12214223BA0 NK NK8190 19970822134421S101702Z329315
never      never      NY 15E4C7811C05C7DA NK NK8190 19970822173219S101702Z329367
never      never      NY 15FBB7971322DA28 NK NK8200 19980115162121S101702A069682
never      never      NY 15FF01081524D7FA NK NK8210 19980205141816S101702A070186
never      never      NY 15C01FAA0C5D0E08 NK NK8240 19970101115054S101702A060411
never      never      NY 15C3E1FD05C9EDC6 NK NK8240 19970125095418S101702Z292839
never      never      NY 15C4702F0D655FA4 NK NK8250 19970128224355S101702Z293392
never      never      NY 15C4B09E0E28CB62 NK NK8250 19970130130932S101702A061205
never      never      NY 15E7E44D0227B828 NK NK8300 19970911124909S101702A066744
never      never      NY 16024C2106179BEE NK NK8300 19980226131317S101702A070680
never      never      NN 15314D3F0F7571DC NK NK8820 19940707172646S101702A034690
never      never      NY 15A29BC20A6A31EA NK NK8820 19960627163516S101702A055244
never      never      NY 15EB5F591BBBB8DC NK NK8830 19971003162239S101702Z337521
never      never      NY 15EC4D86030E9CC6 NK NK8830 19971009142704S101702A067321
never      never      NY 15B3198200AC8152 NK NK8840 19961010145703S101702A057697
never      never      NY 15C01FAF1E8F5952 NK NK8840 19970101115056S101702A060411
never      never      NN 14D19348082F3664 NK YNKSICB
never      never      NN 15314CDE10629F62 NK YNKSICH 19940707172101S101702A03469
never      never      NY 15A3669119218106 NK YNKSICH 19960702173409S101702Z25559
never      never      NY 15A367EB0458EF64 NK YNKSICH 19960702182225S101702Z25560
never      never      NY 15A38085003F6236 NK YNKSICH 19960703090225S101702Z25563
never      never      NY 15A3815617169F42 NK YNKSICH 19960703093214S101702Z25564
never      never      NY 15A3849C08157772 NK YNKSICH 19960703112609S101702Z25569
never      never      NY 15A3853809C6F690 NK YNKSICH 19960703115112S101702Z25569
never      never      NY 15A3864C05CBCF0C NK YNKSICH 19960703122934S101702Z25570
never      never      NY 15A386DF0D910736 NK YNKSICH 19960703125020S101702Z25570
never      never      NY 15A388181B4E8C26 NK YNKSICH 19960703133410S101702Z25571
never      never      NY 15A389C810DECC7A NK YNKSICH 19960703143433S101702Z25574
never      never      NY 15A38B690CA93038 NK YNKSICH 19960703153248S101702Z25575
never      never      NY 15A3B5F213130F1A NK YNKSICH 19960704165443S101702A05561
never      never      NY 15A44F43154DBB4A NK YNKSICH 19960708122220S101702Z25626
never      never      NY 15A473AE105D8776 NK YNKSICH 19960709100619S101702Z25643
never      never      NY 15A4CA36111F8B04 NK YNKSICH 19960711134332S101702A05571
never      never      NY 15E14BDB0D20C6A6 NK YNKSIKO 19970731133829S101702A06562
never      never      NY 15E265021294AEE0 NK YNKSIKO 19970807132139S101702A06573
never      never      NY 15E37F12121B0734 NK YNKSIKO 19970814133711S101702A06605
never      never      NY 15E6CBAC0AB915C2 NK YNKSIKO 19970904132615S101702A06655
never      never      NY 15E6CE9202DE8DB2 NK YNKSIKO 19970904151013S101702A06655
never      never      NY 15E7E436138F1E34 NK YNKSIKO 19970911124743S101702A06674
never      never      NY 15EA19240BF3D950 NK YNKSIKO 19970925134637S101702A06706
never      never      NY 15FF00FA1F905D02 NK YNKSIKO 19980205141607S101702A07018
never      never      NY 14BDCCF717FA5A58 NK YNKUMW
never      never      NY 152439AB022CE1D8 NK YNKUMW 19940415123746S101702A032855
never      never      NY 1524452F17C0528E NK YNKUMW 19940415193036S101702A032855
never      never      NY 15314CDE09B635FC NK YNKUMW 19940707172102S101702A034690
never      never      NY 181E9A961D32134D NL YNLG021 BALR0000745979E970
never      never      NY 17853DE116071900 NL YNLG030 BALR00000154735D18
never      never      NY 181E9A9506609863 NL YNLG030 BALR0000745979E975
never      never      NY 181E9A961A1B1F19 NL YNLG030 BALR0000745979E975MVS
never      never      NY 181E9A940256406D NL YNLG03M BALR0000745979E978MVS
never      never      NY 181E9A8F16F647CE NL YNLG040 BALR0000745979E97EMVS
never      never      NY 181E9A8E1C984020 NL YNLG050 BALR0000745979E97F
never      never      NY 181E9A900B8BBA37 NL YNLG050 BALR0000745979E97FMVS
never      never      NY 181E9A9A0DF5E05F NL YNLG060 BALR0000745979E986
never      never      NY 181E9A9B1F0D1C6C NL YNLG060 BALR0000745979E986MVS
never      never      NY 181E9A9118DF15AC NL YNLG121 BALR0000745979E992
never      never      NY 181E9A931D8BFB31 NL YNLG130 BALR0000745979E995MVS
never      never      NY 181E9AA0008DEBB0 NL YNLG140 BALR0000745979E99AMVS
never      never      NN 153E7FBB0756338E NP NP0150 19940929164937S101702A037741
never      never      NN 153E7FC118938A50 NP NP0350 19940929164943S101702A037741
never      never      NN 1550165410E3E754 NP NP0360 19950119144601S101702A040974
never      never      NN 159A729C0A67B488 NP NP0360 19960506182034S101702A053948
never      never      NN 15A3B13219B50242 NP NP0360 19960704140529S101702A055458
never      never      NN 1550165606826216 NP NP0380 19950119144602S101702A040974
never      never      NN 159A729C01E677BA NP NP0380 19960506182034S101702A053948
never      never      NN 153E7B280AFB7FB2 NP NP0410 19940929140633S101702A037741
never      never      NN 153E7DD602FA26F4 NP NP0410 19940929154021S101702A037741
never      never      NN 153E7FC001CF8D96 NP NP0410 19940929164945S101702A037741
never      never      NY 153E7B130CEBC334 NP NP5000 19940929140635S101702A037741
never      never      NY 153E7DB6002CF3DC NP NP5000 19940929154023S101702A037741
never      never      NY 153E7FA61D05A1E4 NP NP5000 19940929164946S101702A037741
never      never      NY 153E7B171E7B3A96 NP NP5020 19940929140638S101702A037741
never      never      NY 153E7DB71AA308AE NP NP5020 19940929154025S101702A037741
never      never      NY 153E7FA71B267462 NP NP5020 19940929164947S101702A037741
never      never      NN 153E7B19094B32AE NP NP5140 19940929140642S101702A037741
never      never      NN 153E7DBA018C90C6 NP NP5140 19940929154033S101702A037741
never      never      NN 153E7FB20648D722 NP NP5140 19940929164951S101702A037741
never      never      NN 153E7B2217F07080 NP NP5160 19940929140644S101702A037741
never      never      NN 153E7DBA1A764744 NP NP5160 19940929154036S101702A037741
never      never      NN 153E7FAE1253A898 NP NP5160 19940929164952S101702A037741
never      never      NN 1542E2460E713678 NP NP5220 19941027143040S101702A038705
never      never      NN 155015C505BA4FF0 NP NP5220 19950119142451S101702A040974
never      never      NN 1550165107CCBF5A NP NP5220 19950119144603S101702A040974
never      never      NN 1541C8B915576224 NP NP5240 19941020142956S101702A038461
never      never      NY 145AC3DE1E7492B4 NP NP5410
never      never      NY 153E7B0A028667F8 NP NP5450 19940929140523S101702A037741
never      never      NY 153E7DB4050704A8 NP NP5450 19940929153937S101702A037741
never      never      NY 153E7FAA0014F3E8 NP NP5450 19940929164921S101702A037741
never      never      NN 154861C906032F1C NP NP5460 19941201140647S101702A039881
never      never      NN 153E7B0B00CD14FC NP NP5470 19940929140527S101702A037741
never      never      NN 153E7DB105EE7A00 NP NP5470 19940929153939S101702A037741
never      never      NN 153E7FAC1192DB16 NP NP5470 19940929164922S101702A037741
never      never      NN 153E7B0A182F90E4 NP NP7210 19940929140529S101702A037741
never      never      NN 153E7DAF18047F02 NP NP7210 19940929153942S101702A037741
never      never      NN 153E7FAB14766166 NP NP7210 19940929164923S101702A037741
never      never      NN 153E7B0F098F1ABC NP NP8330 19940929140550S101702A037741
never      never      NN 153E7DB0071BDD0C NP NP8330 19940929153955S101702A037741
never      never      NN 153E7FA40712F05C NP NP8330 19940929164930S101702A037741
never      never      NN 153E7B1000FB9A9E NP NP8340 19940929140557S101702A037741
never      never      NN 153E7DB0123A7E74 NP NP8340 19940929153957S101702A037741
never      never      NN 153E7FA31776C104 NP NP8340 19940929164931S101702A037741
never      never      NN 153E7FA419229B0A NP NP8350 19940929164931S101702A037741
never      never      NY 153E7FA20964DA96 NP NP8900 19940929164933S101702A037741
never      never      NY 1579E5EC1052194C NR NR8000 19951012S101702M000624ANR800
never      never      NY 15A93269122828C2 NS NS0890 19960808144239S101702A056331
never      never      NY 15AA4B82062790A6 NS NS0890 19960815142208S101702A056403
never      never      NY 15AB65010A6D2094 NS NS0890 19960822141851S101702A056667
never      never      NY 157D30BB10C36622 NS NS7340 19951102S101702A049013ANS734
never      never      NY 15C4B64605F19458 NS NS7340 19970130162854S101702A061187
never      never      NY 15E3ACDC1F4C8A0C NS NS7340 19970815165414S101702A066076
never      never      NY 15B773460A9F1336 NTA1P AT0070 CIMA000450
never      never      NY 15F405F003470AA0 NTA1P AT0070 CIMA000651
never      never      NY 16056B3209A926D0 NTA1P AT0070 CIMA000663
never      never      NY 160D76330C1BB10E NTA1P AT0090 CIMA000675
never      never      NY 15C55AE81CEC8448 NTA1P BC0003
never      never      NY 15FC723819E10812 NTA1P BC0003 CRMB000360
never      never      NY 164CC3B61B3D3EA8 NTA1P BC0003 CRMB000430
never      never      NY 15C579911DD9F6FA NTA1P BC0007 CRMB000170
never      never      NY 15FC723D17259AAA NTA1P BC0007 CRMB000360
never      never      NY 164CC3B810E51406 NTA1P BC0007 CRMB000430
never      never      NY 15C55A7209B71720 NTA1P BC0008 CRMB000170
never      never      NY 160E3D4004D8CEAC NTA1P BC0008 CRMB000360
never      never      NY 164CC3B916F8BBA5 NTA1P BC0008 CRMB000430
never      never      NY 15C55A79161257AA NTA1P BC0009 CRMB000170
never      never      NY 15FC723F1F45C850 NTA1P BC0009 CRMB000360
never      never      NY 164CC3BA0A82A16C NTA1P BC0009 CRMB000430
never      never      NY 15E46C5C0A727582 NTA1P BC0010 CRMB000254
never      never      NY 15FC72411FBD4502 NTA1P BC0010 CRMB000360
never      never      NY 164CC3B916A79FDF NTA1P BC0010 CRMB000430
never      never      NY 15C5799E139FC882 NTA1P BC0011 CRMB000170
never      never      NY 15FC724C0C76ADAC NTA1P BC0011 CRMB000360
never      never      NY 164CC69E05E9A57D NTA1P BC0011 CRMB000430
never      never      NY 1579E5E407BBB824 NTA1P NR7110 19951012S101702M000624ANR
never      never      YY 41534E434F4D4F4E NULLID ASNDD800
never      never      YY 41534E434F4D4F4E NULLID ASNDD880
never      never      NY 1588FBAE0A59BFA4 NV NVB903
never      never      NY 15A6AACE1E9C1C70 NV NVB918
never      never      NY 15A6AAD0074AB930 NV NVB920
never      never      NY 15A6AAE513F1AFDC NV NVO006 A
never      never      NY 15A6AAE61D4AFBC4 NV NVO010 A
never      never      NY 15A6AAE803ECB232 NV NVO017 A
never      never      NY 15A6AAE9170D4F1E NV NVO018 A
never      never      NY 15AA1A950EE8DA80 NV NVO019 A
never      never      NY 15ADB61F03B915D2 NV NVO020 A
never      never      NY 15A6AAEE01EF28CA NV NVO021 A
never      never      NY 15A6AAEF0A8F7B26 NV NVO025 A
never      never      NY 15A6AAF10DB35B92 NV NVO026 A
never      never      NY 15A6AAF30DC4D072 NV NVO027 A
never      never      NY 15A6AAF50434AD26 NV NVO028 A
never      never      NY 15A6AAF60F14731A NV NVO029 A
never      never      NY 15A6AAF80F0F286A NV NVO030 A
never      never      NY 15A8B66613CAEE1A NV NVO031 A
never      never      NY 15A8B66804FFEB10 NV NVO032 A
never      never      NY 15ADB62014964020 NV NVO033 A
never      never      NY 15A6AB001F21D428 NV NVO034 A
never      never      NY 15A6AB0303803432 NV NVO037 A
never      never      NY 15A6AB04146F88A2 NV NVO038 A
never      never      NY 15A6AB061B3FF1D2 NV NVO039 A
never      never      NY 15A6AB080A79D41C NV NVO041 A
never      never      NY 15A6AB0A12B3CC6E NV NVO042 A
never      never      NY 15A6AB0E05249D5E NV NVO043 A
never      never      NY 15A6AB1007536DA2 NV NVO045 A
never      never      NY 15A6AB11111D130C NV NVO046 A
never      never      NY 15A8B6690C72F090 NV NVO047 A
never      never      NY 15A8B66A1128A3B2 NV NVO048 A
never      never      NY 15A8B66B1428113A NV NVO049 A
never      never      NY 15A6AB180DAD2BC8 NV NVO052 A
never      never      NY 15A6AB1A00BC6B9A NV NVO053 A
never      never      NY 15A6AB1C098476F4 NV NVO055 A
never      never      NY 15A8B66C17A83058 NV NVO057 A
never      never      NY 15A8B66E0AE2C03A NV NVO059 A
never      never      NY 15A6AB210377C2D8 NV NVO060 A
never      never      NY 15A6AB220AAA24E8 NV NVO064 A
never      never      NY 15A6AB2312944F52 NV NVO070 A
never      never      NY 15A6AB441BB654AC NV NVO071 A
never      never      NY 15A8B66F0F289152 NV NVO072 A
never      never      NY 15A8B67016A44208 NV NVO073 A
never      never      NY 15A8B6711667976A NV NVO074 A
never      never      NY 15A6AB4A11EB62EE NV NVO075 A
never      never      NY 15A6AB4B19A8714A NV NVO076 A
never      never      NY 15A6AB4C1F4F8476 NV NVO077 A
never      never      NY 15A6AB4E020C4D34 NV NVO079 A
never      never      NY 15A6AB4F082AD5EC NV NVO080 A
never      never      NY 15A6AB500EBE7A3C NV NVO081 A
never      never      NY 15A6AB5119C49A16 NV NVO082 A
never      never      NY 15A6AB5300411CDC NV NVO083 A
never      never      NY 15F74CAC1BC48BE2 NZ NZ0600 19971218134244S101702A069183
never      never      NY 15FBBB4C06BD50AC NZ NZ0600 19980115181659S101702M000856
never      never      NN 15A065B2085DEAB6 OD OD7020 19960613145427S101702A054902
never      never      NN 16047FDE199109B6 OD OD7020 19980312133153S101702A070916
never      never      NN 1614FF570293BFCE OD OD7020 19980625145544S101702A073365
never      never      NN 15722FC207B30E46 OD OD7030 19950824S101702A047131AOD703
never      never      NN 16047FDE1E51C834 OD OD7030 19980312133154S101702A070916
never      never      NN 1614FF57028B8196 OD OD7030 19980625145545S101702A073365
never      never      NY 158FE3AD1235443C OD OD7040 19960229135951S101702Z236394
never      never      NY 15900A580F7C701C OD OD7040 19960301130327S101702Z236556
never      never      NY 15A4CA220446E228 OD OD7040 19960711133939S101702A055623
never      never      NN 1561B06008E6F7A8 OD OD7060 19950511S101702A044280AOD706
never      never      NN 1564FCBF1B89E4C2 OD OD7060 19950601S101702A044892AOD706
never      never      NN 15B4C963192AEF16 OD OD7070 19961021083513S101702Z271571
never      never      NY 15B51A7D199D9A24 OD OD7070 19961023085719S101702Z272282
never      never      NN 15B54BFC04AE28D2 OD OD7070 19961024142938S101702A058057
never      never      NN 1561B05B1D171304 OD OD7080 19950511S101702A044280AOD708
never      never      NN 1569644714F8674C OD OD7080 19950629S101702A045721AOD708
never      never      NN 15722FCB08638FB6 OD OD7080 19950824S101702A047131AOD708
never      never      NY 15B40DC60E2F4AEC OD OD7090 19961016164015S101702Z271012
never      never      NY 15B4266812918F8C OD OD7090 19961017072106S101702Z271040
never      never      NN 15B54BFE03C58C7A OD OD7090 19961024142939S101702A058057
never      never      NN 15E260F0076D2896 OD OD7120 19970807105631S101702Z325951
never      never      NN 15E307311C9AEB1C OD OD7120 19970811140607S101702Z326413
never      never      NN 15E4985310722626 OD OD7120 19970821132306S101702A066166
never      never      NY 1542E523167958DE OD OD7130 19941027161308S101702A038607
never      never      NY 1559FBC51AE55158 OD OD7130 19950323140241S101702A043077
never      never      NY 15A5E43B027E4AE2 OD OD7140 19960718135641S101702A055864
never      never      NN 15BDAF3816486C28 OD OD7140 19961216232158S101702Z284121
never      never      NN 15BE188E11702BC2 OD OD7140 19961219141048S101702A060087
never      never      NN 15BDAF850B130042 OD OD7160 19961216233243S101702Z284130
never      never      NN 15BE188E1D22C28C OD OD7160 19961219141049S101702A060087
never      never      NN 15DCE97618BA00D2 OD OD7160 19970703160630S101702M000808
never      never      NY 159F1F9D056530F8 OD OD7180 19960605122405S101702Z251474
never      never      NY 159F209D1C35DE50 OD OD7180 19960605130003S101702Z251474
never      never      NY 15A065B21E2D642E OD OD7180 19960613145428S101702A054902
never      never      NY 1579E2F81F395BA6 OD OD7181 19951012S101702A047632AOD718
never      never      NY 1579E2F81F165102 OD OD7182 19951012S101702A047632AOD718
never      never      NY 1579E2F9040DF786 OD OD7183 19951012S101702A047632AOD718
never      never      NY 1579E2F81F61A244 OD OD7184 19951012S101702A047632AOD718
never      never      NY 159F25C110697C1A OD OD7190 19960605160459S101702Z251541
never      never      NY 159F4050063CDFDE OD OD7190 19960606075419S101702Z251583
never      never      NY 15A065B208FDDAC4 OD OD7190 19960613145420S101702A054902
never      never      NY 159F2644044405D0 OD OD7200 19960605162215S101702Z251546
never      never      NY 159F41410FF73816 OD OD7200 19960606082803S101702Z251591
never      never      NY 15A065B01F4CBAAE OD OD7200 19960613145421S101702A054902
never      never      NY 1538FD1902DC78DC OD OD7210 19940825152244S101702A036730
never      never      NY 15497B9306CFC3AA OD OD7210 19941208141347S101702A040106
never      never      NY 15A5E43D001165A4 OD OD7210 19960718135643S101702A055864
never      never      NN 15E260FF1AD87A60 OD OD7220 19970807105824S101702Z325954
never      never      NN 15E307311CE48676 OD OD7220 19970811140644S101702Z326415
never      never      NN 15E4985317E6DF28 OD OD7220 19970821132318S101702A066166
never      never      NY 15A5E43C1E0849A4 OD OD7240 19960718135643S101702A055864
never      never      NN 15BDAF64190A50D6 OD OD7240 19961216232811S101702Z284125
never      never      NN 15BE188E0B5D6AE4 OD OD7240 19961219141032S101702A060087
never      never      NN 15E49BB90DD8A742 OD OD7280 19970821152509S101702A066237
never      never      NN 15E49DAB00073D2E OD OD7280 19970821163430S101702A066237
never      never      NN 15BA7FDF14FE8878 OD OD7281 19961126165931S101702Z279665
never      never      NN 15BAA8C80BF90382 OD OD7281 19961127172307S101702Z280020
never      never      NN 15BBE9D11D9FA064 OD OD7281 19961205165458S101702A059431
never      never      NN 15BBE9D80AF439BC OD OD7290 19961205165500S101702A059431
never      never      NN 15DCE96A13B4CF7D OD OD7290 19970703160551S101702M000808
never      never      NN 160D4EB506A0BA32 OD OD7290 19980507163236S101702A072127
never      never      NN 15C0F22E0200F9E0 OD OD7300 19970106172633S101702A060567
never      never      NN 15C1184616692102 OD OD7300 19970107160900S101702A060607
never      never      NN 15DCE96B0A746A34 OD OD7300 19970703160555S101702M000808
never      never      NN 161731C706E6862C OD OD7330 19980709142526S101702A073729
never      never      NN 158FE3F611A3A804 OE OE0121 19960229141006S101702A052336
never      never      NN 15967DBB1E0700C4 OE OE0122 19960411140916S101702A053315
never      never      NN 15547BA618681B1A OE OE8100 19950216140325S101702A041670
never      never      NN 15C91D4E16526614 OE OE8110 19970227165001S101702A062050
never      never      NN 15EE073D05414D44 OE OE8110 19971020135626S101702A067670
never      never      NN 15EF9953169B4B92 OE OE8110 19971030134735S101702A067911
never      never      NN 1573501403114C10 OE OE8130 19950831S101702A047271AOE813
never      never      NN 157372D10F32D664 OE OE8130 19950901S101702Z206327AOE813
never      never      NN 1577B0AC1F80CA24 OE OE8130 19950928S101702A048025AOE813
never      never      NY 15D880C90BD262C7 OE OE8730 19970605144943S101702A064421
never      never      NY 15DAB2A214E69C4E OE OE8730 19970619135856S101702A064828
never      never      NY 15ED663514692BB4 OE OE8730 19971016135122S101702M000847
never      never      NY 15E5B37C1C9BC708 OE OE8740 19970828141800S101702A066323
never      never      NY 15ED663812316026 OE OE8740 19971016135123S101702M000847
never      never      NY 15AC7E4319D3B274 OE OE9250 19960829140415S101702A056744
never      never      NN 156B96481BDF3CC6 OE YOE001 19950713S101702A046149AYOE00
never      never      NN 156CAF70043ACFA8 OE YOE001 19950720S101702A046302AYOE00
never      never      NN 157699F50D13CDEE OE YOE001 19950921S101702A047890AYOE00
never      never      NN 15944B1C1B80BB9E OE YOE001 19960328143211S101702A052974
never      never      NN 157D301B0DD64256 OE YOE0135 19951102S101702A048966AYOE0
never      never      NN 157699F50D25B2C4 OE YOEM001 19950921S101702A047890AYOEM
never      never      NN 156CAF74003D11EA OE YOEM002 19950720S101702A046302AYOEM
never      never      NN 157699F50BF3642C OE YOEM002 19950921S101702A047890AYOEM
never      never      NY 15D64FC610D2249B OE YOERFT7 19970522160854S101702A06406
never      never      NY 15D671C0104E00CF OE YOERFT7 19970523122650S101702A06406
never      never      NY 15D673CE056136D4 OE YOERFT7 19970523134012S101702A06406
never      never      NY 15D674C7054425CF OE YOERFT7 19970523141454S101702A06412
never      never      NY 15D6753B1DFF9BE9 OE YOERFT7 19970523143128S101702A06412
never      never      NY 15D675D300BB6FAA OE YOERFT7 19970523145200S101702A06412
never      never      NY 15D67759157448A5 OE YOERFT7 19970523154739S101702A06412
never      never      NY 15E5B3560A8ED0AC OE YOERFT7 19970828141213S101702A06632
never      never      NY 15F0B55619A2D6E2 OE YOERFT7 19971106151230S101702A06806
never      never      NY 14EE2F5605F30ED2 OE YOEUP04
never      never      NY 14EE2F351C6A102A OE YOEUP12
never      never      NY 14EE2F4118554B46 OE YOEUP77
never      never      NY 170911FC02109FB2 OS DB2EBS01 A18Q001546
never      never      NY 16A0E2DE050ED758 OS DB2EBS01 P
never      never      NY 17092E460340E889 OS DB2EBS01 PROD
never      never      NY 170911FD102F5F69 OS DB2EBS03 A18Q001546
never      never      NY 17092E5208951A26 OS DB2EBS03 PROD
never      never      NY 170911FF0F90A2CE OS DB2REORG A18Q001546
never      never      NY 17092E540EE441CE OS DB2REORG PROD
never      never      NY 15983BA301EB9E34 OS OS7240 A
never      never      NY 15AC2D7406EA6486 OS OS7293 A
never      never      NY 15042DE013A65CA6 PC YPC0002
never      never      NY 152530551E109B3C PC YPC0002 19940421153633S101702M00044
never      never      NY 182A6A8A14DD70E1 PC YPC0870 IVN000003559DD0082
never      never      NY 14CAF9E611E24984 PC YPC9997
never      never      NY 15CDAB591103C79C PHPS53 GACOLSN
never      never      NY 1694C61D0C724B38 PHPS53 GADRELS
never      never      NY 1668802F074DA4F8 PHPS53 GAMI000
never      never      NY 1565EECE0E5ECAEC PHPS53 GARD000
never      never      NY 16A8010F1F82BB8C PHPS53 GARD001
never      never      NY 15CDAB0B14D041D8 PHPS53 GARESET
never      never      NY 15CA646E06025900 PHPS53 GCADDE
never      never      NY 1619079A1575A360 PHPS53 GCBTOGL
never      never      NY 1567335819916C94 PHPS53 GCCOMON
never      never      NY 1672B0C208EA578C PHPS53 GCCRC00
never      never      NY 15AC828B1B14FA6A PHPS53 GCCRC01
never      never      NY 155C2C730710AF90 PHPS53 GCDTTM0
never      never      NY 163952971CCA9600 PHPS53 GCEXTAT
never      never      NY 155C5B4F023B6524 PHPS53 GCGENID
never      never      NY 167D65360749F7EC PHPS53 GCMIGDEL
never      never      NY 15CA646913B95630 PHPS53 GCRDENT
never      never      NY 15A36643030A26FC PHPS53 GCSTATE
never      never      NY 15D61F121CE36AD4 PHPS53 GCSTKCL
never      never      NY 161907A31F133620 PHPS53 GCSTMIG
never      never      NY 167834541B5DDFD8 PHPS53 GCTMTH
never      never      NY 164B90F8018FB550 PHPS53 GCUPDRES
never      never      NY 1646121C0B2895F0 PHPS53 GEXP000
never      never      NY 15F091221E7380D0 PHPS53 GEXP004
never      never      NY 1675588010AC1C98 PHPS53 GIMP000
never      never      NY 160E07A00A802048 PHPS53 GLCNVRT
never      never      NY 1636F6900F9CF270 PHPS53 GLMP000
never      never      NY 15D3CC2913ACAD18 PHPS53 GLXSEER
never      never      NY 16477D14047A4A48 PHPS53 GRBNDLK
never      never      NY 163703A910FAEC78 PHPS53 GRCLUP
never      never      NY 15A37FE50D1FAC42 PHPS53 GRENDV0
never      never      NY 1621D60F177D3620 PHPS53 GRINSPT
never      never      NY 16792BB11F1ADD68 PHPS53 GRINST0
never      never      NY 1640B2AB07663A60 PHPS53 GRPREP0
never      never      NY 167604A8034D288C PHPS53 GRRBA00
never      never      NY 15E1266101283F10 PHPS53 GRRBA04
never      never      NY 16394EC31826E248 PHPS53 GRRPT00
never      never      NY 165D7F23125F1EB4 PHPS53 GRRSTAT
never      never      NY 15D8A92F0CE846C4 PHPS53 GRSCL
never      never      NY 163703970628CBD0 PHPS53 GRSEED0
never      never      NY 15E147E71374FE70 PHPS53 GRSEED4
never      never      NY 155E0A010DFFB18C PHPS53 GRTBIND
never      never      NY 1622CCCB0AB717A8 PHPS53 GRVRF00
never      never      NY 15B09BB90BE4A7FA PHPS53 GSELECT
never      never      NY 15CDABCB034AE0C4 PHPS53 GTCLUP
never      never      NY 16506C1D10184988 PHPS53 GTDELTA
never      never      NY 163C50741B313FF0 PHPS53 GTLMC00
never      never      NY 16714C5E1D492438 PHPS53 GTREP00
never      never      NY 16085F6F199251D8 PHPS53 GTTOGGL
never      never      NY 15CDABD10526D324 PHPS53 GUIVRFY
never      never      NY 16224D7B0623E920 PHPS53 GUPDENT
never      never      NY 159772D012BAF9BA PHPS53 H0001R
never      never      NY 161FDC4F13D9E0C8 PHPS53 H0002
never      never      NY 1592177A0E93E6CC PHPS53 H0002R
never      never      NY 161FDC530447AFA0 PHPS53 H0003
never      never      NY 1592178B0CC11144 PHPS53 H0003R
never      never      NY 161FDC561EE0F568 PHPS53 H0004
never      never      NY 1592179502AA646A PHPS53 H0004R
never      never      NY 161FDC5A0DD001C8 PHPS53 H0005
never      never      NY 1592179E13C5A24A PHPS53 H0005R
never      never      NY 161FDC5E05BFA660 PHPS53 H0006
never      never      NY 159217A716F3A418 PHPS53 H0006R
never      never      NY 161FDC611DF407D8 PHPS53 H0007
never      never      NY 159217B30E117928 PHPS53 H0007R
never      never      NY 161FDC6510FBC310 PHPS53 H0008
never      never      NY 159217BE06C7E0D6 PHPS53 H0008R
never      never      NY 161FDC6903CE27A8 PHPS53 H0009
never      never      NY 159217C91163DD52 PHPS53 H0009R
never      never      NY 159217DB062756C6 PHPS53 H0010R
never      never      NY 161FDC701F1DF460 PHPS53 H0011
never      never      NY 159217E21F5EC7D4 PHPS53 H0011R
never      never      NY 161FDC74110D5A20 PHPS53 H0012
never      never      NY 159217E81AAA315E PHPS53 H0012R
never      never      NY 161FDC78054EBCC0 PHPS53 H0013
never      never      NY 159217ED192039C2 PHPS53 H0013R
never      never      NY 159217F3024803CA PHPS53 H0014R
never      never      NY 161FDC7E1F0A4CE0 PHPS53 H0015
never      never      NY 159217F71E33B7C2 PHPS53 H0015R
never      never      NY 161FDC82102BE588 PHPS53 H0016
never      never      NY 159217FC1ABC4770 PHPS53 H0016R
never      never      NY 161FDC86011E5340 PHPS53 H0017
never      never      NY 1592180115AF6AAA PHPS53 H0017R
never      never      NY 161FDC890808C648 PHPS53 H0018
never      never      NY 159218070F5B49A2 PHPS53 H0018R
never      never      NY 161FDC8C165AFDA0 PHPS53 H0019
never      never      NY 1592180D15DD3104 PHPS53 H0019R
never      never      NY 161FDC90020B3538 PHPS53 H0020
never      never      NY 159218121A716D24 PHPS53 H0020R
never      never      NY 161FDC9301C14030 PHPS53 H0021
never      never      NY 159218180878C04E PHPS53 H0021R
never      never      NY 161FDC951F7AFA30 PHPS53 H0022
never      never      NY 1592181E1206D3B0 PHPS53 H0022R
never      never      NY 161FDC981D3E1888 PHPS53 H0023
never      never      NY 159218241A5B697A PHPS53 H0023R
never      never      NY 162131100DE991E0 PHPS53 H0024
never      never      NY 159DDC1F0F7FE48C PHPS53 H0024R
never      never      NY 161FDC9D04DA9598 PHPS53 H0025
never      never      NY 15A128E9144D9DB0 PHPS53 H0025R
never      never      NY 15B74E511E488132 PHPS53 H0025X2
never      never      NY 161FDCA00A715110 PHPS53 H0026
never      never      NY 15921837107446C2 PHPS53 H0026R
never      never      NY 167C93F7089AEFA8 PHPS53 H0026X
never      never      NY 161FDCA3120DF348 PHPS53 H0033
never      never      NY 1592183C1EA72A64 PHPS53 H0033R
never      never      NY 161FDCA61B3D6DC8 PHPS53 H0034
never      never      NY 15921841177E708A PHPS53 H0034R
never      never      NY 161FDCA91FC33690 PHPS53 H0035
never      never      NY 15A4F3D3070FF4BA PHPS53 H0035R
never      never      NY 161FDCAC1BE345B0 PHPS53 H0038
never      never      NY 1592184607A905C2 PHPS53 H0038R
never      never      NY 161FDCAF1B7E8FE0 PHPS53 H0039
never      never      NY 1592184B0673F52E PHPS53 H0039R
never      never      NY 161FDCB21FD43D50 PHPS53 H0040
never      never      NY 159218510470D8A2 PHPS53 H0040R
never      never      NY 161FDCB60366A6C0 PHPS53 H0041
never      never      NY 159218560A8916E0 PHPS53 H0041R
never      never      NY 161FDCB900C1CD60 PHPS53 H0042
never      never      NY 1592185D00F97992 PHPS53 H0042R
never      never      NY 161FDCBB1D2EE0C0 PHPS53 H0043
never      never      NY 1592186215454FAC PHPS53 H0043R
never      never      NY 161FDCBE185DF678 PHPS53 H0044
never      never      NY 159218670C601C2A PHPS53 H0044R
never      never      NY 161FDCC11949FC10 PHPS53 H0045
never      never      NY 1592186D0CF0A2AA PHPS53 H0045R
never      never      NY 161FDCC415CF69B0 PHPS53 H0046
never      never      NY 159218711902350C PHPS53 H0046R
never      never      NY 161FDCC7185307C0 PHPS53 H0047
never      never      NY 159218761595AF48 PHPS53 H0047R
never      never      NY 161FDCCA15E40568 PHPS53 H0048
never      never      NY 1592187B1195DA1E PHPS53 H0048R
never      never      NY 161FDD1B0085D010 PHPS53 H0051
never      never      NY 1592188203929E42 PHPS53 H0051R
never      never      NY 161FDD1E13EF5CE0 PHPS53 H0052
never      never      NY 1592188714A465A0 PHPS53 H0052R
never      never      NY 161FDD211327A330 PHPS53 H0053
never      never      NY 1592188E0B8AB57A PHPS53 H0053R
never      never      NY 161FDD24118D4F90 PHPS53 H0054
never      never      NY 159218951F95B83A PHPS53 H0054R
never      never      NY 161FDD271103FAB8 PHPS53 H0055
never      never      NY 1592189E0254FFDC PHPS53 H0055R
never      never      NY 161FDD2A0FB47420 PHPS53 H0056
never      never      NY 159218A3106628B2 PHPS53 H0056R
never      never      NY 161FDD2D0ECC1400 PHPS53 H0057
never      never      NY 159218A80E2F55E2 PHPS53 H0057R
never      never      NY 161FDD300B2DCD00 PHPS53 H0058
never      never      NY 159218AD07A19110 PHPS53 H0058R
never      never      NY 161FDD3308997B98 PHPS53 H0059
never      never      NY 159218B203F1A084 PHPS53 H0059R
never      never      NY 161FDD3606748020 PHPS53 H0060
never      never      NY 159218B61A72A7F2 PHPS53 H0060R
never      never      NY 161FDD3904B03ED8 PHPS53 H0061
never      never      NY 159218BC00186A58 PHPS53 H0061R
never      never      NY 161FDD3C0A406260 PHPS53 H0062
never      never      NY 159218C107A4E882 PHPS53 H0062R
never      never      NY 161FDD3F076CD9E0 PHPS53 H0063
never      never      NY 159218C60B4CEFDC PHPS53 H0063R
never      never      NY 161FDD4204F18580 PHPS53 H0065
never      never      NY 159218CB03D33F32 PHPS53 H0065R
never      never      NY 161FDD4503AFE650 PHPS53 H0066
never      never      NY 159218D11270681A PHPS53 H0066R
never      never      NY 161FDD480A6E4D50 PHPS53 H0067
never      never      NY 159218D60D5FA7F4 PHPS53 H0067R
never      never      NY 161FDD4B072E2298 PHPS53 H0068
never      never      NY 159218DD034C0BF0 PHPS53 H0068R
never      never      NY 161FDD4E04A6A770 PHPS53 H0069
never      never      NY 159218E3089A4152 PHPS53 H0069R
never      never      NY 161FDD5102E9EC98 PHPS53 H0070
never      never      NY 159218E914045FE0 PHPS53 H0070R
never      never      NY 161FDD54018DCED0 PHPS53 H0072
never      never      NY 159218EF0F5CFE42 PHPS53 H0072R
never      never      NY 161FDD5706CD9618 PHPS53 H0074
never      never      NY 15C5D03D17A5BBD0 PHPS53 H0074R
never      never      NY 161FDD5A07589C98 PHPS53 H0075
never      never      NY 15C5D0441FAB9554 PHPS53 H0075R
never      never      NY 161FDD5D059E7028 PHPS53 H0076
never      never      NY 15C5D04B1714C114 PHPS53 H0076R
never      never      NY 161FDD6003FA1420 PHPS53 H0077
never      never      NY 15C5D0520506A144 PHPS53 H0077R
never      never      NY 161FDD63084D1890 PHPS53 H0078
never      never      NY 15C5D0581985C1C0 PHPS53 H0078R
never      never      NY 161FDD6606059FA8 PHPS53 H0079
never      never      NY 15C5D05F0F1622FC PHPS53 H0079R
never      never      NY 161FDD6904C8BEC0 PHPS53 H0080
never      never      NY 15C5D066153F7284 PHPS53 H0080R
never      never      NY 161FDD6C19056CB8 PHPS53 H0081
never      never      NY 15C5D06D160BFDE4 PHPS53 H0081R
never      never      NY 161FDD701378F7D8 PHPS53 H0082
never      never      NY 15C5D07317B389C4 PHPS53 H0082R
never      never      NY 161FDD740DECBB50 PHPS53 H0083
never      never      NY 15C5D07916CB5BE8 PHPS53 H0083R
never      never      NY 161FDD7804B1FEE0 PHPS53 H0084
never      never      NY 15C5D080117649A8 PHPS53 H0084R
never      never      NY 161FDD7B0FFCED60 PHPS53 H0085
never      never      NY 15C5D0861C2B48B8 PHPS53 H0085R
never      never      NY 161FDD7E101B8020 PHPS53 H0090
never      never      NY 15A4F3DD163BC854 PHPS53 H0090R
never      never      NY 161FDD810E6C8958 PHPS53 H0091
never      never      NY 15AC14130C6A1E08 PHPS53 H0091R
never      never      NY 161FDD840C4EBEA0 PHPS53 H0092
never      never      NY 15AC14230D148B26 PHPS53 H0092R
never      never      NY 161FDD870A100CB0 PHPS53 H0093
never      never      NY 15AC142A1FF41AAC PHPS53 H0093R
never      never      NY 161FDD8A082F8718 PHPS53 H0094
never      never      NY 15AC14311F137DA4 PHPS53 H0094R
never      never      NY 161FDD8D040DD3A0 PHPS53 H0095
never      never      NY 15AC143714EAD6AA PHPS53 H0095R
never      never      NY 161FDD9001CD64E8 PHPS53 H0096
never      never      NY 15AC143F072A5F2C PHPS53 H0096R
never      never      NY 161FDD9302367578 PHPS53 H0097
never      never      NY 15AC144E1E3BD120 PHPS53 H0097R
never      never      NY 161FDD9603377908 PHPS53 H0098
never      never      NY 15AC1458149FD8E8 PHPS53 H0098R
never      never      NY 161FDD9900A83250 PHPS53 H0099
never      never      NY 15AC14600EA43FEE PHPS53 H0099R
never      never      NY 161FDD9B1EDC32C0 PHPS53 H0100
never      never      NY 15AC146B18A8ACCE PHPS53 H0100R
never      never      NY 161FDD9F03D502D0 PHPS53 H0101
never      never      NY 15AC147612715F96 PHPS53 H0101R
never      never      NY 161FDDA209081A20 PHPS53 H0102
never      never      NY 15AC148507D9F45E PHPS53 H0102R
never      never      NY 161FDDA50841E560 PHPS53 H0103
never      never      NY 15AC29B21813181E PHPS53 H0103R
never      never      NY 161FDDA807F72CC0 PHPS53 H0104
never      never      NY 15AC149308056456 PHPS53 H0104R
never      never      NY 161FDDAB0FFFA0E0 PHPS53 H0105
never      never      NY 15AC149F1AC07FA0 PHPS53 H0105R
never      never      NY 161FDDAE0FABFFD8 PHPS53 H0106
never      never      NY 15AC14AE0591A4BC PHPS53 H0106R
never      never      NY 161FDE0D102AA820 PHPS53 H1001
never      never      NY 155BDC021B6DB61C PHPS53 H1001R
never      never      NY 155BDC071E372DB0 PHPS53 H1002R
never      never      NY 161FDE12162AACB8 PHPS53 H1003
never      never      NY 155BDC0B0BADD90C PHPS53 H1003R
never      never      NY 161FDE1509071AA0 PHPS53 H1004
never      never      NY 155BDC0E0F296544 PHPS53 H1004R
never      never      NY 161FDE17195FCB58 PHPS53 H1006
never      never      NY 155BDC1110CD89B8 PHPS53 H1006R
never      never      NY 155BDC1507D7663C PHPS53 H1007R
never      never      NY 161FDE1D068027C0 PHPS53 H1008
never      never      NY 155BDC181F551708 PHPS53 H1008R
never      never      NY 161FDE1F153B0C30 PHPS53 H1009
never      never      NY 155BDC1C1E810688 PHPS53 H1009R
never      never      NY 155BDC20123C805C PHPS53 H1010R
never      never      NY 161FDE2413BF0BA0 PHPS53 H1012
never      never      NY 155BDC2413BEE580 PHPS53 H1012R
never      never      NY 155BDC281EF4CEA8 PHPS53 H1013R
never      never      NY 155BDC2D00D913F0 PHPS53 H1014R
never      never      NY 155BDC30171DBA90 PHPS53 H1015R
never      never      NY 155BDC331DDCD7F4 PHPS53 H1016R
never      never      NY 155BDC361CA05AE0 PHPS53 H1017R
never      never      NY 161FDE33151F57B8 PHPS53 H1018
never      never      NY 155BDC391241B8E0 PHPS53 H1018R
never      never      NY 161FDE360456DE70 PHPS53 H1019
never      never      NY 155BDC3C0A496C88 PHPS53 H1019R
never      never      NY 155BDC3F01A2428C PHPS53 H1020R
never      never      NY 161FDE3B11A2D228 PHPS53 H1021
never      never      NY 155BDC411863F014 PHPS53 H1021R
never      never      NY 161FDE3E049D9430 PHPS53 H1022
never      never      NY 155BDC4409BCCD8C PHPS53 H1022R
never      never      NY 161FDE4014A1E9D0 PHPS53 H1023
never      never      NY 155BDC480314DC74 PHPS53 H1023R
never      never      NY 161FDE4305D95878 PHPS53 H1024
never      never      NY 155BDC4B07ED0AC0 PHPS53 H1024R
never      never      NY 161FDE4516C79DE8 PHPS53 H1025
never      never      NY 155BDC4E09BDAC40 PHPS53 H1025R
never      never      NY 161FDE48063FDFD8 PHPS53 H1026
never      never      NY 155BDC5107BFCECC PHPS53 H1026R
never      never      NY 161FDE4A1851D0F0 PHPS53 H1027
never      never      NY 155BDC531CFA8FE4 PHPS53 H1027R
never      never      NY 161FDE4D08209BA8 PHPS53 H1028
never      never      NY 155BDC5617546790 PHPS53 H1028R
never      never      NY 161FDE4F18F12778 PHPS53 H1029
never      never      NY 155BDC5913982694 PHPS53 H1029R
never      never      NY 161FDE5209BE3CE8 PHPS53 H1031
never      never      NY 155BDC5D02DA37C0 PHPS53 H1031R
never      never      NY 161FDE5419B880B8 PHPS53 H1032
never      never      NY 155BDC6316ADAC4C PHPS53 H1032R
never      never      NY 161FDE570994B9C0 PHPS53 H1033
never      never      NY 155BDC6706CC7C10 PHPS53 H1033R
never      never      NY 161FDE591A8134D0 PHPS53 H1034
never      never      NY 155BDC6A13A513C4 PHPS53 H1034R
never      never      NY 161FDE5C09F8D5B8 PHPS53 H1035
never      never      NY 155BDC6E0AC09784 PHPS53 H1035R
never      never      NY 161FDE5E1A512EF0 PHPS53 H1036
never      never      NY 158A85B901EC2828 PHPS53 H1036R
never      never      NY 16488F5B04F61578 PHPS53 H1037
never      never      NY 155BDC750E375AA4 PHPS53 H1037R
never      never      NY 161FDE6401599EF8 PHPS53 H1038
never      never      NY 155BDC780E52907C PHPS53 H1038R
never      never      NY 161FDE6611EDBE68 PHPS53 H1039
never      never      NY 155BDC7B13DFCE04 PHPS53 H1039R
never      never      NY 161FDE6901AED080 PHPS53 H1040
never      never      NY 155BDC7E15785B10 PHPS53 H1040R
never      never      NY 161FDE6B113CCFE8 PHPS53 H1041
never      never      NY 155BDC820EB9A1D4 PHPS53 H1041R
never      never      NY 161FDE6E02365EA0 PHPS53 H1042
never      never      NY 155BDC860BAB9440 PHPS53 H1042R
never      never      NY 161FDE70156E1E18 PHPS53 H1043
never      never      NY 155BDC8A000C7508 PHPS53 H1043R
never      never      NY 161FDE730667E1D8 PHPS53 H1044
never      never      NY 155BDC8E1AC79150 PHPS53 H1044R
never      never      NY 161FDE75172311A8 PHPS53 H1046
never      never      NY 15ACA3D315FD0A1A PHPS53 H1046R
never      never      NY 161FDE7806709330 PHPS53 H1047
never      never      NY 155BDC951DD95064 PHPS53 H1047R
never      never      NY 155BDC9A195F1CAC PHPS53 H1048R
never      never      NY 161FDE7D0E4EFC90 PHPS53 H1051
never      never      NY 1584DFBF09E5165C PHPS53 H1051R
never      never      NY 15816A34079F3880 PHPS53 H1051X
never      never      NY 161FDE80088551C8 PHPS53 H1056
never      never      NY 155BDCA117D55598 PHPS53 H1056R
never      never      NY 161FDE8217CDEF70 PHPS53 H1057
never      never      NY 155BDCA418814914 PHPS53 H1057R
never      never      NY 161FECCF00E17C20 PHPS53 H1058
never      never      NY 155BDCA714AC9E14 PHPS53 H1058R
never      never      NY 161FECD21DE71C40 PHPS53 H1059
never      never      NY 155BDCAA1380A8EC PHPS53 H1059R
never      never      NY 161FECD6066E9C20 PHPS53 H1060
never      never      NY 155BDCAD061DC944 PHPS53 H1060R
never      never      NY 161FECD90BE52440 PHPS53 H1061
never      never      NY 155BDCAF18C672B4 PHPS53 H1061R
never      never      NY 161FECDC109D7628 PHPS53 H1062
never      never      NY 155BDCB21F3D7428 PHPS53 H1062R
never      never      NY 161FECDF1222D330 PHPS53 H1063
never      never      NY 155BDCB60F133A14 PHPS53 H1063R
never      never      NY 155BDCB914653080 PHPS53 H1064R
never      never      NY 161FECE6037780C8 PHPS53 H1065
never      never      NY 155BDCBC186AAF74 PHPS53 H1065R
never      never      NY 161FECE90BB44280 PHPS53 H1066
never      never      NY 155BDCC0084869BC PHPS53 H1066R
never      never      NY 161FECEC0ED8C648 PHPS53 H1067
never      never      NY 155BDCC30620BA1C PHPS53 H1067R
never      never      NY 155BDCC6016F5008 PHPS53 H1068R
never      never      NY 161FECF209283BE0 PHPS53 H1069
never      never      NY 155BDCC9044B858C PHPS53 H1069R
never      never      NY 161FECF50C793EB0 PHPS53 H1071
never      never      NY 155BDCCC165495DC PHPS53 H1071R
never      never      NY 15DC641200ECE17C PHPS53 H1071X
never      never      NY 161FECF810778CA0 PHPS53 H1072
never      never      NY 155BDCD00B413930 PHPS53 H1072R
never      never      NY 161FECFB11377B20 PHPS53 H1073
never      never      NY 155BDCD319CAF2C0 PHPS53 H1073R
never      never      NY 161FECFE061DB038 PHPS53 H1074
never      never      NY 155BDCD80F9233BC PHPS53 H1074R
never      never      NY 161FED00163D3890 PHPS53 H1075
never      never      NY 155BDCDB0DB3B18C PHPS53 H1075R
never      never      NY 161FED03136463B0 PHPS53 H1076
never      never      NY 155BDCDE0B1AA074 PHPS53 H1076R
never      never      NY 161FED060E434DA0 PHPS53 H1077
never      never      NY 155BDCE108D7039C PHPS53 H1077R
never      never      NY 161FED090CEDF588 PHPS53 H1078
never      never      NY 155BDCE40EFAC860 PHPS53 H1078R
never      never      NY 161FED0C08C7B388 PHPS53 H1079
never      never      NY 155BDCE71815C8C0 PHPS53 H1079R
never      never      NY 161FED0F05C96360 PHPS53 H1080
never      never      NY 155BDCEA119ABEC4 PHPS53 H1080R
never      never      NY 161FED12077AFC20 PHPS53 H1081
never      never      NY 155BDCED03791A08 PHPS53 H1081R
never      never      NY 161FED150107E628 PHPS53 H1082
never      never      NY 155BDCF8041D0CAC PHPS53 H1082R
never      never      NY 161FED171006BFC0 PHPS53 H1083
never      never      NY 155BDCFA1ABE2414 PHPS53 H1083R
never      never      NY 161FED191F3194B0 PHPS53 H1084
never      never      NY 155BDCFD18411260 PHPS53 H1084R
never      never      NY 155BDD01018C390C PHPS53 H1085R
never      never      NY 155BDD04195F28CC PHPS53 H1086R
never      never      NY 161FED210B6F3400 PHPS53 H1087
never      never      NY 155BDD081B376444 PHPS53 H1087R
never      never      NY 161FED231E0822F0 PHPS53 H1088
never      never      NY 155BDD0C153A597C PHPS53 H1088R
never      never      NY 161FED2617B63710 PHPS53 H1089
never      never      NY 155BDD1002B4259C PHPS53 H1089R
never      never      NY 161FED290E6FF710 PHPS53 H1090
never      never      NY 155BDD1302792958 PHPS53 H1090R
never      never      NY 161FED2B1D86B130 PHPS53 H1091
never      never      NY 155BDD16089DAB30 PHPS53 H1091R
never      never      NY 161FED2E0D091280 PHPS53 H1092
never      never      NY 155BDD2117BE19B4 PHPS53 H1092R
never      never      NY 161FED301C4A7DB8 PHPS53 H1093
never      never      NY 155BDD241BA7FDC4 PHPS53 H1093R
never      never      NY 161FED330D630468 PHPS53 H1094
never      never      NY 155BDD271DAF37E0 PHPS53 H1094R
never      never      NY 161FED351D165ED8 PHPS53 H1095
never      never      NY 155BDD2B00B83E48 PHPS53 H1095R
never      never      NY 155BDD2E1017989C PHPS53 H1096R
never      never      NY 155BDD311042AC38 PHPS53 H1097R
never      never      NY 161FED3D0C21A228 PHPS53 H1099
never      never      NY 15A4FD37163C3114 PHPS53 H1099R
never      never      NY 161FED3F1BAE6B48 PHPS53 H1100
never      never      NY 1584DFC6136F3DA0 PHPS53 H1100R
never      never      NY 15816A36033CC6B4 PHPS53 H1100X
never      never      NY 161FED4219B089C0 PHPS53 H1101
never      never      NY 1584DFCD05FA4DB4 PHPS53 H1101R
never      never      NY 15816A370D903F2C PHPS53 H1101X
never      never      NY 161FED4514635AB8 PHPS53 H1102
never      never      NY 1584DFD309263C14 PHPS53 H1102R
never      never      NY 161FED4804361A28 PHPS53 H1112
never      never      NY 1584DFB60BC66010 PHPS53 H1112R
never      never      NY 15C483AA06397F0C PHPS53 H1112X
never      never      NY 155BDD480A63B8F0 PHPS53 H1113R
never      never      NY 15C8EF841FE89A0C PHPS53 H1113X
never      never      NY 161FED4D16245178 PHPS53 H1115
never      never      NY 1566AB81098E9D94 PHPS53 H1115R
never      never      NY 1583ED1F1E666B9C PHPS53 H1115X2
never      never      NY 161FED5010DFA3B8 PHPS53 H1116
never      never      NY 15ACA3DA185219F2 PHPS53 H1116R
never      never      NY 15A0601E1851EE58 PHPS53 H1116X2
never      never      NY 161FED5317270668 PHPS53 H1117
never      never      NY 155BDD5215C47080 PHPS53 H1117R
never      never      NY 155BDD550B98865C PHPS53 H1118R
never      never      NY 161FED5816A66898 PHPS53 H1120
never      never      NY 1588083502F675E0 PHPS53 H1120R
never      never      NY 161FED5B1081F558 PHPS53 H1121
never      never      NY 158808391E6D6298 PHPS53 H1121R
never      never      NY 161FED5E0CAAC940 PHPS53 H1122
never      never      NY 1588083E0E2B8A58 PHPS53 H1122R
never      never      NY 161FED610B14E640 PHPS53 H1123
never      never      NY 15880843067C1C78 PHPS53 H1123R
never      never      NY 161FED64022752A8 PHPS53 H1124
never      never      NY 158808480E8A888C PHPS53 H1124R
never      never      NY 161FED66191DF450 PHPS53 H1125
never      never      NY 1588084E11535E04 PHPS53 H1125R
never      never      NY 161FED690F945E90 PHPS53 H1126
never      never      NY 158808531E5DC988 PHPS53 H1126R
never      never      NY 161FED6C05601230 PHPS53 H1127
never      never      NY 158808571B9CC210 PHPS53 H1127R
never      never      NY 161FED6E1DD2D600 PHPS53 H1128
never      never      NY 1588085C14B63814 PHPS53 H1128R
never      never      NY 161FED71158E1C28 PHPS53 H1129
never      never      NY 158808610ED59A74 PHPS53 H1129R
never      never      NY 161FED740ADF3B98 PHPS53 H1130
never      never      NY 158808660480FF9C PHPS53 H1130R
never      never      NY 161FED77033D7E38 PHPS53 H1131
never      never      NY 1588086A1F9EAF9C PHPS53 H1131R
never      never      NY 161FED79198F2E40 PHPS53 H1132
never      never      NY 1588086F1A327960 PHPS53 H1132R
never      never      NY 161FED7C0AC87678 PHPS53 H1133
never      never      NY 158808740F91C07C PHPS53 H1133R
never      never      NY 161FED7E190C6C40 PHPS53 H1134
never      never      NY 158808790AF445B8 PHPS53 H1134R
never      never      NY 161FED8109006C60 PHPS53 H1135
never      never      NY 1588087E03B881B4 PHPS53 H1135R
never      never      NY 161FED8317E80110 PHPS53 H1136
never      never      NY 1588088303BDDDD8 PHPS53 H1136R
never      never      NY 161FED86063A8180 PHPS53 H1137
never      never      NY 158808871B5AB230 PHPS53 H1137R
never      never      NY 161FED881655D160 PHPS53 H1138
never      never      NY 1597B8020AD0BD9A PHPS53 H1138R
never      never      NY 161FED8B06039590 PHPS53 H1139
never      never      NY 158A8DEB02D28CC4 PHPS53 H1139R
never      never      NY 161FED8D145762C8 PHPS53 H1140
never      never      NY 15880895102A7A88 PHPS53 H1140R
never      never      NY 161FED9003DD1C68 PHPS53 H1141
never      never      NY 1588089916CF1EA0 PHPS53 H1141R
never      never      NY 161FED9213061778 PHPS53 H1142
never      never      NY 1588089D0ACC33D0 PHPS53 H1142R
never      never      NY 161FED9500FEA7F0 PHPS53 H1143
never      never      NY 158808A11E2F0884 PHPS53 H1143R
never      never      NY 161FED970EBC5C30 PHPS53 H1144
never      never      NY 158808A619D7DD2C PHPS53 H1144R
never      never      NY 161FED991D0D7A38 PHPS53 H1145
never      never      NY 158808AB105DC8C0 PHPS53 H1145R
never      never      NY 161FED9C0C731020 PHPS53 H1146
never      never      NY 158808B00B779D20 PHPS53 H1146R
never      never      NY 161FED9E1A9B0998 PHPS53 H1147
never      never      NY 158808B505709F8C PHPS53 H1147R
never      never      NY 161FEDA10A2B5FC8 PHPS53 H1148
never      never      NY 158808BA04AE2478 PHPS53 H1148R
never      never      NY 161FEDA318E185F8 PHPS53 H1149
never      never      NY 158808BF01838FDC PHPS53 H1149R
never      never      NY 161FEDA607142670 PHPS53 H1150
never      never      NY 158808C31D7FCF1C PHPS53 H1150R
never      never      NY 161FEDB412B59D58 PHPS53 H1151
never      never      NY 158808C80D365CA8 PHPS53 H1151R
never      never      NY 161FEDB712319570 PHPS53 H1152
never      never      NY 158808CC1E10D514 PHPS53 H1152R
never      never      NY 161FEDBA1023E610 PHPS53 H1153
never      never      NY 158808D114BF7A60 PHPS53 H1153R
never      never      NY 161FEDBD06893138 PHPS53 H1154
never      never      NY 158808D60B439D10 PHPS53 H1154R
never      never      NY 161FEDBF1DA923B0 PHPS53 H1155
never      never      NY 158808DA07E4DBF0 PHPS53 H1155R
never      never      NY 161FEDC21B16A850 PHPS53 H1156
never      never      NY 158808DF0EDBE740 PHPS53 H1156R
never      never      NY 161FEDC511668FE8 PHPS53 H1157
never      never      NY 158808E40E6D543C PHPS53 H1157R
never      never      NY 161FEDC80E57B7F8 PHPS53 H1158
never      never      NY 158808E9094D7624 PHPS53 H1158R
never      never      NY 15A4FCC71DEF06F4 PHPS53 H1159R
never      never      NY 161FEDCD1DD3DF00 PHPS53 H1160
never      never      NY 15A4FCCC17DAF046 PHPS53 H1160R
never      never      NY 15A4FCD015A005C6 PHPS53 H1161R
never      never      NY 161FEDD30CE85468 PHPS53 H1162
never      never      NY 15A4FCD414EE74BC PHPS53 H1162R
never      never      NY 161FEDD6043AADA0 PHPS53 H1163
never      never      NY 15AC15B60E7E6D46 PHPS53 H1163R
never      never      NY 161FEDD81BB86000 PHPS53 H1164
never      never      NY 15AC15BA184D6394 PHPS53 H1164R
never      never      NY 161FEDDB123E7738 PHPS53 H1165
never      never      NY 15AC15BE18D5B91A PHPS53 H1165R
never      never      NY 161FEDDE09A40798 PHPS53 H1166
never      never      NY 15AC15C21EB803EC PHPS53 H1166R
never      never      NY 161FEDE1044854B0 PHPS53 H1167
never      never      NY 15AC15C614AF6C92 PHPS53 H1167R
never      never      NY 161FEDE31D19E598 PHPS53 H1168
never      never      NY 15AC15CA1CE5E3EA PHPS53 H1168R
never      never      NY 161FEDE61B70C198 PHPS53 H1169
never      never      NY 15AC15CF080B269C PHPS53 H1169R
never      never      NY 161FEDEA01BC29B8 PHPS53 H1170
never      never      NY 15AC15D312F51EEE PHPS53 H1170R
never      never      NY 161FEDEC1FDF4C38 PHPS53 H1171
never      never      NY 15AC15D811701362 PHPS53 H1171R
never      never      NY 161FEDEF1963A618 PHPS53 H1172
never      never      NY 15AC15DD0616B9FA PHPS53 H1172R
never      never      NY 161FEDF211083818 PHPS53 H1173
never      never      NY 15AC15E103FD7D98 PHPS53 H1173R
never      never      NY 161FEDF50CB5DD40 PHPS53 H1174
never      never      NY 15AC15E5134DBE32 PHPS53 H1174R
never      never      NY 161FEDF809914D70 PHPS53 H1175
never      never      NY 15AC161D09607442 PHPS53 H1175R
never      never      NY 161FEDFA17B6BF10 PHPS53 H1176
never      never      NY 15AC16220F3514C8 PHPS53 H1176R
never      never      NY 161FEDFD05AD8F30 PHPS53 H1177
never      never      NY 15AC1627160FAD56 PHPS53 H1177R
never      never      NY 161FEDFF13BFF408 PHPS53 H1178
never      never      NY 15AC162B1E6AA318 PHPS53 H1178R
never      never      NY 161FEE02021D61E0 PHPS53 H1179
never      never      NY 15AC1631000EE58C PHPS53 H1179R
never      never      NY 161FEE04116E3098 PHPS53 H1180
never      never      NY 15AC163519AC7ACA PHPS53 H1180R
never      never      NY 161FEE070015F508 PHPS53 H1181
never      never      NY 15AC163A078833B6 PHPS53 H1181R
never      never      NY 161FEE090E43D8D0 PHPS53 H1182
never      never      NY 15AC163E1A204160 PHPS53 H1182R
never      never      NY 161FEE0B1CD116F8 PHPS53 H1183
never      never      NY 15AC164311D0EB7C PHPS53 H1183R
never      never      NY 161FEE0E0A39E4D8 PHPS53 H1184
never      never      NY 15AC16480B30358C PHPS53 H1184R
never      never      NY 161FEE1018A76240 PHPS53 H1185
never      never      NY 15AC164D016D16C2 PHPS53 H1185R
never      never      NY 161FEE130668A2E0 PHPS53 H1186
never      never      NY 15AC16520A834990 PHPS53 H1186R
never      never      NY 161FEE1514913AA0 PHPS53 H1187
never      never      NY 15AC165719986650 PHPS53 H1187R
never      never      NY 161FEE1803D9C1A8 PHPS53 H1188
never      never      NY 15AC165C1ACD812C PHPS53 H1188R
never      never      NY 161FEE1A1153AE80 PHPS53 H1189
never      never      NY 15AC166305575FF0 PHPS53 H1189R
never      never      NY 161FEE1C1F3E3F50 PHPS53 H1190
never      never      NY 15AC166813C505D4 PHPS53 H1190R
never      never      NY 161FEE1F0EFADB18 PHPS53 H1191
never      never      NY 15AC166E06CBF05A PHPS53 H1191R
never      never      NY 161FEE211C92DAD8 PHPS53 H1192
never      never      NY 15AC16730BBC53A6 PHPS53 H1192R
never      never      NY 161FEE240A2EB8C8 PHPS53 H1193
never      never      NY 15AC1678186FF6C2 PHPS53 H1193R
never      never      NY 161FEE261885BD78 PHPS53 H1194
never      never      NY 15AC167D071126E0 PHPS53 H1194R
never      never      NY 161FEE2909A03CC8 PHPS53 H1195
never      never      NY 15AC16811084B2BC PHPS53 H1195R
never      never      NY 161FEE2B199D2C70 PHPS53 H1196
never      never      NY 15AC1686025898D4 PHPS53 H1196R
never      never      NY 161FEE2E07E6B948 PHPS53 H1197
never      never      NY 15AC168A0168C574 PHPS53 H1197R
never      never      NY 161FEE3015729858 PHPS53 H1198
never      never      NY 15AC168D154B3C68 PHPS53 H1198R
never      never      NY 161FEE3303370CC8 PHPS53 H1199
never      never      NY 15AC1691174F64EE PHPS53 H1199R
never      never      NY 161FEE35112046E0 PHPS53 H1200
never      never      NY 15AC169603C5E4D8 PHPS53 H1200R
never      never      NY 160D1D7D1EE16DB0 PHPS53 HAXPRST
never      never      NY 15E7709F17E5EDB0 PHPS53 HMCALDB
never      never      NY 155BBCF304541900 PHPS53 HMCAUDT
never      never      NY 161D969413D2F020 PHPS53 HMCCFGV
never      never      NY 157DCAFB0018DB28 PHPS53 HMCCFGX
never      never      NY 15B60AC21A37C08A PHPS53 HMCCNVSD
never      never      NY 1648BC9C0A07CBB0 PHPS53 HMCCOS1
never      never      NY 15C7B6C10BCB2FD8 PHPS53 HMCECR2
never      never      NY 15C7B6C90CC88A90 PHPS53 HMCECR4
never      never      NY 15CACE6508736400 PHPS53 HMCECR5
never      never      NY 15C7B6B0066AD23C PHPS53 HMCECRC
never      never      NY 15D9BE630DFF1524 PHPS53 HMCERE2
never      never      NY 15D9BE6915344B80 PHPS53 HMCERE4
never      never      NY 15D9BE6F0D6D9698 PHPS53 HMCERE5
never      never      NY 15D9BE521E305188 PHPS53 HMCEREP
never      never      NY 15220C551C3B6E28 PHPS53 HMCEXP3
never      never      NY 15CE713C00D20FB8 PHPS53 HMCGSET
never      never      NY 161F0BE31EED2D30 PHPS53 HMCPRSX
never      never      NY 1615BD381DA77DA0 PHPS53 HMCPRUP
never      never      NY 1619587800D60890 PHPS53 HMCPRUS
never      never      NY 164B90BD1C019430 PHPS53 HMCQRY
never      never      NY 164B90C806C859B8 PHPS53 HMCQRY2
never      never      NY 164B90CD10509A64 PHPS53 HMCQRY4
never      never      NY 164B90D0073EB890 PHPS53 HMCQRY5
never      never      NY 15C7830702097490 PHPS53 HMCRCR2
never      never      NY 15C7830E185A6BFC PHPS53 HMCRCR4
never      never      NY 15C78317061022C4 PHPS53 HMCRCR5
never      never      NY 15C7832B09628D34 PHPS53 HMCRCRC
never      never      NY 15D9BE8F1D89B10C PHPS53 HMCRRE2
never      never      NY 15D9BE9513654C98 PHPS53 HMCRRE4
never      never      NY 15DA3869101E5928 PHPS53 HMCRRE5
never      never      NY 15D9BE7C1DE60F88 PHPS53 HMCRREP
never      never      NY 1639247400924910 PHPS53 HMCSIG3
never      never      NY 167A381006E54154 PHPS53 HMCSRVR
never      never      NY 1648701D08505C48 PHPS53 HMCTRAN
never      never      NY 162D0C2C0A2CAAE0 PHPS53 HMCXRLE
never      never      NY 15A7C94E1ED22D8E PHPS53 HMPBNDM
never      never      NY 1608E2520A62D370 PHPS53 HMPBNDR4
never      never      NY 1631560B086E34A8 PHPS53 HMPDCLG
never      never      NY 15E76E4709C5C930 PHPS53 HMPFCMP
never      never      NY 164890B40BD43E58 PHPS53 HMPGCB
never      never      NY 163155830B285D98 PHPS53 HMPGDDL
never      never      NY 1631561808A47EF8 PHPS53 HMPGENP
never      never      NY 15976C280BCB1DB8 PHPS53 HMPGPNL
never      never      NY 1687224D0F9F5FFC PHPS53 HMPRBDR
never      never      NY 155BC2A1004D5FD8 PHPS53 HMPSNAM
never      never      NY 1637EC541E9F2518 PHPS53 HMPUTRN
never      never      NY 1534BB420D798BC4 PHPS53 RMICKJB
never      never      NY 155BFD0F07DCE618 PHPS53 RMIPDAD
never      never      NY 155BFD141D669A04 PHPS53 RMISTAD
never      never      NY 155BFD1B04E61B4C PHPS53 RMISTUP
never      never      NY 15811B3A09912CCC PHPS53 SEDTRNS
never      never      NY 158FBB970661F6C2 PHPS53 STKCLON
never      never      NY 15CDAB591103C79C PHPSPTA GACOLSN
never      never      NY 1694C61D0C724B38 PHPSPTA GADRELS
never      never      NY 1668802F074DA4F8 PHPSPTA GAMI000
never      never      NY 1565EECE0E5ECAEC PHPSPTA GARD000
never      never      NY 16A8010F1F82BB8C PHPSPTA GARD001
never      never      NY 15CDAB0B14D041D8 PHPSPTA GARESET
never      never      NY 15CA646E06025900 PHPSPTA GCADDE
never      never      NY 1619079A1575A360 PHPSPTA GCBTOGL
never      never      NY 1567335819916C94 PHPSPTA GCCOMON
never      never      NY 1672B0C208EA578C PHPSPTA GCCRC00
never      never      NY 15AC828B1B14FA6A PHPSPTA GCCRC01
never      never      NY 155C2C730710AF90 PHPSPTA GCDTTM0
never      never      NY 163952971CCA9600 PHPSPTA GCEXTAT
never      never      NY 155C5B4F023B6524 PHPSPTA GCGENID
never      never      NY 167D65360749F7EC PHPSPTA GCMIGDEL
never      never      NY 15CA646913B95630 PHPSPTA GCRDENT
never      never      NY 15A36643030A26FC PHPSPTA GCSTATE
never      never      NY 15D61F121CE36AD4 PHPSPTA GCSTKCL
never      never      NY 161907A31F133620 PHPSPTA GCSTMIG
never      never      NY 167834541B5DDFD8 PHPSPTA GCTMTH
never      never      NY 164B90F8018FB550 PHPSPTA GCUPDRES
never      never      NY 1646121C0B2895F0 PHPSPTA GEXP000
never      never      NY 15F091221E7380D0 PHPSPTA GEXP004
never      never      NY 1675588010AC1C98 PHPSPTA GIMP000
never      never      NY 160E07A00A802048 PHPSPTA GLCNVRT
never      never      NY 1636F6900F9CF270 PHPSPTA GLMP000
never      never      NY 15D3CC2913ACAD18 PHPSPTA GLXSEER
never      never      NY 16477D14047A4A48 PHPSPTA GRBNDLK
never      never      NY 163703A910FAEC78 PHPSPTA GRCLUP
never      never      NY 15A37FE50D1FAC42 PHPSPTA GRENDV0
never      never      NY 1621D60F177D3620 PHPSPTA GRINSPT
never      never      NY 16792BB11F1ADD68 PHPSPTA GRINST0
never      never      NY 1640B2AB07663A60 PHPSPTA GRPREP0
never      never      NY 167604A8034D288C PHPSPTA GRRBA00
never      never      NY 15E1266101283F10 PHPSPTA GRRBA04
never      never      NY 16394EC31826E248 PHPSPTA GRRPT00
never      never      NY 165D7F23125F1EB4 PHPSPTA GRRSTAT
never      never      NY 15D8A92F0CE846C4 PHPSPTA GRSCL
never      never      NY 163703970628CBD0 PHPSPTA GRSEED0
never      never      NY 15E147E71374FE70 PHPSPTA GRSEED4
never      never      NY 155E0A010DFFB18C PHPSPTA GRTBIND
never      never      NY 1622CCCB0AB717A8 PHPSPTA GRVRF00
never      never      NY 15B09BB90BE4A7FA PHPSPTA GSELECT
never      never      NY 15CDABCB034AE0C4 PHPSPTA GTCLUP
never      never      NY 16506C1D10184988 PHPSPTA GTDELTA
never      never      NY 163C50741B313FF0 PHPSPTA GTLMC00
never      never      NY 16714C5E1D492438 PHPSPTA GTREP00
never      never      NY 16085F6F199251D8 PHPSPTA GTTOGGL
never      never      NY 15CDABD10526D324 PHPSPTA GUIVRFY
never      never      NY 16224D7B0623E920 PHPSPTA GUPDENT
never      never      NY 159772D012BAF9BA PHPSPTA H0001R
never      never      NY 161FDC4F13D9E0C8 PHPSPTA H0002
never      never      NY 1592177A0E93E6CC PHPSPTA H0002R
never      never      NY 161FDC530447AFA0 PHPSPTA H0003
never      never      NY 1592178B0CC11144 PHPSPTA H0003R
never      never      NY 161FDC561EE0F568 PHPSPTA H0004
never      never      NY 1592179502AA646A PHPSPTA H0004R
never      never      NY 161FDC5A0DD001C8 PHPSPTA H0005
never      never      NY 1592179E13C5A24A PHPSPTA H0005R
never      never      NY 161FDC5E05BFA660 PHPSPTA H0006
never      never      NY 159217A716F3A418 PHPSPTA H0006R
never      never      NY 161FDC611DF407D8 PHPSPTA H0007
never      never      NY 159217B30E117928 PHPSPTA H0007R
never      never      NY 161FDC6510FBC310 PHPSPTA H0008
never      never      NY 159217BE06C7E0D6 PHPSPTA H0008R
never      never      NY 161FDC6903CE27A8 PHPSPTA H0009
never      never      NY 159217C91163DD52 PHPSPTA H0009R
never      never      NY 159217DB062756C6 PHPSPTA H0010R
never      never      NY 161FDC701F1DF460 PHPSPTA H0011
never      never      NY 159217E21F5EC7D4 PHPSPTA H0011R
never      never      NY 161FDC74110D5A20 PHPSPTA H0012
never      never      NY 159217E81AAA315E PHPSPTA H0012R
never      never      NY 161FDC78054EBCC0 PHPSPTA H0013
never      never      NY 159217ED192039C2 PHPSPTA H0013R
never      never      NY 159217F3024803CA PHPSPTA H0014R
never      never      NY 161FDC7E1F0A4CE0 PHPSPTA H0015
never      never      NY 159217F71E33B7C2 PHPSPTA H0015R
never      never      NY 161FDC82102BE588 PHPSPTA H0016
never      never      NY 159217FC1ABC4770 PHPSPTA H0016R
never      never      NY 161FDC86011E5340 PHPSPTA H0017
never      never      NY 1592180115AF6AAA PHPSPTA H0017R
never      never      NY 161FDC890808C648 PHPSPTA H0018
never      never      NY 159218070F5B49A2 PHPSPTA H0018R
never      never      NY 161FDC8C165AFDA0 PHPSPTA H0019
never      never      NY 1592180D15DD3104 PHPSPTA H0019R
never      never      NY 161FDC90020B3538 PHPSPTA H0020
never      never      NY 159218121A716D24 PHPSPTA H0020R
never      never      NY 161FDC9301C14030 PHPSPTA H0021
never      never      NY 159218180878C04E PHPSPTA H0021R
never      never      NY 161FDC951F7AFA30 PHPSPTA H0022
never      never      NY 1592181E1206D3B0 PHPSPTA H0022R
never      never      NY 161FDC981D3E1888 PHPSPTA H0023
never      never      NY 159218241A5B697A PHPSPTA H0023R
never      never      NY 162131100DE991E0 PHPSPTA H0024
never      never      NY 159DDC1F0F7FE48C PHPSPTA H0024R
never      never      NY 161FDC9D04DA9598 PHPSPTA H0025
never      never      NY 15A128E9144D9DB0 PHPSPTA H0025R
never      never      NY 15B74E511E488132 PHPSPTA H0025X2
never      never      NY 161FDCA00A715110 PHPSPTA H0026
never      never      NY 15921837107446C2 PHPSPTA H0026R
never      never      NY 167C93F7089AEFA8 PHPSPTA H0026X
never      never      NY 161FDCA3120DF348 PHPSPTA H0033
never      never      NY 1592183C1EA72A64 PHPSPTA H0033R
never      never      NY 161FDCA61B3D6DC8 PHPSPTA H0034
never      never      NY 15921841177E708A PHPSPTA H0034R
never      never      NY 161FDCA91FC33690 PHPSPTA H0035
never      never      NY 15A4F3D3070FF4BA PHPSPTA H0035R
never      never      NY 161FDCAC1BE345B0 PHPSPTA H0038
never      never      NY 1592184607A905C2 PHPSPTA H0038R
never      never      NY 161FDCAF1B7E8FE0 PHPSPTA H0039
never      never      NY 1592184B0673F52E PHPSPTA H0039R
never      never      NY 161FDCB21FD43D50 PHPSPTA H0040
never      never      NY 159218510470D8A2 PHPSPTA H0040R
never      never      NY 161FDCB60366A6C0 PHPSPTA H0041
never      never      NY 159218560A8916E0 PHPSPTA H0041R
never      never      NY 161FDCB900C1CD60 PHPSPTA H0042
never      never      NY 1592185D00F97992 PHPSPTA H0042R
never      never      NY 161FDCBB1D2EE0C0 PHPSPTA H0043
never      never      NY 1592186215454FAC PHPSPTA H0043R
never      never      NY 161FDCBE185DF678 PHPSPTA H0044
never      never      NY 159218670C601C2A PHPSPTA H0044R
never      never      NY 161FDCC11949FC10 PHPSPTA H0045
never      never      NY 1592186D0CF0A2AA PHPSPTA H0045R
never      never      NY 161FDCC415CF69B0 PHPSPTA H0046
never      never      NY 159218711902350C PHPSPTA H0046R
never      never      NY 161FDCC7185307C0 PHPSPTA H0047
never      never      NY 159218761595AF48 PHPSPTA H0047R
never      never      NY 161FDCCA15E40568 PHPSPTA H0048
never      never      NY 1592187B1195DA1E PHPSPTA H0048R
never      never      NY 161FDD1B0085D010 PHPSPTA H0051
never      never      NY 1592188203929E42 PHPSPTA H0051R
never      never      NY 161FDD1E13EF5CE0 PHPSPTA H0052
never      never      NY 1592188714A465A0 PHPSPTA H0052R
never      never      NY 161FDD211327A330 PHPSPTA H0053
never      never      NY 1592188E0B8AB57A PHPSPTA H0053R
never      never      NY 161FDD24118D4F90 PHPSPTA H0054
never      never      NY 159218951F95B83A PHPSPTA H0054R
never      never      NY 161FDD271103FAB8 PHPSPTA H0055
never      never      NY 1592189E0254FFDC PHPSPTA H0055R
never      never      NY 161FDD2A0FB47420 PHPSPTA H0056
never      never      NY 159218A3106628B2 PHPSPTA H0056R
never      never      NY 161FDD2D0ECC1400 PHPSPTA H0057
never      never      NY 159218A80E2F55E2 PHPSPTA H0057R
never      never      NY 161FDD300B2DCD00 PHPSPTA H0058
never      never      NY 159218AD07A19110 PHPSPTA H0058R
never      never      NY 161FDD3308997B98 PHPSPTA H0059
never      never      NY 159218B203F1A084 PHPSPTA H0059R
never      never      NY 161FDD3606748020 PHPSPTA H0060
never      never      NY 159218B61A72A7F2 PHPSPTA H0060R
never      never      NY 161FDD3904B03ED8 PHPSPTA H0061
never      never      NY 159218BC00186A58 PHPSPTA H0061R
never      never      NY 161FDD3C0A406260 PHPSPTA H0062
never      never      NY 159218C107A4E882 PHPSPTA H0062R
never      never      NY 161FDD3F076CD9E0 PHPSPTA H0063
never      never      NY 159218C60B4CEFDC PHPSPTA H0063R
never      never      NY 161FDD4204F18580 PHPSPTA H0065
never      never      NY 159218CB03D33F32 PHPSPTA H0065R
never      never      NY 161FDD4503AFE650 PHPSPTA H0066
never      never      NY 159218D11270681A PHPSPTA H0066R
never      never      NY 161FDD480A6E4D50 PHPSPTA H0067
never      never      NY 159218D60D5FA7F4 PHPSPTA H0067R
never      never      NY 161FDD4B072E2298 PHPSPTA H0068
never      never      NY 159218DD034C0BF0 PHPSPTA H0068R
never      never      NY 161FDD4E04A6A770 PHPSPTA H0069
never      never      NY 159218E3089A4152 PHPSPTA H0069R
never      never      NY 161FDD5102E9EC98 PHPSPTA H0070
never      never      NY 159218E914045FE0 PHPSPTA H0070R
never      never      NY 161FDD54018DCED0 PHPSPTA H0072
never      never      NY 159218EF0F5CFE42 PHPSPTA H0072R
never      never      NY 161FDD5706CD9618 PHPSPTA H0074
never      never      NY 15C5D03D17A5BBD0 PHPSPTA H0074R
never      never      NY 161FDD5A07589C98 PHPSPTA H0075
never      never      NY 15C5D0441FAB9554 PHPSPTA H0075R
never      never      NY 161FDD5D059E7028 PHPSPTA H0076
never      never      NY 15C5D04B1714C114 PHPSPTA H0076R
never      never      NY 161FDD6003FA1420 PHPSPTA H0077
never      never      NY 15C5D0520506A144 PHPSPTA H0077R
never      never      NY 161FDD63084D1890 PHPSPTA H0078
never      never      NY 15C5D0581985C1C0 PHPSPTA H0078R
never      never      NY 161FDD6606059FA8 PHPSPTA H0079
never      never      NY 15C5D05F0F1622FC PHPSPTA H0079R
never      never      NY 161FDD6904C8BEC0 PHPSPTA H0080
never      never      NY 15C5D066153F7284 PHPSPTA H0080R
never      never      NY 161FDD6C19056CB8 PHPSPTA H0081
never      never      NY 15C5D06D160BFDE4 PHPSPTA H0081R
never      never      NY 161FDD701378F7D8 PHPSPTA H0082
never      never      NY 15C5D07317B389C4 PHPSPTA H0082R
never      never      NY 161FDD740DECBB50 PHPSPTA H0083
never      never      NY 15C5D07916CB5BE8 PHPSPTA H0083R
never      never      NY 161FDD7804B1FEE0 PHPSPTA H0084
never      never      NY 15C5D080117649A8 PHPSPTA H0084R
never      never      NY 161FDD7B0FFCED60 PHPSPTA H0085
never      never      NY 15C5D0861C2B48B8 PHPSPTA H0085R
never      never      NY 161FDD7E101B8020 PHPSPTA H0090
never      never      NY 15A4F3DD163BC854 PHPSPTA H0090R
never      never      NY 161FDD810E6C8958 PHPSPTA H0091
never      never      NY 15AC14130C6A1E08 PHPSPTA H0091R
never      never      NY 161FDD840C4EBEA0 PHPSPTA H0092
never      never      NY 15AC14230D148B26 PHPSPTA H0092R
never      never      NY 161FDD870A100CB0 PHPSPTA H0093
never      never      NY 15AC142A1FF41AAC PHPSPTA H0093R
never      never      NY 161FDD8A082F8718 PHPSPTA H0094
never      never      NY 15AC14311F137DA4 PHPSPTA H0094R
never      never      NY 161FDD8D040DD3A0 PHPSPTA H0095
never      never      NY 15AC143714EAD6AA PHPSPTA H0095R
never      never      NY 161FDD9001CD64E8 PHPSPTA H0096
never      never      NY 15AC143F072A5F2C PHPSPTA H0096R
never      never      NY 161FDD9302367578 PHPSPTA H0097
never      never      NY 15AC144E1E3BD120 PHPSPTA H0097R
never      never      NY 161FDD9603377908 PHPSPTA H0098
never      never      NY 15AC1458149FD8E8 PHPSPTA H0098R
never      never      NY 161FDD9900A83250 PHPSPTA H0099
never      never      NY 15AC14600EA43FEE PHPSPTA H0099R
never      never      NY 161FDD9B1EDC32C0 PHPSPTA H0100
never      never      NY 15AC146B18A8ACCE PHPSPTA H0100R
never      never      NY 161FDD9F03D502D0 PHPSPTA H0101
never      never      NY 15AC147612715F96 PHPSPTA H0101R
never      never      NY 161FDDA209081A20 PHPSPTA H0102
never      never      NY 15AC148507D9F45E PHPSPTA H0102R
never      never      NY 161FDDA50841E560 PHPSPTA H0103
never      never      NY 15AC29B21813181E PHPSPTA H0103R
never      never      NY 161FDDA807F72CC0 PHPSPTA H0104
never      never      NY 15AC149308056456 PHPSPTA H0104R
never      never      NY 161FDDAB0FFFA0E0 PHPSPTA H0105
never      never      NY 15AC149F1AC07FA0 PHPSPTA H0105R
never      never      NY 161FDDAE0FABFFD8 PHPSPTA H0106
never      never      NY 15AC14AE0591A4BC PHPSPTA H0106R
never      never      NY 161FDE0D102AA820 PHPSPTA H1001
never      never      NY 155BDC021B6DB61C PHPSPTA H1001R
never      never      NY 155BDC071E372DB0 PHPSPTA H1002R
never      never      NY 161FDE12162AACB8 PHPSPTA H1003
never      never      NY 155BDC0B0BADD90C PHPSPTA H1003R
never      never      NY 161FDE1509071AA0 PHPSPTA H1004
never      never      NY 155BDC0E0F296544 PHPSPTA H1004R
never      never      NY 161FDE17195FCB58 PHPSPTA H1006
never      never      NY 155BDC1110CD89B8 PHPSPTA H1006R
never      never      NY 155BDC1507D7663C PHPSPTA H1007R
never      never      NY 161FDE1D068027C0 PHPSPTA H1008
never      never      NY 155BDC181F551708 PHPSPTA H1008R
never      never      NY 161FDE1F153B0C30 PHPSPTA H1009
never      never      NY 155BDC1C1E810688 PHPSPTA H1009R
never      never      NY 155BDC20123C805C PHPSPTA H1010R
never      never      NY 161FDE2413BF0BA0 PHPSPTA H1012
never      never      NY 155BDC2413BEE580 PHPSPTA H1012R
never      never      NY 155BDC281EF4CEA8 PHPSPTA H1013R
never      never      NY 155BDC2D00D913F0 PHPSPTA H1014R
never      never      NY 155BDC30171DBA90 PHPSPTA H1015R
never      never      NY 155BDC331DDCD7F4 PHPSPTA H1016R
never      never      NY 155BDC361CA05AE0 PHPSPTA H1017R
never      never      NY 161FDE33151F57B8 PHPSPTA H1018
never      never      NY 155BDC391241B8E0 PHPSPTA H1018R
never      never      NY 161FDE360456DE70 PHPSPTA H1019
never      never      NY 155BDC3C0A496C88 PHPSPTA H1019R
never      never      NY 155BDC3F01A2428C PHPSPTA H1020R
never      never      NY 161FDE3B11A2D228 PHPSPTA H1021
never      never      NY 155BDC411863F014 PHPSPTA H1021R
never      never      NY 161FDE3E049D9430 PHPSPTA H1022
never      never      NY 155BDC4409BCCD8C PHPSPTA H1022R
never      never      NY 161FDE4014A1E9D0 PHPSPTA H1023
never      never      NY 155BDC480314DC74 PHPSPTA H1023R
never      never      NY 161FDE4305D95878 PHPSPTA H1024
never      never      NY 155BDC4B07ED0AC0 PHPSPTA H1024R
never      never      NY 161FDE4516C79DE8 PHPSPTA H1025
never      never      NY 155BDC4E09BDAC40 PHPSPTA H1025R
never      never      NY 161FDE48063FDFD8 PHPSPTA H1026
never      never      NY 155BDC5107BFCECC PHPSPTA H1026R
never      never      NY 161FDE4A1851D0F0 PHPSPTA H1027
never      never      NY 155BDC531CFA8FE4 PHPSPTA H1027R
never      never      NY 161FDE4D08209BA8 PHPSPTA H1028
never      never      NY 155BDC5617546790 PHPSPTA H1028R
never      never      NY 161FDE4F18F12778 PHPSPTA H1029
never      never      NY 155BDC5913982694 PHPSPTA H1029R
never      never      NY 161FDE5209BE3CE8 PHPSPTA H1031
never      never      NY 155BDC5D02DA37C0 PHPSPTA H1031R
never      never      NY 161FDE5419B880B8 PHPSPTA H1032
never      never      NY 155BDC6316ADAC4C PHPSPTA H1032R
never      never      NY 161FDE570994B9C0 PHPSPTA H1033
never      never      NY 155BDC6706CC7C10 PHPSPTA H1033R
never      never      NY 161FDE591A8134D0 PHPSPTA H1034
never      never      NY 155BDC6A13A513C4 PHPSPTA H1034R
never      never      NY 161FDE5C09F8D5B8 PHPSPTA H1035
never      never      NY 155BDC6E0AC09784 PHPSPTA H1035R
never      never      NY 161FDE5E1A512EF0 PHPSPTA H1036
never      never      NY 158A85B901EC2828 PHPSPTA H1036R
never      never      NY 16488F5B04F61578 PHPSPTA H1037
never      never      NY 155BDC750E375AA4 PHPSPTA H1037R
never      never      NY 161FDE6401599EF8 PHPSPTA H1038
never      never      NY 155BDC780E52907C PHPSPTA H1038R
never      never      NY 161FDE6611EDBE68 PHPSPTA H1039
never      never      NY 155BDC7B13DFCE04 PHPSPTA H1039R
never      never      NY 161FDE6901AED080 PHPSPTA H1040
never      never      NY 155BDC7E15785B10 PHPSPTA H1040R
never      never      NY 161FDE6B113CCFE8 PHPSPTA H1041
never      never      NY 155BDC820EB9A1D4 PHPSPTA H1041R
never      never      NY 161FDE6E02365EA0 PHPSPTA H1042
never      never      NY 155BDC860BAB9440 PHPSPTA H1042R
never      never      NY 161FDE70156E1E18 PHPSPTA H1043
never      never      NY 155BDC8A000C7508 PHPSPTA H1043R
never      never      NY 161FDE730667E1D8 PHPSPTA H1044
never      never      NY 155BDC8E1AC79150 PHPSPTA H1044R
never      never      NY 161FDE75172311A8 PHPSPTA H1046
never      never      NY 15ACA3D315FD0A1A PHPSPTA H1046R
never      never      NY 161FDE7806709330 PHPSPTA H1047
never      never      NY 155BDC951DD95064 PHPSPTA H1047R
never      never      NY 155BDC9A195F1CAC PHPSPTA H1048R
never      never      NY 161FDE7D0E4EFC90 PHPSPTA H1051
never      never      NY 1584DFBF09E5165C PHPSPTA H1051R
never      never      NY 15816A34079F3880 PHPSPTA H1051X
never      never      NY 161FDE80088551C8 PHPSPTA H1056
never      never      NY 155BDCA117D55598 PHPSPTA H1056R
never      never      NY 161FDE8217CDEF70 PHPSPTA H1057
never      never      NY 155BDCA418814914 PHPSPTA H1057R
never      never      NY 161FECCF00E17C20 PHPSPTA H1058
never      never      NY 155BDCA714AC9E14 PHPSPTA H1058R
never      never      NY 161FECD21DE71C40 PHPSPTA H1059
never      never      NY 155BDCAA1380A8EC PHPSPTA H1059R
never      never      NY 161FECD6066E9C20 PHPSPTA H1060
never      never      NY 155BDCAD061DC944 PHPSPTA H1060R
never      never      NY 161FECD90BE52440 PHPSPTA H1061
never      never      NY 155BDCAF18C672B4 PHPSPTA H1061R
never      never      NY 161FECDC109D7628 PHPSPTA H1062
never      never      NY 155BDCB21F3D7428 PHPSPTA H1062R
never      never      NY 161FECDF1222D330 PHPSPTA H1063
never      never      NY 155BDCB60F133A14 PHPSPTA H1063R
never      never      NY 155BDCB914653080 PHPSPTA H1064R
never      never      NY 161FECE6037780C8 PHPSPTA H1065
never      never      NY 155BDCBC186AAF74 PHPSPTA H1065R
never      never      NY 161FECE90BB44280 PHPSPTA H1066
never      never      NY 155BDCC0084869BC PHPSPTA H1066R
never      never      NY 161FECEC0ED8C648 PHPSPTA H1067
never      never      NY 155BDCC30620BA1C PHPSPTA H1067R
never      never      NY 155BDCC6016F5008 PHPSPTA H1068R
never      never      NY 161FECF209283BE0 PHPSPTA H1069
never      never      NY 155BDCC9044B858C PHPSPTA H1069R
never      never      NY 161FECF50C793EB0 PHPSPTA H1071
never      never      NY 155BDCCC165495DC PHPSPTA H1071R
never      never      NY 15DC641200ECE17C PHPSPTA H1071X
never      never      NY 161FECF810778CA0 PHPSPTA H1072
never      never      NY 155BDCD00B413930 PHPSPTA H1072R
never      never      NY 161FECFB11377B20 PHPSPTA H1073
never      never      NY 155BDCD319CAF2C0 PHPSPTA H1073R
never      never      NY 161FECFE061DB038 PHPSPTA H1074
never      never      NY 155BDCD80F9233BC PHPSPTA H1074R
never      never      NY 161FED00163D3890 PHPSPTA H1075
never      never      NY 155BDCDB0DB3B18C PHPSPTA H1075R
never      never      NY 161FED03136463B0 PHPSPTA H1076
never      never      NY 155BDCDE0B1AA074 PHPSPTA H1076R
never      never      NY 161FED060E434DA0 PHPSPTA H1077
never      never      NY 155BDCE108D7039C PHPSPTA H1077R
never      never      NY 161FED090CEDF588 PHPSPTA H1078
never      never      NY 155BDCE40EFAC860 PHPSPTA H1078R
never      never      NY 161FED0C08C7B388 PHPSPTA H1079
never      never      NY 155BDCE71815C8C0 PHPSPTA H1079R
never      never      NY 161FED0F05C96360 PHPSPTA H1080
never      never      NY 155BDCEA119ABEC4 PHPSPTA H1080R
never      never      NY 161FED12077AFC20 PHPSPTA H1081
never      never      NY 155BDCED03791A08 PHPSPTA H1081R
never      never      NY 161FED150107E628 PHPSPTA H1082
never      never      NY 155BDCF8041D0CAC PHPSPTA H1082R
never      never      NY 161FED171006BFC0 PHPSPTA H1083
never      never      NY 155BDCFA1ABE2414 PHPSPTA H1083R
never      never      NY 161FED191F3194B0 PHPSPTA H1084
never      never      NY 155BDCFD18411260 PHPSPTA H1084R
never      never      NY 155BDD01018C390C PHPSPTA H1085R
never      never      NY 155BDD04195F28CC PHPSPTA H1086R
never      never      NY 161FED210B6F3400 PHPSPTA H1087
never      never      NY 155BDD081B376444 PHPSPTA H1087R
never      never      NY 161FED231E0822F0 PHPSPTA H1088
never      never      NY 155BDD0C153A597C PHPSPTA H1088R
never      never      NY 161FED2617B63710 PHPSPTA H1089
never      never      NY 155BDD1002B4259C PHPSPTA H1089R
never      never      NY 161FED290E6FF710 PHPSPTA H1090
never      never      NY 155BDD1302792958 PHPSPTA H1090R
never      never      NY 161FED2B1D86B130 PHPSPTA H1091
never      never      NY 155BDD16089DAB30 PHPSPTA H1091R
never      never      NY 161FED2E0D091280 PHPSPTA H1092
never      never      NY 155BDD2117BE19B4 PHPSPTA H1092R
never      never      NY 161FED301C4A7DB8 PHPSPTA H1093
never      never      NY 155BDD241BA7FDC4 PHPSPTA H1093R
never      never      NY 161FED330D630468 PHPSPTA H1094
never      never      NY 155BDD271DAF37E0 PHPSPTA H1094R
never      never      NY 161FED351D165ED8 PHPSPTA H1095
never      never      NY 155BDD2B00B83E48 PHPSPTA H1095R
never      never      NY 155BDD2E1017989C PHPSPTA H1096R
never      never      NY 155BDD311042AC38 PHPSPTA H1097R
never      never      NY 161FED3D0C21A228 PHPSPTA H1099
never      never      NY 15A4FD37163C3114 PHPSPTA H1099R
never      never      NY 161FED3F1BAE6B48 PHPSPTA H1100
never      never      NY 1584DFC6136F3DA0 PHPSPTA H1100R
never      never      NY 15816A36033CC6B4 PHPSPTA H1100X
never      never      NY 161FED4219B089C0 PHPSPTA H1101
never      never      NY 1584DFCD05FA4DB4 PHPSPTA H1101R
never      never      NY 15816A370D903F2C PHPSPTA H1101X
never      never      NY 161FED4514635AB8 PHPSPTA H1102
never      never      NY 1584DFD309263C14 PHPSPTA H1102R
never      never      NY 161FED4804361A28 PHPSPTA H1112
never      never      NY 1584DFB60BC66010 PHPSPTA H1112R
never      never      NY 15C483AA06397F0C PHPSPTA H1112X
never      never      NY 155BDD480A63B8F0 PHPSPTA H1113R
never      never      NY 15C8EF841FE89A0C PHPSPTA H1113X
never      never      NY 161FED4D16245178 PHPSPTA H1115
never      never      NY 1566AB81098E9D94 PHPSPTA H1115R
never      never      NY 1583ED1F1E666B9C PHPSPTA H1115X2
never      never      NY 161FED5010DFA3B8 PHPSPTA H1116
never      never      NY 15ACA3DA185219F2 PHPSPTA H1116R
never      never      NY 15A0601E1851EE58 PHPSPTA H1116X2
never      never      NY 161FED5317270668 PHPSPTA H1117
never      never      NY 155BDD5215C47080 PHPSPTA H1117R
never      never      NY 155BDD550B98865C PHPSPTA H1118R
never      never      NY 161FED5816A66898 PHPSPTA H1120
never      never      NY 1588083502F675E0 PHPSPTA H1120R
never      never      NY 161FED5B1081F558 PHPSPTA H1121
never      never      NY 158808391E6D6298 PHPSPTA H1121R
never      never      NY 161FED5E0CAAC940 PHPSPTA H1122
never      never      NY 1588083E0E2B8A58 PHPSPTA H1122R
never      never      NY 161FED610B14E640 PHPSPTA H1123
never      never      NY 15880843067C1C78 PHPSPTA H1123R
never      never      NY 161FED64022752A8 PHPSPTA H1124
never      never      NY 158808480E8A888C PHPSPTA H1124R
never      never      NY 161FED66191DF450 PHPSPTA H1125
never      never      NY 1588084E11535E04 PHPSPTA H1125R
never      never      NY 161FED690F945E90 PHPSPTA H1126
never      never      NY 158808531E5DC988 PHPSPTA H1126R
never      never      NY 161FED6C05601230 PHPSPTA H1127
never      never      NY 158808571B9CC210 PHPSPTA H1127R
never      never      NY 161FED6E1DD2D600 PHPSPTA H1128
never      never      NY 1588085C14B63814 PHPSPTA H1128R
never      never      NY 161FED71158E1C28 PHPSPTA H1129
never      never      NY 158808610ED59A74 PHPSPTA H1129R
never      never      NY 161FED740ADF3B98 PHPSPTA H1130
never      never      NY 158808660480FF9C PHPSPTA H1130R
never      never      NY 161FED77033D7E38 PHPSPTA H1131
never      never      NY 1588086A1F9EAF9C PHPSPTA H1131R
never      never      NY 161FED79198F2E40 PHPSPTA H1132
never      never      NY 1588086F1A327960 PHPSPTA H1132R
never      never      NY 161FED7C0AC87678 PHPSPTA H1133
never      never      NY 158808740F91C07C PHPSPTA H1133R
never      never      NY 161FED7E190C6C40 PHPSPTA H1134
never      never      NY 158808790AF445B8 PHPSPTA H1134R
never      never      NY 161FED8109006C60 PHPSPTA H1135
never      never      NY 1588087E03B881B4 PHPSPTA H1135R
never      never      NY 161FED8317E80110 PHPSPTA H1136
never      never      NY 1588088303BDDDD8 PHPSPTA H1136R
never      never      NY 161FED86063A8180 PHPSPTA H1137
never      never      NY 158808871B5AB230 PHPSPTA H1137R
never      never      NY 161FED881655D160 PHPSPTA H1138
never      never      NY 1597B8020AD0BD9A PHPSPTA H1138R
never      never      NY 161FED8B06039590 PHPSPTA H1139
never      never      NY 158A8DEB02D28CC4 PHPSPTA H1139R
never      never      NY 161FED8D145762C8 PHPSPTA H1140
never      never      NY 15880895102A7A88 PHPSPTA H1140R
never      never      NY 161FED9003DD1C68 PHPSPTA H1141
never      never      NY 1588089916CF1EA0 PHPSPTA H1141R
never      never      NY 161FED9213061778 PHPSPTA H1142
never      never      NY 1588089D0ACC33D0 PHPSPTA H1142R
never      never      NY 161FED9500FEA7F0 PHPSPTA H1143
never      never      NY 158808A11E2F0884 PHPSPTA H1143R
never      never      NY 161FED970EBC5C30 PHPSPTA H1144
never      never      NY 158808A619D7DD2C PHPSPTA H1144R
never      never      NY 161FED991D0D7A38 PHPSPTA H1145
never      never      NY 158808AB105DC8C0 PHPSPTA H1145R
never      never      NY 161FED9C0C731020 PHPSPTA H1146
never      never      NY 158808B00B779D20 PHPSPTA H1146R
never      never      NY 161FED9E1A9B0998 PHPSPTA H1147
never      never      NY 158808B505709F8C PHPSPTA H1147R
never      never      NY 161FEDA10A2B5FC8 PHPSPTA H1148
never      never      NY 158808BA04AE2478 PHPSPTA H1148R
never      never      NY 161FEDA318E185F8 PHPSPTA H1149
never      never      NY 158808BF01838FDC PHPSPTA H1149R
never      never      NY 161FEDA607142670 PHPSPTA H1150
never      never      NY 158808C31D7FCF1C PHPSPTA H1150R
never      never      NY 161FEDB412B59D58 PHPSPTA H1151
never      never      NY 158808C80D365CA8 PHPSPTA H1151R
never      never      NY 161FEDB712319570 PHPSPTA H1152
never      never      NY 158808CC1E10D514 PHPSPTA H1152R
never      never      NY 161FEDBA1023E610 PHPSPTA H1153
never      never      NY 158808D114BF7A60 PHPSPTA H1153R
never      never      NY 161FEDBD06893138 PHPSPTA H1154
never      never      NY 158808D60B439D10 PHPSPTA H1154R
never      never      NY 161FEDBF1DA923B0 PHPSPTA H1155
never      never      NY 158808DA07E4DBF0 PHPSPTA H1155R
never      never      NY 161FEDC21B16A850 PHPSPTA H1156
never      never      NY 158808DF0EDBE740 PHPSPTA H1156R
never      never      NY 161FEDC511668FE8 PHPSPTA H1157
never      never      NY 158808E40E6D543C PHPSPTA H1157R
never      never      NY 161FEDC80E57B7F8 PHPSPTA H1158
never      never      NY 158808E9094D7624 PHPSPTA H1158R
never      never      NY 15A4FCC71DEF06F4 PHPSPTA H1159R
never      never      NY 161FEDCD1DD3DF00 PHPSPTA H1160
never      never      NY 15A4FCCC17DAF046 PHPSPTA H1160R
never      never      NY 15A4FCD015A005C6 PHPSPTA H1161R
never      never      NY 161FEDD30CE85468 PHPSPTA H1162
never      never      NY 15A4FCD414EE74BC PHPSPTA H1162R
never      never      NY 161FEDD6043AADA0 PHPSPTA H1163
never      never      NY 15AC15B60E7E6D46 PHPSPTA H1163R
never      never      NY 161FEDD81BB86000 PHPSPTA H1164
never      never      NY 15AC15BA184D6394 PHPSPTA H1164R
never      never      NY 161FEDDB123E7738 PHPSPTA H1165
never      never      NY 15AC15BE18D5B91A PHPSPTA H1165R
never      never      NY 161FEDDE09A40798 PHPSPTA H1166
never      never      NY 15AC15C21EB803EC PHPSPTA H1166R
never      never      NY 161FEDE1044854B0 PHPSPTA H1167
never      never      NY 15AC15C614AF6C92 PHPSPTA H1167R
never      never      NY 161FEDE31D19E598 PHPSPTA H1168
never      never      NY 15AC15CA1CE5E3EA PHPSPTA H1168R
never      never      NY 161FEDE61B70C198 PHPSPTA H1169
never      never      NY 15AC15CF080B269C PHPSPTA H1169R
never      never      NY 161FEDEA01BC29B8 PHPSPTA H1170
never      never      NY 15AC15D312F51EEE PHPSPTA H1170R
never      never      NY 161FEDEC1FDF4C38 PHPSPTA H1171
never      never      NY 15AC15D811701362 PHPSPTA H1171R
never      never      NY 161FEDEF1963A618 PHPSPTA H1172
never      never      NY 15AC15DD0616B9FA PHPSPTA H1172R
never      never      NY 161FEDF211083818 PHPSPTA H1173
never      never      NY 15AC15E103FD7D98 PHPSPTA H1173R
never      never      NY 161FEDF50CB5DD40 PHPSPTA H1174
never      never      NY 15AC15E5134DBE32 PHPSPTA H1174R
never      never      NY 161FEDF809914D70 PHPSPTA H1175
never      never      NY 15AC161D09607442 PHPSPTA H1175R
never      never      NY 161FEDFA17B6BF10 PHPSPTA H1176
never      never      NY 15AC16220F3514C8 PHPSPTA H1176R
never      never      NY 161FEDFD05AD8F30 PHPSPTA H1177
never      never      NY 15AC1627160FAD56 PHPSPTA H1177R
never      never      NY 161FEDFF13BFF408 PHPSPTA H1178
never      never      NY 15AC162B1E6AA318 PHPSPTA H1178R
never      never      NY 161FEE02021D61E0 PHPSPTA H1179
never      never      NY 15AC1631000EE58C PHPSPTA H1179R
never      never      NY 161FEE04116E3098 PHPSPTA H1180
never      never      NY 15AC163519AC7ACA PHPSPTA H1180R
never      never      NY 161FEE070015F508 PHPSPTA H1181
never      never      NY 15AC163A078833B6 PHPSPTA H1181R
never      never      NY 161FEE090E43D8D0 PHPSPTA H1182
never      never      NY 15AC163E1A204160 PHPSPTA H1182R
never      never      NY 161FEE0B1CD116F8 PHPSPTA H1183
never      never      NY 15AC164311D0EB7C PHPSPTA H1183R
never      never      NY 161FEE0E0A39E4D8 PHPSPTA H1184
never      never      NY 15AC16480B30358C PHPSPTA H1184R
never      never      NY 161FEE1018A76240 PHPSPTA H1185
never      never      NY 15AC164D016D16C2 PHPSPTA H1185R
never      never      NY 161FEE130668A2E0 PHPSPTA H1186
never      never      NY 15AC16520A834990 PHPSPTA H1186R
never      never      NY 161FEE1514913AA0 PHPSPTA H1187
never      never      NY 15AC165719986650 PHPSPTA H1187R
never      never      NY 161FEE1803D9C1A8 PHPSPTA H1188
never      never      NY 15AC165C1ACD812C PHPSPTA H1188R
never      never      NY 161FEE1A1153AE80 PHPSPTA H1189
never      never      NY 15AC166305575FF0 PHPSPTA H1189R
never      never      NY 161FEE1C1F3E3F50 PHPSPTA H1190
never      never      NY 15AC166813C505D4 PHPSPTA H1190R
never      never      NY 161FEE1F0EFADB18 PHPSPTA H1191
never      never      NY 15AC166E06CBF05A PHPSPTA H1191R
never      never      NY 161FEE211C92DAD8 PHPSPTA H1192
never      never      NY 15AC16730BBC53A6 PHPSPTA H1192R
never      never      NY 161FEE240A2EB8C8 PHPSPTA H1193
never      never      NY 15AC1678186FF6C2 PHPSPTA H1193R
never      never      NY 161FEE261885BD78 PHPSPTA H1194
never      never      NY 15AC167D071126E0 PHPSPTA H1194R
never      never      NY 161FEE2909A03CC8 PHPSPTA H1195
never      never      NY 15AC16811084B2BC PHPSPTA H1195R
never      never      NY 161FEE2B199D2C70 PHPSPTA H1196
never      never      NY 15AC1686025898D4 PHPSPTA H1196R
never      never      NY 161FEE2E07E6B948 PHPSPTA H1197
never      never      NY 15AC168A0168C574 PHPSPTA H1197R
never      never      NY 161FEE3015729858 PHPSPTA H1198
never      never      NY 15AC168D154B3C68 PHPSPTA H1198R
never      never      NY 161FEE3303370CC8 PHPSPTA H1199
never      never      NY 15AC1691174F64EE PHPSPTA H1199R
never      never      NY 161FEE35112046E0 PHPSPTA H1200
never      never      NY 15AC169603C5E4D8 PHPSPTA H1200R
never      never      NY 160D1D7D1EE16DB0 PHPSPTA HAXPRST
never      never      NY 15E7709F17E5EDB0 PHPSPTA HMCALDB
never      never      NY 155BBCF304541900 PHPSPTA HMCAUDT
never      never      NY 161D969413D2F020 PHPSPTA HMCCFGV
never      never      NY 157DCAFB0018DB28 PHPSPTA HMCCFGX
never      never      NY 15B60AC21A37C08A PHPSPTA HMCCNVSD
never      never      NY 1648BC9C0A07CBB0 PHPSPTA HMCCOS1
never      never      NY 15C7B6C10BCB2FD8 PHPSPTA HMCECR2
never      never      NY 15C7B6C90CC88A90 PHPSPTA HMCECR4
never      never      NY 15CACE6508736400 PHPSPTA HMCECR5
never      never      NY 15C7B6B0066AD23C PHPSPTA HMCECRC
never      never      NY 15D9BE630DFF1524 PHPSPTA HMCERE2
never      never      NY 15D9BE6915344B80 PHPSPTA HMCERE4
never      never      NY 15D9BE6F0D6D9698 PHPSPTA HMCERE5
never      never      NY 15D9BE521E305188 PHPSPTA HMCEREP
never      never      NY 15220C551C3B6E28 PHPSPTA HMCEXP3
never      never      NY 15CE713C00D20FB8 PHPSPTA HMCGSET
never      never      NY 161F0BE31EED2D30 PHPSPTA HMCPRSX
never      never      NY 1615BD381DA77DA0 PHPSPTA HMCPRUP
never      never      NY 1619587800D60890 PHPSPTA HMCPRUS
never      never      NY 164B90BD1C019430 PHPSPTA HMCQRY
never      never      NY 164B90C806C859B8 PHPSPTA HMCQRY2
never      never      NY 164B90CD10509A64 PHPSPTA HMCQRY4
never      never      NY 164B90D0073EB890 PHPSPTA HMCQRY5
never      never      NY 15C7830702097490 PHPSPTA HMCRCR2
never      never      NY 15C7830E185A6BFC PHPSPTA HMCRCR4
never      never      NY 15C78317061022C4 PHPSPTA HMCRCR5
never      never      NY 15C7832B09628D34 PHPSPTA HMCRCRC
never      never      NY 15D9BE8F1D89B10C PHPSPTA HMCRRE2
never      never      NY 15D9BE9513654C98 PHPSPTA HMCRRE4
never      never      NY 15DA3869101E5928 PHPSPTA HMCRRE5
never      never      NY 15D9BE7C1DE60F88 PHPSPTA HMCRREP
never      never      NY 1639247400924910 PHPSPTA HMCSIG3
never      never      NY 167A381006E54154 PHPSPTA HMCSRVR
never      never      NY 1648701D08505C48 PHPSPTA HMCTRAN
never      never      NY 162D0C2C0A2CAAE0 PHPSPTA HMCXRLE
never      never      NY 15A7C94E1ED22D8E PHPSPTA HMPBNDM
never      never      NY 1608E2520A62D370 PHPSPTA HMPBNDR4
never      never      NY 1631560B086E34A8 PHPSPTA HMPDCLG
never      never      NY 15E76E4709C5C930 PHPSPTA HMPFCMP
never      never      NY 164890B40BD43E58 PHPSPTA HMPGCB
never      never      NY 163155830B285D98 PHPSPTA HMPGDDL
never      never      NY 1631561808A47EF8 PHPSPTA HMPGENP
never      never      NY 15976C280BCB1DB8 PHPSPTA HMPGPNL
never      never      NY 1687224D0F9F5FFC PHPSPTA HMPRBDR
never      never      NY 155BC2A1004D5FD8 PHPSPTA HMPSNAM
never      never      NY 1637EC541E9F2518 PHPSPTA HMPUTRN
never      never      NY 1534BB420D798BC4 PHPSPTA RMICKJB
never      never      NY 155BFD0F07DCE618 PHPSPTA RMIPDAD
never      never      NY 155BFD141D669A04 PHPSPTA RMISTAD
never      never      NY 155BFD1B04E61B4C PHPSPTA RMISTUP
never      never      NY 15811B3A09912CCC PHPSPTA SEDTRNS
never      never      NY 158FBB970661F6C2 PHPSPTA STKCLON
never      never      NY 15D80C3E18F94D23 PI PI5330 19970602171837S101702A064346
never      never      NY 15E49AD60E0E501A PI PI5330 19970821145248S101702A066132
never      never      NY 15E7E7F31F8400F2 PI PI5330 19970911145900S101702M000825
never      never      NY 15F37FEF1A624D38 PI PI9180 19971124092916S101702Z346248
never      never      NY 15F383AA0CCB743C PI PI9180 19971124114227S101702Z346248
never      never      NY 15F384B90AFA1C10 PI PI9180 19971124122047S101702Z346248
never      never      NY 1576DF591B11FAFA PI PT5310 19950923S101702Z209544APT531
never      never      NY 160522321585D6B6 PI PT5310 19980316142018S101702A071106
never      never      NY 1605231506D029A8 PI PT5310 19980316145200S101702A071106
never      never      NY 160524D602F7E70C PI PT5310 19980316155305S101702A071106
never      never      NY 15769B300BFD6A92 PI PT5500 19950921S101702Z209344APT550
never      never      NY 15769BDD0A003F54 PI PT5500 19950921S101702Z209353APT550
never      never      NY 15769CA51A09D4D6 PI PT5500 19950921S101702Z209365APT550
never      never      NY 1576E23612C24274 PI PT5500 19950923S101702Z209547APT550
never      never      NY 1576E34212AD1454 PI PT5500 19950923S101702Z209549APT550
never      never      NY 1576E4AE10DB0846 PI PT5500 19950923S101702Z209554APT550
never      never      NY 160522471FE39FB6 PI PT5500 19980316142018S101702A071106
never      never      NY 16052321065E4F8A PI PT5500 19980316145200S101702A071106
never      never      NY 160524D40C0ACCDE PI PT5500 19980316155306S101702A071106
never      never      NY 17CBED730FCDA14B PR PR0700I PMRT00003856C451BC
never      never      NY 17D28B271FAFF6EE PR PR0700I PMRT00004756FBDF9D
never      never      NY 17CBED7504865065 PR PR0730I PMRT00003856C451C9
never      never      NY 17D28B290707B4B6 PR PR0730I PMRT00004756FBDFA6
never      never      NY 1700981E0C5A22E0 PSSSICH PSSCSQL V4000
never      never      NY 1576C95000BB4872 PT PT5310 19950922S101702Z209539APT531
never      never      NY 1576DF591B11FAFA PT PT5310 19950923S101702Z209544APT531
never      never      NY 160522321585D6B6 PT PT5310 19980316142018S101702A071106
never      never      NY 1605231506D029A8 PT PT5310 19980316145200S101702A071106
never      never      NY 160524D602F7E70C PT PT5310 19980316155305S101702A071106
never      never      NY 15E7E7C7158A3702 PT PT5440 19970911145557S101702M000825
never      never      NY 15F0B4EB1937796C PT PT5440 19971106145743S101702A067886
never      never      NY 15769A9E11F1BCB4 PT PT5500 19950921S101702Z209329APT550
never      never      NY 15769B300BFD6A92 PT PT5500 19950921S101702Z209344APT550
never      never      NY 15769BDD0A003F54 PT PT5500 19950921S101702Z209353APT550
never      never      NY 15769CA51A09D4D6 PT PT5500 19950921S101702Z209365APT550
never      never      NY 1576E0100F2EAFEC PT PT5500 19950923S101702Z209545APT550
never      never      NY 1576E0C60DF3B43C PT PT5500 19950923S101702Z209546APT550
never      never      NY 1576E23612C24274 PT PT5500 19950923S101702Z209547APT550
never      never      NY 1576E2CF001CFF64 PT PT5500 19950923S101702Z209548APT550
never      never      NY 1576E34212AD1454 PT PT5500 19950923S101702Z209549APT550
never      never      NY 1576E3A9166DCD96 PT PT5500 19950923S101702Z209550APT550
never      never      NY 1576E4311B55E77A PT PT5500 19950923S101702Z209551APT550
never      never      NY 1576E4AE10DB0846 PT PT5500 19950923S101702Z209554APT550
never      never      NY 158442EC1671AB8C PT PT5500 19951217S101702Z225217APT550
never      never      NY 1584EC800C7CD4C6 PT PT5500 19951221S101702Z226191APT550
never      never      NY 160522471FE39FB6 PT PT5500 19980316142018S101702A071106
never      never      NY 16052321065E4F8A PT PT5500 19980316145200S101702A071106
never      never      NY 160524D40C0ACCDE PT PT5500 19980316155306S101702A071106
never      never      NY 15E7E7ED0B68575C PT PT5510 19970911145559S101702M000825
never      never      NY 15F427070ACF74D8 PT PT5510 19971128130923S101702Z347739
never      never      NY 15F74F061D9C512C PT PT5510 19971218150836S101702A069263
never      never      NY 15F51E1F0353ADD0 PT PT8060 19971204163212S101702M000828
never      never      NY 160C314A07BB75F6 PT PT8490 19980430141812S101702A072050
never      never      NY 15FCCEB0130AE135 PT PT8500 19980122145053S101702A069863
never      never      NY 1576BE1A12EFE12A PT PT8520 19950922S101702Z209475APT852
never      never      NY 1576E4A202F8FA54 PT PT8520 19950923S101702Z209553APT852
never      never      NY 158B34781F8F67CE PT PT8520 19960130S101702Z232085APT852
never      never      NY 15A06492075EA8E0 PT PT8520 19960613141320S101702M000695
never      never      NY 15BF57A913832FA4 PT PT8520 19961227123142S101702M000758
never      never      NY 160E649B1FE921CC PT PT8550 19980514142122S101702A072418
never      never      NY 15D2FAFE11AC610A PT PT8640 19970501112819S101702Z309494
never      never      NY 15D78DA70F21A16F PT PT8640 19970530134806S101702Z313782
never      never      NY 15DBCB591EF53862 PT PT8640 19970626132656S101702A064909
never      never      NY 15BFFB821DCDEEE4 PT PT8650 19961231141731S101702Z286711
never      never      NY 15C073AE08615E2C PT PT8650 19970103135840S101702Z287197
never      never      NY 15C4DC300D0FCCC6 PT PT8650 19970131150927S101702A061364
never      never      NY 15D3025C05BF972C PT PT8660 19970501155240S101702Z309514
never      never      NY 15D78DCB12589A5F PT PT8660 19970530135311S101702Z313785
never      never      NY 15DBCB5810DC9F80 PT PT8660 19970626132652S101702A064909
never      never      NY 15B7A6CD0776D948 PT YPTBAK 19961108140520S101702Z275952
never      never      NY 15B82E3118A4DB0C PT YPTBAK 19961111225045S101702Z276501
never      never      NY 15B82F0A10C29FC2 PT YPTBAK 19961111232114S101702Z276502
never      never      NY 15B84E911770ABC6 PT YPTBAK 19961112180917S101702Z276858
never      never      NY 15B85D13076AB4CA PT YPTBAK 19961113024850S101702Z276869
never      never      NY 15B8BB991E5F6618 PT YPTBAK 19961115111205S101702A058611
never      never      NY 15C00D9B0E244E32 PT YPTBAK 19970101010523S101702Z286736
never      never      NY 15C4DC1D0F2561BC PT YPTBAK 19970131150650S101702A061364
never      never      NY 15C52C0E0C29018E PT YPTBAK 19970202144825S101702Z294216
never      never      NY 15C69716081FC1C2 PT YPTBAK 19970211152131S101702Z295652
never      never      NY 15C96D8410280334 PT YPTBAK 19970301164109S101702Z298905
never      never      NY 15CD838B169BBC14 PT YPTBAK 19970327164021S101702Z303850
never      never      NY 15D2DB0F0D9D6E96 PT YPTBAK 19970430162533S101702Z309430
never      never      NY 15D78D8E074A916E PT YPTBAK 19970530134436S101702Z313781
never      never      NY 15DBCB4E1A2B4AE2 PT YPTBAK 19970626132441S101702A064909
never      never      NY 15DCB9E00B9F9790 PT YPTBAK 19970702114347S101702Z319299
never      never      NY 15DE006704E8B1CB PT YPTBAK 19970710143049S101702A065152
never      never      NY 15E266B9028DEDE0 PT YPTBAK 19970807142356S101702A065756
never      never      NY 15E49AEF0B921EAA PT YPTBAK 19970821145703S101702A066147
never      never      NY 15E8FEE61BDA43D6 PT YPTBAK 19970918132513S101702A066834
never      never      NY 15EBCE4414357C32 PT YPTBAK 19971006103232S101702Z337756
never      never      NY 15EE8182170E3CB8 PT YPTBAK 19971023145209S101702A067699
never      never      NY 15F40132187C72CA PT YPTBAK 19971127143521S101702A068552
never      never      NY 15FABB5101948028 PT YPTBAK 19980109095256S101702Z354315
never      never      NY 15FCCF2A0295BF06 PT YPTBAK 19980122150833S101702A069955
never      never      NY 160F563E0D279370 PT YPTBAK 19980520142938S101702A072384
never      never      NY 161190060C42EFEC PT YPTBAK 19980603182259S101702Z377284
never      never      NY 1612CAF000AC8EE2 PT YPTBAK 19980611141330S101702A072986
never      never      NY 1616BD80170F59EC PT YPTBAK 19980706170353S101702Z382086
never      never      NY 15B7A6CD1C5235AE PT YPTBER 19961108140519S101702Z275952
never      never      NY 15B84E9116D6F49E PT YPTBER 19961112180916S101702Z276858
never      never      NY 15B8BB991C01C330 PT YPTBER 19961115111204S101702A058611
never      never      NY 15C4DC1C0C27ABAC PT YPTBER 19970131150649S101702A061364
never      never      NY 15C52C0204C2AD20 PT YPTBER 19970202144632S101702Z294215
never      never      NY 15C96D840C52C4D8 PT YPTBER 19970301164107S101702Z298905
never      never      NY 15CD838B14670644 PT YPTBER 19970327164021S101702Z303850
never      never      NY 15D2DB0F0C4EF8EA PT YPTBER 19970430162531S101702Z309430
never      never      NY 15D78D8E05A65FE3 PT YPTBER 19970530134435S101702Z313781
never      never      NY 15DCB9E004319F82 PT YPTBER 19970702114345S101702Z319299
never      never      NY 15DE00680AEC1396 PT YPTBER 19970710143019S101702A065152
never      never      NY 15E8FEE519C2BED6 PT YPTBER 19970918132507S101702A066834
never      never      NY 15EBCE44117D78EE PT YPTBER 19971006103226S101702Z337756
never      never      NY 15EE81810DB0104A PT YPTBER 19971023145207S101702A067699
never      never      NY 15F4012F1C28123A PT YPTBER 19971127143518S101702A068552
never      never      NY 15FABB51020CF0D2 PT YPTBER 19980109095255S101702Z354315
never      never      NY 15FCCF281C6740C4 PT YPTBER 19980122150832S101702A069955
never      never      NY 15B7A6CD019CE8F6 PT YPTBZAC 19961108140519S101702Z27595
never      never      NY 15B84E9116F18FA4 PT YPTBZAC 19961112180917S101702Z27685
never      never      NY 15B85D121A7FB7E0 PT YPTBZAC 19961113024849S101702Z27686
never      never      NY 15B8BB991BF2DE38 PT YPTBZAC 19961115111204S101702A05861
never      never      NY 15C96D840C475B1A PT YPTBZAC 19970301164109S101702Z29890
never      never      NY 15CD838B1656C8C6 PT YPTBZAC 19970327164021S101702Z30385
never      never      NY 15D2DB0F0D384228 PT YPTBZAC 19970430162532S101702Z30943
never      never      NY 15D78D91182C4DF2 PT YPTBZAC 19970530134435S101702Z31378
never      never      NY 15DBCB4D17199AE6 PT YPTBZAC 19970626132432S101702A06490
never      never      NY 15DCB9E007B1B9A4 PT YPTBZAC 19970702114346S101702Z31929
never      never      NY 15DE00670F7BC36C PT YPTBZAC 19970710143026S101702A06515
never      never      NY 15E8FEE502A4428C PT YPTBZAC 19970918132511S101702A06683
never      never      NY 15EBCE4410B183F8 PT YPTBZAC 19971006103230S101702Z33775
never      never      NY 15EE81810DB15824 PT YPTBZAC 19971023145208S101702A06769
never      never      NY 15F4012E0ACB83CC PT YPTBZAC 19971127143519S101702A06855
never      never      NY 1579E3C114C9C4E6 PT YYPTM12 19951012S101702A048386AYYPT
never      never      NY 180096D90561FF68 PU PU7334 JCLB000014
never      never      NY 181558C31EE2F0FE PU PU7334 JCLB000021
never      never      NY 15A05CEC1F5D6F70 PUPG53 HMCCNVI1
never      never      NY 15C7873D10990614 PUPG53 HMCCNVK
never      never      NY 15A043920A5B4270 PUPG53 HMCCNVK2
never      never      NY 15A0441013B493C2 PUPG53 HMCCNVS2
never      never      NY 15A043970D3DA93A PUPG53 HMCCNVS3
never      never      NY 15A0439C01514B04 PUPG53 HMCCNVT2
never      never      NY 15A043A6113CBE56 PUPG53 HMCCNVT3
never      never      NY 158A43471504A084 PUPG53 HMCCNVTE
never      never      NY 158A434C1B384D44 PUPG53 HMCCNVTR
never      never      NN 16805BE6195D3018 PV A5PO058 2000-05-08-16.07.25.035712
never      never      NN 166B99D109A58BB0 PV B5POCNTL 1999-12-28-14.08.56.649262
never      never      NN 169C03F101441E35 PV YPV760B A18Q000770
never      never      NY 18321A571A3F36F0 RB YRBUXY1 RBK00000185A1D6D88MVS
never      never      NY 1541CE631AF17F42 RE RE7520 19941020175514S101702M000502
never      never      NY 154631F5182A2E0E RE RE7520 19941117161042S101702A039244
never      never      NY 15684C181296326C RE RE7580 19950622S101702A045483ARE758
never      never      NY 15C708760367E16A RE RE7580 19970214105944S101702A061587
never      never      NY 15C709581E10A430 RE RE7580 19970214112718S101702A061587
never      never      NY 1596804A1E8F8F38 RE RE8020 19960411154156S101702A052875
never      never      NY 15EC1BA406523798 RE RE9930 19971008084159S101702Z338162
never      never      NY 152BD19507F98B48 RE YREDAT 19940602200603S101702A034743
never      never      NY 152BEFE81D72F7E8 RE YREDAT 19940603141908S101702A034743
never      never      NY 1560964D1177A128 RK RK2320 19950504142910S101702A043469
never      never      NY 15C5CF4E037AD228 RK RK2320 19970206160943S101702A061306
never      never      NY 1560964F070B41CA RK RK2330 19950504142915S101702A043469
never      never      NY 15693C640D8F84BA RK RK2330 19950628151450S101702Z197041
never      never      NY 156A7E220F1A5F38 RK RK2330 19950706150906S101702A045904
never      never      NY 155C63740F70936C RK RK2340 19950407211920S101702Z184804
never      never      NY 1560965113E43822 RK RK2340 19950504142921S101702A043469
never      never      NY 1560964A0C2536A6 RK RK2350 19950504142834S101702A043469
never      never      NY 155C637F1C17F0D6 RK RK2360 19950407212049S101702Z184806
never      never      NY 1560964C08BA9EEA RK RK2360 19950504142837S101702A043469
never      never      NY 1560964D035B52D6 RK RK2380 19950504142840S101702A043469
never      never      NY 15C5CF4704B2065C RK RK2380 19970206160944S101702A061306
never      never      NY 15609650104F5002 RK RK2390 19950504142842S101702A043469
never      never      NY 159F4A220FC79D18 RK RK2390 19960606134538S101702A053734
never      never      NY 15C5CF51133C7EEE RK RK2390 19970206160944S101702A061306
never      never      NY 1560964C1FB33A24 RK RK2400 19950504142846S101702A043469
never      never      NY 15C5CF4B03B35654 RK RK2400 19970206160942S101702A061306
never      never      NY 1560964F0808E5D8 RK RK2410 19950504142854S101702A043469
never      never      NY 15C7FD8E090E0BE6 RK RK2410 19970220131049S101702A061871
never      never      NY 1560964C007FB3A0 RK RK2420 19950504142901S101702A043469
never      never      NY 15C7FD8E08C284A6 RK RK2420 19970220131051S101702A061871
never      never      NY 17C9963D0E9D1A7E RM RM7190 PARS000047
never      never      NY 17D2894B199C042A RM RM7210 PARS000056
never      never      NY 17C9B5381AAAEB8E RM RM7220 PARS000047
never      never      NY 17D324D60428A15D RM RM7220 PARS000054
never      never      NY 17CAA7F607B9CEF4 RM RM7280 PARS000047
never      never      NY 17D5FDA602DF8199 RM RM7280 PARS000054
never      never      NY 17C89C9B020D8DEF RM RM7930 PARS000047
never      never      NY 1558E31601BCB286 RM RM9020 19950316S101702A042838ARM902
never      never      NY 160C31380C0F6DE6 RM RM9200 19980430141653S101702A072046
never      never      NN 15F064461C73D05C RM RP7980 19971104145142S101702Z343279
never      never      NY 17C9714F0337B8C7 RM YRM0760 PARS00005056AF7949
never      never      NY 17D32906023E38B4 RM YRM0760 PARS00005557010BE4
never      never      NY 17C96F7C11174A32 RM YRM2670 PARS00004756AF6A14
never      never      NY 17D2B6E407337802 RM YRM2670 PARS00005456FD4E7D
never      never      NY 17C96F7C1C6EEBB2 RM YRM2680 PARS00004756AF6A17
never      never      NY 17D2B6E41578F6C5 RM YRM2680 PARS00005456FD4E81
never      never      NY 17C0C2730EC08811 RM YRMR025 PARS0000505666A2A0
never      never      NY 17C0C278086E5C7B RM YRMR075 PARS0000505666A2CB
never      never      NY 17C0C29403353CFA RM YRMR11O PARS0000505666A3C3
never      never      NY 15B7586006DB759E RP RP5100 19961106151732S101702A058507
never      never      NY 15EB160816FC0FA2 RP RP5100 19971001203824S101702Z336777
never      never      NY 15FA26431BD0E24C RP RP5100 19980105165723S101702A069490
never      never      YY 158E6676037C60AE RP RP5340 19960220023552S101702A052154
never      never      NY 15A4508F0E546484 RP RP5660 19960708130856S101702A055658
never      never      NY 15A5C13D0983C2F0 RP RP5660 19960717170432S101702A055989
never      never      NY 15524A961D6A6342 RP RP7000 19950202152307S101702A041708
never      never      NY 156855601385D216 RP RP7000 19950622S101702A045509ARP700
never      never      NY 15684D520C7715DA RP RP7000 19950622S101702M000595ARP700
never      never      YY 158E638309BED4C0 RP RP7060 19960220004831S101702A052153
never      never      YY 158EF5E70AD865D6 RP RP7060 19960223160835S101702A052289
never      never      YY 1593FFE80F5B4CC2 RP RP7060 19960326173958S101702A053072
never      never      NY 1591F5B90E3EAA7C RP RP7280 19960313181104S101702Z238416
never      never      NY 159CC1B012AC5782 RP RP7280 19960521105717S101702Z249265
never      never      NY 156A05721234D83A RP RP7290 19950703S101702Z197678ARP729
never      never      NY 158978CF1E507F2A RP RP7290 19960119S101702A051340ARP729
never      never      NY 15FA26490972FC56 RP RP7960 19980105165721S101702A069490
never      never      NY 15FD730A0F63120C RP RP7960 19980126165347S101702A070032
never      never      NY 15BCB55C03922F5E RP RP9010 19961210181748S101702A059742
never      never      NY 15C3776601054A7C RP RP9010 19970122181857S101702A061163
never      never      NY 15D19D32145B0FEC RP RP9010 19970422184816S101702A063443
never      never      NY 15763B151F831328 RR RR0010 19950919S101702Z208678ARR001
never      never      NY 1606B4570BD7BB5E RR RR0060 19980326141010S101702A071251
never      never      NY 1607CA831478B918 RR RR0060 19980402140829S101702A071359
never      never      NY 160A0690085AC38E RR RR0060 19980416191916S101702M000898
never      never      NY 15FA9D050152F19A RR RR0180 19980108153856S101702M000886
never      never      NY 16059B0202712854 RR RR0180 19980319142247S101702A071155
never      never      NY 160A06D7073C9F48 RR RR0180 19980416191920S101702M000898
never      never      NY 16059B0819181410 RR RR0210 19980319142248S101702A071155
never      never      NY 160A06DF107F4AFF RR RR0210 19980416192021S101702M000898
never      never      NY 1613E4BC033325FB RR RR0210 19980618141924S101702A072843
never      never      NY 15BF59480E567130 RR RR0240 19961227132818S101702A060345
never      never      NY 15FA9CF601CF281E RR RR0240 19980108153902S101702M000886
never      never      NY 16059B00067E3554 RR RR0240 19980319142249S101702A071155
never      never      NY 15DAB2E119DAD44A RR RR7110 19970619140751S101702A064773
never      never      NY 15DAD30207470A34 RR RR7110 19970620091818S101702Z317432
never      never      NY 15DCE51D026DDBE6 RR RR7110 19970703133159S101702A064977
never      never      NY 156730021410C706 RR RR7120 19950615S101702A044661ARR712
never      never      NY 15AD9AF214B10CD2 RR RR7120 19960905155309S101702M000711
never      never      NY 15D0CA2F0BFC4734 RR RR7120 19970417125620S101702A063110
never      never      NY 15894DEA0AD9B246 RR RR7130 19960118S101702M000635ARR713
never      never      NY 15AD9AF21FBF4002 RR RR7130 19960905155309S101702M000711
never      never      NY 15D0CA321DD7D2C0 RR RR7130 19970417125624S101702A063110
never      never      NY 15AA49920BCCCCC8 RR RR7150 19960815131413S101702A055629
never      never      NY 15AD9AF5068541C2 RR RR7150 19960905155310S101702M000711
never      never      NY 15D0CA321D3E98A2 RR RR7150 19970417125625S101702A063110
never      never      NY 156730710A2AE5A8 RR RR7190 19950615S101702A044803ARR719
never      never      NY 15AD9AF5096FDDF4 RR RR7190 19960905155311S101702M000711
never      never      NY 15D0CA2D11768972 RR RR7190 19970417125627S101702A063110
never      never      NN 15AD9AF51B9DBCC8 RR RR7240 19960905155311S101702M000711
never      never      NY 15CB494B0CE2ECBA RR RR7240 19970313122849S101702A061790
never      never      NY 15FA9D140EEA0149 RR RR7240 19980108153908S101702M000886
never      never      NY 15CB494E0E3ABBC6 RR RR7260 19970313122851S101702A061790
never      never      NY 15F1CD11118FA34C RR RR7260 19971113140418S101702A067628
never      never      NY 15FA9D0C1BA194F0 RR RR7260 19980108153913S101702M000886
never      never      NY 15253780171A3714 RR RR7310 19940421200115S101702M000439
never      never      NY 155E644903E07944 RR RR7310 19950420S101702A043312ARR731
never      never      NY 156730710C2E0688 RR RR7310 19950615S101702A044803ARR731
never      never      NY 15AD9AF518B0FA5A RR RR7410 19960905155313S101702M000711
never      never      NY 15D0CA341A122842 RR RR7410 19970417125638S101702A063110
never      never      NY 15D5300E0D4A325F RR RR7410 19970515123231S101702A063836
never      never      NN 157F639B022EF7EE RR RR7420 19951116S101702A049429ARR742
never      never      NN 158ECF370E146BD4 RR RR7420 19960222170427S101702A051544
never      never      NY 15CB494A0A2C3B82 RR RR7420 19970313122851S101702A061790
never      never      NY 16075648075CE7AA RR RR7510 19980330165030S101702Z367465
never      never      NY 1607CCA209F8FEEE RR RR7510 19980402152456S101702A071430
never      never      NY 1607D0AC0616F7A7 RR RR7510 19980402174722S101702A071430
never      never      NY 15F74ED018466868 RR RR7530 19971218150113S101702A069057
never      never      NY 1607CCB10BBE413A RR RR7530 19980402152459S101702A071430
never      never      NY 1607D0B10A1CAD3A RR RR7530 19980402174728S101702A071430
never      never      NY 16001C0D1BFE722C RR RR8050 19980212150044S101702M000834
never      never      NY 1607CA85035C4274 RR RR8050 19980402140836S101702A071359
never      never      NY 160A06A8047BAE52 RR RR8050 19980416192336S101702M000898
never      never      NY 15CB49500EEC74A6 RR RR8100 19970313122854S101702A061790
never      never      NY 15E38AB4165461C2 RR RR8100 19970814203006S101702A065878
never      never      NY 160A068C10FA3A08 RR RR8100 19980416191507S101702M000898
never      never      NY 15CB49431B72BDDE RR RR8220 19970313122854S101702A061790
never      never      NY 15E38AB61AA70746 RR RR8220 19970814203010S101702A065878
never      never      NY 160A068214A4DA36 RR RR8220 19980416191508S101702M000898
never      never      NY 15CC6B651DFAC6E4 RR RR8300 19970320173218S101702A062654
never      never      NY 15E38AAF0AF4A442 RR RR8410 19970814203017S101702A065878
never      never      NY 15FAC8A311E4930A RR RR8410 19980109174945S101702Z354478
never      never      NY 15E269DF0EBECDA2 RR YRRBLR2 19970807161543CGS101702A065
never      never      NY 15E269DD1F494852 RR YRRBLR2 19970807161543S101702A06581
never      never      NY 15C39D780D302984 RT RE7580 19970123170243S101702A060807
never      never      NY 15C3B5550A1F1984 RT RE7580 19970124071623S101702A060807
never      never      NY 15C709581E10A430 RT RE7580 19970214112718S101702A061587
never      never      NY 1541C8C20577E334 RT RT5000 19941020143110S101702A038467
never      never      NN 151A35BF1DC7D344 RT RT5010
never      never      NN 152302491FE02E54 RT RT5010 19940407185237S101702A032574
never      never      NY 14E7946817E5CE1A RT RT5030
never      never      NY 1524395301E2CBBA RT RT5030 19940415122520S101702A032575
never      never      NY 17D16E9D15284C69 RT RT5050 RFT0000015
never      never      NY 17D16EBA043FA588 RT RT5200 RFT0000015
never      never      NY 150F30CF09A26520 RT RT5400
never      never      NY 150F30E50DAF8F1A RT RT5401
never      never      NY 150F30A109622612 RT RT5410
never      never      NY 14DB7D3E14B2B13C RT RT5411
never      never      NY 17D16EC017D19376 RT RT5500 RFT0000015
never      never      NY 14F6FFA21D7D742E RT RT5930
never      never      NY 1524395616C6918A RT RT5930 19940415122513S101702A032575
never      never      NN 160E412002F9BF7A RT RT8300 19980513171122S101702A072545
never      never      NY 17D16EC4131A9246 RT RT8400 RFT0000015
never      never      NY 17D16EC603E1968D RT RT8410 RFT0000015
never      never      NN 160E14430328824B RT RT8411 19980512142538S101702A072415
never      never      NY 15ED6C081CC4F59E RT RT8412 19971016172138S101702A067105
never      never      NY 15F088D0118ABB5C RT RT8412 19971105123924S101702A068100
never      never      NY 17C827201B7E3A17 RT YRT0001 RFT000000956A4A79F
never      never      NY 17D173251C28BB66 RT YRT0011 RFT000001556F2A4B0
never      never      NN 153F948D05458196 SA SA0240 19941006135801S101702A038126
never      never      NN 1592172B0C759F9C SA SA0240 19960314140753S101702A052714
never      never      NN 15BCFD1B02499354 SA SA0240 19961212130630S101702A059412
never      never      NN 153C48BB1DE4D182 SA SA0370 19940915143120S101702A037314
never      never      NN 15E6CAC806F4F6CC SA SA0370 19970904124754S101702M000827
never      never      NN 16059C22125E2638 SA SA0370 19980319145840S101702M000893
never      never      NY 1607CAF81CAAF864 SA SA0980 19980402142445S101702A071385
never      never      NY 160A033E118387AA SA SA0980 19980416172032S101702M000874
never      never      NY 16059C0D0FA17010 SA SA5170 19980319145848S101702M000893
never      never      NY 14FC7B9F09A1CF7A SA YSA0231
never      never      NN 153E7AEB0DF02CBC SA YSA0231 19940929135935S101702A03789
never      never      NN 154861EC1079A5A8 SA YSA0231 19941201141053S101702A03992
never      never      NN 159AE2E90003907E SA YSA0231 19960509132031S101702A05397
never      never      NY 160018B400805128 SA YSA0231 19980212130817S101702M00088
never      never      NY 14FC7BAE0C55C32C SA YSA0232
never      never      NN 153E7AEE092B5344 SA YSA0232 19940929135939S101702A03789
never      never      NN 154861EC1F8ACE2A SA YSA0232 19941201141056S101702A03992
never      never      NN 159AE2E900F1BFB6 SA YSA0232 19960509132032S101702A05397
never      never      NY 160018B401F412F6 SA YSA0232 19980212130817S101702M00088
never      never      NY 14FC7BA1092FCD28 SA YSA0233
never      never      NN 153E7AEC1D12BA88 SA YSA0233 19940929140005S101702A03789
never      never      NN 154861EE11FD4FBA SA YSA0233 19941201141103S101702A03992
never      never      NN 159AE2E918E4523A SA YSA0233 19960509132033S101702A05397
never      never      NY 160018B4031CD008 SA YSA0233 19980212130818S101702M00088
never      never      NY 14FC7BA305407D16 SA YSA0234
never      never      NN 153E7AEE0549ED06 SA YSA0234 19940929140025S101702A03789
never      never      NN 159AE2E90A01B03A SA YSA0234 19960509132033S101702A05397
never      never      NY 160018B21962E2FC SA YSA0234 19980212130815S101702M00088
never      never      NY 14FC7BAB0F989FD8 SA YSA0235
never      never      NN 153E7AEC0D906562 SA YSA0235 19940929135931S101702A03789
never      never      NN 159AE2E810E0325C SA YSA0235 19960509132030S101702A05397
never      never      NY 160018B31A5B1BB8 SA YSA0235 19980212130815S101702M00088
never      never      NY 14FC7BA219BB3386 SA YSA0236
never      never      NN 153E7AEA1D885672 SA YSA0236 19940929135932S101702A03789
never      never      NN 154861EE1679472E SA YSA0236 19941201141106S101702A03992
never      never      NN 149DE1E70069812C SA YSA0272
never      never      NY 15CE998801676182 SA YSA5281 19970403142907S101702M00078
never      never      NY 1617309A1D53B85B SA YSA5281 19980709133945S101702M00092
never      never      NY 15CE99870A316E8A SA YSA5282 19970403142915S101702M00078
never      never      NY 1617308B0D31C360 SA YSA5282 19980709133946S101702M00092
never      never      NY 15F2E643106225E8 SA YSA67S1 19971120134646S101702A06835
never      never      NY 15FBB34210C378DF SA YSA67S1 19980115134658S101702M00089
never      never      NY 16059BD61DD4E90E SA YSA67S1 19980319145252S101702M00089
never      never      NY 1608ED100BBB4F54 SA YSA67S1 19980409192933S101702A07166
never      never      NY 161AA5C403AB8BA2 SA YSA67S1 A16M000011
never      never      NY 15673006126219FA SA YSAL001 19950615S101702A044787AYSAL
never      never      NY 1568496515AEB1F4 SA YSAL001 19950622S101702A045506AYSAL
never      never      NY 156B96111108E7B0 SA YSAL001 19950713S101702A046133AYSAL
never      never      NY 1576979B0FDE7A28 SA YSAL001 19950921S101702A047844AYSAL
never      never      NY 157AFC721907BEF8 SA YSAL001 19951019S101702M000626AYSAL
never      never      NY 157E4ACD02366344 SA YSAL001 19951109S101702A049380AYSAL
never      never      NY 1582B2B304203332 SA YSAL001 19951207S101702A050221AYSAL
never      never      NY 15AB64B50C10C8A4 SA YSAL001 19960822140801S101702A05664
never      never      NY 15FBB342152B3471 SA YSAL001 19980115134655S101702M00089
never      never      NY 156B960C1747DEA0 SA YSAL002 19950713S101702A046133AYSAL
never      never      NY 1576979C0ED6446A SA YSAL002 19950921S101702A047844AYSAL
never      never      NY 15AB64B50E9565AE SA YSAL002 19960822140803S101702A05664
never      never      NY 15CE998616874042 SA YSAL002 19970403142856S101702M00078
never      never      NY 15FBB3421550F17C SA YSAL002 19980115134657S101702M00089
never      never      NY 15A17D840948285C SA YSAL006 19960620135031S101702A05481
never      never      NY 15A35EA31AA5BD84 SA YSAL006 19960702125049S101702A05547
never      never      NY 15A386A40C51ECB6 SA YSAL006 19960703124118S101702A05556
never      never      NY 15A7F1270A7AAE68 SA YSAL006 19960731150427S101702A05618
never      never      NY 15CE998705E28EC2 SA YSAL006 19970403142900S101702M00078
never      never      NY 15FBB3421551E58C SA YSAL006 19980115134658S101702M00089
never      never      NY 15CE9987057858D2 SA YSAL010 19970403142900S101702M00078
never      never      NY 15D87F7915F198DA SA YSAL010 19970605140228S101702M00079
never      never      NY 15D8A9BC088162CD SA YSAL010 19970606151531S101702A06447
never      never      NY 15F9053605F5B6C2 SA YSAL010 19971229123211S101702A06940
never      never      NY 15CE998A09C6AF60 SA YSAL011 19970403142901S101702M00078
never      never      NY 15D87F791766D369 SA YSAL011 19970605140229S101702M00079
never      never      NY 15D8A9BC0A37FD7A SA YSAL011 19970606151531S101702A06447
never      never      NY 15F905360541A4BC SA YSAL011 19971229123211S101702A06940
never      never      NY 159F4BC014E4B402 SA YSAOBP 19960606144320S101702A054730
never      never      NY 15B899671C5170D8 SA YSAOBP 19961114144539S101702M000743
never      never      NY 15B8A1D914AF065C SA YSAOBP 19961114194922S101702M000743
never      never      NY 15B9B1B70CEAF70A SA YSAOBP 19961121140042S101702M000745
never      never      NY 15C164601E9338A4 SA YSAOBP 19970109133259S101702A060528
never      never      NY 15E44AED15D19C64 SA YSAOBP 19970819151336S101702Z328496
never      never      NY 15E44B5A1734315C SA YSAOBP 19970819152851S101702Z328527
never      never      NY 15E44D420A240B9A SA YSAOBP 19970819163654S101702Z328550
never      never      NY 15E499890CFABE4E SA YSAOBP 19970821140528S101702A066252
never      never      NY 160022FE1AA3074A SA YSAOBP 19980212191614S101702M000891
never      never      NN 1617CA2B0D9F0C9C SA YSAT006 A16M000011
never      never      NY 1617309407826F30 SA YSAT009 19980709134033S101702M00092
never      never      NN 161730780C837ABA SA YSAT011 19980709133841S101702M00092
never      never      NY 16173099130FB091 SA YSAT015 19980709133846S101702M00092
never      never      NY 161730801E25BCB0 SA YSAT035 19980709133855S101702M00092
never      never      NN 15B8996A0277B5C6 SA YSAT301 19961114144601S101702M00074
never      never      NN 15B8A1D609330FC2 SA YSAT301 19961114194931S101702M00074
never      never      NN 161D7D3001A935B0 SA YSAT301 A16M000011
never      never      NY 152BC9A60BD9B57A SA YSAT801 19940602152851S101702A03476
never      never      NY 152F190A14CC6B52 SA YSAT801 19940623170035S101702A03525
never      never      NY 15C5CC961E2D0CA0 SA YSAT801 19970206143328S101702A06146
never      never      NY 1608ED0F1851F0D8 SA YSAT801 19980409192934S101702A07166
never      never      NY 1532821C19E6B976 SA YSAT802 19940715094943S101702A03584
never      never      NY 155016A709C4043A SA YSAT802 19950119145806S101702A04120
never      never      NY 15C5CC970C333E6E SA YSAT802 19970206143331S101702A06146
never      never      NY 15CA30E009D9769A SA YSAT802 19970306131335S101702M00077
never      never      NY 1608ED0F18531FB6 SA YSAT802 19980409192934S101702A07166
never      never      NY 1532822D15807290 SA YSAT803 19940715094944S101702A03584
never      never      NY 15C5CC97089DA9D6 SA YSAT803 19970206143332S101702A06146
never      never      NY 1608ED0F141CC73A SA YSAT803 19980409192932S101702A07166
never      never      NY 1532821C15FAAEFC SA YSAT805 19940715094945S101702A03584
never      never      NY 15C5CC970F570596 SA YSAT805 19970206143334S101702A06146
never      never      NY 1608ED0F08BC2FAC SA YSAT805 19980409192933S101702A07166
never      never      NY 1532822D11BD61B2 SA YSAT806 19940715094946S101702A03584
never      never      NY 15C5CC920E8C7D8C SA YSAT806 19970206143321S101702A06146
never      never      NY 152DFBCC09912506 SA YSAT807 19940616144919S101702A03499
never      never      NY 153D625917580C4E SA YSAT807 19940922143846S101702A03759
never      never      NY 15A066370EEB9C62 SA YSAT807 19960613151306S101702A05492
never      never      NY 15B9B1BB041DB752 SA YSAT807 19961121140042S101702M00074
never      never      NY 15C5CC931A5872CA SA YSAT807 19970206143322S101702A06146
never      never      NY 154513D61BBDA420 SA YSAUEB 19941110133031S101702A039326
never      never      NY 15451B0404DABD5A SA YSAUEB 19941110174709S101702A039326
never      never      NY 15462E841FA8D642 SA YSAUEB 19941117140738S101702A039487
never      never      NY 15C164B9051612DA SA YSAUEB 19970109134538S101702A060538
never      never      NY 15F5E0F71EAF2E6A SA YSAUEB 19971209124732S101702A068954
never      never      NY 161933E403C81B9C SA YSX8105 A16M000011
never      never      NY 161981A5061B2D42 SA YSX81S1 A16M000011
never      never      NY 1541788603A42FF4 SAMDBOF SAMB0500
never      never      NY 15767F84136446E4 SAMDBOF SP1BS1T
never      never      NY 15767F8D19B472B2 SAMDBOF SP1BS2T
never      never      NY 15767F9709AA25FE SAMDBOF SP1BS3T
never      never      NY 15767F9C0FCE862E SAMDBOF SP1BS4T
never      never      NY 15767FA817407E00 SAMDBOF SP1BS5T
never      never      NY 15767FB0006A1294 SAMDBOF SP1BS6T
never      never      NY 1578C49201271AE0 SAMDBOF SP1BS9T
never      never      NY 15988B550C40F8D4 SAMDBOF SP1SK1T
never      never      NY 15988B61096F6B8A SAMDBOF SP1SK2T
never      never      NY 15988B6C01CAD6AA SAMDBOF SP1SK3T
never      never      NY 15988B711C4D1EE0 SAMDBOF SP1SK4T
never      never      NY 15988B7F0B56EB30 SAMDBOF SP1SK5T
never      never      NY 15767FC308E2C354 SAMDBOF SP1TS1T
never      never      NY 15767FFB08111E84 SAMDBOF SP1US1T
never      never      NY 1576802C1467DB7E SAMDBOF SP1US2T
never      never      NY 16D99450011C8DF5 SE SE0560 A20Y000517
never      never      NY 16A3B1C805B5AC6F SE SE0560 A20Y000523
never      never      NY 16E4EB9D12FBF592 SE SE0560 A20Y000936
never      never      NY 172F437D038F34BD SE SE0560 A20Y001226
never      never      NY 175B6E4110B174C8 SE SE0560 A20Y001357
never      never      NY 17BF5E19069A3C09 SE SE7120 IMS0000024
never      never      NY 17BF5E191A471C79 SE SE7130 IMS0000024
never      never      NY 181E472111C57656 SE SE8300 IMS0000057
never      never      NY 181E472117D0FB6D SE SE8310 IMS0000057
never      never      NY 177A5FB504F94FDC SE SE8710 A12M006478
never      never      NY 15AD972311049BEA SE YSE0301 19960905133832S101702A05637
never      never      NY 15DDFD8F0BD5A2B4 SE YSE0301 19970710124842S101702A06514
never      never      NY 15DDFD9605FB9180 SE YSE0310 19970710124852S101702A06514
never      never      NY 15EC2A440A7D960A SE YSE0310 19971008172544S101702A06738
never      never      NY 160480EB16D325E0 SE YSE0310 19980312140704S101702A07100
never      never      NY 15DDFD8F19BAFD10 SE YSE0311 19970710124837S101702A06514
never      never      NY 15EC2A4313F5C304 SE YSE0311 19971008172549S101702A06738
never      never      NY 15DDFD9316E3465E SE YSE0312 19970710124838S101702A06514
never      never      NY 15DDFD931948518A SE YSE0313 19970710124839S101702A06514
never      never      NY 15DDFD951227B94C SE YSE0314 19970710124840S101702A06514
never      never      NY 15EC2A4B0712352A SE YSE0314 19971008172558S101702A06738
never      never      NY 15DDFD9409AC0430 SE YSE0315 19970710124841S101702A06514
never      never      NY 15EC2A4A0C52B3EE SE YSE0315 19971008172603S101702A06738
never      never      NY 15DDFD8F057E73E0 SE YSE0316 19970710124842S101702A06514
never      never      NY 15DDFD940CAA335A SE YSE0317 19970710124843S101702A06514
never      never      NY 15EC2A431C89DB98 SE YSE0317 19971008172531S101702A06738
never      never      NY 15DDFD94062E7FA0 SE YSE0318 19970710124844S101702A06514
never      never      NY 15DDFD8F0F1C3CFA SE YSE0319 19970710124845S101702A06514
never      never      NY 15DDFD941349BD10 SE YSE0320 19970710124845S101702A06514
never      never      NY 15EC2A411D04B02E SE YSE0320 19971008172534S101702A06738
never      never      NY 15DDFD9314C2582A SE YSE0321 19970710124847S101702A06514
never      never      NY 15DDFD930E7AECC0 SE YSE0322 19970710124848S101702A06514
never      never      NY 15DDFD941196E27C SE YSE0323 19970710124849S101702A06514
never      never      NY 15DDFD901F803F2E SE YSE0324 19970710124850S101702A06514
never      never      NY 15EC2A43050533CA SE YSE0324 19971008172537S101702A06738
never      never      NY 176AFA811A058A84 SE YSE09D0 A20Y00142753971B62
never      never      NY 17E0AB9C06FF5334 SF SF7990 GDIR000033
never      never      NN 155390A303748620 SI SI7340 19950210175302S101702Z176831
never      never      NN 15551EA502C4230A SI SI7340 19950220151931S101702A042317
never      never      NN 14B6182312CD38FC SI SI7550
never      never      NN 14B618021668B9F4 SI YSI0132
never      never      NY 15D997EF0C286A40 SM SMDEF002
never      never      NN 15D6E2381E2BD592 SM SMJCLEX1
never      never      NY 15AA6CCB0E16DCA8 SM SMJCLEX2
never      never      NN 15AB8DC70A7C3D3E SM SMPATCRE
never      never      NN 15D04BF40F23CF8E SM SMPATDEL
never      never      NN 15F1ED3E01F57756 SM SMPHBILD
never      never      NN 15D2AAB407FB7716 SM SMPHREPL
never      never      NN 15AB84960727165E SM SMPHUPD
never      never      NN 15AB85D00AD82780 SM SMPHUPD1
never      never      NN 15AB85CF03B95EFE SM SMPHUPD2
never      never      NN 15AA6CD40E0EFAC4 SM SMPLAN01
never      never      NN 15E7E9A116ECD213 SM SMUPDAT0
never      never      NN 15E7E9A313C0F84F SM SMUPDAT1
never      never      NY 15D6D716005BD5FE SM SMUPDAT2
never      never      NY 1838B5520B5DFBD7 SN SN5001 SAVS000018
never      never      NY 1838B5551CC61772 SN SN5902 SAVS000018
never      never      NY 1838B5681CBA7EF9 SN SN5910 SAVS000018
never      never      NY 17FEBFE315D52BBF SN YSN110S NOST000268586EA52F
never      never      NY 17FF5C8C0E992FD8 SN YSN111S NOST0002685873C750
never      never      NY 181B9C801BEC5ED9 SN YSND006 SAVS0000055960CF65
never      never      NY 180A7B8B152B54FA SV SV0930 WSSV000188
never      never      NY 15A4D014033630CA SV SV7570 19960711171327S101702A055415
never      never      NN 153034C91B6B1020 SV SV7710 19940630181346S101702A035352
never      never      NN 153263440CE3374A SV SV7710 19940714152500S101702A035714
never      never      NY 1612D2F21FD314F6 SV SV7810 19980611190040S101702A073120
never      never      NY 17D233B301FEDFA1 SV SV7820 WSSV000087
never      never      NY 17E17DEC140DE9B5 SV SV7820 WSSV000116
never      never      NN 153A17A3176DAD4C SV YSVRAD 19940901155609S101702A036983
never      never      NN 1542E2530EDC3580 SV YSVRAD 19941027143121S101702A038681
never      never      NN 1550178603C5A4EA SV YSVRAD 19950119153007S101702A041393
never      never      NN 1556AF2C161A78D0 SV YSVRAD 19950302141336S101702A042588
never      never      NN 1568502B11EF97E4 SV YSVRAD 19950622S101702M000590AYSVRA
never      never      NY 158C978701D73A76 SX SX0540 19960208S101702A051698ASX054
never      never      NY 15A7F1480C2D1BBA SX SX0540 19960731150721S101702A056219
never      never      NY 15AB652403FA9474 SX SX0540 19960822142339S101702A056633
never      never      NN 1576890E1AA75A58 SX SX0640 19950921S101702Z209168ASX064
never      never      NN 1577B0691453E4CE SX SX0640 19950928S101702A047968ASX064
never      never      NN 157E4B0B0B66A3B2 SX SX0640 19951109S101702A049277ASX064
never      never      NY 152CE28503BF3CD0 SX SX0650 19940609145031S101702A034927
never      never      NY 152F1916029864C2 SX SX0650 19940623170137S101702A035250
never      never      NN 156B957D08AFB4A2 SX SX0720 19950713134744S101702A046025
never      never      NN 1573504D15CD741E SX SX0720 19950831S101702A047303ASX072
never      never      NN 15807BB5074440D6 SX SX0720 19951123S101702A049707ASX072
never      never      NY 15F519220403220E SX SX0750 19971204133317S101702M000869
never      never      NY 15FBBB0C0C1D49CA SX SX0750 19980115181956S101702M000856
never      never      NY 16002321034245F2 SX SX0750 19980212191931S101702M000891
never      never      NY 157B250E054049B4 SX SX0780 19951020S101702A048835ASX078
never      never      NY 157B208909229470 SX SX0780 19951020S101702Z213845ASX078
never      never      NY 157B23801ADFE750 SX SX0780 19951020S101702Z213858ASX078
never      never      NN 1559F9FC023B0974 SX YS81103 19950323125510S101702A04310
never      never      NN 155B13C3029604BC SX YS81103 19950330S101702A043182AYS81
never      never      NN 155F7BCF08C04508 SX YS81103 19950427S101702A044020AYS81
never      never      NN 156B95A21C72B020 SX YS81103 19950713S101702A046089AYS81
never      never      NN 156CAF7B1C51A4EE SX YS81103 19950720S101702A046278AYS81
never      never      NN 1559FA051C04561A SX YS81104 19950323125515S101702A04310
never      never      NN 155B13C206A3808C SX YS81104 19950330S101702A043182AYS81
never      never      NN 155F7BD1182C9E58 SX YS81104 19950427S101702A044020AYS81
never      never      NN 156B959E02911352 SX YS81104 19950713S101702A046089AYS81
never      never      NN 156CAF7C0809A71C SX YS81104 19950720S101702A046278AYS81
never      never      NY 144AFF6807253174 SX YSX0610
never      never      NN 158ECB781FE977E4 SX YSX5104 19960222144929S101702A05225
never      never      NN 159F4BC61D6676D4 SX YSX5104 19960606144321S101702A05473
never      never      NN 15A066361E18A61C SX YSX5104 19960613151300S101702A05492
never      never      NN 15A1532219B70EDA SX YSX5104 19960619123317S101702Z25370
never      never      NN 15A17B9A197A4218 SX YSX5104 19960620124151S101702Z25398
never      never      NN 15A180711D0A6E50 SX YSX5104 19960620153501S101702Z25404
never      never      NN 15A246D704B855C6 SX YSX5104 19960625135551S101702A05530
never      never      NY 15AB64C20AAE080C SX YSX5104 19960822140944S101702A05663
never      never      NY 15AC309815B4B7A0 SX YSX5104 19960827154539S101702Z26342
never      never      NY 15AC768F132F33DE SX YSX5104 19960829092947S101702Z26384
never      never      NY 15AC7E4A07701C82 SX YSX5104 19960829140441S101702A05675
never      never      NY 15B8994F01C6D760 SX YSX5104 19961114144227S101702M00074
never      never      NY 15B8A1D607B6206C SX YSX5104 19961114194623S101702M00074
never      never      NY 15B899411D3A8EB4 SX YSX5404 19961114144229S101702M00074
never      never      NY 15B8A1BB1698BE4C SX YSX5404 19961114194626S101702M00074
never      never      NY 15B899511CC3745C SX YSX5405 19961114144230S101702M00074
never      never      NY 15B8A1BA1A4C00C2 SX YSX5405 19961114194627S101702M00074
never      never      NY 15C2797C0F613AAA SX YSX5405 19970116105139S101702Z29104
never      never      NY 15C5CB83084303D6 SX YSX5405 19970206135317S101702A06133
never      never      NY 15DCE48914CAB098 SX YSX5405 19970703131040S101702M00080
never      never      NY 15E3807F00DFDFCA SX YSX5405 19970814142703S101702M00081
never      never      NY 15E3833D0166A0D6 SX YSX5405 19970814160458S101702M00081
never      never      NY 15EB318C1EFF025E SX YSX5405 19971002130333S101702A06718
never      never      NY 16059BD91EA9B992 SX YSX5405 19980319145256S101702M00089
never      never      NY 1605B75607CF32AE SX YSX5405 19980320071931S101702Z36573
never      never      NY 1605B96308EF0FF4 SX YSX5405 19980320083218S101702A07120
never      never      NY 1607E9E7097E9794 SX YSX5405 19980403085402S101702Z36811
never      never      NY 1607EC4115D59740 SX YSX5405 19980403101803S101702A07148
never      never      NN 157AFC7708CFD6B4 SX YSX6403 19951019S101702M000626AYSX6
never      never      NN 157B20D1199DB0E2 SX YSX6403 19951020S101702A048832AYSX6
never      never      NN 157B1F2410A89EA8 SX YSX6403 19951020S101702Z213819AYSX6
never      never      NN 157BC3690F55BAFC SX YSX6403 19951024S101702A048896AYSX6
never      never      NN 157BBE70143F64F8 SX YSX6403 19951024S101702Z214302AYSX6
never      never      NN 157CB74A1030AE02 SX YSX6403 19951030S101702A049033AYSX6
never      never      NN 157D0C0C1A21D3BA SX YSX6403 19951101S101702A049170AYSX6
never      never      NN 157D03E3160D9904 SX YSX6403 19951101S101702Z215711AYSX6
never      never      NN 157D31940B53A2C8 SX YSX6403 19951102S101702A049191AYSX6
never      never      NN 157D29E41E11E576 SX YSX6403 19951102S101702Z215828AYSX6
never      never      NN 157E4A9712D9EB42 SX YSX6403 19951109S101702A049277AYSX6
never      never      NN 157F65A80781BA74 SX YSX6403 19951116S101702M000633AYSX6
never      never      NN 157F58720B66C634 SX YSX6403 19951116S101702Z219256AYSX6
never      never      NN 157F59ED09CBA0F0 SX YSX6403 19951116S101702Z219263AYSX6
never      never      NN 157F81BD1D9955DA SX YSX6403 19951117S101702Z219421AYSX6
never      never      NN 157F88D5041FA3EE SX YSX6403 19951117S101702Z219514AYSX6
never      never      NN 1580023610C8A708 SX YSX6403 19951120S101702Z219821AYSX6
never      never      NN 15800A850EB814C0 SX YSX6403 19951120S101702Z219988AYSX6
never      never      NN 15802BBA1464E042 SX YSX6403 19951121S101702Z220128AYSX6
never      never      NN 15802D0603851400 SX YSX6403 19951121S101702Z220149AYSX6
never      never      NN 158058760AE29C44 SX YSX6403 19951122S101702Z220528AYSX6
never      never      NN 1582B14E0F1B23C4 SX YSX6403 19951207S101702M000644AYSX6
never      never      NN 157AFF1C0CF513D6 SX YSX6404 19951019S101702M000626AYSX6
never      never      NN 157D0C11182DADC2 SX YSX6404 19951101S101702A049170AYSX6
never      never      NN 157D03DF1F1A0496 SX YSX6404 19951101S101702Z215711AYSX6
never      never      NN 157D07891E7C70AE SX YSX6404 19951101S101702Z215750AYSX6
never      never      NN 157E4AA413780998 SX YSX6404 19951109S101702A049277AYSX6
never      never      NN 157F65A8168E9526 SX YSX6404 19951116S101702M000633AYSX6
never      never      NN 158002370412E632 SX YSX6404 19951120S101702Z219821AYSX6
never      never      NN 15802BBB0A9123EC SX YSX6404 19951121S101702Z220128AYSX6
never      never      NN 15802D0618D53640 SX YSX6404 19951121S101702Z220149AYSX6
never      never      NN 15804EF51A17A5F8 SX YSX6404 19951122S101702Z220381AYSX6
never      never      NN 15818C5D02C27A40 SX YSX6404 19951130S101702Z222054AYSX6
never      never      NN 1582B14A1C2269D0 SX YSX6404 19951207S101702M000644AYSX6
never      never      NN 1583C9A506A92A02 SX YSX6404 19951214S101702M000650AYSX6
never      never      NN 1583BE0C093D4690 SX YSX6404 19951214S101702Z224743AYSX6
never      never      NN 1583C0271FEAC558 SX YSX6404 19951214S101702Z224751AYSX6
never      never      NN 15846BBD1769B366 SX YSX6404 19951218S101702A050580AYSX6
never      never      NN 1584BD4D08B57CF4 SX YSX6404 19951220S101702A050692AYSX6
never      never      NN 1585CFD31461A328 SX YSX6404 19951227S101702A050763AYSX6
never      never      NN 1588320F1E183AC8 SX YSX6404 19960111S101702M000654AYSX6
never      never      NN 15891BF50D979ACA SX YSX6404 19960117S101702A051254AYSX6
never      never      NN 158A84A60AB4B4B6 SX YSX6404 19960126S101702Z231538AYSX6
never      never      NN 158B2F3D11C0FAB2 SX YSX6404 19960130S101702A051549AYSX6
never      never      NN 158C97201096367E SX YSX6404 19960208S101702M000665AYSX6
never      never      NN 158ECB9313CF239C SX YSX6404 19960222144924S101702A05225
never      never      NN 15944B7A1A07251A SX YSX6404 19960328144309S101702A05309
never      never      NN 15944D6B1584B088 SX YSX6404 19960328155251S101702A05309
never      never      NN 15944F2F08A7C05E SX YSX6404 19960328165756S101702A05309
never      never      NN 159BD8DE05759546 SX YSX6404 19960515160308S101702M00068
never      never      NN 159C467009F49F42 SX YSX6404 19960518092523S101702Z24884
never      never      NN 159C9E34195E47D8 SX YSX6404 19960520134651S101702A05428
never      never      NN 15A083290AC6BDA0 SX YSX6404 19960614082939S101702Z25275
never      never      NN 15A08E8A1F1D8D06 SX YSX6404 19960614151554S101702A05504
never      never      NN 15A10799061AF3A4 SX YSX6404 19960617152901S101702A05508
never      never      NN 15A298551603232A SX YSX6404 19960627143103S101702A05535
never      never      NN 15A3B19F1CE393FC SX YSX6404 19960704142038S101702A05554
never      never      NN 15AB64C316974D84 SX YSX6404 19960822140947S101702A05663
never      never      NN 15B45BE402B36B20 SX YSX6404 19961018151537S101702A05801
never      never      NN 15B5214B1AE30368 SX YSX6404 19961023130053S101702A05804
never      never      NN 15B9DE6B0045E89E SX YSX6404 19961122163940S101702A05912
never      never      NN 15B9F482175AAC6C SX YSX6404 19961123055028S101702Z27903
never      never      NN 15BA553F1F5DAB1C SX YSX6404 19961125153301S101702A05916
never      never      NN 15BBE7A415C22376 SX YSX6404 19961205153416S101702M00075
never      never      NN 15B9B1C203FA3896 SX YSX6405 19961121140041S101702M00074
never      never      NN 15BBE7A415E64564 SX YSX6405 19961205153417S101702M00075
never      never      NN 15BE18A215AA3788 SX YSX6405 19961219141040S101702A06010
never      never      NN 15C5CCB61D938398 SX YSX6405 19970206143330S101702A06146
never      never      NN 15CE9995012D3F92 SX YSX6405 19970403143003S101702M00078
never      never      NN 15D4E4FE15F52D8F SX YSX6405 19970513154526S101702A06387
never      never      NN 15D5019C06986FF0 SX YSX6405 19970514084910S101702Z31120
never      never      NN 15D50F33086105C8 SX YSX6405 19970514165526S101702A06396
never      never      NN 15D87F95167A750D SX YSX6405 19970605140226S101702M00079
never      never      NN 15D8A1011773DB8E SX YSX6405 19970606100244S101702Z31502
never      never      NN 15D8A85E18EC4C49 SX YSX6405 19970606142544S101702A06447
never      never      NN 15DADD43129A0BC2 SX YSX6405 19970620152422S101702A06484
never      never      NN 15DD8731077D9162 SX YSX6405 19970707141044S101702A06515
never      never      NN 15DEA11B0E5EA8E6 SX YSX6405 19970714142047S101702A06530
never      never      NN 15DECB861D7026A2 SX YSX6405 19970715153931S101702A06535
never      never      NN 15E265C404691D6E SX YSX6405 19970807134752S101702A06580
never      never      NN 15E3807C16D54EDC SX YSX6405 19970814142658S101702M00081
never      never      NN 15E3833802FE9D42 SX YSX6405 19970814160448S101702M00081
never      never      NN 15E4192917134A7E SX YSX6405 19970818093107S101702Z32768
never      never      NN 15E4245417AC08DC SX YSX6405 19970818161023S101702A06610
never      never      NN 15E4998B095FD442 SX YSX6405 19970821140531S101702A06625
never      never      NN 15E8FD85098F021E SX YSX6405 19970918123555S101702A06682
never      never      NN 15F2BEAC0AF8B302 SX YSX6405 19971119141110S101702A06844
never      never      NN 15F5190407D60B38 SX YSX6405 19971204132949S101702M00086
never      never      NN 15F5E0FE10436E76 SX YSX6405 19971209124733S101702A06895
never      never      NN 15F74CA907BCDAF6 SX YSX6405 19971218134256S101702A06920
never      never      NN 15F7DFEE1A1140AC SX YSX6405 19971222053543S101702Z35201
never      never      NN 15FBBA1406F2D048 SX YSX6405 19980115174324S101702M00085
never      never      NN 15FC57E4039F0174 SX YSX6405 19980119155852S101702A06989
never      never      NN 15FCF2710534B0EC SX YSX6405 19980123121054S101702Z35688
never      never      NN 15FCF5FE10F98F9A SX YSX6405 19980123141704S101702Z35690
never      never      NN 15FCF6F30AE89D86 SX YSX6405 19980123145045S101702A07000
never      never      NN 1607CBC9140627E5 SX YSX6405 19980402145252S101702M00089
never      never      NN 1607D0201082AF96 SX YSX6405 19980402172908S101702M00089
never      never      NN 16086D0C1B5F62EC SX YSX6405 19980406150643S101702A07152
never      never      NN 160A06340B7E4886 SX YSX6405 19980416190913S101702M00089
never      never      NN 160F559E06839613 SX YSX6405 19980520140320S101702M00091
never      never      NN 16101F63161E1B38 SX YSX6405 19980525142836S101702A07272
never      never      NN 1610BDC10F807C44 SX YSX6405 19980529125649S101702A07281
never      never      NN 1612CA291720EF30 SX YSX6405 19980611134538S101702M00092
never      never      NN 15828D8216BBB3A4 SX YSX64P4 19951206S101702Z223382AYSX6
never      never      NN 1582B14F01A78782 SX YSX64P4 19951207S101702M000644AYSX6
never      never      NN 1583C9A6100874A6 SX YSX64P4 19951214S101702M000650AYSX6
never      never      NN 1583BD9D16A0F21C SX YSX64P4 19951214S101702Z224741AYSX6
never      never      NN 1583BE0C09139D80 SX YSX64P4 19951214S101702Z224743AYSX6
never      never      NN 1583C02706FE22B6 SX YSX64P4 19951214S101702Z224751AYSX6
never      never      NN 15846BBD1556B166 SX YSX64P4 19951218S101702A050580AYSX6
never      never      NN 158463DB15862DD0 SX YSX64P4 19951218S101702Z225267AYSX6
never      never      NN 158467551C0FD244 SX YSX64P4 19951218S101702Z225344AYSX6
never      never      NN 1584BD4C1C2D8EEC SX YSX64P4 19951220S101702A050692AYSX6
never      never      NN 1584B5770E46642E SX YSX64P4 19951220S101702Z225865AYSX6
never      never      NN 1584B6A0156A2C1A SX YSX64P4 19951220S101702Z225899AYSX6
never      never      NN 15850C8C0B21FA0C SX YSX64P4 19951222S101702A050719AYSX6
never      never      NN 1585CFD402C4C770 SX YSX64P4 19951227S101702A050763AYSX6
never      never      NN 1588320F1DF06CB8 SX YSX64P4 19960111S101702M000654AYSX6
never      never      NN 1588FC800301D63A SX YSX64P4 19960116S101702A051197AYSX6
never      never      NN 15891C0017B4FAD0 SX YSX64P4 19960117S101702A051254AYSX6
never      never      NN 158A84A3193E58A6 SX YSX64P4 19960126S101702Z231538AYSX6
never      never      NN 158B2F5103FDFF42 SX YSX64P4 19960130S101702A051549AYSX6
never      never      NN 158B80C906B86A8A SX YSX64P4 19960201S101702A051648AYSX6
never      never      NN 15921708001661CC SX YSX64P4 19960314140358S101702A05271
never      never      NN 15935B8F15814884 SX YSX64P4 19960322153819S101702A05300
never      never      NN 159C9E3419608CA2 SX YSX64P4 19960520134654S101702A05428
never      never      NN 15A066380B70AC30 SX YSX64P4 19960613151302S101702A05492
never      never      NN 15A08E8700D576FC SX YSX64P4 19960614151553S101702A05504
never      never      NN 15A1079611E06138 SX YSX64P4 19960617152900S101702A05508
never      never      NN 15A1A9DE1CC3EBF8 SX YSX64P4 19960621161730S101702A05525
never      never      NN 15AB64CB14D053D8 SX YSX64P4 19960822140946S101702A05663
never      never      NN 15AC5CCE07714BAC SX YSX64P4 19960828180725S101702A05678
never      never      NN 15ACA5E11E084310 SX YSX64P4 19960830134305S101702Z26407
never      never      NN 15AD1A691F23EDCE SX YSX64P4 19960902111358S101702Z26424
never      never      NN 15AD46930343C32A SX YSX64P4 19960903133413S101702A05685
never      never      NN 15B9B1BF115CC4AE SX YSX64P4 19961121140040S101702M00074
never      never      NN 15B9DE6A1FCCEF3C SX YSX64P4 19961122163939S101702A05912
never      never      NN 15B9F4821A80B90E SX YSX64P4 19961123055027S101702Z27903
never      never      NN 15BA553F1F73E0A6 SX YSX64P4 19961125153300S101702A05916
never      never      NN 15BBE7A416395902 SX YSX64P4 19961205153414S101702M00075
never      never      NN 15BCFEBF102435FA SX YSX64P5 19961212135753S101702A05983
never      never      NN 15C164BE1F570A0E SX YSX64P5 19970109134552S101702A06055
never      never      NN 15C5CCB615F03636 SX YSX64P5 19970206143327S101702A06146
never      never      NN 15CE99950783A102 SX YSX64P5 19970403142956S101702M00078
never      never      NN 15D3EFA6076D084E SX YSX64P5 19970507132447S101702M00079
never      never      NN 15D4E4FE15F85147 SX YSX64P5 19970513154524S101702A06387
never      never      NN 15D5019C186E9827 SX YSX64P5 19970514084909S101702Z31120
never      never      NN 15D50F33140545A8 SX YSX64P5 19970514165525S101702A06396
never      never      NN 15D87F8508B02DF0 SX YSX64P5 19970605140224S101702M00079
never      never      NN 15D8A85E18DC5CD6 SX YSX64P5 19970606142544S101702A06447
never      never      NN 15DD87310312FBA2 SX YSX64P5 19970707141043S101702A06515
never      never      NN 15DEA11B09FC6474 SX YSX64P5 19970714142046S101702A06530
never      never      NN 15DECB861CCC0B66 SX YSX64P5 19970715153931S101702A06535
never      never      NN 15E3807D14063AC8 SX YSX64P5 19970814142657S101702M00081
never      never      NN 15E383420FBCD42C SX YSX64P5 19970814160447S101702M00081
never      never      NN 15E419281E7CDE14 SX YSX64P5 19970818093106S101702Z32768
never      never      NN 15E4245B13CBEEA6 SX YSX64P5 19970818161022S101702A06610
never      never      NN 15E4998B13ADC56C SX YSX64P5 19970821140530S101702A06625
never      never      NN 15F0B30A00AE47BC SX YSX64P5 19971106134926S101702M00084
never      never      NN 15F2BEAC0BCC8F5C SX YSX64P5 19971119141112S101702A06844
never      never      NN 15F5190404B4D436 SX YSX64P5 19971204132949S101702M00086
never      never      NN 15F5E0FE0FCDFA4E SX YSX64P5 19971209124733S101702A06895
never      never      NN 15F74CAE0D9245D2 SX YSX64P5 19971218134258S101702A06920
never      never      NN 15F76C5910C455A2 SX YSX64P5 19971219083811S101702Z35178
never      never      NN 15F778990CA7AD8E SX YSX64P5 19971219155653S101702A06928
never      never      NN 15F7DFF5131DAADE SX YSX64P5 19971222053615S101702Z35201
never      never      NN 15FBBA1403BB5780 SX YSX64P5 19980115174323S101702M00085
never      never      NN 15FC4F0216655CA6 SX YSX64P5 19980119104109S101702Z35584
never      never      NN 15FC57E404A04902 SX YSX64P5 19980119155852S101702A06989
never      never      NN 15FCF26E1AAECB30 SX YSX64P5 19980123121052S101702Z35688
never      never      NN 15FCF5FE1112481C SX YSX64P5 19980123141704S101702Z35690
never      never      NN 15FCF6F30238214C SX YSX64P5 19980123145045S101702A07000
never      never      NN 1607CD4B0924421C SX YSX64P5 19980402154907S101702M00089
never      never      NN 1607D01F0539B2B4 SX YSX64P5 19980402172907S101702M00089
never      never      NN 16086D0F08D86394 SX YSX64P5 19980406150642S101702A07152
never      never      NN 1608BA930E7491E2 SX YSX64P5 19980408132103S101702A07160
never      never      NN 1608ED1411CE1954 SX YSX64P5 19980409192934S101702A07166
never      never      NN 160F55931ADFD53A SX YSX64P5 19980520140318S101702M00091
never      never      NN 161730A703D51E82 SX YSX64P5 19980709134005S101702M00092
never      never      NN 1571157313C573BC SX YSX8103 19950817S101702A046517AYSX8
never      never      NN 157C16B512FB44AC SX YSX8103 19951026S101702A048958AYSX8
never      never      NN 157D318A04933C62 SX YSX8103 19951102S101702A049172AYSX8
never      never      NN 15850C870AE46676 SX YSX8103 19951222S101702A050719AYSX8
never      never      NN 159F4BC61A1C9468 SX YSX8103 19960606144323S101702A05473
never      never      NN 1571156F01CA52CC SX YSX8104 19950817S101702A046517AYSX8
never      never      NN 157C16B515E96EE8 SX YSX8104 19951026S101702A048958AYSX8
never      never      NN 157D318A079D888A SX YSX8104 19951102S101702A049172AYSX8
never      never      NN 15850C870CA55F0A SX YSX8104 19951222S101702A050719AYSX8
never      never      NN 159ADB51182B2246 SX YSX8104 19960509084907S101702Z24732
never      never      NN 159AE3411EAFD254 SX YSX8104 19960509133253S101702A05407
never      never      NN 159F4BC805482D5E SX YSX8104 19960606144310S101702A05473
never      never      NY 15B899511092045A SX YSX8104 19961114144235S101702M00074
never      never      NY 15B8A1DB0C4C4948 SX YSX8104 19961114194632S101702M00074
never      never      NY 15C16462059C0658 SX YSX8104 19970109133303S101702A06053
never      never      NY 15B8995908276F1E SX YSX8105 19961114144236S101702M00074
never      never      NY 15B8A1DB10081264 SX YSX8105 19961114194633S101702M00074
never      never      NY 15B9342308D950C4 SX YSX8105 19961118110550S101702A05891
never      never      NY 15C164621C0207DC SX YSX8105 19970109133314S101702A06053
never      never      NY 15C5CB7B15990C06 SX YSX8105 19970206135318S101702A06133
never      never      NY 15D998871BDD73AE SX YSX8105 19970612134213S101702A06457
never      never      NY 15F2E61814A9D118 SX YSX8105 19971120134349S101702A06835
never      never      NY 15F3D212042DE0CE SX YSX8105 19971126102958S101702A06860
never      never      NY 15F4278E0045FDC2 SX YSX8105 19971128132836S101702A06868
never      never      NY 16059BE41FCFB732 SX YSX8105 19980319145430S101702M00089
never      never      NY 1605BE4213F65E18 SX YSX8105 19980320112646S101702A07121
never      never      NY 1607CADC1BFAD3DF SX YSX8105 19980402142035S101702A07138
never      never      NY 160F558C195E0C9C SX YSX8105 19980520140317S101702M00091
never      never      NY 16173094077053DC SX YSX8105 19980709134006S101702M00092
never      never      NY 15F0B30511E18942 SX YSX81S1 19971106134925S101702M00084
never      never      NY 16059BE401AB11B4 SX YSX81S1 19980319145410S101702M00089
never      never      NY 1607CAD009B76706 SX YSX81S1 19980402142033S101702A07138
never      never      NY 1612CA24135515A7 SX YSX81S1 19980611134539S101702M00092
never      never      NY 1517FC3D0D29C796 SX YSXFEHL
never      never      NY 151EA73716E4C2FA SX YSXFEHL 19940311013633S101702M00038
never      never      NY 1557C87A0851C2E6 SX YSXFLOG 19950309140310S101702A04269
never      never      NY 155B13C201B67B58 SX YSXFLOG 19950330S101702A043182AYSXF
never      never      NY 155C2F6F00389B96 SX YSXFLOG 19950406S101702A043381AYSXF
never      never      NY 156B959E0B0861BC SX YSXFLOG 19950713S101702A046089AYSXF
never      never      NY 15894B4511707A8C SX YSXFLOG 19960118S101702A051283AYSXF
never      never      NY 15A0662B067DB9D6 SX YSXFLOG 19960613151257S101702A05492
never      never      NY 16059BD2029AA8A8 SX YSXFLOG 19980319145352S101702M00089
never      never      NY 151EA73813545804 SX YSXRELK 19940311013634S101702M00038
never      never      NY 151F2CC31F733642 SX YSXRELK E
never      never      NN 1614FC2F024D406E SX YSXT231 19980625130147S101702A07337
never      never      NN 158DB2310749718C SX YSXT812 19960215150345S101702A05206
never      never      NN 158ECB311EBC7A4A SX YSXT812 19960222144042S101702A05221
never      never      NY 1454498000D217B0 SY SY9230
never      never      NY 15CE92BA0FD60A9C SY SY9230 A
never      never      NN 160A103D1AC874EB TE YTEF021 19980417011040S101702A07121
never      never      NN 160E6A7D1FE73396 TE YTEF021 19980514175259S101702A07235
never      never      NN 160A104003ADE3F2 TE YTEF022 19980417011041S101702A07121
never      never      NN 160E6A880A455602 TE YTEF022 19980514175300S101702A07235
never      never      NY 15F51EB417EC7912 TEST YYFIKUR 19971204165432S101702A068
never      never      NN 15BCCEEE141E4052 TK TK0100 19961211093410S101702Z282987
never      never      NN 15BDAFF31DF38818 TK TK0100 19961216234803S101702Z284134
never      never      NN 15BDCD1806CE6402 TK TK0100 19961217171109S101702A060053
never      never      NN 160D4EC11A3FB73A TK TK0110 19980507163244S101702A072127
never      never      NN 15CC649D0539BB5C TK TK0120 19970320132922S101702A062552
never      never      NN 160D4EA718821A60 TK TK0120 19980507163249S101702A072127
never      never      NN 160D4EB7125C33C8 TK TK0130 19980507163251S101702A072127
never      never      NN 15E5B14804A94F86 TK TK0150 19970828125856S101702A066346
never      never      NN 15BE189502002E6C TK TK0160 19961219141039S101702A060093
never      never      NN 15CC649C0CB18912 TK TK0160 19970320132918S101702A062552
never      never      NN 160D4EC2023A6CD0 TK TK0160 19980507163219S101702A072127
never      never      NN 1613E41B17AA1A32 TK TK0180 19980618135727S101702A073194
never      never      NN 161731280ADF24EE TK TK0180 19980709140354S101702A073643
never      never      NY 17C966571F2A4911 TN TN5003 OTXO000036
never      never      NY 17E657980847E6A6 TN TN5003 OTXO000054
never      never      NY 17C96658071D404A TN TN8910 OTXO000036
never      never      NY 17E657AC1B0AB8DC TN TN8920 OTXO000054
never      never      NY 181B49100387BF76 TN TN8920 OTXO000070
never      never      NY 182E814602B0B1A4 TN TN8920 OTXO000081
never      never      NY 181C3AD3128B4815 TN YTN0180 OTXO0000705965FEAFMVS
never      never      NY 181C3AD716131BAA TN YTN0190 OTXO0000705965FEBFMVS
never      never      NY 18282B261F97BBD8 TN YTN0201 OTXO00008159CA241A
never      never      NY 17CBC2051C2DC687 TR TR5360 DERI000022
never      never      NY 17D6C4E7117C1866 TR TR5360 DERI000026
never      never      NY 17E6821203212ED6 TR TR5360 DERI000030
never      never      NY 17F0DF9014CD9938 TR TR5360 DERI000033
never      never      NY 17C9941413DD4975 TR TR7040 DERI000022
never      never      NY 17D3A899025701A9 TR TR7040 DERI000026
never      never      NY 17E304760AB8D3E3 TR TR7040 DERI000030
never      never      NY 17C99311078E759A TR YTRT061 RRA000003156B09495
never      never      NY 17EE32100DBDABE9 TR YTRT061 RRA000004357E3D5C4
never      never      NN 1511668506178B7C TR YTRT931
never      never      NN 15AA4B330C36AFB4 TR YTRT931 19960815141215S101702A05640
never      never      NN 151166AC117672B4 TR YTRT932
never      never      NN 1525300215B6B5FC UF UF8000 19940421153508S101702A033617
never      never      NN 1529963307EBC618 UF UF8000 19940519152240S101702A034445
never      never      NY 1479937C01128F38 UP YUP03
never      never      NY 1479939C0F27649C UP YUP04
never      never      NY 1479939A14610D4C UP YUP06
never      never      NY 147993B815305050 UP YUP09
never      never      NY 147994F413269064 UP YUP10
never      never      NY 1479939B1FA3DE60 UP YUP11
never      never      NY 147993DF14F25E00 UP YUP12
never      never      NN 147993DD1C94A6AC UP YUP13
never      never      NY 147995320C696CE0 UP YUP22
never      never      NN 1479941C17ACA5B8 UP YUP23
never      never      NY 147994F310C5AAE8 UP YUP24
never      never      NY 1479955A16491B58 UP YUP25
never      never      NY 147994EF04A4F7C4 UP YUP29
never      never      NY 14799559148240A8 UP YUP39
never      never      NY 1479955B0532D7CC UP YUP40
never      never      NY 147994F01D3914F0 UP YUP44
never      never      NY 1482604801ADA634 UP YUP45
never      never      NY 147994F3031659C0 UP YUP46
never      never      NY 1484B7781DA22CD0 UP YUP77
never      never      YY 17B6B00315F39DDC UU YUU1031 RS2000003356123340
never      never      YY 1834A47C0B438F4F UU YUU1031 RS200000805A32BB72
never      never      NY 17C9B49A131A4C55 VP VP0010 VIP0000008
never      never      NN 1512802709B816B8 VP VP7010
never      never      NN 155248551FB50E4A VP VP7010 19950202135945S101702A041692
never      never      NY 1617CF331E004DB6 VP VP7400 19980713121941S101702Z382775
never      never      NY 1607ADD71D1138A6 VP VP7410 19980401210424S101702Z367944
never      never      NY 1607CADA05853684 VP VP7410 19980402142025S101702A071473
never      never      NY 15D93E480C064AA9 VP VP7411 19970610075226S101702Z315459
never      never      NY 15D9426501AF1929 VP VP7411 19970610101931S101702Z315459
never      never      NY 15D94CBB10162BDF VP VP7411 19970610162936S101702Z315459
never      never      NN 158B81171BDDD332 VP VP9997 19960201S101702A051690AVP999
never      never      NN 157E4AE3037CD542 VP VP9998 19951109S101702A049426AVP999
never      never      NN 157EECE7015F7B66 VP VP9998 19951113S101702Z218537AVP999
never      never      NN 157F0C9702D3D7DE VP VP9998 19951114S101702Z218682AVP999
never      never      NN 156967950CC44BFC VP VP9999 19950629S101702A045771AVP999
never      never      NY 1599CDF01295F890 VP YVP7401 19960502160759S101702A05381
never      never      NY 159CEA3C0D873370 VP YVP7401 19960522110824S101702Z24949
never      never      NY 159D3CFB0757F72E VP YVP7401 19960524122955S101702Z24986
never      never      NY 15A10496004B9CC8 VP YVP7401 19960617134246S101702Z25309
never      never      NY 15A1318C059543A2 VP YVP7401 19960618163029S101702Z25353
never      never      NY 15A1A21B1763E4D0 VP YVP7401 19960621113929S101702Z25415
never      never      NY 15A1A74E02F15284 VP YVP7401 19960621144555S101702Z25422
never      never      NY 15A2984B14FEB1B4 VP YVP7401 19960627143107S101702A05535
never      never      NY 15BDC0ED079BF8B8 VP YVP7401 19961217095521S101702Z28420
never      never      NY 15BDCA381CA9429E VP YVP7401 19961217152842S101702Z28436
never      never      NY 15CC3EC608583F7C VP YVP7401 19970319145619S101702Z30252
never      never      NY 15D09D3D13A79E36 VP YVP7401 19970416100659S101702Z30653
never      never      NY 15D0A8331151FAD2 VP YVP7401 19970416164056S101702Z30663
never      never      NY 15D55D9804A2483B VP YVP7401 19970516154226S101702A06401
never      never      NY 1601549705449EEC VP YVP7401 19980220093422S101702Z36099
never      never      NY 16024C15126C415A VP YVP7401 19980226131233S101702A07066
never      never      NY 1599CDF20F6371B6 VP YVP7402 19960502160803S101702A05381
never      never      NY 159CEA3C0D6A65F8 VP YVP7402 19960522110825S101702Z24949
never      never      NY 159D3CFB088BBEC4 VP YVP7402 19960524122955S101702Z24986
never      never      NY 15A10496003409D0 VP YVP7402 19960617134247S101702Z25309
never      never      NY 15A1318C0A0CD842 VP YVP7402 19960618163031S101702Z25353
never      never      NY 15A1A21C02CDA2EC VP YVP7402 19960621113930S101702Z25415
never      never      NY 15A1A74E00B1B76C VP YVP7402 19960621144555S101702Z25422
never      never      NY 15A2984C0A211D02 VP YVP7402 19960627143109S101702A05535
never      never      NY 15D0A83307B256E2 VP YVP7402 19970416164056S101702Z30663
never      never      NY 15D55DA61697C01F VP YVP7402 19970516154445S101702A06401
never      never      NN 1599CDF30B1FE6EE VP YVP7403 19960502160807S101702A05381
never      never      NN 159CEA3C0D6E6FF8 VP YVP7403 19960522110825S101702Z24949
never      never      NN 159D3CFB078F564A VP YVP7403 19960524122957S101702Z24986
never      never      NN 15A1049609914F8E VP YVP7403 19960617134248S101702Z25309
never      never      NN 15A1318C0CD88C7C VP YVP7403 19960618163032S101702Z25353
never      never      NN 15A1A21B177412AC VP YVP7403 19960621113930S101702Z25415
never      never      NN 15A1A74E01673934 VP YVP7403 19960621144556S101702Z25422
never      never      NN 15A2985015593642 VP YVP7403 19960627143112S101702A05535
never      never      NY 15D0A833074CC22E VP YVP7403 19970416164057S101702Z30663
never      never      NY 15D55DA6142B8F3A VP YVP7403 19970516154446S101702A06401
never      never      NY 15D8A44E1ED3A997 VP YVP7403 19970606120106S101702Z31510
never      never      NY 15DAB2DF150FD718 VP YVP7403 19970619140749S101702A06479
never      never      NN 1514B9300974D096 VP YVPUP01
never      never      NN 151B4E370A08F98C VP YVPUP01 19940217182915S101702A03124
never      never      NN 153F9E61006D51BE VP YVPUP01 19941006195313S101702A03798
never      never      NN 157353FB027A7168 VP YVPUP01 19950831S101702A047391AYVPU
never      never      NN 1579956306FFFC26 VP YVPUP01 19951010S101702Z212033AYVPU
never      never      NN 157AFCC21A2579D8 VP YVPUP01 19951019S101702A048565AYVPU
never      never      NN 157F6A4D1C370E08 VP YVPUP01 19951116S101702A049627AYVPU
never      never      NN 158169A5024C3084 VP YVPUP01 19951129S101702Z221857AYVPU
never      never      NN 158197F31F69DD0A VP YVPUP01 19951130S101702A050037AYVPU
never      never      NN 1582B2B214C1345E VP YVPUP01 19951207S101702A050228AYVPU
never      never      NN 15871B4E0DF5CBD2 VP YVPUP01 19960104S101702A050753AYVPU
never      never      NN 158A6445045C2762 VP YVPUP01 19960125S101702A051459AYVPU
never      never      NN 159450A70A94D942 VP YVPUP01 19960328175023S101702A05306
never      never      NN 15A3B6F90592C158 VP YVPUP01 19960704173144S101702A05552
never      never      NN 15A3CF04138EC020 VP YVPUP01 19960705075226S101702A05552
never      never      NN 15AD97B41F0D6020 VP YVPUP01 19960905135845S101702A05681
never      never      NY 152648AF171340AA VT VT0610 19940428145845S101702A033858
never      never      NY 154749780BC6A590 VT VT0610 19941124145522S101702A039698
never      never      NY 154497E90E66A334 VT VT0610 E
never      never      NY 17CBF5331866DD2B VT VT0880 VTX0000018
never      never      NY 1556B723175BD380 VT VT5040 19950302185840S101702A042571
never      never      NY 15866F3A132A56DA VT VT5040 19951231S101702Z227061AVT504
never      never      NY 15B317C918193170 VT VT5040 19961010135459S101702A057724
never      never      NY 15CC69A406A0EA08 VT VT5040 19970320162702S101702M000778
never      never      NN 154DE2241478A896 VT VT5120 19950105141216S101702A040864
never      never      NN 1583C9CB11900060 VT VT5120 19951214S101702M000648AVT512
never      never      NY 15F702E511F0579A VT VT5120 19971216174425S101702A069201
never      never      NY 155E23AD0E233A82 VT VT5121 19950419S101702A043804AVT512
never      never      NY 155F335706E117E2 VT VT5121 19950425S101702A043947AVT512
never      never      NY 16015A8217DF2D9A VT VT7798 19980220130604S101702A070613
never      never      NN 15971E9A09A0A7E4 VT VT7799 19960415140717S101702A053434
never      never      NN 15BD2F760F7FA550 VT VT7799 19961213190927S101702A059882
never      never      NY 154A189804D12E02 VT VT8111 19941212115358S101702A040321
never      never      NY 17C8CE340910B334 VT YVT0502 VTX000001856AA212B
never      never      NY 17C69BE81B4F8BD8 VT YVT0509 VTX00000185697B44F
never      never      NY 17C8CE380303CEF7 VT YVT0531 VTX000001856AA214A
never      never      NY 17C781E80C5F8056 VT YVT0532 VTX0000018569F3DAA
never      never      NY 162BC7DF199DB45D VT YVT0578 A15S000165
never      never      NY 151A387A0453DB72 VT YVT0621
never      never      NY 15F632E71A202A58 VT YVT0623 19971211133922S101702M00088
never      never      NY 1600E51A09713ACA VT YVT0623 19980217150354S101702A07053
never      never      NY 1603676C1DE4B288 VT YVT0623 19980305141315S101702A07082
never      never      NY 150F2EEB09ED3F46 VT YVT0731
never      never      NY 154B339C0D6B7386 VT YVT0731 19941219124226S101702A04059
never      never      NY 15501662082F0A76 VT YVT0731 19950119144820S101702M00055
never      never      NY 1564FD760273645E VT YVT0731 19950601S101702M000585AYVT0
never      never      NY 156A7E0601447D9C VT YVT0731 19950706S101702A045888AYVT0
never      never      NY 1589C8221820A6F2 VT YVT0731 19960121S101702Z230461AYVT0
never      never      NY 158BAECA1098B8CC VT YVT0731 19960202S101702A051729AYVT0
never      never      NY 158C4F720B399F60 VT YVT0731 19960206S101702A051780AYVT0
never      never      NY 15BC8C2C0CD313E6 VT YVT0731 19961209174331S101702A05946
never      never      NY 15BD2F630FF8FB34 VT YVT0731 19961213190527S101702A05988
never      never      NY 15C6E71918B02712 VT YVT0731 19970213150302S101702A06173
never      never      NY 15E264C30EFA3C52 VT YVT0731 19970807131116S101702A06567
never      never      NY 15E30C4206896AFA VT YVT0731 19970811170742S101702A06585
never      never      NY 15E815801931476C VT YVT0731 19970912181134S101702A06679
never      never      NY 1602F2DA1ED90E10 VT YVT0731 19980302164021S101702A07077
never      never      NY 151167F21A9EC93C VT YVT0801
never      never      NY 151B49D716061078 VT YVT0801 19940217154745S101702A03163
never      never      NY 151F3DA8056C651E VT YVT0801 19940314192641S101702A03247
never      never      NY 151F85EA15962870 VT YVT0801 19940316143208S101702A03254
never      never      NY 151F8D3310C943E0 VT YVT0801 19940316185331S101702A03254
never      never      NY 1521B8FF047DD074 VT YVT0801 19940330142350S101702A03294
never      never      NY 152765100F8EC68A VT YVT0801 19940505163017S101702A03405
never      never      NY 1532630B1E5EF83A VT YVT0801 19940714151204S101702A03571
never      never      NY 153268040C52A18E VT YVT0801 19940714180856S101702A03571
never      never      NY 1543D0BE16E4C33C VT YVT0801 19941102124425S101702A03886
never      never      NY 15497C4A1328B086 VT YVT0801 19941208143554S101702A04023
never      never      NY 15497D7816B01A00 VT YVT0801 19941208151811S101702A04023
never      never      NY 154DE3351054ED0E VT YVT0801 19950105144958S101702A04100
never      never      NY 154EFD9004A9F75A VT YVT0801 19950112151630S101702A04123
never      never      NY 1559FA041D3E829E VT YVT0801 19950323125517S101702A04310
never      never      NY 1564FD8016ED3154 VT YVT0801 19950601S101702M000585AYVT0
never      never      NY 1566161301779178 VT YVT0801 19950608S101702A045087AYVT0
never      never      NY 156A7E1006163068 VT YVT0801 19950706S101702A045888AYVT0
never      never      NY 158A427E1ED0C40E VT YVT0801 19960124S101702A051425AYVT0
never      never      NY 158AF8A91259FB0A VT YVT0801 19960129S101702Z231662AYVT0
never      never      NY 158BAECF0EC0E0B4 VT YVT0801 19960202S101702A051729AYVT0
never      never      NY 158C4F7A1AF83DE2 VT YVT0801 19960206S101702A051780AYVT0
never      never      NY 159BD8E91746E942 VT YVT0801 19960515160336S101702M00068
never      never      NY 159CCA700B404E28 VT YVT0801 19960521160919S101702A05432
never      never      NY 15A06B3C14F086B0 VT YVT0801 19960613181338S101702A05497
never      never      NY 15AD9A3A0EAA4FDE VT YVT0801 19960905152954S101702M00071
never      never      NY 15C3990D0D92AB94 VT YVT0801 19970123142207S101702A06113
never      never      NY 15CB7D4918717AA4 VT YVT0801 19970314192907S101702A06247
never      never      NY 15CF2E1205598D60 VT YVT0801 19970407070548S101702Z30474
never      never      NY 15CFB353118ADEC8 VT YVT0801 19970410142923S101702A06307
never      never      NY 15CFB409160573D2 VT YVT0801 19970410150032S101702A06307
never      never      NY 15E382E2015202DC VT YVT0801 19970814154725S101702M00082
never      never      NY 15EC79A71C8C574C VT YVT0801 19971010164615S101702A06742
never      never      NY 15F519F008403907 VT YVT0801 19971204140206S101702A06875
never      never      NY 160019EC1FF75B36 VT YVT0801 19980212134230S101702A07037
never      never      NY 161730AB0956819E VT YVT0801 19980709133842S101702M00092
never      never      NY 168C73FD190C1934 VT YVT0801 A15S000580
never      never      NY 151F57E409DC6F5E VT YVT0801 E
never      never      NY 151167F2082DF054 VT YVT0802
never      never      NY 151B49D71BD9A654 VT YVT0802 19940217154748S101702A03163
never      never      NY 151F3DA71F6D9FE8 VT YVT0802 19940314192641S101702A03247
never      never      NY 151F85EA067B94C8 VT YVT0802 19940316143210S101702A03254
never      never      NY 151F8D3303E875A6 VT YVT0802 19940316185332S101702A03254
never      never      NY 1521B8D90840D54A VT YVT0802 19940330142123S101702A03294
never      never      NY 1527650F0B9AB1A8 VT YVT0802 19940505163025S101702A03405
never      never      NY 153263100A2FA6B6 VT YVT0802 19940714151204S101702A03571
never      never      NY 153268021EC80C7A VT YVT0802 19940714180857S101702A03571
never      never      NY 1543D0BE00973E80 VT YVT0802 19941102124425S101702A03886
never      never      NY 154DE3370FA864F2 VT YVT0802 19950105144959S101702A04100
never      never      NY 1564FD800EC77C0C VT YVT0802 19950601S101702M000585AYVT0
never      never      NY 156A7E0F11983E0C VT YVT0802 19950706S101702A045888AYVT0
never      never      NY 158A427E078D09DA VT YVT0802 19960124S101702A051425AYVT0
never      never      NY 158AF8AF1A839964 VT YVT0802 19960129S101702Z231662AYVT0
never      never      NY 158BAECE07873230 VT YVT0802 19960202S101702A051729AYVT0
never      never      NY 158C4F7A0521DBAE VT YVT0802 19960206S101702A051780AYVT0
never      never      NY 159BD8E91276E922 VT YVT0802 19960515160337S101702M00068
never      never      NY 15AD9A421B9BB98E VT YVT0802 19960905152955S101702M00071
never      never      NY 15CFB34E05C0222A VT YVT0802 19970410142924S101702A06307
never      never      NY 15CFB419075426C8 VT YVT0802 19970410150032S101702A06307
never      never      NY 15E382DD11F6E216 VT YVT0802 19970814154725S101702M00082
never      never      NY 160019D30AB33018 VT YVT0802 19980212134231S101702A07037
never      never      NY 161730801C26F4E8 VT YVT0802 19980709133842S101702M00092
never      never      NY 168C74290A93E9A8 VT YVT0802 A15S000580
never      never      NY 151F57F0019B2BC6 VT YVT0802 E
never      never      NY 151167F301E63D04 VT YVT0803
never      never      NY 151B49D9182F3226 VT YVT0803 19940217154750S101702A03163
never      never      NY 151F3DB9078B116C VT YVT0803 19940314192642S101702A03247
never      never      NY 151F85EC07C69C6A VT YVT0803 19940316143212S101702A03254
never      never      NY 151F8D3318B1099A VT YVT0803 19940316185334S101702A03254
never      never      NY 1521B8EE06BAE01A VT YVT0803 19940330142140S101702A03294
never      never      NY 15276558190C8AC0 VT YVT0803 19940505163031S101702A03405
never      never      NY 1532631308016C84 VT YVT0803 19940714151205S101702A03571
never      never      NY 153268041C688CBA VT YVT0803 19940714180857S101702A03571
never      never      NY 1534726C1D44C7F6 VT YVT0803 19940727175006S101702A03616
never      never      NY 15390002019E845E VT YVT0803 19940825170749S101702A03678
never      never      NY 154DE32B1E02D892 VT YVT0803 19950105144947S101702A04100
never      never      NY 1564FD80149CD4F6 VT YVT0803 19950601S101702M000585AYVT0
never      never      NY 156A7E100EC37A26 VT YVT0803 19950706S101702A045888AYVT0
never      never      NY 159BD8EA001206AC VT YVT0803 19960515160337S101702M00068
never      never      NY 159CCA6F18108A06 VT YVT0803 19960521160920S101702A05432
never      never      NY 15A06B350583AD68 VT YVT0803 19960613181234S101702A05497
never      never      NY 15AD9A4E022D9AA4 VT YVT0803 19960905152956S101702M00071
never      never      NY 15CFB35107B67EC4 VT YVT0803 19970410142925S101702A06307
never      never      NY 15CFB4170ECF7042 VT YVT0803 19970410150033S101702A06307
never      never      NY 15E382C0163F7B1C VT YVT0803 19970814154726S101702M00082
never      never      NY 160019E512F6EE4E VT YVT0803 19980212134231S101702A07037
never      never      NY 161730800070367C VT YVT0803 19980709133843S101702M00092
never      never      NY 168C74410EEC7819 VT YVT0803 A15S000580
never      never      NY 151167F3182FEEBC VT YVT0804
never      never      NY 151B49D818EF38C0 VT YVT0804 19940217154640S101702A03163
never      never      NY 151F3DB91576AAE0 VT YVT0804 19940314192643S101702A03247
never      never      NY 151F8D340CA235C4 VT YVT0804 19940316185336S101702A03254
never      never      NY 1521B8F21B501AFC VT YVT0804 19940330142205S101702A03294
never      never      NY 152765590A4BDFBE VT YVT0804 19940505162908S101702A03405
never      never      NY 153263170E2CCDDE VT YVT0804 19940714151207S101702A03571
never      never      NY 1532680506F7152A VT YVT0804 19940714180858S101702A03571
never      never      NY 1543D0BF068D70FA VT YVT0804 19941102124426S101702A03886
never      never      NY 15497C480CACA22C VT YVT0804 19941208143556S101702A04023
never      never      NY 15497D7B1C930560 VT YVT0804 19941208151812S101702A04023
never      never      NY 154DE3311099A1EA VT YVT0804 19950105144951S101702A04100
never      never      NY 1564FD801BF9B964 VT YVT0804 19950601S101702M000585AYVT0
never      never      NY 1566161917C58550 VT YVT0804 19950608S101702A045087AYVT0
never      never      NY 156A7E101B77CB20 VT YVT0804 19950706S101702A045888AYVT0
never      never      NY 156B95EA08A027C2 VT YVT0804 19950713S101702A046105AYVT0
never      never      NY 158A427F02468704 VT YVT0804 19960124S101702A051425AYVT0
never      never      NY 158AF8A9170F1906 VT YVT0804 19960129S101702Z231662AYVT0
never      never      NY 158BAED00D3E36B8 VT YVT0804 19960202S101702A051729AYVT0
never      never      NY 158C4F7803623030 VT YVT0804 19960206S101702A051780AYVT0
never      never      NY 159216F7145D1A62 VT YVT0804 19960314140008S101702A05261
never      never      NY 159BD8E91A76C142 VT YVT0804 19960515160338S101702M00068
never      never      NY 159CCA7007A01F1A VT YVT0804 19960521160920S101702A05432
never      never      NY 15A06B38171D1E2E VT YVT0804 19960613181241S101702A05497
never      never      NY 15AD9A4E15D9DE38 VT YVT0804 19960905152957S101702M00071
never      never      NY 15CA63A517886942 VT YVT0804 19970307192828S101702A06202
never      never      NY 15CB7D4919482A6A VT YVT0804 19970314192907S101702A06247
never      never      NY 15CFB35318BC762C VT YVT0804 19970410142926S101702A06307
never      never      NY 15CFB41B0821A076 VT YVT0804 19970410150033S101702A06307
never      never      NY 15D973741C1B58BF VT YVT0804 19970611153558S101702A06461
never      never      NY 15E382C10B37C3C8 VT YVT0804 19970814154726S101702M00082
never      never      NY 15F519F0033FBB0B VT YVT0804 19971204140207S101702A06875
never      never      NY 160019EE11A19D82 VT YVT0804 19980212134232S101702A07037
never      never      NY 161730940E2E180A VT YVT0804 19980709133843S101702M00092
never      never      NY 168C745A0BB457AC VT YVT0804 A15S000580
never      never      NY 151F580D128061FE VT YVT0804 E
never      never      NY 151167F30FFD6E5E VT YVT0805
never      never      NY 151B49D70F130978 VT YVT0805 19940217154651S101702A03163
never      never      NY 151F3DB9010A3E12 VT YVT0805 19940314192644S101702A03247
never      never      NY 151F8D34014479DA VT YVT0805 19940316185339S101702A03254
never      never      NY 1521B8E8085CBB4E VT YVT0805 19940330142220S101702A03294
never      never      NY 1527650D1A1AF54E VT YVT0805 19940505162933S101702A03405
never      never      NY 1532631609CD1058 VT YVT0805 19940714151209S101702A03571
never      never      NY 1532680406319AE8 VT YVT0805 19940714180859S101702A03571
never      never      NY 1543D0BF16B2C2C8 VT YVT0805 19941102124427S101702A03886
never      never      NY 154515E6087794AC VT YVT0805 19941110143933S101702A03929
never      never      NY 15497C4808095D7A VT YVT0805 19941208143559S101702A04023
never      never      NY 15497D76024B2922 VT YVT0805 19941208151813S101702A04023
never      never      NY 154DE33203B18D42 VT YVT0805 19950105144952S101702A04100
never      never      NY 1564FD4E16C9FEEA VT YVT0805 19950601S101702M000585AYVT0
never      never      NY 1566161912B6D9AC VT YVT0805 19950608S101702A045087AYVT0
never      never      NY 156A7E1613FB30BC VT YVT0805 19950706S101702A045888AYVT0
never      never      NY 156B95EA0A9D9796 VT YVT0805 19950713S101702A046105AYVT0
never      never      NY 158A427F0425C056 VT YVT0805 19960124S101702A051425AYVT0
never      never      NY 158AF8A915D62672 VT YVT0805 19960129S101702Z231662AYVT0
never      never      NY 158BAECA115701BA VT YVT0805 19960202S101702A051729AYVT0
never      never      NY 158C4F7A1D4FE978 VT YVT0805 19960206S101702A051780AYVT0
never      never      NY 159BD8E91A6DD730 VT YVT0805 19960515160338S101702M00068
never      never      NY 159CCA700B855802 VT YVT0805 19960521160921S101702A05432
never      never      NY 15A06B39098F74D4 VT YVT0805 19960613181244S101702A05497
never      never      NY 15AD9A4E0209F674 VT YVT0805 19960905152957S101702M00071
never      never      NY 15C3990C1525D7B0 VT YVT0805 19970123142208S101702A06113
never      never      NY 15CB7D42171BD266 VT YVT0805 19970314192907S101702A06247
never      never      NY 15CF2E241C539C4C VT YVT0805 19970407070836S101702Z30474
never      never      NY 15CFB3531C685870 VT YVT0805 19970410142928S101702A06307
never      never      NY 15CFB41B08548766 VT YVT0805 19970410150034S101702A06307
never      never      NY 15E382C10095F005 VT YVT0805 19970814154727S101702M00082
never      never      NY 15EC79A71BD9AF62 VT YVT0805 19971010164616S101702A06742
never      never      NY 15F519EE12129F24 VT YVT0805 19971204140208S101702A06875
never      never      NY 160019D61D647340 VT YVT0805 19980212134233S101702A07037
never      never      NY 168C746B1B41CD4F VT YVT0805 A15S000580
never      never      NY 151167F115294F90 VT YVT0806
never      never      NY 151B49D402FBBAD0 VT YVT0806 19940217154655S101702A03163
never      never      NY 151F3DA81FA2E514 VT YVT0806 19940314192645S101702A03247
never      never      NY 151F8D330B00D164 VT YVT0806 19940316185341S101702A03254
never      never      NY 1521B8F21338139A VT YVT0806 19940330142237S101702A03294
never      never      NY 1527650A13CEF8D8 VT YVT0806 19940505162943S101702A03405
never      never      NY 15326314054EDF8E VT YVT0806 19940714151210S101702A03571
never      never      NY 1532680113147860 VT YVT0806 19940714180900S101702A03571
never      never      NY 1543D0BA08B15AB0 VT YVT0806 19941102124427S101702A03886
never      never      NY 154DE33016B22D14 VT YVT0806 19950105144954S101702A04100
never      never      NY 1564FD4E0732905E VT YVT0806 19950601S101702M000585AYVT0
never      never      NY 156A7E1417B25068 VT YVT0806 19950706S101702A045888AYVT0
never      never      NY 158A427E0779BADE VT YVT0806 19960124S101702A051425AYVT0
never      never      NY 158AF8A90424481C VT YVT0806 19960129S101702Z231662AYVT0
never      never      NY 158BAEC900A69648 VT YVT0806 19960202S101702A051729AYVT0
never      never      NY 158C4F78162BA110 VT YVT0806 19960206S101702A051780AYVT0
never      never      NY 159BD8E90AEE3370 VT YVT0806 19960515160339S101702M00068
never      never      NY 15AD9A4E19CABBC4 VT YVT0806 19960905152958S101702M00071
never      never      NY 15CFB348092330CA VT YVT0806 19970410142929S101702A06307
never      never      NY 15CFB41914658DD2 VT YVT0806 19970410150034S101702A06307
never      never      NY 15E382BB085D17A0 VT YVT0806 19970814154727S101702M00082
never      never      NY 160019D31B3E770A VT YVT0806 19980212134234S101702A07037
never      never      NY 1617308C1BE4ECD0 VT YVT0806 19980709133843S101702M00092
never      never      NY 168C747A0EA27E53 VT YVT0806 A15S000580
never      never      NY 151F5836043B2772 VT YVT0806 E
never      never      NY 151167F21394F46C VT YVT0809
never      never      NY 151B49C0160501DC VT YVT0809 19940217154709S101702A03163
never      never      NY 151F3DB212A2172C VT YVT0809 19940314192648S101702A03247
never      never      NY 151F8D340B69B194 VT YVT0809 19940316185345S101702A03254
never      never      NY 15326304167ADF4A VT YVT0809 19940714151212S101702A03571
never      never      NY 1532680317030674 VT YVT0809 19940714180901S101702A03571
never      never      NY 1543D0BD00911A6C VT YVT0809 19941102124430S101702A03886
never      never      NY 1564FD4E1A2F31C8 VT YVT0809 19950601S101702M000585AYVT0
never      never      NY 156A7E16035F0B54 VT YVT0809 19950706S101702A045888AYVT0
never      never      NY 158A427906FEB542 VT YVT0809 19960124S101702A051425AYVT0
never      never      NY 158AF8A90968A7F4 VT YVT0809 19960129S101702Z231662AYVT0
never      never      NY 158BAEC9115B6D92 VT YVT0809 19960202S101702A051729AYVT0
never      never      NY 158C4F7818D4A974 VT YVT0809 19960206S101702A051780AYVT0
never      never      NY 159BD8E91EF73524 VT YVT0809 19960515160340S101702M00068
never      never      NY 15AB64B80FA255C4 VT YVT0809 19960822140730S101702A05660
never      never      NY 15BC8C291817E13A VT YVT0809 19961209174336S101702A05946
never      never      NY 15CFB351077266DE VT YVT0809 19970410142932S101702A06307
never      never      NY 15CFB4180B65C8E8 VT YVT0809 19970410150035S101702A06307
never      never      NY 160019D40DB6C90E VT YVT0809 19980212134236S101702A07037
never      never      NY 168C748E1E285220 VT YVT0809 A15S000580
never      never      NY 151F584D0DC93DDA VT YVT0809 E
never      never      NY 1608DFED0F9383F0 VT YVTAFS 19980409113931S101702Z369138
never      never      NY 160A02D8132033DA VT YVTAFS 19980416170514S101702M000874
never      never      NY 161730AB10D4FA25 VT YVTAFS 19980709134007S101702M000924
never      never      NY 17C8CE2E12FE63E1 VT YVTBRVI VTX000001856AA20FB
never      never      NY 17C8CE300E0C8C95 VT YVTCSFP VTX000001856AA210A
never      never      NY 17C82ABA1E5F7FD6 VT YVTDTEX VTX000001856A4C5D9
never      never      NY 17C8CE330A2F30E4 VT YVTVWAH VTX000001856AA2122
never      never      NY 182EABED0294473C VV YVV3EIP VDPS0001175A00A470MVS
never      never      NY 182F9C221FDE5EE7 VV YVV3EIP VDPS0001565A0883F9
never      never      NY 1839C8CC1C6F775C VV YVV5070 VDPS0001185A5DDB5D
never      never      NY 1839C8CE0226FFCB VV YVV5070 VDPS0001185A5DDB5DMVS
never      never      NY 1818F6A70CA1DDDA VV YVVZZ03 VDPS000114594A9918
never      never      NY 1818F6A91C005510 VV YVVZZ03 VDPS000114594A9918MVS
never      never      NY 1818A62301D79BDE VV YVVZZ05 VDPS0001145947F5B1
never      never      NY 182945060695701C VV YVVZZ05 VDPS00011759D36248
never      never      NY 1817FCDE0AFE5034 VV YVVZZ06 VDPS000114594269AF
never      never      NY 1817FCE01221E055 VV YVVZZ06 VDPS000114594269AFMVS
never      never      NY 18323C010807FF93 VV YVVZZ06 VDPS0001185A1E8803
never      never      NY 18323C020C81B3B0 VV YVVZZ06 VDPS0001185A1E8803MVS
never      never      NY 1817FCE215EA8AB4 VV YVVZZ08 VDPS000114594269CD
never      never      NY 1804111808DEE720 VV YVVZZ09 VDPS000099589B3FC8
never      never      NY 1817FD1312680083 VV YVVZZ09 VDPS00011459426A6C
never      never      NY 1819E37A0A3D4D73 VV YVVZZ10 VDPS00011459525BC8
never      never      NY 182B298A17F6EC10 VV YVVZZ10 VDPS00011759E342BE
never      never      NY 1817FCF00ECB7A76 VV YVVZZ12 VDPS00011459426A35
never      never      NY 1828FA5818A8DE7F VV YVVZZ12 VDPS00011759D0EFDA
never      never      NY 1818A62618BBB2BD VV YVVZZ14 VDPS0001145947F5C7
never      never      NY 1829251F0FF55B60 VV YVVZZ14 VDPS00011759D2568E
never      never      NY 1817FCEE177F3F8F VV YVVZZ15 VDPS00011459426A38
never      never      NY 1817FD05055D36EA VV YVVZZ16 VDPS00011459426A5D
never      never      NY 1818A62909607400 VV YVVZZ17 VDPS0001145947F5E0
never      never      NY 1818A62E01FEDFEC VV YVVZZ18 VDPS0001145947F613
never      never      NY 18323C130B079199 VV YVVZZ18 VDPS0001185A1E8884MVS
never      never      NY 182A3D771779844D VV YVVZZ19 VDPS00011759DB8665
never      never      NY 1817FCF60EFC4EE7 VV YVVZZ1R VDPS00011459426A3E
never      never      NY 1817FCF81A6CA2F5 VV YVVZZ1R VDPS00011459426A3EMVS
never      never      NY 17EC00610CDDA6EE VV YVVZZ21 VDPS00008557D16DF0
never      never      NY 1817FCFB138C4181 VV YVVZZ21 VDPS00011459426A44
never      never      NY 18323C120E6EB3AA VV YVVZZ21 VDPS0001185A1E8890
never      never      NY 182C6A7D16D97808 VV YVVZZ22 VDPS00011759EDC6D8
never      never      NY 1817FD1A001F3682 VV YVVZZ23 VDPS00011459426A7F
never      never      NY 1817FD131A8F8416 VV YVVZZ24 VDPS00011459426A82
never      never      NY 1818A639100255AA VV YVVZZ25 VDPS0001145947F674
never      never      NY 18187F291509B956 VV YVVZZ27 VDPS0001145946AEC8
never      never      NY 182A3D971C7EE783 VV YVVZZ27 VDPS00011759DB8776
never      never      NY 182C6A8B06A2819C VV YVVZZ28 VDPS00011759EDC6FA
never      never      NY 18323C150D65093D VV YVVZZ28 VDPS0001185A1E88A3
never      never      NY 1818A65311203A6D VV YVVZZ29 VDPS0001145947F759
never      never      NY 18031C780A9949A5 VV YVVZZ2R VDPS00009958933BBC
never      never      NY 1818A5E90E58899E VV YVVZZ2R VDPS0001145947F3D5
never      never      NY 1818A5EB0F577762 VV YVVZZ2R VDPS0001145947F3D5MVS
never      never      NY 1827DFD71198F6BD VV YVVZZ2R VDPS00011759C7AE13
never      never      NY 1827DFD9138D6180 VV YVVZZ2R VDPS00011759C7AE13MVS
never      never      NY 1817FCD6016D695B VV YVVZZ30 VDPS00011459426994
never      never      NY 182E092916DB03BC VV YVVZZ33 VDPS00011759FB4F83
never      never      NY 1818A5FB15580267 VV YVVZZ3R VDPS0001145947F471
never      never      NY 1802F9F208BF7192 VV YVVZZAR VDPS00009958921A13
never      never      NY 1817FD091EFE99EF VV YVVZZAR VDPS00011459426A66
never      never      NY 1818A63D016125C2 VV YVVZZFR VDPS0001145947F698
never      never      NY 1818A63E1CC30975 VV YVVZZFR VDPS0001145947F698MVS
never      never      NY 1839C8C705CF8A34 VV YVVZZFR VDPS0001185A5DDA78
never      never      NY 1839C8C80A3F1F11 VV YVVZZFR VDPS0001185A5DDA78MVS
never      never      NY 17EB5DF512B23666 VV YVVZZJR VDPS00008557CC1B89
never      never      NY 1817FD050487DB67 VV YVVZZJR VDPS00011459426A61
never      never      NY 1819BDEF0D59DC76 VV YVVZZQR VDPS000114595120D5
never      never      NY 18191FF417ACD960 VW YVWB641 WSTS000055594BF359
never      never      NY 1718A64005AF56B3 WA WK9000 A06M012041
never      never      NN 16E8FBC10538DE3D WA YWAPOS A06M012041
never      never      NN 16E8FBC50FF62CAD WA YWAPOSA A06M012041
never      never      NY 14E32D111A7F9F68 WB WB0030
never      never      NY 183B0AFE127AF46F WB WB0060 TOFF000122
never      never      NY 1811E2AE175B2CC1 WB WB0720 WS8B000411
never      never      NY 1815CC480293D5DB WB WB0720 WS8B000441
never      never      NY 18204E3909DF90A3 WB WB0720 WS8B000443
never      never      NY 1819E9A9036D132C WB WB0720 WS8B000468
never      never      NY 182E80520C69CC67 WB WB0720 WS8B000471
never      never      NY 181A605D1B799562 WB WB0720 WS8B000473
never      never      NY 182534A4088C0901 WB WB0720 WS8B000476
never      never      NY 182508AB0597AC3B WB WB0720 WS8B000493
never      never      NY 1833F78D18A8D0E6 WB WB0720 WS8B000524
never      never      NY 182F9C560D102D32 WB WB0720 WS8B000535
never      never      NY 182FE88D08916620 WB WB0720 WS8B000540
never      never      NY 1830B3B418B55676 WB WB0720 WS8B000548
never      never      NY 182264E5128DA89A WB WB0720 WS8I000307
never      never      NY 161750120ECA5E5A WB WB1010 19980710082854S101702A073636
never      never      NY 18031B5C10E2794F WB WB1060 WSTS000046
never      never      NY 17C993CF04790E4D WB WB1140 WSTS000025
never      never      NY 17C0A358070D962E WB WB1140 WSTS000032
never      never      NY 17D3A36414AF8130 WB WB1140 WSTS000035
never      never      NY 17E6562F0079A811 WB WB1140 WSTS000039
never      never      NY 17D7161C06E6BFAE WB WB1280 TOFF000059
never      never      NY 17CD0AEF050D4C36 WB WB1280 WS8B000188
never      never      NY 18031B4A0412385B WB WB1350 WSTS000046
never      never      NY 17E656D80CA4C2AB WB WB5320 TOFF000067
never      never      NY 183AC1E616B3A958 WB WB7030 WSTS000061
never      never      NY 160D4EF80F3B0F44 WB WB7430 19980507164320S101702A072243
never      never      NY 159A1DE21F3ED35A WB WB7460 19960504154757S101702A053306
never      never      NY 15CFB55412A35ABA WB WB7490 19970410154641S101702A063035
never      never      NY 160D4EF81F5FD208 WB WB7530 19980507164321S101702A072243
never      never      NY 15EE81370B064606 WB WB7580 19971023144206S101702A067639
never      never      NY 15FCCEDD0C7772C8 WB WB7580 19980122145713S101702A069894
never      never      NY 17D7162D047FE477 WB WB7720 TOFF000059
never      never      NY 181DF5A510135A87 WB WB7720 TOFF000109
never      never      NY 183AC1D402AA64E6 WB WB8720 WSTS000061
never      never      NY 1618F1011CA15BC4 WB WB9993 A06M000357
never      never      NN 14E0F99F08B8A78A WB YWB5012
never      never      NN 14E0F9A010F87214 WB YWB5013
never      never      NY 1540B336191D323E WB YWB5901 19941013170117S101702A03798
never      never      NY 159A1DCA139F52F2 WB YWB5901 19960504154552S101702A05330
never      never      NY 17ECA3510D42101C WB YWB709 WS8B00031857D6C4E1
never      never      AY 183578830C7FFDAC WB YWBWRK WS8B0005185A39AE0E
never      never      NY 15FBE54C00E0778E WB YYWBBPU 19980116193842S101702A06966
never      never      NY 181B491D188A5C56 WC WC7100 OTXO000070
never      never      NY 183AC1EA171EFCC6 WC WC7102 WSTS000061
never      never      NY 183AC1D61D3CB858 WC WC7103 WSTS000061
never      never      NY 181B492D0C2A296B WC WC7104 OTXO000070
never      never      NY 181B49310388ED64 WC WC7105 OTXO000070
never      never      NY 181B493117F6065C WC WC7106 OTXO000070
never      never      NY 181C62A911B5737E WC WC7108 OTXO000070
never      never      NY 181C62AA0A829F61 WC WC7109 OTXO000070
never      never      NY 181B494518030B67 WC WC7400 OTXO000070
never      never      NY 181B4948181A9F77 WC WC7402 OTXO000070
never      never      NY 181B49491627AA7C WC WC7403 OTXO000070
never      never      NY 181C62AB0FC25C60 WC WC7404 OTXO000070
never      never      NY 181C62AC058006DA WC WC7405 OTXO000070
never      never      NY 183AC2050E9A7F8F WC WC8402 WSTS000061
never      never      NY 183AC1F61168ED96 WC WC8403 WSTS000061
never      never      NY 15D532B813FF3C80 WF WF8010 19970515140836S101702A063893
never      never      NY 15D5368918C3FE2D WF WF8010 19970515162454S101702A063893
never      never      NY 15DF1AD70559923A WF WF8010 19970717145832S101702A065379
never      never      NY 1834276301104AED WF YWFM537 WSSW0001055A2EA204
never      never      AY 18321BFB0A765B6C WI YWI5951 WS8I0003205A1D7B52
never      never      AY 18321C03017AC1B3 WI YWI5952 WS8I0003205A1D7B91
never      never      AY 18321C0B10F3220E WI YWI5953 WS8I0003205A1D7BD6
never      never      AY 18321C131CD549AE WI YWI5954 WS8I0003205A1D7C0C
never      never      AY 18321C20177E9087 WI YWI5955 WS8I0003205A1D7C47
never      never      AY 18321C2706DF01FA WI YWI5956 WS8I0003205A1D7C79
never      never      AY 18321C890BF8FB5B WI YWI5957 WS8I0003205A1D7FF7
never      never      AY 18321C910F99CEC1 WI YWI5958 WS8I0003205A1D8033
never      never      AY 18321C9A01B820C1 WI YWI5959 WS8I0003205A1D8082
never      never      AY 18321BEE1FDE7A75 WI YWI595A WS8I0003205A1D7AEA
never      never      NN 165361EE15ACF46D WI YWIASL A06M002543
never      never      NN 160E854E06F2C4B6 WI YWISTIN 19980515094949S101702M00083
never      never      NY 15299A4D0D85802E WK WK7140 19940519174927S101702A034385
never      never      NY 152E2C0F0D3E8A0C WK WK7140 19940617193658S101702M000399
never      never      NY 15315002191658A6 WK WK7140 19940707190603S101702M000457
never      never      NY 15B8ADC50C7EE520 WK WK7160 19961115025420S101702M000661
never      never      NY 15ED937A079717CF WK WK7160 19971017165350S101702M000724
never      never      NY 15F2EE111CB6708A WK WK7160 19971120182636S101702M000725
never      never      NY 155481B513EFB4C4 WK WK8320 19950216173938S101702M000536
never      never      NY 1562CF4A047F148C WK WK8320 19950518S101702M000545AWK832
never      never      NY 157D367104E7F570 WK WK8320 19951102S101702M000606AWK832
never      never      NY 152E2936090A9106 WK YWK018A 19940617175335S101702M00039
never      never      NY 154CD3FD077E2D72 WK YWK018A 19941229210352S101702M00052
never      never      NY 15548095052968DE WK YWK018A 19950216165749S101702M00053
never      never      NY 157D35281996BE02 WK YWK018A 19951102S101702M000606AYWK0
never      never      NY 152E29361B1B9CE4 WK YWK018C 19940617175335S101702M00039
never      never      NY 154CD3FD16D4C18A WK YWK018C 19941229210359S101702M00052
never      never      NY 155480960089624C WK YWK018C 19950216165754S101702M00053
never      never      NY 157D35281954CBAC WK YWK018C 19951102S101702M000606AYWK0
never      never      NY 152E293613FB2262 WK YWK018D 19940617175336S101702M00039
never      never      NY 15230D4D0FDA8DEA WK YWK019A 19940408012536S101702M00039
never      never      NY 152E293D07EC1490 WK YWK019A 19940617175336S101702M00039
never      never      NY 153A1FB40C7534B4 WK YWK019A 19940901204355S101702M00046
never      never      NY 153C50CA1965CDCE WK YWK019A 19940915192823S101702M00046
never      never      NY 154CD40117BDD0FE WK YWK019A 19941229210426S101702M00052
never      never      NY 1554809715724046 WK YWK019A 19950216165801S101702M00053
never      never      NY 157D352211EDEC88 WK YWK019A 19951102S101702M000606AYWK0
never      never      NY 159336D01D2F0658 WK YWK019A 19960321174238S101702A05287
never      never      NY 15BF5A860CA1B6AA WK YWK019A 19961227141204S101702M00074
never      never      NY 15C281F6172116CE WK YWK019A 19970116155229S101702M00071
never      never      NY 15C289171C461306 WK YWK019A 19970116200309S101702M00071
never      never      NY 15D6426E0F805263 WK YWK019A 19970522081337S101702Z31232
never      never      NY 15D766971C249544 WK YWK019A 19970529142348S101702M00077
never      never      NY 15E87BFD02BB791E WK YWK019A 19970915071921S101702Z33334
never      never      NY 15ED91F20BBF8F2A WK YWK019A 19971017155338S101702M00072
never      never      NY 15F2E9AF192A89D6 WK YWK019A 19971120155139S101702M00072
never      never      NY 160A0D4E15188AB6 WK YWK019A 19980416231839S101702M00083
never      never      NY 160A27E11AA26250 WK YWK019A 19980417151206S101702M00083
never      never      NY 152E297D031B19F0 WK YWKATRE 19940617180548S101702M00039
never      never      NY 15B8AAE51C670F08 WK YWKATRE 19961115011453S101702M00066
never      never      NY 15230DC105A18DB6 WK YWKLUBO 19940408012610S101702M00039
never      never      NY 152443080B96BD0A WK YWKLUBO 19940415175633S101702M00042
never      never      NY 15276C0313E71C24 WK YWKLUBO 19940505203528S101702M00039
never      never      NY 152E29A116DF3BA2 WK YWKLUBO 19940617180626S101702M00039
never      never      NY 152F1C740764EDA0 WK YWKLUBO 19940623185421S101702M00047
never      never      NY 15314FB106E16624 WK YWKLUBO 19940707185047S101702M00045
never      never      NY 15326CA60869D666 WK YWKLUBO 19940714204856S101702M00045
never      never      NY 1533810219DF3D8E WK YWKLUBO 19940721173958S101702M00045
never      never      NY 1536D50217A70978 WK YWKLUBO 19940811215857S101702M00046
never      never      NY 1539038217A75048 WK YWKLUBO 19940825190037S101702M00049
never      never      NY 153A1FCB0128194A WK YWKLUBO 19940901204338S101702M00046
never      never      NY 153C4FED10319F00 WK YWKLUBO 19940915185724S101702M00046
never      never      NY 153D6F8A1E470A7A WK YWKLUBO 19940922222855S101702M00049
never      never      NY 153F9FF21D79A22C WK YWKLUBO 19941006204333S101702M00046
never      never      NY 1541CE4E034E348C WK YWKLUBO 19941020175037S101702M00046
never      never      NY 15440279002CF798 WK YWKLUBO 19941103182227S101702M00046
never      never      NY 15451DB007982042 WK YWKLUBO 19941110191853S101702M00047
never      never      NY 154632D4079ECF94 WK YWKLUBO 19941117163613S101702M00047
never      never      NY 154636FA01B8CE70 WK YWKLUBO 19941117190715S101702M00047
never      never      NY 1547515518621B6C WK YWKLUBO 19941124193246S101702M00051
never      never      NY 15486AA51390266E WK YWKLUBO 19941201191819S101702M00047
never      never      NY 15497EF20F2DFBAE WK YWKLUBO 19941208160857S101702M00047
never      never      NY 154AA1E811DA3346 WK YWKLUBO 19941215214321S101702M00047
never      never      NY 154CD39114BB1BD2 WK YWKLUBO 19941229204640S101702M00052
never      never      NY 15548022014E59DA WK YWKLUBO 19950216164131S101702M00053
never      never      NY 155BB8B11A64E6B6 WK YWKLUBO 19950403S101702Z183880AYWKL
never      never      NY 155D21E70606CCF2 WK YWKLUBO 19950412S101702M000541AYWKL
never      never      NY 1562CCAF091A0732 WK YWKLUBO 19950518S101702M000545AYWKL
never      never      NY 156EE48B0D5577D2 WK YWKLUBO 19950803S101702M000562AYWKL
never      never      NY 156F77A1012A0986 WK YWKLUBO 19950807S101702Z202630AYWKL
never      never      NY 156FF7DE023A92A6 WK YWKLUBO 19950810S101702Z203284AYWKL
never      never      NY 1570E6F0116B7A98 WK YWKLUBO 19950816S101702Z204003AYWKL
never      never      NY 157117D01C550C1C WK YWKLUBO 19950817S101702M000563AYWKL
never      never      NY 1571B8221D7CF820 WK YWKLUBO 19950821S101702Z204586AYWKL
never      never      NY 1572047F1266E6B4 WK YWKLUBO 19950823S101702Z205049AYWKL
never      never      NY 157234AE0AF2D858 WK YWKLUBO 19950824S101702Z205219AYWKL
never      never      NY 1572D2C4161C86D2 WK YWKLUBO 19950828S101702Z205521AYWKL
never      never      NY 1572F91013E253CA WK YWKLUBO 19950829S101702Z205812AYWKL
never      never      NY 15731FD10E2F5DB8 WK YWKLUBO 19950830S101702Z205812AYWKL
never      never      NY 157352AA00959484 WK YWKLUBO 19950831S101702M000564AYWKL
never      never      NY 157369250CB40BD8 WK YWKLUBO 19950901S101702Z205812AYWKL
never      never      NY 1573EBC21FF01278 WK YWKLUBO 19950904S101702Z205812AYWKL
never      never      NY 15740FBE1BEFB354 WK YWKLUBO 19950905S101702Z205812AYWKL
never      never      NY 1574367903570626 WK YWKLUBO 19950906S101702Z205812AYWKL
never      never      NY 15757D561D15D79C WK YWKLUBO 19950914S101702M000565AYWKL
never      never      NY 157615851B5DFD5C WK YWKLUBO 19950918S101702Z208465AYWKL
never      never      NY 1576947E1C5CEC06 WK YWKLUBO 19950921S101702Z208465AYWKL
never      never      NY 15784B1706052C2A WK YWKLUBO 19951002S101702Z208465AYWKL
never      never      NY 1578CC480073E7E8 WK YWKLUBO 19951005S101702M000566AYWKL
never      never      NY 157D35861AFB94B0 WK YWKLUBO 19951102S101702M000606AYWKL
never      never      NY 157E5CB11478658C WK YWKLUBO 19951110S101702M000609AYWKL
never      never      NY 15807B901D590FA6 WK YWKLUBO 19951123S101702Z220705AYWKL
never      never      NY 15819A1F108897F6 WK YWKLUBO 19951130S101702M000610AYWKL
never      never      NY 1583CE661708D828 WK YWKLUBO 19951214S101702M000611AYWKL
never      never      NY 15883682031B7C4A WK YWKLUBO 19960111S101702M000636AYWKL
never      never      NY 159221760CC1CCC8 WK YWKLUBO 19960314201344S101702M00063
never      never      NY 159680411228A4B0 WK YWKLUBO 19960411152854S101702M00063
never      never      NY 159687A61FCF961A WK YWKLUBO 19960411200336S101702M00063
never      never      NY 159AE8020193BFD8 WK YWKLUBO 19960509161344S101702M00064
never      never      NY 159BA1F5002EEF7E WK YWKLUBO 19960514071832S101702Z24814
never      never      NY 159BD8DD1D7F15B2 WK YWKLUBO 19960515160311S101702M00068
never      never      NY 159E34DA071B830E WK YWKLUBO 19960530161041S101702M00068
never      never      NY 15A06D5609DD801E WK YWKLUBO 19960613192725S101702M00064
never      never      NY 15A4CCF1077CA010 WK YWKLUBO 19960711152018S101702M00065
never      never      NY 15AA50BA13A9AA44 WK YWKLUBO 19960815172257S101702M00065
never      never      NY 15AEB87A10D7B646 WK YWKLUBO 19960912180055S101702M00065
never      never      NY 15BD029414D62C9C WK YWKLUBO 19961212161508S101702M00066
never      never      NY 15BF5B201C831F72 WK YWKLUBO 19961227141203S101702M00074
never      never      NY 15C7098105898B82 WK YWKLUBO 19970214111257S101702M00071
never      never      NY 15CB4D7B1E778ED6 WK YWKLUBO 19970313143807S101702M00071
never      never      NY 15CB55680D691504 WK YWKLUBO 19970313192346S101702M00071
never      never      NY 15D0CE4E1AEEC7C2 WK YWKLUBO 19970417150052S101702M00071
never      never      NY 15D53537014A9362 WK YWKLUBO 19970515152437S101702M00071
never      never      NY 15D7673B0D306348 WK YWKLUBO 19970529142336S101702M00077
never      never      NY 15D99DF10AB82CF9 WK YWKLUBO 19970612164801S101702M00072
never      never      NY 15DCB7B5078F6FAA WK YWKLUBO 19970702102459S101702Z31925
never      never      NY 15DE004008CD7B17 WK YWKLUBO 19970710141830S101702M00072
never      never      NY 15E12285118DBA4C WK YWKLUBO 19970730125913S101702Z32501
never      never      NY 15E23FFE1EC34D1E WK YWKLUBO 19970806151636S101702Z32584
never      never      NY 15E3862F086264F6 WK YWKLUBO 19970814173305S101702M00072
never      never      NY 15E7E6CB1C51E32E WK YWKLUBO 19970911135336S101702M00072
never      never      NY 15ED92271DE4258E WK YWKLUBO 19971017155255S101702M00072
never      never      NY 15F2EA41089840FA WK YWKLUBO 19971120155133S101702M00072
never      never      NY 15F636C518F3708E WK YWKLUBO 19971211152904S101702M00072
never      never      NY 16001FE90EC6BEE8 WK YWKLUBO 19980212171239S101702M00083
never      never      NY 16036EC101548857 WK YWKLUBO 19980305180826S101702M00083
never      never      NY 160A0DF216E00150 WK YWKLUBO 19980416231747S101702M00083
never      never      NY 160A289012C37417 WK YWKLUBO 19980417151059S101702M00083
never      never      NY 160B40250812FA08 WK YWKLUBO 19980424142817S101702Z37158
never      never      NY 160E85DC07288951 WK YWKLUBO 19980515095019S101702M00083
never      never      NY 1612CD2F07087A62 WK YWKLUBO 19980611152859S101702M00084
never      never      NY 161750951D99044E WK YWKLUBO 19980710084245S101702M00084
never      never      NY 16175A61187B4FF2 WK YWKLUBO 19980710141605S101702M00084
never      never      NY 18261CE20437A2AC WP YWPL6P1 DBH000012659B8E72D
never      never      NY 1826237100B3E7DF WP YWPLAP1 DBH000012659B91C65
never      never      NY 182623741F8D0072 WP YWPLAP1 DBH000012659B91C65MVS
never      never      NY 18261CAE136BADD5 WP YWPLBP1 DBH000012659B8E57E
never      never      NY 18261CB30438FBC2 WP YWPLBP1 DBH000012659B8E57EMVS
never      never      NY 18261D091E965A44 WP YWPR1QX DBH000012659B8E877
never      never      NY 17A6872C1CA61887 WP YWPR2PX DBH0000023558AA4ED
never      never      NY 18261D2906D9453A WP YWPR3PX DBH000012659B8E97F
never      never      NY 18261D301DB29A22 WP YWPR5PX DBH000012659B8E9C1
never      never      NY 18261F5F1971CB6E WP YWPR6PX DBH000012659B8FB2E
never      never      NY 18261F6919051FCE WP YWPR7PX DBH000012659B8FB4B
never      never      NY 18262040096BEAE2 WP YWPRAPX DBH000012659B90365
never      never      NY 18261F3A033B222E WP YWPRCPX DBH000012659B8FAB2
never      never      NY 17DE58D2019BE8C4 WP YWPXB1F DBH0000068575EE2BB
never      never      NY 17DE58CF0E073F7C WP YWPXB1G DBH0000068575EE2B1
never      never      NY 17DE58E10335F2F5 WP YWPXB1H DBH0000068575EE2F7
never      never      NY 17DE58DE1A1DABD3 WP YWPXB1I DBH0000068575EE2ED
never      never      NY 17DE58AD1EED6557 WP YWPXBJF DBH0000068575EE14B
never      never      NY 17DE58BF09680E52 WP YWPXBJG DBH0000068575EE1D9
never      never      NY 17DE58BC1B77FD45 WP YWPXBJH DBH0000068575EE1C6
never      never      NY 17DE58BA0C9FFF2C WP YWPXBJI DBH0000068575EE1AA
never      never      NY 154BFD2C19813DEC YX YXBF222 19941224125703S101702Z17059
never      never      NY 158D5C361373AE02 YX YXBF222 19960213S101702Z233885AYXBF
never      never      NY 158ECF611F1247BE YX YXBF222 19960222171023S101702A05207
never      never      NY 15D0CDD90A19A4C2 YX YXBF222 19970417150642S101702M00071
never      never      NY 15E38C330477CE60 YX YXBF222 19970814212651S101702A06527
never      never      NY 153C50261C9EE968 YX YXBF224 19940915190525S101702M00046
never      never      NY 156C85AD11D7650C YX YXBF224 19950719S101702Z200752AYXBF
never      never      NY 157118761441F602 YX YXBF224 19950817S101702A046685AYXBF
never      never      NY 15F634ED05A71B7A YX YXBF224 19971211145230S101702A06842
never      never      NY 15264E490291F352 YX YXNKSIC 19940428181933S101702A03382
never      never      NY 15A5E2111D883CF6 YX YXNKSIC 19960718123939S101702A05601
never      never      NY 18191FBF13217948 YX YXWB011 WSTS000055594BF1D5
never      never      NY 18191FBA1F2BB85E YX YXWB231 WSTS000055594BF1B9
never      never      NY 183577E11A225F8F YX YXWB231 WSTS0000615A39A8B6
never      never      NY 156982C61B3CF9CE YX YXWB52M 19950630S101702Z197290AYXWB
never      never      NY 1569843017D970EC YX YXWB52M 19950630S101702Z197319AYXWB
never      never      NY 156984D415B81DB4 YX YXWB52M 19950630S101702Z197327AYXWB
never      never      NY 1569853E04BBC8C6 YX YXWB52M 19950630S101702Z197332AYXWB
never      never      NY 156A84010993F178 YX YXWB52M 19950706S101702A045845AYXWB
never      never      NY 156A813707B32DAE YX YXWB52M 19950706S101702Z198507AYXWB
never      never      NY 156BC4471C8973A0 YX YXWB52M 19950714S101702Z200133AYXWB
never      never      NY 156CB19113255A84 YX YXWB52M 19950720S101702A046231AYXWB
never      never      NY 156D558E15CAA1D6 YX YXWB52M 19950724S101702Z201292AYXWB
never      never      NY 156EE58A17225662 YX YXWB52M 19950803S101702A046454AYXWB
never      never      NY 157118AE1F458302 YX YXWB52M 19950817S101702A046882AYXWB
never      never      NY 15AEB8D707346442 YY AV8760 19960912182612S101702M000659
never      never      NY 15E3ACE2172482D2 YY EV0520 19970815165403S101702A066076
never      never      NY 15F632B20D501D42 YY EV0520 19971211133228S101702A068862
never      never      NY 16059A6604EBF508 YY EV0520 19980319140102S101702A070940
never      never      NY 157B014C12699D0A YY KD5020 19951019S101702M000621AKD502
never      never      NN 15562E180C4345A0 YY LC5000 19950227091355S101702Z178899
never      never      NN 15562FBE083CCC0C YY LC5000 19950227101253S101702A042491
never      never      NN 15AD9AF51B9DBCC8 YY RR7240 19960905155311S101702M000711
never      never      NY 15CB494B0CE2ECBA YY RR7240 19970313122849S101702A061790
never      never      NN 15FF2F4C16BF00A4 YY YECSAS 19980206175324S101702A070225
never      never      NN 160041540F3D2242 YY YECSAS 19980213132029S101702A070420
never      never      NN 160484C51A2027F0 YY YECSAS 19980312162539S101702A070997
never      never      NN 1604875B02B0189E YY YECSAS 19980312175709S101702A070997
never      never      NN 16164212086E9087 YY YECSAS 19980703152436S101702A073255
never      never      NY 15A5E21203991050 YY YNKSICB 19960718123939S101702A05601
never      never      NY 15DE003D14449A06 YY YYAKDAT 19970710142418S101702M00072
never      never      NY 1612CD4B01121012 YY YYAKDAT 19980611153615S101702M00084
never      never      NY 161750B801C3D872 YY YYAKDAT 19980710084846S101702M00084
never      never      NY 161759F605B39914 YY YYAKDAT 19980710142111S101702M00084
never      never      NY 1579E8A507B33DBC YY YYCXCR 19951012S101702A048616AYYCXC
never      never      NY 157C19171896808E YY YYCXCR 19951026S101702A048908AYYCXC
never      never      NY 15819B92091631CE YY YYCXCR 19951130S101702A049675AYYCXC
never      never      NY 1583CA8712E92BB2 YY YYCXCR 19951214S101702A050270AYYCXC
never      never      NY 15933060108F0298 YY YYCXCR 19960321135238S101702A052860
never      never      NY 1597970E110AC44A YY YYCXCR 19960418135815S101702A053388
never      never      NY 15CB46D41C9F99F0 YY YYCXCR 19970313110131S101702Z301064
never      never      NY 15E386480B6CC48A YY YYCXCR 19970814175447S101702M000722
never      never      NY 15E4C55D0FF80394 YY YYCXCR 19970822161513S101702A066301
never      never      NY 15EE7EB31D3AD2DA YY YYCXCR 19971023131100S101702A067654
never      never      NY 15FF016103E8C46E YY YYCXCR 19980205143017S101702A070192
never      never      NY 16024C400BA854E6 YY YYCXCR 19980226131415S101702A070718
never      never      NY 1617512D1257AAD7 YY YYCXOLD 19980710085313S101702A07372
never      never      NY 156617A60AC0705E YY YYDAISF 19950608S101702M000546AYYDA
never      never      NY 1568502B1DAE0586 YY YYDAISF 19950622S101702M000590AYYDA
never      never      NY 15921AC5035C67B4 YY YYDAISF 19960314161501S101702M00066
never      never      NY 1597995A10CC8BE4 YY YYDAISF 19960418152010S101702M00068
never      never      NY 159BD4680706D1FA YY YYDAISF 19960515132403S101702A05410
never      never      NY 15AEB4711794B942 YY YYDAISF 19960912154821S101702A05699
never      never      NY 15CC680F07443E68 YY YYDAISF 19970320153356S101702M00077
never      never      NY 15AFF02C1857EE2E YY YYDAISM 19960920121001S101702Z26717
never      never      NY 15B10A37169313E8 YY YYDAISM 19960927122508S101702Z26806
never      never      NY 15B17CD0130D1CB0 YY YYDAISM 19960930084648S101702Z26820
never      never      NY 15B18CE51F6372EA YY YYDAISM 19960930182222S101702Z26842
never      never      NY 15B4563C0347E728 YY YYDAISM 19961018115328S101702M00066
never      never      NY 15CC68101AB83382 YY YYDAISM 19970320153356S101702M00077
never      never      NY 15D534E11F737160 YY YYDAISM 19970515152456S101702M00071
never      never      NY 15D6F0151856BA32 YY YYDAISM 19970526154815S101702Z31295
never      never      NY 15ED91FB0E701E02 YY YYDAISM 19971017155755S101702M00072
never      never      NY 15F6363B0A278DF0 YY YYDAISM 19971211153706S101702M00072
never      never      NY 15FBDBA91BC0D8BC YY YYDAISM 19980116135024S101702M00083
never      never      NY 152303611A41576E YY YYDEAIS 19940407192650S101702A03280
never      never      NY 156617A500833F8C YY YYDEAIS 19950608S101702M000546AYYDE
never      never      NY 1568502B18E0EAF8 YY YYDEAIS 19950622S101702M000590AYYDE
never      never      NY 1578A07F16314AF8 YY YYDEAIS 19951004S101702Z211189AYYDE
never      never      NY 15921AC50232CE3E YY YYDEAIS 19960314161502S101702M00066
never      never      NY 15979958131859DC YY YYDEAIS 19960418152010S101702M00068
never      never      NY 159BD46711090FCE YY YYDEAIS 19960515132404S101702A05410
never      never      NY 15CC680F182B0436 YY YYDEAIS 19970320153357S101702M00077
never      never      NY 150ACAC51B00900A YY YYDEPAY
never      never      NY 1522FC7D054BE556 YY YYDEPAY 19940407150944S101702A03285
never      never      NY 1522FF0D18A98A1E YY YYDEPAY 19940407165401S101702A03285
never      never      NY 15252EC413FC8A94 YY YYDEPAY 19940421144515S101702A03353
never      never      NY 152532AB07A80076 YY YYDEPAY 19940421171023S101702A03353
never      never      NY 15276A4D1D371472 YY YYDEPAY 19940505194307S101702A03387
never      never      NY 1528546C05AF4870 YY YYDEPAY 19940511152421S101702A03407
never      never      NY 152CE4CF1CE22EC2 YY YYDEPAY 19940609162215S101702A03489
never      never      NY 152CE5DB05F708AE YY YYDEPAY 19940609165924S101702A03489
never      never      NY 152F1839137D891A YY YYDEPAY 19940623162940S101702A03509
never      never      NY 152F19F216DB4166 YY YYDEPAY 19940623173219S101702A03509
never      never      NY 152F1B91022991FC YY YYDEPAY 19940623183033S101702A03509
never      never      NY 15302ED3002362DA YY YYDEPAY 19940630144158S101702A03529
never      never      NY 15302FA717AEBA54 YY YYDEPAY 19940630151201S101702A03529
never      never      NY 153146A010F421BA YY YYDEPAY 19940707133234S101702A03542
never      never      NY 1532626F11BBB5A2 YY YYDEPAY 19940714145243S101702A03566
never      never      NY 1535B50D1B4EE964 YY YYDEPAY 19940804181158S101702M00048
never      never      NY 1538FC7C0D72806E YY YYDEPAY 19940825150144S101702M00049
never      never      NY 153A14190F37546E YY YYDEPAY 19940901135024S101702A03699
never      never      NY 153D62370160DBA6 YY YYDEPAY 19940922143400S101702A03756
never      never      NY 153F997A1C201A9E YY YYDEPAY 19941006165731S101702M00050
never      never      NY 153FA1510E36291A YY YYDEPAY 19941006213821S101702M00050
never      never      NY 154401DD18C42926 YY YYDEPAY 19941103180213S101702A03878
never      never      NY 154632251788AEE4 YY YYDEPAY 19941117161523S101702A03943
never      never      NY 1546CF680390FE7E YY YYDEPAY 19941121140628S101702A03965
never      never      NY 155016621CB54158 YY YYDEPAY 19950119144822S101702M00055
never      never      NY 1566199F002EBF30 YY YYDEPAY 19950608S101702A045100AYYDE
never      never      NY 156733071943396C YY YYDEPAY 19950615S101702M000591AYYDE
never      never      NY 1568502E1D6C7A24 YY YYDEPAY 19950622S101702M000590AYYDE
never      never      NY 156CB199081AC32E YY YYDEPAY 19950720S101702A046223AYYDE
never      never      NY 157852A400E71A38 YY YYDEPAY 19951002S101702Z210818AYYDE
never      never      NY 1579EBD309689602 YY YYDEPAY 19951012S101702A048532AYYDE
never      never      NY 157E4FE308523092 YY YYDEPAY 19951109S101702A049367AYYDE
never      never      NY 157E5C6119DC655E YY YYDEPAY 19951110S101702A049367AYYDE
never      never      NY 158DB0B81220EF5E YY YYDEPAY 19960215141014S101702A05171
never      never      NY 158ECAFE0DC90120 YY YYDEPAY 19960222143313S101702A05214
never      never      NY 15921AC601B008C2 YY YYDEPAY 19960314161503S101702M00066
never      never      NY 1599CA5A0237FDD2 YY YYDEPAY 19960502135824S101702A05325
never      never      NY 15A938F902FF8304 YY YYDEPAY 19960808183530S101702A05624
never      never      NY 15C194F9080D910E YY YYDEPAY 19970110183204S101702Z28991
never      never      NY 15C2276718E0F092 YY YYDEPAY 19970114095350S101702Z29045
never      never      NY 15C24F881D84C1B8 YY YYDEPAY 19970115095002S101702Z29079
never      never      NY 15C29F7311EDBBC2 YY YYDEPAY 19970117093023S101702Z29120
never      never      NY 15C3982C143BCCC6 YY YYDEPAY 19970123135201S101702A06105
never      never      NY 15CC68291A74EF5C YY YYDEPAY 19970320153413S101702M00077
never      never      NY 15E7E7560099C880 YY YYDEPAY 19970911143853S101702A06675
never      never      NY 15F632F70423F8C8 YY YYDEPAY 19971211134115S101702A06893
never      never      NY 15FBB9F8181B4EB2 YY YYDEPAY 19980115174544S101702M00085
never      never      NY 16024D680394BD7A YY YYDEPAY 19980226135927S101702A07072
never      never      NY 15AFEFCA17E34B18 YY YYEAISM 19960920115644S101702Z26716
never      never      NY 15AFF06B0A4AE0EE YY YYEAISM 19960920121911S101702Z26717
never      never      NY 15B45A870600ED96 YY YYEAISM 19961018142720S101702M00066
never      never      NY 15CC68120AF490E0 YY YYEAISM 19970320153358S101702M00077
never      never      NY 15FBDBAB1BC1BB5C YY YYEAISM 19980116135025S101702M00083
never      never      NN 160018711F92E016 YY YYECGR2 19980212125840CGS101702A069
never      never      NN 16001870032E9786 YY YYECGR2 19980212125840S101702A06992
never      never      NN 1600BFE9157E45A8 YY YYECGR2 19980216165215CGS101702A070
never      never      NN 1600BFE7162B59CA YY YYECGR2 19980216165215S101702A07049
never      never      NN 15F17FAD1272E342 YY YYECGRI 19971111155503S101702A06820
never      never      NN 15F2EEB81F753348 YY YYECGRI 19971120185114S101702M00081
never      never      NN 15F369CC0439D86A YY YYECGRI 19971123194631S101702Z34616
never      never      NN 15F519F619C6885F YY YYECGRI 19971204140411S101702Z34880
never      never      NN 15FBB9F00F950012 YY YYECGRI 19980115174545S101702M00085
never      never      NN 15F0865E14C44A8A YY YYECGRP 19971105111102CGS101702A068
never      never      NN 15F0865C0AE9D486 YY YYECGRP 19971105111102S101702A06803
never      never      NY 15E37FF1175FC4DC YY YYFIBPR 19970814140833S101702M00080
never      never      NY 15E4188D027F8394 YY YYFIBPR 19970818091027S101702Z32766
never      never      NY 15E533030E14134E YY YYFIBPR 19970825094010S101702Z32946
never      never      NY 15E53B4C1113BC34 YY YYFIBPR 19970825143650S101702Z32946
never      never      NY 15E6CBB903DB245D YY YYFIBPR 19970904132827S101702A06655
never      never      NY 15E766741202B080 YY YYFIBPR 19970908094638S101702Z33189
never      never      NY 15E793CB0A82A0B8 YY YYFIBPR 19970909124923S101702Z33226
never      never      NY 15E7BF3B1064B13A YY YYFIBPR 19970910144408S101702Z33267
never      never      NY 15E7E6301359E030 YY YYFIBPR 19970911135707S101702Z33286
never      never      NY 15E7E62F0F6AECBC YY YYFIBPR 19970911135748S101702M00072
never      never      NY 15E8B15318EC00AA YY YYFIBPR 19970916150918S101702Z33378
never      never      NY 15E8B2A80D2EE108 YY YYFIBPR 19970916155634S101702Z33378
never      never      NY 15E9018F09DEC578 YY YYFIBPR 19970918150017S101702Z33421
never      never      NY 15EADA930F135D8A YY YYFIBPR 19970930091036S101702Z33621
never      never      NY 15EAE16E13C1A270 YY YYFIBPR 19970930131559S101702Z33621
never      never      NY 15EB5BAF03BF78E2 YY YYFIBPR 19971003141148S101702Z33739
never      never      NY 15ED91F40DA321A8 YY YYFIBPR 19971017155842S101702M00072
never      never      NY 15EDFD9C0954B4AC YY YYFIBPR 19971020081228S101702Z34007
never      never      NY 15EE7F7D02C4A036 YY YYFIBPR 19971023134013S101702A06776
never      never      NY 15EF4CE909B97752 YY YYFIBPR 19971028161241S101702A06787
never      never      NY 15EF715B082A44EC YY YYFIBPR 19971029135718S101702Z34228
never      never      NY 15EF73B313E72048 YY YYFIBPR 19971029152110S101702A06792
never      never      NY 15F1CD8F16CBB102 YY YYFIBPR 19971113142213S101702A06823
never      never      NY 15F2E9CE117E0CB4 YY YYFIBPR 19971120155550S101702M00072
never      never      NY 15F3FFA30D164C90 YY YYFIBPR 19971127133905S101702A06860
never      never      NY 15FA73E30D92229A YY YYFIBPR 19980107151625S101702Z35389
never      never      NY 15FBDBA318A2B474 YY YYFIBPR 19980116135026S101702M00083
never      never      NY 15FCCE091650F9E6 YY YYFIBPR 19980122142859S101702M00088
never      never      NY 160A0D5E1FCED194 YY YYFIBPR 19980416232803S101702M00083
never      never      NY 160A27F31A320BDE YY YYFIBPR 19980417151921S101702M00083
never      never      NY 1612CD4E0730EF56 YY YYFIBPR 19980611153657S101702M00084
never      never      NY 1839CABA046018EB YY YYFIKST BKUR0000965A5DE9E3
never      never      NY 15C286081191A66C YY YYFIKU1 19970116181927S101702A06091
never      never      NY 15C3418805C0E26E YY YYFIKU1 19970121101133S101702Z29190
never      never      NY 15C398F908EF9C08 YY YYFIKU1 19970123142101S101702A06112
never      never      NY 15C489FE1460809C YY YYFIKU1 19970129140738S101702Z29353
never      never      NY 15C4D98316FB4854 YY YYFIKU1 19970131133354S101702Z29406
never      never      NY 15C4DA1D17445C08 YY YYFIKU1 19970131135524S101702Z29406
never      never      NY 15C4DA730656319C YY YYFIKU1 19970131140710S101702Z29406
never      never      NY 15C5560A1B720028 YY YYFIKU1 19970203155055S101702Z29441
never      never      NY 15C5566815248554 YY YYFIKU1 19970203160358S101702Z29441
never      never      NY 15C5742506C60392 YY YYFIKU1 19970204094815S101702Z29452
never      never      NY 15C5807102C2DB68 YY YYFIKU1 19970204170805S101702Z29452
never      never      NY 15C5F3C80A03AD08 YY YYFIKU1 19970207135639S101702Z29523
never      never      NY 15C5F7DE16DD09D4 YY YYFIKU1 19970207162252S101702Z29523
never      never      NY 15C68F340B219374 YY YYFIKU1 19970211103926S101702Z29553
never      never      NY 15C6ED610246DBCA YY YYFIKU1 19970213184955S101702A06165
never      never      NY 15C70DED172ECA28 YY YYFIKU1 19970214141457S101702A06165
never      never      NY 16172FFF01BF612E YY YYFIKU1 19980709132109S101702Z38259
never      never      NY 15DE003E076E5514 YY YYFIKUR 19970710142449S101702M00072
never      never      NY 15E385C91B3D06FF YY YYFIKUR 19970814173534S101702M00072
never      never      NY 15E58C35083F42B4 YY YYFIKUR 19970827145220S101702Z33007
never      never      NY 15E5B2D20C26A498 YY YYFIKUR 19970828135427S101702Z33038
never      never      NY 15E5B75011F360EC YY YYFIKUR 19970828163505S101702Z33038
never      never      NY 15E6A6C014CB58AC YY YYFIKUR 19970903152517S101702Z33138
never      never      NY 15E6C8901D6A44F8 YY YYFIKUR 19970904113540S101702Z33151
never      never      NY 15E76E0011E20F9C YY YYFIKUR 19970908141644S101702Z33200
never      never      NY 15E76E1F0EB2D04A YY YYFIKUR 19970908142100S101702Z33200
never      never      NY 15E7E636191BF19C YY YYFIKUR 19970911135753S101702M00072
never      never      NY 15E7E7361C517AA8 YY YYFIKUR 19970911143522S101702Z33287
never      never      NY 15E7E8D20E820D84 YY YYFIKUR 19970911152454S101702Z33287
never      never      NY 15EAE1380500BB68 YY YYFIKUR 19970930130759S101702Z33633
never      never      NY 15ED91FE0081AECA YY YYFIKUR 19971017155855S101702M00072
never      never      NY 15EE9C9A07D0DA54 YY YYFIKUR 19971024070255S101702Z34144
never      never      NY 15EF1DED163CD3C2 YY YYFIKUR 19971027121114S101702Z34178
never      never      NY 15EF71540B35A282 YY YYFIKUR 19971029135652S101702Z34228
never      never      NY 15F1700B0D6FA90E YY YYFIKUR 19971111063522S101702Z34416
never      never      NY 15F1C6CC08BC5408 YY YYFIKUR 19971113101937CGS101702Z344
never      never      NY 15F1C6C808FB0EA4 YY YYFIKUR 19971113101937S101702Z34464
never      never      NY 15F2B3A319877A5C YY YYFIKUR 19971119073725S101702Z34545
never      never      NY 15F2E9D71307678C YY YYFIKUR 19971120155600CGS101702M000
never      never      NY 15F2E9D2156D220A YY YYFIKUR 19971120155600S101702M00072
never      never      NY 15F37D611EE138A0 YY YYFIKUR 19971124075840S101702Z34621
never      never      NY 15F3A483088A51C2 YY YYFIKUR 19971125071800S101702Z34656
never      never      NY 15F3AEAE0E1B3A8C YY YYFIKUR 19971125132146CGS101702Z346
never      never      NY 15F3AEAA13C6A0CA YY YYFIKUR 19971125132146S101702Z34670
never      never      NY 15F3FFAC12135424 YY YYFIKUR 19971127133906CGS101702A068
never      never      NY 15F3FFA509C3CB8A YY YYFIKUR 19971127133906S101702A06860
never      never      NY 15F51EBC01E174A2 YY YYFIKUR 19971204165432CGS101702A068
never      never      NY 15F51EB417EC7912 YY YYFIKUR 19971204165432S101702A06881
never      never      NY 15F636570CBC56C3 YY YYFIKUR 19971211153730CGS101702M000
never      never      NY 15F6364000503D9D YY YYFIKUR 19971211153730S101702M00072
never      never      NY 15FBDBB21D92000A YY YYFIKUR 19980116135027S101702M00083
never      never      NY 16001B6517B805B0 YY YYFIKUR 19980212144259CGS101702M000
never      never      NY 16001B580AE44AA2 YY YYFIKUR 19980212144259S101702M00083
never      never      NY 160A0D6613CA2262 YY YYFIKUR 19980416232808CGS101702M000
never      never      NY 160A0D5E00845DC4 YY YYFIKUR 19980416232808S101702M00083
never      never      NY 160A288904A83F62 YY YYFIKUR 19980417151937CGS101702M000
never      never      NY 160A27F914508896 YY YYFIKUR 19980417151937S101702M00083
never      never      NY 1612CD571888D0D6 YY YYFIKUR 19980611153705CGS101702M000
never      never      NY 1612CD5007B9D0F2 YY YYFIKUR 19980611153705S101702M00084
never      never      NY 1613E6D61F9BD9EB YY YYFIKUR 19980618153331CGS101702A072
never      never      NY 1613E6D1014F7AE9 YY YYFIKUR 19980618153331S101702A07282
never      never      NY 1613EA801994AE1C YY YYFIKUR 19980618174544CGS101702A072
never      never      NY 1613EA7C1EBFF447 YY YYFIKUR 19980618174544S101702A07282
never      never      NY 161524D01CCBFF06 YY YYFIKUR 19980626131600CGS101702A073
never      never      NY 161524CE06CCC8A4 YY YYFIKUR 19980626131600S101702A07339
never      never      NY 161525A71CE08EDA YY YYFIKUR 19980626134607CGS101702A073
never      never      NY 161525A505D9A3F6 YY YYFIKUR 19980626134607S101702A07339
never      never      NY 1615264E03F99E7C YY YYFIKUR 19980626140918CGS101702A073
never      never      NY 1615264B0DD6FBEC YY YYFIKUR 19980626140918S101702A07339
never      never      NY 1615280711F76BAA YY YYFIKUR 19980626151056CGS101702A073
never      never      NY 161528041466BF88 YY YYFIKUR 19980626151056S101702A07340
never      never      NY 161750CA082CB234 YY YYFIKUR 19980710084900CGS101702M000
never      never      NY 161750C017446400 YY YYFIKUR 19980710084900S101702M00084
never      never      NY 15E6CBBA005DA61E YY YYFISER 19970904132828S101702A06655
never      never      NY 15ED91F80DD9305A YY YYFISER 19971017155900S101702M00072
never      never      NY 160E856D0621DE78 YY YYFISER 19980515095453S101702M00083
never      never      NY 150ACD5C155A3B8C YY YYGE040
never      never      NY 181A0E0704374A12 YY YYGETCS TOFF0001095953C065
never      never      NY 181A0E0817AC2265 YY YYGETCS TOFF0001095953C065MVS
never      never      NN 15F3118E14E98182 YY YYGPAS 19971121153752S101702A068485
never      never      NN 15F3B4630CE36DAA YY YYGPAS 19971125164555S101702A068569
never      never      NN 15F3DBCF1C9877B0 YY YYGPAS 19971126161741S101702Z347154
never      never      NN 15F3FDE11F9AA642 YY YYGPAS 19971127123700S101702Z347334
never      never      NN 15F545BD065532F2 YY YYGPAS 19971205161109S101702A068771
never      never      NY 171FDC81124D5E40 YY YYHECO A06M022888
never      never      NN 151EC4DD0B631542 YY YYNFP14 19940311192628S101702A03237
never      never      NN 151FB7A6000D73F0 YY YYNFP14 19940317201407S101702M00039
never      never      NN 1524173E17F27A22 YY YYNFP14 19940414160445S101702A03341
never      never      NN 15241E7817C8B476 YY YYNFP14 19940414202416S101702A03341
never      never      NN 153A232D14D2DEFA YY YYNFP14 19940901225031S101702A03706
never      never      NY 153A419602CAE318 YY YYNFP14 19940902165842S101702A03706
never      never      NN 15CE9B530119BDAA YY YYNFP14 19970403153334S101702A06283
never      never      NY 17C93F311BF9B4A7 YY YYNFP17 NBSI00006156ADD502
never      never      NY 17CBF39C14D96CA0 YY YYNFP17 NBSI000070
never      never      NN 151EC4EB16EABC48 YY YYNFP24 19940311192636S101702A03237
never      never      NN 151FB7A71F0A61DC YY YYNFP24 19940317201425S101702M00039
never      never      NN 1524173C15FCBA3A YY YYNFP24 19940414160453S101702A03341
never      never      NN 15241E7B1014C356 YY YYNFP24 19940414202420S101702A03341
never      never      NN 153A232F1F6FD7A6 YY YYNFP24 19940901225036S101702A03706
never      never      NN 153A419611D80B30 YY YYNFP24 19940902165848S101702A03706
never      never      NN 15CE9B501CFD4F62 YY YYNFP24 19970403153340S101702A06283
never      never      NN 15757B1814F33F10 YY YYNGKAS 19950914S101702A047578AYYNG
never      never      NN 1576981A14FAAF04 YY YYNGKAS 19950921S101702A047924AYYNG
never      never      NN 157D2FE9051C133A YY YYNGTCP 19951102S101702A048892AYYNG
never      never      NY 146C7A1103D158D4 YY YYNHBS
never      never      NY 1524423A042AC164 YY YYNHBS 19940415174407S101702A033339
never      never      NY 153265B509D98D98 YY YYNHBS 19940714165234S101702A035718
never      never      NY 15463214008EC298 YY YYNHBS 19941117161412S101702A039404
never      never      NN 1515C8791417951A YY YYOELEI
never      never      NN 152CE21D0BFF3DE2 YY YYOELEI 19940609143536S101702A03481
never      never      NY 156DC8730F9AF87A YY YYPTM12 19950727S101702A046364AYYPT
never      never      NY 156EE2920934D858 YY YYPTM12 19950803S101702A046538AYYPT
never      never      NY 157141D4000BE6E0 YY YYPTM12 19950818S101702A047074AYYPT
never      never      NY 1571E6FD143F4ADA YY YYPTM12 19950822S101702Z204939AYYPT
never      never      NY 15725CFC0FE5AEAA YY YYPTM12 19950825S101702Z205416AYYPT
never      never      NY 15728BFF05995CFA YY YYPTM12 19950826S101702Z205430AYYPT
never      never      NY 1572ADE807AA1C76 YY YYPTM12 19950827S101702Z205430AYYPT
never      never      NY 1572C87609374A88 YY YYPTM12 19950828S101702Z205430AYYPT
never      never      NY 1572D17000F67C48 YY YYPTM12 19950828S101702Z205582AYYPT
never      never      NY 1572F6EA18980D74 YY YYPTM12 19950829S101702Z205736AYYPT
never      never      NY 1573280915179998 YY YYPTM12 19950830S101702Z206096AYYPT
never      never      NY 157344D104228EE6 YY YYPTM12 19950831S101702Z206167AYYPT
never      never      NY 15736EAD1B03E7B2 YY YYPTM12 19950901S101702Z206288AYYPT
never      never      NY 1574106E034EDCB4 YY YYPTM12 19950905S101702Z206837AYYPT
never      never      NY 157434F113590034 YY YYPTM12 19950906S101702Z206973AYYPT
never      never      NY 1574633800041C26 YY YYPTM12 19950907S101702A047466AYYPT
never      never      NY 157486451DB20AE2 YY YYPTM12 19950908S101702Z207435AYYPT
never      never      NY 15773E070DA7132C YY YYPTM12 19950925S101702Z209742AYYPT
never      never      NY 1578CA0903FE251E YY YYPTM12 19951005S101702A048161AYYPT
never      never      NY 1579644C130BA342 YY YYPTM12 19951009S101702Z211751AYYPT
never      never      NY 157997B30E8AC44E YY YYPTM12 19951010S101702Z212019AYYPT
never      never      NY 1579B7AA1D646CCA YY YYPTM12 19951011S101702Z212285AYYPT
never      never      NY 1579B86E1BAB8F26 YY YYPTM12 19951011S101702Z212295AYYPT
never      never      NY 1579BE3D03B1A2A8 YY YYPTM12 19951011S101702Z212376AYYPT
never      never      NY 1579E3C114C9C4E6 YY YYPTM12 19951012S101702A048386AYYPT
never      never      NY 157A06211C953694 YY YYPTM12 19951013S101702Z212652AYYPT
never      never      NY 15837E6413DB9D04 YY YYPTM12 19951212S101702Z224373AYYPT
never      never      NY 1583A6F116448B9A YY YYPTM12 19951213S101702Z224682AYYPT
never      never      NY 1583AB1B18D75DE0 YY YYPTM12 19951213S101702Z224731AYYPT
never      never      NY 1583CADC13289CC2 YY YYPTM12 19951214S101702A050352AYYPT
never      never      NY 1583C252084DB644 YY YYPTM12 19951214S101702Z224779AYYPT
never      never      NY 154DFD7E09887904 YY YYSPINS 19950106063222S101702A04100
never      never      NY 180DEE890806798A YY YYUWI PSMF00001758EE0EC7
never      never      NY 15FBE54C00E0778E YY YYWBBPU 19980116193842S101702A06966
never      never      NY 18191F9E0475659C YY YYWBERR WSTS000055594BF0A8
never      never      NY 183577E70DA2E70E YY YYWBERR WSTS0000615A39A896
never      never      NY 181874E504076DD3 YY YYWBKUR BKUR000080594658B8
never      never      NY 15BACC9F187C524E YY YYWBMOE 19961128144620S101702A05913
never      never      NY 15BACED419DE065C YY YYWBMOE 19961128160532S101702A05913
never      never      NY 15BD0476166D4268 YY YYWBMOE 19961212173057S101702A05968
never      never      NY 15C1681F0EC67508 YY YYWBMOE 19970109154730S101702A06051
never      never      NY 15C39E7411B777E0 YY YYWBMOE 19970123173704S101702A06101
never      never      NY 15C3B55A081BDB8E YY YYWBMOE 19970124071700S101702A06101
never      never      NY 15C800EF0388913A YY YYWBMOE 19970220151213S101702A06184
never      never      NN 15CA55A31735EBE4 YY YYWBMON 19970307110926S101702A06213
never      never      NN 15CA83710EAE6488 YY YYWBMON 19970308142853S101702Z30011
never      never      NN 15CACB761B5B1466 YY YYWBMON 19970310092637S101702Z30018
never      never      NN 15CACEC7168D5DC2 YY YYWBMON 19970310112514S101702Z30026
never      never      NN 15CAD04903A38642 YY YYWBMON 19970310121902S101702Z30026
never      never      NN 15CAD0B914921CE8 YY YYWBMON 19970310123454S101702Z30026
never      never      NN 15CAD2B5019D8F4C YY YYWBMON 19970310134551S101702Z30026
never      never      NN 15CB4D021C010CB0 YY YYWBMON 19970313144250S101702M00071
never      never      NN 15CB54F7085E0490 YY YYWBMON 19970313192604S101702M00071
never      never      NN 15CB97E91D1E745A YY YYWBMON 19970315112351S101702Z30157
never      never      NN 15CB99C1179306BA YY YYWBMON 19970315122939S101702Z30158
never      never      NN 15CBE35B0EAC22EE YY YYWBMON 19970317082407S101702Z30164
never      never      NN 15CBE9F91963A2C2 YY YYWBMON 19970317122158S101702Z30164
never      never      NN 15CC118D012EF1E4 YY YYWBMON 19970318115741S101702Z30212
never      never      NN 15CC822D1972E9E0 YY YYWBMON 19970321070837S101702Z30274
never      never      NN 15CC876D0D856B26 YY YYWBMON 19970321101634S101702Z30274
never      never      NN 15CC87EA1BA5A2CE YY YYWBMON 19970321103457S101702Z30274
never      never      NN 15CC89AF04E2C5B0 YY YYWBMON 19970321113725S101702Z30274
never      never      NN 15CC8A700825D760 YY YYWBMON 19970321120417S101702Z30274
never      never      NN 15CC8BF613044BAC YY YYWBMON 19970321125900S101702Z30286
never      never      NN 15CC8E4317E33A62 YY YYWBMON 19970321142116S101702Z30286
never      never      NN 15CCFD1B11F96CF6 YY YYWBMON 19970324082836S101702Z30301
never      never      NN 15CCFEEC1FC13568 YY YYWBMON 19970324093352S101702Z30301
never      never      NN 15CD08B1174D7342 YY YYWBMON 19970324152338S101702Z30301
never      never      NN 15CD09931408333C YY YYWBMON 19970324155417S101702Z30301
never      never      NN 15CD28E40FD2C2D6 YY YYWBMON 19970325103538S101702Z30334
never      never      NN 15CE6FBF17EB38FA YY YYWBMON 19970402133425S101702Z30427
never      never      NN 15CF332B1B740882 YY YYWBMON 19970407100855S101702Z30479
never      never      NN 15D0CDF30885BEE4 YY YYWBMON 19970417151042S101702M00071
never      never      NN 15D534FD1AE441BC YY YYWBMON 19970515152742S101702M00071
never      never      NN 15D7FAF00A371B85 YY YYWBMON 19970602065921S101702Z31390
never      never      NN 15D99073175A7227 YY YYWBMON 19970612085344S101702Z31605
never      never      NN 15D99D86058B7952 YY YYWBMON 19970612164152S101702M00072
never      never      NN 15DE005219DA53C8 YY YYWBMON 19970710142705S101702M00072
never      never      NN 15E385DD1022E234 YY YYWBMON 19970814173805S101702M00072
never      never      NN 15E7E65913C0CAEC YY YYWBMON 19970911140351S101702M00072
never      never      NN 15F2E9EF0042410C YY YYWBMON 19971120155919S101702M00072
never      never      NN 15F3A38006B99F02 YY YYWBMON 19971125064220S101702Z34656
never      never      NN 15F6365B19B405C8 YY YYWBMON 19971211154151S101702M00072
never      never      NN 16001FC111AC2F33 YY YYWBMON 19980212172010S101702M00083
never      never      NN 160A0D7903D15B44 YY YYWBMON 19980416233210S101702M00083
never      never      NN 160A281806D31840 YY YYWBMON 19980417152423S101702M00083
never      never      NN 160E857C176EC566 YY YYWBMON 19980515095747S101702M00083
never      never      NN 1612CD6C138353F6 YY YYWBMON 19980611154027S101702M00084
never      never      NY 157E592A1C761270 YY YYWBPOS 19951109S101702A049203AYYWB
never      never      NY 157E64E700B0C79E YY YYWBPOS 19951110S101702A049203AYYWB
never      never      NY 1607CBE214CAE4A9 YY YYWBTMS 19980402145954S101702A07123
never      never      NY 1607D0501A9F1AE0 YY YYWBTMS 19980402173431S101702A07123
never      never      NY 1607D2191D7F3FF0 YY YYWBTMS 19980402184148S101702A07123
never      never      NY 1607F4440930D456 YY YYWBTMS 19980403150226S101702A07123
never      never      NY 160867290C7C2D64 YY YYWBTMS 19980406113742S101702A07151
never      never      NN 1514B97802FFBC58 ZP YZPUSER
never      never      NN 151BC8E4096D99B8 ZP YZPUSER 19940220194106S101702A03177
never      never      NN 151BC93F02304F06 ZP YZPUSER 19940220195347S101702A03177
never      never      NN 151C0DE01EBDC15C ZP YZPUSER 19940222125004S101702A03185
never      never      NN 151CEA1D1AE5265C ZP YZPUSER 19940228001251S101702A03202
never      never      NN 1520A4F6042A4D36 ZP YZPUSER 19940323174801S101702A03282
never      never      NN 152302AC109E06E6 ZP YZPUSER 19940407190244S101702A03322
never      never      NY 15BA7B261D9B42A0 ZP YZPUSER 19961126141035S101702A05922
03.10.2006 never      NY 17EF4D9A118195B3 WF YWFSWC WSSW000073
04.10.2006 never      NY 17CFDF5401FFCBFA MF MF7750 MFR0000073
04.10.2006 never      NY 17B969BF10C4EB0D MF MF8950 MFR0000049
04.10.2006 never      NY 17EF4D760DD5EC6A WF WF5410 WSSW000073
04.10.2006 never      NY 17677F0F0B287ADC WP YWPXBGE A06M0263755379E562
04.10.2006 never      NY 176780710D2E1F59 WP YWPXBYC A06M0263755379E9BB
05.10.2006 never      NY 17F0195E064B09B1 WF YWFSWC WS8B000357
06.10.2006 never      NY 17EA66700BC5BF20 CE CE8440 COPE000034
06.10.2006 never      NY 17E1C56C1492292F VP VP5340 VIP0000015
07.10.2006 never      NY 17E6570D175F4BCC TN TN7004 OTXO000054
07.10.2006 never      NY 17C966571F3246DF TN TN7020 OTXO000036
07.10.2006 never      NY 17DF45C41789AAD2 TN YTN5012 OTXO0000545766A6D3
07.10.2006 never      NY 17E6559A1CCAD2A9 TN YTN5013 OTXO00005457A1E413
07.10.2006 never      NY 17DDACA0147957C5 WP YWPR5PX DBH000006857593EAD
07.10.2006 never      NY 1793D8E301FD62E2 WP YWPYBDD DBH000002254EDE1C2
08.10.2006 never      NY 17ECC87707071F08 CZ CZ7510 APEN000036
08.10.2006 never      NY 17E19C341A570461 CZ CZ8010 APEN000032
08.10.2006 never      NY 17C9C4A81DF216A5 EB EB8374 KLOM000043
08.10.2006 never      NY 17DD87DB14BB4DB9 EB EB8375 KLOM000049
08.10.2006 never      NY 17B6E17215E77544 IT YITGTR TABS0000535613D1F0
08.10.2006 never      NY 17D4BDE718D0778D TN TN7065 OTXO000045
08.10.2006 never      NY 17E657110255E3A3 TN TN7066 OTXO000054
08.10.2006 never      NY 17D4BDE4073F9F55 TN TN7067 OTXO000045
08.10.2006 never      NY 17D4BDE5021BA429 TN TN7068 OTXO000045
10.10.2006 never      NY 17C57B990CC74A69 BP BP7161 BPST000037
10.10.2006 never      NY 17E1C239175CDD4C SV SV5750 WSSV000116
10.10.2006 never      NY 17E197BE0FF74064 VT VT0120 EBZV000009
10.10.2006 never      NY 17F03A7E0B780DE0 WF WF5410 WSSW000074
10.10.2006 never      NY 17F03AC71EEF4D75 WF YWFSWC WSSW000074
10.10.2006 never      NY 17DE58D61BBB0880 WP YWPXB1D DBH0000068575EE2D0
11.10.2006 never      NY 17E08BA80A27FC86 AS AS0050 KABG000038
11.10.2006 never      NY 17E3CF6C11F54D9D AZ AZ0210 AWZA000036
11.10.2006 never      NY 17E0ABED063F3F48 CU CU9000 CIFS000122
11.10.2006 never      NY 17E684531080852A CZ CZ5150 KLOM000049
11.10.2006 never      NY 17DE79340EAF6A94 CZ CZ5280 KLOM000049
11.10.2006 never      NY 17EADF081B9393D9 CZ CZ6300 GSER000128
11.10.2006 never      NY 17E3071B15992B26 DE DE5600 DE00000033
11.10.2006 never      NY 17E1986B019F16D9 DE DE5690 DE00000033
11.10.2006 never      NY 17CAB21417364395 DE DE7120 DE00000023
11.10.2006 never      NY 17E9A480173C8D29 DI DI5200 DI00000046
11.10.2006 never      AY 17E32DC310229A62 ED YED5203 ED0000003657876B64
11.10.2006 never      NY 17EA9B520F9B6679 ER YERDUPD EAMR00000557C5BAD0
11.10.2006 never      NY 17E198DA0B38723D EV EV7030 EKVS000013
11.10.2006 never      NY 17A65CFB093C2166 EV EV8100 EKVS000006
11.10.2006 never      NY 177A892D1F1C7776 EV EV8220 A19R002528
11.10.2006 never      NY 17E1993E1111147C FF FF5000 FFOR000021
11.10.2006 never      NY 17DECA9C0B0DAFCE GE GE7770 FFOR000021
11.10.2006 never      NY 1724E8341F15EFAD HP1 AAFYWR HPSVP2AAFYWR
11.10.2006 never      NY 17E1CB2300566C05 KS KS5685 EBVV000187
11.10.2006 never      NY 17E28BFC03EFF710 KS YKS5512 CSED00002257821E43
11.10.2006 never      NY 17DFDD4605EEA7BE MF MF7000 MFR0000082
11.10.2006 never      NY 17B4D0180B03F9DE MF MF7010 MFR0000049
11.10.2006 never      NY 17E0DC6408927C8A MF MF7210 MFR0000082
11.10.2006 never      NY 17DA36180D9446AF MF MF7801 MFR0000078
11.10.2006 never      NY 17E177111B81578C MF MF8703 MFR0000082
11.10.2006 never      NY 17E177151C380AAF MF MF8706 MFR0000082
11.10.2006 never      NY 17E177220866FA2D MF MF8710 MFR0000082
11.10.2006 never      NY 17E177370642ADD6 MF MF8719 MFR0000082
11.10.2006 never      NY 17B594B0066C25E1 NF NF5710 NBSI000050
11.10.2006 never      NY 17E2E6171F7F7D26 PC PC5090 IVN0000021
11.10.2006 never      NY 17E7A1B81656AE65 PC01 PC5060 AIS0000110
11.10.2006 never      NY 17DE76B918DA9C41 PC01 PC5070 IVN0000021
11.10.2006 never      NY 17E7A1B81656AE65 PC02 PC5060 AIS0000110
11.10.2006 never      NY 17DE76B918DA9C41 PC02 PC5070 IVN0000021
11.10.2006 never      NY 17E7A1B81656AE65 PC03 PC5060 AIS0000110
11.10.2006 never      NY 17DE76B918DA9C41 PC03 PC5070 IVN0000021
11.10.2006 never      NY 17E7A1B81656AE65 PC04 PC5060 AIS0000110
11.10.2006 never      NY 17DE76B918DA9C41 PC04 PC5070 IVN0000021
11.10.2006 never      NY 17E7A1B81656AE65 PC05 PC5060 AIS0000110
11.10.2006 never      NY 17DE76B918DA9C41 PC05 PC5070 IVN0000021
11.10.2006 never      NY 17E7A1B81656AE65 PC06 PC5060 AIS0000110
11.10.2006 never      NY 17DE76B918DA9C41 PC06 PC5070 IVN0000021
11.10.2006 never      NY 17D16E971FB872ED RT RT5020 RFT0000015
11.10.2006 never      NY 17D16EA202E911B9 RT RT5060 RFT0000015
11.10.2006 never      NY 17D16EAD03C58C7F RT RT5090 RFT0000015
11.10.2006 never      NY 17A8E8770674C505 RT RT5110 RFT0000004
11.10.2006 never      NY 17D16EAF0C9D0C04 RT RT5120 RFT0000015
11.10.2006 never      NY 17992C060EE5753A RT RT5130 RFT0000003
11.10.2006 never      NY 17D16EB2190EC161 RT RT5140 RFT0000015
11.10.2006 never      NY 17D21DC81254ADB6 RT RT5160 RFT0000015
11.10.2006 never      NY 17D16EB604B3DB98 RT RT5170 RFT0000015
11.10.2006 never      NY 17E1C22E0AF5F78B SV SV5150 WSSV000116
11.10.2006 never      NY 17E17DDB0150649C SV SV5210 WSSV000116
11.10.2006 never      NY 17E17DB8024394C8 SV SV5600 WSSV000116
11.10.2006 never      NY 17E1C234052F1142 SV SV5710 WSSV000116
11.10.2006 never      NY 17E1C23510752386 SV SV5740 WSSV000116
11.10.2006 never      NY 17E4290D0DADB980 SV SV5760 WSSV000116
11.10.2006 never      NY 17E1C2411C77D807 SV SV5790 WSSV000116
11.10.2006 never      NY 17E3D0B01ADC51CC SV SV8150 WSSV000116
11.10.2006 never      NY 17E6570B0DF9D509 TN TN5010 OTXO000054
11.10.2006 never      NY 17E6570B0AABFCCE TN TN5016 OTXO000054
11.10.2006 never      NY 17D4BDD2163E5B45 TN TN8900 OTXO000045
11.10.2006 never      NY 17DF45A31978F37D TN YTNBOPH OTXO0000545766A5BA
11.10.2006 never      NY 17B961AE1FEAFADD TN YTNW100 OTXO0000235628CC9D
11.10.2006 never      NY 17E0A92102C7BC46 TN YTNW170 OTXO00005457724BD1
11.10.2006 never      NY 176CB0510609DF4D VT YVTBEDR A14S00248553A57407
11.10.2006 never      NY 1788AB2E0FBC9B9D VT YVTDTAT A14S00262754901C5B
11.10.2006 never      NY 1796F92B10E7D57E VV YVV5070 VDPS00001455081B63
11.10.2006 never      NY 17DFC54603338C00 VV YVVZZ04 VDPS000077576AD450
11.10.2006 never      NY 17E656340E3DE83C WB WB5280 WSTS000039
11.10.2006 never      NY 17EC201A1AFA8989 WB WB5340 WS8B000345
11.10.2006 never      NY 17EAE2F8089CF998 WB WB5570 WS8B000334
11.10.2006 never      NY 17E1A6F210B0D3D9 WF YWF64CA WSSW000064577A9CFA
11.10.2006 never      NY 17E972E002C3EC8F WF YWFCB02 WSSW00003857BC040B
11.10.2006 never      NY 17EC7C221097E18D WF YWFM537 WSSW00007157D57C31
11.10.2006 never      NY 17F107CB10B8DB9A WF YWFSWC WSSW000075
11.10.2006 never      NY 17DE58D40BA30EBC WP YWPXB1E DBH0000068575EE2C6
11.10.2006 never      NY 176668360B5FFEA1 WP YWPXBKF A06M0264235370BC96
11.10.2006 never      NY 1766684002E8C360 WP YWPXBMA A06M0264235370BCCF
11.10.2006 never      NY 1766684811B3EA2C WP YWPXBMB A06M0264235370BD02
11.10.2006 never      NY 176668440039D075 WP YWPXBMD A06M0264235370BCE8
11.10.2006 never      NY 1766684C0B049E2F WP YWPXBME A06M0264235370BD2A
11.10.2006 never      NY 17677F32184B5435 WP YWPXBPA A06M0263755379E68B
11.10.2006 never      NY 17677F340A6649C9 WP YWPXBPB A06M0263755379E690
11.10.2006 never      NY 17677F3405AC5750 WP YWPXBPC A06M0263755379E696
11.10.2006 never      NY 17677F341D17A3E0 WP YWPXBPD A06M0263755379E69D
11.10.2006 never      NY 17677F3518790026 WP YWPXBPE A06M0263755379E6A2
11.10.2006 never      NY 17677F3613E3A871 WP YWPXBPF A06M0263755379E6A8
11.10.2006 never      NY 17677F370DB1C71A WP YWPXBPG A06M0263755379E6AC
11.10.2006 never      NY 17677F371BF57588 WP YWPXBPH A06M0263755379E6B1
11.10.2006 never      NY 17677F371FB07E30 WP YWPXBPI A06M0263755379E6B5
11.10.2006 never      NY 17677F5118A73166 WP YWPXBQA A06M0263755379E6B9
11.10.2006 never      NY 17677F511144EF92 WP YWPXBQB A06M0263755379E78F
11.10.2006 never      NY 17677F53084CA462 WP YWPXBQD A06M0263755379E797
11.10.2006 never      NY 17677F530279B510 WP YWPXBQE A06M0263755379E79C
11.10.2006 never      NY 17677F53147291AE WP YWPXBQF A06M0263755379E7A0
11.10.2006 never      NY 17677F540684C9B0 WP YWPXBQG A06M0263755379E7A5
11.10.2006 never      NY 176781940D2CF56C WP YWPYBAC A06M0263755379FA86
11.10.2006 never      NY 176781941A485D20 WP YWPYBAD A06M0263755379FA8A
11.10.2006 never      NY 17678195081EC1BE WP YWPYBAE A06M0263755379FA8F
11.10.2006 never      NY 176781951ABBE6B1 WP YWPYBAF A06M0263755379FA93
11.10.2006 never      NY 1767819607996EDB WP YWPYBAG A06M0263755379FA97
11.10.2006 never      NY 17E9811A0494004C WQ WQ5950 CUBE000058
11.10.2006 never      NY 17EAB64013708CFF YY YYFILOD BKUR00003857C69CB7
11.10.2006 never      NY 17E655791B7D36DE YY YYWBERX TOFF00006757A1E2F4
11.10.2006 never      NY 177D37630CC7B5F9 YY YYWBKUR A06M027333543018CE
12.10.2006 never      NY 17EC9A750B3B4966 AP YAPUTGK APEN00003657D67A8A
12.10.2006 never      NY 17D199770CEF0B1C AU YAU180D AURA00004356F3E622
12.10.2006 never      NY 17D199791F734558 AU YAU180I AURA00004356F3E638
12.10.2006 never      NY 17D1997B138858E0 AU YAU180S AURA00004356F3E645
12.10.2006 never      NY 17D1998A1EF2250C AU YAU181D AURA00004356F3E6C6
12.10.2006 never      NY 17D1998B1192E592 AU YAU181I AURA00004356F3E6CB
12.10.2006 never      NY 17D1998B15F5960D AU YAU181S AURA00004356F3E6CC
12.10.2006 never      NY 17D19991066B9C34 AU YAU190D AURA00004356F3E6FA
12.10.2006 never      NY 17D19991196BE2D0 AU YAU190I AURA00004356F3E6FF
12.10.2006 never      NY 17D199911CE79E0F AU YAU190S AURA00004356F3E700
12.10.2006 never      NY 17D1999210CDFF4E AU YAU191D AURA00004356F3E705
12.10.2006 never      NY 17D1999509B99A7E AU YAU191I AURA00004356F3E71C
12.10.2006 never      NY 17D1999509753F81 AU YAU191S AURA00004356F3E71C
12.10.2006 never      NY 17E569120F986D09 AV AV0150 PMRT000051
12.10.2006 never      NY 17E569161C2E460C AV AV0160 PMRT000051
12.10.2006 never      NY 17E6F1FE00388943 AV AV0170 PMRT000051
12.10.2006 never      NY 17E80DCA144420F7 AV AV0180 PMRT000064
12.10.2006 never      NY 17E6F34A1C542AD2 AV AV0190 PMRT000051
12.10.2006 never      NY 17E5690601453DA4 AV AV0210 PMRT000051
12.10.2006 never      NY 17E5691C1FEF8F43 AV AV0220 PMRT000051
12.10.2006 never      NY 17E7261E11CED4EB AV AV0250 PMRT000051
12.10.2006 never      NY 17E569221CB31606 AV AV0310 PMRT000051
12.10.2006 never      NY 17E569290424F92E AV AV0410 PMRT000051
12.10.2006 never      NY 17DC47FA1390D6C0 AV YAVNV10 AIS0000095574D8EE1
12.10.2006 never      NY 17DC485E0B0B1C08 AV YAVNV50 AIS0000095574D922B
12.10.2006 never      NY 17A58E1516E5BA26 AV YAVTOTX AIS000002855827B69
12.10.2006 never      NY 17C57B9A18C275B0 BP BP9060 BPST000037
12.10.2006 never      NY 17DD994215DF226A BP YBPMUT BPST00004857589C3C
12.10.2006 never      NY 17E8843C18AB4C98 BP YBPMUT BPST00005757B43238
12.10.2006 never      NY 17E449311286AF10 BX BX8280 CLOS000125
12.10.2006 never      NY 17E0A83E08EB47EA CD CD2590 UPDS000031
12.10.2006 never      NY 17EA6663105473D3 CE CE5200 COPE000034
12.10.2006 never      NY 17E8116E15E7B590 CE CE5230 COPE000040
12.10.2006 never      NY 17E99EAE1F049772 CE CE5300 COPE000034
12.10.2006 never      NY 17E4EFD60CB31A1E CE YCE1000 COPE00002957962ADA
12.10.2006 never      NY 17E67FDA16C4F939 CE YCEWIAP COPE00002957A34674
12.10.2006 never      NY 17E682110D59FF03 CI CI0070 KUGE000031
12.10.2006 never      NY 17E6821109F016E7 CI CI0080 KUGE000031
12.10.2006 never      NY 17E0A7F118E5C775 CI CI0090 GEGE000015
12.10.2006 never      NY 17E064B005AE0F7A CI CI0100 GEGE000017
12.10.2006 never      NY 17E85BF10F4354BC CZ CZ5190 GSER000131
12.10.2006 never      NY 177B502013162434 CZ CZ5200 CRMA004099
12.10.2006 never      NY 17DF3EC70D75E7E9 CZ CZ5270 KLOM000049
12.10.2006 never      NY 17E64F65073B6FF1 CZ CZ5400 PIG0000008
12.10.2006 never      NY 17E2E4E706CE7607 CZ CZ6400 GSER000112
12.10.2006 never      NY 17E2E4EB17BDC9E7 CZ CZ6500 GSER000112
12.10.2006 never      NY 17E684571B5726F0 CZ CZ8980 KLOM000049
12.10.2006 never      NY 1797EDCC0351F1E8 CZ YCZGETP KUAN00001255101F7D
12.10.2006 never      NY 17E0D90B0E57AC88 CZ YCZGETP KUAN0000375773DDC4
12.10.2006 never      NY 17B5CCB80F3946D1 CZ YCZJ323 GSER000027560AC099
12.10.2006 never      NY 17E2E6531E6AED59 CZ YCZJABW GSER0001115785141E
12.10.2006 never      NY 17B5C73D09DFF5D0 CZ YCZM435 BEWI000004560A9276
12.10.2006 never      NY 17EC00D70A7D8134 CZ YCZPABW BEWI00001957D171E9
12.10.2006 never      NY 178BF8DA14E2F115 CZ YCZT421 GSER00001454ABD271
12.10.2006 never      NY 17D4C00C16D32BD1 CZ YCZTPRT BEWI000009570E6247
12.10.2006 never      NY 17EA719B19389B69 DE DE0030 DE00000029
12.10.2006 never      NY 17EA719D1F583B5B DE DE0050 DE00000029
12.10.2006 never      NY 17EA71A00103538E DE DE0090 DE00000029
12.10.2006 never      NY 17E198870884B534 DE DE0400 DE00000033
12.10.2006 never      NY 17E53CC303741DDE DE DE0410 DE00000033
12.10.2006 never      NY 17EA675D0A488D66 DE DE0420 DE00000029
12.10.2006 never      NY 17E510E210B6BE25 DE DE0430 DE00000033
12.10.2006 never      NY 17E6822315495B6D DE DE0440 DE00000033
12.10.2006 never      NY 17E19889042812F8 DE DE0490 DE00000033
12.10.2006 never      NY 17E6371A134F6470 DE DE0810 DE00000033
12.10.2006 never      NY 17EA71AC1017D74E DE DE0820 DE00000029
12.10.2006 never      NY 17E19896115A1003 DE DE0830 DE00000033
12.10.2006 never      NY 17E637281C6B55B5 DE DE5130 DE00000033
12.10.2006 never      NY 17E63702090A08C1 DE YDE0021 DE0000003357A0E330
12.10.2006 never      NY 17E089C91A038550 DE YDELSTO DE00000033577144E4
12.10.2006 never      NY 17E2E55203C7547C DP DP0920 DP00000043
12.10.2006 never      NY 17CFD8FC028C0581 DP DP7010 DP00000041
12.10.2006 never      NY 17ECF7F01BF209E4 EB EB6480 EXPN000054
12.10.2006 never      NY 17E6FD7A174794F4 EC EC5130 KLOM000049
12.10.2006 never      NY 177E97CB097ACD0A EC YECLOK CRMA003976543BA4EF
12.10.2006 never      NY 177E97CC012AE745 EC YECLOK CRMA003976543BA4EFCICS
12.10.2006 never      NY 17E88BB70F9E3340 ED ED0830 ED00000043
12.10.2006 never      AY 17E9A0A514429F90 ED ED0850 ED00000039
12.10.2006 never      NY 17E4CCBA14127BDB ED ED0950 ED00000036
12.10.2006 never      NY 17E9A0B6041BC336 ED ED0960 ED00000039
12.10.2006 never      NY 17E1A4200897B44C EK EK6841 EMA0000034
12.10.2006 never      NY 17797019127C8689 EQ YEQISRK CRMA00418654106690
12.10.2006 never      NY 1784774107BB637A EQ YEQKDGP CRMA004309546CDAE6
12.10.2006 never      NY 178BFD1A05D461E5 EQ YEQRFT GSER00001454ABF60E
12.10.2006 never      NY 17A6AD1B02F6C241 EQ YEQWAEC APEN000014558BE31D
12.10.2006 never      NY 17ED10CC14688800 ER YERBER EAMR000012
12.10.2006 never      NY 17EC9E3B047884F3 ER YERDCUR EAMR00001257D69A33
12.10.2006 never      NY 17EC9E39025DD90F ER YERDGET EAMR00001257D69A21
12.10.2006 never      NY 17E99CFB1A3A4217 ER YERDINS EAMR00000557BD6545
12.10.2006 never      NY 17EC042310EF0DA1 EX EX5020 EXPN000052
12.10.2006 never      NY 17E197B6137F4E9D EX EX5030 EXPN000039
12.10.2006 never      NY 17E9560C0AF347FA EX EX6010 EXPN000050
12.10.2006 never      NY 17EB8CCA019D77C3 EX YEX0003 EXPN00005357CDA468
12.10.2006 never      NY 17E307D61170465D FF FF0010 FFOR000021
12.10.2006 never      NY 17E926651F0826E1 FF FF0020 FFOR000022
12.10.2006 never      NY 17E9266F01CBE51A FF FF0030 FFOR000022
12.10.2006 never      NY 17E926261965C322 FF YFF0004 FFOR00002257B98070
12.10.2006 never      NY 1794E96011C50DD7 FF YFF0015 FFOR00000554F6CFF5
12.10.2006 never      NY 17E4C446035A844D FI FI2100 BKUR000020
12.10.2006 never      NY 17EAB7B81AD228B0 FI FI5200 BKUR000038
12.10.2006 never      NY 17E5179104CF21CD FI FI5260 BKUR000018
12.10.2006 never      NY 17E1986108E395AD FZ FZ0820 FZ00000007
12.10.2006 never      NY 17E885C009D477E6 GA GA0110I KAUT00003357B43EE9
12.10.2006 never      NY 17E9513F0C7B8969 GM GM0850 GM00000092
12.10.2006 never      NY 168283791329893C HP1 AA6VV6 HPSVP2AA6VV6
12.10.2006 never      NY 168288FB194953AF HP1 AAFZWR HPSVP2AAFZWR
12.10.2006 never      NY 168292EF08256606 HP1 ABC8QY HPSVP2ABC8QY
12.10.2006 never      NY 168288EF0FC755AD HP1 ABMXVN HPSVP2ABMXVN
12.10.2006 never      NY 17269E501B3B180E HP1 AD5WV6 HPSVP2AD5WV6
12.10.2006 never      NY 1724E8F0081871FA HP1 ADJQR5 HPSVP2ADJQR5
12.10.2006 never      NY 17269D2610342D51 HP1 AGOWVT HPSVP2AGOWVT
12.10.2006 never      NY 168291F11BA74C66 HP1 AGXNLE HPSVP2AGXNLE
12.10.2006 never      NY 168288F315CBB967 HP1 AJ0EWS HPSVP2AJ0EWS
12.10.2006 never      NY 1724E6F219E4684F HP1 AUPDVU HPSVP2AUPDVU
12.10.2006 never      NY 16C4A94113F9BDB0 HP1 ZAJOIVS HPSVP2ZAJOIVS
12.10.2006 never      NY 16C4A93616AD8D13 HP1 ZAJVAVS HPSVP2ZAJVAVS
12.10.2006 never      NY 16C4A9C1005B500E HP1 ZANJIVS HPSVP2ZANJIVS
12.10.2006 never      NY 168283791329893C HP3 AA6VV6 HPSVP2AA6VV6
12.10.2006 never      NY 168288FB194953AF HP3 AAFZWR HPSVP2AAFZWR
12.10.2006 never      NY 168292EF08256606 HP3 ABC8QY HPSVP2ABC8QY
12.10.2006 never      NY 168288EF0FC755AD HP3 ABMXVN HPSVP2ABMXVN
12.10.2006 never      NY 168291F11BA74C66 HP3 AGXNLE HPSVP2AGXNLE
12.10.2006 never      NY 168288F315CBB967 HP3 AJ0EWS HPSVP2AJ0EWS
12.10.2006 never      NY 17269E501B3B180E HPS AD5WV6 HPSVP2AD5WV6
12.10.2006 never      NY 17269D2610342D51 HPS AGOWVT HPSVP2AGOWVT
12.10.2006 never      NY 16C4A94113F9BDB0 HPS ZAJOIVS HPSVP2ZAJOIVS
12.10.2006 never      NY 16C4A93616AD8D13 HPS ZAJVAVS HPSVP2ZAJVAVS
12.10.2006 never      NY 16C4A9C1005B500E HPS ZANJIVS HPSVP2ZANJIVS
12.10.2006 never      NY 17E683DD10B93103 KA KA0030 KOAB000039
12.10.2006 never      NY 17E863760C45D2AC KE YKEA082 EBVV00022157B31F45
12.10.2006 never      NY 17E863791127A995 KE YKEA083 EBVV00022157B31F59
12.10.2006 never      NY 17D972E918EDEDBD KR YKRBCAL ACP00000725735CCA5
12.10.2006 never      NY 17D37A990140AD5C KS KS5500 CSED000019
12.10.2006 never      NY 17E1ED24088B4797 KS YKS5511 CSED000022577CE9CC
12.10.2006 never      NY 17DFC09E12E3B3C6 LB YLB0090 AIS0000095576AAD56
12.10.2006 never      NY 17E6F77E15DA0E03 LB YLB0091 AIS000009557A7320F
12.10.2006 never      NY 17E0862803DC1A99 LB YLB0095 AIS000009557712672
12.10.2006 never      NY 17E84189028DAF89 LB YLB0120 IPC000015457B202A2
12.10.2006 never      NY 17E798DD0B5C5E1B LC LC0511I TFBM00002757AC7BB6
12.10.2006 never      NY 17E0ADD615A51E47 LC YLCTF01 TFBM0000255772734D
12.10.2006 never      NY 17E0ADD910512211 LC YLCTF02 TFBM00002557727367
12.10.2006 never      NY 17E0ADDD08601560 LC YLCTF03 TFBM00002557727387
12.10.2006 never      NY 17E1713103ED44C1 MF MF7020 MFR0000082
12.10.2006 never      NY 17CCE9B0118A67B6 MF MF7110 MFR0000065
12.10.2006 never      NY 17B4D0181920CFDF MF MF7120 MFR0000049
12.10.2006 never      NY 17E7A13C19308C95 MF MF7200 MFR0000090
12.10.2006 never      NY 17CD0EC20A938AF7 MF MF7220 MFR0000065
12.10.2006 never      NY 17E2198510D24371 MF MF7230 MFR0000082
12.10.2006 never      NY 17BE92E90170759C MF MF7240 MFR0000060
12.10.2006 never      NY 17D35007082B7716 MF MF7250 MFR0000073
12.10.2006 never      NY 17BE92E913AECAA2 MF MF7260 MFR0000060
12.10.2006 never      NY 17E0DC6516F2B392 MF MF7300 MFR0000082
12.10.2006 never      NY 17E0DC6608802C03 MF MF7310 MFR0000082
12.10.2006 never      NY 17C89CC315D749EF MF MF7320 MFR0000065
12.10.2006 never      NY 17D8FD741AEFF997 MF MF7330 MFR0000078
12.10.2006 never      NY 17E0DC660BF63947 MF MF7340 MFR0000082
12.10.2006 never      NY 17E0DC66198AB69A MF MF7360 MFR0000082
12.10.2006 never      NY 17C89CDC0BD3F18C MF MF7380 MFR0000065
12.10.2006 never      NY 17E219851E2919B9 MF MF7500 MFR0000082
12.10.2006 never      NY 17E2190205A0757E MF MF7510 MFR0000082
12.10.2006 never      NY 17B4D0270B65D149 MF MF7550 MFR0000049
12.10.2006 never      NY 17C89CE312A48935 MF MF7570 MFR0000065
12.10.2006 never      NY 17B7CFA91C2036C4 MF MF7580 MFR0000049
12.10.2006 never      NY 17B84F7000921AED MF MF7590 MFR0000049
12.10.2006 never      NY 17B6BBA61ED986AE MF MF7902 MFR0000049
12.10.2006 never      NY 17BE92F1145A4039 MF MF7930 MFR0000060
12.10.2006 never      NY 17E3DA470FBF2DCA MF MF8110 MFR0000082
12.10.2006 never      NY 17E3F3E6018CD951 MF MF8120 MFR0000082
12.10.2006 never      NY 17E30AB003F0D413 MF MF8130 MFR0000082
12.10.2006 never      NY 17E6F30703B85C70 MF MF8210 MFR0000082
12.10.2006 never      NY 17D3CCD615A15867 MF MF8310 MFR0000073
12.10.2006 never      NY 17E219860C653788 MF MF8500 MFR0000082
12.10.2006 never      NY 17E219871038619C MF MF8600 MFR0000082
12.10.2006 never      NY 17B4D0320EE752C1 MF MF8610 MFR0000049
12.10.2006 never      NY 17E219880A17FB3C MF MF8620 MFR0000082
12.10.2006 never      NY 17BE98CE0AF90794 MF MF8630 MFR0000060
12.10.2006 never      NY 17E3FDA219F8B2E5 MF YMFC101 MFR0000083578E3B26
12.10.2006 never      NY 17E3FDA50EDCE63D MF YMFC104 MFR0000083578E3B39
12.10.2006 never      NY 17E3FDA70B3553F1 MF YMFC105 MFR0000083578E3B49
12.10.2006 never      NY 17DD8C800AD44CCF MF YMFC106 MFR000008357583124
12.10.2006 never      NY 17DD81C80EF4F74D MF YMFC107 MFR00000835757D747
12.10.2006 never      NY 17DD8C921658856F MF YMFC108 MFR0000083575831C8
12.10.2006 never      NY 17DF67DA061ED9DE MF YMFC110 MFR00000835767C4BD
12.10.2006 never      NY 17DF67DB01343AB8 MF YMFC112 MFR00000835767C4C4
12.10.2006 never      NY 17DF67DB116997D5 MF YMFC113 MFR00000835767C4CA
12.10.2006 never      NY 17E3FE67173EF1D2 MF YMFC114 MFR0000083578E4191
12.10.2006 never      NY 17DF67DE176EF90E MF YMFC116 MFR00000835767C4E0
12.10.2006 never      NN 17DE78AA1B128F76 MF YMFC118 MFR0000083575FEE4D
12.10.2006 never      NY 17DAD9280BA326F3 MF YMFC202 MFR0000079574189AF
12.10.2006 never      NY 17DAD9431401230E MF YMFC203 MFR000007957418A72
12.10.2006 never      NY 17DADA44116B5998 MF YMFC209 MFR0000079574192C4
12.10.2006 never      NY 17DAD94E0524B94E MF YMFC211 MFR000007957418AC3
12.10.2006 never      NY 17DADBCF0A368F93 MF YMFC217 MFR000007957419FF1
12.10.2006 never      NY 17CBCBA51BBB7632 MF YMFC219 MFR000006656C33628
12.10.2006 never      NY 17CBCC4601A8601C MF YMFC220 MFR000006656C33B6B
12.10.2006 never      NY 17B4CF1006234E55 MF YMFINFO MFR0000050560270B4
12.10.2006 never      NY 17B4CF1015EB934D MF YMFINFO MFR0000050560270B4CICS
12.10.2006 never      NY 17E218D01A2DDAA6 MF YMFLPID MFR0000082577E5826
12.10.2006 never      NY 17DF68030BA4A7BF MF YMFX155 MFR00000835767C612
12.10.2006 never      NY 178D1A51119E620C NF NF7700 NBSI000016
12.10.2006 never      NY 17A3120D03333059 NF NF8610 NBSC000008
12.10.2006 never      NY 17E86A1003DEB37F NF NF8620 NBSC000023
12.10.2006 never      NY 17D327F91820E896 NF YNF0101 NBSI00005657010320
12.10.2006 never      NY 17B5E78F09FF9550 NF YNFIB03 IB00000013560BA1BD
12.10.2006 never      NY 17E100E706EDBB4E NF YNFIB07 IB0000002257752C1E
12.10.2006 never      NY 17C99D3B01C61DD9 NG YNGKWEL PROK00006556B0E9D0
12.10.2006 never      NY 17C99D541D6D32D7 NG YNGPWEL PROK00006556B0EA50
12.10.2006 never      NY 17ED156107AD3E0D NI NI0010 IPC0000170
12.10.2006 never      NY 17ECCBE007D2A9DF NI NI0040 IPC0000181
12.10.2006 never      NY 17EA44071EF6AE44 NI YNICS01 IPC000015457C2DE87
12.10.2006 never      NY 17ED1531187EDE79 NI YNILBP2 IPC000017057DA8023
12.10.2006 never      NY 17ED15310902D10F NI YNILBPL IPC000017057DA8022
12.10.2006 never      NY 17E17D200ED28855 NL NL7310 BALR000041
12.10.2006 never      NY 17CB6F6D0AD01100 NL NL8060 PSFG000032
12.10.2006 never      NY 17EF4E071D27AD04 NO NO0970 NO00000030
12.10.2006 never      NY 17E05AAF01209F80 NTA1P CZA0183 A02E000561576FB9C6
12.10.2006 never      NY 17B0B8DF09918748 NTA1P CZA0199 A02E00053855E028A9
12.10.2006 never      NY 17DE50400164A6D7 NZ NZSRV07 NZV0000086
12.10.2006 never      NY 17DECAA21F33F9F9 PC YPC0570 IVN000002157629DE6
12.10.2006 never      NY 17E6813B1F5FDBA7 PC01 PC5120 IVN0000021
12.10.2006 never      NY 17E7C0CB1DE2009F PC01 YPC0520 AIS000011157ADCAC2
12.10.2006 never      NY 17DECA32053D2143 PC01 YPC0730 IVN000002157629A14
12.10.2006 never      NY 17DECA311087046D PC01 YPC0740 IVN000002157629A15
12.10.2006 never      NY 17E6813B1F5FDBA7 PC02 PC5120 IVN0000021
12.10.2006 never      NY 17E7C0CB1DE2009F PC02 YPC0520 AIS000011157ADCAC2
12.10.2006 never      NY 17DECA32053D2143 PC02 YPC0730 IVN000002157629A14
12.10.2006 never      NY 17DECA311087046D PC02 YPC0740 IVN000002157629A15
12.10.2006 never      NY 17E6813B1F5FDBA7 PC03 PC5120 IVN0000021
12.10.2006 never      NY 17E7C0CB1DE2009F PC03 YPC0520 AIS000011157ADCAC2
12.10.2006 never      NY 17DECA32053D2143 PC03 YPC0730 IVN000002157629A14
12.10.2006 never      NY 17DECA311087046D PC03 YPC0740 IVN000002157629A15
12.10.2006 never      NY 17E6813B1F5FDBA7 PC04 PC5120 IVN0000021
12.10.2006 never      NY 17E7C0CB1DE2009F PC04 YPC0520 AIS000011157ADCAC2
12.10.2006 never      NY 17DECA32053D2143 PC04 YPC0730 IVN000002157629A14
12.10.2006 never      NY 17DECA311087046D PC04 YPC0740 IVN000002157629A15
12.10.2006 never      NY 17E6813B1F5FDBA7 PC05 PC5120 IVN0000021
12.10.2006 never      NY 17E7C0CB1DE2009F PC05 YPC0520 AIS000011157ADCAC2
12.10.2006 never      NY 17DECA32053D2143 PC05 YPC0730 IVN000002157629A14
12.10.2006 never      NY 17DECA311087046D PC05 YPC0740 IVN000002157629A15
12.10.2006 never      NY 17E6813B1F5FDBA7 PC06 PC5120 IVN0000021
12.10.2006 never      NY 17E7C0CB1DE2009F PC06 YPC0520 AIS000011157ADCAC2
12.10.2006 never      NY 17DECA32053D2143 PC06 YPC0730 IVN000002157629A14
12.10.2006 never      NY 17DECA311087046D PC06 YPC0740 IVN000002157629A15
12.10.2006 never      NY 17E958040B0A9E89 RI RI0810 RI00000013
12.10.2006 never      NY 17E658A908D7445C RI RI0820 RI00000012
12.10.2006 never      NY 1753E1E801C8E77C RP YRPMCOD A12W00063052D54ED2
12.10.2006 never      NY 17E19B4E0A563BA1 RT RT0200 RFT0000016
12.10.2006 never      NY 17DC968E1EB56CDA RT RT5100 RFT0000016
12.10.2006 never      NY 17DF647E180F8484 SA SA0160 CSVE000051
12.10.2006 never      NY 17DF648402373064 SA SA0470 CSVE000051
12.10.2006 never      NY 17E1C22500E4EAA9 SV SV0240 WSSV000116
12.10.2006 never      NY 17E17D4106BD3BAD SV SV0250 WSSV000116
12.10.2006 never      NY 17E1C22A0741446E SV SV0930 WSSV000116
12.10.2006 never      NY 17E1C21E191CC4E8 SV SV0950 WSSV000116
12.10.2006 never      NY 17E67F4816F0A575 SV SV5650 WSSV000116
12.10.2006 never      NY 17E1C2411C8D3D49 SV SV5780 WSSV000116
12.10.2006 never      NY 17E1C24504D84A02 SV SV5910 WSSV000116
12.10.2006 never      NY 17E17DEA0BA804BB SV SV5940 WSSV000116
12.10.2006 never      NY 17E19D851E5058C9 SV SV7770 WSSV000116
12.10.2006 never      NY 17E17E3708CB0CCE SV SV8300 WSSV000116
12.10.2006 never      NY 17E17DB402056D28 SV SV8620 WSSV000116
12.10.2006 never      NY 17E17DFF0AC41EBF SV SV8630 WSSV000116
12.10.2006 never      NY 17E3CF5218ED5984 SV YSVAUHI WSSV000116578CB6A6
12.10.2006 never      NY 1775A4131007686E SV YSVBUID A06M02547153F08CAD
12.10.2006 never      NY 17E657201170B0BB TN TN0530 OTXO000054
12.10.2006 never      NY 17E1E94F01B663D1 TN YTN0021 OTXO000054577CC9AE
12.10.2006 never      NY 17E1E9491B322516 TN YTN0100 OTXO000054577CC97A
12.10.2006 never      NY 17C8CC6419D27532 TN YTNDEP OTXO00003656AA11D9
12.10.2006 never      NY 17E6558C1322BCCF TN YTNOTF OTXO00005457A1E392
12.10.2006 never      NY 17DF45A60F2A7989 TN YTNSICH OTXO0000545766A5D8
12.10.2006 never      NY 17E67D330AF98717 TN YTNUPD OTXO00005457A33001
12.10.2006 never      NY 17E97FE90F708F1A TP TP0800 TP00000006
12.10.2006 never      NY 17E08C24031B3CE6 UU UU5170 RS20000050
12.10.2006 never      NY 17E089240269C872 VD VDDBM15 DSPV000030
12.10.2006 never      NY 17E0892319281FB1 VD VDGLH00 DSPV000030
12.10.2006 never      NY 17E4505513488971 VP VP0030 VIP0000015
12.10.2006 never      NY 17E1C561053A68D4 VP VP5300 VIP0000015
12.10.2006 never      NY 17E1C55A15612ADA VP VP5310 VIP0000015
12.10.2006 never      NY 17E1C5681055CB39 VP VP5330 VIP0000015
12.10.2006 never      NY 17E197C30A29756B VT VT5130 EBZV000009
12.10.2006 never      NY 17B7F61D13F75756 VV YVVZZ15 VDPS000052561CE2B7
12.10.2006 never      NY 17E655B20CE8B678 WB WB0330 WS8B000316
12.10.2006 never      NY 17E657D9016B243C WB WB0510 WSTS000039
12.10.2006 never      NY 17E657DA121C737D WB WB0520 WSTS000039
12.10.2006 never      NY 17E657DC019767AE WB WB0530 WSTS000039
12.10.2006 never      NY 17E656280A3A76EF WB WB0550 WSTS000039
12.10.2006 never      NY 17E657DF0A2107EF WB WB0570 WSTS000039
12.10.2006 never      NY 17E657E01EB07746 WB WB0580 WSTS000039
12.10.2006 never      NY 17E657E20F6569CE WB WB0600 WSTS000039
12.10.2006 never      NY 17E657E4057139CB WB WB0620 WSTS000039
12.10.2006 never      NY 17E656290F96D45C WB WB0630 WSTS000039
12.10.2006 never      NY 17E657E515D83022 WB WB0660 WSTS000039
12.10.2006 never      NY 17E6562A10339C08 WB WB0680 WSTS000039
12.10.2006 never      NY 17E657E81ADCDFE4 WB WB0830 WSTS000039
12.10.2006 never      NY 17E6562C1B46E4CD WB WB0840 WSTS000039
12.10.2006 never      NY 17E657EA064338A2 WB WB0870 WSTS000039
12.10.2006 never      NY 17E657FD19DED6AE WB WB0940 WSTS000039
12.10.2006 never      NY 17E657FE18982280 WB WB0950 WSTS000039
12.10.2006 never      NY 17E658000744B5E1 WB WB0970 WSTS000039
12.10.2006 never      NY 17EC2004111ADB1D WB WB0980 WS8B000345
12.10.2006 never      NY 17BA08BB06322FA4 WB WB0990 TOFF000026
12.10.2006 never      NY 17E658021976720D WB WB1020 WSTS000039
12.10.2006 never      NY 17E658030E0E4658 WB WB1030 WSTS000039
12.10.2006 never      NY 17E658041E70F5FC WB WB1040 WSTS000039
12.10.2006 never      NY 17E6580613FC183E WB WB1050 WSTS000039
12.10.2006 never      NY 17E658091BD1E38A WB WB1070 WSTS000039
12.10.2006 never      NY 17E658470DCF65C8 WB WB1080 TOFF000067
12.10.2006 never      NY 17E658481B0AD1F9 WB WB1090 TOFF000067
12.10.2006 never      NY 17E658491A659997 WB WB1100 TOFF000067
12.10.2006 never      NY 17E6580B0834A199 WB WB1110 WSTS000039
12.10.2006 never      NY 17E6562D1E211910 WB WB1130 WSTS000039
12.10.2006 never      NY 17EC20040FB5B229 WB WB1290 WS8B000345
12.10.2006 never      NY 17E6580C1C1EDF66 WB WB1310 WSTS000039
12.10.2006 never      NY 17E6580E095E8853 WB WB1340 WSTS000039
12.10.2006 never      NY 17D7B9B01E44C020 WB WB5040 WS8B000222
12.10.2006 never      NY 17E656330D4C86A5 WB WB5260 WSTS000039
12.10.2006 never      NY 17E6581815414CAF WB WB5270 WSTS000039
12.10.2006 never      NY 17E658191FEC3935 WB WB5290 WSTS000039
12.10.2006 never      NY 17E8841A040A663F WB YWB0082 WSTS00004457B43111
12.10.2006 never      NY 17E656C50DE4DA58 WB YWB530 WS8B000312
12.10.2006 never      NY 17E653B21AAE9238 WB YWBBODA WS8B00028657A1D413
12.10.2006 never      NY 17E79C6D161BB342 WB YWBBOPR WS8B00032957AC99AE
12.10.2006 never      NY 17DE50AF0834DC9E WB YWBCTA WS8B000286575E9C03
12.10.2006 never      NY 17DF44FA0A7FAA50 WB YWBEBSM WSTS00003957669F37
12.10.2006 never      NY 17DE592B1DF94E8E WB YWBIO WS8B000286575EE61A
12.10.2006 never      NY 17D70EA10E338102 WB YWBITV TOFF0000595721BC72
12.10.2006 never      NY 17DE50E70D9A610C WB YWBMAS WS8B000286575E9E49
12.10.2006 never      NY 17E653D71522AA54 WB YWBN100 WS8B00028657A1D54A
12.10.2006 never      NY 17E0A3CE1788E1A5 WB YWBSA2 WS8B00028657721F2F
12.10.2006 never      NY 17E6549412925009 WB YWBSUM WS8B00028657A1DB75
12.10.2006 never      NY 178CBAB501330F34 WB YWBSYM WS8B00001654B22C92
12.10.2006 never      NY 17E657BB1056E9C9 WC WC5010 OTXO000054
12.10.2006 never      NY 17E657BC01D55B18 WC WC5050 OTXO000054
12.10.2006 never      NY 17A7996B0D814A9D WC WC7230 OTXO000014
12.10.2006 never      NY 177B7D0E0491C98D WC WC7250 A06M027069
12.10.2006 never      NY 17D4BDE90BAD8C6B WC WC7280 OTXO000045
12.10.2006 never      NY 17E657CC0503B1C6 WC WC8401 OTXO000054
12.10.2006 never      NY 17E657CD0A58BA81 WC WC8410 OTXO000054
12.10.2006 never      NY 17E08AA010384A51 WF WF0280 WSSW000064
12.10.2006 never      NY 17E08AAD165B6D7E WF WF0300 WSSW000064
12.10.2006 never      NY 17E08AB604CCD574 WF WF0310 WSSW000064
12.10.2006 never      NY 17E08AC60AFB310F WF WF0320 WSSW000064
12.10.2006 never      NY 17E08B0410799D5C WF WF0350 WSSW000064
12.10.2006 never      NY 17F107CA1893BFF0 WF WF5410 WSSW000075
12.10.2006 never      NY 17E19D331291BFE6 WI YWI0087 WS8B000313577A4B43
12.10.2006 never      AY 17CFE0520FB13724 WI YWINS01 WS8I00015256E5718A
12.10.2006 never      AY 17CFE05212619DDC WI YWINS02 WS8I00015256E5718C
12.10.2006 never      AY 17CFE053032A0468 WI YWINS03 WS8I00015256E57190
12.10.2006 never      AY 17CFE05313FE1157 WI YWINS04 WS8I00015256E57194
12.10.2006 never      AY 17CFE054014D9976 WI YWINS05 WS8I00015256E57198
12.10.2006 never      AY 17CFE055174B3B60 WI YWINS06 WS8I00015256E571A6
12.10.2006 never      AY 17CFE05612B16A21 WI YWINS07 WS8I00015256E571A9
12.10.2006 never      AY 17CFE05613902EC9 WI YWINS08 WS8I00015256E571AD
12.10.2006 never      AY 17CFE05702EF0AE6 WI YWINS09 WS8I00015256E571B1
12.10.2006 never      AY 17CFE0571E7F23ED WI YWINS10 WS8I00015256E571B5
12.10.2006 never      NY 17EDDF7409950811 WM WM0010 WSIN000037
12.10.2006 never      NY 17DB2DCA180393A6 WP YWPR1PX DBH000006857444F52
12.10.2006 never      NY 17DB2DCF18BB6738 WP YWPR2PX DBH000006857444F62
12.10.2006 never      NY 17DB2DD008C545C4 WP YWPR3PX DBH000006857444F88
12.10.2006 never      NY 17DB2DDA0BA04058 WP YWPR6PX DBH000006857444FA1
12.10.2006 never      NY 17E4010514465F4F WP YWPR7PX DBH0000068578E578A
12.10.2006 never      NY 17DB2DC506334F0D WP YWPRAPX DBH000006857444F3A
12.10.2006 never      NY 17DB2DC41977C9A9 WP YWPRBPX DBH000006857444F3E
12.10.2006 never      NY 17C75E6E18606571 WP YWPRCBX DBH0000054569E140F
12.10.2006 never      NY 17DB2DC41E0EE810 WP YWPRCPX DBH000006857444F41
12.10.2006 never      NY 17DE58CC1B7B0615 WP YWPXB1A DBH0000068575EE2A7
12.10.2006 never      NY 17DE58DC0CF6834F WP YWPXB1B DBH0000068575EE2E4
12.10.2006 never      NY 17DE58D9139CB188 WP YWPXB1C DBH0000068575EE2D9
12.10.2006 never      NY 176667C7006B7E9A WP YWPXBAC A06M0264235370B10A
12.10.2006 never      NY 176667CD056A3D7A WP YWPXBAD A06M0264235370B1E6
12.10.2006 never      NY 176667CA09A86408 WP YWPXBAE A06M0264235370B1AE
12.10.2006 never      NY 176667D51FED37D2 WP YWPXBBA A06M0264235370B3E8
12.10.2006 never      NY 176667DB1B6DE180 WP YWPXBBB A06M0264235370B45A
12.10.2006 never      NY 176667D91CF59238 WP YWPXBBC A06M0264235370B429
12.10.2006 never      NY 176667DF01C4917E WP YWPXBBD A06M0264235370B547
12.10.2006 never      NY 176667DD12019CAC WP YWPXBBE A06M0264235370B480
12.10.2006 never      NY 17677F030A5B5E3D WP YWPXBCA A06M0263755379E4F0
12.10.2006 never      NY 17677F0402A543E4 WP YWPXBCB A06M0263755379E4FF
12.10.2006 never      NY 17677F04164F7472 WP YWPXBCC A06M0263755379E503
12.10.2006 never      NY 17677F0503D92548 WP YWPXBCD A06M0263755379E50A
12.10.2006 never      NY 17677F051A7D55E6 WP YWPXBCE A06M0263755379E510
12.10.2006 never      NY 176667EC065E104D WP YWPXBDA A06M0264235370B94F
12.10.2006 never      NY 176667E91C8CB4AF WP YWPXBDB A06M0264235370B8E2
12.10.2006 never      NY 176667E8023144DC WP YWPXBDC A06M0264235370B829
12.10.2006 never      NY 176667F41DCB23A5 WP YWPXBDF A06M0264235370B9D2
12.10.2006 never      NY 176667F21F858384 WP YWPXBDG A06M0264235370B9BD
12.10.2006 never      NY 17677F0D0ACA9B8E WP YWPXBGA A06M0263755379E553
12.10.2006 never      NY 17677F0D1E74FB7E WP YWPXBGB A06M0263755379E557
12.10.2006 never      NY 17677F0E0AC23084 WP YWPXBGC A06M0263755379E55B
12.10.2006 never      NY 1766680C052BB1AD WP YWPXBIA A06M0264235370BB01
12.10.2006 never      NY 1766680A04B3F2D0 WP YWPXBIB A06M0264235370BAE8
12.10.2006 never      NY 1766680E06DEDCCD WP YWPXBIC A06M0264235370BB24
12.10.2006 never      NY 17666810047293AC WP YWPXBID A06M0264235370BB38
12.10.2006 never      NY 1766681704F799A5 WP YWPXBIE A06M0264235370BB6C
12.10.2006 never      NY 17DE58AA1C28E51D WP YWPXBJA DBH0000068575EE13F
12.10.2006 never      NY 17DE58B718E53B10 WP YWPXBJB DBH0000068575EE18E
12.10.2006 never      NY 17DE58B50A1FB690 WP YWPXBJC DBH0000068575EE17C
12.10.2006 never      NY 17DE58B3042C2DBF WP YWPXBJD DBH0000068575EE163
12.10.2006 never      NY 17DE58B01B612602 WP YWPXBJE DBH0000068575EE157
12.10.2006 never      NY 1766682E02285930 WP YWPXBKA A06M0264235370BC46
12.10.2006 never      NY 1766683319EBD2DE WP YWPXBKB A06M0264235370BC7D
12.10.2006 never      NY 176668311EDBCE89 WP YWPXBKC A06M0264235370BC67
12.10.2006 never      NY 1766682F1F71DCCD WP YWPXBKD A06M0264235370BC5C
12.10.2006 never      NY 176668381784073C WP YWPXBKE A06M0264235370BCA4
12.10.2006 never      NY 176B21CE0429370D WP YWPXBLC A06M0263755398650C
12.10.2006 never      NY 1766684600573C01 WP YWPXBMC A06M0264235370BCF8
12.10.2006 never      NY 17677F190EC1C916 WP YWPXBNA A06M0263755379E5B7
12.10.2006 never      NY 17677F191A69DB9F WP YWPXBNB A06M0263755379E5BB
12.10.2006 never      NY 17677F1A08169C99 WP YWPXBNC A06M0263755379E5BF
12.10.2006 never      NY 17677F2B0414B5C9 WP YWPXBND A06M0263755379E63F
12.10.2006 never      NY 17677F2B0BF9A7A6 WP YWPXBNE A06M0263755379E649
12.10.2006 never      NY 17677F2C01AD43AE WP YWPXBNF A06M0263755379E64D
12.10.2006 never      NY 17677F2B1BBE6B06 WP YWPXBNG A06M0263755379E652
12.10.2006 never      NY 17677F2C1D20406D WP YWPXBNH A06M0263755379E656
12.10.2006 never      NY 17677F2D08C3375F WP YWPXBNI A06M0263755379E65B
12.10.2006 never      NY 17677F2D13F04D46 WP YWPXBOA A06M0263755379E660
12.10.2006 never      NY 17677F2E0ACA2E4A WP YWPXBOB A06M0263755379E665
12.10.2006 never      NY 17677F2E1BD65360 WP YWPXBOC A06M0263755379E669
12.10.2006 never      NY 17677F5211695276 WP YWPXBQC A06M0263755379E793
12.10.2006 never      NY 176668541D0BF1D8 WP YWPXBTA A06M0264235370BD89
12.10.2006 never      NY 176668530B62F5C0 WP YWPXBTB A06M0264235370BD79
12.10.2006 never      NY 176668571E4D6A89 WP YWPXBTC A06M0264235370BD99
12.10.2006 never      NY 176668560ED88EB2 WP YWPXBTD A06M0264235370BD90
12.10.2006 never      NY 1766685D0DBD9AA6 WP YWPXBTE A06M0264235370BDF5
12.10.2006 never      NY 1766686918093289 WP YWPXBUC A06M0264235370BE52
12.10.2006 never      NY 17A5948E1DE7E1E3 WP YWPXBXA DBH00000195582B1B3
12.10.2006 never      NY 17A5949306D849F0 WP YWPXBXB DBH00000195582B1DA
12.10.2006 never      NY 17A5949600865104 WP YWPXBXC DBH00000195582B1F3
12.10.2006 never      NY 17A59499034EAF75 WP YWPXBXD DBH00000195582B20D
12.10.2006 never      NY 17A594B7167CDA05 WP YWPXBXE DBH00000195582B30B
12.10.2006 never      NY 1767819309CF9D24 WP YWPYBAA A06M0263755379FA7F
12.10.2006 never      NY 1767819317D00B12 WP YWPYBAB A06M0263755379FA83
12.10.2006 never      NY 176781D3033AD13F WP YWPYBCA A06M0263755379FC8E
12.10.2006 never      NY 176781D30416D5BC WP YWPYBCB A06M0263755379FC94
12.10.2006 never      NY 176781D3189E005D WP YWPYBCC A06M0263755379FC9A
12.10.2006 never      NY 176781D40EDA0F82 WP YWPYBCD A06M0263755379FCA0
12.10.2006 never      NY 176782321E54E08C WP YWPYBCE A06M0263755379FE40
12.10.2006 never      NY 1793D8DF18992804 WP YWPYBDC DBH000002254EDE1AB
12.10.2006 never      NY 17E30CF01534A1D6 WQ WQ6010 CUBE000052
12.10.2006 never      NY 17D25B9612B1B12D WQ YWQ1101 CUBE00003556FA509B
12.10.2006 never      NY 17C2D3A01732FD37 WQ YWQ1501 CUBE0000305677F9BE
12.10.2006 never      NY 17C2D1A30E88BF6E WQ YWQ1502 CUBE0000305677E85A
12.10.2006 never      NY 17E51BD21F22A4AD WQ YWQBERI CUBE00005257979BE0
12.10.2006 never      NY 17D2B60305D6060B WQ YWQEXCP CUBE00003956FD4720
12.10.2006 never      NY 17A0E53601EDEA20 WQ YWQREPI CUBE000003555B64DD
12.10.2006 never      NY 17C8CBAC06E54B3B YY YYDB2FK TOFF00004856AA0B30
12.10.2006 never      NY 17E0B2710D08B6C3 YY YYNLCPO MOD0000021577299E0
12.10.2006 never      NY 17D39F8E1D4A3BE1 YY YYVPSVF VIP00000145704EE3B
12.10.2006 never      NY 17CE271E0FD72FC3 YY YYWB101 WS8B00018756D6FC76
12.10.2006 never      NY 17DF44F2006E7C70 YY YYWBVIN WSTS00003957669F10
13.11.2006 never      NY 17F3896418E9A100 DE DE0030 DE00000038
13.11.2006 never      NY 17F011370D4D6B12 DE DE0410 DE00000038
13.11.2006 never      NY 17F3876E11C76B47 DE DE0820 DE00000038
13.11.2006 never      NY 17F3866D04B74B97 ED ED0830 ED00000040
13.11.2006 never      NY 17F4566D0A848A80 ED ED0960 ED00000040
13.11.2006 never      NY 17EEAF9E18CE7293 EK EK6841 EMA0000048
13.11.2006 never      NY 17EF4D4B0B0DEFBB FF FF0010 FFOR000023
13.11.2006 never      NY 17F0DBB515459805 FF FF0020 FFOR000023
13.11.2006 never      NY 17F0DBB51923338F FF FF0030 FFOR000023
13.11.2006 never      NY 17F4A1E90ADBA591 GM GM0850 GM00000105
13.11.2006 never      NY 17F6631603B65379 GM GM0850 GM00000118
13.11.2006 never      NY 17F0D69A0BE9BA02 RI RI0820 RI00000014
13.11.2006 never      NY 17F42B521E51FFA3 WB WB0630 WS8B000320
13.11.2006 never      NY 17F65A5217A5D6F2 WB WB0630 WSTS000048
13.11.2006 never      NY 17F42B4707CCEA19 WB WB0680 WS8B000320
13.11.2006 never      NY 17F65A530F26EE8E WB WB0680 WSTS000048
13.11.2006 never      NY 17F608D00437DC2D WB WB0720 WS8B000370
13.11.2006 never      NY 17EFF3840280BCCC WB WB0870 WSTS000043
13.11.2006 never      NY 17EDDBD30DE30F06 WB YWBEBSM WSTS00004357E1024F
13.11.2006 never      NY 17F65A4E11AB0A37 WB YWBEBSM WSTS0000485828352D
13.11.2006 never      NY 17F3B503051A38CD WQ WQ5950 CUBE000056
13.11.2006 never      NY 17EDE3C11085328C WQ YWQ1501 CUBE00005657E144E3
13.11.2006 never      NY 17EDE3CA01C69FC1 WQ YWQ1502 CUBE00005657E14527
14.11.2006 never      NY 17F5FB170D75B342 CE CE5300 NOST000271
14.11.2006 never      NY 17F3B0D708AC85EC CZ YCZJABW GSER0001095811EEAB
14.11.2006 never      NY 17F1F750161BE79A PC01 PC5120 IVN0000024
14.11.2006 never      NY 17F1F750161BE79A PC02 PC5120 IVN0000024
14.11.2006 never      NY 17F1F750161BE79A PC03 PC5120 IVN0000024
14.11.2006 never      NY 17F1F750161BE79A PC04 PC5120 IVN0000024
14.11.2006 never      NY 17F1F750161BE79A PC05 PC5120 IVN0000024
14.11.2006 never      NY 17F1F750161BE79A PC06 PC5120 IVN0000024
14.11.2006 never      NY 17F666A31EC1AF09 WB WB0720 WS8B000373
14.11.2006 never      NY 17F5FC081C4D837F WB WB0840 NOST000271
14.11.2006 never      NY 17F5FC1F1872F751 WB WB1130 NOST000271
14.11.2006 never      NY 17F1316B166C291E WB YWB0082 WSTS00004357FCFAC3
16.11.2006 never      NY 17F6A5D00822433A WB WB0720 WS8B000374
16.11.2006 never      NY 17F429F81B636042 WB WB1300 TOFF000076
16.11.2006 never      NY 17ED9325083C45D7 WF YWF64CA WSSW00004357DEA0AA
16.11.2006 never      NY 17F5424807BCCD23 WF YWFSWC WSSW000043
16.11.2006 never      NY 17677F0816E5617A WP YWPXBEA A06M0263755379E52A
16.11.2006 never      NY 17677F09081A7400 WP YWPXBEB A06M0263755379E52F
16.11.2006 never      NY 17677F0913FCC1B2 WP YWPXBEC A06M0263755379E534
16.11.2006 never      NY 17677F0A067E8438 WP YWPXBED A06M0263755379E538
16.11.2006 never      NY 17677F0A1D900EA0 WP YWPXBEE A06M0263755379E53D
16.11.2006 never      NY 17677F0B0C4BCB5E WP YWPXBEF A06M0263755379E540
16.11.2006 never      NY 17677F0B1D18DF9B WP YWPXBEG A06M0263755379E545
17.11.2006 never      NY 17EF53491427E028 CZ YCZPABW GSER00010957ED4FDC
17.11.2006 never      NY 17F131A20AF5B84E FC FC0050 KLOM000050
17.11.2006 never      NY 17F6658610966261 GM GM0850 GM00000117
17.11.2006 never      NY 17F1F4EE0F6BAE2B WF WF0280 WSSW000043
17.11.2006 never      NY 17F011F01151C0AF WF WF0300 WSSW000043
17.11.2006 never      NY 17F01BA30CDEFD01 WF WF0310 WSSW000043
17.11.2006 never      NY 17F0120818D71E36 WF WF0320 WSSW000043
17.11.2006 never      NY 17F1F4F00D3B936D WF WF0350 WSSW000043
17.11.2006 never      NY 17F5424F0E3C4DA1 WF WF5410 WSSW000043
19.11.2006 never      NY 17F29E680D9BE978 WF YWFM537 WSSW0000435808F092
20.11.2006 never      NY 17F3B7AA01DFB8BF SV SV5770 WSSV000121
20.11.2006 never      NY 17F6D8B21540EC6A WB WB0720 WS8B000376
21.11.2006 never      NY 17F664BF091393F6 DE DE0030 DE00000052
21.11.2006 never      NY 17F1F0FD18B677B4 DE DE0050 DE00000038
21.11.2006 never      NY 17F1F1000193D3BC DE DE0090 DE00000038
21.11.2006 never      NY 17F3896719061DE2 DE DE0420 DE00000038
21.11.2006 never      NY 17F596E01F4C525E DE DE0810 DE00000038
21.11.2006 never      NY 17F664C504C266FE DE DE0820 DE00000052
21.11.2006 never      NY 17F664CE19051000 ED ED0960 DE00000052
21.11.2006 never      NY 17F38B2B066DD61C FZ FZ0820 FZ00000010
21.11.2006 never      NY 17F664F21E7CDEB5 RI RI0820 DE00000052
21.11.2006 never      NY 17F110FD1F448DB8 TN YTNUPD OTXO00005857FBEABF
21.11.2006 never      NY 17EFF1AA191162DE WI YWI0087 TOFF00007657F28089
22.11.2006 never      NY 17F65C6C0117D7F6 CZ YCZJABW GSER000148582846ED
22.11.2006 never      NY 17F706BE186E58BA CZ YCZPABW ACP0000086582DDBB5
22.11.2006 never      NY 17F77ACC1DE8C19B DE DE0030 DE00000049
22.11.2006 never      NY 17F77B560EBFAE0B DE DE0420 DE00000049
22.11.2006 never      NY 17F77B160DFE5E9A DE DE0810 DE00000049
22.11.2006 never      NY 17EF29AF18EA992A SV SV0240 WSSV000121
22.11.2006 never      NY 17F7743E0ABC8050 WB WB0720 WS8B000379
23.11.2006 never      NY 17EA65930A17DB5D CE CE8200 COPE000034
23.11.2006 never      NY 17EA667514C0A152 CE CE8500 COPE000034
23.11.2006 never      NY 17F480FC1001B81A ER YERBER EAMR000010
23.11.2006 never      NY 17F6B7B80F6E842A WF YWFSWC WSSW000046
23.11.2006 never      NY 17DB2DC8147A27B9 WP YWPRDPX DBH000006857444F45
23.11.2006 never      NY 176667C50ACD815E WP YWPXBAA A06M0264235370B066
23.11.2006 never      NY 176667C812D9D466 WP YWPXBAB A06M0264235370B182
24.11.2006 never      NY 17F66346063C6A3C FF FF0020 FFOR000027
24.11.2006 never      NY 17F663460CE857A7 FF FF0030 FFOR000027
24.11.2006 never      NY 1722313B1808FBA0 HP1 ABAIRK HPSVP2ABAIRK
24.11.2006 never      NY 162A384019C60FBD HP1 AHJFRK HPSVP2AHJFRK
24.11.2006 never      NY 1722313B1808FBA0 HP3 ABAIRK HPSVP2ABAIRK
24.11.2006 never      NY 162A384019C60FBD HP3 AHJFRK HPSVP2AHJFRK
24.11.2006 never      NY 162A384019C60FBD HPS AHJFRK HPSVP2AHJFRK
24.11.2006 never      NY 17F7CEAC0ACF3CE1 WB WB0720 WS8B000386
24.11.2006 never      NY 17F6B7E70A49CE6A WF WF5410 WSSW000046
27.11.2006 never      NY 161FDC7B0F3AA690 PHPS53 H0014
27.11.2006 never      NY 161FDC7B0F3AA690 PHPSPTA H0014
28.11.2006 never      NY 17E80DEC01CFEA6F MF MF8930 MFR0000086
29.11.2006 never      NY 17F3368814223FE3 FI FI1900 BKUR000041
29.11.2006 never      NY 17F336B10B83A2A6 FI FI5067 BKUR000041
30.11.2006 never      NY 17D3569706302E1A VT VT5110 EBZV000007
30.11.2006 never      NY 17F81DED08BC564E WB WB0720 WS8B000383
04.12.2006 never      NY 17F8B9221DEAFF7E CZ CZ6300 KLOM000058
05.12.2006 never      NY 17F3B75B03B61B8C WB WB5340 TOFF000076
06.12.2006 never      NY 17F0362D18F23091 CE CE8440 COPE000042
06.12.2006 never      NY 17F178200DCA8399 CZ CZ6300 KLOM000050
06.12.2006 never      NY 17F7CC8912CEB84F DE DE0030 DE00000058
06.12.2006 never      NY 17F7CC900438FDD7 DE DE0420 DE00000058
06.12.2006 never      NY 17F7CC920A05967B DE DE0810 DE00000058
06.12.2006 never      NY 17EF1F1E165DD21C DE DE7120 DE00000038
06.12.2006 never      NY 17E19867142425A9 DE DE9992 DE00000033
06.12.2006 never      NY 17F81A7302C1DF27 ER YERBER EAMR000020
06.12.2006 never      NY 17EF4D4E12F2AC35 FF FF5000 FFOR000023
06.12.2006 never      NY 17F03903043601C0 KS KS5685 EBVV000233
06.12.2006 never      NY 17EFBD2F03AB0F3D MF MF8706 MFR0000086
06.12.2006 never      NY 17EFC2A6109D25A0 MF MF8710 MFR0000086
06.12.2006 never      NY 17E1773113D52431 MF MF8717 MFR0000082
06.12.2006 never      NY 17EFBD3017F6D701 MF MF8719 MFR0000086
06.12.2006 never      NY 1603114C09187630 PHPS53 HMPBTBL
06.12.2006 never      NY 1603114C09187630 PHPSPTA HMPBTBL
06.12.2006 never      NY 1798FBDD04B87AF8 PU PU7334 A18Q002532
06.12.2006 never      NY 17D34A07007AC032 RM YRMORGB PARS000054570220C1
06.12.2006 never      NY 17C8272B0B878916 RT YRT0002 RFT000000956A4A7F6
06.12.2006 never      NY 17F365DA01787EC3 SV SV5600 WSSV000121
06.12.2006 never      NY 17F3B7941FA91076 SV SV5740 WSSV000121
06.12.2006 never      NY 17F3B79D0B2A07A1 SV SV5750 WSSV000121
06.12.2006 never      NY 17F3B7A501DF68D8 SV SV5760 WSSV000121
06.12.2006 never      NY 17F3AF7901670AC2 SV SV5790 WSSV000121
06.12.2006 never      NY 17E6558E1BD85139 TN YTN0180 OTXO00005457A1E3A8
06.12.2006 never      NY 17E655900C824645 TN YTN0190 OTXO00005457A1E3AF
06.12.2006 never      NY 17F315F202926D77 VT YVTDTAT EBZV000010580CDB55
06.12.2006 never      NY 17E05DCA16EB4AB6 VV YVVZZ19 VDPS000077576FD3D1
06.12.2006 never      NY 17F931A407386CC9 WB WB0720 WS8B000390
06.12.2006 never      NY 17F81DC012503B34 WF YWFSWC WSSW000078
06.12.2006 never      NY 17F65C6E00EFD5FB WQ WQ5950 CUBE000069
07.12.2006 never      NY 17E1A52218671DC2 AS AS0610 KABG000038
07.12.2006 never      NY 17EFCD88088B7283 AV YAVNV10 AIS000009757F15171
07.12.2006 never      NY 17ECF5620CF828B7 AV YAVNV50 AIS000009757D9753E
07.12.2006 never      NY 17E4F02D0B0BDEC0 CE CE0100 COPE000029
07.12.2006 never      NY 17F29A9C0DA1F58D CE CE5200 COPE000042
07.12.2006 never      NY 17F12C92081F6E58 CE CE5230 COPE000042
07.12.2006 never      NY 17F68B54022CF1B7 CE CE5300 NOST000275
07.12.2006 never      NY 17E67FF71A9282F7 CE CE5730 COPE000029
07.12.2006 never      NY 17F4CBF21ED618C9 CE CE8200 COPE000042
07.12.2006 never      NY 17F12C9A14C6A418 CE CE8500 COPE000042
07.12.2006 never      NY 17EFE68C0CD2062B CE YCE1000 COPE00004257F22347
07.12.2006 never      NY 17F24C5E1877D4A5 CE YCEWIAP COPE0000425806405E
07.12.2006 never      NY 17F24A720D89D939 CZ CZ6400 GSER000123
07.12.2006 never      NY 17F03B2802067F9D CZ CZ6500 GSER000109
07.12.2006 never      NY 17F225D31E8E6C06 EB EB6480 EXPN000051
07.12.2006 never      NY 17F664581D55D4C5 ED ED0830 ED00000049
07.12.2006 never      NY 17F036DD0D7F8420 ED ED0950 ED00000040
07.12.2006 never      NY 17F77E3A00D6B07E ED ED0960 DE00000049
07.12.2006 never      NY 17F1539B14B62745 ER YERDCUR EAMR00001057FE19A1
07.12.2006 never      NY 17F33AC11B7C623E ER YERDGET EAMR000010580E1012
07.12.2006 never      NY 17F183BD111074A0 ER YERDINS EAMR00001057FFAD64
07.12.2006 never      NY 17F1F8D80FA1F64A ER YERDUPD EAMR000010580383BA
07.12.2006 never      NY 17F663451F4D51C0 FF FF0010 FFOR000027
07.12.2006 never      NY 17F819AA1A687185 FF FF0020 FFOR000029
07.12.2006 never      NY 17F819AC00A6E720 FF FF0030 FFOR000029
07.12.2006 never      NY 17F702E71725BB76 GM GM0850 GM00000129
07.12.2006 never      NY 16A202BD0C772F97 HP1 RWBM003 HPSVP1RWBM003
07.12.2006 never      NY 16AEAEB403F397E3 HP1 RWBR040 HPSVP2RWBR040
07.12.2006 never      NY 16AEAEB403F397E3 HP3 RWBR040 HPSVP2RWBR040
07.12.2006 never      NY 17F660C506E35510 KA KA0030 KOAB000047
07.12.2006 never      NY 17C3E66A05626FD5 NF NF7670 NBSI000061
07.12.2006 never      NY 17F0DD0D111CF20E NI NI0010 IPC0000156
07.12.2006 never      NY 17F01A160CEF09DD NI NI0040 IPC0000156
07.12.2006 never      NY 17EC97A11FA75806 NI YNI0161 IPC000017957D662DA
07.12.2006 never      NY 17F0199F1620B3C6 NI YNILBP2 IPC000015657F3CF6B
07.12.2006 never      NY 17E289E710ACC65A NO NO0960 NO00000024
07.12.2006 never      NY 17F224E40780A2A1 NO NO0970 NO00000027
07.12.2006 never      NY 17F0DFF103776A51 NTA1P CZA0199 A02E00056457FA4F4F
07.12.2006 never      NY 17F24A40085E0995 RI RI0810 RI00000014
07.12.2006 never      NY 17F3609104232730 SV SV0250 WSSV000121
07.12.2006 never      NY 17EE02CD064FA89C SV SV0930 WSSV000121
07.12.2006 never      NY 17F4A66418BCA37F SV SV0950 WSSV000121
07.12.2006 never      NY 17F3AF780DFDE389 SV SV5780 WSSV000121
07.12.2006 never      NY 17F3AF830D90FC6E SV SV5940 WSSV000121
07.12.2006 never      NY 17EF1F241FB29B4B VT VT0120 EBZV000010
07.12.2006 never      NY 17EF1F3510490AF3 VT VT5130 EBZV000010
07.12.2006 never      NY 17D2DFA4035458D7 VT YVTEINS EBZV00000756FEA457
07.12.2006 never      NY 17E083D01B5701C6 VT YVTVALU EBZV000009577112CD
07.12.2006 never      NY 17E953AD064B4002 VV YVVZZ20 VDPS00008757BAFE47
07.12.2006 never      NY 17F9DC5608801777 WB WB0720 MKUR000032
07.12.2006 never      NY 17F4CAE81D124201 WB YWBBOPR WS8B000318581B1EC5
07.12.2006 never      NY 17F6B7C306E33831 WF WF0280 WSSW000046
07.12.2006 never      NY 17F6B7C414880E8C WF WF0310 WSSW000046
07.12.2006 never      NY 17F6B7C50812EB73 WF WF0320 WSSW000046
07.12.2006 never      NY 17F6B7CB0D43627B WF WF0350 WSSW000046
07.12.2006 never      NY 17F81DAC0E413DEF WF WF5410 WSSW000078
07.12.2006 never      NY 17F56ECC1B0822C6 WM WM0010 WSIN000032
07.12.2006 never      NY 17F3B50B1E0E4DD7 WQ WQ6010 CUBE000056
10.12.2006 never      NY 17E541E61B5BB0F1 NL NL7310 BALR000054
10.12.2006 never      NY 17F906C31C5D9188 WQ WQ5950 CUBE000063
11.12.2006 never      NY 17F7EFB61BA34704 CE CE5300 COPE000046
11.12.2006 never      NY 17F7EFB80D9351DC CE CE8200 COPE000046
11.12.2006 never      NY 17F9FF2F14DA3E72 WB WB0720 WS8B000382
11.12.2006 never      NY 17F68C4907A38BD7 WB WB0840 NOST000275
11.12.2006 never      NY 17F68C530A0368C7 WB WB1130 NOST000275
12.12.2006 never      NY 17EDB68C09DA7D57 WB YWBIO WS8B00031857DFC9A9
18.12.2006 never      NY 17FB60EE132FF13B WB WB0720 WS8B000400
18.12.2006 never      NY 17FB60D20F9B8F02 WB YWBIO WS8B00040058525D43
22.12.2006 never      NY 175DC0590BA2D770 HP1 ZVKUYRI HPSVP2ZVKUYRI
22.12.2006 never      NY 175DC0590BA2D770 HP3 ZVKUYRI HPSVP2ZVKUYRI
27.12.2006 never      NY 17F3AF6C069E0A99 SV SV5150 WSSV000121
29.12.2006 never      NY 17F8BF9312A0E17B ER YERBER EAMR000017
29.12.2006 never      NY 17F68C471260A97F ER YERDCUR EAMR0000175829D861
29.12.2006 never      NY 17F45BA502163A41 EX EX5020 EXPN000051
29.12.2006 never      NY 1540AE5D19EAEC20 HP1 ACUHQ1
29.12.2006 never      NY 162E25F006C19C79 HP1 AG5JS8 HPSVP2AG5JS8
29.12.2006 never      NY 1540AE5D19EAEC20 HP3 ACUHQ1
29.12.2006 never      NY 162E25F006C19C79 HP3 AG5JS8 HPSVP2AG5JS8
29.12.2006 never      NY 162E25F006C19C79 HPS AG5JS8 HPSVP2AG5JS8
30.12.2006 never      NY 17F9AD6105CC58CB WQ WQ6000 CUBE000063
02.01.2007 never      NY 17F68C380122F678 ER YERDUPD EAMR0000175829D7DB
02.01.2007 never      NY 179A9A4A17FFA64D NF YNFNACL NBSI00002455269B5B
03.01.2007 never      NY 17F1F5260A32DBF8 EX EX6010 EXPN000051
04.01.2007 never      NY 17F8B94F16A57745 ER ER8020 EAMR000017
04.01.2007 never      NY 17F6879202E7E765 WF YWFM537 WSSW0000465829B0E1
05.01.2007 never      NY 17F294AB04E91852 MF MF7340 MFR0000086
05.01.2007 never      NY 17F35B5213C00D89 MF MF7360 MFR0000086
07.01.2007 never      NY 17F15B030959FF3E EB EB8374 KLOM000054
07.01.2007 never      NY 17F15B041BA8B699 EB EB8375 KLOM000054
09.01.2007 never      NY 17F6DA2B0AC3303D DE DE7120 DE00000030
10.01.2007 never      NY 15AF54470B34C684 HP1 DFWYAA HPSVP2DFWYAA
10.01.2007 never      NY 15AF54470B34C684 HP3 DFWYAA HPSVP2DFWYAA
10.01.2007 never      NY 17F3B7450ED54313 WB WB0060 TOFF000076
13.01.2007 never      NY 17ECA36C1D86DFB8 SV SV7520 WSSV000121
16.01.2007 never      NY 17FB10DE1CCD2C5F ER YERBER EAMR000018
16.01.2007 never      NY 15B89DFF094D3B06 HP1 DOSBN5 HPSVP2DOSBN5
16.01.2007 never      NY 15B89DFF094D3B06 HP3 DOSBN5 HPSVP2DOSBN5
17.01.2007 never      NY 17EEB242152CBDE1 YX YXA171C TOFF00007657E8092C
19.01.2007 never      NY 17E0F739098EBF0B RA RA7240 EGB0000020
20.01.2007 never      NY 17F21DD813107A44 TN TN7004 OTXO000058
20.01.2007 never      NY 17F8926C1A75F8F4 WF YWFSWC WSSW000077
22.01.2007 never      NY 17F892681E40DE49 WF WF5410 WSSW000077
25.01.2007 never      NY 17FD703A0C34F0B8 ER ER5080 EAMR000018
25.01.2007 never      NY 1800985C0E26B974 ER YERBER EAMR000024
25.01.2007 never      NY 17EF29C21F42F14E SV SV5210 WSSV000121
25.01.2007 never      NY 17F7F5B108C27440 SV SV5600 WSSV000146
25.01.2007 never      NY 17F92DAE07AB58D2 SV SV5740 WSSV000146
25.01.2007 never      NY 17F92DB60B5312EC SV SV5760 WSSV000146
25.01.2007 never      NY 17F92DB91980B134 SV SV5770 WSSV000146
25.01.2007 never      NY 17F8B7CE126F4468 SV SV5940 WSSV000146
25.01.2007 never      NY 17F3AFA31375B006 SV SV8410 WSSV000121
25.01.2007 never      NY 17F1543407FE1E03 TN YTNW100 OTXO00005857FE1E9A
25.01.2007 never      NY 17EE13FD144D9F14 VV YVVZZ04 VDPS00008557E2D980
25.01.2007 never      NY 17F9D78F04D4D6F0 WB WB5340 MKUR000032
25.01.2007 never      NY 1800ECCB00F86846 WF YWFSWC WSSW000083
25.01.2007 never      NY 17FAEB0018EA1848 WQ WQ5950 CUBE000075
26.01.2007 never      NY 17F26CEC1BAB8C79 AP YAPUTGK APEN00003558075175
26.01.2007 never      NY 170C7AEC1C51C551 BC BC0004 A20Y001119507E65B1
26.01.2007 never      NY 170C7AEE09225240 BC BC0005 A20Y001119507E65BC
26.01.2007 never      NY 17FAC2BA18C6C01B CE CE5300 NOST000288
26.01.2007 never      NY 17FAC3ED1EF0D350 CE CE8200 COPE000049
26.01.2007 never      NY 17F81E6003180D69 CZ CZ6400 GSER000039
26.01.2007 never      NY 17F774BF0BB91FD7 CZ YCZPABW GSER00015158317679
26.01.2007 never      NY 17EC77A611F0D4B7 CZ YCZTPRT BEWI00001057D55677
26.01.2007 never      NY 17F81E9919D8B126 FF FF0020 FFOR000024
26.01.2007 never      NY 17F81E9A0CA2047C FF FF0030 FFOR000024
26.01.2007 never      NY 17F3609005E187B2 SV SV0230 WSSV000121
26.01.2007 never      NY 17F8DCF6183E58F3 SV SV0250 WSSV000146
26.01.2007 never      NY 17F93517016FB65A SV SV0950 WSSV000146
26.01.2007 never      NY 17F92DB208E98B1C SV SV5750 WSSV000146
26.01.2007 never      NY 17F6ADE81DBCC16A SV SV5780 WSSV000146
26.01.2007 never      NY 17F6847B1DD35054 SV SV5790 WSSV000146
26.01.2007 never      NY 17F3AFA110778205 SV SV8300 WSSV000121
26.01.2007 never      NY 17F21DCA15518BEA TN TN0530 OTXO000058
26.01.2007 never      NY 17EED96D13A29111 VP VP0030 VIP0000018
26.01.2007 never      NY 17D1A45902D2750D VV YVVZZ12 VDPS00007356F4415D
26.01.2007 never      NY 17EFF39B034AD573 WB WB0520 WSTS000043
26.01.2007 never      NY 17F293590D84C765 WB WB0530 WSTS000043
26.01.2007 never      NY 17EFF3891A70BCFB WB WB0620 WSTS000043
26.01.2007 never      NY 17F65D2C1DFF05BE WB WB0630 WSTS000049
26.01.2007 never      NY 17F65D2F0C6E175D WB WB0680 WSTS000049
26.01.2007 never      NY 17FBD84104F5288E WB WB0720 WS8B000401
26.01.2007 never      NY 17EFF38805D1430C WB WB0830 WSTS000043
26.01.2007 never      NY 17FAC3411D088954 WB WB0840 NOST000288
26.01.2007 never      NY 17F2935C0CAB20DE WB WB0940 WSTS000043
26.01.2007 never      NY 17EFF38E02A9203F WB WB0950 WSTS000043
26.01.2007 never      NY 17F2935F17CA4579 WB WB0970 WSTS000043
26.01.2007 never      NY 17EFF398053E0FA4 WB WB1070 WSTS000043
26.01.2007 never      NY 17EFF3A103A29AB3 WB WB1110 WSTS000043
26.01.2007 never      NY 17FAC34D060D2F01 WB WB1130 NOST000288
26.01.2007 never      NY 17F429F603347F8C WB WB1290 TOFF000076
26.01.2007 never      NY 17F6593507F0991B WB YWB0082 WSTS00004758282BE3
26.01.2007 never      NY 17F7CDF615592B44 WB YWBBOPR WS8B000386583462DC
26.01.2007 never      NY 17F65CBF1FC4A84A WB YWBEBSM WSTS000049582849AF
26.01.2007 never      NY 17F3AC651CAB1AFE WB YWBMOV WS8B0003185811C948
26.01.2007 never      NY 1800ECCC0E288DB8 WF WF5410 WSSW000083
26.01.2007 never      NY 17F7A62C0C9AB394 WI YWI0087 TOFF0000875833150E
26.01.2007 never      NY 17F9B2EE0CCA4038 WQ WQ6010 CUBE000063
26.01.2007 never      NY 17EF490C0A28E38E WQ YWQBERI CUBE00005657ECFA12
27.01.2007 never      NY 17F65B73080F54FE AZ AZ0210 AWZA000054
29.01.2007 never      NY 17EED919061DCEDE VP VP5310 VIP0000018
30.01.2007 never      NY 17DB2DC4176698B9 WP YWPL9P1 DBH000006857444F33
31.01.2007 never      AY 17EF44991EE4910E MF YMFC115 MFR000008757ECD4C5
31.01.2007 never      NY 17FB6BDC1DC80D4F SV SV7520 WSSV000148
31.01.2007 never      NY 1800BEE41265A7D8 WB WB0970 WSTS000050
31.01.2007 never      NY 17FEAF8C0F4507FC WB WB1290 TOFF000090
02.02.2007 never      NY 17F451721AC06789 KS YKS5511 CSED000026581723E4
02.02.2007 never      NY 18031469192E3BF6 KS YKS5511 CSED0000315892F81B
02.02.2007 never      NY 17F30A46154809DF KS YKS5512 CSED000026580C796C
02.02.2007 never      NY 1803146A1DE571CD KS YKS5512 CSED0000315892F832
03.02.2007 never      NY 17F92F821AFBB2E1 FI FI5067 BKUR000047
05.02.2007 never      NY 1801B0091FCC5EEB WB WB0720 WS8B000359
05.02.2007 never      NY 17F3B74B0FD3EB87 WB WB1100 TOFF000076
05.02.2007 never      NY 1800E9A20699B9CE WI YWI0087 TOFF0000905880CA48
06.02.2007 never      NY 17D1732D1A73F1E8 RT YRT025M RFT000001556F2A4F3
12.02.2007 never      NY 180184F516B11620 WF WF5410 WSSW000005
12.02.2007 never      NY 1801B6CC00803A76 WF YWFSWC WSSW000005
13.02.2007 never      NY 1719479B126B4F0A DAA420_D_MAIN PSSRULE V4100
13.02.2007 never      NY 176E00470E492FF4 DAA420_D_MAIN PSSXSQL V4200
13.02.2007 never      NY 17A7785D0A8DF25E NTA1P CZA0255 A02E00054455928C30
13.02.2007 never      NY 180398421D1E95AC WB WB0720 WS8B000413
16.02.2007 never      NY 1774905A02E83F85 BP YBPALTR A12M00647953E783C0
18.02.2007 never      NY 17F336AD0209156A FI FI5066 BKUR000041
19.02.2007 never      NY 17E065AB1E85A8D5 AV YAV1002 AIS0000095577015F3
26.02.2007 never      NY 176115AA1BD3BF36 FC FC0010 CRMA003935
27.02.2007 never      NY 17E9A64007AB96E0 BP BP9060 BPST000055
28.02.2007 never      NY 17EDB918009CA8AE DI DI7510 DI00000045
28.02.2007 never      NY 17F91940005F9BF6 DP DP0320 DI00000057
28.02.2007 never      NY 17FB6BAF1DE15371 SV SV5150 WSSV000148
28.02.2007 never      NY 17EED90D089FEAAE TR TR5310 DERI000033
28.02.2007 never      NY 17F0DF8B1DC9F296 TR TR5330 DERI000033
28.02.2007 never      NY 1801AAA403D464C3 YX YXA171C TOFF00009858871D68
01.03.2007 never      NY 17F12ABB16626554 CE CE8460 COPS000019
01.03.2007 never      NY 17EEAA7419A01AFD CZ CZ6020 LOFT000035
01.03.2007 never      NY 17A8DE0702CFD820 CZ CZ7000 IPRI000007
01.03.2007 never      NY 17EED90D1D7F3D36 TR TR5320 DERI000033
02.03.2007 never      NY 17F8B5C10C55D456 CZ CZ5494 ACP0000090
02.03.2007 never      NY 17F294F5012B7346 MF MF6000 MFR0000086
02.03.2007 never      NY 17F040360796A028 MF MF6010 MFR0000086
02.03.2007 never      NY 17EFBCE10E8DCA6E MF MF6020 MFR0000086
02.03.2007 never      NY 17F65C681AFA0C17 MF MF8930 MFR0000094
02.03.2007 never      NY 17ECA00D19A225A5 MF MF8940 MFR0000086
02.03.2007 never      NY 17F0DF8E16868A73 TR TR5340 DERI000033
02.03.2007 never      NY 17D2334A129FEC6A WL WL7390 WSAW000059
02.03.2007 never      NY 17EBB4D7195DA412 WP YWPR5PX DBH000007557CEF45B
03.03.2007 never      NY 17ECA016191F3115 MF MF8950 MFR0000086
03.03.2007 never      NY 17FEAFAC1709C607 TN TN7004 OTXO000063
03.03.2007 never      NY 17F21DD70A3EBF11 TN TN7020 OTXO000058
03.03.2007 never      NY 17E658170381461E WB WB5120 WSTS000039
03.03.2007 never      NY 17F21DBF0195247E WC WC8170 OTXO000058
04.03.2007 never      NY 17F26D6716D4FB4E CZ CZ8010 APEN000035
04.03.2007 never      NY 17E0892A09A09817 VD VDUTI41 DSPV000030
05.03.2007 never      NY 1795979C1E29E8A6 BP YBPSTAM BPST00002254FC858F
05.03.2007 never      NY 17FEB31F193E8585 ER ER8020 EAMR000019
05.03.2007 never      NY 17D5AA1712D7C89E NF YNFNACL NBSI00005557160D8E
05.03.2007 never      NY 180146690EADF0E6 WQ WQ6000 CUBE000066
06.03.2007 never      NY 18081F360B380606 WQ WQ6000 CUBE000084
07.03.2007 never      NY 17EF2D710279EDE8 CI CI0100 GEGE000019
07.03.2007 never      NY 17F3AB42022F0794 DE DE0190 DE00000038
07.03.2007 never      NY 17EFC406017DE232 DE DE5130 DE00000038
07.03.2007 never      NY 1728A0881C6EEFD4 HP1 ACF3Q1 HPSVP2ACF3Q1
07.03.2007 never      NY 1728A0881C6EEFD4 HP3 ACF3Q1 HPSVP2ACF3Q1
07.03.2007 never      NY 1802C38F09A9B866 WB WB0060 TOFF000100
07.03.2007 never      NY 17EBB4D71458D5A7 WP YWPR4PX DBH000007557CEF45A
08.03.2007 never      NY 1800EB9C1E4F0DCB AP YAPUTGK APEN0000385880DAE5
08.03.2007 never      NY 17E55ED20DFB6A26 BS BS5030 BUT0000006
08.03.2007 never      NY 17F6F93B008FC687 CE CE8440 COPE000046
08.03.2007 never      NY 17FAC73809E5021C CZ CZ6300 GSER000156
08.03.2007 never      NY 17F011F31C902743 DE DE5600 DE00000038
08.03.2007 never      NY 17EFE86D13A1660A DE DE5690 DE00000038
08.03.2007 never      NY 17F6B4390BE78275 FF FF5000 FFOR000024
08.03.2007 never      NY 17F01B040CE0AEDB HB HB5000 ASIA000070
08.03.2007 never      NY 17F6AAB109811DC0 KS KS5685 EBVV000245
08.03.2007 never      NY 17F6D2A4174A91AC MF MF8706 MFR0000094
08.03.2007 never      NY 17F6D2A01AADF1B0 MF MF8710 MFR0000094
08.03.2007 never      NY 17F6D2BD1DC2AEBB MF MF8717 MFR0000094
08.03.2007 never      NY 17F6D2C9095BF851 MF MF8719 MFR0000094
08.03.2007 never      NY 177529F11C11B988 NF NF7650 NF0Y000530
08.03.2007 never      NY 17F334590968DFD8 NF NF8620 NBSC000021
08.03.2007 never      NY 17B56E5F1C27E590 NF YNFDEAL NBSI0000505607A92A
08.03.2007 never      NY 17FE89191E1D5672 NF YNFNACL NBSI000122586CD99C
08.03.2007 never      NY 17F067D21629C41B PC01 PC5060 IVN0000024
08.03.2007 never      NY 17F68F0400494D1E PC01 PC5120 AIS0000124
08.03.2007 never      NY 17F067D21629C41B PC02 PC5060 IVN0000024
08.03.2007 never      NY 17F68F0400494D1E PC02 PC5120 AIS0000124
08.03.2007 never      NY 17F067D21629C41B PC03 PC5060 IVN0000024
08.03.2007 never      NY 17F68F0400494D1E PC03 PC5120 AIS0000124
08.03.2007 never      NY 17F067D21629C41B PC04 PC5060 IVN0000024
08.03.2007 never      NY 17F68F0400494D1E PC04 PC5120 AIS0000124
08.03.2007 never      NY 17F067D21629C41B PC05 PC5060 IVN0000024
08.03.2007 never      NY 17F68F0400494D1E PC05 PC5120 AIS0000124
08.03.2007 never      NY 17F067D21629C41B PC06 PC5060 IVN0000024
08.03.2007 never      NY 17F68F0400494D1E PC06 PC5120 AIS0000124
08.03.2007 never      NY 17D173290491EFD8 RT YRT0023 RFT000001556F2A4CC
08.03.2007 never      NY 17FB6B9918022B3B SV SV0230 WSSV000148
08.03.2007 never      NY 17FFA93D0153902D SV SV5600 WSSV000148
08.03.2007 never      NY 17FB6BC91BA8A620 SV SV5740 WSSV000148
08.03.2007 never      NY 17FB6BCB0B7CE67D SV SV5760 WSSV000148
08.03.2007 never      NY 17FB6BCC0672FABD SV SV5770 WSSV000148
08.03.2007 never      NY 17FC29FA128E97E4 SV SV5940 WSSV000148
08.03.2007 never      NY 17F819DC1F901138 SV SV8410 WSSV000148
08.03.2007 never      NY 17E657991D6451CB TN TN5004 OTXO000054
08.03.2007 never      NY 17F21DDA14D71797 TN TN5016 OTXO000058
08.03.2007 never      NY 17EFF394094612F1 WB WB1310 WSTS000043
08.03.2007 never      NY 17F42B2F06543E61 WB WB5570 WS8B000319
08.03.2007 never      NY 17F29E710C7EB572 WF YWFCB02 WSSW0000435808F0DA
08.03.2007 never      NY 17FEB52102C5D6FD WF YWFM537 WSSW000081586E4AEB
08.03.2007 never      NY 17EBB4D70E598DA9 WP YWPR3PX DBH000007557CEF458
08.03.2007 never      NY 17E0FD0906033B82 WP YWPU1P5 DBH000006857750BA6
08.03.2007 never      NY 17F29ACB07C2020D WQ YWQ5601 CUBE0000565808D243
09.03.2007 never      NY 1780D2BC184B4289 AT AT0099 A20Y001519544E5A50
09.03.2007 never      NY 17DA424D068E89BE AT AT7500 ACS0000009
09.03.2007 never      NY 17F8BFDF19563581 AV YAVNV10 AIS0000118583C5023
09.03.2007 never      NY 17F8BFE11B8CF802 AV YAVNV50 AIS0000118583C503B
09.03.2007 never      NY 17D2AD0107D064B9 AZ YAZ0906 AWZA00003556FCFB81
09.03.2007 never      NY 17F35E23093D0893 BP YBPMUT BPST000055580F38EA
09.03.2007 never      NY 177490BA1DC67F1D BP YBPSUCH A12M00647953E786E4
09.03.2007 never      NY 177490BB13FA02E9 BP YBPSUCH A12M00647953E786E4CICS
09.03.2007 never      NY 17DA15530B435F0E BX YBXADBR CLOS000090573B1F04
09.03.2007 never      NY 17EED333033177A6 CD CD2590 UPDS000033
09.03.2007 never      NY 17F912FA1F7D6DEA CE CE5200 COPE000046
09.03.2007 never      NY 17F6F9321A03B063 CE CE5230 COPE000046
09.03.2007 never      NY 17FEB0B71F27112C CE CE5300 COPE000052
09.03.2007 never      NY 17F7751D0624AAC3 CE CE5730 COPE000046
09.03.2007 never      NY 17FEB0BD0A575EE8 CE CE8200 COPE000052
09.03.2007 never      NY 17F6D5200701892E CE CE8500 COPE000046
09.03.2007 never      NY 17F9089E096B6A7A CE YCE1000 COPE000046583EB25C
09.03.2007 never      NY 17F9087C079722E1 CE YCEWIAP COPE000046583EB13F
09.03.2007 never      NY 17EF2D6F17A7C964 CI CI0090 GEGE000019
09.03.2007 never      NY 17F26AFC0335606C CZ CZ5150 KLOM000054
09.03.2007 never      NY 17F00FC210D73D05 CZ CZ5190 LOMN000025
09.03.2007 never      NY 17EF505D1BEC0B6C CZ CZ5280 KLOM000050
09.03.2007 never      NY 17FC82B107AD2F3A CZ CZ6400 GSER000157
09.03.2007 never      NY 17F68B1A102E6076 CZ CZ6500 GSER000039
09.03.2007 never      NY 17F1F4BE14B36626 CZ CZ8980 KLOM000050
09.03.2007 never      NY 17F703BA0D743197 CZ YCZJABW GSER000151582DC263
09.03.2007 never      NY 17FD508B0E9EE593 CZ YCZPABW GSER00015758629BAC
09.03.2007 never      NY 17F9FC981BA98ADD DE DE0030 AITR000030
09.03.2007 never      NY 17F774C7026C9EC2 DE DE0050 DE00000049
09.03.2007 never      NY 17E6370E14B5306D DE DE0060 DE00000033
09.03.2007 never      NY 17F774C71DE4EEC3 DE DE0090 DE00000049
09.03.2007 never      NY 17E6371005641EB7 DE DE0100 DE00000033
09.03.2007 never      NY 17EEF4D6002657B2 DE DE0400 DE00000038
09.03.2007 never      NY 17F664E2143E4C5C DE DE0410 DE00000053
09.03.2007 never      NY 17F9FC9C0D8F9C14 DE DE0420 AITR000030
09.03.2007 never      NY 17F0110507EE9A1D DE DE0430 DE00000038
09.03.2007 never      NY 17F1F1010DF85629 DE DE0440 DE00000038
09.03.2007 never      NY 17EEF5B5053EEDC1 DE DE0490 DE00000038
09.03.2007 never      NY 17F9FC9D1AFD9C55 DE DE0810 AITR000030
09.03.2007 never      NY 17F7795D17C451E7 DE DE0820 DE00000049
09.03.2007 never      NY 17F0115904984FE6 DE DE0830 DE00000038
09.03.2007 never      NY 17E1A4A109FAD59B DE DE0940 DE00000033
09.03.2007 never      NY 17E427B114DC7F76 DE DE7800 DE00000033
09.03.2007 never      NY 17EDDE56054FA08D DE YDE0021 DE0000003857E11728
09.03.2007 never      NY 17EDB50F19BC5143 DE YDELSTO DE0000003857DFBD27
09.03.2007 never      NY 17EE06BF09975F2D DP DP0920 DP00000050
09.03.2007 never      NY 17F701880CC8CD9A EB EB6480 EXPN000058
09.03.2007 never      NY 17F1F4E816485060 EC EC5130 KLOM000050
09.03.2007 never      NY 17BB4C56179393A6 EC YECCRAC SYNC0000085638D27E
09.03.2007 never      NY 17F6DA811FC7E9FF ED ED0830 ED00000044
09.03.2007 never      NY 17F6B26F1423814C ED ED0950 ED00000044
09.03.2007 never      NY 17F910D61ED793D1 ED ED0960 ED00000044
09.03.2007 never      NY 17FE689B14661F10 EX EX5020 EXPN000062
09.03.2007 never      NY 17F1F50D1B2B90D7 EX EX5030 EXPN000051
09.03.2007 never      NY 17FE68321CF6EF76 EX EX6010 EXPN000062
09.03.2007 never      NY 17E9560E0A68FC74 EX EX6020 EXPN000050
09.03.2007 never      NY 17F26D9C017CF557 EX YEX0003 EXPN00005158075739
09.03.2007 never      NY 17F6B45D1C3A0010 FF FF0010 FFOR000024
09.03.2007 never      NY 17FBE3FF0D052DA2 FF FF0020 FFOR000030
09.03.2007 never      NY 17FBE40018A7F88D FF FF0030 FFOR000030
09.03.2007 never      NY 17EF4C9A12F245E0 FF YFF0004 FFOR00002357ED17E7
09.03.2007 never      NY 17ECA2F506EC7757 FI FI2100 BKUR000041
09.03.2007 never      NY 17F14F631AA9FE90 FI FI5200 BKUR000041
09.03.2007 never      NY 17EE0A3F1210A64B FI FI5260 BKUR000041
09.03.2007 never      NY 17F777470053BEA5 FZ FZ0820 FZ00000013
09.03.2007 never      NY 17F77CBD004C5A65 GM GM0850 GM00000123
09.03.2007 never      NY 17E1CC320012E17D GM GM0870 GM00000084
09.03.2007 never      NY 17E19B5C0335CF89 IT IT0010 TABS000102
09.03.2007 never      NY 175D03390323BE42 KC YKCWFVU A12M0061415321E5B0
09.03.2007 never      NY 17EDDC970054F072 KE YKEA082 EBVV00023557E108BE
09.03.2007 never      NY 17EDDC98185E11D8 KE YKEA083 EBVV00023557E108D7
09.03.2007 never      NY 17F00CDD12D3C623 KS KS5500 CSED000026
09.03.2007 never      NY 18038C5F0A8E10F1 KS YKS5511 CSED0000325896E675
09.03.2007 never      NY 18038C2B07BE3BD3 KS YKS5512 CSED0000325896E4BF
09.03.2007 never      NY 17D463390A25822D KS YKSBKST CSED000019570B579E
09.03.2007 never      NY 17F019A21BE90364 LB YLB0120 IPC000015657F3CF5C
09.03.2007 never      NY 17EEFDBB114A5121 LC LC0511I TFBM00002857EA823C
09.03.2007 never      NY 17F29514079B80EA MF MF7200 MFR0000086
09.03.2007 never      NY 17F241971398570C MF MF7230 MFR0000086
09.03.2007 never      NY 17F294981240F02B MF MF7320 MFR0000086
09.03.2007 never      NY 17F294A61C40D6D7 MF MF7330 MFR0000086
09.03.2007 never      NY 17FEB882157052EC MF MF7340 MFR0000107
09.03.2007 never      NY 17FEB8770EC16B9D MF MF7360 MFR0000107
09.03.2007 never      NY 17EFBCE21EF326F9 MF MF7380 MFR0000086
09.03.2007 never      NY 17F1F9091A0115C5 MF MF7510 MFR0000086
09.03.2007 never      NY 17ECF6E100444310 MF MF8600 MFR0000086
09.03.2007 never      NY 17ECF6E1179EF0F6 MF MF8620 MFR0000086
09.03.2007 never      NY 17F042411DEF8610 MF YMFC110 MFR000008757F52498
09.03.2007 never      NY 17F33C511D25C130 MF YMFC113 MFR0000087580E1D38
09.03.2007 never      NY 17F014A61E6BF77A NF YNFIB07 IB0000002357F3A607
09.03.2007 never      NY 17F77A311BF2D329 NI NI0010 IPC0000171
09.03.2007 never      NY 17F935EF15375BB6 NI NI0040 IPC0000171
09.03.2007 never      NY 17F7A2610E9596F8 NI YNI0161 IPC00001715832F542
09.03.2007 never      NY 17F275440CD1EA79 NI YNICS01 IPC000015658079777
09.03.2007 never      NY 17F019A201910994 NI YNILBP3 IPC000015657F3CF7F
09.03.2007 never      NY 17F0199F01CAF950 NI YNILBPL IPC000015657F3CF61
09.03.2007 never      NY 17FB15960BB34F41 NL NL7310 BALR000068
09.03.2007 never      NY 17F815A60F7CD9CF NO NO0960 NO00000029
09.03.2007 never      NY 17F93A0E0A056D1E NO NO0970 NO00000029
09.03.2007 never      NY 1797EB891B98AD0E NTA1P CZA0213 A02E00053555100C8A
09.03.2007 never      NY 1797EB8B0C383C66 NTA1P CZA0219 A02E00053555100C98
09.03.2007 never      NY 17850A5A17654490 NTA1P CZA0257 A02E0005225471ACDA
09.03.2007 never      NY 17DFBCB81F8E99F5 NZ NZDBM83 ZVBI000015
09.03.2007 never      NY 1760E44D07EA9896 NZ YNZGSEL A14S00239353427E48
09.03.2007 never      NY 17F1F95105A101D9 PC PC5090 IVN0000024
09.03.2007 never      NY 17EEAD3E11FF6234 PC01 PC5070 IVN0000024
09.03.2007 never      NN 17F3360A11FAF296 PC01 YPC0520 IVN0000024580DE88D
09.03.2007 never      NY 17F1781E138AD4EE PC01 YPC0730 IVN000002457FF4BEB
09.03.2007 never      NY 17F1782105737A5E PC01 YPC0740 IVN000002457FF4BFF
09.03.2007 never      NY 17EEAD3E11FF6234 PC02 PC5070 IVN0000024
09.03.2007 never      NY 17F3360A11FAF296 PC02 YPC0520 IVN0000024580DE88D
09.03.2007 never      NY 17F1781E138AD4EE PC02 YPC0730 IVN000002457FF4BEB
09.03.2007 never      NY 17F1782105737A5E PC02 YPC0740 IVN000002457FF4BFF
09.03.2007 never      NY 17EEAD3E11FF6234 PC03 PC5070 IVN0000024
09.03.2007 never      NY 17F3360A11FAF296 PC03 YPC0520 IVN0000024580DE88D
09.03.2007 never      NY 17F1781E138AD4EE PC03 YPC0730 IVN000002457FF4BEB
09.03.2007 never      NY 17F1782105737A5E PC03 YPC0740 IVN000002457FF4BFF
09.03.2007 never      NY 17EEAD3E11FF6234 PC04 PC5070 IVN0000024
09.03.2007 never      NY 17F3360A11FAF296 PC04 YPC0520 IVN0000024580DE88D
09.03.2007 never      NY 17F1781E138AD4EE PC04 YPC0730 IVN000002457FF4BEB
09.03.2007 never      NY 17F1782105737A5E PC04 YPC0740 IVN000002457FF4BFF
09.03.2007 never      NY 17EEAD3E11FF6234 PC05 PC5070 IVN0000024
09.03.2007 never      NY 17F3360A11FAF296 PC05 YPC0520 IVN0000024580DE88D
09.03.2007 never      NY 17F1781E138AD4EE PC05 YPC0730 IVN000002457FF4BEB
09.03.2007 never      NY 17F1782105737A5E PC05 YPC0740 IVN000002457FF4BFF
09.03.2007 never      NY 17EEAD3E11FF6234 PC06 PC5070 IVN0000024
09.03.2007 never      NN 17F3360A11FAF296 PC06 YPC0520 IVN0000024580DE88D
09.03.2007 never      NY 17F1781E138AD4EE PC06 YPC0730 IVN000002457FF4BEB
09.03.2007 never      NY 17F1782105737A5E PC06 YPC0740 IVN000002457FF4BFF
09.03.2007 never      NY 17F7F3371242E607 RI RI0810 RI00000015
09.03.2007 never      NY 17F77D041087671C RI RI0820 DE00000049
09.03.2007 never      NY 17EC7B16084E1A5B RT RT0200 TABS000119
09.03.2007 never      NY 17FC34E304E617D7 SV SV0250 WSSV000148
09.03.2007 never      NY 180193FF05D35DF2 SV SV0950 WSSV000148
09.03.2007 never      NY 17FB6BCB00901306 SV SV5750 WSSV000148
09.03.2007 never      NY 17FF2D25024C519B SV SV5780 WSSV000148
09.03.2007 never      NY 17FC34FD149C3875 SV SV5790 WSSV000148
09.03.2007 never      NY 17ED8FA7091BCAB9 SV SV8630 WSSV000121
09.03.2007 never      NN 17F4A532019FE2B1 SV YSVTXOG WSSV0001215819E262
09.03.2007 never      NY 17E657A219156486 TN TN7080 OTXO000054
09.03.2007 never      NY 17EDB6FC0129B3ED TN YTN0100 OTXO00005857DFCD28
09.03.2007 never      NY 17EDB6FB19E7E784 TN YTNDEP OTXO00005857DFCD1D
09.03.2007 never      NY 17EDB6FE0A52D974 TN YTNSICH OTXO00005857DFCD1F
09.03.2007 never      NY 17EF242E0A05F435 TP TP0800 TP00000011
09.03.2007 never      NY 17E08A7A1437B036 TR TR0810 AITR000024
09.03.2007 never      NY 17F0109116506E77 UU UU5170 RS20000055
09.03.2007 never      NY 17EED0B006930DF7 VD VDDBM15 DSPV000034
09.03.2007 never      NY 17F17AAC12A17747 VD VDGLH00 DSPV000034
09.03.2007 never      NY 17DF911E07E1A390 VD YVD0721 DSPV00003057691EEA
09.03.2007 never      NY 17DF913212D6437C VD YVD0722 DSPV00003057691F8F
09.03.2007 never      NY 180274B80A406832 VP VP5310 VIP0000023
09.03.2007 never      NY 17D3A4F316907351 VV YVVZZ10 VDPS00007357051B7A
09.03.2007 never      NY 17FE94BA1332FF42 VV YVVZZ12 VDPS000103586D3B12
09.03.2007 never      NY 17B7F61B123590DC VV YVVZZ13 VDPS000052561CE2B1
09.03.2007 never      NY 17C8C82308425FAE VV YVVZZ15 VDPS00006756A9EE3E
09.03.2007 never      NY 17DFC3560F52B3AB VV YVVZZ18 VDPS000077576AC41A
09.03.2007 never      NY 17B6E36E00B67432 VV YVVZZ1R VDPS0000525613E28D
09.03.2007 never      NY 17BE97F30EA54A8D VV YVVZZGR VDPS00006256547738
09.03.2007 never      NY 17EFF3991A1A6CE1 WB WB0510 WSTS000043
09.03.2007 never      NY 1800BEE91566A527 WB WB0520 WSTS000050
09.03.2007 never      NY 1800BEDE0F38D1D8 WB WB0530 WSTS000050
09.03.2007 never      NY 17F12D1F04640876 WB WB0550 WSTS000043
09.03.2007 never      NY 17EFF38117B0CFA8 WB WB0570 WSTS000043
09.03.2007 never      NY 17EFF38E029291BE WB WB0580 WSTS000043
09.03.2007 never      NY 17EFF390023C3C28 WB WB0600 WSTS000043
09.03.2007 never      NY 1800BEE20A3CB8F6 WB WB0620 WSTS000050
09.03.2007 never      NY 1800BEE017E9CAFE WB WB0630 WSTS000050
09.03.2007 never      NY 17EFF3891312AA3C WB WB0660 WSTS000043
09.03.2007 never      NY 1800BEE01BFB50BC WB WB0680 WSTS000050
09.03.2007 never      NY 1804D9971A8C728F WB WB0720 WS8B000415
09.03.2007 never      NY 1800BEE4191C1B45 WB WB0830 WSTS000050
09.03.2007 never      NY 1800E7F30C7DE071 WB WB0840 WSTS000050
09.03.2007 never      NY 17F6663C1FB97016 WB WB0870 WS8B000373
09.03.2007 never      NY 1800BEDF02B614F5 WB WB0940 WSTS000050
09.03.2007 never      NY 1800BEE21CF45542 WB WB0950 WSTS000050
09.03.2007 never      NY 1802A1AF1D15D0F6 WB WB0970 WSTS000052
09.03.2007 never      NY 17F3B73D092B4283 WB WB0980 TOFF000076
09.03.2007 never      NY 17EFF392188518D2 WB WB1020 WSTS000043
09.03.2007 never      NY 17EFF38C04EE96FC WB WB1030 WSTS000043
09.03.2007 never      NY 17EFF38B11073D43 WB WB1040 WSTS000043
09.03.2007 never      NY 17EFF3860446A804 WB WB1050 WSTS000043
09.03.2007 never      NY 1800BEE512D2C44E WB WB1070 WSTS000050
09.03.2007 never      NY 17F3B7530CB74BEF WB WB1080 TOFF000076
09.03.2007 never      NY 17F3B75B04496A8B WB WB1090 TOFF000076
09.03.2007 never      NY 18038A7317FF4CE6 WB WB1100 TOFF000101
09.03.2007 never      NY 1800BEE615FD9A10 WB WB1110 WSTS000050
09.03.2007 never      NY 1800E7ED01718B51 WB WB1130 WSTS000050
09.03.2007 never      NY 1802C39B10003785 WB WB1290 TOFF000100
09.03.2007 never      NY 17EFF3951E44C4D3 WB WB1340 WSTS000043
09.03.2007 never      NY 17E65815113FC4DD WB WB5090 WSTS000039
09.03.2007 never      NY 17F12D2003A67C35 WB WB5260 WSTS000043
09.03.2007 never      NY 17EFF39B1BB8B230 WB WB5270 WSTS000043
09.03.2007 never      NY 17EFF39707D66D94 WB WB5280 WSTS000043
09.03.2007 never      NY 17F47B0D0AD85488 WB WB5290 WSTS000043
09.03.2007 never      NY 1800BCB11DAC404E WB WB5340 TOFF000090
09.03.2007 never      NY 17D372D7072C27F3 WB WB7420 WSTS000035
09.03.2007 never      NY 17C993D615F70343 WB WB7730 WSTS000025
09.03.2007 never      NY 17E65872038FA072 WB WB8010 TOFF000067
09.03.2007 never      NY 17FABFFE13D5C4BC WB YWB0082 WSTS000050584D1824
09.03.2007 never      NY 1806624A0FE52F38 WB YWB0083 WSTS00005458AEAFE5
09.03.2007 never      NY 17EDB65E0059AE7C WB YWBCTA WS8B00031857DFC824
09.03.2007 never      NY 17DFB6400FBE5AA6 WB YWBDGP WS8B000286576A566C
09.03.2007 never      NY 17DFB6410B7D2895 WB YWBDGP2 WS8B000286576A5674
09.03.2007 never      NY 17FA24C616E2F012 WB YWBEBSM WSTS00005058480203
09.03.2007 never      NY 17FBD7E30BD021C3 WB YWBIO WS8B0004015856440E
09.03.2007 never      NY 1800BA3A01C8307E WB YWBMOV WS8B000359587F3CA8
09.03.2007 never      NY 17ECA17310A6C525 WB YWBSA2 WS8B00031857D6B537
09.03.2007 never      NY 17F9315D0B3CF01C WB YWBWRK WS8B00039058400836
09.03.2007 never      NY 17F21DD31F8CFB22 WC WC5010 OTXO000058
09.03.2007 never      NY 17F21DDB10B76A14 WC WC5050 OTXO000058
09.03.2007 never      NY 17D4BDE10FB50A25 WC WC7500 OTXO000045
09.03.2007 never      NY 17F21DBA1F13E3B4 WC WC8401 OTXO000058
09.03.2007 never      NY 17F3AD630156D3E6 WC WC8410 OTXO000058
09.03.2007 never      NY 17F7757F11C00378 WF WF0280 WSSW000077
09.03.2007 never      NY 17F6B7C31E75074D WF WF0300 WSSW000046
09.03.2007 never      NY 17F775790920F1A2 WF WF0310 WSSW000077
09.03.2007 never      NY 17F77574122CE0AC WF WF0320 WSSW000077
09.03.2007 never      NY 17F7756C175C6118 WF WF0350 WSSW000077
09.03.2007 never      NY 1804B32804CC125E WF WF5410 WSSW000084
09.03.2007 never      NY 17F6878E1A421617 WF YWF64CA WSSW0000465829B0C2
09.03.2007 never      NY 1804B0430E72DE54 WF YWFSWC WSSW000084
09.03.2007 never      NY 18038A70086E9E5C WI YWI0087 TOFF0001015896D63B
09.03.2007 never      AY 17CFE03A059375CC WI YWI5951 WS8I00015256E570B8
09.03.2007 never      AY 17CFE03A1B94E629 WI YWI5952 WS8I00015256E570BD
09.03.2007 never      AY 17CFE03B0A9DBFEE WI YWI5953 WS8I00015256E570C2
09.03.2007 never      NY 17CFE03C0048A772 WI YWI5954 WS8I00015256E570C7
09.03.2007 never      AY 17CFE03C1AFFBBE1 WI YWI5955 WS8I00015256E570CC
09.03.2007 never      AY 17CFE03D08400F20 WI YWI5956 WS8I00015256E570D2
09.03.2007 never      AY 17CFE03D1FA380A9 WI YWI5957 WS8I00015256E570D7
09.03.2007 never      AY 17CFE03E100D3474 WI YWI5958 WS8I00015256E570DC
09.03.2007 never      AY 17CFE03F043D2EC7 WI YWI5959 WS8I00015256E570E1
09.03.2007 never      AY 17CFE03914019E4C WI YWI595A WS8I00015256E570B2
09.03.2007 never      AY 17EC9B1F07A44FAD WI YWINS01 WS8I00022357D68018
09.03.2007 never      AY 17EC9B21089AB3BE WI YWINS02 WS8I00022357D68027
09.03.2007 never      AY 17EC9B22189ED4CD WI YWINS03 WS8I00022357D68037
09.03.2007 never      AY 17EC9B2502108AAC WI YWINS04 WS8I00022357D6804A
09.03.2007 never      AY 17F90D131999EF75 WI YWINS04 WS8I000257583ED7CF
09.03.2007 never      AY 17EC9B260A49AD23 WI YWINS05 WS8I00022357D68057
09.03.2007 never      AY 17EC9B28094B14DC WI YWINS06 WS8I00022357D68066
09.03.2007 never      AY 17EC9B2916F8D2B0 WI YWINS07 WS8I00022357D68074
09.03.2007 never      AY 17EC9B2A1E7BDCE1 WI YWINS08 WS8I00022357D6807D
09.03.2007 never      AY 17EC9B2C0C49719D WI YWINS09 WS8I00022357D6808B
09.03.2007 never      AY 17EC9B2D0202DF67 WI YWINS10 WS8I00022357D68092
09.03.2007 never      NY 17F705C90492978B WM WM0010 WSIN000038
09.03.2007 never      NY 17DD6CB216335413 WP YWPL1P1 DBH000006857572669
09.03.2007 never      NY 17DB2DBA0ED5AE22 WP YWPL3P1 DBH000006857444F1D
09.03.2007 never      NY 17DB2DBF0474465D WP YWPL4P1 DBH000006857444F20
09.03.2007 never      NY 17DB2DBF10EC2FCC WP YWPL5P1 DBH000006857444F23
09.03.2007 never      NY 17DB2DC001B59FB6 WP YWPL7P1 DBH000006857444F2C
09.03.2007 never      NY 17DB2DC006147AEA WP YWPL8P1 DBH000006857444F2F
09.03.2007 never      NY 17DD6DA1108246D3 WP YWPLEP1 DBH000006857572E3A
09.03.2007 never      NY 17DB2DCF0FD69B19 WP YWPR1QX DBH000006857444F5A
09.03.2007 never      NY 17EC7A41115DC48A WP YWPR7PX DBH000007557D56C68
09.03.2007 never      NY 17EC7A390B5BA615 WP YWPRAPX DBH000007557D56C23
09.03.2007 never      NY 17EC9F6D0ADF577A WP YWPRBPX DBH000007557D6A43E
09.03.2007 never      NY 17ECA9601425E493 WP YWPRCPX DBH000007557D6F7AF
09.03.2007 never      NY 17EBB4D702F5D058 WP YWPRDPX DBH000007557CEF450
09.03.2007 never      NY 1801443915349BEB WQ WQ5950 CUBE000066
09.03.2007 never      NY 180071570E7DB0A4 WQ WQ6010 CUBE000066
09.03.2007 never      NY 17EDE3BB1AEB52EE WQ YWQ1101 CUBE00005657E144AF
09.03.2007 never      NY 17F067380130CC34 WQ YWQ4502 CUBE00005657F65AA1
09.03.2007 never      NY 1800C81D11683C06 WQ YWQBERI CUBE000066587FB128
09.03.2007 never      NY 17CAD8F41EC935FE WQ YWQEVEO CUBE00003256BB4250
09.03.2007 never      NY 17DFBFA607A9180C YY YYDMAKD WSIN000023
09.03.2007 never      NY 17D28AC1181AEC7C YY YYNFP15 NBSI000056
09.03.2007 never      NY 17B7D8E11AF6C292 YY YYNFWRG NBSI000050
09.03.2007 never      NY 17EE041401C828BE YY YYNLCPB MOD000002657E253F8
09.03.2007 never      NY 17EE04151A7B5505 YY YYNLCPO MOD000002657E25407
09.03.2007 never      NY 17F0161408A8F429 YY YYWBERX TOFF00007657F3B1EE
09.03.2007 never      NY 17F128AA1DA656D1 YY YYWBVIN WSTS00004357FCB166
10.03.2007 never      NY 1804098110C21912 AT AT7500 ACS0000011
10.03.2007 never      NY 17E1A4CB081CB845 EK EK8710 EMA0000034
10.03.2007 never      NY 180184AC16541806 ER ER5080 EAMR000019
10.03.2007 never      NY 1800B8411E9D7863 ER YERBER EAMR000019
10.03.2007 never      NY 177F1CB71E593D76 SE SE0870 A20Y001521
10.03.2007 never      NY 17A6132F1DC5AAA4 VV YVVZZ3R VDPS0000295586D7EF
10.03.2007 never      NY 177E95D600CF89C6 WB WB7320 A06M025453
10.03.2007 never      NY 177E95D405ED2BFA WB WB7330 A06M025453
10.03.2007 never      NY 177E95D71EEC3BE1 WB WB7340 A06M025453
10.03.2007 never      NY 17EF1DD60AA9C7C4 YY YYFILOD BKUR00004157EB8F97
11.03.2007 never      NY 1808E90A06AD4C3F AT AT8500 ACS0000012
12.03.2007 never      NY 17F68C2409419232 ER YERDINS EAMR0000175829D73A
12.03.2007 never      NY 17FC0C1D0EDA6E0C ER YERDUPD EAMR0000185857FA28
13.03.2007 never      NY 1804D0C01AC3D13F WI YWI0087 TOFF00008858A1871A
17.03.2007 never      NY 1809AFB2198DF5E8 SN SN5004 SAVS000002
20.03.2007 never      NY 18031B4404501E6C WB WB1030 WSTS000046
20.03.2007 never      NY 18031B490D66E6FC WB WB1040 WSTS000046
31.03.2007 never      NY 1804310001822ED7 DE DE5900 DE00000043
31.03.2007 never      NY 18082310065D8816 WQ WQ6000 CUBE000067
02.04.2007 never      NY 1806494F024CADC4 DE DE5080 DE00000043
03.04.2007 never      NY 180A5AD201662B06 ER YERBER EAMR000029
07.04.2007 never      AY 17EFC7FD18C19850 MF MF7802 MFR0000086
10.04.2007 never      NY 16D648980E241364 HP1 AAIORK HPSVP2AAIORK
10.04.2007 never      NY 16A0891F1534545B HP1 AC7ZRK HPSVP2AC7ZRK
10.04.2007 never      NY 16AEAEF714CAB365 HP1 AOYURK HPSVP2AOYURK
10.04.2007 never      NY 16D648980E241364 HP3 AAIORK HPSVP2AAIORK
10.04.2007 never      NY 16A0891F1534545B HP3 AC7ZRK HPSVP2AC7ZRK
10.04.2007 never      NY 16AEAEF714CAB365 HP3 AOYURK HPSVP2AOYURK
19.04.2007 never      NY 18063C48073C1821 WB WB5340 TOFF000088
20.04.2007 never      NY 18063C4512A8DBE5 WB WB1290 TOFF000088
20.04.2007 never      NY 1802C71D123B04FF YY YYWBERX TOFF00008858906FB5
24.04.2007 never      NY 180BC02E0240FF58 WF WF5410 WSSW000091
24.04.2007 never      NY 180BC05B11AD373C WF YWFSWC WSSW000091
24.04.2007 never      NY 18038DF90850E6F0 WQ YWQ4502 CUBE0000675896F3D8
27.04.2007 never      NY 168273B60DA9ACC3 HP1 ABWZQ2 HPSVP2ABWZQ2
27.04.2007 never      NY 159007A30CC385D4 HP1 ACDBQ1 HPSVP1ACDBQ1
27.04.2007 never      NY 15A01A3F0D38625E HP1 ACZRQ2 HPSVP2ACZRQ2
27.04.2007 never      NY 15A01D3C072BE22A HP1 AF3TQ1 HPSVP2AF3TQ1
27.04.2007 never      NY 168273B60DA9ACC3 HP3 ABWZQ2 HPSVP2ABWZQ2
27.04.2007 never      NY 159007A30CC385D4 HP3 ACDBQ1 HPSVP1ACDBQ1
27.04.2007 never      NY 15A01A3F0D38625E HP3 ACZRQ2 HPSVP2ACZRQ2
27.04.2007 never      NY 15A01D3C072BE22A HP3 AF3TQ1 HPSVP2AF3TQ1
27.04.2007 never      NY 1806E4241E15FA09 SV SV5770 WSSV000151
30.04.2007 never      NY 180430EA1949EB61 DE DE0190 DE00000043
30.04.2007 never      NY 180430FB13000E0D DE DE5130 DE00000043
03.05.2007 never      NY 1804F6150525B9F8 MF MF8950 MFR0000096
04.05.2007 never      NY 1805C70F119FB4AC AZ AZ0210 AWZA000052
04.05.2007 never      NY 1802F22E10766C5A ER ER8020 EAMR000022
04.05.2007 never      NY 155FD924181CCFA6 HP1 RWBR030 HPSVP1RWBR030
04.05.2007 never      NY 155FD924181CCFA6 HP3 RWBR030 HPSVP1RWBR030
05.05.2007 never      NY 18063C0D100AB6A4 TN TN7004 OTXO000060
05.05.2007 never      NY 18063C2F01A69907 WC WC8170 OTXO000060
06.05.2007 never      NY 17EF45B00C497A34 CZ CZ7510 APEN000035
06.05.2007 never      NY 1802EFCE0982FC5E CZ CZ8010 APEN000039
06.05.2007 never      NY 17E19C3D1A135A83 CZ CZ8020 APEN000032
07.05.2007 never      NY 170702DB1DB89478 HP1 AB7STL HPSVP2AB7STL
07.05.2007 never      NY 170702DB1DB89478 HP3 AB7STL HPSVP2AB7STL
07.05.2007 never      NY 17DF3C1717251EBD WP YWPL2P1 DBH00000685766559B
09.05.2007 never      NY 1806E4671CE7F768 SV SV5750 WSSV000151
11.05.2007 never      NY 17C85BA315EFD9AA CZ YCZM113 KINF00000656A66022
11.05.2007 never      NY 180AD3EB1A255478 DE DE0030 DE00000065
11.05.2007 never      NY 180AD3EC1F37B12B DE DE0050 DE00000065
11.05.2007 never      NY 180AD3EE0DE04B17 DE DE0090 DE00000065
11.05.2007 never      NY 180AD3F21908F9F5 DE DE0420 DE00000065
11.05.2007 never      NY 180AD3F406BFBEEE DE DE0430 DE00000065
11.05.2007 never      NY 180AD3F605C47579 DE DE0440 DE00000065
11.05.2007 never      NY 180AD3F70738015C DE DE0810 DE00000065
11.05.2007 never      NY 180AD3F902AE1980 DE DE0820 DE00000065
11.05.2007 never      NY 180A596C0C38914E ED ED0960 ED00000058
11.05.2007 never      NY 180985BF048D7514 ER ER5080 EAMR000029
11.05.2007 never      NY 180CB2E10D76F6E2 ER YERBER EAMR000033
11.05.2007 never      NY 17E956DB00BEE5EA FI YFI0140 BKUR00003857BB18F4
11.05.2007 never      NY 180A52B0144E30BA GM GM0850 GM00000131
11.05.2007 never      NY 180527DD14068361 GM GM0870 GM00000113
11.05.2007 never      NY 17CDAC53112CC040 GM GM7910 GM00000065
11.05.2007 never      NY 1809651C0769BA6E NO NO0970 NO00000043
11.05.2007 never      NY 180A2BF81A2C7D9C SN SN5004 SAVS000004
11.05.2007 never      NY 1809AFB305C62075 SN SN5901 SAVS000002
11.05.2007 never      NY 1806E418149351A1 SV SV5150 WSSV000151
11.05.2007 never      NY 1810BE841959FFF8 SV SV5600 WSSV000222
11.05.2007 never      NY 1810BE880B14CF7A SV SV5790 WSSV000222
11.05.2007 never      NY 181116FF0E0F1749 TN TN7080 OTXO000072
11.05.2007 never      NY 1809B2F11F6A0328 UU UU5170 GSER000169
11.05.2007 never      NY 18063C33167D4E6B WB WB0060 TOFF000088
11.05.2007 never      NY 1804D65F1A0CFF65 WB WB0550 WSTS000046
11.05.2007 never      NY 18031B5810DE385B WB WB0970 WSTS000046
11.05.2007 never      NY 18063C421241FE5A WB WB0980 TOFF000088
11.05.2007 never      NY 17F3B74F1E488E52 WB WB0990 TOFF000076
11.05.2007 never      NY 18063C2A0DCAFFC3 WB WB1100 TOFF000088
11.05.2007 never      NY 18063D14070D9ED2 WB WB1130 WSTS000046
11.05.2007 never      NY 180F309103DE08AE WB WB1290 TOFF000110
11.05.2007 never      NY 180F308F05BBE908 WB WB5340 TOFF000110
11.05.2007 never      NY 180915970A3C7C0D WB YWB0082 WS8B00042658C556F1
11.05.2007 never      NY 18070830187C28F1 WB YWB0083 WS8B00038058B41EE5
11.05.2007 never      NY 1806608116F7B849 WF WF0310 WSSW000069
11.05.2007 never      NY 18038E9A0164CFC1 WF WF0320 WSSW000069
11.05.2007 never      NY 18038E9C16053EE5 WF WF0350 WSSW000069
11.05.2007 never      NY 180FD8DB1475606E WF WF5410 WSSW000092
11.05.2007 never      NY 180FD8E5056D53DD WF YWFSWC WSSW000092
11.05.2007 never      NY 1809433B02F33409 WI YWI0087 WS8B00042858C6D5CA
11.05.2007 never      NY 180990B30F056120 WQ WQ5950 CUBE000090
12.05.2007 never      NY 18111CD2011BE5E7 SN SN5920 SAVS000001
12.05.2007 never      NY 1812A6ED0FC2CE7B SN SN5920 SAVS000006
12.05.2007 never      NY 1812AAD1133E9997 SN SN5920 SAVS000008
13.05.2007 never      NY 1810233B08719560 CZ CZ7510 APEN000040
26.05.2007 never      NY 18148F89125891BE TN TN7080 OTXO000075
02.06.2007 never      NY 18104EFC01B91721 WC WC8170 OTXO000066
03.06.2007 never      NY 181050291C2291AA CZ CZ8010 APEN000040
05.06.2007 never      NY 181167D5028F29A4 SV SV5770 WSSV000188
06.06.2007 never      NY 17F7CD931EDBCCE6 KA KA0030 KOAB000046
06.06.2007 never      NY 176D80010157D0D5 WB YWB5403 A06M02510853AC4207
07.06.2007 never      NY 181167CE06BC3E70 SV SV5750 WSSV000188
07.06.2007 never      NY 176D7FFE0C4873F1 WB YWB5402 A06M02510853AC420A
08.06.2007 never      NY 18104EB40BCCF03E WB WB0550 WSTS000051
08.06.2007 never      NY 18104EB80EEC82EF WB WB0820 WSTS000051
08.06.2007 never      NY 18104EBF1899911D WB WB0840 WSTS000051
08.06.2007 never      NY 18104EB50F6C19E5 WB WB0970 WSTS000051
08.06.2007 never      NY 18104ECD00DF33CC WB WB1100 TOFF000099
08.06.2007 never      NY 18104EC80BF36DD2 WB WB1130 WSTS000051
08.06.2007 never      NY 18104F001A82A2D2 WB WB1290 TOFF000099
08.06.2007 never      NY 1811E17C16C548D4 WB WB5340 TOFF000099
08.06.2007 never      NY 180FA9B91C108FD2 WB YWB0082 WSTS00005158FC9483
08.06.2007 never      NY 180E173313327007 WB YWB0083 WSTS00005158EF63E7
08.06.2007 never      NY 180E172E1D4BF445 WI YWI0087 TOFF00009958EF63C0
10.06.2007 never      NY 18139AF51B561945 CZ CZ7510 APEN000046
12.06.2007 never      NY 17E6558D07C16DC5 TN YTN0160 OTXO00005457A1E399
23.06.2007 never      NY 17C9665C0387A55B TN TN5015 OTXO000036
23.06.2007 never      NY 1815CC21197C9DC0 WC WC8170 OTXO000073
26.06.2007 never      AY 181050D51150A800 MF YMFC115 MFR000011159020E48
27.06.2007 never      NY 181052801526D7CE DE DE5130 DE00000061
29.06.2007 never      NY 1815CBF31F43A228 WB WB0550 WSTS000056
29.06.2007 never      NY 1815CBDF028ABC14 WB WB0820 WSTS000056
29.06.2007 never      NY 1815CBE403F1522A WB WB0840 WSTS000056
29.06.2007 never      NY 1815CBD813E68799 WB WB0970 WSTS000056
29.06.2007 never      NY 1815CBD3028990C0 WB WB1130 WSTS000056
29.06.2007 never      NY 1815CA811B0232E9 WB YWB0082 WSTS000056592FFC68
29.06.2007 never      NY 1815CA82150A2EA3 WB YWB0083 WSTS000056592FFC72
29.06.2007 never      NY 1815CB9002222DA5 WI YWI0087 TOFF000111593004B5
02.07.2007 never      NY 18104EDB03BFF635 WB WB0060 TOFF000099
03.07.2007 never      NY 17A5446209C50C0A AT AT0097 IMS0000013
03.07.2007 never      NY 16592B6D04B1D9BD HP1 AANQUP HPSVP2AANQUP
03.07.2007 never      NY 16592B6D04B1D9BD HP3 AANQUP HPSVP2AANQUP
03.07.2007 never      NY 16592B6D04B1D9BD HPS AANQUP HPSVP2AANQUP
07.07.2007 never      AY 180CAC46097C85A1 MF MF7802 MFR0000110
14.07.2007 never      NY 1802CC1313D81A5F SV SV7520 WSSV000151
16.07.2007 never      NY 1648D83908C76B3B HP1 AA00WM HPSVP2AA00WM
16.07.2007 never      NN 168291CA178D923C HP1 AG23LZ HPSVP2AG23LZ
16.07.2007 never      NY 1648D83908C76B3B HP3 AA00WM HPSVP2AA00WM
16.07.2007 never      NY 168291CA178D923C HP3 AG23LZ HPSVP2AG23LZ
16.07.2007 never      NY 1648D83908C76B3B HPS AA00WM HPSVP2AA00WM
21.07.2007 never      NY 177E95DA027DD0B6 WB WB7230 A06M025453
27.07.2007 never      NY 181052B70C357965 DE DE0190 DE00000061
31.07.2007 never      NY 180DF65010137638 DP DP0320 DP00000065
03.08.2007 never      NY 17FF3A2B011C386E WP YWPR4PX DBH00000835872A6ED
03.08.2007 never      NY 177AAC82057F81CE YY YYPRAD0 A20Y001521
04.08.2007 never      NY 180CA6C103C836A5 ER ER8020 EAMR000028
04.08.2007 never      NY 1819E9D9176CB4D2 TN TN5015 WS8B000468
04.08.2007 never      NY 18104FB20C777F7F TN TN7004 OTXO000066
04.08.2007 never      NY 17EDB6EC0CF41C4E TN YTN5012 OTXO00005857DFCCA4
04.08.2007 never      NY 17F21C5711AA25C0 TN YTN5013 OTXO0000585804AD84
04.08.2007 never      NY 1819E9E912AF2F8C WC WC8170 WS8B000468
05.08.2007 never      NY 1817D4B802F927FD CZ CZ7510 APEN000047
05.08.2007 never      NY 1814369112862BD4 CZ CZ8010 APEN000044
05.08.2007 never      NY 1810239E183B99DB CZ CZ8020 APEN000040
08.08.2007 never      NY 17FFD2E20DC43B5A RT YRT0002 TABS0001305877A804
08.08.2007 never      NY 1814406D0EE779F3 SV SV5770 WSSV000195
09.08.2007 never      NY 1819E9CB0368BBAC TN TN5004 WS8B000468
09.08.2007 never      NY 1819E9DD181A4657 WB WB7440 WS8B000468
09.08.2007 never      NY 1819E9DA1D273222 WB WB7441 WS8B000468
09.08.2007 never      NY 180C667E044AA0F0 WF WF0310 WSSW000085
09.08.2007 never      NY 180C668510AA7600 WF WF0320 WSSW000085
09.08.2007 never      NY 176D800416D1A3E6 YY YYWBMTU A06M02510853AC4233
10.08.2007 never      NY 18116383053015E9 CZ CZ8980 KLOM000061
10.08.2007 never      NY 181C658B0CC5BF0F CZ YCZJABW GSER000185596765E3
10.08.2007 never      NY 181052B715DA14A3 DE DE0060 DE00000061
10.08.2007 never      NY 17DAE088170B1DD9 DI YDITBTB DI000000425741C710
10.08.2007 never      NY 181DFE691C0BF474 ER ER5080 EAMR000044
10.08.2007 never      NY 181A30160089B5E9 ER YERBER EAMR000042
10.08.2007 never      NY 181FB21A1FE4E323 ER YERPRI EAMR000045
10.08.2007 never      NY 1810508C1D55188E GM GM7910 GM00000132
10.08.2007 never      NY 17350B8D12C7D4C0 HP1 AN96RI HPSVP2AN96RI
10.08.2007 never      NY 17350B8D12C7D4C0 HP3 AN96RI HPSVP2AN96RI
10.08.2007 never      NY 180B70A00648C18F PC YPC0570 IVN000003058D9279F
10.08.2007 never      NY 18104FEA1264933D SN YSN111U SAVS00000159020621
10.08.2007 never      NY 17EBB3FA00747DE9 VV YVVZZ22 VDPS00008757CEED15
10.08.2007 never      NY 1819E99606AB2A97 WB WB0550 WS8B000468
10.08.2007 never      NY 18031B371D893645 WB WB0570 WSTS000046
10.08.2007 never      NY 18031B3F1AE4BFBA WB WB0620 WSTS000046
10.08.2007 never      NY 1819E9A61C26BDA7 WB WB0820 WS8B000468
10.08.2007 never      NY 1819E9B3184BFA20 WB WB0840 WS8B000468
10.08.2007 never      NY 17B6EFAE0B79D792 WB WB0900 WSTS000014
10.08.2007 never      NY 177E97AC05456002 WB WB0910 A06M025453
10.08.2007 never      NY 1819E9BB1DEB6DEA WB WB0970 WS8B000468
10.08.2007 never      NY 18031B431C21ADE5 WB WB1020 WSTS000046
10.08.2007 never      NY 18031B4B0865055F WB WB1050 WSTS000046
10.08.2007 never      NY 18031B471234006F WB WB1070 WSTS000046
10.08.2007 never      NY 1815CBBC128B209F WB WB1100 TOFF000111
10.08.2007 never      NY 17B6EFB00FA2278C WB WB1120 WSTS000014
10.08.2007 never      NY 1819E9B01255AAF5 WB WB1130 WS8B000468
10.08.2007 never      NY 17E656D50497257B WB WB1270 TOFF000067
10.08.2007 never      NY 1815CBC80E0A07D8 WB WB1290 TOFF000111
10.08.2007 never      NY 18031B4E14EB6841 WB WB1310 WSTS000046
10.08.2007 never      NY 17F42B4105DCA057 WB WB5040 WS8B000319
10.08.2007 never      NY 1819E9D216BAE89A WB WB5270 WS8B000468
10.08.2007 never      NY 1819E9CE1C08E759 WB WB5290 WS8B000468
10.08.2007 never      NY 1815CBC41E9ECD6B WB WB5340 TOFF000111
10.08.2007 never      NY 1819E9D8100C76EE WB WB5570 WS8B000468
10.08.2007 never      NY 1819BB65112A33FB WB YWB0082 WS8B00046859510BA3
10.08.2007 never      NY 1819BB6608D94976 WB YWB0083 WS8B00046859510BA9
10.08.2007 never      NY 1819E9E01D0E6840 WC WC5010 WS8B000468
10.08.2007 never      NY 1819E9E4135D7F2A WC WC8120 WS8B000468
10.08.2007 never      NY 1819E9E117A5CB9F WC WC8401 WS8B000468
10.08.2007 never      NY 180C668F1F297930 WF WF0350 WSSW000085
10.08.2007 never      NY 1819BBA11374D8E4 WI YWI0087 WS8B00046859510C2E
10.08.2007 never      NY 181028B91480D8A0 WQ YWQ4502 CUBE0000815900BDEA
10.08.2007 never      NY 181BBF151880ED2C WQ YWQBERI CUBE0001085961F18D
10.08.2007 never      NY 180F308B0E3EBEA6 YY YYWBERX TOFF00011058F89C03
11.08.2007 never      NY 181F40411B0CB2A1 SN SN5902 SAVS000005
11.08.2007 never      NY 181F40420CC9EFA1 SN SN5910 SAVS000005
11.08.2007 never      NY 181F4043086B7F18 SN SN5920 SAVS000005
11.08.2007 never      NY 181B490F003C0912 TN TN7004 OTXO000070
11.08.2007 never      NY 17FF3F201A2DDC44 WP YWPL3P1 DBH00000835872D08A
11.08.2007 never      NY 17FF3ECA0D6540C4 WP YWPL4P1 DBH00000835872CDB3
13.08.2007 never      NY 16CB6F5F03D8543C HP1 ZDIYURI HPSVP2ZDIYURI
13.08.2007 never      NY 16CB6F5F03D8543C HP3 ZDIYURI HPSVP2ZDIYURI
15.08.2007 never      NY 181C3CCF18A25948 WB WB0970 WSTS000055
16.08.2007 never      NY 181CDCC700146260 FC FC0050 KLOM000062
17.08.2007 never      NY 18204F4E09BD932C WB WB5340 TOFF000109
20.08.2007 never      NY 182052B8138C5EAB WB WB0840 WSTS000055
20.08.2007 never      NY 18204F520D3BBE96 WB WB1100 TOFF000109
20.08.2007 never      NY 182052B701C86330 WB WB1130 WSTS000055
20.08.2007 never      NY 18204F50133EEF4F WB WB1290 TOFF000109
23.08.2007 never      NY 18191FCA0F8C1B80 WB YWB5427 WSTS000055594BF219MVS
24.08.2007 never      NY 17350B9F06BA5ED8 HP1 AN97RI HPSVP2AN97RI
24.08.2007 never      NY 17350B9F06BA5ED8 HP3 AN97RI HPSVP2AN97RI
24.08.2007 never      NY 18191FC617F86461 WB YWB5425 WSTS000055594BF204MVS
31.08.2007 never      NY 181E1C5606776690 DP DP0320 DP00000067
31.08.2007 never      NY 165933970BE0AF71 HP1 ADWVQZ HPSVP2ADWVQZ
31.08.2007 never      NY 165933970BE0AF71 HP3 ADWVQZ HPSVP2ADWVQZ
31.08.2007 never      NY 165933970BE0AF71 HPS ADWVQZ HPSVP2ADWVQZ
03.09.2007 never      NN 16829513017A1AAB HP1 ABZJLS HPSVP2ABZJLS
03.09.2007 never      NY 168291D11CEE49B7 HP1 ACEQL4 HPSVP2ACEQL4
03.09.2007 never      NY 16829513017A1AAB HP3 ABZJLS HPSVP2ABZJLS
03.09.2007 never      NY 168291D11CEE49B7 HP3 ACEQL4 HPSVP2ACEQL4
06.09.2007 never      NY 182264F10BBCCE31 WB WB0840 WS8I000307
06.09.2007 never      NY 182264F510B513B1 WB WB1100 WS8I000307
06.09.2007 never      NY 182264F500BCCA0E WB WB1130 WS8I000307
06.09.2007 never      NY 182264F606CDDD86 WB WB1290 WS8I000307
06.09.2007 never      NY 1822650401D8C0BA WB WB5340 WS8I000307
06.09.2007 never      NY 181B4E7507B9AAFC WQ YWQ4502 CUBE000092595E40BC
08.09.2007 never      NY 181B495411CD518C WC WC8170 OTXO000070
13.09.2007 never      NY 1824188306484C98 WB YWB0083 WS8B00049859A7FB84MVS
14.09.2007 never      NY 182508AA10BEBA29 WB WB0630 WS8B000493
14.09.2007 never      NY 182508B11E12CC23 WB WB0680 WS8B000493
14.09.2007 never      NY 182508BC17AB3FDE WB WB0840 WS8B000493
14.09.2007 never      NY 182508C0009A2791 WB WB1100 WS8B000493
14.09.2007 never      NY 182508B908A66659 WB WB1130 WS8B000493
14.09.2007 never      NY 182508BC07CE0D85 WB WB1290 WS8B000493
14.09.2007 never      NY 182509020B72643B WB WB5340 WS8B000493
14.09.2007 never      NY 182508EF19331EAB WB WB5570 WS8B000493
14.09.2007 never      NY 182508E2112C51DA WB YWB530 WS8B000493
14.09.2007 never      NY 181A0E1807B808DE YY YYWBERX TOFF0001095953C073MVS
18.09.2007 never      NY 1825B120177A7420 SN SN5902 SAVS000013
18.09.2007 never      NY 1825B15913A0F0BD SN SN5920 SAVS000013
27.09.2007 never      NY 16A087B710D05AAD HP1 RWBK029 HPSVP2RWBK029
27.09.2007 never      NY 16A087B710D05AAD HP3 RWBK029 HPSVP2RWBK029
28.09.2007 never      NY 181A026818EC369B DI YDIU015 DI0000006459535F3EMVS
28.09.2007 never      NY 181A027C072235D5 DI YDIU016 DI0000006459535FDDMVS
02.10.2007 never      NY 1828868403E50B4E SN SN5902 SAVS000016
02.10.2007 never      NY 1825B1400AE3506F SN SN5910 SAVS000013
02.10.2007 never      NY 1828877F066B6F3E SN SN5920 SAVS000016
06.10.2007 never      AY 181B465210425DB5 MF MF7802 MFR0000124
10.10.2007 never      NY 18228655036D8A5D RT YRT0002 TABS000163599ACDD3
11.10.2007 never      NY 18191FDB160E209F WB YWB5419 WSTS000055594BF2C6MVS
16.10.2007 never      NY 181B48460EBD724A WB WB0910 WSTS000055
22.10.2007 never      NY 181B2AE00FD10CF5 DE DE5130 DE00000066
31.10.2007 never      NY 182DB2C01A4395B9 DP DP0320 DP00000076
02.11.2007 never      NY 181C3AC902656B36 TN YTN0160 OTXO0000705965FE8DMVS
02.11.2007 never      NY 181677F21D35936F WP YWPR4PX DBH00000965935AA4BMVS
03.11.2007 never      NY 182149BF1F625D6A TN TN7004 OTXO000082
03.11.2007 never      NY 1825351303342F49 WC WC8170 OTXO000085
05.11.2007 never      NY 17F6ABEC0FBFB769 BP BP9060 BPST000045
05.11.2007 never      NY 181B4E76128D418C WQ YWQ5601 CUBE000092595E40C8
06.11.2007 never      NY 181DF5860F63DFDE WB WB0060 TOFF000109
08.11.2007 never      NY 182530FA1755B2EA SV SV5750 WSSV000199
09.11.2007 never      NY 181642531F0A6578 EQ YEQKDGP GSER0001775933E982
09.11.2007 never      NY 181ACE71168F303B LC LC0511I TFBM000030595A0ED9
09.11.2007 never      NY 181E6B50010F7276 MF YMFC110 MFR000012559785D3C
09.11.2007 never      NY 1818A65309EBAA05 VV YVVZZ22 VDPS0001145947F743MVS
09.11.2007 never      NY 182190B107786E08 WB WB0970 WSTS000059
09.11.2007 never      NY 1825A8B61E132806 WB WB1130 WSTS000058
09.11.2007 never      NY 1825050B0AA408CF WB YWB0083 WSTS00005859AFBB9DMVS
09.11.2007 never      NY 182F1A3A0A95304A WC WC5010 OTXO000090
09.11.2007 never      NY 18276DE209737070 WF YWFCB02 WSSW00009959C3F210MVS
09.11.2007 never      NY 18273B0903C49A50 WF YWFM537 WSSW00009959C24789MVS
09.11.2007 never      NY 1816795F0A71EED5 WP YWPL3P1 DBH00000965935B6F3MVS
09.11.2007 never      NY 18167A40199930C3 WP YWPL4P1 DBH00000965935BE8EMVS
09.11.2007 never      NY 1816779710B19535 WP YWPRBPX DBH00000965935A7D3MVS
09.11.2007 never      NY 182C4BBA13FCFE6A WQ YWQBERI CUBE00011159ECC4D5
13.11.2007 never      NY 182E81190D0F9522 WB WB1130 WSTS000057
13.11.2007 never      NY 182E81350E35C518 WB WB1290 TOFF000112
14.11.2007 never      NY 182E80BE12B48951 WB WB5340 TOFF000112
14.11.2007 never      NY 182F9C94064FEB21 WC WC5010 WS8B000535
17.11.2007 never      NY 182E810C16E481CB TN TN7004 OTXO000081
22.11.2007 never      NY 182FE89C1A89F8B7 WB WB0840 WS8B000540
23.11.2007 never      NY 182FE8A119EB323F WB WB1100 WS8B000540
23.11.2007 never      NY 182FE89F190AB8F6 WB WB1290 WS8B000540
23.11.2007 never      NY 182FE8E91FB09F86 WB WB5340 WS8B000540
23.11.2007 never      NY 1827DA221FF5CEB2 YY YYWBERX TOFF00011259C7788CMVS
28.11.2007 never      NY 183127D0118B8088 WB WB0840 WSTS000063
30.11.2007 never      NY 18191FF500770133 WB YWB5402 WSTS000055594BF347MVS
30.11.2007 never      NY 18191FF3015FBA1A WB YWB5403 WSTS000055594BF33EMVS
10.12.2007 never      NY 1829968504E28612 WB WB0910 WSTS000057
11.12.2007 never      NY 17EFE6E5106A26C2 HB YHBK011 ASIA00007957F22639
12.12.2007 never      NY 182CBB2B071C931A SN SN5001 SAVS000015
14.12.2007 never      NY 18321B8B01D1DDC1 WB WB0840 WSTS000064
14.12.2007 never      NY 182FE89F0C3DCC0C WB WB1130 WS8B000540
14.12.2007 never      NY 18314CB90134CC0E WB WB5340 TOFF000119
14.12.2007 never      NY 182F9C7D0755188A WC WC8401 WS8B000535
03.01.2008 never      NY 182CE96E1855E81B WB WB0060 TOFF000112
05.01.2008 never      AY 182D5B511CD65C01 MF MF7802 MFR0000135
17.01.2008 never      NY 182885C01476B147 DE DE5130 DE00000070
19.01.2008 never      NY 181DF5AD1CE07ADA WB WB7230 TOFF000109
20.01.2008 never      NY 182F9C231D54A234 VV YVV3EIP VDPS0001565A0883F9MVS
01.02.2008 never      NY 17E9A6230C310A9D BP BP7161 BPST000055
01.02.2008 never      NY 175BDAEA05D32FD9 BP YBPACF2 A12M0061025318300D
01.02.2008 never      NY 183304A108676675 WQ WQ6000 CUBE000116
02.02.2008 never      NY 1830D2BA1F74EDCE TN TN7004 OTXO000094
02.02.2008 never      NY 1827D9ED1B7A2247 TN YTN5012 OTXO00008159C777B6MVS
02.02.2008 never      NY 182E81160F3767AF WC WC8170 OTXO000081
03.02.2008 never      NY 1828369001964AD0 CZ CZ8010 APEN000049
03.02.2008 never      NY 1828369105151BC7 CZ CZ8020 APEN000049
07.02.2008 never      NY 1825D96B10D1E0EC LC YLCTF03 TFBM00003359B6B138
07.02.2008 never      NY 18314CB119CD9908 WB WB0970 TOFF000119
07.02.2008 never      NY 181C3CC50797627B WB WB1070 WSTS000055
07.02.2008 never      NY 181C3CBE09DCAD91 WB WB1310 WSTS000055
07.02.2008 never      NY 1827DA1D03FFDB00 WB YWB0082 WSTS00005759C7789AMVS
07.02.2008 never      NY 1830F8E201B51E3F WB YWB0083 WSTS0000625A13F154MVS
08.02.2008 never      NY 183A92660A46E3C7 ER ER8020 EAMR000063
08.02.2008 never      NY 181B296C15713FAB GM GM7910 GM00000145
08.02.2008 never      NY 1825D96E09526C60 LC YLCTF02 TFBM00003359B6B121
08.02.2008 never      NY 1828360A066104AE MF YMFC110 MFR000013659CA812D
08.02.2008 never      NY 183C03241ADF9596 VV YVVZZ33 VDPS0001685A708DD5MVS
08.02.2008 never      NY 181C3D04133DC330 WB WB0570 WSTS000055
08.02.2008 never      NY 18314CB10D1F93F8 WB WB0820 TOFF000119
08.02.2008 never      NY 181BC4FB194A390D WB WB0900 WSTS000055
08.02.2008 never      NY 18314CAB0B51E797 WB WB0980 TOFF000119
08.02.2008 never      NY 18314CAB12720FBA WB WB0990 TOFF000119
08.02.2008 never      NY 181C3CC90BD2EB57 WB WB1020 WSTS000055
08.02.2008 never      NY 181C3CC41DD64553 WB WB1050 WSTS000055
08.02.2008 never      NY 18314CAC13D5C113 WB WB1080 TOFF000119
08.02.2008 never      NY 18314CB108C3B21E WB WB1090 TOFF000119
08.02.2008 never      NY 18314CAC06DAB158 WB WB1100 TOFF000119
08.02.2008 never      NY 181BC4FC0590BD70 WB WB1120 WSTS000055
08.02.2008 never      NY 1833FFF70CF81D11 WB WB1130 WSTS000062
08.02.2008 never      NY 181DF5901B2478B6 WB WB1270 TOFF000109
08.02.2008 never      NY 18314CAB1D0CD034 WB WB1290 TOFF000119
08.02.2008 never      AY 18330E701AAF0F8C WI YWI5955 WS8I0003435A256D49
08.02.2008 never      NY 18314CA01F534940 YY YYWBERX TOFF0001195A16AFD3MVS
11.02.2008 never      NY 183B0B0B161F507C WB WB0970 TOFF000122
16.02.2008 never      NY 183AC00E05023C61 TN TN7004 CSQS000007
20.02.2008 never      NY 183AC1A203D8D6B9 WB WB0910 WSTS000061
20.02.2008 never      NY 183862A30B47D8D5 WQ YWQBERI CUBE0001185A5220FD
21.02.2008 never      NY 183AC1BB0F6B6F4C WB WB0620 WSTS000061
21.02.2008 never      NY 183DE8150D65B415 WB WB0970 WSTS000069
21.02.2008 never      NY 183AC1A4130FB812 WB WB1070 WSTS000061
21.02.2008 never      NY 183B0B06055E7F50 WB WB1270 TOFF000122
22.02.2008 never      NY 183DE0621C7377DE CZ CZ6400 GSER000219
22.02.2008 never      NY 1838643816D05AE9 DE DE0430 DE00000077
22.02.2008 never      NY 1838644419C0AD4A DE DE0440 DE00000077
22.02.2008 never      NY 183AC16F0BC74831 WB WB0550 WSTS000061
22.02.2008 never      NY 183AC1B615F3A398 WB WB0570 WSTS000061
22.02.2008 never      NY 183DE81C04E37624 WB WB0630 WSTS000069
22.02.2008 never      NY 183DE81F022DAF51 WB WB0680 WSTS000069
22.02.2008 never      NY 183AC1AC048CEBF3 WB WB0830 WSTS000061
22.02.2008 never      NY 183AC1C502C91867 WB WB0870 WSTS000061
22.02.2008 never      NY 183B0B0C1BF09E86 WB WB0980 TOFF000122
22.02.2008 never      NY 183AC17A022BB450 WB WB1020 WSTS000061
22.02.2008 never      NY 183AC1A71ACA9B60 WB WB1050 WSTS000061
22.02.2008 never      NY 183BD30D193582E9 WB WB1100 TOFF000122
22.02.2008 never      NY 183AC1A41AB6A840 WB WB1110 WSTS000061
22.02.2008 never      NY 183AC18802D3917E WB WB1120 WSTS000061
22.02.2008 never      NY 183B0CAA0DED47F4 WB WB1130 WSTS000061
22.02.2008 never      NY 183B0B0F0ABE6647 WB WB1290 TOFF000122
22.02.2008 never      NY 183AC1820A650D6B WB WB1310 WSTS000061
22.02.2008 never      NY 183B0B1B0ABDFA4C WB WB5340 TOFF000122
07.03.2008 never      AY 18388C5611DF784A MF YMFC115 MFR00001495A537ECB
12.03.2008 never      NY 161FDC4B0094C100 PHPS53 H0001
12.03.2008 never      NY 15AF999510594FC8 PHPS53 HMCBCRD
12.03.2008 never      NY 15AAE9F00D66AC82 PHPS53 HMCXRL4
12.03.2008 never      NY 164DEE021925D98C PHPS53 HMPBNDR
12.03.2008 never      NY 164DEDE0153DDC90 PHPS53 HMPGENX
12.03.2008 never      NY 1619076913430EE0 PHPS53 RMIGNID
12.03.2008 never      NY 161FDC4B0094C100 PHPSPTA H0001
12.03.2008 never      NY 15AF999510594FC8 PHPSPTA HMCBCRD
12.03.2008 never      NY 15AAE9F00D66AC82 PHPSPTA HMCXRL4
12.03.2008 never      NY 164DEE021925D98C PHPSPTA HMPBNDR
12.03.2008 never      NY 164DEDE0153DDC90 PHPSPTA HMPGENX
12.03.2008 never      NY 1619076913430EE0 PHPSPTA RMIGNID
13.03.2008 never      NY 1825FD9200278E86 BP BP9060 BPST000082
13.03.2008 never      NY 15D7894D02F10E00 PHPS53 HMCRES
13.03.2008 never      NY 15D7894D02F10E00 PHPSPTA HMCRES
13.03.2008 never      NY 183577CD126E7FDF WB YWB0083 WSTS0000615A39A80BMVS
14.03.2008 never      NY 183B09F516A89508 WI YWI0087 TOFF0001225A68637AMVS
28.03.2008 never      NY 18261CEB0F4782DA WP YWPL9P1 DBH000012659B8E75BMVS
31.03.2008 never      NY 16D648AB1720988C HP1 AATSRK HPSVP2AATSRK
31.03.2008 never      NY 16AEAEF404FC7943 HP1 AC7VRK HPSVP2AC7VRK
31.03.2008 never      NY 16D648AB1720988C HP3 AATSRK HPSVP2AATSRK
31.03.2008 never      NY 16AEAEF404FC7943 HP3 AC7VRK HPSVP2AC7VRK
02.04.2008 never      NY 18388C3212672D71 MF YMFC010 MFR00001495A537D96
24.04.2008 never      NY 18261CE51D532C8E WP YWPL6P1 DBH000012659B8E72DMVS
29.04.2008 never      NY 183577CF1AB9E03F WB YWB5402 WSTS0000615A39A826MVS
29.04.2008 never      NY 183577DD1FE73077 WB YWB5403 WSTS0000615A39A82CMVS
03.05.2008 never      NY 183310D51F02CDAF MF MF8810 MFR0000148
03.05.2008 never      NY 183310E200D244E6 MF MF8950 MFR0000148
08.05.2008 never      NY 18191F9E017F0146 YY YYWBMTU WSTS000055594BF093MVS
09.05.2008 never      NY 1838643615DB5DBB DE DE0490 DE00000077
09.05.2008 never      NY 183AC1AC18FD05CF WB WB0900 WSTS000061
09.05.2008 never      NY 183B0B0418FC2BB3 WB WB0990 TOFF000122
09.05.2008 never      NY 18261CDE07950EED WP YWPL3P1 DBH000012659B8E6F0MVS
09.05.2008 never      NY 18261CE00FEBB7F2 WP YWPL4P1 DBH000012659B8E702MVS
09.05.2008 never      NY 18261F391CC1A8B0 WP YWPRBPX DBH000012659B8FA95MVS
09.05.2008 never      NY 183862E41EC90A86 WQ YWQ4502 CUBE0001185A522322
09.05.2008 never      NY 183862EB1B19A44B WQ YWQ5601 CUBE0001185A522360
16.06.2008 never      NY 182C6A820E8DE9F2 VV YVVZZ22 VDPS00011759EDC6D8MVS
26.06.2008 never      NY 175DC054012899AA HP1 AOBWRI HPSVP2AOBWRI
26.06.2008 never      NY 175DC054012899AA HP3 AOBWRI HPSVP2AOBWRI
31.07.2008 never      NY 17350BAC016B0E14 HP1 ALS0RI HPSVP2ALS0RI
31.07.2008 never      NY 17350B8B08C196B0 HP1 ALSZRI HPSVP2ALSZRI
31.07.2008 never      NY 17350BAC016B0E14 HP3 ALS0RI HPSVP2ALS0RI
31.07.2008 never      NY 17350B8B08C196B0 HP3 ALSZRI HPSVP2ALSZRI
08.08.2008 never      NY 18333AE4110B2B46 LC YLCTF02 TFBM0000375A26E226
09.08.2008 never      NY 18385BDF1A89AEE7 GM GM7910 GM00000160
30.09.2008 never      NY 173DDD96005235BD HP1 RWBT008 HPSVP2RWBT008
30.09.2008 never      NY 173DDD96005235BD HP3 RWBT008 HPSVP2RWBT008
09.10.2008 never      NY 16A0888008572BBF HP1 AGX3RB HPSVP2AGX3RB
09.10.2008 never      NY 16A0888008572BBF HP3 AGX3RB HPSVP2AGX3RB
28.10.2008 never      NY 16D6490E0810810C HP1 RWBZ050 HPSVP2RWBZ050
28.10.2008 never      NY 16D6490E0810810C HP3 RWBZ050 HPSVP2RWBZ050
11.11.2008 never      NY 162A3BC804FB0F87 HP1 RWBP026 HPSVP2RWBP026
11.11.2008 never      NY 16D648E410D27E96 HP1 RWBP032 HPSVP2RWBP032
11.11.2008 never      NY 162A3BC804FB0F87 HP3 RWBP026 HPSVP2RWBP026
11.11.2008 never      NY 16D648E410D27E96 HP3 RWBP032 HPSVP2RWBP032
11.11.2008 never      NY 162A3BC804FB0F87 HPS RWBP026 HPSVP2RWBP026
13.11.2008 never      NY 183385D71146B2C2 CZ YCZMLIM KLOM0000695A2956D9
21.11.2008 never      NY 17504349151661C8 HP1 AOYQRK HPSVP2AOYQRK
21.11.2008 never      NY 17504349151661C8 HP3 AOYQRK HPSVP2AOYQRK
22.12.2008 never      NY 17350B9B0D3596B1 HP1 AL0NRI HPSVP2AL0NRI
22.12.2008 never      NY 17350B9B0D3596B1 HP3 AL0NRI HPSVP2AL0NRI
15.01.2009 never      NY 1722312103DAC39B HP1 AFJKRK HPSVP2AFJKRK
15.01.2009 never      NY 1722312103DAC39B HP3 AFJKRK HPSVP2AFJKRK
12.02.2009 never      NY 18261CDC1C7C693C WP YWPL4P1 DBH000012659B8E702
13.02.2009 never      NY 18261CDA0A061458 WP YWPL3P1 DBH000012659B8E6F0
03.03.2009 never      NY 16AEAE7712077B01 HP1 AL57RI HPSVP2AL57RI
03.03.2009 never      NY 16AEAE7712077B01 HP3 AL57RI HPSVP2AL57RI
20.03.2009 never      NY 16AEAED002300931 HP1 RWBW042 HPSVP2RWBW042
20.03.2009 never      NY 16AEAED002300931 HP3 RWBW042 HPSVP2RWBW042
01.04.2009 never      NY 173DDD930B385499 HP1 RWBM009 HPSVP2RWBM009
01.04.2009 never      NY 173DDD930B385499 HP3 RWBM009 HPSVP2RWBM009
03.04.2009 never      NY 164ED80A04234325 HP1 RWBP022 HPSVP2RWBP022
03.04.2009 never      NY 164ED80A04234325 HP3 RWBP022 HPSVP2RWBP022
03.04.2009 never      NY 164ED80A04234325 HPS RWBP022 HPSVP2RWBP022
17.04.2009 never      NY 173DE13F0335E2A1 HP1 RWBW072 HPSVP1RWBW072
28.04.2009 never      NY 169C834E0C52F933 HP1 AOVURK HPSVP1AOVURK
28.04.2009 never      NY 173DDD951C3A3244 HP1 RWBM010 HPSVP2RWBM010
28.04.2009 never      NY 173DDD951C3A3244 HP3 RWBM010 HPSVP2RWBM010
29.04.2009 never      NY 16A0895D0A2DE657 HP1 AGRZRI HPSVP2AGRZRI
29.04.2009 never      NY 16A0895D0A2DE657 HP3 AGRZRI HPSVP2AGRZRI
30.04.2009 never      NY 16C87AFB038D1336 HP1 ABTVRI HPSVP1ABTVRI
05.05.2009 never      NY 173DDDB20C77866D HP1 ABWURG HPSVP2ABWURG
05.05.2009 never      NY 16A08860120192B3 HP1 AGXJRB HPSVP2AGXJRB
05.05.2009 never      NY 173DDDB20C77866D HP3 ABWURG HPSVP2ABWURG
05.05.2009 never      NY 16A08860120192B3 HP3 AGXJRB HPSVP2AGXJRB
28.05.2009 never      NY 16D6492B0450987F HP1 AHHSRI HPSVP2AHHSRI
28.05.2009 never      NY 164ED8331D29423C HP1 AN8JRI HPSVP2AN8JRI
28.05.2009 never      NY 164F80B51E01630F HP1 AN8MRI HPSVP1AN8MRI
28.05.2009 never      NY 16D6492B0450987F HP3 AHHSRI HPSVP2AHHSRI
28.05.2009 never      NY 164ED8331D29423C HP3 AN8JRI HPSVP2AN8JRI
28.05.2009 never      NY 164F80B51E01630F HP3 AN8MRI HPSVP1AN8MRI
28.05.2009 never      NY 164ED8331D29423C HPS AN8JRI HPSVP2AN8JRI
29.05.2009 never      NY 16C13CF90B476069 HP1 AJXLRI HPSVP1AJXLRI
17.06.2009 never      NY 16F2B49809BBAC70 HP1 RWBH004 HPSVP2RWBH004
17.06.2009 never      NY 16A088F81F17C61B HP1 RWBM004 HPSVP2RWBM004
17.06.2009 never      NY 16F2B49809BBAC70 HP3 RWBH004 HPSVP2RWBH004
17.06.2009 never      NY 16A088F81F17C61B HP3 RWBM004 HPSVP2RWBM004
25.06.2009 never      NY 175DC0541A4C77C1 HP1 ZBZVFRI HPSVP2ZBZVFRI
25.06.2009 never      NY 175DC0541A4C77C1 HP3 ZBZVFRI HPSVP2ZBZVFRI
26.06.2009 never      NY 16A0887B0AEE9978 HP1 RWBM013 HPSVP2RWBM013
26.06.2009 never      NY 16A0887B0AEE9978 HP3 RWBM013 HPSVP2RWBM013
30.06.2009 never      NY 164ED8230E431387 HP1 RWBP021 HPSVP2RWBP021
30.06.2009 never      NY 16D648661D340171 HP1 RWBP030 HPSVP2RWBP030
30.06.2009 never      NY 173D875118DF66EF HP1 ZAENORL HPSVP1ZAENORL
30.06.2009 never      NY 173D873C04888972 HP1 ZAEOJRL HPSVP1ZAEOJRL
30.06.2009 never      NY 164ED8230E431387 HP3 RWBP021 HPSVP2RWBP021
30.06.2009 never      NY 16D648661D340171 HP3 RWBP030 HPSVP2RWBP030
30.06.2009 never      NY 164ED8230E431387 HPS RWBP021 HPSVP2RWBP021
10.03.2007 30.03.2007 NY 17EED5550BC342B6 CU CU9000 CIFS000142
11.05.2007 30.03.2007 NY 17F1785E18354C15 PC YPC0570 IVN000002457FF4E06
11.05.2007 30.03.2007 NY 17FFA31E1A371168 WF WF0300 WSSW000069
20.03.2007 31.03.2007 NY 17EBB4D70DC58958 WP YWPR2PX DBH000007557CEF456
30.03.2007 31.03.2007 NY 17FB67501F8BE779 DI DI7510 DI00000054
30.03.2007 31.03.2007 NY 1802F6590437496E DP DP0320 DP00000059
31.03.2007 31.03.2007 NY 1802C97E11ED3A7E SN SN5903 NOST000268
31.03.2007 31.03.2007 NY 175FF19F1E28FCE5 XP XP7200 A19R002479
11.05.2007 31.03.2007 NY 1802F4011F2A0A73 FI FI2100 BKUR000052
11.05.2007 31.03.2007 NY 1805C4B109B3797C MF YMFC110 MFR000009758A985D8
31.07.2007 31.03.2007 NY 1775F5C9116FA845 DI YDIU015 A06M02710553F33A22
31.07.2007 31.03.2007 NY 1775F5CA1C99D48D DI YDIU016 A06M02710553F33A2E
09.03.2007 02.04.2007 NY 17B59AD6147117C6 NF YNFBUG NBSI00005056091E27
11.05.2007 02.04.2007 NY 174C801D129F8729 NTA1P CZA0181 A02E00047752976218
12.03.2007 03.04.2007 NY 180318F308466952 WB YWB0082 WSTS00004658931E2C
02.05.2007 03.04.2007 NY 1802EFBD1392C624 CZ CZ5494 ACP0000084
02.05.2007 03.04.2007 NY 1804395F04A1F110 MF MF8930 MFR0000096
02.05.2007 03.04.2007 NY 180409331CD3960A MF MF8940 MFR0000096
02.05.2007 03.04.2007 NY 1805283C161200DE WL WL7390 WSAW000086
11.05.2007 03.04.2007 NY 1802C8E30C5EBDA2 DE DE0100 DE00000043
11.05.2007 03.04.2007 NY 1802C8E6155FC2C3 DE DE0490 DE00000043
11.05.2007 03.04.2007 NY 17B6EFAD008737F5 WB WB0820 WSTS000014
11.05.2007 03.04.2007 NY 18063D0B0189BF11 WB WB0840 WSTS000046
10.08.2007 03.04.2007 NY 1730D0270D76950C YX YXWB021 A06M02422851AF2DFE
10.08.2007 03.04.2007 NY 176D800307A25B5B YY YYWBESM A06M02510853AC4238
10.08.2007 03.04.2007 NY 1730D03119598F52 YY YYWBPRI A06M02422851AF2E54
26.03.2007 05.04.2007 NY 180430F215545EA6 DE DE0430 DE00000043
09.03.2007 06.04.2007 NY 1800BA7C017744A1 WB YWBBOPR WS8B000359587F3ED3
12.03.2007 06.04.2007 NY 17FC840307C84762 ER YERDCUR EAMR000018585BE7D9
12.03.2007 06.04.2007 NY 17F8DEF7178562B3 ER YERDGET EAMR000017583D54F9
26.03.2007 06.04.2007 NY 180430F20CFB6530 DE DE0440 DE00000043
30.03.2007 06.04.2007 NY 1805CA9616A34104 ED ED0960 ED00000047
10.04.2007 06.04.2007 NY 17FEBFE4142131A8 SN YSN111U NOST000268586EA538
25.04.2007 06.04.2007 NY 18038DFC1FC81664 WQ YWQ5601 CUBE0000675896F3F9
11.05.2007 06.04.2007 NY 1804369115B6DA5A EX EX5020 EXPN000059
11.05.2007 06.04.2007 NY 17FEBFE4045D1ECA SN YSN111I NOST000268586EA533
11.05.2007 06.04.2007 NY 180315951FD0A79D WB YWBSA2 WS8B00038058930202
10.08.2007 06.04.2007 NY 17EE08C2069C995B VV YVVZZ24 VDPS00008557E27B46
never      07.04.2007 NY 180437460D67ABCB SV SV0950 WSSV000151
never      07.04.2007 NY 18040A411B62DF86 SV SV5940 WSSV000151
never      07.04.2007 NN 18018A0306D17B38 SV SV8410 WSSV000151
09.03.2007 07.04.2007 NY 17C8C6DB1A523C6E VV YVVZZ11 VDPS00006756A9E387
10.03.2007 07.04.2007 NY 1806E41E19535516 SV SV5740 WSSV000151
10.03.2007 07.04.2007 NY 1806E42800414898 SV SV5760 WSSV000151
11.03.2007 07.04.2007 NY 1804D5561875E4E5 AT AT8500 ACS0000011
12.03.2007 07.04.2007 NY 1804CF620777EF19 WB YWBSYM WS8B00038058A17C05
13.03.2007 07.04.2007 NY 17EBB4D71AFA7A67 WP YWPR6PX DBH000007557CEF45D
11.05.2007 07.04.2007 NY 1802C6690ADAC2E2 VD VDDBM15 DSPV000040
11.05.2007 07.04.2007 NY 1803164F11652F4E WB YWBCTA WS8B00038058930814
09.03.2007 08.04.2007 NY 17EBB4D700922058 WP YWPR1PX DBH000007557CEF455
26.03.2007 08.04.2007 NY 180430EA05006D30 DE DE0050 DE00000043
11.05.2007 08.04.2007 NY 1804B3C41E9469FF WF WF0280 WSSW000069
09.03.2007 09.04.2007 NY 17E19B4B0E45AA31 RT RT5910 RFT0000016
08.05.2007 10.04.2007 NY 180615C4185D4CA5 WQ YWQ4101 CUBE00006758AC2DF1
11.05.2007 10.04.2007 NY 1804A5AB0688C130 RI RI0820 RI00000016
11.05.2007 12.04.2007 NY 17E4C69C0F263440 VV YVVZZ05 VDPS0000775794D107
11.05.2007 12.04.2007 NN 18031F110C4C2B69 YY YYFILOD BKUR00005258935183
04.11.2007 15.04.2007 NY 17D16E75009E2EC5 IT IT5002 RFT0000015
26.03.2007 16.04.2007 NY 1805C0D90EDEB490 DE DE0820 DE00000043
11.05.2007 16.04.2007 NY 17FEAFB209BF994A TN TN0530 OTXO000063
11.05.2007 16.04.2007 AY 1801FBDC0CEF763B WI YWINS05 WS8I0002415889C6B3
never      17.04.2007 NN 180435DB1E0581B4 SV SV0250 WSSV000151
14.03.2007 17.04.2007 NY 1804FD7A1C3AEF0F NO NO0970 NO00000031
26.03.2007 17.04.2007 NY 17E0B2760D79482E YY YYNLCPB MOD000002157729A19
02.04.2007 17.04.2007 NY 1806DFB013F87BBD WF WF5410 WSSW000069
11.05.2007 17.04.2007 NY 180435D91235201F CZ CZ5150 KLOM000057
11.05.2007 17.04.2007 NY 1802EEA7090C9C93 CZ CZ5280 KLOM000057
11.05.2007 17.04.2007 NY 1802F33505B93D63 CZ CZ6400 GSER000152
11.05.2007 17.04.2007 NY 1805C4B1046B91AD CZ CZ6500 GSER000152
11.05.2007 17.04.2007 NY 180644230405DD09 CZ YCZMLIM KLOM00005758ADB2E7
11.05.2007 17.04.2007 NY 180438D91C64FFB9 EC EC5130 KLOM000057
11.05.2007 17.04.2007 NY 180430D8090858D5 FZ FZ0820 FZ00000014
11.05.2007 17.04.2007 NY 180191140E0664DA NI YNI0161 IPC0000175588646FA
11.05.2007 17.04.2007 NY 17DFBFE20F8F2023 NI YNIYTLG IPC0000141576AA733
11.05.2007 17.04.2007 NY 17DFBFE20F8F2023 NI01 YNIYTLG IPC0000141576AA733
11.05.2007 17.04.2007 NY 17DFBFE20F8F2023 NI02 YNIYTLG IPC0000141576AA733
11.05.2007 17.04.2007 NY 1804A5D60BEAF7FE NO NO0960 NO00000031
11.05.2007 17.04.2007 NY 180430DD1856D211 TP TP0800 TP00000016
11.05.2007 17.04.2007 NY 18031B4E0A0BE859 WB WB5280 WSTS000046
11.05.2007 17.04.2007 NY 17C1906501B32E11 WB WB7560 WSTS000034
11.05.2007 17.04.2007 NY 17B4D2BB1EBE88E4 WB WB7561 WSTS000019
11.05.2007 17.04.2007 NY 18052CEA0DA0D14B WQ YWQBERI CUBE00006758A48C9B
never      18.04.2007 NY 1801AB8000E4FC2A PC PC7040 IVN0000028
15.03.2007 18.04.2007 NY 1806432F0022BD35 SN SN5004 NOST000268
15.03.2007 18.04.2007 NY 18020F1F1E3890CD SN SN5901 NOST000268
16.03.2007 18.04.2007 NY 180527A0006F0662 UU UU5170 RS20000066
21.03.2007 18.04.2007 NY 180552661A58394D ER ER5080 EAMR000022
21.03.2007 18.04.2007 NY 1807F9691CD75BD6 ER YERBER EAMR000022
26.03.2007 18.04.2007 NY 180430F207D9CB91 DE DE0420 DE00000043
26.03.2007 18.04.2007 NY 180430F40E919E8E DE DE0810 DE00000043
30.03.2007 18.04.2007 NY 180527DD1FBDE8DC GM GM0850 GM00000113
27.04.2007 18.04.2007 NY 1802C78016235575 SV SV5600 WSSV000151
28.04.2007 18.04.2007 NY 1806E4290CD5B0EC SV SV5790 WSSV000151
02.05.2007 18.04.2007 NY 18063C5E10898939 TN TN7080 OTXO000060
09.05.2007 18.04.2007 NY 17FEBFEB005C1663 SN YSN201I NOST000268586EA569
10.05.2007 18.04.2007 NY 18027D7C14A3884A AP YAPUTGK APEN000039588E05DF
10.05.2007 18.04.2007 NY 180437F41774EF8E CZ CZ6300 KLOM000057
10.05.2007 18.04.2007 NY 18043101039A2862 DE DE5600 DE00000043
10.05.2007 18.04.2007 NY 17FF7F9F045A9FA2 DE DE7120 DE00000064
10.05.2007 18.04.2007 NY 17C2CDA903AEEDFD EC EC7204 DLGR000022
10.05.2007 18.04.2007 NY 17C2CDD40B5308A3 EC EC7206 DLGR000022
10.05.2007 18.04.2007 AY 17EEA6BE0CB65965 ED YED5203 ED0000004057E7A890
10.05.2007 18.04.2007 NY 1802C85C1F2E9631 MF MF7010 MFR0000096
10.05.2007 18.04.2007 NY 180661EF0208A11D PC01 PC5060 IVN0000028
10.05.2007 18.04.2007 NY 180661EF0208A11D PC02 PC5060 IVN0000028
10.05.2007 18.04.2007 NY 180661EF0208A11D PC03 PC5060 IVN0000028
10.05.2007 18.04.2007 NY 180661EF0208A11D PC04 PC5060 IVN0000028
10.05.2007 18.04.2007 NY 180661EF0208A11D PC05 PC5060 IVN0000028
10.05.2007 18.04.2007 NY 180661EF0208A11D PC06 PC5060 IVN0000028
10.05.2007 18.04.2007 NY 180661EF0208A11D PC07 PC5060 IVN0000028
10.05.2007 18.04.2007 NY 18063C1808A5D534 TN TN5016 OTXO000060
10.05.2007 18.04.2007 NY 17F6B956103BB5E8 VV YVVZZ19 VDPS000090582B5250
11.05.2007 18.04.2007 NY 17ECA24500EBBB18 AU YAU190D AURA00005057D6BC08
11.05.2007 18.04.2007 NY 17ECA2441E732C65 AU YAU190I AURA00005057D6BC0B
11.05.2007 18.04.2007 NY 17ECA2461B9D32E9 AU YAU191D AURA00005057D6BC0E
11.05.2007 18.04.2007 NY 17ECA2471C332E9A AU YAU191I AURA00005057D6BC20
11.05.2007 18.04.2007 NY 17B728F71778E3D9 CK YCKT025 DCA0000026
11.05.2007 18.04.2007 NY 180438390F07B769 CZ CZ5190 LOMN000028
11.05.2007 18.04.2007 NY 180436F401135C57 CZ CZ8980 KLOM000057
11.05.2007 18.04.2007 NY 1802C8E40D246A84 DE DE0400 DE00000043
11.05.2007 18.04.2007 NY 180430F51C57199F DE DE0830 DE00000043
11.05.2007 18.04.2007 NY 17D3C42E0C130034 DE DE0860 DE00000028
11.05.2007 18.04.2007 NY 1802F6F208AAEE2B DP DP0920 DP00000059
11.05.2007 18.04.2007 NY 180785CC091F6A55 EX EX5030 EXPN000059
11.05.2007 18.04.2007 NY 180436B1092FE606 EX EX6010 EXPN000059
11.05.2007 18.04.2007 NY 180436AA12896C3A EX EX6020 EXPN000059
11.05.2007 18.04.2007 NN 1802F45412A8FB77 FI FI5200 BKUR000052
11.05.2007 18.04.2007 NY 1804394B1591B5C5 MF MF7230 MFR0000096
11.05.2007 18.04.2007 NY 1804394F058A57E0 MF MF7320 MFR0000096
11.05.2007 18.04.2007 NY 18043950020A39B2 MF MF7330 MFR0000096
11.05.2007 18.04.2007 NY 17EC9ECD040075DA MF MF7550 MFR0000086
11.05.2007 18.04.2007 NY 17EC9ED408C8F881 MF MF7570 MFR0000086
11.05.2007 18.04.2007 NY 17CCDAE2112DCA75 MF MF7901 MFR0000065
11.05.2007 18.04.2007 NY 1804395B017BF843 MF MF8620 MFR0000096
11.05.2007 18.04.2007 NY 180666A6195DEF59 NI YNICS01 IPC000017558AED477
11.05.2007 18.04.2007 NY 1801910010BC740C NI YNILBPL IPC000017558864653
11.05.2007 18.04.2007 NY 180279C2069FFE55 NL NL7310 BALR000059
11.05.2007 18.04.2007 NY 1806192806FD9A76 NL NL7810 BALR000059
11.05.2007 18.04.2007 NY 17FA1F9B14D3A50E NTA1P CZA0199 A02E0005675847D69B
11.05.2007 18.04.2007 NY 180523C3021C394B PC01 YPC0830 IVN000002858A43FD4
11.05.2007 18.04.2007 NY 180523C3021C394B PC02 YPC0830 IVN000002858A43FD4
11.05.2007 18.04.2007 NY 180523C3021C394B PC03 YPC0830 IVN000002858A43FD4
11.05.2007 18.04.2007 NY 180523C3021C394B PC04 YPC0830 IVN000002858A43FD4
11.05.2007 18.04.2007 NY 180523C3021C394B PC05 YPC0830 IVN000002858A43FD4
11.05.2007 18.04.2007 NY 180523C3021C394B PC06 YPC0830 IVN000002858A43FD4
11.05.2007 18.04.2007 NY 180523C3021C394B PC07 YPC0830 IVN000002858A43FD4
11.05.2007 18.04.2007 NY 18066B1F1389EC58 SN YSND008 NOST00026858AEF9FA
11.05.2007 18.04.2007 NY 18090CFE0AB40619 SV SV5740 WSSV000207
11.05.2007 18.04.2007 NY 18090D010DA5D0D1 SV SV5760 WSSV000207
11.05.2007 18.04.2007 NY 1806E42702F137B4 SV SV5780 WSSV000151
11.05.2007 18.04.2007 NY 17F21C560E49E035 TN YTN0021 OTXO0000585804AD7B
11.05.2007 18.04.2007 NY 18031B3518A70288 WB WB0520 WSTS000046
11.05.2007 18.04.2007 NY 18031B390AF22C2A WB WB0530 WSTS000046
11.05.2007 18.04.2007 NY 1804D66E09600D74 WB WB5260 WSTS000046
11.05.2007 18.04.2007 NY 18031B64037FC1E6 WB WB5270 WSTS000046
11.05.2007 18.04.2007 NY 18031B611CB11690 WB WB5290 WSTS000046
11.05.2007 18.04.2007 NY 180708F21550CB34 WB WB5570 WS8B000362
11.05.2007 18.04.2007 NY 177E95F512C8053D WB WB7690 A06M025453
11.05.2007 18.04.2007 NY 17E657C81CE6E037 WC WC8120 OTXO000054
11.05.2007 18.04.2007 NY 18063C2C12B355CA WC WC8410 OTXO000060
11.05.2007 18.04.2007 NY 1803178B0D3FBDD7 WF YWF64CA WSSW00006958931268
11.05.2007 18.04.2007 AY 1801FBE205570271 WI YWINS07 WS8I0002415889C6E7
11.05.2007 18.04.2007 NY 18061B721944490E WQ WQ6010 CUBE000067
12.05.2007 18.04.2007 NY 1802ECC90F8821AF CD CD2590 UPDS000037
22.03.2007 19.04.2007 NY 1804D5EF0CE1C48F YX YXA171C TOFF00008858A1B300
05.04.2007 19.04.2007 NY 1807038F02E95D9A WB YWBSA4 WS8B00038058B3F8A5
11.05.2007 19.04.2007 NY 1802CEB1139525E8 EC YECCRAC SYNC0000205890AF4C
11.05.2007 19.04.2007 NY 1802A70C083C7DB1 ER YERDINS EAMR000022588F62B1
11.05.2007 19.04.2007 NY 18040B790040F871 LC LC0511I TFBM000029589B10A0
11.05.2007 19.04.2007 NY 17EF4B530E948846 LC YLCTF02 TFBM00002857ED0D2F
11.05.2007 19.04.2007 NY 17EEFD800CE6AAF5 LC YLCTF03 TFBM00002857EA8045
11.05.2007 19.04.2007 NY 1802C2FA1F902DA2 PC01 YPC0520 IVN000002858904D09
11.05.2007 19.04.2007 NY 1802C2FA1F902DA2 PC02 YPC0520 IVN000002858904D09
11.05.2007 19.04.2007 NY 1802C2FA1F902DA2 PC03 YPC0520 IVN000002858904D09
11.05.2007 19.04.2007 NY 1802C2FA1F902DA2 PC04 YPC0520 IVN000002858904D09
11.05.2007 19.04.2007 NY 1802C2FA1F902DA2 PC05 YPC0520 IVN000002858904D09
11.05.2007 19.04.2007 NY 1802C2FA1F902DA2 PC06 YPC0520 IVN000002858904D09
11.05.2007 19.04.2007 NY 1802C2FA1F902DA2 PC07 YPC0520 IVN000002858904D09
11.05.2007 19.04.2007 NY 17C55303070C8A0D TR YTRHISP AITR000012568CED33
11.05.2007 19.04.2007 NY 18063D040A63D155 WB WB0630 WSTS000046
11.05.2007 19.04.2007 NY 18063D050822AEDE WB WB0680 WSTS000046
11.05.2007 19.04.2007 NY 18031B4507712C96 WB WB0940 WSTS000046
11.05.2007 19.04.2007 NY 18031B4413F19B92 WB WB0950 WSTS000046
11.05.2007 19.04.2007 NY 18063C2E1FBE5252 WB WB1080 TOFF000088
11.05.2007 19.04.2007 NY 17F21E040606E9F2 WB YWB530 WS8B000320
11.05.2007 19.04.2007 NY 180318F21D2A9178 WB YWBEBSM WSTS00004658931E1A
11.05.2007 19.04.2007 NY 17ECA1220B217446 WB YWBMAS WS8B00031857D6B290
11.05.2007 19.04.2007 NY 17F21CBC110AF1E9 WB YWBSUM WS8B0003185804B0D3
11.05.2007 19.04.2007 NY 1803163913531F47 WB YWBWRK WS8B0003805893075A
11.05.2007 19.04.2007 AY 1801FBDB141B4DD1 WI YWINS03 WS8I0002415889C6AE
16.03.2007 20.04.2007 NY 18061B6D09DBF6CB WQ WQ5950 CUBE000067
26.03.2007 20.04.2007 NY 1805C0D902D50A6A DE DE0030 DE00000043
26.03.2007 20.04.2007 NY 180430EA12DC4D65 DE DE0090 DE00000043
02.04.2007 20.04.2007 NY 1806DFC10F42CCE3 WF YWFSWC WSSW000069
11.05.2007 20.04.2007 NY 17ECA23A082F19C6 AU YAU180D AURA00005057D6BBB4
11.05.2007 20.04.2007 NY 17ECA23B145216C9 AU YAU180I AURA00005057D6BBBE
11.05.2007 20.04.2007 NY 17ECA23E09A5EBC1 AU YAU181D AURA00005057D6BBD6
11.05.2007 20.04.2007 NY 17ECA23E1E25B2EE AU YAU181I AURA00005057D6BBDA
11.05.2007 20.04.2007 NY 17ECA23F077FC922 AU YAU181S AURA00005057D6BBDE
11.05.2007 20.04.2007 NY 1802C8EE1F02D5BC DE DE0060 DE00000043
11.05.2007 20.04.2007 NY 180430F204FD1AB4 DE DE0410 DE00000043
11.05.2007 20.04.2007 NY 18072F571E3CA8C9 DE DE0940 DE00000043
11.05.2007 20.04.2007 NY 18015E540200D86F DE YDE0021 DE0000004358849D3C
11.05.2007 20.04.2007 NY 1802A9731B21AA4B ER YERDUPD EAMR000022588F76E9
11.05.2007 20.04.2007 NY 1806E0C001713BCA MF YMFC113 MFR000009758B2D4AC
11.05.2007 20.04.2007 NY 1804A5AE1C166F9F RI RI0810 RI00000016
11.05.2007 20.04.2007 NY 17FEBFE306118A91 SN YSN110I NOST000268586EA52B
11.05.2007 20.04.2007 NY 17FEBFE404E62B68 SN YSN110U NOST000268586EA531
11.05.2007 20.04.2007 NY 17FEBFD20A3F8B5A SN YSND003 NOST000268586EA49A
11.05.2007 20.04.2007 NY 18081F800CFE1F11 TN YTN0100 OTXO00006058BD4694
11.05.2007 20.04.2007 NY 1802C7421C862CE2 TR TR0810 AITR000031
11.05.2007 20.04.2007 NY 17B4F8970461F9BA TR YTREDBM AITR0000155603CD16
11.05.2007 20.04.2007 NY 17D38554150F85FB VV YVVZZ03 VDPS00007357041232
11.05.2007 20.04.2007 NN 1803E705175E5CF5 WB YWBMOV WS8B0003805899DEB4
11.05.2007 20.04.2007 AY 1801FBDB0D9F9709 WI YWINS02 WS8I0002415889C6AC
11.05.2007 20.04.2007 AY 1801FBE51C423FE4 WI YWINS08 WS8I0002415889C6E9
11.05.2007 21.04.2007 NY 18063CFF01BDDFE7 ER YERDCUR EAMR00002258AD7708
11.05.2007 21.04.2007 NY 1805C85006D53059 ER YERDGET EAMR00002258A9A437
11.05.2007 21.04.2007 NY 180435C80D6714B8 VP VP5310 VIP0000022
11.05.2007 21.04.2007 NY 180660B80CB6185A WF YWFCB02 WSSW00006958AEA2AC
11.05.2007 21.04.2007 NY 18052B911F28B386 WF YWFM537 WSSW00006958A48155
11.05.2007 22.04.2007 NY 17ECA23C00535FE4 AU YAU180S AURA00005057D6BBC2
11.05.2007 22.04.2007 NY 17ECA24502F699F4 AU YAU190S AURA00005057D6BC0C
11.05.2007 22.04.2007 NY 17ECA2471747FF5F AU YAU191S AURA00005057D6BC24
11.05.2007 24.04.2007 AY 1801FBE70E71576C WI YWINS09 WS8I0002415889C707
11.05.2007 27.04.2007 NY 17E32CC10A0EDFD4 OE YOE0610 OE00000010578762EB
11.05.2007 27.04.2007 AY 1801FBDB042EEB8B WI YWINS01 WS8I0002415889C6AA
11.05.2007 27.04.2007 AY 1801FBE11D075D60 WI YWINS06 WS8I0002415889C6B8
11.05.2007 27.04.2007 AY 1801FBE9060B1956 WI YWINS10 WS8I0002415889C714
11.05.2007 29.04.2007 NY 17EDB6E91BA0581C TN YTNBOPH OTXO00005857DFCC97
11.05.2007 29.04.2007 NY 17F15CB5038EB27A TN YTNW170 OTXO00005857FE65F4
11.05.2007 29.04.2007 AY 1801FBDB1F85C719 WI YWINS04 WS8I0002415889C6B1
19.04.2007 30.04.2007 NY 17EDB6E21CDC612C TN YTNOTF OTXO00005857DFCC76
never      05.05.2007 NY 18009915172ACA4B VV YVVZZ25 VDPS000099587E2698
never      05.05.2007 NY 180095250E1F1955 VV YVVZZNR VDPS000099587E0594
11.05.2007 05.05.2007 NY 18072A2A1A022FFA WC WC5010 OTXO000060
11.05.2007 05.05.2007 NY 18072A2C1E82348A WC WC8401 OTXO000060
04.08.2007 05.05.2007 NY 177E95C00FE6F6C0 WB WB7030 A06M025453
04.08.2007 05.05.2007 NY 17D372DC0D51D04A WB WB8720 WSTS000035
02.08.2007 06.05.2007 NY 175FCE5B026E1669 KS YKSFTXT A14S002412533962A5CICS
11.05.2007 07.05.2007 NY 1804A5A1054035F8 ED ED0950 ED00000047
10.05.2007 08.05.2007 NY 1802C8BE0D044217 DE DE5690 DE00000043
05.02.2008 08.05.2007 NY 180C5AFF04674E40 MF MF8950 MFR0000110
10.08.2007 11.05.2007 NY 181052B0019A4DF3 DE DE0430 DE00000061
10.08.2007 11.05.2007 NY 181052B01FA15BBC DE DE0440 DE00000061
10.08.2007 11.05.2007 NY 18015E5309A69D67 DE YDELSTO DE0000004358849D33
10.08.2007 11.05.2007 NY 181051621E31615B MF YMFC110 MFR0000111590212E8
10.08.2007 01.06.2007 NY 18098E231BC93EBF LC LC0511I TFBM00002658C94A27
09.11.2007 01.06.2007 NY 180C843E180653C8 LC YLCTF02 TFBM00002658E22FB0
09.11.2007 01.06.2007 NY 18098E330F7BE27E LC YLCTF03 TFBM00002658C94AB4
10.08.2007 02.06.2007 NY 180C66741D294472 WF WF0280 WSSW000085
10.08.2007 02.06.2007 NY 180C667A1D3AEE28 WF WF0300 WSSW000085
27.06.2007 05.06.2007 NY 180BBC5A03DC0DA2 WB YWBSA4 WS8B00040958DBA2D3
01.08.2007 05.06.2007 NY 17EDE1540DD0C99D DI DI5200 DI00000047
12.05.2007 06.06.2007 NY 17E6570C0D791019 TN TN5030 OTXO000054
08.06.2007 06.06.2007 NY 18090CD11D32C6BA SV SV5940 WSSV000207
10.08.2007 06.06.2007 NY 17FF3A21106BA559 WP YWPR3PX DBH00000835872A69A
11.05.2007 07.06.2007 NY 17ECA08D03882188 WB YWBBODA WS8B00031857D6ADA9
11.05.2007 07.06.2007 NY 180315C2111911C7 WB YWBBOPR WS8B00038058930376
11.05.2007 07.06.2007 NY 180315740B349F48 WB YWBIO WS8B000380589300E4
11.05.2007 07.06.2007 NY 17B3DB0F1F6E5295 WN YWNOLOG FOND00002455FA71E6
12.05.2007 08.06.2007 NY 18031BEA0D8C1911 RT RT5910 TABS000134
02.06.2007 08.06.2007 NY 181051A216390E05 CZ CZ5494 ACP0000098
10.08.2007 10.06.2007 NY 180991520F243939 WB YWBSA2 WS8B00040958C964D3
10.08.2007 12.06.2007 NY 181052B901F834DD DE DE0100 DE00000061
10.08.2007 12.06.2007 NY 18031B3A00453D27 WB WB0580 WSTS000046
14.05.2007 13.06.2007 NY 181117CA19B176CF SV SV0280 WSSV000188
17.05.2007 13.06.2007 NY 18104EBD04339C10 AP YAPUTGK APEN0000405901FCB8
08.06.2007 13.06.2007 NY 18111BB006506198 WB YWB530 WS8B000411
08.08.2007 13.06.2007 NY 181028831F575312 WQ YWQ5601 CUBE0000815900BC28
08.06.2007 14.06.2007 NY 181167BD08F8BE8A SV SV5740 WSSV000188
08.06.2007 14.06.2007 NY 181167D119F6601E SV SV5760 WSSV000188
08.06.2007 14.06.2007 NY 18104EC01CD11CB0 WB WB0520 WSTS000051
08.06.2007 14.06.2007 NY 18104EC006E59145 WB WB0530 WSTS000051
08.06.2007 14.06.2007 NY 18031B401E57AFB5 WB WB0600 WSTS000046
08.06.2007 14.06.2007 NY 18104EB6186FD50D WB WB0630 WSTS000051
08.06.2007 14.06.2007 NY 18104EB713C20790 WB WB0680 WSTS000051
08.06.2007 14.06.2007 NY 18104EC90D674E44 WB WB0940 WSTS000051
08.06.2007 14.06.2007 NY 18104EBC1A502B0A WB WB0950 WSTS000051
16.05.2007 18.06.2007 NY 181163D20DF8717D WQ WQ5950 CUBE000081
07.06.2007 19.06.2007 NY 18111B5904BB0BDA ER YERPRI EAMR000028
08.06.2007 19.06.2007 NY 1812FD400DA6B1F5 SV SV0280 WSSV000225
24.05.2007 20.06.2007 NY 1811132F09383B22 TN TN7080 OTXO000066
07.06.2007 20.06.2007 NY 17A899A00007E47D CZ CZ7030 APEN000014
07.06.2007 20.06.2007 NY 18104E6103B08172 ER ER5080 EAMR000028
07.06.2007 20.06.2007 NY 180FD3551D55D036 ER YERBER EAMR000028
08.06.2007 20.06.2007 NY 180C5A551ADF4A41 MF MF8620 MFR0000110
08.06.2007 20.06.2007 NY 180EE0950EB83E0A VV YVVZZ28 VDPS00010858F5FD2B
08.06.2007 20.06.2007 NY 18111B6715B5819C WB WB5570 WS8B000411
08.06.2007 20.06.2007 NY 18104EFA0D57BBEC WC WC8410 OTXO000066
09.08.2007 20.06.2007 NY 177D37590992CE08 FI YFI0110 A06M02733354301877
08.06.2007 22.06.2007 NY 1811639F1D102779 DE DE0030 DE00000061
08.06.2007 22.06.2007 NY 181052CB0F5FACDF DE DE0420 DE00000061
08.06.2007 22.06.2007 NY 180FFD741B9FE6EF NI YNILBPL IPC000019258FF52EF
23.05.2007 23.06.2007 NY 18134B330222F350 WQ WQ5950 CUBE000100
08.06.2007 23.06.2007 NY 1800DF8F18D4B675 BP YBPMUT BPST000045588075D1
08.06.2007 29.06.2007 NY 180A78E3046E08F6 CZ YCZMLIM KLOM00006158D0FB62
08.06.2007 29.06.2007 NY 181052C5090F1E5B DE DE0810 DE00000061
08.06.2007 29.06.2007 NY 1811639F1915DC41 DE DE0820 DE00000061
08.06.2007 29.06.2007 NY 181163C717B744FC GM GM0850 GM00000132
08.06.2007 29.06.2007 NY 17FC0CB31216ACA1 VV YVVZZ04 VDPS0001035857FF0A
08.06.2007 29.06.2007 NY 180FCC600B7A0A2C WB YWBBOPR WS8B00040958FDB730
08.06.2007 29.06.2007 NY 1811DF49016C2500 WF WF5410 WSSW000085
08.06.2007 30.06.2007 NY 18104EED145B9FE5 WC WC5010 OTXO000066
08.06.2007 30.06.2007 NY 18104EFF187EAA32 WC WC8120 OTXO000066
08.06.2007 30.06.2007 NY 18104EEF1D7198E1 WC WC8401 OTXO000066
04.08.2007 30.06.2007 NY 18031B550608B4EE WB WB5120 WSTS000046
04.08.2007 30.06.2007 NY 17E6582300ED4DF9 WB WB7020 WSTS000039
04.08.2007 30.06.2007 NY 177E95DB1644FF30 WB WB7360 A06M025453
08.06.2007 01.07.2007 NY 180E17360852A7CA WB YWBEBSM WSTS00005158EF63FE
30.05.2007 02.07.2007 NY 181463E219509849 WQ WQ5950 CUBE000101
08.06.2007 02.07.2007 NY 17F79CF810A7E370 TN YTNUPD OTXO0000615832C7DD
10.08.2007 02.07.2007 NY 181052D20CD33C51 DE DE0050 DE00000061
08.06.2007 03.07.2007 NY 181579F50ABB256D WQ WQ5950 CUBE000103
08.06.2007 05.07.2007 NY 18104ECF12EF2AA4 WB WB5280 WSTS000051
10.08.2007 05.07.2007 NY 181052BB1CFC5B79 DE DE0490 DE00000061
10.08.2007 05.07.2007 NY 178C25361558E594 KS YKSISOC CSED00000554AD468E
09.06.2007 06.07.2007 NY 1814DA68156F3251 TN TN7080 OTXO000076
09.06.2007 06.07.2007 NY 1815CC1D0ACA3EBE WC WC5010 OTXO000073
10.08.2007 06.07.2007 NY 1809135E1ECC1829 SV SV0950 WSSV000208
10.08.2007 06.07.2007 NY 180C621E0277D9C2 SV SV5780 WSSV000188
10.08.2007 06.07.2007 NY 1811E3D903AEE322 SV SV5790 WSSV000188
10.08.2007 06.07.2007 NY 1812F22F14165F0C SV SV5940 WSSV000195
10.08.2007 07.07.2007 NY 17FC5F2D1A76F396 VD YVD0721 DSPV000040585AB2F8
11.08.2007 07.07.2007 NY 1809B5BF07D12AC6 VD VDDBM15 DSPV000041
10.08.2007 08.07.2007 NY 180B663101E0FC48 TN YTN0021 OTXO00006658D8D017
10.08.2007 08.07.2007 NY 1809603A0BEFEB25 TN YTNBOPH OTXO00006658C7C906
10.08.2007 08.07.2007 NY 180618DA0815EE09 TN YTNSICH OTXO00006058AC46FF
10.08.2007 08.07.2007 NY 17FBE2B60642ED14 TN YTNW100 OTXO00006358569ED9
10.08.2007 08.07.2007 NY 180B99CD097AF661 TN YTNW170 OTXO00006658DA8107
10.08.2007 08.07.2007 NY 18148BF51CE92690 VV YVVZZ04 VDPS00011259258C31
10.08.2007 08.07.2007 NY 18104ED9037C0A73 WB WB0980 TOFF000099
10.08.2007 08.07.2007 NY 18104ED4125908F5 WB WB0990 TOFF000099
11.08.2007 08.07.2007 NY 180AC4871B3BFD99 VV YVVZZ05 VDPS00010858D375E2
11.08.2007 08.07.2007 NY 18031C7C0C9537CE VV YVVZZ3R VDPS00009958933BE0
05.08.2007 09.07.2007 NY 17FF2EF11F05701F VD VDUTI41 DSPV000040
10.08.2007 09.07.2007 NY 17ED16951F6126F5 EQ YEQKDGP GSER00010957DA8BC7
10.08.2007 09.07.2007 NN 1815CCAA138ADEAC TN YTNUPD OTXO00007359300B05
10.08.2007 09.07.2007 NY 1800E6191D0FC84E VV YVVZZ11 VDPS0000995880ACAB
10.08.2007 09.07.2007 NY 180314D608B4A6D9 WB YWBDGP WS8B0003805892FBB2
10.08.2007 09.07.2007 NY 180314DA0AABE2EE WB YWBDGP2 WS8B0003805892FBD7
10.08.2007 10.07.2007 NY 180A5AD40949C332 VV YVVZZ03 VDPS00010858CFFF3B
10.08.2007 10.07.2007 NY 1800E622084051D1 VV YVVZZ15 VDPS0000995880ACF1
10.08.2007 10.07.2007 NY 18031C751F3F8679 VV YVVZZ1R VDPS00009958933B9C
10.08.2007 10.07.2007 AY 180C5F6A16EF5B6E WI YWINS09 WS8I00026558E0FABE
11.08.2007 10.07.2007 NY 180AAC5C0209D06B YX YXA171C TOFF00010858D2AB30
03.08.2007 11.07.2007 NY 181A2FFE00649D5A ER YERPRI EAMR000042
10.08.2007 11.07.2007 NY 180FFE061346227D CD CD2590 UPDS000043
10.08.2007 11.07.2007 NY 18116381121C24EB CZ CZ5150 KLOM000061
10.08.2007 11.07.2007 NY 1810504417885C86 CZ CZ5280 KLOM000061
10.08.2007 11.07.2007 NY 1810511C0834D82C CZ CZ6400 GSER000162
10.08.2007 11.07.2007 NY 18105125038E7432 CZ CZ6500 GSER000162
10.08.2007 11.07.2007 NY 17E88CAE1C1C2F51 CZ YCZJ323 GSER00010957B4790C
10.08.2007 11.07.2007 NY 17F136DA044949ED CZ YCZJ431 GSER00012257FD2866
10.08.2007 11.07.2007 NY 17B5CD5D07BD94DC CZ YCZT235 GSER000027560AC600
10.08.2007 11.07.2007 NY 17D2417F030A32B6 CZ YCZT385 GSER00004756F975B2
10.08.2007 11.07.2007 NY 17B5CC800C26CAFC CZ YCZT397 GSER000027560ABEC3
10.08.2007 11.07.2007 NY 18169048009D5496 DE DE0030 DE00000063
10.08.2007 11.07.2007 NY 181052C21779B1FE DE DE0400 DE00000061
10.08.2007 11.07.2007 NY 1816714404901F14 DE DE0810 DE00000063
10.08.2007 11.07.2007 NY 181052C1121CDA6F DE DE0860 DE00000061
10.08.2007 11.07.2007 NY 181052C00E02499E DE DE0940 DE00000061
10.08.2007 11.07.2007 NY 180B6BEC02BE25F8 DE YDE0021 DE0000006158D9002C
10.08.2007 11.07.2007 NY 180BEBC21B6D68D2 EC EC5130 KLOM000061
10.08.2007 11.07.2007 NY 1810C2C401716D32 ED ED0950 ED00000052
10.08.2007 11.07.2007 NY 181671C205733A31 GM GM0850 GM00000144
10.08.2007 11.07.2007 NY 17B5D1DA1248013A KR YKRT511 KAUF000015560AEBA9
10.08.2007 11.07.2007 NY 177D565B0BD5E0D5 KX YKXO002 CRMA00397654311C87
10.08.2007 11.07.2007 NY 1810C27A02661734 RI RI0810 RI00000019
10.08.2007 11.07.2007 NY 17C89DC91C3BB369 RM YRMORGP PARS00004956A88B07
10.08.2007 11.07.2007 NY 1819E9931AB47AFA TN TN0530 WS8B000468
10.08.2007 11.07.2007 NY 180F0FD312B47284 TN YTNOTF OTXO00007158F7898E
10.08.2007 11.07.2007 NY 180A79E40309AEE1 TR YTRHISP AITR00003558D103CA
10.08.2007 11.07.2007 NY 178CE81217F4E0EA VD VDINI01 DSPV000001
10.08.2007 11.07.2007 NY 17FC5F2E1C3D2D8C VD YVD0722 DSPV000040585AB301
10.08.2007 11.07.2007 NY 180417D413BD2DB0 VV YVVZZ10 VDPS000099589B784A
10.08.2007 11.07.2007 NY 1804122B1E178FF9 VV YVVZZ12 VDPS000099589B48CE
10.08.2007 11.07.2007 NY 179BB5890764E3F1 VW YVWB641 WSTS000003552FE2D3
10.08.2007 11.07.2007 NY 1819E998093144B4 WB WB0530 WS8B000468
10.08.2007 11.07.2007 NY 18166D1E1A447645 WB WB0600 WSTS000056
10.08.2007 11.07.2007 NY 1819E99F1E49A95D WB WB0630 WS8B000468
10.08.2007 11.07.2007 NY 18031B540F96DB33 WB WB0660 WSTS000046
10.08.2007 11.07.2007 NY 1819E9AB19248670 WB WB0680 WS8B000468
10.08.2007 11.07.2007 NY 18031B3E19486761 WB WB0830 WSTS000046
10.08.2007 11.07.2007 NY 1819E9A90F687615 WB WB0940 WS8B000468
10.08.2007 11.07.2007 NY 18031B5F18E00183 WB WB1340 WSTS000046
10.08.2007 11.07.2007 NY 1819E9DB050D93E2 WB WB5280 WS8B000468
10.08.2007 11.07.2007 NY 17D372DD042630B7 WB WB7040 WSTS000035
10.08.2007 11.07.2007 NY 177E95D116F98055 WB WB7290 A06M025453
10.08.2007 11.07.2007 NY 17D372DE14DB5C15 WB WB7370 WSTS000035
10.08.2007 11.07.2007 NY 17D372E304B63DA2 WB WB7390 WSTS000035
10.08.2007 11.07.2007 NY 17BF5DCF0D4AB25A WB WB7520 WSTS000023
10.08.2007 11.07.2007 NY 178CF04C070E79F4 WB WB7540 WSTS000001
10.08.2007 11.07.2007 NY 18104ED41238DDBD WB WB7560 WSTS000051
10.08.2007 11.07.2007 NY 18104ED21C9722AD WB WB7561 WSTS000051
10.08.2007 11.07.2007 NY 177E95F117458ED9 WB WB7650 A06M025453
10.08.2007 11.07.2007 NY 17D372DC12202830 WB WB7871 WSTS000035
10.08.2007 11.07.2007 NY 177E96191AA7B6A1 WB WB7880 A06M025453
10.08.2007 11.07.2007 NY 1815CC8806CB9A1F WB YWB530 WS8B000441
10.08.2007 11.07.2007 NY 17E516BD07F41266 WB YWB551 WS8B00028657977132
10.08.2007 11.07.2007 NY 180A2785079897FA WB YWBBODA WS8B00040958CE50CE
10.08.2007 11.07.2007 NY 1819E244056C3EAA WB YWBBOPR WS8B000468595251AE
10.08.2007 11.07.2007 NY 1819BB8A110EB8EB WB YWBEBSM WS8B00046859510C08
10.08.2007 11.07.2007 NY 18093A250578AC7C WB YWBIO WS8B00040958C6898F
10.08.2007 11.07.2007 NY 17EDDBA5064280AA WB YWBITV TOFF00007657E100DB
10.08.2007 11.07.2007 NY 181646700BE59260 WF WF5410 WSSW000090
10.08.2007 11.07.2007 NY 180CAFFF08A04C4A WF YWFCB02 WSSW00008558E39EB2
10.08.2007 11.07.2007 NY 180CAFFF1DEE1D8E WF YWFM537 WSSW00008558E39EB7
10.08.2007 11.07.2007 NY 1811DFA102DD4450 WF YWFSWC WSSW000085
10.08.2007 11.07.2007 AY 180C5F3E18D106B6 WI YWINS01 WS8I00026558E0F951
10.08.2007 11.07.2007 AY 180C5F4503E746ED WI YWINS02 WS8I00026558E0F987
10.08.2007 11.07.2007 AY 180C5F4A09013A95 WI YWINS03 WS8I00026558E0F9B1
10.08.2007 11.07.2007 AY 180C5F4D11B59A92 WI YWINS04 WS8I00026558E0F9CC
10.08.2007 11.07.2007 AY 180C5F530F262C68 WI YWINS05 WS8I00026558E0F9FF
10.08.2007 11.07.2007 AY 180C5F560F3847AD WI YWINS06 WS8I00026558E0FA18
10.08.2007 11.07.2007 AY 180C5F5C196B3B99 WI YWINS07 WS8I00026558E0FA4E
10.08.2007 11.07.2007 AY 180C5F6218774F92 WI YWINS08 WS8I00026558E0FA7F
10.08.2007 11.07.2007 AY 180C5F6D1BC6ED66 WI YWINS10 WS8I00026558E0FADA
10.08.2007 11.07.2007 NY 17FF39781B9ECCB1 WP YWPRAPX DBH00000835872A114
10.08.2007 11.07.2007 NY 17FF39730E410F4B WP YWPRBPX DBH00000835872A0E8
10.08.2007 11.07.2007 NY 17FF39CA01B28C8A WP YWPRCPX DBH00000835872A3BB
10.08.2007 11.07.2007 NY 181691080B96EE2E WQ WQ5950 CUBE000083
10.08.2007 11.07.2007 NY 17EEFD6302059005 WQ YWQEXCP CUBE00005657EA7F5E
10.08.2007 11.07.2007 NY 1730D0251C726E5D YX YXWB011 A06M02422851AF2DED
10.08.2007 11.07.2007 NY 1730D01A0AB15D42 YX YXWB116 A06M02422851AF2D8E
10.08.2007 11.07.2007 NY 1730D02D1058CD31 YX YXWB231 A06M02422851AF2E38
10.08.2007 11.07.2007 NY 17EE2A8D130CEC43 YY YYDB2FK TOFF00007657E396C1
10.08.2007 11.07.2007 NY 177D376110AD5D9E YY YYFIKST A06M027333543018B2
10.08.2007 11.07.2007 NY 17ECC60D1B971F0A YY YYWB101 WS8B00031857D7E845
11.08.2007 11.07.2007 NY 17B3DCA20DA4EC97 CD YCDOGEC KUBE000026
11.08.2007 11.07.2007 NY 17A778591CDD885E NTA1P CZA0215 A02E00054455928C16
11.08.2007 11.07.2007 NY 180323EE1C786D10 NZ NZDBM83 ZVBI000016
11.08.2007 11.07.2007 NY 17E0892B04DF4477 VD VDDBM01 DSPV000030
11.08.2007 11.07.2007 NY 177E9A5B18ACFDE9 VD VDDBM04 A14S002541
11.08.2007 11.07.2007 NY 1802C64E09C96318 VD VDGLH00 DSPV000040
11.08.2007 11.07.2007 NY 17D372DE15F73A29 WB WB7400 WSTS000035
11.08.2007 11.07.2007 NY 18063C7300805687 WB WB8010 TOFF000088
11.08.2007 11.07.2007 NY 17FF3ED2069F17C7 WP YWPL5P1 DBH00000835872CDF6
11.08.2007 11.07.2007 NY 17FF3EEB12546D41 WP YWPL8P1 DBH00000835872CECA
11.06.2007 12.07.2007 NY 181487570A9CBF92 WB YWBBOPR WS8B00044159256574
10.08.2007 12.07.2007 NY 17C94C330333FA66 CZ YCZT328 GSER00009056AE4211
10.08.2007 12.07.2007 NY 17E0892D10D30CB5 VD VDREC00 DSPV000030
10.08.2007 12.07.2007 NY 17D372D8179BF8A7 WB WB7270 WSTS000035
10.08.2007 12.07.2007 NY 1807601D13CE201F WB WB7730 WSTS000046
10.08.2007 12.07.2007 NY 1815CC300E92FA2C WC WC8410 OTXO000073
11.08.2007 12.07.2007 NY 17B5D1790F2E75B0 KR YKRT385 VEFO000008560AE85C
11.08.2007 12.07.2007 NY 17B5D17900FEA714 KR YKRT397 VEFO000008560AE862
11.08.2007 12.07.2007 NY 180760180079CDF5 WB WB7320 WSTS000046
11.08.2007 12.07.2007 NY 1807601913BC34F4 WB WB7330 WSTS000046
11.08.2007 12.07.2007 NY 1807601C03C093F7 WB WB7340 WSTS000046
11.08.2007 12.07.2007 NY 177E95E50526E634 WB WB7380 A06M025453
11.08.2007 12.07.2007 NY 177E95E102DA3E20 WB WB7381 A06M025453
10.08.2007 13.07.2007 NY 181052D01D4BF7E0 DE DE0090 DE00000061
10.08.2007 13.07.2007 NY 17D6BE7C089B67B1 DI YDIT015 DI00000042571F1C16
14.06.2007 15.07.2007 NY 1802EC30120399DE CZ YCZJABW GSER0001525891A6AF
14.06.2007 15.07.2007 NY 1802A00E191EC8DF CZ YCZPABW GSER000152588F2812
29.06.2007 31.07.2007 NY 18104EE814900FEA TN TN0530 OTXO000066
31.07.2007 31.07.2007 NY 180BEB971B99C254 DI DI7510 DI00000058
09.08.2007 31.07.2007 NY 176D80010C2BC972 WB YWB5417 A06M02510853AC422D
10.08.2007 31.07.2007 NY 17B27CD50BBB2390 GM YGMSTEU GM0000003655EEF7FB
31.07.2007 01.08.2007 NY 17FB3B7A0A8CAD31 RA RA7240 EGB0000025
01.08.2007 01.08.2007 NY 17A6138E00CF7951 NL NL7590 BALR000005
01.08.2007 01.08.2007 NY 1810513401AD8E4E SN SN5903 SAVS000001
01.08.2007 01.08.2007 NY 181051CF09ECC1F2 WQ WQ6000 CUBE000081
02.08.2007 01.08.2007 NY 17675CAB17BF175C YY YYUWI A19R0024915378C4EF
03.08.2007 01.08.2007 NY 17FF3A341B359E5D WP YWPR5PX DBH00000835872A738
10.08.2007 01.08.2007 AY 17FF771B08CF35B5 WI YWI5951 WS8I0002415874A622
10.08.2007 01.08.2007 AY 17FF772510327044 WI YWI5959 WS8I0002415874A674
03.11.2007 01.08.2007 NY 181B48F2011210A5 TN TN5015 OTXO000070
03.11.2007 01.08.2007 NY 18191C8603A06FC5 TN YTN5012 OTXO000070594BD57CMVS
03.11.2007 01.08.2007 NY 18191C90082C554C TN YTN5013 OTXO000070594BD582MVS
10.08.2007 02.08.2007 NY 17D492130747E397 TN YTN0210 OTXO000045570CE08E
10.08.2007 02.08.2007 NY 180A28B1196278DC WB YWBCTA WS8B00040958CE5AAC
10.08.2007 02.08.2007 NY 18093C381477987A WB YWBSUM WS8B00040958C69AFA
10.08.2007 02.08.2007 NY 17FF39EE0C252AB5 WP YWPR1PX DBH00000835872A4ED
06.07.2007 03.08.2007 NY 17FF3EF300B6F933 WP YWPL9P1 DBH00000835872CF09
28.06.2007 07.08.2007 NY 18166C5B0817B4F8 ER YERPRI EAMR000034
28.06.2007 07.08.2007 NY 18163D2B1C5C9CE5 WB WB5280 WSTS000056
28.06.2007 07.08.2007 NY 1815CC701862E0F0 WB WB5570 WS8B000441
28.06.2007 07.08.2007 NY 17D372E40D10EA5F WB WB7440 WSTS000035
28.06.2007 07.08.2007 NY 17D372E0058EF4F5 WB WB7441 WSTS000035
29.06.2007 07.08.2007 NY 1815CBEF0E29C722 WB WB0630 WSTS000056
09.08.2007 07.08.2007 NY 180FFACB094AC581 CZ CZ6300 KLOM000061
09.08.2007 07.08.2007 NY 1810528008E6E8F6 DE DE5600 DE00000061
09.08.2007 07.08.2007 NY 181052860C2D5F16 DE DE5690 DE00000061
09.08.2007 07.08.2007 NY 181052820F2583C1 DE DE7120 DE00000061
09.08.2007 07.08.2007 NY 180C5B4A17C399BC EC EC7204 DLGR000039
09.08.2007 07.08.2007 NY 180C5B4D1348A5CC EC EC7206 DLGR000039
09.08.2007 07.08.2007 NY 180C59D20DD3F08C MF MF7010 MFR0000110
09.08.2007 07.08.2007 NY 17EF2063033DACDE RT RT5120 TABS000121
09.08.2007 07.08.2007 NY 1810511C040E0F31 SN SN5001 SAVS000001
09.08.2007 07.08.2007 NY 17D4BDE2007918FE TN TN5014 OTXO000045
09.08.2007 07.08.2007 NY 17D372DB0A5DFAF0 WB WB7770 WSTS000035
10.08.2007 07.08.2007 NY 17FEBFE101E872A1 SN YSN100S NOST000268586EA518
10.08.2007 07.08.2007 NY 17FEBFE601503D12 SN YSN183I NOST000268586EA543
10.08.2007 07.08.2007 NY 1810500B0216C17E SN YSN202I SAVS00000159020731
10.08.2007 07.08.2007 NY 181050A813EDA1C7 SN YSND007 SAVS00000159020CA9
10.08.2007 07.08.2007 NY 181050B6129AAFC8 SN YSND008 SAVS00000159020CEE
10.08.2007 07.08.2007 NY 18111CB31CAE9549 SN YSND010 SAVS0000015908BC89
10.08.2007 07.08.2007 NY 17B6EFAF17EDB46A WB WB0960 WSTS000014
10.08.2007 07.08.2007 NY 180A332D044BF7FF WF YWF64CA WSSW00008558CEB299
10.08.2007 07.08.2007 NY 17FF3A170C603B54 WP YWPR2PX DBH00000835872A647
10.08.2007 07.08.2007 NY 17FFB0C613A55FDE WP YWPU1P5 DBH0000083587689E2
28.06.2007 08.08.2007 NY 18063C231C9B1DE5 TN TN5004 OTXO000060
29.06.2007 08.08.2007 NY 1815A3EA1D2C7B70 ER YERBER EAMR000034
29.06.2007 08.08.2007 NY 1815CC66082A96BE WB WB0530 WS8B000441
29.06.2007 08.08.2007 NY 18104EC80F091F37 WB WB5270 WSTS000051
29.06.2007 08.08.2007 NY 18104ED9034E19E8 WB WB5290 WSTS000051
29.06.2007 08.08.2007 NY 1817624A17ABF493 WC WC5010 OTXO000077
29.06.2007 08.08.2007 NY 1815CC3708A02B0D WC WC8120 OTXO000073
29.06.2007 08.08.2007 NY 1815CC321B23A971 WC WC8401 OTXO000073
09.07.2007 08.08.2007 NY 181028540E38A2FE WQ YWQBERI CUBE0000815900BA99
21.07.2007 08.08.2007 NY 18167417130F530E ER ER5080 EAMR000034
30.07.2007 08.08.2007 NY 177B50520E6A6E4B IT YITD01 A20Y001509542022FD
30.07.2007 08.08.2007 NY 177B504C1BA38CE8 IT YITD02 A20Y001509542022D1
02.08.2007 08.08.2007 NY 1817818400929666 CZ CZ5494 ACP0000111
02.08.2007 08.08.2007 NY 17E083F71D377199 CZ YCZT724 ACP000005657711403
02.08.2007 08.08.2007 NY 17E1F71912E5D9B1 CZ YCZT726 ACP0000056577D3D5C
02.08.2007 08.08.2007 NY 180C5AFC0A7C6EDC MF MF8930 MFR0000110
02.08.2007 08.08.2007 NY 17BB227116D89518 VV YVVZZ08 VDPS00005256377304
08.08.2007 08.08.2007 NY 180B4212093324F8 SV SV5150 WSSV000188
09.08.2007 08.08.2007 AY 1810C2560D959EF6 ED YED5203 ED000000525905C672
09.08.2007 08.08.2007 NY 1804DCFF0D79368E PC PC5150 IVN0000028
09.08.2007 08.08.2007 NY 180C58F90FF243F6 PC01 PC5060 IVN0000030
09.08.2007 08.08.2007 NY 180C58F90FF243F6 PC02 PC5060 IVN0000030
09.08.2007 08.08.2007 NY 180C58F90FF243F6 PC03 PC5060 IVN0000030
09.08.2007 08.08.2007 NY 180C58F90FF243F6 PC04 PC5060 IVN0000030
09.08.2007 08.08.2007 NY 180C58F90FF243F6 PC05 PC5060 IVN0000030
09.08.2007 08.08.2007 NY 180C58F90FF243F6 PC06 PC5060 IVN0000030
09.08.2007 08.08.2007 NY 180C58F90FF243F6 PC07 PC5060 IVN0000030
09.08.2007 08.08.2007 NY 17EF205E00112D3D RT RT5110 TABS000121
09.08.2007 08.08.2007 NY 17EF206509CEF087 RT RT5130 TABS000121
09.08.2007 08.08.2007 NY 17EF20670798077E RT RT5140 TABS000121
09.08.2007 08.08.2007 NY 18104EFE0554BB5E TN TN5016 OTXO000066
09.08.2007 08.08.2007 NY 177E95E91BBF48AA WB WB7470 A06M025453
10.08.2007 08.08.2007 NY 18139AF81D465774 AP YAPUTGK APEN000046591DA6B5
10.08.2007 08.08.2007 NY 1811639413083DBA CZ CZ5190 LOMN000029
10.08.2007 08.08.2007 NY 180A7F4A1D3762B7 ER YERDINS EAMR00002858D1311B
10.08.2007 08.08.2007 NY 180C59E3156A5FE0 MF MF7230 MFR0000110
10.08.2007 08.08.2007 NY 180C5A071A5F9867 MF MF7550 MFR0000110
10.08.2007 08.08.2007 NY 180C5A090A204F52 MF MF7901 MFR0000110
10.08.2007 08.08.2007 NY 18145E6F1BB57FFF MF MF8620 MFR0000127
10.08.2007 08.08.2007 NY 180A76EE1874F4E7 NI YNICL01 IPC000019258D0EAF8
10.08.2007 08.08.2007 NY 180B90A1009DD96F NI YNICS01 IPC000019258DA340A
10.08.2007 08.08.2007 NY 17E2E0E811835ADE NI YNIPACU IPC00001415784E6AB
10.08.2007 08.08.2007 NY 17C2D2890B97CEE1 NI YNIPREU IPC00001235677F09E
10.08.2007 08.08.2007 NY 17E2E0E811835ADE NI01 YNIPACU IPC00001415784E6AB
10.08.2007 08.08.2007 NY 17E2E0E811835ADE NI02 YNIPACU IPC00001415784E6AB
10.08.2007 08.08.2007 NY 1808754616BC7D5C NL NL7810 BALR000067
10.08.2007 08.08.2007 NY 180070031036C12C PC PC5090 IVN0000028
10.08.2007 08.08.2007 NY 17FFCE6B1860F4FF PC PC7030 IVN0000028
10.08.2007 08.08.2007 NY 17FFCE721AAECE28 PC PC8000 IVN0000028
10.08.2007 08.08.2007 NY 1810511F10CC8DD2 SN SN5003 SAVS000001
10.08.2007 08.08.2007 NY 1810512209D0EFF9 SN SN5004 SAVS000001
10.08.2007 08.08.2007 NY 181051241B20D9B1 SN SN5006 SAVS000001
10.08.2007 08.08.2007 NY 18104FDD1F6A48C3 SN YSN111I SAVS000001590205C6
10.08.2007 08.08.2007 NY 181050CF14ECC654 SN YSND012 SAVS00000159020DCD
10.08.2007 08.08.2007 NY 181050D5060FD9A2 SN YSND013 SAVS00000159020E14
10.08.2007 08.08.2007 NY 1811E3D01C738FD4 SV SV5600 WSSV000188
10.08.2007 08.08.2007 NY 18144063123CD895 SV SV5740 WSSV000195
10.08.2007 08.08.2007 NY 1814406B04C43F02 SV SV5750 WSSV000195
10.08.2007 08.08.2007 NY 1814406C0D30AECA SV SV5760 WSSV000195
10.08.2007 08.08.2007 NY 1812F65D1E15FCEA TN TN5030 OTXO000074
10.08.2007 08.08.2007 NY 18175BBA0E8A3345 TN TN7080 OTXO000078
10.08.2007 08.08.2007 NY 180BE16207F0CF6D UU UU5170 RS20000072
10.08.2007 08.08.2007 NY 17D1487C040559CA VV YVVZZ14 VDPS00007356F13EBD
10.08.2007 08.08.2007 NY 17DF96EA02265E28 VV YVVZZ17 VDPS00007757694F83
10.08.2007 08.08.2007 NY 1800E6D21E2DC7C2 VV YVVZZ18 VDPS0000995880B2BF
10.08.2007 08.08.2007 NY 180EC58D00E8AED7 VV YVVZZ19 VDPS00010858F51A6F
10.08.2007 08.08.2007 NY 17F131F207DBDFD6 VV YVVZZ20 VDPS00009057FCFF37
10.08.2007 08.08.2007 NY 17EFCEC30F2CA722 VV YVVZZ23 VDPS00008557F15BB7
10.08.2007 08.08.2007 NY 180E18DB12A73DBD VV YVVZZ27 VDPS00010858EF71CF
10.08.2007 08.08.2007 NY 18146AED0C20DBC8 VV YVVZZ28 VDPS00011259247724
10.08.2007 08.08.2007 NY 18102799142FE518 VV YVVZZ29 VDPS0001085900B473
10.08.2007 08.08.2007 NY 18031C6D0AA55941 VV YVVZZGR VDPS00009958933B61
10.08.2007 08.08.2007 NY 180EC12E1AF0FF45 VV YVVZZQR VDPS00010858F4F5CB
10.08.2007 08.08.2007 NY 1804D66E00920D38 WB WB5090 WSTS000046
10.08.2007 08.08.2007 NY 18104ED001A5E5B0 WB WB5260 WSTS000051
10.08.2007 08.08.2007 NY 17D372D909A78CFE WB WB7280 WSTS000035
10.08.2007 08.08.2007 NY 17D372DB139DD0C8 WB WB7410 WSTS000035
10.08.2007 08.08.2007 NY 18031B52052A63EE WB WB7420 WSTS000046
10.08.2007 08.08.2007 NY 17D7162F03F72F9A WB WB8650 TOFF000059
10.08.2007 08.08.2007 NY 18063C3110AB2DE5 WC WC5050 OTXO000060
10.08.2007 08.08.2007 NY 17D4BDDF025C7B54 WC WC7220 OTXO000045
10.08.2007 08.08.2007 NY 177B7D0C1BFE777F WC WC7240 A06M027069
10.08.2007 08.08.2007 NY 1793AA2019911369 WC WC7260 OTXO000008
10.08.2007 08.08.2007 NY 17F21DCE0943C5B8 WC WC7280 OTXO000058
10.08.2007 08.08.2007 NY 177878600624DAE6 WC WC7310 A06M027069
10.08.2007 08.08.2007 NY 177878680513A2BF WC WC7320 A06M027069
10.08.2007 08.08.2007 NY 18063C221C20E6C5 WC WC7500 OTXO000060
10.08.2007 08.08.2007 NY 177B7D111F810F11 WC WC7530 A06M027069
10.08.2007 08.08.2007 AY 17FF771C17B8DC79 WI YWI5952 WS8I0002415874A62F
10.08.2007 08.08.2007 AY 17FF771D1A1F33F8 WI YWI5953 WS8I0002415874A635
10.08.2007 08.08.2007 AY 17FF771E1E75D8A9 WI YWI5954 WS8I0002415874A641
10.08.2007 08.08.2007 AY 17FF772008FA439C WI YWI5955 WS8I0002415874A64D
10.08.2007 08.08.2007 AY 17FF772103D435E0 WI YWI5956 WS8I0002415874A652
10.08.2007 08.08.2007 AY 17FF772411D19763 WI YWI5957 WS8I0002415874A65E
10.08.2007 08.08.2007 AY 17FF772503B19491 WI YWI5958 WS8I0002415874A666
10.08.2007 08.08.2007 AY 17FF771A1CA86F80 WI YWI595A WS8I0002415874A61A
10.08.2007 08.08.2007 NY 17FF39DD07C5186D WP YWPRDPX DBH00000835872A45F
10.08.2007 08.08.2007 NY 181051CE1BF3384D WQ WQ6010 CUBE000081
10.08.2007 08.08.2007 NY 178C43A70B7CFC02 WU YWUGBUB TU0000001154AE45DF
10.08.2007 08.08.2007 NY 1802C75A0683C63A YY YYWBVIN WSTS000046589071B4
06.11.2007 08.08.2007 NY 181AD31F13F7471E ER ER8020 EAMR000035
09.11.2007 08.08.2007 NY 181677EF14389850 WP YWPR3PX DBH00000965935AA2CMVS
10.08.2007 09.08.2007 NY 181052BC0C347337 DE DE0410 DE00000061
10.08.2007 09.08.2007 NY 1816904D1E1B6D94 DE DE0420 DE00000063
10.08.2007 09.08.2007 NY 181052BB05F166D0 DE DE0830 DE00000061
10.08.2007 09.08.2007 NY 175E0E341F0C6B84 RT YRTKOMB A20Y001346532AA546
10.08.2007 09.08.2007 NY 17D2BBD307B51A5B VV YVVZZ16 VDPS00007356FD77D1
10.08.2007 09.08.2007 NY 18031B3505505F40 WB WB0510 WSTS000046
09.08.2007 10.08.2007 NY 18139D96073F7290 SV SV0280 WSSV000195
10.08.2007 10.08.2007 NY 180B93601DBD3F83 EC YECCRAC SYNC00002558DA4B2A
10.08.2007 10.08.2007 NY 17E6558E13DBA9B8 TN YTN0170 OTXO00005457A1E39F
10.08.2007 10.08.2007 NY 17E1E9500486A1F4 TN YTN0200 OTXO000054577CC9B6
29.06.2007 11.08.2007 NY 18175DBA16D08A79 WB YWBBOPR WS8B000465593D32E5
09.08.2007 11.08.2007 NY 180548BF0E099B59 BX YBXADBR CLOS00014958A5761B
09.08.2007 11.08.2007 NY 180FD65B04B75E4E ER YERDCUR EAMR00002858FE0AE8
10.08.2007 11.08.2007 NY 1815A1B41C2FF8DF DE DE0820 DE00000063
10.08.2007 11.08.2007 NY 1811E45A1D56DE45 ER YERDGET EAMR000028590F474F
10.08.2007 11.08.2007 NY 177D375A073D7364 FI YFI0120 A06M02733354301880
10.08.2007 11.08.2007 NY 180B71BD0784316A PC01 YPC0830 IVN000003058D930ED
10.08.2007 11.08.2007 NY 180B71BD0784316A PC02 YPC0830 IVN000003058D930ED
10.08.2007 11.08.2007 NY 180B71BD0784316A PC03 YPC0830 IVN000003058D930ED
10.08.2007 11.08.2007 NY 180B71BD0784316A PC04 YPC0830 IVN000003058D930ED
10.08.2007 11.08.2007 NY 180B71BD0784316A PC05 YPC0830 IVN000003058D930ED
10.08.2007 11.08.2007 NY 180B71BD0784316A PC06 YPC0830 IVN000003058D930ED
10.08.2007 11.08.2007 NY 180B71BD0784316A PC07 YPC0830 IVN000003058D930ED
10.08.2007 11.08.2007 NY 18031B471DB0036B WB WB1110 WSTS000046
10.08.2007 11.08.2007 NY 17F067371537606D WQ YWQ4501 CUBE00005657F65A9E
29.06.2007 12.08.2007 NY 1815CC451E00E03D WB WB0520 WS8B000441
29.06.2007 12.08.2007 NY 1815CBD70C3254D1 WB WB0680 WSTS000056
29.06.2007 12.08.2007 NY 1815CBE113E011FC WB WB0940 WSTS000056
29.06.2007 12.08.2007 NY 1815CBE81CDDA42A WB WB0950 WSTS000056
29.06.2007 12.08.2007 NY 1815C9D81095EDE8 WB YWBEBSM WS8B000441592FF6DF
10.08.2007 12.08.2007 NY 17E199940CAD9611 TN YTN0041 OTXO000054577A2CD6
09.08.2007 14.08.2007 NY 17FEBFDC15F94F6B SN YSN100I NOST000268586EA4F0
09.08.2007 14.08.2007 NY 18104FC9120B48E0 SN YSN110I SAVS00000159020504
09.08.2007 14.08.2007 NY 17FEBFE41EEE187F SN YSN120 NOST000268586EA53A
09.08.2007 14.08.2007 NY 1802F3FF1530B200 SN YSN187I NOST0002685891E82E
09.08.2007 14.08.2007 NY 1801FBE61D52FEF6 SN YSN187S NOST0002685889C70D
09.08.2007 14.08.2007 NY 17FEBFD10B69FD66 SN YSND002 NOST000268586EA494
09.08.2007 14.08.2007 NY 1810509E09643C91 SN YSND003 SAVS00000159020C56
10.08.2007 14.08.2007 NY 180DEF8E1DD0B7B4 NL NL7310 BALR000067
10.08.2007 14.08.2007 NY 17C61F55163CB46B NL NL7750 BALR000023
10.08.2007 14.08.2007 NY 180B709C125803D4 PC01 YPC0520 IVN000003058D92770
10.08.2007 14.08.2007 NY 180B709C125803D4 PC02 YPC0520 IVN000003058D92770
10.08.2007 14.08.2007 NY 180B709C125803D4 PC03 YPC0520 IVN000003058D92770
10.08.2007 14.08.2007 NY 180B709C125803D4 PC04 YPC0520 IVN000003058D92770
10.08.2007 14.08.2007 NY 180B709C125803D4 PC05 YPC0520 IVN000003058D92770
10.08.2007 14.08.2007 NY 180B709C125803D4 PC06 YPC0520 IVN000003058D92770
10.08.2007 14.08.2007 NY 180B709C125803D4 PC07 YPC0520 IVN000003058D92770
10.08.2007 14.08.2007 NY 180B3E2712F573A3 TN YTN0100 OTXO00006658D78025
10.08.2007 14.08.2007 NY 1819E99804485691 WB WB0520 WS8B000468
10.08.2007 14.08.2007 NY 18031B3F147AC3A2 WB WB0870 WSTS000046
10.08.2007 14.08.2007 NY 17B6EFAE1FF2B425 WB WB0920 WSTS000014
10.08.2007 14.08.2007 NY 1819E9B61769DD73 WB WB0950 WS8B000468
10.08.2007 14.08.2007 NY 180A79F2186A754E WN YWNOLOG FOND00008558D0FF8B
10.08.2007 14.08.2007 NY 1730D02E1B2CED58 YY YYWBERR A06M02422851AF2E43
16.07.2007 15.08.2007 NY 1817664512385C07 CZ YCZJABW GSER000181593D7A96
09.08.2007 15.08.2007 NY 18104FD401ADA090 SN YSN110U SAVS0000015902056A
09.08.2007 15.08.2007 NY 17FF3A040077B3CA WP YWPR1QX DBH00000835872A5A5
10.08.2007 15.08.2007 NY 17F156F61AABFF9E CZ YCZM435 BEWI00001057FE35BE
10.08.2007 15.08.2007 NY 17B5C73C10EAABBA CZ YCZT435 BEWI000004560A927D
10.08.2007 15.08.2007 NY 18134EC41F04BB6E NI YNILBPL IPC0000199591B2776
10.08.2007 15.08.2007 NY 1801D4770FA83FD7 VV YVVZZ13 VDPS00009958887C3E
10.08.2007 15.08.2007 NY 18104F1910468A7E WB WB1080 TOFF000099
10.08.2007 15.08.2007 NY 18063C681E19FBC8 WB WB1090 TOFF000088
10.08.2007 15.08.2007 NY 18093A5208A498C5 WB YWBMAS WS8B00040958C68B0C
10.08.2007 15.08.2007 NY 18093C761D12727A WB YWBWRK WS8B00040958C69CFF
11.08.2007 15.08.2007 NY 1801D2830664796E NTA1P CZA0213 A02E00056858886BDA
09.07.2008 15.08.2007 NY 17FF3A4C1ED36765 WP YWPR7PX DBH00000835872A809
14.09.2007 31.08.2007 NY 17D1732300E61795 RT YRT0006 RFT000001556F2A499
14.09.2007 31.08.2007 NY 181D33200B9EAFF6 WF WF0300 WSSW000089
25.10.2007 31.08.2007 NY 181D333C1BE0E1B1 WF WF0350 WSSW000089
13.09.2007 01.09.2007 NY 181B4E3A1892B51A SV SV5770 WSSV000196
14.09.2007 01.09.2007 NY 181B4E390C4001C4 SV SV5750 WSSV000196
29.07.2007 03.09.2007 NY 17B6E32A0D21727D IT YITGT TABS0000535613E056
29.07.2007 03.09.2007 NY 1753B2D514B9B4A5 YY YYITST A20Y00132952D3C3E7
never      04.09.2007 NY 181B2B8D1D522BB4 CZ CZ5494 ACP0000103
11.06.2007 04.09.2007 NY 18104EF71FB8201D TN TN8900 OTXO000066
30.08.2007 07.09.2007 NY 181D3635191FC8E7 WB YWB0083 WSTS000055596E3C20MVS
08.11.2007 07.09.2007 NY 181C3CA70424A8BD WB YWB0082 WSTS00005559660E59MVS
09.11.2007 07.09.2007 NY 181C39251EE20C6C DE DE0100 DE00000066
08.02.2008 11.09.2007 NY 18191FDA177E875B WB YWB5417 WSTS000055594BF2BEMVS
10.08.2007 12.09.2007 NY 17B3DCB7047D6973 CD YCDOGEM KUBE000026
13.08.2007 12.09.2007 NY 181A0C460B75E40F SV SV5640 WSSV000196
11.08.2007 27.09.2007 NY 182052BA179076D5 WB WB0630 WSTS000055
11.08.2007 27.09.2007 NY 182052BA0A954E1C WB WB0680 WSTS000055
11.08.2007 27.09.2007 NY 1819DC7C0F04665C WB YWBEBSM WSTS000055595220FAMVS
14.09.2007 28.09.2007 NY 181E4CAB1BE28D6F GM GM0850 GM00000145
13.08.2007 29.09.2007 NY 181E8200024419AE TN YTNUPD OTXO00007059791B5C
14.08.2007 29.09.2007 NY 181F3FFC0584E468 SN SN5000 SAVS000005
14.08.2007 29.09.2007 NY 182168E01BA69CA2 SV SV5640 WSSV000239
14.08.2007 29.09.2007 NY 181B4E391F13EE7F SV SV5760 WSSV000196
18.08.2007 29.09.2007 NY 18204EC002F7AD36 WB WB5570 WS8B000444
18.08.2007 29.09.2007 NY 181CE485169A2292 WC WC5010 OTXO000070
18.08.2007 29.09.2007 NY 181D2645049A5697 WC WC8401 OTXO000070
08.09.2007 29.09.2007 NY 181B481D0D0DF37B WB WB5120 WSTS000055
08.09.2007 29.09.2007 NY 181B482308EFF1DB WB WB7020 WSTS000055
17.08.2007 01.10.2007 NY 17D1732F1E7B38A4 RT YRT075M RFT000001556F2A505
14.09.2007 01.10.2007 NY 17C8273701BBCC90 RT YRT0007 RFT000000956A4A858
09.11.2007 07.10.2007 NY 181DF4941CBDBE2D TN YTN0101 OTXO00007059747939
09.11.2007 07.10.2007 NY 1819E27F0995289A TN YTNW100 OTXO00007059525387MVS
09.11.2007 07.10.2007 NY 18191C82198A62B3 TN YTNW170 OTXO000070594BD553MVS
09.11.2007 07.10.2007 NY 18198D8C087DC41E VD VDDBM01 DSPV000042
09.11.2007 07.10.2007 NY 18198D941781E33C VD VDGLH00 DSPV000042
09.11.2007 07.10.2007 NY 17D358FB1F71048E VD YVDDFA DSPV00002357029E3F
09.11.2007 07.10.2007 NY 181E45FB0A593D49 WB WB0530 WSTS000055
09.11.2007 07.10.2007 NY 1825A8AA13CD3568 WB WB0680 WSTS000058
09.11.2007 07.10.2007 NY 181DF58A13353842 WB WB0980 TOFF000109
09.11.2007 07.10.2007 NN 181AAB810DA424A7 WB YWBIO WS8B0004425958E985MVS
09.11.2007 07.10.2007 AY 1818742915D45182 WI YWINS09 WS8I0002685946500EMVS
09.11.2007 07.10.2007 NY 181B2A72136E3781 WN YWNOLOG FOND000087595D1286MVS
23.11.2007 07.10.2007 NY 181DF58D021E9F86 WB WB0990 TOFF000109
23.11.2007 07.10.2007 NY 181A0E0913151E72 YY YYDB2FK TOFF0001095953C05BMVS
13.05.2009 07.10.2007 NY 16F2B49608FDF6B9 HP1 AFJJRK HPSVP2AFJJRK
13.05.2009 07.10.2007 NY 16F2B49A0F1869E5 HP1 AFOWRK HPSVP2AFOWRK
13.05.2009 07.10.2007 NY 16F2B49608FDF6B9 HP3 AFJJRK HPSVP2AFJJRK
13.05.2009 07.10.2007 NY 16F2B49A0F1869E5 HP3 AFOWRK HPSVP2AFOWRK
09.11.2007 08.10.2007 NY 18198D981F1365CF VD VDINI01 DSPV000042
09.11.2007 08.10.2007 NY 1825A8A2107EFBF3 WB WB0630 WSTS000058
09.11.2007 08.10.2007 NY 181C3CD11F409BBD WB WB0940 WSTS000055
09.11.2007 08.10.2007 NY 1820EDD80560A16C WB YWBEBSM WS8B000479598D6B36
09.11.2007 08.10.2007 AY 181873E016605288 WI YWINS01 WS8I00026859464FB1MVS
09.11.2007 09.10.2007 NY 1819121500D1EA9B CD CD2590 UPDS000044
09.11.2007 09.10.2007 NY 181C39331FFB717F DE DE0400 DE00000066
09.11.2007 09.10.2007 NY 181C393012C460B2 DE DE0410 DE00000066
09.11.2007 09.10.2007 NY 181C39170A436491 DE DE0420 DE00000066
09.11.2007 09.10.2007 NY 181ACC4D11C2F59C TN YTNBOPH OTXO0000705959FCD2MVS
12.09.2007 10.10.2007 NY 17D16E71046222B0 IT IT5001 RFT0000015
27.10.2007 10.10.2007 NY 181993381EA5F596 WF YWFCB02 WSSW000089594FBA69MVS
09.11.2007 10.10.2007 NY 181E9EFE19152277 AT AT0099 ACS0000017597A0EC1
09.11.2007 10.10.2007 NY 181B2C1D0C24CE09 CZ CZ5150 KLOM000062
09.11.2007 10.10.2007 NY 181B2C0D175D944C CZ CZ5280 KLOM000062
09.11.2007 10.10.2007 NY 181B2B8C007D300F CZ CZ6400 GSER000177
09.11.2007 10.10.2007 NY 181C37BF09F26776 CZ CZ6500 GSER000177
09.11.2007 10.10.2007 NY 17B5D153039BCE65 CZ YCZM025 LOFT000019560AE739
09.11.2007 10.10.2007 NY 180EB6DA09C279F4 CZ YCZMLIM KLOM00006458F49F2E
09.11.2007 10.10.2007 NY 181C39140CFAD8BB DE DE0810 DE00000066
09.11.2007 10.10.2007 NY 181C393C018307F3 DE DE0820 DE00000066
09.11.2007 10.10.2007 NY 181C38F010E7075D DE DE0860 DE00000066
09.11.2007 10.10.2007 NY 181C39421EBF7C9C DE DE0940 DE00000066
09.11.2007 10.10.2007 NY 181B2C221E63ACDA EC EC5130 KLOM000062
09.11.2007 10.10.2007 NY 17D2B1790CF11821 EC YECUCRK SYNC00001156FD2111
09.11.2007 10.10.2007 NY 18248E230E2D63F4 GM GM0850 GM00000150
09.11.2007 10.10.2007 NY 18187E8E1AA350C3 GM YGMSTEU GM000001455946A9BF
09.11.2007 10.10.2007 NY 181B2CD40E454CD7 NTA1P CZA0215 A02E000575595D269F
09.11.2007 10.10.2007 NY 1819B39C1E8BD927 PC01 YPC0520 IVN00000325950CA4A
09.11.2007 10.10.2007 NY 1819B39C1E8BD927 PC02 YPC0520 IVN00000325950CA4A
09.11.2007 10.10.2007 NY 1819B39C1E8BD927 PC03 YPC0520 IVN00000325950CA4A
09.11.2007 10.10.2007 NY 1819B39C1E8BD927 PC04 YPC0520 IVN00000325950CA4A
09.11.2007 10.10.2007 NY 1819B39C1E8BD927 PC05 YPC0520 IVN00000325950CA4A
09.11.2007 10.10.2007 NY 1819B39C1E8BD927 PC06 YPC0520 IVN00000325950CA4A
09.11.2007 10.10.2007 NY 1819B39C1E8BD927 PC07 YPC0520 IVN00000325950CA4A
09.11.2007 10.10.2007 NY 181CE4AB1F3FDF76 RI RI0810 RI00000021
09.11.2007 10.10.2007 NY 1823CE0F1C967B65 SN SN0200 SAVS000013
09.11.2007 10.10.2007 NY 1823CDF00459846B SN YSNA005 SAVS00001359A589EE
09.11.2007 10.10.2007 NY 181C3AB30E618BED TN YTN0021 OTXO0000705965FE66
09.11.2007 10.10.2007 NY 182284B2057B5728 TN YTNUPD OTXO000085599AC00E
09.11.2007 10.10.2007 NY 1818D380154526FD VV YVVZZ04 VDPS0001145949721BMVS
09.11.2007 10.10.2007 NY 1823AC1F15169D58 VV YVVZZ07 VDPS00013759A46E34MVS
09.11.2007 10.10.2007 NY 1819E37C0B1E1974 VV YVVZZ10 VDPS00011459525BC8MVS
09.11.2007 10.10.2007 NY 1817FCF21358B1E2 VV YVVZZ11 VDPS00011459426A05MVS
09.11.2007 10.10.2007 NY 1817FCF509E5D4C0 VV YVVZZ12 VDPS00011459426A35MVS
09.11.2007 10.10.2007 NY 181AA84015BCA89A VV YVVZZ13 VDPS0001145958CE5FMVS
09.11.2007 10.10.2007 NY 181DF5A802121E7C WB WB8010 TOFF000109
09.11.2007 10.10.2007 NY 181AAA1316770361 WB YWBBODA WS8B0004425958DDB0MVS
09.11.2007 10.10.2007 NY 181A0DF707DD2360 WB YWBITV TOFF0001095953C015MVS
09.11.2007 10.10.2007 AY 181873E6099E5205 WI YWINS02 WS8I00026859464FB6MVS
09.11.2007 10.10.2007 AY 181873EF139796A9 WI YWINS03 WS8I00026859464FC0MVS
09.11.2007 10.10.2007 AY 181873FA0E1AEF28 WI YWINS04 WS8I00026859464FC8MVS
09.11.2007 10.10.2007 AY 181874030D3E0FB5 WI YWINS05 WS8I00026859464FD3MVS
09.11.2007 10.10.2007 AY 1818740D10396227 WI YWINS06 WS8I00026859464FE3MVS
09.11.2007 10.10.2007 AY 181874160DC4BBFC WI YWINS07 WS8I00026859464FEFMVS
09.11.2007 10.10.2007 AY 1818741E0D7F9B9E WI YWINS08 WS8I00026859464FFDMVS
09.11.2007 10.10.2007 AY 1818742F0E823CBF WI YWINS10 WS8I0002685946501DMVS
09.11.2007 10.10.2007 NY 17FF3EC11AC577B8 WP YWPL2P1 DBH00000835872CD6B
09.11.2007 10.10.2007 NY 18167A4707EFEC51 WP YWPL5P1 DBH00000965935BEC1MVS
09.11.2007 10.10.2007 NY 18167A5F12850DED WP YWPL8P1 DBH00000965935BF94MVS
09.11.2007 10.10.2007 NY 1816415B183189F2 WP YWPRAPX DBH00000965933E137MVS
09.11.2007 10.10.2007 NY 1816779A0BD761EC WP YWPRCPX DBH00000965935A7F9MVS
09.11.2007 10.10.2007 NY 181677E40970F431 WP YWPRDPX DBH00000965935A9DDMVS
09.11.2007 10.10.2007 NY 1815D73F0BB52A99 WP YWPU1P5 DBH000009659306727MVS
09.11.2007 10.10.2007 NY 1826C38D0714BA79 WQ WQ5950 CUBE000114
09.11.2007 10.10.2007 NY 1823C46F12920728 YX YXA171C TOFF00011759A53A43
10.11.2007 10.10.2007 NY 1818A626117BCA76 VV YVVZZ05 VDPS0001145947F5B1MVS
09.11.2007 11.10.2007 NY 18191C6703BC1494 TN YTNSICH OTXO000070594BD52D
27.10.2007 13.10.2007 NY 181992D90B2A84CB WF YWFM537 WSSW000089594FB758MVS
08.02.2008 18.10.2007 NY 17C999B40844883E NL YNL0200 BALR00003156B0CC3B
never      24.10.2007 NY 1817FD02114AA653 VV YVVZZ21 VDPS00011459426A44MVS
20.08.2007 24.10.2007 NY 1820EE0F049F6595 WB WB0630 WS8B000479
20.08.2007 24.10.2007 NY 1820EE0A1F86168B WB WB0680 WS8B000479
20.08.2007 24.10.2007 NY 18204EA51BB20439 WB YWB530 WS8B000443
07.02.2008 25.10.2007 NY 180DEE8B0A00DE1E YY YYUWI PSMF00001758EE0EC7MVS
08.02.2008 27.10.2007 NY 181C3CC01DF20ED6 WB WB1110 WSTS000055
04.10.2007 28.10.2007 NY 18167A71057A84EC WP YWPL9P1 DBH00000965935C01FMVS
14.09.2007 31.10.2007 NY 181C3B5D0C377BD8 YX YXA171C TOFF0001095966040A
08.11.2007 31.10.2007 NY 182056D1196487E7 CD CD8130 CIFS000202
09.11.2007 31.10.2007 NY 181C38F31CA180DE DE DE0050 DE00000066
09.11.2007 31.10.2007 NY 181C393F05B0E5A2 DE DE0440 DE00000066
08.02.2008 31.10.2007 NY 182883500256596E NTA1P CZA0213 A02E00058259CD0967
never      01.11.2007 NY 182922F213EEF0A2 VV YVVZZ21 VDPS00011759D24460MVS
24.08.2007 01.11.2007 NY 181AAC0B13DEE03C WB YWBSA4 WS8B0004425958EE28MVS
01.09.2007 01.11.2007 NY 181B9CFE03287EB1 SN SN5903 SAVS000005
01.09.2007 01.11.2007 NY 181D5F1F1F6585FE WQ WQ6000 CUBE000092
05.09.2007 01.11.2007 NY 182265071C5F2DD9 WB WB5570 WS8I000307
13.09.2007 01.11.2007 NY 1819175D1DF020AF AP YAPUTGK APEN000042594BAB6AMVS
13.09.2007 01.11.2007 NY 17EF204D1B02ABA2 RT RT5020 TABS000121
13.09.2007 01.11.2007 NY 17EF2052083ABD62 RT RT5060 TABS000121
13.09.2007 01.11.2007 NY 17F03AE912818F98 RT RT5090 TABS000121
13.09.2007 01.11.2007 NY 17EF20691EE8A1DD RT RT5160 TABS000121
13.09.2007 01.11.2007 NY 17EF206B1FC59F38 RT RT5170 TABS000121
13.09.2007 01.11.2007 NY 17D16EBC1BCC0BDD RT RT5210 RFT0000015
13.09.2007 01.11.2007 NY 182194F00B0D8253 SN SN5000 SAVS000014
13.09.2007 01.11.2007 NY 181C39961D1F259C SN YSNB002 SAVS0000055965F526
13.09.2007 01.11.2007 NY 181E74830FB5EFF0 SN YSND010 SAVS0000055978AA6A
14.09.2007 01.11.2007 NY 17EF205A160D5A55 RT RT5100 TABS000121
14.09.2007 01.11.2007 NY 181B9CDC1F6BB3B2 SN SN5004 SAVS000005
14.09.2007 01.11.2007 NY 181B9CDD1F49FCC9 SN SN5005 SAVS000005
14.09.2007 01.11.2007 NY 181E73F907BDEA71 SN SN5006 SAVS000005
14.09.2007 01.11.2007 NY 181F412F13C140CE SN SN5100 SAVS000005
14.09.2007 01.11.2007 NY 181C438E1B1FA2A3 SN SN5901 SAVS000005
14.09.2007 01.11.2007 NY 181E9DA21B49B572 SN YSND012 SAVS000005597A035F
14.09.2007 01.11.2007 NY 181E7484189AC362 SN YSND013 SAVS0000055978AA76
14.09.2007 01.11.2007 NY 18226582085840F8 WC WC5010 WS8I000307
14.09.2007 01.11.2007 NY 181B491716D92453 WC WC5050 OTXO000070
14.09.2007 01.11.2007 NY 181B4934145BD3C5 WC WC7220 OTXO000070
14.09.2007 01.11.2007 NY 181B49361607A8BA WC WC7240 OTXO000070
14.09.2007 01.11.2007 NY 181B49381EFEE30C WC WC7260 OTXO000070
14.09.2007 01.11.2007 NY 181B49420E6C84E6 WC WC7310 OTXO000070
14.09.2007 01.11.2007 NY 181B49430BCC42C0 WC WC7320 OTXO000070
14.09.2007 01.11.2007 NY 181B49491D6D930B WC WC7500 OTXO000070
14.09.2007 01.11.2007 NY 181B494D01568648 WC WC7530 OTXO000070
14.09.2007 01.11.2007 NY 1822658105CC1901 WC WC8401 WS8I000307
14.09.2007 01.11.2007 NY 182051610EC67759 WC WC8410 OTXO000070
14.09.2007 01.11.2007 NY 18198EA9091BA94A WF YWF64CA WSSW000089594F9457
10.10.2007 01.11.2007 NY 1817FD1516CB6239 VV YVVZZ09 VDPS00011459426A6CMVS
06.09.2007 02.11.2007 NY 182264E4186BED4A WB WB0630 WS8I000307
06.09.2007 02.11.2007 NY 182264E506A2937A WB WB0680 WS8I000307
13.09.2007 02.11.2007 NY 181B4E361A47513A SV SV5740 WSSV000196
14.09.2007 02.11.2007 NY 181B47AA0CC2621A MF MF8620 MFR0000124
14.09.2007 02.11.2007 NY 1821910E1F6FA041 SV SV5760 WSSV000240
14.09.2007 02.11.2007 NY 181D331C016E0835 WF WF0280 WSSW000089
25.10.2007 02.11.2007 NY 181D333212EC01EA WF WF0310 WSSW000089
25.10.2007 02.11.2007 NY 181D3334036367CB WF WF0320 WSSW000089
06.09.2007 03.11.2007 NY 182265901BEE32D8 WB YWB530 WS8I000307
14.09.2007 03.11.2007 NY 1805F2811C1EC577 IT IT0010 TABS000131
14.09.2007 03.11.2007 NY 178626B503DAD8E1 IT YIT0022 A20Y001569547AFE2B
14.09.2007 04.11.2007 NY 1818F65E1627C6B5 BP YBPMUT BPST000079594A969EMVS
14.09.2007 04.11.2007 NY 17D1941600492BE1 RT RT0100 RFT0000012
14.09.2007 04.11.2007 NY 18031B5110D39B75 RT RT0200 TABS000130
14.09.2007 04.11.2007 NY 17C8273D0A443DB6 RT YRT0008 RFT000000956A4A893
26.09.2007 04.11.2007 NY 17D16E7E10BACFAF IT IT5503 RFT0000015
14.09.2007 07.11.2007 NY 1802F62718C20B26 AT AT0099 ACS00000115891FA54
14.09.2007 07.11.2007 NY 181A390E14673B05 AT AT0099 ACS0000015595529B8
14.09.2007 07.11.2007 NY 181E268E1D177D30 IT IT8481 TABS000160
14.09.2007 07.11.2007 NY 181F404000F8EED1 SN SN0200 SAVS000005
14.09.2007 07.11.2007 NY 181F3F4815EA259D SN YSNA005 SAVS000005597F4F58
14.09.2007 07.11.2007 NY 181B9C9603465715 SN YSNI003 SAVS0000055960D01A
14.09.2007 07.11.2007 NY 1821498D00510B13 TN YTNUPD OTXO00008259906C81
14.09.2007 07.11.2007 NY 181E44E302A4CCCF WF WF5410 WSSW000089
14.09.2007 07.11.2007 NY 181E44EE166A3740 WF YWFSWC WSSW000089
14.09.2007 07.11.2007 NY 181E25A21091CDA5 WQ WQ5950 CUBE000092
08.11.2007 07.11.2007 NN 1749A5D304B2335D WP YWPL1W1 A06M024666527F73FE
14.09.2007 08.11.2007 NY 180C8F7F0475785F RT RT5910 TABS000145
14.09.2007 08.11.2007 NY 181B490C0EA4AA91 TN TN7080 OTXO000070
30.10.2007 08.11.2007 NY 1823CE1A1167AB15 SN SN5001 SAVS000013
09.11.2007 08.11.2007 NY 17867C0D14590A59 AT AT7110 A20Y001564
04.11.2007 09.11.2007 NY 181B289E0294210A CZ CZ8010 APEN000042
04.11.2007 09.11.2007 NY 181B28A60DE2A5A0 CZ CZ8020 APEN000042
02.11.2007 10.11.2007 NY 181DF15B096DB2E8 MF MF8930 MFR0000124
02.11.2007 10.11.2007 NY 180BC45D1874A61D MF MF8940 MFR0000110
08.11.2007 10.11.2007 NY 181B2B841A41010B MF MF7010 MFR0000124
09.11.2007 10.11.2007 NY 181B46411465D489 MF MF7550 MFR0000124
09.11.2007 10.11.2007 NY 181D81DF0F61AD6F MF MF7901 MFR0000124
26.10.2007 12.11.2007 NY 1822D6A611A1A93F WF WF0280 WSSW000086
26.10.2007 12.11.2007 NY 1822D69C1D9BF47D WF WF0300 WSSW000086
08.11.2007 13.11.2007 NY 181ACBE5166D9350 WB YWBCTA WS8B0004425959F984
09.11.2007 13.11.2007 NY 181B2CA70747BA47 NTA1P CZA0213 A02E000575595D2527
09.11.2007 13.11.2007 NY 1804D0C01197DBE9 NTA1P CZA0255 A02E00057158A18784
09.11.2007 13.11.2007 NY 1817FD1512946DF7 VV YVVZZ24 VDPS00011459426A82MVS
08.02.2008 15.11.2007 NY 181C3CD70B255060 WB WB0830 WSTS000055
12.12.2007 16.11.2007 NY 1826F0730C388176 ER YERPRI EAMR000048
07.02.2008 16.11.2007 NY 182C9C1D0C4880A2 WQ YWQ5601 CUBE00009459EF6729
28.05.2009 16.11.2007 NY 16D64928099F4035 HP1 AHGPRI HPSVP2AHGPRI
28.05.2009 16.11.2007 NY 16D64928099F4035 HP3 AHGPRI HPSVP2AHGPRI
never      30.11.2007 NY 18253AD6115AE19A CZ CZ5991 GSER000191
14.09.2007 30.11.2007 NY 181B4833128C6D23 WB WB7520 WSTS000055
09.11.2007 30.11.2007 NY 181FB5831ABB3E70 ER YERPRI EAMR000035
08.02.2008 30.11.2007 NY 182C9C2C1D927AFD WQ YWQBERI CUBE00009459EF6722
never      01.12.2007 NY 18239A341EBABCCF WQ WQ6000 CUBE000112
31.10.2007 01.12.2007 NY 174653F412B34674 OE YOE2BP1 A12M0057985263A8B2
09.11.2007 01.12.2007 NY 1812FBAD0552EBE9 ER YERDCUR EAMR00003559186E33MVS
09.11.2007 01.12.2007 NY 1812FBB310C7372F ER YERDGET EAMR00003559186E6CMVS
10.11.2007 01.12.2007 NY 182E81261B5A42EE WC WC5010 OTXO000081
10.11.2007 01.12.2007 NY 182E81451AA9D856 WC WC8401 OTXO000081
13.11.2007 01.12.2007 NY 182E81230D947285 WB WB0840 WSTS000057
22.11.2007 01.12.2007 NY 18299666011412CE WB WB0970 WSTS000057
01.12.2007 01.12.2007 NY 182CE8D206E65CF4 WQ WQ6000 CUBE000094
04.12.2007 01.12.2007 AY 1817AFCA0E2031A5 WI YWI5952 WS8I000268593FE34B
04.12.2007 01.12.2007 AY 1817AFCE0AE7D9E3 WI YWI5955 WS8I000268593FE368
04.12.2007 01.12.2007 AY 1817AFD00A189CCD WI YWI5957 WS8I000268593FE37B
13.12.2007 01.12.2007 NY 1827DA281F81C0C3 WB YWB0083 WSTS00005759C7789EMVS
02.02.2008 01.12.2007 NY 1825A8BE03B40135 WB WB5120 WSTS000058
02.02.2008 01.12.2007 NY 1829967F04389766 WB WB7020 WSTS000057
02.02.2008 01.12.2007 NY 181B482D00B5B92C WB WB7360 WSTS000055
07.02.2008 01.12.2007 NY 181C3CFF077AA155 WB WB0620 WSTS000055
08.02.2008 01.12.2007 NY 182C73A519221274 DE DE0050 DE00000070
08.02.2008 01.12.2007 NY 182885DC1456E513 DE DE0440 DE00000070
05.02.2009 01.12.2007 NY 16A0895A021FE1EB HP1 AE5MQ6 HPSVP2AE5MQ6
05.02.2009 01.12.2007 NY 16A0895A021FE1EB HP3 AE5MQ6 HPSVP2AE5MQ6
14.12.2007 02.12.2007 NY 182300220D81C015 BP YBPMUT BPST000087599ECB6FMVS
28.01.2008 02.12.2007 NY 1816780218D492A4 WP YWPR6PX DBH00000965935AB34MVS
09.11.2007 03.12.2007 NY 1819DE9518757CCC BX YBXADBR CLOS0001705952328DMVS
09.11.2007 03.12.2007 NY 1822BA3117EB2901 SV YSVVORM WSSV000199
09.11.2007 03.12.2007 NY 181C3CF50797A90A WB WB0820 WSTS000055
09.11.2007 03.12.2007 NY 1825A8B4050AC926 WB WB0840 WSTS000058
23.11.2007 03.12.2007 NY 182CE9641E571C62 WB WB1090 TOFF000112
29.01.2008 04.12.2007 NY 1828FF3B18AC58B4 VV YVVZZ09 VDPS00011759D118C6MVS
26.10.2007 06.12.2007 NY 181B4DB31EC811AD WQ YWQBERI CUBE000092595E3A2E
never      07.12.2007 NY 17D194491ABEAD4A RT RT5550 TABS000080
16.09.2007 07.12.2007 NY 18250D8F1F9833E3 WQ WQ5950 CUBE000112
20.09.2007 08.12.2007 NY 181B48200C9F72D8 WB WB7440 WSTS000055
22.10.2007 08.12.2007 NY 182530FC09665515 SV SV5770 WSSV000199
03.11.2007 08.12.2007 NY 1825A8C005020929 WB WB7020 WSTS000058
02.02.2008 08.12.2007 NY 181B482516FFEECA WB WB7030 WSTS000055
02.02.2008 08.12.2007 NY 181B48360D2346B8 WB WB8720 WSTS000055
09.11.2007 09.12.2007 NY 181873E814542A5E FI YFI0110 BKUR0000805946506C
09.11.2007 09.12.2007 NY 181873EE126A8118 FI YFI0120 BKUR0000805946509A
30.09.2007 10.12.2007 NY 18271DFE052F9964 CZ CZ5991 GSER000200
09.11.2007 10.12.2007 NY 181C39181DE41A89 DE DE0060 DE00000066
09.11.2007 11.12.2007 NY 181C39050B0FD372 DE DE0430 DE00000066
12.11.2007 11.12.2007 NY 182E05A0123133A9 DE DE0820 DE00000070
23.11.2007 11.12.2007 NY 182CE9770C982E56 WB WB1080 TOFF000112
08.02.2008 11.12.2007 NY 181C39440D10F7A5 DE DE0490 DE00000066
13.11.2007 12.12.2007 NY 182E573913D07116 TN YTN0202 OTXO00008159FDDDF0MVS
13.11.2007 12.12.2007 NY 182E812F077DDBF7 WB WB1100 TOFF000112
14.11.2007 12.12.2007 NY 182E812C17B3ADBB WC WC8410 OTXO000081
23.11.2007 12.12.2007 NY 182CE95B0E61834E WB WB0980 TOFF000112
14.12.2007 12.12.2007 NY 1826EE1A12D83747 SV SV0950 WSSV000200
07.02.2008 12.12.2007 NY 1828525B107FE520 CD CD8130 CIFS000210
07.02.2008 12.12.2007 NY 17980CDD145D7361 CD YCDT115 UPDS000006
13.11.2007 13.12.2007 NY 182FBD31072FA1A1 DE DE0820 DE00000075
13.11.2007 13.12.2007 NY 182E81401C8F29AC WB WB0630 WSTS000057
13.11.2007 13.12.2007 NY 182E811B115E1ED2 WB WB0680 WSTS000057
23.11.2007 13.12.2007 NY 1829966907409084 WB WB0820 WSTS000057
23.11.2007 17.12.2007 NY 181DF59E1E040216 WB WB7650 TOFF000109
08.02.2008 17.12.2007 NY 182625EF1F8D0DA8 FI YFI0120 BKUR00009559B932CCMVS
20.11.2007 19.12.2007 NY 1827DA091B550E18 TN YTNUPD OTXO00008159C7784F
08.02.2008 21.12.2007 NY 182885EE0D9D91EB DE DE0060 DE00000070
08.02.2008 21.12.2007 NY 182C73AE12B1663A DE DE0090 DE00000070
08.02.2008 21.12.2007 NY 182885F10797D735 DE DE0100 DE00000070
20.11.2007 22.12.2007 NY 182B2EE119F07759 TN YTNW100 OTXO00008159E36F73MVS
14.12.2007 24.12.2007 NY 18314CB41ADAC1C1 WB WB7650 TOFF000119
28.11.2007 25.12.2007 NY 1829769B1ACCA6BA CZ CZ8980 KLOM000067
04.12.2007 25.12.2007 NY 182C6A8813BC12B2 VV YVVZZ08 VDPS00011759EDC6B6MVS
04.12.2007 25.12.2007 AY 1817AFD40663889E WI YWI5959 WS8I000268593FE39D
14.12.2007 25.12.2007 NY 18282A20053408CF BP YBPMUT BPST00008859CA1D14MVS
14.12.2007 25.12.2007 NY 182EC87C03DB7ABC ER ER8020 EAMR000048
14.12.2007 25.12.2007 NY 182D838D099E1269 ER YERBER EAMR000048
14.12.2007 25.12.2007 NY 18297A870DD73A72 RI RI0810 RI00000024
14.12.2007 25.12.2007 NY 182FE927161E2B2E WC WC5010 WS8B000540
14.12.2007 25.12.2007 NY 182FE9271C78D4CD WC WC8410 WS8B000540
14.12.2007 27.12.2007 NY 182FE88D160B22E0 WB WB0630 WS8B000540
14.12.2007 27.12.2007 NY 182FE892026789A6 WB WB0680 WS8B000540
14.12.2007 28.12.2007 NY 18282A1B12DD2641 BP YBPMUT BPST00008859CA1D14
08.11.2007 31.12.2007 NY 181C3B180B30476D TN TN0530 OTXO000070
09.11.2007 31.12.2007 NY 181C394C1972BD5E DE DE0030 DE00000066
09.11.2007 31.12.2007 NY 181C38F4084364F1 DE DE0090 DE00000066
09.11.2007 31.12.2007 NY 181C38D600A7F2B4 DE YDE0021 DE000000665965EE7CMVS
04.12.2007 31.12.2007 NY 182B51321362BA9C RB YRBUXY1 RBK000000659E48F65MVS
14.12.2007 31.12.2007 NY 182CE2A40D4028A3 WQ WQ5950 CUBE000094
27.09.2007 01.01.2008 NY 18241CFE0E3C658D SN SN5000 SAVS000013
01.11.2007 01.01.2008 NY 18127FB40FCF83CC NL NL7590 BALR000073
01.11.2007 01.01.2008 NY 1826C38E09922368 WQ WQ6000 CUBE000114
02.11.2007 01.01.2008 NY 181677FA19061F57 WP YWPR5PX DBH00000965935AB22MVS
08.11.2007 01.01.2008 NN 181E1FD01E35DB38 SV SV0280 WSSV000196
08.11.2007 01.01.2008 NY 181C3AC1107EEC1B TN YTN0041 OTXO0000705965FE73
09.11.2007 01.01.2008 NY 181A0C4D08D4876B SV SV5940 WSSV000196
09.11.2007 01.01.2008 NY 181B4E770E6BAE39 WQ YWQ4501 CUBE000092595E40B8
24.11.2007 01.01.2008 AY 1817AFC90F6EC510 WI YWI5951 WS8I000268593FE342
04.12.2007 01.01.2008 AY 1817AFCB135F1EEE WI YWI5953 WS8I000268593FE353
04.12.2007 01.01.2008 AY 1817AFCD04DE6BE3 WI YWI5954 WS8I000268593FE360
04.12.2007 01.01.2008 AY 1817AFCF016D77C8 WI YWI5956 WS8I000268593FE371
04.12.2007 01.01.2008 AY 1817AFD102327F89 WI YWI5958 WS8I000268593FE383
04.12.2007 01.01.2008 AY 1817AFC8039BE815 WI YWI595A WS8I000268593FE337
07.02.2008 01.01.2008 NY 181B290A16FECF14 RA RA7240 EGB0000034
26.09.2007 02.01.2008 NY 177EBFD10E18E8D9 RT RT8401 A20Y001508
26.09.2007 02.01.2008 NY 18250FB111198E07 WF YWFSWC WSSW000086
02.11.2007 02.01.2008 NY 1822865B104DC77D RT YRT0006 TABS000163599ACE06
09.11.2007 02.01.2008 NY 181B4E3F1AA100B1 SV SV5790 WSSV000196
09.11.2007 02.01.2008 NY 18198D910ABAFDE1 VD VDDBM15 DSPV000042
01.02.2008 02.01.2008 NY 1829732B1DEAE0B5 NL NL7590 BALR000074
06.02.2008 02.01.2008 NY 18199BE40A236E0E DI DI5200 DI00000064
09.11.2007 03.01.2008 NY 1819E38913230775 CD YCDUPH0 UPDS000044
20.11.2007 03.01.2008 NY 182C9C3B0558C263 WQ YWQ4502 CUBE00009459EF685F
28.09.2007 04.01.2008 NY 182260FC0F0ECDD1 DP DP0320 DP00000072
05.02.2008 04.01.2008 NY 182D5B910E0EF0F8 MF MF8810 MFR0000135
06.02.2008 06.01.2008 NY 182809F90649941C TN YTN0100 OTXO00008159C90F4FMVS
08.02.2008 06.01.2008 NY 17B728E407CB878E CK YCKT020 DCA0000026
08.02.2008 06.01.2008 NY 180AA5EA10AA4719 CK YCKT025 DCA0000157
26.10.2007 07.01.2008 NY 18250FC50DE7802F WF WF5410 WSSW000086
02.11.2007 07.01.2008 NY 1818019F1FF9964B RB YRBUXY1 RBK0000001594291B9
08.11.2007 07.01.2008 NY 181B2BFC1ACCE4BB CZ CZ6300 KLOM000062
08.11.2007 07.01.2008 NY 181C395509B589B4 DE DE0830 DE00000066
08.11.2007 07.01.2008 NY 181B2AE31C62940C DE DE5600 DE00000066
08.11.2007 07.01.2008 NY 17D16E79100FE8ED IT IT5003 RFT0000015
08.11.2007 07.01.2008 NY 17D16E7C096D1E00 IT IT5010 RFT0000015
08.11.2007 07.01.2008 NY 177B50660BB6E3A1 IT YITD00 A20Y001509542023A5
08.11.2007 07.01.2008 NY 181C3ACC04F24690 TN YTN0170 OTXO0000705965FE9DMVS
08.11.2007 07.01.2008 NY 1817FCD7198A6BA0 VV YVVZZ30 VDPS00011459426994MVS
08.11.2007 07.01.2008 NY 181E0A5906FDFCEB WB YWBSA2 WS8B00044259752FC0MVS
09.11.2007 07.01.2008 NY 1819BDE801C16516 EC YECCRAC SYNC000028595120A9
09.11.2007 07.01.2008 NY 18287E5404CC7ED9 SN SN5000 SAVS000016
09.11.2007 07.01.2008 NY 181CE5090B2FF3E3 SV SV0950 WSSV000196
09.11.2007 07.01.2008 NY 181DF495160F6BB6 TN YTN0201 OTXO0000705974793F
09.11.2007 07.01.2008 NY 1825350D068EB174 WB WB5340 TOFF000117
09.11.2007 07.01.2008 NY 182535190875479B WB YWB530 WS8B000476
09.11.2007 07.01.2008 NY 181AAC51064064A8 WB YWBSUM WS8B0004425958F075MVS
16.12.2007 07.01.2008 NY 180A80CD13ED63E0 KX YKXO002 TLBO00002358D13DB6MVS
07.02.2008 07.01.2008 NY 182C9BAF10EA9250 DE DE0030 DE00000070
08.02.2008 07.01.2008 NY 182E03DA01A9B86B DE YDE0021 DE0000007059FB22DBMVS
26.10.2007 08.01.2008 NY 18250EDA10EEAF8A WF YWF64CA WSSW00008659B00DFB
31.10.2007 08.01.2008 NY 18252FDE14A20557 WB YWBSA4 WS8B00047659B12272MVS
01.11.2007 08.01.2008 NY 1814AE571004BA08 BP YBPMUT BPST0000805926ACAC
02.11.2007 08.01.2008 NY 182286851C29279F RT RT0200 TABS000163
02.11.2007 08.01.2008 NY 1822865E1104AE21 RT YRT0007 TABS000163599ACE23
02.11.2007 08.01.2008 NY 1817FCE51F8A9A79 VV YVVZZ08 VDPS000114594269CDMVS
03.11.2007 08.01.2008 NY 182530661A8D8968 MF MF8810 MFR0000132
03.11.2007 08.01.2008 NY 1824BF3316F2EFAC RT RT5910 TABS000163
08.11.2007 08.01.2008 NY 181B2AF305874F6A DE DE7120 DE00000066
08.11.2007 08.01.2008 NY 181A0AFF0CF32612 PC01 PC5060 IVN0000032
08.11.2007 08.01.2008 NY 181A0AFF0CF32612 PC02 PC5060 IVN0000032
08.11.2007 08.01.2008 NY 181A0AFF0CF32612 PC03 PC5060 IVN0000032
08.11.2007 08.01.2008 NY 181A0AFF0CF32612 PC04 PC5060 IVN0000032
08.11.2007 08.01.2008 NY 181A0AFF0CF32612 PC05 PC5060 IVN0000032
08.11.2007 08.01.2008 NY 181A0AFF0CF32612 PC06 PC5060 IVN0000032
08.11.2007 08.01.2008 NY 181A0AFF0CF32612 PC07 PC5060 IVN0000032
08.11.2007 08.01.2008 NY 182194F214F42E61 SV SV5640 WSSV000240
08.11.2007 08.01.2008 NY 182530EC1951048A SV SV5740 WSSV000199
08.11.2007 08.01.2008 NY 182530FB129E26BC SV SV5760 WSSV000199
08.11.2007 08.01.2008 NY 181B48F112AAF5D8 TN TN5004 OTXO000070
08.11.2007 08.01.2008 NY 181B48F008A06B67 TN TN5014 OTXO000070
08.11.2007 08.01.2008 NY 181B49080DA8EC2A TN TN5016 OTXO000070
08.11.2007 08.01.2008 NY 1817FD0708B5F769 VV YVVZZ16 VDPS00011459426A5DMVS
08.11.2007 08.01.2008 NY 181B878B0D9D5495 VV YVVZZ19 VDPS00011459600648MVS
09.11.2007 08.01.2008 NY 1822D8CB0B3D7465 AP YAPUTGK APEN000048599D816AMVS
09.11.2007 08.01.2008 NY 1808EEA306001923 AT AT8500 ACS0000013
09.11.2007 08.01.2008 NY 17C57B9F08EB0C71 BP BP5030 BPST000037
09.11.2007 08.01.2008 NY 17C57B9713F86E82 BP BP5060 BPST000037
09.11.2007 08.01.2008 NY 181FABF912C2C020 CZ CZ5190 LOMN000030
09.11.2007 08.01.2008 NY 181B2C1D19AE3B15 CZ CZ8980 KLOM000062
09.11.2007 08.01.2008 NY 181CE48101B6A554 ED ED0950 ED00000056
09.11.2007 08.01.2008 NY 181E1DEA0F45DB3D ER ER5080 EAMR000035
09.11.2007 08.01.2008 NY 181F3E541E46A486 ER YERBER EAMR000035
09.11.2007 08.01.2008 NY 1811E44018AC16D1 ER YERDUPD EAMR000028590F467B
09.11.2007 08.01.2008 NY 181B4616182D32D6 MF MF7230 MFR0000124
09.11.2007 08.01.2008 NY 1823ED910C7196D0 MF MF8620 MFR0000132
09.11.2007 08.01.2008 NY 1825306302D00ECC MF MF8800 MFR0000132
09.11.2007 08.01.2008 NY 1819985512BC9A25 NI YNIPACU IPC0000196594FE57D
09.11.2007 08.01.2008 NY 18202BA600E9C7F4 NI YNIPREU IPC000019659870E1AMVS
09.11.2007 08.01.2008 NY 1819985512BC9A25 NI01 YNIPACU IPC0000196594FE57D
09.11.2007 08.01.2008 NY 1819985512BC9A25 NI02 YNIPACU IPC0000196594FE57D
09.11.2007 08.01.2008 NY 17593D4A17D6C6E1 NL YNLG010 A12P00279953023EDA
09.11.2007 08.01.2008 NY 181A0B120AA93F9D PC PC8000 IVN0000032
09.11.2007 08.01.2008 NY 18241CFE1C23B877 SN SN5100 SAVS000013
09.11.2007 08.01.2008 NY 181B490A1AC57E74 TN TN5030 OTXO000070
09.11.2007 08.01.2008 NY 182534FC0B8DF7BB TN TN7080 OTXO000085
09.11.2007 08.01.2008 NY 181B4D5103D71475 UU UU5170 RS20000077
09.11.2007 08.01.2008 NY 1818A6281F8089F6 VV YVVZZ14 VDPS0001145947F5C7MVS
09.11.2007 08.01.2008 NY 1818A62B17845F25 VV YVVZZ17 VDPS0001145947F5E0MVS
09.11.2007 08.01.2008 NY 1818A6301FB4922E VV YVVZZ18 VDPS0001145947F613MVS
09.11.2007 08.01.2008 NY 181B4BB20EEAEC4B VV YVVZZ20 VDPS000114595E2936MVS
09.11.2007 08.01.2008 NY 1817FD1C0428F0E3 VV YVVZZ23 VDPS00011459426A7FMVS
09.11.2007 08.01.2008 NY 18187F2C038FC493 VV YVVZZ27 VDPS0001145946AEC8MVS
09.11.2007 08.01.2008 NY 181E294B005D5567 VV YVVZZ28 VDPS00011459763336MVS
09.11.2007 08.01.2008 NY 1818A6550FC31CFA VV YVVZZ29 VDPS0001145947F759MVS
09.11.2007 08.01.2008 NY 181DF5961B515E0D WB WB1080 TOFF000109
09.11.2007 08.01.2008 NY 181DF58A1831B87D WB WB1090 TOFF000109
09.11.2007 08.01.2008 NY 1825351F025970A3 WB WB1100 TOFF000117
09.11.2007 08.01.2008 NY 1825351E1A39AD79 WB WB1290 TOFF000117
09.11.2007 08.01.2008 NY 182534CF1843DAC9 WB WB5570 WS8B000476
09.11.2007 08.01.2008 NY 182534F7102E2A77 WC WC5010 OTXO000085
09.11.2007 08.01.2008 NY 182534F9089DAC0A WC WC5050 OTXO000085
09.11.2007 08.01.2008 NY 181B493C12EAF752 WC WC7280 OTXO000070
09.11.2007 08.01.2008 NY 181B495210AC32F4 WC WC8120 OTXO000070
09.11.2007 08.01.2008 NY 1825350B07522C4B WC WC8401 OTXO000085
09.11.2007 08.01.2008 NY 1825350A05B3B5C4 WC WC8410 OTXO000085
09.11.2007 08.01.2008 NY 181D5A3D0CCE3601 WI YWI0087 TOFF000109596F6A5DMVS
09.11.2007 08.01.2008 NY 1823ECA910719939 WL WL8600 WSAW000106
09.11.2007 08.01.2008 NY 181B4F910E6F30F1 WQ WQ6010 CUBE000092
09.11.2007 08.01.2008 NY 182281741FAC0927 YY YYWBERX TOFF000117599AA4C0MVS
14.12.2007 08.01.2008 NN 1818A63C01AC1A78 VV YVVZZ25 VDPS0001145947F674MVS
15.12.2007 08.01.2008 NY 181B481A044DDC45 WB WB5270 WSTS000055
15.12.2007 08.01.2008 NY 181B481C080B1E88 WB WB5290 WSTS000055
02.02.2008 08.01.2008 NY 182C67910C6217F2 CZ CZ5494 ACP0000112
02.02.2008 08.01.2008 NY 182D5B94121827C3 MF MF8940 MFR0000135
07.02.2008 08.01.2008 NY 182625F00ECC6499 FI YFI0110 BKUR00009559B932C8MVS
08.02.2008 08.01.2008 NY 1833FFF607E1229D WB WB0840 WSTS000062
22.05.2009 08.01.2008 NY 16C01B7400693E8D HP1 AOV6RK HPSVP2AOV6RK
22.05.2009 08.01.2008 NY 16C01B7400693E8D HP3 AOV6RK HPSVP2AOV6RK
22.05.2009 08.01.2008 NY 16C01B7400693E8D HPS AOV6RK HPSVP2AOV6RK
26.10.2007 09.01.2008 NY 182834FF04A794FE WF YWFSWC WSSW000104
02.11.2007 09.01.2008 NY 182154840C727F99 CZ CZ5494 ACP0000114
09.11.2007 09.01.2008 NY 178558EC0450FFF6 AT AT0620 A20Y001564
09.11.2007 09.01.2008 NY 181051610E195147 MF YMFC113 MFR0000111590212EB
09.11.2007 09.01.2008 NY 1792E87101DD88BC NL NL5000 BALR000012
09.11.2007 09.01.2008 NY 18132445031B1F90 NL NL7310 BALR000073
09.11.2007 09.01.2008 NY 1817AC6D140EC561 NL NL7750 BALR000073
09.11.2007 09.01.2008 NY 1817AC22075B1ED5 NL NL7810 BALR000073
09.11.2007 09.01.2008 NY 1792E7CD0260E1C6 NL YNLG020 BALR00001254E5FBC3
09.11.2007 09.01.2008 NY 1792E7CD17B69B75 NL YNLG021 BALR00001254E5FBC9
09.11.2007 09.01.2008 NY 1759B1E30CA3442E NL YNLG03M A12P002799530610F5
09.11.2007 09.01.2008 NY 1759B1E41FC78AD8 NL YNLG040 A12P00279953061102
09.11.2007 09.01.2008 NY 1759B1E613B468AD NL YNLG120 A12P0027995306110F
09.11.2007 09.01.2008 NY 175A25021AD53DA6 NL YNLG121 A12P0028275309D6A8
09.11.2007 09.01.2008 NY 17853DE417AE0D72 NL YNLG130 BALR00000154735D32
09.11.2007 09.01.2008 NY 1759B1EA0013827A NL YNLG140 A12P0027995306112C
09.11.2007 09.01.2008 NN 181CE3791B4E6F70 TN YTN0100 OTXO000070596B8607MVS
09.11.2007 09.01.2008 NY 1817FCF5030407FC VV YVVZZ15 VDPS00011459426A38MVS
09.11.2007 09.01.2008 NY 181AAB9F1CC56848 WB YWBMAS WS8B0004425958EA9AMVS
09.11.2007 09.01.2008 NY 181ACC0B10C55764 WB YWBWRK WS8B0004425959FAC1
09.11.2007 09.01.2008 NY 1816780E1735FE5D WP YWPR1QX DBH00000965935ABFFMVS
09.11.2007 09.01.2008 NY 181678081C27A2FD WP YWPR7PX DBH00000965935ABE2MVS
08.02.2008 09.01.2008 NY 182F998D0987CB8B BP YBPMUT BPST0000925A086E14MVS
08.02.2008 09.01.2008 NY 18297691054C03D3 CZ CZ5150 KLOM000067
08.02.2008 09.01.2008 NY 18287D610DBEB1F3 CZ CZ5280 KLOM000067
08.02.2008 09.01.2008 NY 18287BF1185A5D4A CZ CZ6400 GSER000187
08.02.2008 09.01.2008 NY 182827800307233C CZ CZ6500 GSER000187
08.02.2008 09.01.2008 NY 182A6672101B375A CZ YCZMLIM KLOM00006759DCDE22MVS
08.02.2008 09.01.2008 NY 182C98791F3F0A34 DE DE0810 DE00000070
08.02.2008 09.01.2008 NY 182FEABA1F43CE80 DE DE0820 DE00000080
08.02.2008 09.01.2008 NY 182885E91FAA32D5 DE DE0830 DE00000070
08.02.2008 09.01.2008 NY 1829956D1501CA8D DE DE0860 DE00000070
08.02.2008 09.01.2008 NY 182885D91296A296 DE DE0940 DE00000070
08.02.2008 09.01.2008 NY 1828F7A41A86614A EC EC5130 KLOM000067
08.02.2008 09.01.2008 NY 182F98EB053A8CD0 ER YERPRI EAMR000053
08.02.2008 09.01.2008 NY 182E8584036B0FFF GM GM0850 GM00000153
08.02.2008 09.01.2008 NY 1812B3490A67FE90 KR YKRT511 KAUF00003859160EE7MVS
08.02.2008 09.01.2008 NY 1827DEA10ED45350 MF YMFC113 MFR000013659C7A3DF
08.02.2008 09.01.2008 AY 181B2B4C0C5D5F94 MF YMFC115 MFR0000125595D19C9
08.02.2008 09.01.2008 NY 1819B3830335DA1F NZ NZDBM83 ZVBI000019
08.02.2008 09.01.2008 NY 1817AF13117B8DB4 PC YPC0570 IVN0000032593FDD43
08.02.2008 09.01.2008 NY 1828FB091B03B8C9 PC01 YPC0520 IVN000003559D0F5B8
08.02.2008 09.01.2008 NY 181D87B0041B2526 PC01 YPC0830 IVN00000325970E7C8
08.02.2008 09.01.2008 NY 1828FB091B03B8C9 PC02 YPC0520 IVN000003559D0F5B8
08.02.2008 09.01.2008 NY 181D87B0041B2526 PC02 YPC0830 IVN00000325970E7C8
08.02.2008 09.01.2008 NY 1828FB091B03B8C9 PC03 YPC0520 IVN000003559D0F5B8
08.02.2008 09.01.2008 NY 181D87B0041B2526 PC03 YPC0830 IVN00000325970E7C8
08.02.2008 09.01.2008 NY 1828FB091B03B8C9 PC04 YPC0520 IVN000003559D0F5B8
08.02.2008 09.01.2008 NY 181D87B0041B2526 PC04 YPC0830 IVN00000325970E7C8
08.02.2008 09.01.2008 NY 1828FB091B03B8C9 PC05 YPC0520 IVN000003559D0F5B8
08.02.2008 09.01.2008 NY 181D87B0041B2526 PC05 YPC0830 IVN00000325970E7C8
08.02.2008 09.01.2008 NY 1828FB091B03B8C9 PC06 YPC0520 IVN000003559D0F5B8
08.02.2008 09.01.2008 NY 181D87B0041B2526 PC06 YPC0830 IVN00000325970E7C8
08.02.2008 09.01.2008 NY 1828FB091B03B8C9 PC07 YPC0520 IVN000003559D0F5B8
08.02.2008 09.01.2008 NY 181D87B0041B2526 PC07 YPC0830 IVN00000325970E7C8
08.02.2008 09.01.2008 NY 1831536E1FE85151 RI RI0810 RI00000026
08.02.2008 09.01.2008 NY 1830D2AD0CF9B217 TN YTNUPD OTXO0000945A12B0F8
08.02.2008 09.01.2008 NY 182C6A770DCFCC74 VV YVVZZ11 VDPS00011759EDC6C1MVS
08.02.2008 09.01.2008 NY 182BA678018048FC VV YVVZZ13 VDPS00011759E75A9CMVS
08.02.2008 09.01.2008 NY 1828F5031162B44D VV YVVZZ32 VDPS00011759D0C30EMVS
08.02.2008 09.01.2008 NY 181C3D160E9B0534 WB WB0510 WSTS000055
08.02.2008 09.01.2008 NY 181C3D1317362D11 WB WB0520 WSTS000055
08.02.2008 09.01.2008 NY 1829969C1B6CCD53 WB WB0530 WSTS000057
08.02.2008 09.01.2008 NY 181C3D0212342DC0 WB WB0580 WSTS000055
08.02.2008 09.01.2008 NY 181C3D0102B7E31B WB WB0600 WSTS000055
08.02.2008 09.01.2008 NY 1833FFF107F249CA WB WB0630 WSTS000062
08.02.2008 09.01.2008 NY 181C3CFB1AAB51EE WB WB0660 WSTS000055
08.02.2008 09.01.2008 NY 1833FFF21D120C95 WB WB0680 WSTS000062
08.02.2008 09.01.2008 NY 181C3CD1170CA459 WB WB0870 WSTS000055
08.02.2008 09.01.2008 NY 181C3CCF17C160C6 WB WB0920 WSTS000055
08.02.2008 09.01.2008 NY 182996A010DC1DFF WB WB0940 WSTS000057
08.02.2008 09.01.2008 NY 181C3CCB172EC79B WB WB0950 WSTS000055
08.02.2008 09.01.2008 NY 181C3CCD1F403412 WB WB0960 WSTS000055
08.02.2008 09.01.2008 NY 181C3CC406753F55 WB WB1340 WSTS000055
08.02.2008 09.01.2008 NY 18204EB91EC9358A WB WB5040 WS8B000444
08.02.2008 09.01.2008 NY 181B4824159489A2 WB WB5280 WSTS000055
08.02.2008 09.01.2008 NY 181B481F1BBB06A5 WB WB7040 WSTS000055
08.02.2008 09.01.2008 NY 181B482602EC0984 WB WB7290 WSTS000055
08.02.2008 09.01.2008 NY 181B482A0DF62AFA WB WB7370 WSTS000055
08.02.2008 09.01.2008 NY 181B48391E85C989 WB WB7390 WSTS000055
08.02.2008 09.01.2008 NY 1825A89C1BE2FC0A WB WB7520 WSTS000058
08.02.2008 09.01.2008 NY 181B482F0A727620 WB WB7540 WSTS000055
08.02.2008 09.01.2008 NY 181B48320DD3F4BC WB WB7560 WSTS000055
08.02.2008 09.01.2008 NY 181B48431C7CC611 WB WB7561 WSTS000055
08.02.2008 09.01.2008 NY 1833FFD610A9E51C WB WB7650 TOFF000126
08.02.2008 09.01.2008 NY 181B483F043C505C WB WB7730 WSTS000055
08.02.2008 09.01.2008 NY 181B4832085E397F WB WB7871 WSTS000055
08.02.2008 09.01.2008 NY 1819BA6F13A88258 WB YWB551 WS8B00044259510292MVS
08.02.2008 09.01.2008 NY 182C8DBA0B6EB050 WB YWBEBSM WSTS00005759EEEEAF
08.02.2008 09.01.2008 NY 182D67AB0731EA23 WF YWFCB02 WSSW00010059F604C2MVS
08.02.2008 09.01.2008 NY 182D678519607A65 WF YWFM537 WSSW00010059F6038CMVS
08.02.2008 09.01.2008 NY 182A870B12068D60 WN YWNOLOG FOND00009559DDEF94MVS
08.02.2008 09.01.2008 NY 1833049C1B0B6BC4 WQ WQ5950 CUBE000116
08.02.2008 09.01.2008 NY 181B4DE5099E5909 WQ YWQEXCP CUBE000092595E3C05
08.02.2008 09.01.2008 NY 18191FBC06497F15 YX YXWB231 WSTS000055594BF1B9MVS
08.02.2008 09.01.2008 NY 1818747A0BE43812 YY YYFIKST BKUR00008059465507MVS
08.02.2008 09.01.2008 NY 18191FA0041BF040 YY YYWBERR WSTS000055594BF0A8MVS
09.02.2008 09.01.2008 NY 181B4830012488BA WB WB7400 WSTS000055
08.02.2008 10.01.2008 NY 182CBB2E0528F8ED SN SN5100 SAVS000015
08.02.2008 10.01.2008 NY 18285BB91897D8D1 VD VDGLH00 DSPV000044
08.02.2008 10.01.2008 NY 181C3D11076E04F9 WB WB0550 WSTS000055
08.02.2008 10.01.2008 NY 181B48311C2115E4 WB WB7270 WSTS000055
08.02.2008 10.01.2008 AY 18330E6E17E9E911 WI YWI5951 WS8I0003435A256D39
08.02.2008 10.01.2008 AY 18330E6F12CCC760 WI YWI5952 WS8I0003435A256D40
08.02.2008 10.01.2008 AY 18330E7006B6D5EF WI YWI5953 WS8I0003435A256D44
08.02.2008 10.01.2008 AY 18330E71096038CD WI YWI5956 WS8I0003435A256D4B
08.02.2008 10.01.2008 AY 18330E7108C72FCD WI YWI5957 WS8I0003435A256D4D
08.02.2008 10.01.2008 AY 18330E710C4DE25C WI YWI5958 WS8I0003435A256D50
08.02.2008 10.01.2008 AY 18330E711B4C0B13 WI YWI5959 WS8I0003435A256D54
08.02.2008 10.01.2008 AY 18330E6E11748E96 WI YWI595A WS8I0003435A256D37
08.02.2008 10.01.2008 NY 182C9C3A09BCAD0A WQ YWQ4501 CUBE00009459EF6858
08.02.2008 11.01.2008 NY 182885F619AD723D DE DE0400 DE00000070
08.02.2008 11.01.2008 NY 182885E600E60682 DE DE0410 DE00000070
08.02.2008 11.01.2008 NY 182C9880013FCB5D DE DE0420 DE00000070
08.02.2008 11.01.2008 NY 182885EE0928090D DE DE0430 DE00000070
08.02.2008 11.01.2008 NY 1828FA5B00278D1F VV YVVZZ12 VDPS00011759D0EFDAMVS
07.02.2008 14.01.2008 NY 182977D2058AE45A CZ CZ6300 KLOM000067
07.02.2008 14.01.2008 NY 182885C100894FE3 DE DE5600 DE00000070
07.02.2008 14.01.2008 NY 1827682612A2BF5A WB WB7440 WSTS000060
07.02.2008 14.01.2008 NY 181B483811734D84 WB WB7770 WSTS000055
08.02.2008 14.01.2008 NY 182DD6451B9CC616 EC YECCRAC SYNC00003059F9A49E
08.02.2008 14.01.2008 NY 182A62711B731854 TN YTN0101 OTXO00008159DCBCA0
08.02.2008 14.01.2008 NY 181913010BD238E1 TR YTRHISP AITR000041594B870D
08.02.2008 14.01.2008 NY 1833FFD007819E9D WB WB5340 TOFF000126
19.01.2008 15.01.2008 NY 183400A71EDB3498 ER ER8020 EAMR000053
07.02.2008 15.01.2008 NY 182835EF138E560D AP YAPUTGK APEN00004959CA802BMVS
07.02.2008 15.01.2008 NY 181B2AD7040534AF DE DE5690 DE00000066
07.02.2008 15.01.2008 NY 182CBB280C00CF30 SN SN5000 SAVS000015
07.02.2008 15.01.2008 NY 1823CDF118A17310 SN YSNB002 SAVS00001359A58A06
07.02.2008 15.01.2008 NY 182E8111012CCA11 TN TN5004 OTXO000081
07.02.2008 15.01.2008 NY 182E810A01038C2E TN TN5016 OTXO000081
07.02.2008 15.01.2008 NY 181B481A0C85C3E1 WB WB7441 WSTS000055
07.02.2008 15.01.2008 NY 181B483C12088EBD WB WB7470 WSTS000055
08.02.2008 15.01.2008 NY 1832DC7A18736311 BP BP5030 BPST000092
08.02.2008 15.01.2008 NY 182E80C112E8A2B7 CZ CZ5190 LOMN000034
08.02.2008 15.01.2008 NY 183215730FA6261A CZ CZ8980 GSER000211
08.02.2008 15.01.2008 NY 17EBD49D0A8893DC EQ YEQISRK EAGL00001857CFFEDB
08.02.2008 15.01.2008 NY 182856FA1C3F9E6A ER ER5080 EAMR000048
08.02.2008 15.01.2008 NY 18287E851C6356CE GM YGMSTEU GM0000015359CCE121MVS
08.02.2008 15.01.2008 NY 1827E0DC0C335646 MF MF7230 MFR0000135
08.02.2008 15.01.2008 NY 182744500E501441 MF MF7770 MFR0000135
08.02.2008 15.01.2008 NY 1827E15A10164428 MF MF8620 MFR0000135
08.02.2008 15.01.2008 NY 1828FBD50DB81F06 MF MF8800 MFR0000135
08.02.2008 15.01.2008 NY 18271CDD03DDF6B2 NI YNIPACU IPC000020959C14A76MVS
08.02.2008 15.01.2008 NY 182C4B631E0A7ED2 NI YNIPREU IPC000020959ECC21DMVS
08.02.2008 15.01.2008 NY 18271CDD03DDF6B2 NI01 YNIPACU IPC000020959C14A76MVS
08.02.2008 15.01.2008 NY 18271CDD03DDF6B2 NI02 YNIPACU IPC000020959C14A76MVS
08.02.2008 15.01.2008 NY 1829730E0C5E414F NL NL5000 BALR000074
08.02.2008 15.01.2008 NY 181A0B0A1AC0A815 PC PC5090 IVN0000032
08.02.2008 15.01.2008 NY 181A0B080BF89FC9 PC PC5150 IVN0000032
08.02.2008 15.01.2008 NY 1828594E0D8AD6F9 PC PC7100 IVN0000035
08.02.2008 15.01.2008 NY 182880AB1AEAFF22 PC PC8000 IVN0000035
08.02.2008 15.01.2008 NY 1828595715D2BA60 PC01 PC5060 IVN0000035
08.02.2008 15.01.2008 NY 1828595715D2BA60 PC02 PC5060 IVN0000035
08.02.2008 15.01.2008 NY 1828595715D2BA60 PC03 PC5060 IVN0000035
08.02.2008 15.01.2008 NY 1828595715D2BA60 PC04 PC5060 IVN0000035
08.02.2008 15.01.2008 NY 1828595715D2BA60 PC05 PC5060 IVN0000035
08.02.2008 15.01.2008 NY 1828595715D2BA60 PC06 PC5060 IVN0000035
08.02.2008 15.01.2008 NY 1828595715D2BA60 PC07 PC5060 IVN0000035
08.02.2008 15.01.2008 NY 1823CE1C06798B40 SN SN5006 SAVS000013
08.02.2008 15.01.2008 NY 183243810540D063 SV SV0950 WSSV000246
08.02.2008 15.01.2008 NY 1827D9FA15D678AA TN YTNSICH OTXO00008159C777D9
08.02.2008 15.01.2008 NY 1828882A1064CD7E UU UU5170 RS20000079
08.02.2008 15.01.2008 NY 18291E760E5D6408 VV YVVZZ17 VDPS00011759D21EC1MVS
08.02.2008 15.01.2008 NY 182923431C5EAA85 VV YVVZZ25 VDPS00011759D246F2MVS
08.02.2008 15.01.2008 NY 181B482217C8CC17 WB WB5090 WSTS000055
08.02.2008 15.01.2008 NY 181B483902A2C31C WB WB5260 WSTS000055
08.02.2008 15.01.2008 NY 18341F590EDA153B WB WB5270 WSTS000065
08.02.2008 15.01.2008 NY 18341F6018E8CCF8 WB WB5290 WSTS000065
08.02.2008 15.01.2008 NY 181B48271F50AB63 WB WB7280 WSTS000055
08.02.2008 15.01.2008 NY 181B482D0DE532E3 WB WB7410 WSTS000055
08.02.2008 15.01.2008 NY 181B482D0AA6E018 WB WB7420 WSTS000055
08.02.2008 15.01.2008 NY 181DF5BC0208ABD5 WB WB8650 TOFF000109
08.02.2008 15.01.2008 NY 183400000C9259CF WC WC5010 WSTS000062
08.02.2008 15.01.2008 NY 182E8135026D808D WC WC5050 OTXO000081
08.02.2008 15.01.2008 NY 1825350C14C8C654 WC WC7220 OTXO000085
08.02.2008 15.01.2008 NY 18253502188B9652 WC WC7240 OTXO000085
08.02.2008 15.01.2008 NY 182534F204C6EC26 WC WC7260 OTXO000085
08.02.2008 15.01.2008 NY 182E812317ED996C WC WC7280 OTXO000081
08.02.2008 15.01.2008 NY 1825350F0030FE42 WC WC7310 OTXO000085
08.02.2008 15.01.2008 NY 18253506015FA880 WC WC7320 OTXO000085
08.02.2008 15.01.2008 NY 1825350418934F44 WC WC7500 OTXO000085
08.02.2008 15.01.2008 NY 182534F41F8BF991 WC WC7530 OTXO000085
08.02.2008 15.01.2008 NY 1834000A06F6C60B WC WC8401 WSTS000062
08.02.2008 15.01.2008 NY 1833FFFD102242EA WC WC8410 WSTS000062
08.02.2008 15.01.2008 AY 18330E7013DC72CB WI YWI5954 WS8I0003435A256D47
08.02.2008 15.01.2008 NY 182D5EEC1A184F46 WL WL8600 WSAW000104
08.02.2008 15.01.2008 NY 182C9CD907867171 WQ WQ6010 CUBE000094
08.02.2008 15.01.2008 NY 181A046E0A291C88 YY YYWBVIN WSTS0000555953702BMVS
09.02.2008 15.01.2008 NY 181B48280797DBEA WB WB7320 WSTS000055
09.02.2008 15.01.2008 NY 181B48221360CA92 WB WB7330 WSTS000055
09.02.2008 15.01.2008 NY 181B4837037FE738 WB WB7340 WSTS000055
09.02.2008 15.01.2008 NY 181B482A14F9B1D5 WB WB7380 WSTS000055
09.02.2008 15.01.2008 NY 181B48241E46F8D4 WB WB7381 WSTS000055
08.02.2008 16.01.2008 NY 182FBB770EAF3D5E TN YTN0202 OTXO0000925A098A8AMVS
08.02.2008 16.01.2008 NY 181DF4B4023686AD TN YTN0210 OTXO00007059747A48
08.02.2008 16.01.2008 AY 1827E6B60DE283C1 WB YWBWRK WS8B00046959C7E7A6MVS
17.02.2008 16.01.2008 NY 18385E4E05B9ADD9 CZ CZ8010 APEN000050
17.02.2008 16.01.2008 NY 18385DCE04E3A030 CZ CZ8020 APEN000050
08.02.2008 17.01.2008 NY 182A8F8C17CC8305 ED ED0950 ED00000062
08.02.2008 17.01.2008 NY 17FE89A8071E1E31 NTA1P CZA0219 A02E000568586CDE37
08.02.2008 17.01.2008 NY 1828FDCA15B511F3 WI YWI0087 TOFF00011259D10C51MVS
08.02.2008 18.01.2008 NY 182F99880EDCE9B7 BP YBPMUT BPST0000925A086E14
07.02.2008 25.01.2008 NY 1822AB751B567188 CZ YCZM025 LOFT000049599C053FMVS
09.02.2008 30.01.2008 NY 1818A5FD0CD7D3BC VV YVVZZ3R VDPS0001145947F471MVS
08.02.2008 31.01.2008 NY 18207C8E03B40E04 BX YBXADBR CLOS0001805989B493MVS
08.02.2008 31.01.2008 NY 181D01071EFF58FD CZ YCZJABW GSER000170596C7E08MVS
08.02.2008 31.01.2008 NY 1817AC0B1DFF03BA CZ YCZPABW GSER000181593FC3E5
08.02.2008 31.01.2008 NY 17D11FC61AB273AA NTA1P CZA0013 A02E00056056EFE947
08.02.2008 31.01.2008 NY 1828835214C3F08C NTA1P CZA0215 A02E00058259CD097C
08.02.2008 31.01.2008 NY 1830D286004BCE73 TN YTNW100 OTXO0000945A12AF80MVS
08.02.2008 31.01.2008 NY 182A35830C65F21A TN YTNW170 OTXO00008159DB43A5MVS
08.02.2008 31.01.2008 NY 1828086F1EEB6F1D VV YVVZZ04 VDPS00011759C9027DMVS
08.03.2008 31.01.2008 YY 176164B10AD93BB4 ADBL ADB2PRP
never      01.02.2008 NY 18388827038BF38D NL NL7590 BALR000076
never      01.02.2008 NY 18399F4811F221D2 WQ WQ6000 CUBE000118
22.02.2008 05.02.2008 NY 1838642A0B36C2FB DE DE0090 DE00000077
21.02.2008 06.02.2008 NY 1839EF7A1C50FC95 DE DE0030 DE00000077
22.02.2008 06.02.2008 NY 183864320138C12E DE DE0050 DE00000077
22.02.2008 07.02.2008 NY 183AC1721966537F WB WB0510 WSTS000061
16.02.2008 09.02.2008 NY 183AC1B80F13FC35 WB WB5120 WSTS000061
16.02.2008 09.02.2008 NY 183AC1960E37DD65 WB WB7020 WSTS000061
16.02.2008 09.02.2008 NY 183AC1DD1F730DB2 WB WB7360 WSTS000061
12.06.2009 10.02.2008 NY 175DC05909B83990 HP1 ZVKUZRI HPSVP2ZVKUZRI
12.06.2009 10.02.2008 NY 175DC05909B83990 HP3 ZVKUZRI HPSVP2ZVKUZRI
11.02.2008 12.02.2008 NY 183B0B360E15C7EE WB WB0630 WSTS000061
11.02.2008 12.02.2008 NY 183B0B38156B7F1A WB WB0680 WSTS000061
21.02.2008 12.02.2008 NY 183A1A8A1EB0E8FA CZ CZ6300 KLOM000069
21.02.2008 12.02.2008 NY 183AC1E20ECFF34A WB WB7440 WSTS000061
21.02.2008 12.02.2008 NY 183AC1E50FA35B58 WB WB7770 WSTS000061
22.02.2008 12.02.2008 NY 1838641C013BB903 DE DE0420 DE00000077
22.02.2008 12.02.2008 NY 183AC1941A2DA759 WB WB0520 WSTS000061
22.02.2008 12.02.2008 NY 183AC1CE097EA2E8 WB WB0600 WSTS000061
22.02.2008 12.02.2008 NY 183AC1C91411C70D WB WB0660 WSTS000061
22.02.2008 12.02.2008 NY 183AC18C01E003B4 WB WB0920 WSTS000061
22.02.2008 12.02.2008 NY 183AC17D1EDB58A4 WB WB0940 WSTS000061
22.02.2008 12.02.2008 NY 183AC1DC0BC41F26 WB WB1340 WSTS000061
09.05.2008 12.02.2008 NY 1833083003B5796C PC YPC0570 IVN00000385A2538BCMVS
13.02.2008 13.02.2008 NY 182E092B1156CB86 VV YVVZZ33 VDPS00011759FB4F83MVS
20.02.2008 13.02.2008 NY 1838634D0E21B868 RA RA7240 EGB0000036
21.02.2008 13.02.2008 NY 18386400124A13EB DE DE5600 DE00000077
21.02.2008 13.02.2008 NY 183863E610EC6DBD DE DE5690 DE00000077
21.02.2008 13.02.2008 NY 18399EDA165E51E8 SN SN5000 SAVS000018
21.02.2008 13.02.2008 NY 183AC1CF15313E29 WB WB7441 WSTS000061
21.02.2008 13.02.2008 NY 183AC1A20DF58A73 WB WB7470 WSTS000061
22.02.2008 13.02.2008 NY 1839F73E1C54AB27 CZ CZ5190 LOMN000038
22.02.2008 13.02.2008 NY 1839F73D1787CCD8 CZ CZ8980 KLOM000069
22.02.2008 13.02.2008 NY 18399EDC0E39377D SN SN5100 SAVS000018
22.02.2008 13.02.2008 NY 183AC19E03CF5557 WB WB0530 WSTS000061
22.02.2008 13.02.2008 NY 183AC1751EDECFEA WB WB0580 WSTS000061
22.02.2008 13.02.2008 NY 183AC19A150B3F03 WB WB0950 WSTS000061
22.02.2008 13.02.2008 NY 183AC1911DCB20D6 WB WB0960 WSTS000061
22.02.2008 13.02.2008 NY 183AC1D2122C81BA WB WB5090 WSTS000061
22.02.2008 13.02.2008 NY 183AC1B002D07BED WB WB5260 WSTS000061
22.02.2008 13.02.2008 NY 183AC1BE12F0BC5F WB WB5270 WSTS000061
22.02.2008 13.02.2008 NY 183AC1E908892539 WB WB5290 WSTS000061
22.02.2008 13.02.2008 NY 183AC1B60EFBB612 WB WB7280 WSTS000061
22.02.2008 13.02.2008 NY 183AC1CC19F7DF9E WB WB7410 WSTS000061
22.02.2008 13.02.2008 NY 183AC1C21F3FB82C WB WB7420 WSTS000061
22.02.2008 13.02.2008 NY 183B0B3A0FA06533 WB WB8650 TOFF000122
22.02.2008 13.02.2008 NY 183AC19014C8320D WC WC5010 WSTS000061
22.02.2008 13.02.2008 NY 183AC1CC1CD093D1 WC WC5050 WSTS000061
22.02.2008 13.02.2008 NY 183AC1FC07FC070B WC WC7220 WSTS000061
22.02.2008 13.02.2008 NY 183AC1DA1EE75450 WC WC7240 WSTS000061
22.02.2008 13.02.2008 NY 183AC1E705C4FF6C WC WC7260 WSTS000061
22.02.2008 13.02.2008 NY 183AC1FE14094BDC WC WC7280 WSTS000061
22.02.2008 13.02.2008 NY 183AC1DD0A52AD3D WC WC7310 WSTS000061
22.02.2008 13.02.2008 NY 183AC1D4058AAF50 WC WC7320 WSTS000061
22.02.2008 13.02.2008 NY 183AC1B20B8F877D WC WC7500 WSTS000061
22.02.2008 13.02.2008 NY 183AC1F11FD2B616 WC WC7530 WSTS000061
22.02.2008 13.02.2008 NY 183AC2080516E17A WC WC8401 WSTS000061
22.02.2008 13.02.2008 NY 183B0C9A0EFD390B WC WC8410 WSTS000061
22.02.2008 13.02.2008 NY 183860761FDB5AE0 WL WL8600 WSAW000110
22.02.2008 13.02.2008 NY 1839AA5609FB4E83 WQ WQ5950 CUBE000118
22.02.2008 13.02.2008 NY 183B07F30EDA5573 WQ WQ6010 CUBE000118
07.08.2008 13.02.2008 NY 1825D76E0289AEA0 HB YHBK011 ASIA00013259B6A096
11.02.2008 14.02.2008 NY 183577DB03681FC4 WB YWBEBSM WSTS0000615A39A815MVS
13.02.2008 14.02.2008 NY 18385D8B1D38F301 VD VDGLH00 DSPV000047
22.02.2008 14.02.2008 NY 1838881D0C28FF5E NL NL5000 BALR000076
22.02.2008 14.02.2008 NY 183B0B170D4A05FC WB WB1090 TOFF000122
14.02.2008 15.02.2008 NY 183862E3172CD76D WQ YWQ4501 CUBE0001185A52231D
21.02.2008 15.02.2008 NY 183B0B1516CC80C8 WB WB0820 TOFF000122
22.02.2008 15.02.2008 NY 183B0B3D0130A622 WB WB0840 WSTS000061
14.03.2008 15.02.2008 NY 183577D302791E02 WB YWB0082 WSTS0000615A39A807MVS
09.05.2008 15.02.2008 NY 18191FBE00F669D5 YX YXWB021 WSTS000055594BF1C2MVS
22.02.2008 16.02.2008 NY 183B0B1200545349 WB WB1080 TOFF000122
never      29.02.2008 NY 183A1A5F0B347825 CZ CZ6400 GSER000206
21.02.2008 29.02.2008 NY 183AC1D51DD58D4D WB WB7040 WSTS000061
21.02.2008 29.02.2008 NY 183AC1F10034CD45 WB WB7390 WSTS000061
22.02.2008 29.02.2008 NY 183A1A6308A8BE9E CZ CZ6500 GSER000206
22.02.2008 29.02.2008 NY 1838690B1B609F65 EC EC5130 KLOM000069
22.02.2008 29.02.2008 NY 183B0D381BD50164 WB WB5040 WS8B000520
22.02.2008 29.02.2008 NY 183AC1DA0A0F34A9 WB WB5280 WSTS000061
22.02.2008 29.02.2008 NY 183AC1BB0E7DB729 WB WB7270 WSTS000061
22.02.2008 29.02.2008 NY 183AC1981F318662 WB WB7290 WSTS000061
22.02.2008 29.02.2008 NY 183AC1C91FC69517 WB WB7370 WSTS000061
22.02.2008 29.02.2008 NY 183AC1C007EFCEF0 WB WB7380 WSTS000061
22.02.2008 29.02.2008 NY 183AC19F1F2FEB7F WB WB7381 WSTS000061
22.02.2008 29.02.2008 NY 183AC1E01C10149E WB WB7400 WSTS000061
22.02.2008 29.02.2008 NY 183AC1F310D58820 WB WB7520 WSTS000061
22.02.2008 29.02.2008 NY 183AC1E30D458B40 WB WB7540 WSTS000061
22.02.2008 29.02.2008 NY 183AC1CF003A4F98 WB WB7560 WSTS000061
22.02.2008 29.02.2008 NY 183AC1C5185269D1 WB WB7561 WSTS000061
22.02.2008 29.02.2008 NY 183B0B1A032F89EE WB WB7650 TOFF000122
22.02.2008 29.02.2008 NY 183AC1F60130A53A WB WB7730 WSTS000061
22.02.2008 29.02.2008 NY 183AC1C909050118 WB WB7871 WSTS000061
09.05.2008 29.02.2008 NY 183577DB152862F5 WB YWB5417 WSTS0000615A39A861MVS
20.02.2008 01.03.2008 NY 1835405102269BF4 CZ YCZPABW GSER0001995A37D687MVS
21.02.2008 01.03.2008 NY 1838643E1A236A4F DE DE0830 DE00000077
22.02.2008 01.03.2008 NY 183B2FA41E17E9A9 CZ CZ5150 KLOM000069
22.02.2008 01.03.2008 NY 183AC1BD01A3E5A0 WB WB7320 WSTS000061
22.02.2008 01.03.2008 NY 183AC19D154DBA79 WB WB7330 WSTS000061
22.02.2008 01.03.2008 NY 183AC1EE0E3635AA WB WB7340 WSTS000061
29.02.2008 01.03.2008 NY 183BD1340BA2B019 ER ER8020 EAMR000061
22.02.2008 02.03.2008 NY 183864321E43A749 DE DE0400 DE00000077
22.02.2008 02.03.2008 NY 1839ED0D0A42A304 ED ED0950 ED00000071
14.03.2008 02.03.2008 NY 1828834913A18388 NTA1P CZA0255 A02E00058259CD092F
20.02.2008 03.03.2008 NY 183E5BC11F440D44 WQ YWQ4501 CUBE0001325A843C30
22.02.2008 03.03.2008 NY 1839EF800EAF6C4E DE DE0820 DE00000077
22.02.2008 03.03.2008 NY 1838643603D96F33 DE DE0940 DE00000077
26.06.2009 03.03.2008 NY 16A0879F0D4FD138 HP1 RWBK023 HPSVP2RWBK023
26.06.2009 03.03.2008 NY 16A0879F0D4FD138 HP3 RWBK023 HPSVP2RWBK023
22.02.2008 04.03.2008 NY 1838641D010CFA4C DE DE0410 DE00000077
22.02.2008 04.03.2008 NY 1838641B024C4353 DE DE0810 DE00000077
22.02.2008 04.03.2008 NY 1839798C1BA8ADA8 DE DE0860 DE00000077
22.02.2008 04.03.2008 NY 1839ED1405A97365 RI RI0810 RI00000027
14.03.2008 07.03.2008 NY 1837E54B04003412 NTA1P CZA0215 A02E0005745A4E0589
14.03.2008 08.03.2008 NY 1831CA6D0A25F6D0 ER YERBER EAMR000053
04.03.2008 10.03.2008 NY 183451190FA513AF CZ YCZJABW GSER0001995A2FFFC5MVS
never      11.03.2008 NY 18261D0D1F010506 WP YWPR2PX DBH000012659B8E89C
14.03.2008 31.03.2008 NY 182D843E1441CBDD NZ NZDBM83 ZVBI000021
14.03.2008 31.03.2008 NY 183DE8061292451E WB YWBEBSM WSTS0000695A80713EMVS
14.03.2008 31.03.2008 NY 1837BE561A816E6C WN YWNOLOG FOND0001065A4CBEB4MVS
13.03.2008 01.04.2008 NY 18356347080AFC3C AP YAPUTGK APEN0000505A38FBC3MVS
01.05.2008 01.04.2008 NY 1823CE1F174F5DBD SN SN5903 SAVS000013
02.05.2008 01.04.2008 NY 18261D3408908EA2 WP YWPR5PX DBH000012659B8E9C1MVS
09.05.2008 01.04.2008 NY 1839C90B0C5E2AEA VV YVVZZ12 VDPS0001185A5DDF82
13.03.2008 03.04.2008 NY 183F29560FF0C30D CZ YCZPABW VEFO0000455A8AF898MVS
02.05.2008 03.04.2008 NY 18321A5510E3BDD3 RB YRBUXY1 RBK00000185A1D6D88
02.05.2008 04.04.2008 NY 183538721B3EE313 CZ CZ5494 ACP0000115
02.05.2008 04.04.2008 NY 1830D0140186B080 MF MF8940 MFR0000148
02.05.2008 04.04.2008 NY 1837E6CD1F3DEB61 SN SN6007 SAVS000018
29.05.2009 05.04.2008 NY 17350B8909FC6030 HP1 ALSIRI HPSVP2ALSIRI
29.05.2009 05.04.2008 NY 17350B8909FC6030 HP3 ALSIRI HPSVP2ALSIRI
09.05.2008 06.04.2008 NY 1836343A01FC406E CK YCKT025 DCA0000188
04.05.2008 07.04.2008 NY 181B28940F777E49 CZ CZ7510 APEN000042
04.05.2008 07.04.2008 NY 18198DA416543BCB VD VDUTI41 DSPV000042
02.05.2008 08.04.2008 NY 182D5B931642F637 MF MF8930 MFR0000135
08.05.2008 08.04.2008 NY 180C5C4101678B29 KR YKRT397 VEFO00003458E0E01BMVS
09.05.2008 08.04.2008 NY 1838B74B04E905F2 SV SV0950 WSSV000248
09.05.2008 09.04.2008 NY 1833017D0F9CD871 BX YBXADBR CLOS0001835A25007AMVS
09.05.2008 09.04.2008 NY 1838691005B5F612 CZ CZ5280 KLOM000069
09.05.2008 09.04.2008 NY 182976891A82C016 EC YECUCRK SYNC00003059D501A0MVS
09.05.2008 09.04.2008 NY 180C5C3F12722594 KR YKRT385 VEFO00003458E0E00AMVS
09.05.2008 09.04.2008 NY 182CBB2506CA0F5D SN SN0200 SAVS000015
09.05.2008 09.04.2008 NY 181B9C9A066F4579 SN YSN100I SAVS0000055960D039
09.05.2008 09.04.2008 NY 181B9C9A1E4FC7E2 SN YSN101I SAVS0000055960D042
09.05.2008 09.04.2008 NY 181B9C9C1925A484 SN YSN103I SAVS0000055960D050
09.05.2008 09.04.2008 NY 181B9CC8057623FA SN YSN110I SAVS0000055960D1C4
09.05.2008 09.04.2008 NY 181B9CA208374FDF SN YSN120 SAVS0000055960D067
09.05.2008 09.04.2008 NY 181B9CA417EB77B7 SN YSN187I SAVS0000055960D095
09.05.2008 09.04.2008 NY 182CBA4A10CD65D5 SN YSNA005 SAVS00001559F06462
09.05.2008 09.04.2008 NY 181F3F0E099FEF2B SN YSND001 SAVS000005597F4D78
09.05.2008 09.04.2008 NY 181B9C7D1E8FEEB9 SN YSND003 SAVS0000055960CF4C
09.05.2008 09.04.2008 NY 181B9C7E1B2359ED SN YSND004 SAVS0000055960CF54
09.05.2008 09.04.2008 NY 181B9C7F1A5C29C9 SN YSND005 SAVS0000055960CF5D
09.05.2008 09.04.2008 NY 181B9C8B0093806B SN YSND014 SAVS0000055960CFBC
09.05.2008 09.04.2008 NY 181B9C8B1EA8591B SN YSND015 SAVS0000055960CFC3
09.05.2008 09.04.2008 NY 181B9C8C1E40A05F SN YSNI001 SAVS0000055960CFCC
09.05.2008 09.04.2008 NY 1823CDFD0786DCDF SN YSNI003 SAVS00001359A58A67
09.05.2008 09.04.2008 NY 1835776F0D4B98ED TN YTNW100 CSQS0000075A39A4F1MVS
09.05.2008 09.04.2008 NY 1830B6E915E88DAF TR YTRHISP AITR0000475A11C803MVS
09.05.2008 09.04.2008 NY 182998FB175A9A89 VD YVDRES VDSS00010259D6229C
09.05.2008 09.04.2008 NY 183B10421CCC957F VV YVV3EIP VDPS0001185A68985AMVS
09.05.2008 09.04.2008 NY 1839CB7F087E5FFE VV YVVZZ04 VDPS0001185A5DF2D6MVS
09.05.2008 09.04.2008 NY 1829243A01ED2F4D VV YVVZZ07 VDPS00011759D24F27MVS
09.05.2008 09.04.2008 NY 18323C1908597B86 VV YVVZZ32 VDPS0001185A1E88B5MVS
09.05.2008 09.04.2008 NY 18191FF604E3B4BC VW YVWB641 WSTS000055594BF359MVS
09.05.2008 09.04.2008 NY 181B482C1BB27209 WB WB7880 WSTS000055
09.05.2008 09.04.2008 NY 1819B9520C3A9E96 WB YWBDGP WS8B0004425950FA22MVS
09.05.2008 09.04.2008 AY 1827DB770637A060 WI YWINS01 WS8I00029559C78926MVS
09.05.2008 09.04.2008 AY 1827DB760EF31B6F WI YWINS02 WS8I00029559C7892FMVS
09.05.2008 09.04.2008 AY 1827DB781C745302 WI YWINS03 WS8I00029559C7893AMVS
09.05.2008 09.04.2008 AY 1827DB7E06EE4F7D WI YWINS04 WS8I00029559C78947MVS
09.05.2008 09.04.2008 AY 1827DB7E07F2440D WI YWINS05 WS8I00029559C78950MVS
09.05.2008 09.04.2008 AY 1827DB7F0FC48985 WI YWINS06 WS8I00029559C78959MVS
09.05.2008 09.04.2008 AY 1827DB7C156E829B WI YWINS07 WS8I00029559C78966MVS
09.05.2008 09.04.2008 AY 1827DB8009B71C5F WI YWINS08 WS8I00029559C7898DMVS
09.05.2008 09.04.2008 AY 1827DB821DB68241 WI YWINS09 WS8I00029559C78995MVS
09.05.2008 09.04.2008 AY 1827DB830546529D WI YWINS10 WS8I00029559C789A1MVS
09.05.2008 09.04.2008 NY 18261CE3147F6401 WP YWPL5P1 DBH000012659B8E717MVS
09.05.2008 09.04.2008 NY 18261CE8181C55AC WP YWPL8P1 DBH000012659B8E744MVS
09.05.2008 09.04.2008 NY 18261D11084946C5 WP YWPR2PX DBH000012659B8E89CMVS
09.05.2008 09.04.2008 NY 18261F6310F0DE76 WP YWPR6PX DBH000012659B8FB2EMVS
09.05.2008 09.04.2008 NY 18261F6E0B52B762 WP YWPR7PX DBH000012659B8FB4BMVS
09.05.2008 09.04.2008 NY 1826204404A2E54E WP YWPRAPX DBH000012659B90365MVS
09.05.2008 09.04.2008 NY 18261F3D1AE3565B WP YWPRCPX DBH000012659B8FAB2MVS
09.05.2008 09.04.2008 NY 18261F3E033106D9 WP YWPRDPX DBH000012659B8FAC3
09.05.2008 09.04.2008 NY 18191FC10C8F9119 YX YXWB011 WSTS000055594BF1D5MVS
09.05.2008 09.04.2008 NY 18191FBA1E7C88EA YX YXWB116 WSTS000055594BF1B0MVS
09.05.2008 09.04.2008 NY 183577E21429B53C YX YXWB231 WSTS0000615A39A8B6MVS
09.05.2008 09.04.2008 NY 1839CABB0F6CC418 YY YYFIKST BKUR0000965A5DE9E3MVS
09.05.2008 09.04.2008 NY 183577E71F153012 YY YYWBERR WSTS0000615A39A896MVS
09.05.2008 09.04.2008 NY 183577CE0751ADE5 YY YYWBERX TOFF0001225A39A7DFMVS
09.05.2008 09.04.2008 NY 18191FBF13B0DEB6 YY YYWBESM WSTS000055594BF1CCMVS
10.05.2008 09.04.2008 NY 1824E1921E3AF7B0 VD VDDBM01 DSPV000044
10.05.2008 09.04.2008 NY 18134A4318AA4A30 VD VDDBM04 DSPV000042
10.05.2008 09.04.2008 NY 183DDEC91E45FFFB VD VDGLH00 DSPV000050
10.05.2008 09.04.2008 NY 1824E198035338B8 VD VDINI01 DSPV000044
10.05.2008 09.04.2008 NY 18134A351DD80C62 VD VDREC00 DSPV000042
10.05.2008 09.04.2008 NY 1824DF6100693A94 VD YVDDFA DSPV00004459AE7FA5MVS
10.05.2008 09.04.2008 NY 1829450A0E4AEA87 VV YVVZZ05 VDPS00011759D36248MVS
10.05.2008 09.04.2008 NY 1839C8CB00488F3B VV YVVZZ3R VDPS0001185A5DDB06MVS
25.08.2008 09.04.2008 NY 18261D0B1414CBDD WP YWPR1PX DBH000012659B8E86BMVS
07.05.2008 14.04.2008 NY 182601F20B51C94C ER YERDCUR EAMR00004859B80521MVS
02.05.2008 15.04.2008 NY 18261D080413902C WP YWPR1PX DBH000012659B8E86B
09.05.2008 15.04.2008 NY 1839ECF801680C75 MF YMFC110 MFR00001495A5F0CE2
09.05.2008 15.04.2008 NY 183F488B0039A181 WQ YWQ4501 CUBE0001295A8BFE05
09.05.2008 17.04.2008 NY 183F488E06E81464 WQ YWQBERI CUBE0001295A8BFDDF
09.05.2008 18.04.2008 AY 183578840B87DA99 WB YWBWRK WS8B0005185A39AE0EMVS
09.05.2008 22.04.2008 NY 182718F7011EF702 VD VDDBM15 DSPV000044
09.05.2008 22.04.2008 NY 177E95D112253231 WB WB7300 A06M025453
09.05.2008 22.04.2008 NY 1819B95600C828CF WB YWBDGP2 WS8B0004425950FA29MVS
07.05.2008 23.04.2008 NY 183B104111800348 VV YVV3EIP VDPS0001185A68985A
08.05.2008 23.04.2008 NY 182D5B3316144327 MF MF7010 MFR0000135
08.05.2008 23.04.2008 NY 182D5B650EB9A64C MF MF7901 MFR0000135
08.05.2008 23.04.2008 NY 181D828C0E5074AC SN YSN202I SAVS0000055970BC9A
08.05.2008 23.04.2008 NY 181B9C811899B1E0 SN YSND007 SAVS0000055960CF6D
08.05.2008 23.04.2008 NY 181B9C8215C2DAC8 SN YSND008 SAVS0000055960CF75
08.05.2008 23.04.2008 NY 1823CDFB0EDA5F7C SN YSND010 SAVS00001359A58A57
08.05.2008 23.04.2008 NY 181D829E017E7DE9 SN YSND011 SAVS0000055970BD39
08.05.2008 23.04.2008 NY 182A3D7A0C27EFBA VV YVVZZ19 VDPS00011759DB8665MVS
08.05.2008 23.04.2008 NY 182C6A950192651A VV YVVZZ30 VDPS00011759EDC710MVS
09.05.2008 23.04.2008 NY 1837E6FC116AFB5B ER ER5080 EAMR000061
09.05.2008 23.04.2008 NY 1840B2DF1901E4D0 ER ER8020 EAMR000069
09.05.2008 23.04.2008 NY 18299E0A1B8A37C5 NL NL7310 BALR000074
09.05.2008 23.04.2008 NY 1829733718EFB4E1 NL NL7810 BALR000074
09.05.2008 23.04.2008 NY 1829252E15CB1F29 VV YVVZZ14 VDPS00011759D2568EMVS
09.05.2008 23.04.2008 NY 1839CAC316B685F1 VV YVVZZ17 VDPS0001185A5DEDE3MVS
09.05.2008 23.04.2008 NY 182EC58813EF1B88 VV YVVZZ18 VDPS0001175A017B9CMVS
09.05.2008 23.04.2008 NY 182EC59904775180 VV YVVZZ20 VDPS0001175A017C26MVS
09.05.2008 23.04.2008 NY 182C6A840C1ABFD6 VV YVVZZ23 VDPS00011759EDC6E4MVS
09.05.2008 23.04.2008 NY 182A3D9A17BAA45A VV YVVZZ27 VDPS00011759DB8776MVS
09.05.2008 23.04.2008 NY 182C6A8E11634856 VV YVVZZ28 VDPS00011759EDC6FAMVS
09.05.2008 23.04.2008 NY 183E363E059B0AFB VV YVVZZ33 VDPS0001745A83012DMVS
09.05.2008 23.04.2008 NY 1818A640116B32F2 VV YVVZZGR VDPS0001145947F6A7MVS
09.05.2008 23.04.2008 NY 1819BDF10C9721EC VV YVVZZQR VDPS000114595120D5MVS
09.05.2008 23.04.2008 NY 18261F411C58204A WP YWPRDPX DBH000012659B8FAC3MVS
08.05.2008 24.04.2008 NY 1839F52203BA7BC2 ER YERPRI EAMR000061
08.05.2008 24.04.2008 NY 181B9C9B14534D98 SN YSN102I SAVS0000055960D048
08.05.2008 24.04.2008 NY 181B9C9E124C7C6F SN YSN111I SAVS0000055960D060
08.05.2008 24.04.2008 NY 181B9CA3016EA83A SN YSN183I SAVS0000055960D087
08.05.2008 24.04.2008 NY 181C42601CE75B56 SN YSN201I SAVS00000559663EDB
08.05.2008 24.04.2008 NY 18399EB505F3737E SN YSNB002 SAVS0000185A5C7C5F
09.05.2008 24.04.2008 NY 183420040F747796 EC YECCRAC SYNC0000325A2E6436
09.05.2008 24.04.2008 NY 1837BBB11BF1F29A MF MF7230 MFR0000148
09.05.2008 24.04.2008 NY 182D5B4F17275DB7 MF MF7550 MFR0000135
09.05.2008 24.04.2008 NY 1837BBDF1D3B80C3 MF MF8620 MFR0000148
09.05.2008 24.04.2008 NY 183310CF0870F9F8 MF MF8800 MFR0000148
09.05.2008 24.04.2008 NY 182DB4421FE368C1 NI YNIPACU IPC000022959F8874AMVS
09.05.2008 24.04.2008 NY 182DB4B9075F6A1F NI YNIPREU IPC000022959F88B30MVS
09.05.2008 24.04.2008 NY 182DB4421FE368C1 NI01 YNIPACU IPC000022959F8874AMVS
09.05.2008 24.04.2008 NY 182DB4421FE368C1 NI02 YNIPACU IPC000022959F8874AMVS
09.05.2008 24.04.2008 NY 183975060C170859 PC PC5090 IVN0000038
09.05.2008 24.04.2008 NY 183975071CBB84AE PC PC5150 IVN0000038
09.05.2008 24.04.2008 NY 183308EF0D81CF79 PC PC7100 IVN0000038
09.05.2008 24.04.2008 NY 183308F108599050 PC PC8000 IVN0000038
09.05.2008 24.04.2008 NY 183583430125ADA9 PC01 PC5060 IVN0000038
09.05.2008 24.04.2008 NY 183583430125ADA9 PC02 PC5060 IVN0000038
09.05.2008 24.04.2008 NY 183583430125ADA9 PC03 PC5060 IVN0000038
09.05.2008 24.04.2008 NY 183583430125ADA9 PC04 PC5060 IVN0000038
09.05.2008 24.04.2008 NY 183583430125ADA9 PC05 PC5060 IVN0000038
09.05.2008 24.04.2008 NY 183583430125ADA9 PC06 PC5060 IVN0000038
09.05.2008 24.04.2008 NY 183583430125ADA9 PC07 PC5060 IVN0000038
09.05.2008 24.04.2008 NY 181B9CDC0D5612F7 SN SN5003 SAVS000005
09.05.2008 24.04.2008 NY 1823CE1B0546200E SN SN5004 SAVS000013
09.05.2008 24.04.2008 NY 1823CE1B1C43A74D SN SN5005 SAVS000013
09.05.2008 24.04.2008 NY 1837C73001709EEE SN SN5006 SAVS000018
09.05.2008 24.04.2008 NY 1823F5DE16E55444 SN SN5901 SAVS000013
09.05.2008 24.04.2008 NY 1837E6C8107D76D4 SN SN6005 SAVS000018
09.05.2008 24.04.2008 NY 1823CDFC06D6C4F4 SN YSND012 SAVS00001359A58A5C
09.05.2008 24.04.2008 NY 1823CDFC1FFF69D6 SN YSND013 SAVS00001359A58A61
09.05.2008 24.04.2008 NY 183541EE0A6A5AEF UU UU5170 RS20000080
09.05.2008 24.04.2008 NY 183577E202F1F921 YY YYWBVIN WSTS0000615A39A89AMVS
08.05.2008 25.04.2008 NY 1819138A0AC1B2B8 DE YDELSTO DE00000066594B8B81
09.05.2008 28.04.2008 NY 180C666B0959B4D9 CZ YCZM435 BEWI00002658E13572MVS
09.05.2008 28.04.2008 NY 182652A41B0C051E ER YERDUPD EAMR00004859BAAA26
09.05.2008 28.04.2008 NY 18261D0D1A3682C1 WP YWPR1QX DBH000012659B8E877MVS
24.07.2008 28.04.2008 NY 1839F104038A7D5C ER YERDCUR EAMR0000615A5F2EBCMVS
09.05.2008 29.04.2008 NY 183634371527F710 CK YCKT020 DCA0000188
09.05.2008 29.04.2008 NY 183307DB094649A5 PC01 YPC0520 IVN00000385A2535B3MVS
09.05.2008 29.04.2008 NY 1839783F1B9E97A3 PC01 YPC0830 IVN00000385A5B39A6MVS
09.05.2008 29.04.2008 NY 183307DB094649A5 PC02 YPC0520 IVN00000385A2535B3MVS
09.05.2008 29.04.2008 NY 1839783F1B9E97A3 PC02 YPC0830 IVN00000385A5B39A6MVS
09.05.2008 29.04.2008 NY 183307DB094649A5 PC03 YPC0520 IVN00000385A2535B3MVS
09.05.2008 29.04.2008 NY 1839783F1B9E97A3 PC03 YPC0830 IVN00000385A5B39A6MVS
09.05.2008 29.04.2008 NY 183307DB094649A5 PC04 YPC0520 IVN00000385A2535B3MVS
09.05.2008 29.04.2008 NY 1839783F1B9E97A3 PC04 YPC0830 IVN00000385A5B39A6MVS
09.05.2008 29.04.2008 NY 183307DB094649A5 PC05 YPC0520 IVN00000385A2535B3MVS
09.05.2008 29.04.2008 NY 1839783F1B9E97A3 PC05 YPC0830 IVN00000385A5B39A6MVS
09.05.2008 29.04.2008 NY 183307DB094649A5 PC06 YPC0520 IVN00000385A2535B3MVS
09.05.2008 29.04.2008 NY 1839783F1B9E97A3 PC06 YPC0830 IVN00000385A5B39A6MVS
09.05.2008 29.04.2008 NY 183307DB094649A5 PC07 YPC0520 IVN00000385A2535B3MVS
09.05.2008 29.04.2008 NY 1839783F1B9E97A3 PC07 YPC0830 IVN00000385A5B39A6MVS
09.05.2008 29.04.2008 NY 182954880499454A YY YYDB2FK TOFF00011259D3E46AMVS
09.05.2008 30.04.2008 NY 1829546706589227 WB YWBITV TOFF00011259D3E350MVS
10.05.2008 01.05.2008 NY 1839C90C1AE2433E VV YVVZZ12 VDPS0001185A5DDF82MVS
08.05.2008 02.05.2008 NY 18261D300A5EC34F WP YWPR4PX DBH000012659B8E9A0MVS
09.05.2008 07.05.2008 NY 18261D2D058ACF18 WP YWPR3PX DBH000012659B8E97FMVS
08.05.2008 08.05.2008 NY 1834A059156B6111 MF YMFC113 MFR00001495A3298BA
13.06.2008 10.05.2008 NY 18294E2801D1659D VV YVVZZ16 VDPS00011759D3AED0MVS
08.08.2008 10.05.2008 NY 1838642B166A28FA DE DE0060 DE00000077
10.07.2008 23.05.2008 NY 1825F762167B341E ER YERDGET EAMR00004859B7AC83MVS
24.07.2008 23.05.2008 NY 1812FBB900011DA3 ER YERDINS EAMR00003559186E95MVS
09.11.2008 31.05.2008 NY 180AC95716739B6D CZ YCZT235 GSER00017058D39E3D
08.08.2008 11.06.2008 NY 180AC9B218F633C3 CZ YCZT397 GSER00017058D3A132
08.08.2008 12.06.2008 NY 183577CA01DD12DD YY YYWBERX TOFF0001225A39A7DF
08.08.2008 12.06.2008 NY 18191FA51C7886F1 YY YYWBPRI WSTS000055594BF0FFMVS
16.05.2008 13.06.2008 NY 17FF3A421E5D52CA WP YWPR6PX DBH00000835872A791
08.08.2008 19.06.2008 NY 182A66E21AE8F997 EQ YEQISRK EAGL00002459DCE1D0MVS
13.06.2008 24.06.2008 NY 18294E2418CFC279 VV YVVZZ16 VDPS00011759D3AED0
13.06.2008 30.06.2008 AY 182855F0108A139D SV YSVVORM WSSV000200
04.08.2008 03.07.2008 NY 183B0A921F4BD645 SN SN6006 SAVS000018
08.08.2008 03.07.2008 NY 183885BD0A967610 DE YDE0021 DE000000775A53475EMVS
08.08.2008 04.07.2008 NY 1838642B1E52B078 DE DE0100 DE00000077
13.11.2008 07.07.2008 NY 18280AE2014FEBAF EQ YEQKDGP GSER00018759C91710MVS
08.08.2008 08.07.2008 NY 180B4A66188C5FFC CZ YCZJ323 GSER00017058D7E6D6MVS
08.08.2008 08.07.2008 NY 180C6654079144F5 CZ YCZT435 BEWI00002658E1347CMVS
08.08.2008 08.07.2008 NY 182924371E28547F VV YVVZZ07 VDPS00011759D24F27
08.08.2008 08.07.2008 NY 182B298C1F4B65C6 VV YVVZZ10 VDPS00011759E342BEMVS
08.08.2008 08.07.2008 NY 183427641BA304C7 WF YWFM537 WSSW0001055A2EA204MVS
08.08.2008 08.07.2008 NY 183862B0087A03B3 WQ YWQEXCP CUBE0001185A52216F
08.08.2008 09.07.2008 NY 1839CA750924A4B4 FI YFI0110 BKUR0000965A5DE7BDMVS
08.08.2008 09.07.2008 NY 1839CAAE0C1524D6 VV YVVZZ11 VDPS0001185A5DED1EMVS
08.08.2008 09.07.2008 NY 18323C10058831A0 VV YVVZZ14 VDPS0001185A1E887D
08.08.2008 10.07.2008 NY 180AC97D1FFC807B CZ YCZT328 GSER00017058D39F5FMVS
08.08.2008 10.07.2008 NY 183422771DD938A4 GM YGMSTEU GM000001605A2E77C8MVS
08.08.2008 11.07.2008 NY 180B4A721A8A1DC9 CZ YCZJ431 GSER00017058D7E73DMVS
08.08.2008 11.07.2008 NY 180AC9B409BB30BC CZ YCZT397 GSER00017058D3A132MVS
09.08.2008 12.07.2008 NY 180AC97C03C4EFC5 CZ YCZT328 GSER00017058D39F5F
08.10.2008 18.07.2008 NY 182A188F0DA7FF98 KR YKRT511 KAUF00004059DA50DA
08.08.2008 21.07.2008 NY 18323C0E14E65B8A VV YVVZZ09 VDPS0001185A1E8862MVS
07.08.2008 22.07.2008 NY 18323C1210F8CCB0 VV YVVZZ19 VDPS0001185A1E888B
08.08.2008 22.07.2008 NY 183310B512964AD9 MF MF7770 MFR0000148
08.08.2008 22.07.2008 NY 18323C1504194608 VV YVVZZ25 VDPS0001185A1E8896MVS
08.08.2008 22.07.2008 NY 18323C1500910915 VV YVVZZ27 VDPS0001185A1E889E
08.08.2008 22.07.2008 NY 182C6A9218329C04 VV YVVZZ29 VDPS00011759EDC703MVS
08.08.2008 22.07.2008 NY 18292756106C9A8A VV YVVZZ31 VDPS00011759D26946MVS
08.08.2008 22.07.2008 NY 1817FD0D0716185C VV YVVZZAR VDPS00011459426A66MVS
08.08.2008 22.07.2008 NY 1818A64F10B60BDD VV YVVZZNR VDPS0001145947F723MVS
never      23.07.2008 NY 1817FD0708A55FA3 VV YVVZZJR VDPS00011459426A61MVS
08.08.2008 25.07.2008 NY 1839CA7906DA62A9 FI YFI0120 BKUR0000965A5DE7D4MVS
08.08.2008 30.07.2008 NY 1839CAAC0843B125 VV YVVZZ11 VDPS0001185A5DED1E
08.08.2008 31.07.2008 NY 182C6A7E07B7D479 VV YVVZZ15 VDPS00011759EDC6CAMVS
never      01.08.2008 NY 182C6A771B57340A VV YVVZZ15 VDPS00011759EDC6CA
08.08.2008 01.08.2008 NY 18353AF51E4C1CA1 VV YVVZZ13 VDPS0001185A37A9AAMVS
05.12.2006 02.08.2008 NY 161FDE100532ED80 PHPS53 H1002
05.12.2006 02.08.2008 NY 161FDE1A16B59890 PHPS53 H1007
05.12.2006 02.08.2008 NY 161FDE22042F2988 PHPS53 H1010
05.12.2006 02.08.2008 NY 161FDE27046055A8 PHPS53 H1013
05.12.2006 02.08.2008 NY 161FDE2912808880 PHPS53 H1014
05.12.2006 02.08.2008 NY 161FDE2C01AA4750 PHPS53 H1015
05.12.2006 02.08.2008 NY 161FDE2E1621F790 PHPS53 H1016
05.12.2006 02.08.2008 NY 161FDE31070D19E8 PHPS53 H1017
05.12.2006 02.08.2008 NY 161FDE381429AFC0 PHPS53 H1020
05.12.2006 02.08.2008 NY 161FDE7A15CBD0B8 PHPS53 H1048
05.12.2006 02.08.2008 NY 161FECE2181277D0 PHPS53 H1064
05.12.2006 02.08.2008 NY 161FECEF0A249C48 PHPS53 H1068
05.12.2006 02.08.2008 NY 161FED1C0D617888 PHPS53 H1085
05.12.2006 02.08.2008 NY 161FED1E1D792E90 PHPS53 H1086
05.12.2006 02.08.2008 NY 161FED380BE31F50 PHPS53 H1096
05.12.2006 02.08.2008 NY 161FED3A1C1E60F8 PHPS53 H1097
05.12.2006 02.08.2008 NY 161FED4A1E930520 PHPS53 H1113
05.12.2006 02.08.2008 NY 161FED56065A0978 PHPS53 H1118
05.12.2006 02.08.2008 NY 161FEDCB0558D420 PHPS53 H1159
05.12.2006 02.08.2008 NY 161FEDD0158252E8 PHPS53 H1161
05.12.2006 02.08.2008 NY 161FDE100532ED80 PHPSPTA H1002
05.12.2006 02.08.2008 NY 161FDE1A16B59890 PHPSPTA H1007
05.12.2006 02.08.2008 NY 161FDE22042F2988 PHPSPTA H1010
05.12.2006 02.08.2008 NY 161FDE27046055A8 PHPSPTA H1013
05.12.2006 02.08.2008 NY 161FDE2912808880 PHPSPTA H1014
05.12.2006 02.08.2008 NY 161FDE2C01AA4750 PHPSPTA H1015
05.12.2006 02.08.2008 NY 161FDE2E1621F790 PHPSPTA H1016
05.12.2006 02.08.2008 NY 161FDE31070D19E8 PHPSPTA H1017
05.12.2006 02.08.2008 NY 161FDE381429AFC0 PHPSPTA H1020
05.12.2006 02.08.2008 NY 161FDE7A15CBD0B8 PHPSPTA H1048
05.12.2006 02.08.2008 NY 161FECE2181277D0 PHPSPTA H1064
05.12.2006 02.08.2008 NY 161FECEF0A249C48 PHPSPTA H1068
05.12.2006 02.08.2008 NY 161FED1C0D617888 PHPSPTA H1085
05.12.2006 02.08.2008 NY 161FED1E1D792E90 PHPSPTA H1086
05.12.2006 02.08.2008 NY 161FED380BE31F50 PHPSPTA H1096
05.12.2006 02.08.2008 NY 161FED3A1C1E60F8 PHPSPTA H1097
05.12.2006 02.08.2008 NY 161FED4A1E930520 PHPSPTA H1113
05.12.2006 02.08.2008 NY 161FED56065A0978 PHPSPTA H1118
05.12.2006 02.08.2008 NY 161FEDCB0558D420 PHPSPTA H1159
05.12.2006 02.08.2008 NY 161FEDD0158252E8 PHPSPTA H1161
04.12.2007 07.08.2008 NY 17FF3EA91FD5AE5D WP YWPLEP1 DBH00000835872CCA2
25.06.2009 11.08.2008 NY 16E34F3B1F70DB2A HP1 AOY2RK HPSVP2AOY2RK
25.06.2009 11.08.2008 NY 16E34F3B1F70DB2A HP3 AOY2RK HPSVP2AOY2RK
25.06.2009 04.09.2008 NY 16C0BB891A03FEAD HP1 ZBZQQRI HPSVP2ZBZQQRI
25.06.2009 04.09.2008 NY 16C0BB891A03FEAD HP3 ZBZQQRI HPSVP2ZBZQQRI
25.06.2009 04.09.2008 NY 16C0BB891A03FEAD HPS ZBZQQRI HPSVP2ZBZQQRI
never      05.09.2008 NY 183426890855F4AA WF YWFCB02 WSSW0001055A2E9AD7
14.11.2008 12.10.2008 NY 1839CB7D1D1371DD HBDTEST YVVZZ04 VDPS0001185A5DF2D6
14.11.2008 12.10.2008 NY 1835776E12D92D8C TN YTNW100 CSQS0000075A39A4F1
14.11.2008 12.10.2008 NY 1839CB7D1D1371DD VV YVVZZ04 VDPS0001185A5DF2D6
14.11.2008 13.10.2008 NY 18357892075BD5AE WB YWB551 WS8B0005185A39AE85MVS
14.11.2008 13.10.2008 NY 18261EFC0F07665A WP YWPLEP1 DBH000012659B8F8B5MVS
14.11.2008 14.10.2008 NY 183385DA07529CD1 CZ YCZMLIM KLOM0000695A2956D9MVS
14.11.2008 14.10.2008 NY 180AC959164C30CC CZ YCZT235 GSER00017058D39E3DMVS
14.11.2008 14.10.2008 NY 180AC9A1159B56A3 CZ YCZT385 GSER00017058D3A09CMVS
14.11.2008 14.10.2008 NY 182A66E10DD66DF5 EQ YEQISRK EAGL00002459DCE1D0
14.11.2008 14.10.2008 NY 182A18910CBB2B8E KR YKRT511 KAUF00004059DA50DAMVS
14.11.2008 14.10.2008 NY 18357891106A6C56 WB YWB551 WS8B0005185A39AE85
14.11.2008 14.10.2008 NY 1834268F0517CA32 WF YWFCB02 WSSW0001055A2E9AD7MVS
12.09.2008 01.11.2008 NY 1839F102109635E7 ER YERDCUR EAMR0000615A5F2EBC
12.09.2008 01.11.2008 NY 1812FBB51CB591AC ER YERDINS EAMR00003559186E95
12.09.2008 02.11.2008 NY 1825F75F1CE04F44 ER YERDGET EAMR00004859B7AC83
03.10.2008 02.11.2008 NY 18323C151FBF017A VV YVVZZ21 VDPS0001185A1E8890MVS
04.11.2008 04.11.2008 NY 182C6A8614BFEC15 VV YVVZZ08 VDPS00011759EDC6B6
15.06.2007 08.11.2008 NY 16D648981104D278 HP1 AB0ORK HPSVP2AB0ORK
15.06.2007 08.11.2008 NY 16D648981104D278 HP3 AB0ORK HPSVP2AB0ORK
23.08.2007 08.11.2008 NY 16A0893F02F1E5A6 HP1 AAAERK HPSVP2AAAERK
23.08.2007 08.11.2008 NY 16A0893F02F1E5A6 HP3 AAAERK HPSVP2AAAERK
31.08.2007 08.11.2008 NY 1607FF4D0F035EE4 HP1 RWBR032 HPSVP1RWBR032
31.08.2007 08.11.2008 NY 1607FF4D0F035EE4 HP3 RWBR032 HPSVP1RWBR032
04.10.2007 08.11.2008 NY 16D648BD1AEDBD4C HP1 AO2QRK HPSVP2AO2QRK
04.10.2007 08.11.2008 NY 16D648AB14A641A9 HP1 RWBR009 HPSVP2RWBR009
04.10.2007 08.11.2008 NY 16D648BD1AEDBD4C HP3 AO2QRK HPSVP2AO2QRK
04.10.2007 08.11.2008 NY 16D648AB14A641A9 HP3 RWBR009 HPSVP2RWBR009
25.10.2007 08.11.2008 NY 16D649251B2CE67E HP1 ACA0RK HPSVP2ACA0RK
25.10.2007 08.11.2008 NY 16D649251B2CE67E HP3 ACA0RK HPSVP2ACA0RK
29.11.2007 08.11.2008 NY 16B51EFA101D37FC HP1 ZDEWERI HPSVP2ZDEWERI
29.11.2007 08.11.2008 NY 16B51EFA101D37FC HPS ZDEWERI HPSVP2ZDEWERI
08.05.2008 08.11.2008 NY 1722312F06956A95 HP1 ZADOKRL HPSVP2ZADOKRL
08.05.2008 08.11.2008 NY 1722312F06956A95 HP3 ZADOKRL HPSVP2ZADOKRL
23.06.2008 08.11.2008 NY 173DDDB317B31679 HP1 AB70RG HPSVP2AB70RG
23.06.2008 08.11.2008 NY 173DDDB317B31679 HP3 AB70RG HPSVP2AB70RG
26.06.2008 08.11.2008 NY 17350BA20FE698F0 HP1 AOBARI HPSVP2AOBARI
26.06.2008 08.11.2008 NY 17350B900F908116 HP1 AOCLRI HPSVP2AOCLRI
26.06.2008 08.11.2008 NY 17350BA20FE698F0 HP3 AOBARI HPSVP2AOBARI
26.06.2008 08.11.2008 NY 17350B900F908116 HP3 AOCLRI HPSVP2AOCLRI
11.09.2008 08.11.2008 NY 16D6488A00D271B5 HP1 RWBW050 HPSVP2RWBW050
11.09.2008 08.11.2008 NY 16D6488A00D271B5 HP3 RWBW050 HPSVP2RWBW050
10.10.2008 08.11.2008 NY 16AEAEA90756D6F4 HP1 RWBZ010 HPSVP2RWBZ010
10.10.2008 08.11.2008 NY 16AEAEA90756D6F4 HP3 RWBZ010 HPSVP2RWBZ010
17.11.2008 08.11.2008 NY 16C0BB85000D078F HP1 AKEGRI HPSVP2AKEGRI
17.11.2008 08.11.2008 NY 16C0BB85000D078F HPS AKEGRI HPSVP2AKEGRI
12.12.2008 08.11.2008 NY 175DC04D11C2C359 HP1 AOAVRI HPSVP2AOAVRI
12.12.2008 08.11.2008 NY 175DC0501312282C HP1 AOBPRI HPSVP2AOBPRI
12.12.2008 08.11.2008 NY 175DC04D11C2C359 HP3 AOAVRI HPSVP2AOAVRI
12.12.2008 08.11.2008 NY 175DC0501312282C HP3 AOBPRI HPSVP2AOBPRI
19.12.2008 08.11.2008 NY 16A087FC11BF8EF4 HP1 RWBW058 HPSVP2RWBW058
19.12.2008 08.11.2008 NY 16A087FC11BF8EF4 HP3 RWBW058 HPSVP2RWBW058
14.01.2009 08.11.2008 NY 16D64923168575A9 HP1 AEGIQ6 HPSVP2AEGIQ6
14.01.2009 08.11.2008 NY 16AEAEC81FF658CF HP1 RWBZ008 HPSVP2RWBZ008
14.01.2009 08.11.2008 NY 16D64923168575A9 HP3 AEGIQ6 HPSVP2AEGIQ6
14.01.2009 08.11.2008 NY 16AEAEC81FF658CF HP3 RWBZ008 HPSVP2RWBZ008
20.01.2009 08.11.2008 NY 161EC06A110248A7 HP1 RWBP015 HPSVP1RWBP015
20.01.2009 08.11.2008 NY 161EC06A110248A7 HP3 RWBP015 HPSVP1RWBP015
22.01.2009 08.11.2008 NY 16A0896002A9F1EC HP1 AGDYRI HPSVP2AGDYRI
22.01.2009 08.11.2008 NY 163173C5108C809D HP1 RWBJ210 HPSVP2RWBJ210
22.01.2009 08.11.2008 NY 16A0896002A9F1EC HP3 AGDYRI HPSVP2AGDYRI
22.01.2009 08.11.2008 NY 163173C5108C809D HP3 RWBJ210 HPSVP2RWBJ210
22.01.2009 08.11.2008 NY 163173C5108C809D HPS RWBJ210 HPSVP2RWBJ210
26.01.2009 08.11.2008 NY 16E34F381848481A HP1 ZUZQERK HPSVP2ZUZQERK
26.01.2009 08.11.2008 NY 16E34F381848481A HP3 ZUZQERK HPSVP2ZUZQERK
09.02.2009 08.11.2008 NY 173DDDA508751A89 HP1 RWBM011 HPSVP2RWBM011
09.02.2009 08.11.2008 NY 173DDD9C06D0771E HP1 RWBM012 HPSVP2RWBM012
09.02.2009 08.11.2008 NY 173DDDA508751A89 HP3 RWBM011 HPSVP2RWBM011
09.02.2009 08.11.2008 NY 173DDD9C06D0771E HP3 RWBM012 HPSVP2RWBM012
25.02.2009 08.11.2008 NY 16D648E4106C50F4 HP1 RWBW015 HPSVP2RWBW015
25.02.2009 08.11.2008 NY 16D648E4106C50F4 HP3 RWBW015 HPSVP2RWBW015
19.03.2009 08.11.2008 NY 1750434B1D6739F5 HP1 AOX7RK HPSVP2AOX7RK
19.03.2009 08.11.2008 NY 1750434A08D5F241 HP1 AOXTRK HPSVP2AOXTRK
19.03.2009 08.11.2008 NY 1750434B1D6739F5 HP3 AOX7RK HPSVP2AOX7RK
19.03.2009 08.11.2008 NY 1750434A08D5F241 HP3 AOXTRK HPSVP2AOXTRK
14.04.2009 08.11.2008 NY 16D6492D13A2E460 HP1 AGA8RI HPSVP2AGA8RI
14.04.2009 08.11.2008 NY 163173C304B2997F HP1 RWBE056 HPSVP2RWBE056
14.04.2009 08.11.2008 NY 16D6492D13A2E460 HP3 AGA8RI HPSVP2AGA8RI
14.04.2009 08.11.2008 NY 163173C304B2997F HP3 RWBE056 HPSVP2RWBE056
14.04.2009 08.11.2008 NY 163173C304B2997F HPS RWBE056 HPSVP2RWBE056
28.04.2009 08.11.2008 NY 173DDD8A0C9BCABE HP1 RWBB017 HPSVP2RWBB017
28.04.2009 08.11.2008 NY 173DDD8A0C9BCABE HP3 RWBB017 HPSVP2RWBB017
05.05.2009 08.11.2008 NY 16A0888000AD2563 HP1 AAOAO4 HPSVP2AAOAO4
05.05.2009 08.11.2008 NY 16A087961247E55E HP1 ABIRQ6 HPSVP2ABIRQ6
05.05.2009 08.11.2008 NY 173DDD8A038368BE HP1 RWBM001 HPSVP2RWBM001
05.05.2009 08.11.2008 NY 173DDDA104147E4E HP1 RWBW064 HPSVP2RWBW064
05.05.2009 08.11.2008 NY 16A0888000AD2563 HP3 AAOAO4 HPSVP2AAOAO4
05.05.2009 08.11.2008 NY 16A087961247E55E HP3 ABIRQ6 HPSVP2ABIRQ6
05.05.2009 08.11.2008 NY 173DDD8A038368BE HP3 RWBM001 HPSVP2RWBM001
05.05.2009 08.11.2008 NY 173DDDA104147E4E HP3 RWBW064 HPSVP2RWBW064
06.05.2009 08.11.2008 NY 16DA0F100494BECD HP1 ALX4RI HPSVP2ALX4RI
06.05.2009 08.11.2008 NY 161EBEAB0439A734 HP1 RWBR201 HPSVP1RWBR201
06.05.2009 08.11.2008 NY 16DA0F100494BECD HP3 ALX4RI HPSVP2ALX4RI
06.05.2009 08.11.2008 NY 161EBEAB0439A734 HP3 RWBR201 HPSVP1RWBR201
07.05.2009 08.11.2008 NY 16A088431BFEC51F HP1 ANEVRI HPSVP2ANEVRI
07.05.2009 08.11.2008 NY 16A088431BFEC51F HP3 ANEVRI HPSVP2ANEVRI
11.05.2009 08.11.2008 NY 173DDDB019BD953E HP1 AB79RG HPSVP2AB79RG
11.05.2009 08.11.2008 NY 173DDDB019BD953E HP3 AB79RG HPSVP2AB79RG
18.05.2009 08.11.2008 NY 164ED83F139FBA87 HP1 RWBR004 HPSVP2RWBR004
18.05.2009 08.11.2008 NY 164ED83F139FBA87 HP3 RWBR004 HPSVP2RWBR004
18.05.2009 08.11.2008 NY 164ED83F139FBA87 HPS RWBR004 HPSVP2RWBR004
26.05.2009 08.11.2008 NY 17350B9E10560A21 HP1 ALYHRI HPSVP2ALYHRI
26.05.2009 08.11.2008 NY 17350B9E10560A21 HP3 ALYHRI HPSVP2ALYHRI
28.05.2009 08.11.2008 NY 16D648AB08594280 HP1 AF8URI HPSVP2AF8URI
28.05.2009 08.11.2008 NY 16D648E40728730A HP1 RWBR200 HPSVP2RWBR200
28.05.2009 08.11.2008 NY 161EBEFE06B76ED7 HP1 RWBR202 HPSVP1RWBR202
28.05.2009 08.11.2008 NY 161EBEF41791E0E4 HP1 RWBR207 HPSVP1RWBR207
28.05.2009 08.11.2008 NY 16D648AB08594280 HP3 AF8URI HPSVP2AF8URI
28.05.2009 08.11.2008 NY 16D648E40728730A HP3 RWBR200 HPSVP2RWBR200
28.05.2009 08.11.2008 NY 161EBEFE06B76ED7 HP3 RWBR202 HPSVP1RWBR202
28.05.2009 08.11.2008 NY 161EBEF41791E0E4 HP3 RWBR207 HPSVP1RWBR207
29.05.2009 08.11.2008 NY 17350B961EC5378C HP1 ALVFRI HPSVP2ALVFRI
29.05.2009 08.11.2008 NY 17273EA20593B4FD HP1 ZVIYWRI HPSVP1ZVIYWRI
29.05.2009 08.11.2008 NY 17350B961EC5378C HP3 ALVFRI HPSVP2ALVFRI
02.06.2009 08.11.2008 NY 16E34F410D2DADF5 HP1 ZDFXPRK HPSVP2ZDFXPRK
02.06.2009 08.11.2008 NY 16E34F410D2DADF5 HP3 ZDFXPRK HPSVP2ZDFXPRK
18.06.2009 08.11.2008 NY 16D64911136FF3C9 HP1 RWBW048 HPSVP2RWBW048
18.06.2009 08.11.2008 NY 16AEADF00A3E6C71 HP1 RWBW075 HPSVP2RWBW075
18.06.2009 08.11.2008 NY 16D64911136FF3C9 HP3 RWBW048 HPSVP2RWBW048
18.06.2009 08.11.2008 NY 16AEADF00A3E6C71 HP3 RWBW075 HPSVP2RWBW075
19.06.2009 08.11.2008 NY 16C529D90092BCE3 HP1 AJV4RI HPSVP2AJV4RI
19.06.2009 08.11.2008 NY 16A087F1038A3ACA HP1 RWBT032 HPSVP2RWBT032
19.06.2009 08.11.2008 NY 16A087F1038A3ACA HP3 RWBT032 HPSVP2RWBT032
19.06.2009 08.11.2008 NY 16C529D90092BCE3 HPS AJV4RI HPSVP2AJV4RI
24.06.2009 08.11.2008 NY 17350B88031351AD HP1 RWBB110 HPSVP2RWBB110
24.06.2009 08.11.2008 NY 16C13D211976CE77 HP1 RWBT031 HPSVP1RWBT031
24.06.2009 08.11.2008 NY 17350B88031351AD HP3 RWBB110 HPSVP2RWBB110
26.06.2009 08.11.2008 NY 173D874A0C20E015 HP1 ZAEVORL HPSVP1ZAEVORL
26.06.2009 08.11.2008 NY 173D874304B82484 HP1 ZAEWBRL HPSVP1ZAEWBRL
30.06.2009 08.11.2008 NY 175DC04E0A53E249 HP1 ZBZOPRI HPSVP2ZBZOPRI
30.06.2009 08.11.2008 NY 175DC04E0A53E249 HP3 ZBZOPRI HPSVP2ZBZOPRI
14.11.2008 11.11.2008 NY 182C6A8708C29E3C VV YVVZZ24 VDPS00011759EDC6EDMVS
14.11.2008 28.11.2008 NY 18191FA4006977E4 YY YYWBPRI WSTS000055594BF0FF
25.06.2009 28.11.2008 NY 16A0886C17366136 HP1 AGXMRB HPSVP2AGXMRB
25.06.2009 28.11.2008 NY 16A0886C17366136 HP3 AGXMRB HPSVP2AGXMRB
26.06.2009 28.11.2008 NY 16A0885B012A7B54 HP1 AGW8RB HPSVP2AGW8RB
26.06.2009 28.11.2008 NY 16A0885B012A7B54 HP3 AGW8RB HPSVP2AGW8RB
18.11.2008 02.12.2008 NY 1827402C1B8CF9DC LC LC0511I TFBM00003359C2729F
14.11.2008 06.12.2008 NY 1826239016CBB2EE WP YWPL2P1 DBH000012659B91C6CMVS
09.11.2007 24.12.2008 NY 181677E70B544640 WP YWPR1PX DBH00000965935A9F8MVS
14.11.2008 01.01.2009 NY 18323C0D04B441B6 VV YVVZZ09 VDPS0001185A1E8862
14.11.2008 02.01.2009 AY 18321C0608073C7E WI YWI5952 WS8I0003205A1D7B91MVS
14.11.2008 02.01.2009 AY 18321C231B6BAEC8 WI YWI5955 WS8I0003205A1D7C47MVS
11.10.2007 03.01.2009 NY 161EC0CD1667DAB2 HP1 ABARRG HPSVP1ABARRG
11.10.2007 03.01.2009 NY 161EC0CD1667DAB2 HP3 ABARRG HPSVP1ABARRG
28.07.2008 03.01.2009 NY 173DDDB91A9CD7F2 HP1 AB8CRG HPSVP2AB8CRG
28.07.2008 03.01.2009 NY 173DDDB91A9CD7F2 HP3 AB8CRG HPSVP2AB8CRG
22.01.2009 03.01.2009 NY 16D64910141577F2 HP1 ZDEWPRI HPSVP2ZDEWPRI
22.01.2009 03.01.2009 NY 16D64910141577F2 HP3 ZDEWPRI HPSVP2ZDEWPRI
28.05.2009 03.01.2009 NY 162AAC960C4D569D HP1 RWBP024 HPSVP1RWBP024
28.05.2009 03.01.2009 NY 162AAC960C4D569D HP3 RWBP024 HPSVP1RWBP024
14.11.2008 04.01.2009 NY 1841363F16B0BB0D CZ YCZJABW GSER0002225A9C2BE5MVS
14.11.2008 08.01.2009 AY 18321BFE0061DD9F WI YWI5951 WS8I0003205A1D7B52MVS
14.11.2008 08.01.2009 AY 18321C8D0890A39C WI YWI5957 WS8I0003205A1D7FF7MVS
14.11.2008 08.01.2009 AY 18321C9D02F84785 WI YWI5959 WS8I0003205A1D8082MVS
24.02.2009 12.01.2009 NY 175DC0560D777BDC HP1 ZBZXERI HPSVP2ZBZXERI
24.02.2009 12.01.2009 NY 175DC0560D777BDC HP3 ZBZXERI HPSVP2ZBZXERI
13.02.2009 13.01.2009 NY 18323C16151CEB4D VV YVVZZ32 VDPS0001185A1E88B5
13.02.2009 13.01.2009 NY 1826238C1C7385AB WP YWPL2P1 DBH000012659B91C6C
13.02.2009 13.01.2009 NY 18261CDF1597622C WP YWPL5P1 DBH000012659B8E717
13.02.2009 13.01.2009 NY 18261CE41CD92FDE WP YWPL8P1 DBH000012659B8E744
24.03.2009 13.01.2009 NY 18261EF81B5873CF WP YWPLEP1 DBH000012659B8F8B5
13.11.2008 14.01.2009 AY 181CE4530829D875 ED YED5203 ED00000056596B8D61
14.11.2008 14.01.2009 NY 182885BD11A7674C DE DE7120 DE00000070
11.11.2008 15.01.2009 NY 181E9A8B15ED54C9 NL YNLG010 BALR0000745979E96AMVS
13.11.2008 15.01.2009 NY 181E9A981089E351 NL YNLG021 BALR0000745979E970MVS
13.11.2008 15.01.2009 NY 18261D86047413E6 WP YWPU1P5 DBH000012659B8EC6AMVS
14.11.2008 15.01.2009 NY 181E9A8C11D79061 NL YNLG020 BALR0000745979E96FMVS
14.11.2008 15.01.2009 NY 181E9A970E2FCC26 NL YNLG120 BALR0000745979E98CMVS
14.11.2008 15.01.2009 NY 181E9A930E7C61F7 NL YNLG121 BALR0000745979E992MVS
14.11.2008 15.01.2009 NY 1839CAC20E1B3976 VV YVVZZ17 VDPS0001185A5DEDE3
14.11.2008 15.01.2009 NY 182C6A8E10BC8DCE VV YVVZZ29 VDPS00011759EDC703
14.11.2008 15.01.2009 AY 18321C0F047F1754 WI YWI5953 WS8I0003205A1D7BD6MVS
14.11.2008 15.01.2009 AY 18321C180D39B292 WI YWI5954 WS8I0003205A1D7C0CMVS
14.11.2008 15.01.2009 AY 18321C2A14DC6A36 WI YWI5956 WS8I0003205A1D7C79MVS
14.11.2008 15.01.2009 AY 18321C941B20AEFB WI YWI5958 WS8I0003205A1D8033MVS
14.11.2008 15.01.2009 AY 18321BF1162B8558 WI YWI595A WS8I0003205A1D7AEAMVS
13.02.2009 26.01.2009 NY 18261D820039E71F WP YWPU1P5 DBH000012659B8EC6A
08.01.2009 27.01.2009 NY 183E36361650E573 VV YVVZZ33 VDPS0001745A83012D
13.02.2009 27.01.2009 NY 18353AF4161FD149 VV YVVZZ13 VDPS0001185A37A9AA
13.02.2009 27.01.2009 NY 18323C110DA9D908 VV YVVZZ18 VDPS0001185A1E8884
13.02.2009 27.01.2009 NY 182EC5960FB65A62 VV YVVZZ20 VDPS0001175A017C26
14.08.2009 01.02.2009 NY 182C6A84125D1BD8 VV YVVZZ24 VDPS00011759EDC6ED
13.02.2009 03.02.2009 NY 180AC9A004539D41 CZ YCZT385 GSER00017058D3A09C
08.05.2009 09.02.2009 NY 182E80B41CFDC381 NL YNL0200 BALR00007659FF3A58
05.02.2009 20.03.2009 NY 18261CE71CB36FFE WP YWPL9P1 DBH000012659B8E75B
14.05.2009 24.03.2009 NY 16C01B780D2C0EB5 HP1 AAZGRK HPSVP2AAZGRK
14.05.2009 24.03.2009 NY 16A0879F1DF0F3B7 HP1 AFW4RB HPSVP2AFW4RB
14.05.2009 24.03.2009 NY 16A0879F1DF0F3B7 HP3 AFW4RB HPSVP2AFW4RB
14.05.2009 24.03.2009 NY 16C01B780D2C0EB5 HPS AAZGRK HPSVP2AAZGRK
25.06.2009 05.04.2009 NY 16F2B49904BDA037 HP1 AFOSRK HPSVP2AFOSRK
25.06.2009 05.04.2009 NY 16F2B49904BDA037 HP3 AFOSRK HPSVP2AFOSRK
29.06.2009 05.04.2009 NY 16A087B006F79F21 HP1 AN6ERI HPSVP2AN6ERI
29.06.2009 05.04.2009 NY 16A087B006F79F21 HP3 AN6ERI HPSVP2AN6ERI
02.07.2009 05.04.2009 NY 175DC04F0D5988A9 HP1 ZBZOURI HPSVP2ZBZOURI
02.07.2009 05.04.2009 NY 175DC055168A8E12 HP1 ZBZXDRI HPSVP2ZBZXDRI
02.07.2009 05.04.2009 NY 175DC04F0D5988A9 HP3 ZBZOURI HPSVP2ZBZOURI
02.07.2009 05.04.2009 NY 175DC055168A8E12 HP3 ZBZXDRI HPSVP2ZBZXDRI
08.05.2009 15.04.2009 NY 18297331135D2DA7 NL NL7750 BALR000074
08.05.2009 15.04.2009 NY 181E9A911CD76552 NL YNLG03M BALR0000745979E978
08.05.2009 15.04.2009 NY 181E9A8D1E49D86D NL YNLG040 BALR0000745979E97E
08.05.2009 17.04.2009 NN 18333AF00A8C164D LC YLCTF03 TFBM0000375A26E23A
30.06.2009 25.04.2009 NY 16987DFC0C16911D HP1 RWBP004 HPSVP2RWBP004
30.06.2009 25.04.2009 NY 16987DFC0C16911D HP3 RWBP004 HPSVP2RWBP004
06.04.2009 29.04.2009 NY 182C6A921624F411 VV YVVZZ30 VDPS00011759EDC710
08.05.2009 29.04.2009 NY 182C6A811F6A52CA VV YVVZZ23 VDPS00011759EDC6E4
12.02.2009 30.04.2009 NY 16AEAF1401E68D5E HP1 AATVRK HPSVP2AATVRK
12.02.2009 30.04.2009 NY 16AEAF1401E68D5E HP3 AATVRK HPSVP2AATVRK
08.05.2009 30.04.2009 NY 18323C121E96C0EC VV YVVZZ25 VDPS0001185A1E8896
30.06.2009 30.04.2009 NY 16D649260AA8D00A HP1 AEW7Q6 HPSVP2AEW7Q6
30.06.2009 30.04.2009 NY 16D649260AA8D00A HP3 AEW7Q6 HPSVP2AEW7Q6
07.05.2009 01.05.2009 NY 181E9A8A04C771C1 NL YNLG010 BALR0000745979E96A
08.05.2009 01.05.2009 NY 181E9A8A1F14EB08 NL YNLG020 BALR0000745979E96F
08.05.2009 01.05.2009 NY 181E9A951A3BFEC5 NL YNLG120 BALR0000745979E98C
08.05.2009 01.05.2009 NY 181E9A9207C58B64 NL YNLG130 BALR0000745979E995
08.05.2009 01.05.2009 NY 181E9A9E09280926 NL YNLG140 BALR0000745979E99A
28.05.2009 19.05.2009 NY 164ED837080F939E HP1 RWBR002 HPSVP2RWBR002
28.05.2009 19.05.2009 NY 164ED837080F939E HP3 RWBR002 HPSVP2RWBR002
28.05.2009 19.05.2009 NY 164ED837080F939E HPS RWBR002 HPSVP2RWBR002
29.06.2009 19.05.2009 NY 164D1F0A02721DA9 HP1 RWBR003 HPSVP1RWBR003
29.06.2009 19.05.2009 NY 164D1F0A02721DA9 HP3 RWBR003 HPSVP1RWBR003
30.06.2009 15.06.2009 NY 1643560107BBEEAB HP1 A6MCHA HPSVP2A6MCHA
30.06.2009 15.06.2009 NY 164ED82003C8C157 HP1 RWBP007 HPSVP2RWBP007
30.06.2009 15.06.2009 NY 164ED818152D5362 HP1 RWBP008 HPSVP2RWBP008
30.06.2009 15.06.2009 NY 1643560107BBEEAB HP3 A6MCHA HPSVP2A6MCHA
30.06.2009 15.06.2009 NY 164ED82003C8C157 HP3 RWBP007 HPSVP2RWBP007
30.06.2009 15.06.2009 NY 164ED818152D5362 HP3 RWBP008 HPSVP2RWBP008
30.06.2009 15.06.2009 NY 1643560107BBEEAB HPS A6MCHA HPSVP2A6MCHA
30.06.2009 15.06.2009 NY 164ED82003C8C157 HPS RWBP007 HPSVP2RWBP007
30.06.2009 15.06.2009 NY 164ED818152D5362 HPS RWBP008 HPSVP2RWBP008
01.07.2009 15.06.2009 NY 16AEADE010C7CE20 HP1 RWBP023 HPSVP2RWBP023
01.07.2009 15.06.2009 NY 16AEADE010C7CE20 HP3 RWBP023 HPSVP2RWBP023
18.02.2009 25.06.2009 NY 1839CA730834BE2F FI YFI0110 BKUR0000965A5DE7BD
14.08.2009 13.07.2009 NY 1824DF5F02020ACF VD YVDDFA DSPV00004459AE7FA5
15.08.2009 14.07.2009 NY 1839C8CA00263CDE VV YVVZZ3R VDPS0001185A5DDB06
09.11.2007 15.07.2009 NY 181677EC047FB3F4 WP YWPR2PX DBH00000965935AA0CMVS
13.08.2009 02.08.2009 NY 1818A64D19C9D36B VV YVVZZNR VDPS0001145947F723
14.08.2009 18.08.2009 NY 182927541720E419 VV YVVZZ31 VDPS00011759D26946
14.08.2009 18.08.2009 NY 1818A63F03197821 VV YVVZZGR VDPS0001145947F6A7
14.08.2009 20.08.2009 NY 1839CA7715CBAEBE FI YFI0120 BKUR0000965A5DE7D4
05.12.2006 25.12.2009 NY 166877D90BF64B88 PHPS53 HMCLKCK
05.12.2006 25.12.2009 NY 166877D90BF64B88 PHPSPTA HMCLKCK
12.03.2008 25.12.2009 NY 161FDC6D015FC398 PHPS53 H0010
12.03.2008 25.12.2009 NY 163917300E3A09E8 PHPS53 HMCSEC3
12.03.2008 25.12.2009 NY 165068C40486A51C PHPS53 HMCSTK
12.03.2008 25.12.2009 NY 15CB758A0929ECF4 PHPS53 HMPVRSN
12.03.2008 25.12.2009 NY 161FDC6D015FC398 PHPSPTA H0010
12.03.2008 25.12.2009 NY 163917300E3A09E8 PHPSPTA HMCSEC3
12.03.2008 25.12.2009 NY 165068C40486A51C PHPSPTA HMCSTK
12.03.2008 25.12.2009 NY 15CB758A0929ECF4 PHPSPTA HMPVRSN
20.06.2010 11.04.2010 YY 41534E434F4D4F4E NULLID ASNDD802
22.06.2010 31.07.2010 YY 1647C9EC01BAB864 M24SAMT2 SAMP0190