private Object makeNodeArray(Field f, EBlock b, int maxBlocks, int depth, AsnNodeCallBack directCb) {

        ArrayList<EBlock> subBlocks = b.getSubBlocks(EBlock.MAX_BLOCKS, f.type.blockSize, f.type.paddingByte);
        ArrayList list = new ArrayList(subBlocks.size());

        if (f.isReference()) { // Heterogeneous Array
            for (int i = 0; i < subBlocks.size(); i++) {
                EBlock subBlock = subBlocks.get(i);
                int sbpos = subBlock.tag;
                Field refChildField = f.getChildField(sbpos);
                if (refChildField == null) {
                    throw new ASNException("makeNodeArray", "No child field at pos 'sbpos' for Reference Array.");
                } else {
                    Object refChildNode = makeNode(refChildField, subBlock, maxBlocks, depth + 1, directCb);
                    if (refChildNode != null) {
                        list.add(refChildNode);
                    }
                }
            }
        } else { // Homogeneous Array

            Field f_nav = f.getCachedCloneNoneArray();
            for (EBlock subBlock : subBlocks) {
                Object node = makeNode(f_nav, subBlock, maxBlocks, depth + 1, directCb);
                if (node != null) {
                    list.add(node);
                }

                // ------------------Defensive Checks ------------------
                if (f_nav.type.isAssociatedWithTag()) { // Array of Primitives ??
                    if (subBlock.isUniversalSetSeq()) {
                        throw new ASNException("makeNodeArray", "Unexpected Universal 16|17 Tag ");
                    }
                } else { // Array of Composite
                    //int sbpos = subBlock.tag;
                    if (!subBlock.isUniversalSetSeq()) { // Furthermore the subBlock.tag = 16 or 17 based on f_nav.relation (SEQ/SET) 
                        throw new ASNException("makeNodeArray", "!subBlock.isUniversalSetSeq()");
                    }
                } // -------------End of Defensive checks------------				
            }
        }
        return list;
    }