{{# def.definitions }} {{# def.errors }} {{# def.setupKeyword }} {{# def.setupNextLevel }}

{{

var $idx = 'i' + $lvl
  , $dataNxt = $it.dataLevel = it.dataLevel + 1
  , $nextData = 'data' + $dataNxt
  , $currentBaseId = it.baseId
  , $nonEmptySchema = {{# def.nonEmptySchema:$schema }};

}}

var {{=$errs}} = errors; var {{=$valid}};

{{? $nonEmptySchema }}

{{# def.setCompositeRule }}

{{
  $it.schema = $schema;
  $it.schemaPath = $schemaPath;
  $it.errSchemaPath = $errSchemaPath;
}}

var {{=$nextValid}} = false;

for (var {{=$idx}} = 0; {{=$idx}} < {{=$data}}.length; {{=$idx}}++) {
  {{
    $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true);
    var $passData = $data + '[' + $idx + ']';
    $it.dataPathArr[$dataNxt] = $idx;
  }}

  {{# def.generateSubschemaCode }}
  {{# def.optimizeValidate }}

  if ({{=$nextValid}}) break;
}

{{# def.resetCompositeRule }}
{{= $closingBraces }}

if (!{{=$nextValid}}) {

{{??}}

if ({{=$data}}.length == 0) {

{{?}}

  {{# def.error:'contains' }}
} else {
  {{? $nonEmptySchema }}
    {{# def.resetErrors }}
  {{?}}
{{? it.opts.allErrors }} } {{?}}

{{# def.cleanUp }}