{{## def.setupKeyword:
							 | 
						|
								  {{
							 | 
						|
								    var $lvl = it.level;
							 | 
						|
								    var $dataLvl = it.dataLevel;
							 | 
						|
								    var $schema = it.schema[$keyword];
							 | 
						|
								    var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
							 | 
						|
								    var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
							 | 
						|
								    var $breakOnError = !it.opts.allErrors;
							 | 
						|
								    var $errorKeyword;
							 | 
						|
								
							 | 
						|
								    var $data = 'data' + ($dataLvl || '');
							 | 
						|
								    var $valid = 'valid' + $lvl;
							 | 
						|
								    var $errs = 'errs__' + $lvl;
							 | 
						|
								  }}
							 | 
						|
								#}}
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								{{## def.setCompositeRule:
							 | 
						|
								  {{
							 | 
						|
								    var $wasComposite = it.compositeRule;
							 | 
						|
								    it.compositeRule = $it.compositeRule = true;
							 | 
						|
								  }}
							 | 
						|
								#}}
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								{{## def.resetCompositeRule:
							 | 
						|
								  {{ it.compositeRule = $it.compositeRule = $wasComposite; }}
							 | 
						|
								#}}
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								{{## def.setupNextLevel:
							 | 
						|
								  {{
							 | 
						|
								    var $it = it.util.copy(it);
							 | 
						|
								    var $closingBraces = '';
							 | 
						|
								    $it.level++;
							 | 
						|
								    var $nextValid = 'valid' + $it.level;
							 | 
						|
								  }}
							 | 
						|
								#}}
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								{{## def.ifValid:
							 | 
						|
								  {{? $breakOnError }}
							 | 
						|
								    if ({{=$valid}}) {
							 | 
						|
								    {{ $closingBraces += '}'; }}
							 | 
						|
								  {{?}}
							 | 
						|
								#}}
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								{{## def.ifResultValid:
							 | 
						|
								  {{? $breakOnError }}
							 | 
						|
								    if ({{=$nextValid}}) {
							 | 
						|
								    {{ $closingBraces += '}'; }}
							 | 
						|
								  {{?}}
							 | 
						|
								#}}
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								{{## def.elseIfValid:
							 | 
						|
								  {{? $breakOnError }}
							 | 
						|
								    {{ $closingBraces += '}'; }}
							 | 
						|
								    else {
							 | 
						|
								  {{?}}
							 | 
						|
								#}}
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								{{## def.nonEmptySchema:_schema:
							 | 
						|
								  (it.opts.strictKeywords
							 | 
						|
								    ? (typeof _schema == 'object' && Object.keys(_schema).length > 0)
							 | 
						|
								      || _schema === false
							 | 
						|
								    : it.util.schemaHasRules(_schema, it.RULES.all))
							 | 
						|
								#}}
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								{{## def.strLength:
							 | 
						|
								  {{? it.opts.unicode === false }}
							 | 
						|
								    {{=$data}}.length
							 | 
						|
								  {{??}}
							 | 
						|
								    ucs2length({{=$data}})
							 | 
						|
								  {{?}}
							 | 
						|
								#}}
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								{{## def.willOptimize:
							 | 
						|
								  it.util.varOccurences($code, $nextData) < 2
							 | 
						|
								#}}
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								{{## def.generateSubschemaCode:
							 | 
						|
								  {{
							 | 
						|
								    var $code = it.validate($it);
							 | 
						|
								    $it.baseId = $currentBaseId;
							 | 
						|
								  }}
							 | 
						|
								#}}
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								{{## def.insertSubschemaCode:
							 | 
						|
								  {{= it.validate($it) }}
							 | 
						|
								  {{ $it.baseId = $currentBaseId; }}
							 | 
						|
								#}}
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								{{## def._optimizeValidate:
							 | 
						|
								  it.util.varReplace($code, $nextData, $passData)
							 | 
						|
								#}}
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								{{## def.optimizeValidate:
							 | 
						|
								  {{? {{# def.willOptimize}} }}
							 | 
						|
								    {{= {{# def._optimizeValidate }} }}
							 | 
						|
								  {{??}}
							 | 
						|
								    var {{=$nextData}} = {{=$passData}};
							 | 
						|
								    {{= $code }}
							 | 
						|
								  {{?}}
							 | 
						|
								#}}
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								{{## def.$data:
							 | 
						|
								  {{
							 | 
						|
								    var $isData = it.opts.$data && $schema && $schema.$data
							 | 
						|
								      , $schemaValue;
							 | 
						|
								  }}
							 | 
						|
								  {{? $isData }}
							 | 
						|
								    var schema{{=$lvl}} = {{= it.util.getData($schema.$data, $dataLvl, it.dataPathArr) }};
							 | 
						|
								    {{ $schemaValue = 'schema' + $lvl; }}
							 | 
						|
								  {{??}}
							 | 
						|
								    {{ $schemaValue = $schema; }}
							 | 
						|
								  {{?}}
							 | 
						|
								#}}
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								{{## def.$dataNotType:_type:
							 | 
						|
								  {{?$isData}} ({{=$schemaValue}} !== undefined && typeof {{=$schemaValue}} != _type) || {{?}}
							 | 
						|
								#}}
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								{{## def.check$dataIsArray:
							 | 
						|
								  if (schema{{=$lvl}} === undefined) {{=$valid}} = true;
							 | 
						|
								  else if (!Array.isArray(schema{{=$lvl}})) {{=$valid}} = false;
							 | 
						|
								  else {
							 | 
						|
								#}}
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								{{## def.numberKeyword:
							 | 
						|
								  {{? !($isData || typeof $schema == 'number') }}
							 | 
						|
								    {{ throw new Error($keyword + ' must be number'); }}
							 | 
						|
								  {{?}}
							 | 
						|
								#}}
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								{{## def.beginDefOut:
							 | 
						|
								  {{
							 | 
						|
								    var $$outStack = $$outStack || [];
							 | 
						|
								    $$outStack.push(out);
							 | 
						|
								    out = '';
							 | 
						|
								  }}
							 | 
						|
								#}}
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								{{## def.storeDefOut:_variable:
							 | 
						|
								  {{
							 | 
						|
								    var _variable = out;
							 | 
						|
								    out = $$outStack.pop();
							 | 
						|
								  }}
							 | 
						|
								#}}
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								{{## def.dataPath:(dataPath || ''){{? it.errorPath != '""'}} + {{= it.errorPath }}{{?}}#}}
							 | 
						|
								
							 | 
						|
								{{## def.setParentData:
							 | 
						|
								  {{
							 | 
						|
								    var $parentData = $dataLvl ? 'data' + (($dataLvl-1)||'') : 'parentData'
							 | 
						|
								      , $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty';
							 | 
						|
								  }}
							 | 
						|
								#}}
							 | 
						|
								
							 | 
						|
								{{## def.passParentData:
							 | 
						|
								  {{# def.setParentData }}
							 | 
						|
								  , {{= $parentData }}
							 | 
						|
								  , {{= $parentDataProperty }}
							 | 
						|
								#}}
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								{{## def.iterateProperties:
							 | 
						|
								  {{? $ownProperties }}
							 | 
						|
								    {{=$dataProperties}} = {{=$dataProperties}} || Object.keys({{=$data}});
							 | 
						|
								    for (var {{=$idx}}=0; {{=$idx}}<{{=$dataProperties}}.length; {{=$idx}}++) {
							 | 
						|
								      var {{=$key}} = {{=$dataProperties}}[{{=$idx}}];
							 | 
						|
								  {{??}}
							 | 
						|
								    for (var {{=$key}} in {{=$data}}) {
							 | 
						|
								  {{?}}
							 | 
						|
								#}}
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								{{## def.noPropertyInData:
							 | 
						|
								  {{=$useData}} === undefined
							 | 
						|
								  {{? $ownProperties }}
							 | 
						|
								    || !{{# def.isOwnProperty }}
							 | 
						|
								  {{?}}
							 | 
						|
								#}}
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								{{## def.isOwnProperty:
							 | 
						|
								  Object.prototype.hasOwnProperty.call({{=$data}}, '{{=it.util.escapeQuotes($propertyKey)}}')
							 | 
						|
								#}}
							 |