( begin ( define ( ZED* ZEDnumber1 ZEDnumber2) ( cond ( #t ( * ZEDnumber1 ZEDnumber2) ) ( else err) ) ) ( define ( ZED+ ZEDnumber1 ZEDnumber2) ( cond ( #t ( + ZEDnumber1 ZEDnumber2) ) ( else err) ) ) ( define ( ZED- ZEDnumber1 ZEDnumber2) ( cond ( #t ( - ZEDnumber1 ZEDnumbe2) ) ( else err) ) ) ( define ( ZED/ ZEDnumber1 ZEDnumber2) ( cond ( #t ( / ZEDnumber1 ZEDnumber2) ) ( else err) ) ) ( define ( ZED= value1 value2) ( cond ( #t ( eqv? value1 value2) ) ( else err) ) ) ( define ( ZEDadd- between! item list collect) ( cond ( ( null? list ) collect) ( ( null? ( cdr list ) ) ( cons ( car list ) collect) ) ( #t ( ZEDadd- between! item ( cdr list ) ( cons item ( cons ( car list ) collect) ) ) ) ( else err) ) ) ( define ( ZEDadd- between item list ) ( cond ( #t ( reverse ( ZEDadd- between! item list ( quote ( ) ) ) ) ) ( else err) ) ) ( define ( ZEDadd- between- ra list item) ( cond ( #t ( reverse ( ZEDadd- between! item list ( quote ( ) ) ) ) ) ( else err) ) ) ( define ( ZEDalpha) ( cond ( #t ( ZEDwrite- all ( ZEDrd ( quote ( ) ) append ( ZEDrd ( quote ( ) ) append ( ZEDnewlines ( ZEDby- four ( ZEDfunction- sort ( ZEDsentences ( ZEDleading- newline ( ZEDspace- newline ( ZEDtab- replace ( ZEDnewline- space- tab- repeats ( ZEDnewline- space ( ZEDfilter ZEDnot- return ? ( ZEDreplace- trailing- white- space ( ZEDread- all) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ( else err) ) ) ( define ( ZEDapplication? expression) ( cond ( #t ( and ( not ( null? expression) ) ( pair? ( car expression) ) ( null? ( cdar expression) ) ) ) ( else err) ) ) ( define ( ZEDarity arity- hash function) ( cond ( #t ( cdr ( assoc function arity- hash) ) ) ( else err) ) ) ( define ( ZEDarity- hash! clause) ( cond ( #t ( cons ( ZEDclause- name clause) ( ZEDclause- arity clause) ) ) ( else err) ) ) ( define ( ZEDarity- hash program) ( cond ( #t ( append ( map ZEDarity- hash! program) ( append ( list ( cons ( quote ZED1) 1 ) ( cons ( quote ZED! ) 1 ) ( cons ( quote ZED001) 1 ) ( cons ( quote or ) 2 ) ( cons ( quote and ) 2 ) ( cons ( quote begin ) 2 ) ( cons ( quote ZEDc) 2 ) ( cons ( quote quote ) 1 ) ) ( list ( cons ( quote ZED002) 2 ) ( cons ( quote ZED003) 3 ) ( cons ( quote ZED004) 4 ) ( cons ( quote ZED005) 5 ) ( cons ( quote ZED006) 6 ) ( cons ( quote ZED007) 7 ) ( cons ( quote ZED008) 8 ) ( cons ( quote ZED009) 9 ) ( cons ( quote ZED010) 10 ) ( cons ( quote ZED011) 11 ) ( cons ( quote ZED012) 12 ) ( cons ( quote ZED013) 13 ) ( cons ( quote ZED014) 14 ) ( cons ( quote ZED015) 15 ) ( cons ( quote ZED016) 16 ) ( cons ( quote ZED017) 17 ) ( cons ( quote ZED018) 18 ) ( cons ( quote ZED019) 19 ) ( cons ( quote ZED020) 20 ) ( cons ( quote ZED021) 21 ) ( cons ( quote ZED022) 22 ) ( cons ( quote ZED023) 23 ) ( cons ( quote ZED024) 24 ) ( cons ( quote ZED025) 25 ) ( cons ( quote ZED026) 26 ) ( cons ( quote ZED027) 27 ) ( cons ( quote ZED028) 28 ) ( cons ( quote ZED029) 29 ) ( cons ( quote ZED030) 30 ) ( cons ( quote ZED031) 31 ) ( cons ( quote ZED032) 32 ) ( cons ( quote ZED033) 33 ) ( cons ( quote ZED034) 34 ) ( cons ( quote ZED035) 35 ) ( cons ( quote ZED036) 36 ) ( cons ( quote ZED037) 37 ) ( cons ( quote ZED038) 38 ) ( cons ( quote ZED039) 39 ) ( cons ( quote ZED040) 40 ) ( cons ( quote ZED041) 41 ) ( cons ( quote ZED042) 42 ) ( cons ( quote ZED043) 43 ) ( cons ( quote ZED044) 44 ) ( cons ( quote ZED045) 45 ) ( cons ( quote ZED046) 46 ) ( cons ( quote ZED047) 47 ) ( cons ( quote ZED048) 48 ) ( cons ( quote ZED049) 49 ) ( cons ( quote ZED050) 50 ) ( cons ( quote ZED051) 51 ) ( cons ( quote ZED052) 52 ) ( cons ( quote ZED053) 53 ) ( cons ( quote ZED054) 54 ) ( cons ( quote ZED055) 55 ) ( cons ( quote ZED056) 56 ) ( cons ( quote ZED057) 57 ) ( cons ( quote ZED058) 58 ) ( cons ( quote ZED059) 59 ) ( cons ( quote ZED060) 60 ) ( cons ( quote ZED061) 61 ) ( cons ( quote ZED062) 62 ) ( cons ( quote ZED063) 63 ) ( cons ( quote ZED064) 64 ) ( cons ( quote ZED065) 65 ) ( cons ( quote ZED066) 66 ) ( cons ( quote ZED067) 67 ) ( cons ( quote ZED068) 68 ) ( cons ( quote ZED069) 69 ) ( cons ( quote ZED070) 70 ) ( cons ( quote ZED071) 71 ) ( cons ( quote ZED072) 72 ) ( cons ( quote ZED073) 73 ) ( cons ( quote ZED074) 74 ) ( cons ( quote ZED075) 75 ) ( cons ( quote ZED076) 76 ) ( cons ( quote ZED077) 77 ) ( cons ( quote ZED078) 78 ) ( cons ( quote ZED079) 79 ) ( cons ( quote ZED080) 80 ) ( cons ( quote ZED081) 81 ) ( cons ( quote ZED082) 82 ) ( cons ( quote ZED083) 83 ) ( cons ( quote ZED084) 84 ) ( cons ( quote ZED085) 85 ) ( cons ( quote ZED086) 86 ) ( cons ( quote ZED087) 87 ) ( cons ( quote ZED088) 88 ) ( cons ( quote ZED089) 89 ) ( cons ( quote ZED090) 90 ) ( cons ( quote ZED091) 91 ) ( cons ( quote ZED092) 92 ) ( cons ( quote ZED093) 93 ) ( cons ( quote ZED094) 94 ) ( cons ( quote ZED095) 95 ) ( cons ( quote ZED096) 96 ) ( cons ( quote ZED097) 97 ) ( cons ( quote ZED098) 98 ) ( cons ( quote ZED099) 99 ) ) ) ) ) ( else err) ) ) ( define ( ZEDby- four! sentences collect) ( cond ( ( null? sentences) collect) ( #t ( ZEDby- four! ( cddddr sentences) ( cons ( list ( car sentences) ( cadr sentences) ( caddr sentences) ( cadddr sentences) ) collect) ) ) ( else err) ) ) ( define ( ZEDby- four sentences) ( cond ( #t ( reverse ( ZEDby- four! sentences ( quote ( ) ) ) ) ) ( else err) ) ) ( define ( ZEDby- three! sentences collect) ( cond ( ( null? sentences) collect) ( #t ( ZEDby- three! ( cdddr sentences) ( cons ( list ( car sentences) ( cadr sentences) ( caddr sentences) ) collect) ) ) ( else err) ) ) ( define ( ZEDby- three sentences) ( cond ( #t ( reverse ( ZEDby- three! sentences ( quote ( ) ) ) ) ) ( else err) ) ) ( define ( ZEDcharacter- less? character1 character2) ( cond ( #t ( < ( char-> integer character1) ( char-> integer character2) ) ) ( else err) ) ) ( define ( ZEDclause- arguments clause) ( cond ( #t ( cadr clause) ) ( else err) ) ) ( define ( ZEDclause- arguments- agree clause1 clause2) ( cond ( ( equal? ( ZEDclause- arguments clause1) ( ZEDclause- arguments clause2) ) ( ZEDclause- arguments clause1) ) ( else err) ) ) ( define ( ZEDclause- arity clause) ( cond ( #t ( length ( ZEDclause- arguments clause) ) ) ( else err) ) ) ( define ( ZEDclause- body clause) ( cond ( #t ( cddr clause) ) ( else err) ) ) ( define ( ZEDclause- less? clause1 clause2) ( cond ( #t ( ZEDsentence- less? ( car clause1) ( car clause2) ) ) ( else err) ) ) ( define ( ZEDclause- name clause) ( cond ( #t ( car clause) ) ( else err) ) ) ( define ( ZEDclause- name- agree clause1 clause2) ( cond ( ( eq? ( ZEDclause- name clause1) ( ZEDclause- name clause2) ) ( ZEDclause- name clause1) ) ( else err) ) ) ( define ( ZEDcombine- all! program collect) ( cond ( ( null? program) collect) ( ( null? ( cdr program) ) ( cons ( car program) collect) ) ( ( eq? ( ZEDclause- name ( car program) ) ( ZEDclause- name ( cadr program) ) ) ( ZEDcombine- all! ( ZEDcombine- head- clauses program) collect) ) ( #t ( ZEDcombine- all! ( cdr program) ( cons ( car program) collect) ) ) ( else err) ) ) ( define ( ZEDcombine- all program) ( cond ( #t ( reverse ( ZEDcombine- all! program ( quote ( ) ) ) ) ) ( else err) ) ) ( define ( ZEDcombine- clauses clause1 clause2) ( cond ( #t ( cons ( ZEDclause- name- agree clause1 clause2) ( cons ( ZEDclause- arguments- agree clause1 clause2) ( append ( ZEDclause- body clause1) ( ZEDclause- body clause2) ) ) ) ) ( else err) ) ) ( define ( ZEDcombine- head- clauses program) ( cond ( #t ( cons ( ZEDcombine- clauses ( car program) ( cadr program) ) ( cddr program) ) ) ( else err) ) ) ( define ( ZEDcombine- program- clauses program) ( cond ( #t ( ZEDcombine- all ( ZEDready- program program) ) ) ( else err) ) ) ( define ( ZEDcomp! ) ( cond ( #t ( ZEDcomp! a ( ZEDcombine- program- clauses ( ZEDby- three ( ZEDread- sentences ( ZEDdiscard- comments ( ZEDfunction- sort ( ZEDsentences ( ZEDleading- newline ( ZEDspace- newline ( ZEDtab- replace ( ZEDnewline- space- tab- repeats ( ZEDnewline- space ( ZEDfilter ZEDnot- return ? ( ZEDreplace- trailing- white- space ( ZEDread- all) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ( else err) ) ) ( define ( ZEDcomp! a combined) ( cond ( #t ( ZEDcomp! aa ( ZEDprogramize combined ( ZEDarity- hash combined) ) ) ) ( else err) ) ) ( define ( ZEDcomp! aa programized) ( cond ( #t ( write programized) ) ( else err) ) ) ( define ( ZEDcomp) ( cond ( #t ( ZEDcomp! ) ) ( else err) ) ) ( define ( ZEDcondefy! expressions collect) ( cond ( ( null? expressions) collect) ( #t ( ZEDcondefy! ( cddr expressions) ( cons ( append ( car expressions) ( cadr expressions) ) collect) ) ) ( else err) ) ) ( define ( ZEDcondefy expressions) ( cond ( #t ( reverse ( ZEDcondefy! expressions ( quote ( ) ) ) ) ) ( else err) ) ) ( define ( ZEDcons ZEDvalue1 ZEDvalue2) ( cond ( #t ( cons ZEDvalue1 ZEDvalue2) ) ( else err) ) ) ( define ( ZEDcount ZEDnumber) ( cond ( #t ( cons ( delay ZEDnumber) ( delay ( ZEDcount ( ZED+ ZEDnumber 1 ) ) ) ) ) ( else err) ) ) ( define ( ZEDcount- by ZEDstep ZEDnumber) ( cond ( #t ( cons ( delay ZEDnumber) ( delay ( ZEDcount- by ZEDstep ( ZED+ ZEDnumber ZEDstep) ) ) ) ) ( else err) ) ) ( define ( ZEDdelay- wrap expression) ( cond ( #t ( list ( quote delay ) expression) ) ( else err) ) ) ( define ( ZEDdigit? character) ( cond ( #t ( or ( eqv? #\0 character) ( eqv? #\1 character) ( eqv? #\2 character) ( eqv? #\3 character) ( eqv? #\4 character) ( eqv? #\5 character) ( eqv? #\6 character) ( eqv? #\7 character) ( eqv? #\8 character) ( eqv? #\9 character) ) ) ( else err) ) ) ( define ( ZEDdiscard- comments! program collect) ( cond ( ( null? program) collect) ( #t ( ZEDdiscard- comments! ( cddddr program) ( cons ( cadddr program) ( cons ( caddr program) ( cons ( car program) collect) ) ) ) ) ( else err) ) ) ( define ( ZEDdiscard- comments program) ( cond ( #t ( reverse ( ZEDdiscard- comments! program ( quote ( ) ) ) ) ) ( else err) ) ) ( define ( ZEDdr! value) ( cond ( ( pair? value) ( ZEDmp ZEDdr! ( ZEDfirst 64 value) ) ) ( #t value) ( else err) ) ) ( define ( ZEDdr value) ( cond ( #t ( begin ( display ( ZEDpr ( ZEDdr! value) ) ) ( newline ) ( newline ) value) ) ( else err) ) ) ( define ( ZEDdrr value) ( cond ( #t ( begin ( display ( ZEDpr value) ) ( newline ) ( newline ) value) ) ( else err) ) ) ( define ( ZEDfalse? noun- list ) ( cond ( #t ( equal? noun- list ( list #\# #\f #\a #\l #\s #\e ) ) ) ( else err) ) ) ( define ( ZEDfi function list ) ( cond ( ( null? list ) ( quote ( ) ) ) ( ( function ( if ( promise? ( car list ) ) ( force ( car list ) ) ( car list ) ) ) ( cons ( delay ( if ( promise? ( car list ) ) ( force ( car list ) ) ( car list ) ) ) ( delay ( ZEDfi function ( if ( promise? ( cdr list ) ) ( force ( cdr list ) ) ( cdr list ) ) ) ) ) ) ( #t ( ZEDfi function ( if ( promise? ( cdr list ) ) ( force ( cdr list ) ) ( cdr list ) ) ) ) ( else err) ) ) ( define ( ZEDfilter! predicate list collect) ( cond ( ( null? list ) collect) ( ( predicate ( car list ) ) ( ZEDfilter! predicate ( cdr list ) ( cons ( car list ) collect) ) ) ( #t ( ZEDfilter! predicate ( cdr list ) collect) ) ( else err) ) ) ( define ( ZEDfilter predicate list ) ( cond ( #t ( reverse ( ZEDfilter! predicate list ( quote ( ) ) ) ) ) ( else err) ) ) ( define ( ZEDfirst! integer list collect) ( cond ( ( or ( zero? integer) ( null? list ) ) ( reverse collect) ) ( ( not ( pair? list ) ) ( reverse ( cons list collect) ) ) ( ( > integer 0 ) ( ZEDfirst! ( - integer 1 ) ( if ( promise? ( cdr list ) ) ( force ( cdr list ) ) ( cdr list ) ) ( cons ( if ( promise? ( car list ) ) ( force ( car list ) ) ( car list ) ) collect) ) ) ( else err) ) ) ( define ( ZEDfirst integer list ) ( cond ( ( not ( pair? list ) ) list ) ( #t ( ZEDfirst! integer list ( quote ( ) ) ) ) ( else err) ) ) ( define ( ZEDflatten! ZEDlist ZEDsub- list- found? ZEDcollect) ( cond ( ( and ( ZEDnull? ZEDlist) ( ZEDnot ZEDsub- list- found?) ) ( ZEDreverse ZEDcollect) ) ( ( ZEDnull? ZEDlist) ( ZEDflatten! ( ZEDreverse ZEDcollect) #f ( quote ( ) ) ) ) ( ( ZEDnot ( ZEDpair? ZEDlist) ) ( ZEDflatten! ( quote ( ) ) ZEDsub- list- found? ( ZEDcons ZEDlist ZEDcollect) ) ) ( ( ZEDpair? ( if ( promise? ( car ZEDlist) ) ( force ( car ZEDlist) ) ( car ZEDlist) ) ) ( ZEDflatten! ( if ( promise? ( cdr ZEDlist) ) ( force ( cdr ZEDlist) ) ( cdr ZEDlist) ) #t ( ZEDcons ( if ( promise? ( cdr ( if ( promise? ( car ZEDlist) ) ( force ( car ZEDlist) ) ( car ZEDlist) ) ) ) ( force ( cdr ( if ( promise? ( car ZEDlist) ) ( force ( car ZEDlist) ) ( car ZEDlist) ) ) ) ( cdr ( if ( promise? ( car ZEDlist) ) ( force ( car ZEDlist) ) ( car ZEDlist) ) ) ) ( ZEDcons ( if ( promise? ( car ( if ( promise? ( car ZEDlist) ) ( force ( car ZEDlist) ) ( car ZEDlist) ) ) ) ( force ( car ( if ( promise? ( car ZEDlist) ) ( force ( car ZEDlist) ) ( car ZEDlist) ) ) ) ( car ( if ( promise? ( car ZEDlist) ) ( force ( car ZEDlist) ) ( car ZEDlist) ) ) ) ZEDcollect) ) ) ) ( ( ZEDnull? ( if ( promise? ( car ZEDlist) ) ( force ( car ZEDlist) ) ( car ZEDlist) ) ) ( ZEDflatten! ( if ( promise? ( cdr ZEDlist) ) ( force ( cdr ZEDlist) ) ( cdr ZEDlist) ) ZEDsub- list- found? ZEDcollect) ) ( #t ( ZEDflatten! ( if ( promise? ( cdr ZEDlist) ) ( force ( cdr ZEDlist) ) ( cdr ZEDlist) ) ZEDsub- list- found? ( ZEDcons ( if ( promise? ( car ZEDlist) ) ( force ( car ZEDlist) ) ( car ZEDlist) ) ZEDcollect) ) ) ( else err) ) ) ( define ( ZEDflatten ZEDlist) ( cond ( #t ( ZEDflatten! ZEDlist #f ( quote ( ) ) ) ) ( else err) ) ) ( define ( ZEDfor- each ZEDeffect ZEDlist) ( cond ( #t ( for-each ZEDeffect ZEDlist) ) ( else err) ) ) ( define ( ZEDfunction expression) ( cond ( #t ( caar expression) ) ( else err) ) ) ( define ( ZEDfunction- sort sentences) ( cond ( #t ( ZEDrd ( quote ( ) ) append ( ZEDsort ZEDclause- less? ( ZEDby- four sentences) ) ) ) ( else err) ) ) ( define ( ZEDfunctionize clause arity- hash) ( cond ( #t ( list ( quote define ) ( cons ( ZEDclause- name clause) ( ZEDclause- arguments clause) ) ( cons ( quote cond ) ( append ( ZEDcondefy ( ZEDmap- with ZEDschemefy ( ZEDclause- body clause) arity- hash) ) ( list ( list ( quote else ) ( quote err) ) ) ) ) ) ) ( else err) ) ) ( define ( ZEDgather- count?! candidate) ( cond ( #t ( and ( = 6 ( length candidate) ) ( eqv? #\Z ( car candidate) ) ( eqv? #\E ( cadr candidate) ) ( eqv? #\D ( caddr candidate) ) ( eqv? #\0 ( cadddr candidate) ) ( ZEDdigit? ( car ( cddddr candidate) ) ) ( ZEDdigit? ( cadr ( cddddr candidate) ) ) ) ) ( else err) ) ) ( define ( ZEDgather- count? symbol) ( cond ( #t ( ZEDgather- count?! ( string-> list ( symbol-> string symbol) ) ) ) ( else err) ) ) ( define ( ZEDgather- noun sentence) ( cond ( ( null? sentence) ( quote ( ) ) ) ( ( eqv? #\space ( car sentence) ) ( quote ( ) ) ) ( #t ( cons ( car sentence) ( ZEDgather- noun ( cdr sentence) ) ) ) ( else err) ) ) ( define ( ZEDgather- verb sentence) ( cond ( ( eqv? #\) ( car sentence) ) ( quote ( ) ) ) ( #t ( cons ( car sentence) ( ZEDgather- verb ( cdr sentence) ) ) ) ( else err) ) ) ( define ( ZEDgr garbage value) ( cond ( #t ( begin ( ZEDdr garbage) value) ) ( else err) ) ) ( define ( ZEDgrr garbage value) ( cond ( #t ( begin ( ZEDdrr garbage) value) ) ( else err) ) ) ( define ( ZEDleading- newline program) ( cond ( ( null? program) ( quote ( ) ) ) ( ( eqv? #\newline ( car program) ) ( cdr program) ) ( #t program) ( else err) ) ) ( define ( ZEDliteral? literal- list ) ( cond ( #t ( eqv? #\" (car literal-list))) (else err))) (define (ZEDmake-ZED ZED-list) (cond ((equal? ZED-list (list #\e #\r #\r )) " 'err") ((equal? ZED-list (list #\n #\i #\l )) " '( ) ") ((equal? ZED-list (list #\a #\n #\d )) " and ") ((equal? ZED-list (list #\o #\r )) " or ") ((equal? ZED-list (list #\q #\u #\o #\t #\e )) " quote ") ((equal? ZED-list (list #\s #\e )) " begin ") (#t (list->string (append (list #\Z #\E #\D ) ZED-list))) (else err))) (define (ZEDmake-character noun-list) (cond (#t (list->string (cons #\# (cons #\\ (cdr noun-list))))) (else err))) (define (ZEDmake-exact exact-list) (cond (#t (list->string (append (list #\# #\e ) exact-list))) (else err))) (define (ZEDmake-literal literal-list) (cond (#t (list->string (cdr (reverse (cdr (reverse literal-list)))))) (else err))) (define (ZEDmake-number-character noun-list) (cond (#t (list->string (list #\# #\\ (integer->char (string->number (list->string (cddr noun-list))))))) (else err))) (define (ZEDmap-with! function list extra collect) (cond ((null? list) collect) (#t (ZEDmap-with! function (cdr list) extra (cons (function (car list) extra) collect))) (else err))) (define (ZEDmap-with function list extra) (cond (#t (reverse (ZEDmap-with! function list extra (quote ())))) (else err))) (define (ZEDmerge! comparator list1 list2 collect) (cond ((null? list2) (append (reverse collect) list1)) ((null? list1) (append (reverse collect) list2)) ((comparator (car list2) (car list1)) (ZEDmerge! comparator list1 (cdr list2) (cons (car list2) collect))) (#t (ZEDmerge! comparator (cdr list1) list2 (cons (car list1) collect))) (else err))) (define (ZEDmerge comparator list1 list2) (cond (#t (ZEDmerge! comparator list1 list2 (quote ()))) (else err))) (define (ZEDmp function list) (cond ((null? list) (quote ())) ((pair? list) (cons (delay (function (if (promise? (car list)) (force (car list)) (car list)))) (delay (ZEDmp function (if (promise? (cdr list)) (force (cdr list)) (cdr list)))))) (#t (function list)) (else err))) (define (ZEDnewline-space! program) (cond (#t (cons #\n ewline (ZEDnewline-space!a program))) (else err))) (define (ZEDnewline-space!a program) (cond (#t (ZEDnewline-space!aa program (reverse (ZEDnewline-space!ab program (quote ()))))) (else err))) (define (ZEDnewline-space!aa program transformed) (cond ((equal? program transformed) program) (#t (ZEDnewline-space!a transformed)) (else err))) (define (ZEDnewline-space!ab program collect) (cond ((null? program) collect) ((null? (cdr program)) (cons (car program) collect)) ((and (eqv? #\n ewline (car program)) (or (eqv? #\s pace (cadr program)) (eqv? #\h t (cadr program)))) (ZEDnewline-space!ab (cdr program) collect)) (#t (ZEDnewline-space!ab (cdr program) (cons (car program) collect))) (else err))) (define (ZEDnewline-space program) (cond (#t (ZEDnewline-space! program)) (else err))) (define (ZEDnewline-space-tab-repeats! program collect) (cond ((or (null? program) (null? (cdr program))) (append program collect)) ((and (eqv? #\n ewline (car program)) (eqv? #\n ewline (cadr program))) (ZEDnewline-space-tab-repeats! (cdr program) collect)) ((and (or (eqv? #\s pace (car program)) (eqv? #\h t (car program))) (or (eqv? #\s pace (cadr program)) (eqv? #\h t (cadr program)))) (ZEDnewline-space-tab-repeats! (cdr program) collect)) (#t (ZEDnewline-space-tab-repeats! (cdr program) (cons (car program) collect))) (else err))) (define (ZEDnewline-space-tab-repeats program) (cond (#t (reverse (ZEDnewline-space-tab-repeats! program (quote ())))) (else err))) (define (ZEDnewlines clauses) (cond (#t (ZEDadd-between-ra (ZEDmap-with ZEDadd-between-ra clauses (list #\n ewline)) (list (list #\n ewline #\n ewline)))) (else err))) (define (ZEDnormal-character? noun-list) (cond (#t (eqv? (car noun-list) #\# )) (else err))) (define (ZEDnot ZEDvalue) (cond (#t (not ZEDvalue)) (else err))) (define (ZEDnot-return? character) (cond (#t (not (eqv? #\c r character))) (else err))) (define (ZEDnoun! noun-list number?) (cond (number? (ZEDmake-exact noun-list)) ((ZEDliteral? noun-list) (ZEDmake-literal noun-list)) ((ZEDtrue? noun-list) " #t") ((ZEDfalse? noun-list) " #f") ((ZEDnumber-character? noun-list) (ZEDmake-number-character noun-list)) ((ZEDnormal-character? noun-list) (ZEDmake-character noun-list)) (#t (ZEDmake-ZED noun-list)) (else err))) (define (ZEDnoun noun-list) (cond (#t (ZEDnoun! noun-list (string->number (list->string noun-list)))) (else err))) (define (ZEDnull? ZEDvalue) (cond (#t (null? ZEDvalue)) (else err))) (define (ZEDnumber-character? noun-list) (cond (#t (and (eqv? (car noun-list) #\# ) (eqv? (cadr noun-list) #\0 ) (not (null? (cddr noun-list))))) (else err))) (define (ZEDpair? ZEDvalue) (cond (#t (pair? ZEDvalue)) (else err))) (define (ZEDpop stack) (cond (#t (cdr stack)) (else err))) (define (ZEDpr! value output-string) (cond (#t (begin (display (ZEDpr!a value (quote ())) output-string) (ZEDpr!b output-string (get-output-string output-string)))) (else err))) (define (ZEDpr!a value collect) (cond ((char? value) (ZEDpr!aa (list->string (list #\# value)) collect)) ((string? value) (ZEDpr!aa (string-append " \"" value "\" " ) collect) ) ( ( symbol? value) ( ZEDpr! aa ( symbol-> string value) collect) ) ( ( number? value) ( ZEDpr! aa ( number-> string value) collect) ) ( ( and ( boolean? value) value) ( ZEDpr! aa "#true" collect) ) ( ( boolean? value) ( ZEDpr! aa "#false" collect) ) ( ( null? value) ( reverse collect) ) ( #t ( ZEDpr! a ( if ( promise? ( cdr value) ) ( force ( cdr value) ) ( cdr value) ) ( cons ( ZEDpr! a ( if ( promise? ( car value) ) ( force ( car value) ) ( car value) ) ( quote ( ) ) ) collect) ) ) ( else err) ) ) ( define ( ZEDpr! aa string collect) ( cond ( ( null? collect) string ) ( #t ( reverse ( cons string ( cons "." collect) ) ) ) ( else err) ) ) ( define ( ZEDpr! b output- string value) ( cond ( #t ( begin ( close-output-port output- string ) value) ) ( else err) ) ) ( define ( ZEDpr value) ( cond ( #t ( ZEDpr! value ( open- output- string ) ) ) ( else err) ) ) ( define ( ZEDprogramize program arity- hash) ( cond ( #t ( cons ( quote begin ) ( ZEDmap- with ZEDfunctionize program arity- hash) ) ) ( else err) ) ) ( define ( ZEDpush object stack) ( cond ( #t ( cons object stack) ) ( else err) ) ) ( define ( ZEDrd! function list ) ( cond ( ( null? ( if ( promise? ( cdr list ) ) ( force ( cdr list ) ) ( cdr list ) ) ) ( if ( promise? ( car list ) ) ( force ( car list ) ) ( car list ) ) ) ( #t ( ZEDrd! function ( cons ( function ( if ( promise? ( car ( if ( promise? ( cdr list ) ) ( force ( cdr list ) ) ( cdr list ) ) ) ) ( force ( car ( if ( promise? ( cdr list ) ) ( force ( cdr list ) ) ( cdr list ) ) ) ) ( car ( if ( promise? ( cdr list ) ) ( force ( cdr list ) ) ( cdr list ) ) ) ) ( if ( promise? ( car list ) ) ( force ( car list ) ) ( car list ) ) ) ( if ( promise? ( cdr ( if ( promise? ( cdr list ) ) ( force ( cdr list ) ) ( cdr list ) ) ) ) ( force ( cdr ( if ( promise? ( cdr list ) ) ( force ( cdr list ) ) ( cdr list ) ) ) ) ( cdr ( if ( promise? ( cdr list ) ) ( force ( cdr list ) ) ( cdr list ) ) ) ) ) ) ) ( else err) ) ) ( define ( ZEDrd final function list ) ( cond ( #t ( ZEDrd! function ( cons final ( reverse list ) ) ) ) ( else err) ) ) ( define ( ZEDread- all! collect) ( cond ( #t ( ZEDread- all! a ( read-char ) collect) ) ( else err) ) ) ( define ( ZEDread- all! a character collect) ( cond ( ( eof-object? character) collect) ( #t ( ZEDread- all! ( cons character collect) ) ) ( else err) ) ) ( define ( ZEDread- all) ( cond ( #t ( reverse ( ZEDread- all! ( quote ( ) ) ) ) ) ( else err) ) ) ( define ( ZEDread- sentence! a sentence collect) ( cond ( ( null? sentence) collect) ( ( eqv? #\space ( car sentence) ) ( ZEDread- sentence! a ( cdr sentence) collect) ) ( ( eqv? #\( ( car sentence) ) ( ZEDread- sentence! aa sentence ( ZEDgather- verb ( cdr sentence) ) collect) ) ( #t ( ZEDread- sentence! ab sentence ( ZEDgather- noun sentence) collect) ) ( else err) ) ) ( define ( ZEDread- sentence! aa sentence gather- verb collect) ( cond ( #t ( ZEDread- sentence! a ( ZEDtails ( + 2 ( length gather- verb) ) sentence) ( cons ( ZEDverb gather- verb) collect) ) ) ( else err) ) ) ( define ( ZEDread- sentence! ab sentence gather- noun collect) ( cond ( #t ( ZEDread- sentence! a ( ZEDtails ( length gather- noun) sentence) ( cons ( ZEDnoun gather- noun) collect) ) ) ( else err) ) ) ( define ( ZEDread- sentence! b list output- string ) ( cond ( #t ( begin ( display list output- string ) ( ZEDread- sentence! ba output- string ( get- output- string output- string ) ) ) ) ( else err) ) ) ( define ( ZEDread- sentence! ba output- string get- output- string ) ( cond ( #t ( begin ( close-output-port output- string ) ( ZEDread- sentence! baa ( open- input- string get- output- string ) ) ) ) ( else err) ) ) ( define ( ZEDread- sentence! baa input- string ) ( cond ( #t ( ZEDread- sentence! baaa input- string ( read input- string ) ) ) ( else err) ) ) ( define ( ZEDread- sentence! baaa input- string answer) ( cond ( #t ( begin ( close-input-port input- string ) answer) ) ( else err) ) ) ( define ( ZEDread- sentence sentence) ( cond ( #t ( ZEDread- sentence! b ( reverse ( ZEDread- sentence! a sentence ( quote ( ) ) ) ) ( open- output- string ) ) ) ( else err) ) ) ( define ( ZEDread- sentences sentences) ( cond ( #t ( map ZEDread- sentence sentences) ) ( else err) ) ) ( define ( ZEDready- clause clause) ( cond ( #t ( cons ( caaar clause) ( cons ( cdar clause) ( cdr clause) ) ) ) ( else err) ) ) ( define ( ZEDready- program program) ( cond ( #t ( map ZEDready- clause program) ) ( else err) ) ) ( define ( ZEDreplace- trailing- white- space! program) ( cond ( ( null? program) ( quote ( ) ) ) ( ( or ( eqv? ( car program) #\space) ( eqv? ( car program) #\ht) ( eqv? ( car program) #\cr) ( eqv? ( car program) #\newline ) ) ( ZEDreplace- trailing- white- space! ( cdr program) ) ) ( #t ( cons #\newline program) ) ( else err) ) ) ( define ( ZEDreplace- trailing- white- space program) ( cond ( #t ( reverse ( ZEDreplace- trailing- white- space! ( reverse program) ) ) ) ( else err) ) ) ( define ( ZEDreverse ZEDlist) ( cond ( #t ( reverse ZEDlist) ) ( else err) ) ) ( define ( ZEDschemefy! expression arity- hash stack) ( cond ( ( null? expression) ( ZEDtop stack) ) ( ( ZEDapplication? expression) ( ZEDschemefy! a expression arity- hash stack ( ZEDfunction expression) ) ) ( #t ( ZEDschemefy! ( cdr expression) arity- hash ( ZEDpush ( car expression) stack) ) ) ( else err) ) ) ( define ( ZEDschemefy! a expression arity- hash stack function) ( cond ( #t ( ZEDschemefy! aa expression arity- hash stack function ( ZEDarity arity- hash function) ) ) ( else err) ) ) ( define ( ZEDschemefy! aa expression arity- hash stack function arity) ( cond ( ( ZEDgather- count? function) ( ZEDschemefy! ( cdr expression) arity- hash ( ZEDpush ( ZEDfirst arity stack) ( ZEDtails arity stack) ) ) ) ( ( eq? function ( quote ZED1) ) ( ZEDschemefy! ( cdr expression) arity- hash ( ZEDpush ( list ( quote if ) ( list ( quote promise?) ( cons ( quote car ) ( ZEDfirst arity stack) ) ) ( list ( quote force ) ( cons ( quote car ) ( ZEDfirst arity stack) ) ) ( cons ( quote car ) ( ZEDfirst arity stack) ) ) ( ZEDtails arity stack) ) ) ) ( ( eq? function ( quote ZED! ) ) ( ZEDschemefy! ( cdr expression) arity- hash ( ZEDpush ( list ( quote if ) ( list ( quote promise?) ( cons ( quote cdr ) ( ZEDfirst arity stack) ) ) ( list ( quote force ) ( cons ( quote cdr ) ( ZEDfirst arity stack) ) ) ( cons ( quote cdr ) ( ZEDfirst arity stack) ) ) ( ZEDtails arity stack) ) ) ) ( ( eq? function ( quote ZEDc) ) ( ZEDschemefy! ( cdr expression) arity- hash ( ZEDpush ( cons ( quote cons ) ( map ZEDdelay- wrap ( ZEDfirst arity stack) ) ) ( ZEDtails arity stack) ) ) ) ( #t ( ZEDschemefy! ( cdr expression) arity- hash ( ZEDpush ( cons function ( ZEDfirst arity stack) ) ( ZEDtails arity stack) ) ) ) ( else err) ) ) ( define ( ZEDschemefy expression arity- hash) ( cond ( #t ( list ( ZEDschemefy! ( reverse expression) arity- hash ( ZEDstack) ) ) ) ( else err) ) ) ( define ( ZEDsentence- less? sentence1 sentence2) ( cond ( ( null? sentence2) #f) ( ( null? sentence1) #t) ( ( ZEDcharacter- less? ( car sentence1) ( car sentence2) ) #t) ( ( ZEDcharacter- less? ( car sentence2) ( car sentence1) ) #f) ( #t ( ZEDsentence- less? ( cdr sentence1) ( cdr sentence2) ) ) ( else err) ) ) ( define ( ZEDsentences! program collect1 collect2) ( cond ( ( null? program) collect2) ( ( eqv? #\newline ( car program) ) ( ZEDsentences! ( cdr program) ( quote ( ) ) ( cons ( reverse collect1) collect2) ) ) ( #t ( ZEDsentences! ( cdr program) ( cons ( car program) collect1) collect2) ) ( else err) ) ) ( define ( ZEDsentences program) ( cond ( #t ( reverse ( ZEDsentences! program ( quote ( ) ) ( quote ( ) ) ) ) ) ( else err) ) ) ( define ( ZEDsort! a jumble) ( cond ( #t ( map list jumble) ) ( else err) ) ) ( define ( ZEDsort! b comparator jumble) ( cond ( ( null? jumble) ( quote ( ) ) ) ( ( null? ( cdr jumble) ) jumble) ( #t ( ZEDsort! b comparator ( cons ( ZEDmerge comparator ( car jumble) ( cadr jumble) ) ( ZEDsort! b comparator ( cddr jumble) ) ) ) ) ( else err) ) ) ( define ( ZEDsort comparator jumble) ( cond ( #t ( car ( ZEDsort! b comparator ( ZEDsort! a jumble) ) ) ) ( else err) ) ) ( define ( ZEDspace- newline ! program collect) ( cond ( ( or ( null? program) ( null? ( cdr program) ) ) ( append program collect) ) ( ( and ( eqv? #\space ( car program) ) ( eqv? #\newline ( cadr program) ) ) ( ZEDspace- newline ! ( cdr program) collect) ) ( #t ( ZEDspace- newline ! ( cdr program) ( cons ( car program) collect) ) ) ( else err) ) ) ( define ( ZEDspace- newline program) ( cond ( #t ( reverse ( ZEDspace- newline ! program ( quote ( ) ) ) ) ) ( else err) ) ) ( define ( ZEDstack) ( cond ( #t ( quote ( ) ) ) ( else err) ) ) ( define ( ZEDtab- replace! program collect) ( cond ( ( null? program) collect) ( ( eqv? #\ht ( car program) ) ( ZEDtab- replace! ( cdr program) ( cons #\space collect) ) ) ( #t ( ZEDtab- replace! ( cdr program) ( cons ( car program) collect) ) ) ( else err) ) ) ( define ( ZEDtab- replace program) ( cond ( #t ( reverse ( ZEDtab- replace! program ( quote ( ) ) ) ) ) ( else err) ) ) ( define ( ZEDtails number list ) ( cond ( ( null? list ) ( quote ( ) ) ) ( ( zero? number) list ) ( ( > number 0 ) ( ZEDtails ( - number 1 ) ( cdr list ) ) ) ( else err) ) ) ( define ( ZEDtop stack) ( cond ( #t ( car stack) ) ( else err) ) ) ( define ( ZEDtrue? noun- list ) ( cond ( #t ( equal? noun- list ( list #\# #\t #\r #\u #\e ) ) ) ( else err) ) ) ( define ( ZEDverb verb- list ) ( cond ( ( ZEDliteral? verb- list ) ( list ( ZEDmake- literal verb- list ) ) ) ( #t ( list ( ZEDmake- ZED verb- list ) ) ) ( else err) ) ) ( define ( ZEDwrite- all program) ( cond ( ( null? program) ( quote err) ) ( #t ( ZEDwrite- all ( begin ( write-char ( car program) ) ( cdr program) ) ) ) ( else err) ) ) ( define ( ZEDzed-> scheme! value collect) ( cond ( ( null? value) ( reverse collect) ) ( #t ( ZEDzed-> scheme! ( if ( promise? ( cdr value) ) ( force ( cdr value) ) ( cdr value) ) ( cons ( ZEDzed-> scheme ( if ( promise? ( car value) ) ( force ( car value) ) ( car value) ) ) collect) ) ) ( else err) ) ) ( define ( ZEDzed-> scheme value) ( cond ( ( not ( pair? value) ) value) ( #t ( ZEDzed-> scheme! value ( quote ( ) ) ) ) ( else err) ) ) )
( ZEDcomp) ;don't forget
KGJlZ2luIChkZWZpbmUgKFpFRCogWkVEbnVtYmVyMSBaRURudW1iZXIyKSAoY29uZCAoI3QgKCogWkVEbnVtYmVyMSBaRURudW1iZXIyKSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRCsgWkVEbnVtYmVyMSBaRURudW1iZXIyKSAoY29uZCAoI3QgKCsgWkVEbnVtYmVyMSBaRURudW1iZXIyKSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRC0gWkVEbnVtYmVyMSBaRURudW1iZXIyKSAoY29uZCAoI3QgKC0gWkVEbnVtYmVyMSBaRURudW1iZTIpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVELyBaRURudW1iZXIxIFpFRG51bWJlcjIpIChjb25kICgjdCAoLyBaRURudW1iZXIxIFpFRG51bWJlcjIpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEPSB2YWx1ZTEgdmFsdWUyKSAoY29uZCAoI3QgKGVxdj8gdmFsdWUxIHZhbHVlMikpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURhZGQtYmV0d2VlbiEgaXRlbSBsaXN0IGNvbGxlY3QpIChjb25kICgobnVsbD8gbGlzdCkgY29sbGVjdCkgKChudWxsPyAoY2RyIGxpc3QpKSAoY29ucyAoY2FyIGxpc3QpIGNvbGxlY3QpKSAoI3QgKFpFRGFkZC1iZXR3ZWVuISBpdGVtIChjZHIgbGlzdCkgKGNvbnMgaXRlbSAoY29ucyAoY2FyIGxpc3QpIGNvbGxlY3QpKSkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURhZGQtYmV0d2VlbiBpdGVtIGxpc3QpIChjb25kICgjdCAocmV2ZXJzZSAoWkVEYWRkLWJldHdlZW4hIGl0ZW0gbGlzdCAocXVvdGUgKCkpKSkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURhZGQtYmV0d2Vlbi1yYSBsaXN0IGl0ZW0pIChjb25kICgjdCAocmV2ZXJzZSAoWkVEYWRkLWJldHdlZW4hIGl0ZW0gbGlzdCAocXVvdGUgKCkpKSkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURhbHBoYSkgKGNvbmQgKCN0IChaRUR3cml0ZS1hbGwgKFpFRHJkIChxdW90ZSAoKSkgYXBwZW5kIChaRURyZCAocXVvdGUgKCkpIGFwcGVuZCAoWkVEbmV3bGluZXMgKFpFRGJ5LWZvdXIgKFpFRGZ1bmN0aW9uLXNvcnQgKFpFRHNlbnRlbmNlcyAoWkVEbGVhZGluZy1uZXdsaW5lIChaRURzcGFjZS1uZXdsaW5lIChaRUR0YWItcmVwbGFjZSAoWkVEbmV3bGluZS1zcGFjZS10YWItcmVwZWF0cyAoWkVEbmV3bGluZS1zcGFjZSAoWkVEZmlsdGVyIFpFRG5vdC1yZXR1cm4/IChaRURyZXBsYWNlLXRyYWlsaW5nLXdoaXRlLXNwYWNlIChaRURyZWFkLWFsbCkpKSkpKSkpKSkpKSkpKSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRGFwcGxpY2F0aW9uPyBleHByZXNzaW9uKSAoY29uZCAoI3QgKGFuZCAobm90IChudWxsPyBleHByZXNzaW9uKSkgKHBhaXI/IChjYXIgZXhwcmVzc2lvbikpIChudWxsPyAoY2RhciBleHByZXNzaW9uKSkpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEYXJpdHkgYXJpdHktaGFzaCBmdW5jdGlvbikgKGNvbmQgKCN0IChjZHIgKGFzc29jIGZ1bmN0aW9uIGFyaXR5LWhhc2gpKSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRGFyaXR5LWhhc2ghIGNsYXVzZSkgKGNvbmQgKCN0IChjb25zIChaRURjbGF1c2UtbmFtZSBjbGF1c2UpIChaRURjbGF1c2UtYXJpdHkgY2xhdXNlKSkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURhcml0eS1oYXNoIHByb2dyYW0pIChjb25kICgjdCAoYXBwZW5kIChtYXAgWkVEYXJpdHktaGFzaCEgcHJvZ3JhbSkgKGFwcGVuZCAobGlzdCAoY29ucyAocXVvdGUgWkVEMSkgMSkgKGNvbnMgKHF1b3RlIFpFRCEpIDEpIChjb25zIChxdW90ZSBaRUQwMDEpIDEpIChjb25zIChxdW90ZSBvcikgMikgKGNvbnMgKHF1b3RlIGFuZCkgMikgKGNvbnMgKHF1b3RlIGJlZ2luKSAyKSAoY29ucyAocXVvdGUgWkVEYykgMikgKGNvbnMgKHF1b3RlIHF1b3RlKSAxKSkgKGxpc3QgKGNvbnMgKHF1b3RlIFpFRDAwMikgMikgKGNvbnMgKHF1b3RlIFpFRDAwMykgMykgKGNvbnMgKHF1b3RlIFpFRDAwNCkgNCkgKGNvbnMgKHF1b3RlIFpFRDAwNSkgNSkgKGNvbnMgKHF1b3RlIFpFRDAwNikgNikgKGNvbnMgKHF1b3RlIFpFRDAwNykgNykgKGNvbnMgKHF1b3RlIFpFRDAwOCkgOCkgKGNvbnMgKHF1b3RlIFpFRDAwOSkgOSkgKGNvbnMgKHF1b3RlIFpFRDAxMCkgMTApIChjb25zIChxdW90ZSBaRUQwMTEpIDExKSAoY29ucyAocXVvdGUgWkVEMDEyKSAxMikgKGNvbnMgKHF1b3RlIFpFRDAxMykgMTMpIChjb25zIChxdW90ZSBaRUQwMTQpIDE0KSAoY29ucyAocXVvdGUgWkVEMDE1KSAxNSkgKGNvbnMgKHF1b3RlIFpFRDAxNikgMTYpIChjb25zIChxdW90ZSBaRUQwMTcpIDE3KSAoY29ucyAocXVvdGUgWkVEMDE4KSAxOCkgKGNvbnMgKHF1b3RlIFpFRDAxOSkgMTkpIChjb25zIChxdW90ZSBaRUQwMjApIDIwKSAoY29ucyAocXVvdGUgWkVEMDIxKSAyMSkgKGNvbnMgKHF1b3RlIFpFRDAyMikgMjIpIChjb25zIChxdW90ZSBaRUQwMjMpIDIzKSAoY29ucyAocXVvdGUgWkVEMDI0KSAyNCkgKGNvbnMgKHF1b3RlIFpFRDAyNSkgMjUpIChjb25zIChxdW90ZSBaRUQwMjYpIDI2KSAoY29ucyAocXVvdGUgWkVEMDI3KSAyNykgKGNvbnMgKHF1b3RlIFpFRDAyOCkgMjgpIChjb25zIChxdW90ZSBaRUQwMjkpIDI5KSAoY29ucyAocXVvdGUgWkVEMDMwKSAzMCkgKGNvbnMgKHF1b3RlIFpFRDAzMSkgMzEpIChjb25zIChxdW90ZSBaRUQwMzIpIDMyKSAoY29ucyAocXVvdGUgWkVEMDMzKSAzMykgKGNvbnMgKHF1b3RlIFpFRDAzNCkgMzQpIChjb25zIChxdW90ZSBaRUQwMzUpIDM1KSAoY29ucyAocXVvdGUgWkVEMDM2KSAzNikgKGNvbnMgKHF1b3RlIFpFRDAzNykgMzcpIChjb25zIChxdW90ZSBaRUQwMzgpIDM4KSAoY29ucyAocXVvdGUgWkVEMDM5KSAzOSkgKGNvbnMgKHF1b3RlIFpFRDA0MCkgNDApIChjb25zIChxdW90ZSBaRUQwNDEpIDQxKSAoY29ucyAocXVvdGUgWkVEMDQyKSA0MikgKGNvbnMgKHF1b3RlIFpFRDA0MykgNDMpIChjb25zIChxdW90ZSBaRUQwNDQpIDQ0KSAoY29ucyAocXVvdGUgWkVEMDQ1KSA0NSkgKGNvbnMgKHF1b3RlIFpFRDA0NikgNDYpIChjb25zIChxdW90ZSBaRUQwNDcpIDQ3KSAoY29ucyAocXVvdGUgWkVEMDQ4KSA0OCkgKGNvbnMgKHF1b3RlIFpFRDA0OSkgNDkpIChjb25zIChxdW90ZSBaRUQwNTApIDUwKSAoY29ucyAocXVvdGUgWkVEMDUxKSA1MSkgKGNvbnMgKHF1b3RlIFpFRDA1MikgNTIpIChjb25zIChxdW90ZSBaRUQwNTMpIDUzKSAoY29ucyAocXVvdGUgWkVEMDU0KSA1NCkgKGNvbnMgKHF1b3RlIFpFRDA1NSkgNTUpIChjb25zIChxdW90ZSBaRUQwNTYpIDU2KSAoY29ucyAocXVvdGUgWkVEMDU3KSA1NykgKGNvbnMgKHF1b3RlIFpFRDA1OCkgNTgpIChjb25zIChxdW90ZSBaRUQwNTkpIDU5KSAoY29ucyAocXVvdGUgWkVEMDYwKSA2MCkgKGNvbnMgKHF1b3RlIFpFRDA2MSkgNjEpIChjb25zIChxdW90ZSBaRUQwNjIpIDYyKSAoY29ucyAocXVvdGUgWkVEMDYzKSA2MykgKGNvbnMgKHF1b3RlIFpFRDA2NCkgNjQpIChjb25zIChxdW90ZSBaRUQwNjUpIDY1KSAoY29ucyAocXVvdGUgWkVEMDY2KSA2NikgKGNvbnMgKHF1b3RlIFpFRDA2NykgNjcpIChjb25zIChxdW90ZSBaRUQwNjgpIDY4KSAoY29ucyAocXVvdGUgWkVEMDY5KSA2OSkgKGNvbnMgKHF1b3RlIFpFRDA3MCkgNzApIChjb25zIChxdW90ZSBaRUQwNzEpIDcxKSAoY29ucyAocXVvdGUgWkVEMDcyKSA3MikgKGNvbnMgKHF1b3RlIFpFRDA3MykgNzMpIChjb25zIChxdW90ZSBaRUQwNzQpIDc0KSAoY29ucyAocXVvdGUgWkVEMDc1KSA3NSkgKGNvbnMgKHF1b3RlIFpFRDA3NikgNzYpIChjb25zIChxdW90ZSBaRUQwNzcpIDc3KSAoY29ucyAocXVvdGUgWkVEMDc4KSA3OCkgKGNvbnMgKHF1b3RlIFpFRDA3OSkgNzkpIChjb25zIChxdW90ZSBaRUQwODApIDgwKSAoY29ucyAocXVvdGUgWkVEMDgxKSA4MSkgKGNvbnMgKHF1b3RlIFpFRDA4MikgODIpIChjb25zIChxdW90ZSBaRUQwODMpIDgzKSAoY29ucyAocXVvdGUgWkVEMDg0KSA4NCkgKGNvbnMgKHF1b3RlIFpFRDA4NSkgODUpIChjb25zIChxdW90ZSBaRUQwODYpIDg2KSAoY29ucyAocXVvdGUgWkVEMDg3KSA4NykgKGNvbnMgKHF1b3RlIFpFRDA4OCkgODgpIChjb25zIChxdW90ZSBaRUQwODkpIDg5KSAoY29ucyAocXVvdGUgWkVEMDkwKSA5MCkgKGNvbnMgKHF1b3RlIFpFRDA5MSkgOTEpIChjb25zIChxdW90ZSBaRUQwOTIpIDkyKSAoY29ucyAocXVvdGUgWkVEMDkzKSA5MykgKGNvbnMgKHF1b3RlIFpFRDA5NCkgOTQpIChjb25zIChxdW90ZSBaRUQwOTUpIDk1KSAoY29ucyAocXVvdGUgWkVEMDk2KSA5NikgKGNvbnMgKHF1b3RlIFpFRDA5NykgOTcpIChjb25zIChxdW90ZSBaRUQwOTgpIDk4KSAoY29ucyAocXVvdGUgWkVEMDk5KSA5OSkpKSkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURieS1mb3VyISBzZW50ZW5jZXMgY29sbGVjdCkgKGNvbmQgKChudWxsPyBzZW50ZW5jZXMpIGNvbGxlY3QpICgjdCAoWkVEYnktZm91ciEgKGNkZGRkciBzZW50ZW5jZXMpIChjb25zIChsaXN0IChjYXIgc2VudGVuY2VzKSAoY2FkciBzZW50ZW5jZXMpIChjYWRkciBzZW50ZW5jZXMpIChjYWRkZHIgc2VudGVuY2VzKSkgY29sbGVjdCkpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEYnktZm91ciBzZW50ZW5jZXMpIChjb25kICgjdCAocmV2ZXJzZSAoWkVEYnktZm91ciEgc2VudGVuY2VzIChxdW90ZSAoKSkpKSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRGJ5LXRocmVlISBzZW50ZW5jZXMgY29sbGVjdCkgKGNvbmQgKChudWxsPyBzZW50ZW5jZXMpIGNvbGxlY3QpICgjdCAoWkVEYnktdGhyZWUhIChjZGRkciBzZW50ZW5jZXMpIChjb25zIChsaXN0IChjYXIgc2VudGVuY2VzKSAoY2FkciBzZW50ZW5jZXMpIChjYWRkciBzZW50ZW5jZXMpKSBjb2xsZWN0KSkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURieS10aHJlZSBzZW50ZW5jZXMpIChjb25kICgjdCAocmV2ZXJzZSAoWkVEYnktdGhyZWUhIHNlbnRlbmNlcyAocXVvdGUgKCkpKSkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURjaGFyYWN0ZXItbGVzcz8gY2hhcmFjdGVyMSBjaGFyYWN0ZXIyKSAoY29uZCAoI3QgKDwgKGNoYXItPmludGVnZXIgY2hhcmFjdGVyMSkgKGNoYXItPmludGVnZXIgY2hhcmFjdGVyMikpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEY2xhdXNlLWFyZ3VtZW50cyBjbGF1c2UpIChjb25kICgjdCAoY2FkciBjbGF1c2UpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEY2xhdXNlLWFyZ3VtZW50cy1hZ3JlZSBjbGF1c2UxIGNsYXVzZTIpIChjb25kICgoZXF1YWw/IChaRURjbGF1c2UtYXJndW1lbnRzIGNsYXVzZTEpIChaRURjbGF1c2UtYXJndW1lbnRzIGNsYXVzZTIpKSAoWkVEY2xhdXNlLWFyZ3VtZW50cyBjbGF1c2UxKSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRGNsYXVzZS1hcml0eSBjbGF1c2UpIChjb25kICgjdCAobGVuZ3RoIChaRURjbGF1c2UtYXJndW1lbnRzIGNsYXVzZSkpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEY2xhdXNlLWJvZHkgY2xhdXNlKSAoY29uZCAoI3QgKGNkZHIgY2xhdXNlKSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRGNsYXVzZS1sZXNzPyBjbGF1c2UxIGNsYXVzZTIpIChjb25kICgjdCAoWkVEc2VudGVuY2UtbGVzcz8gKGNhciBjbGF1c2UxKSAoY2FyIGNsYXVzZTIpKSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRGNsYXVzZS1uYW1lIGNsYXVzZSkgKGNvbmQgKCN0IChjYXIgY2xhdXNlKSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRGNsYXVzZS1uYW1lLWFncmVlIGNsYXVzZTEgY2xhdXNlMikgKGNvbmQgKChlcT8gKFpFRGNsYXVzZS1uYW1lIGNsYXVzZTEpIChaRURjbGF1c2UtbmFtZSBjbGF1c2UyKSkgKFpFRGNsYXVzZS1uYW1lIGNsYXVzZTEpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEY29tYmluZS1hbGwhIHByb2dyYW0gY29sbGVjdCkgKGNvbmQgKChudWxsPyBwcm9ncmFtKSBjb2xsZWN0KSAoKG51bGw/IChjZHIgcHJvZ3JhbSkpIChjb25zIChjYXIgcHJvZ3JhbSkgY29sbGVjdCkpICgoZXE/IChaRURjbGF1c2UtbmFtZSAoY2FyIHByb2dyYW0pKSAoWkVEY2xhdXNlLW5hbWUgKGNhZHIgcHJvZ3JhbSkpKSAoWkVEY29tYmluZS1hbGwhIChaRURjb21iaW5lLWhlYWQtY2xhdXNlcyBwcm9ncmFtKSBjb2xsZWN0KSkgKCN0IChaRURjb21iaW5lLWFsbCEgKGNkciBwcm9ncmFtKSAoY29ucyAoY2FyIHByb2dyYW0pIGNvbGxlY3QpKSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRGNvbWJpbmUtYWxsIHByb2dyYW0pIChjb25kICgjdCAocmV2ZXJzZSAoWkVEY29tYmluZS1hbGwhIHByb2dyYW0gKHF1b3RlICgpKSkpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEY29tYmluZS1jbGF1c2VzIGNsYXVzZTEgY2xhdXNlMikgKGNvbmQgKCN0IChjb25zIChaRURjbGF1c2UtbmFtZS1hZ3JlZSBjbGF1c2UxIGNsYXVzZTIpIChjb25zIChaRURjbGF1c2UtYXJndW1lbnRzLWFncmVlIGNsYXVzZTEgY2xhdXNlMikgKGFwcGVuZCAoWkVEY2xhdXNlLWJvZHkgY2xhdXNlMSkgKFpFRGNsYXVzZS1ib2R5IGNsYXVzZTIpKSkpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEY29tYmluZS1oZWFkLWNsYXVzZXMgcHJvZ3JhbSkgKGNvbmQgKCN0IChjb25zIChaRURjb21iaW5lLWNsYXVzZXMgKGNhciBwcm9ncmFtKSAoY2FkciBwcm9ncmFtKSkgKGNkZHIgcHJvZ3JhbSkpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEY29tYmluZS1wcm9ncmFtLWNsYXVzZXMgcHJvZ3JhbSkgKGNvbmQgKCN0IChaRURjb21iaW5lLWFsbCAoWkVEcmVhZHktcHJvZ3JhbSBwcm9ncmFtKSkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURjb21wISkgKGNvbmQgKCN0IChaRURjb21wIWEgKFpFRGNvbWJpbmUtcHJvZ3JhbS1jbGF1c2VzIChaRURieS10aHJlZSAoWkVEcmVhZC1zZW50ZW5jZXMgKFpFRGRpc2NhcmQtY29tbWVudHMgKFpFRGZ1bmN0aW9uLXNvcnQgKFpFRHNlbnRlbmNlcyAoWkVEbGVhZGluZy1uZXdsaW5lIChaRURzcGFjZS1uZXdsaW5lIChaRUR0YWItcmVwbGFjZSAoWkVEbmV3bGluZS1zcGFjZS10YWItcmVwZWF0cyAoWkVEbmV3bGluZS1zcGFjZSAoWkVEZmlsdGVyIFpFRG5vdC1yZXR1cm4/IChaRURyZXBsYWNlLXRyYWlsaW5nLXdoaXRlLXNwYWNlIChaRURyZWFkLWFsbCkpKSkpKSkpKSkpKSkpKSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRGNvbXAhYSBjb21iaW5lZCkgKGNvbmQgKCN0IChaRURjb21wIWFhIChaRURwcm9ncmFtaXplIGNvbWJpbmVkIChaRURhcml0eS1oYXNoIGNvbWJpbmVkKSkpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEY29tcCFhYSBwcm9ncmFtaXplZCkgKGNvbmQgKCN0ICh3cml0ZSBwcm9ncmFtaXplZCkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURjb21wKSAoY29uZCAoI3QgKFpFRGNvbXAhKSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRGNvbmRlZnkhIGV4cHJlc3Npb25zIGNvbGxlY3QpIChjb25kICgobnVsbD8gZXhwcmVzc2lvbnMpIGNvbGxlY3QpICgjdCAoWkVEY29uZGVmeSEgKGNkZHIgZXhwcmVzc2lvbnMpIChjb25zIChhcHBlbmQgKGNhciBleHByZXNzaW9ucykgKGNhZHIgZXhwcmVzc2lvbnMpKSBjb2xsZWN0KSkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURjb25kZWZ5IGV4cHJlc3Npb25zKSAoY29uZCAoI3QgKHJldmVyc2UgKFpFRGNvbmRlZnkhIGV4cHJlc3Npb25zIChxdW90ZSAoKSkpKSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRGNvbnMgWkVEdmFsdWUxIFpFRHZhbHVlMikgKGNvbmQgKCN0IChjb25zIFpFRHZhbHVlMSBaRUR2YWx1ZTIpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEY291bnQgWkVEbnVtYmVyKSAoY29uZCAoI3QgKGNvbnMgKGRlbGF5IFpFRG51bWJlcikgKGRlbGF5IChaRURjb3VudCAoWkVEKyBaRURudW1iZXIgMSkpKSkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURjb3VudC1ieSBaRURzdGVwIFpFRG51bWJlcikgKGNvbmQgKCN0IChjb25zIChkZWxheSBaRURudW1iZXIpIChkZWxheSAoWkVEY291bnQtYnkgWkVEc3RlcCAoWkVEKyBaRURudW1iZXIgWkVEc3RlcCkpKSkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURkZWxheS13cmFwIGV4cHJlc3Npb24pIChjb25kICgjdCAobGlzdCAocXVvdGUgZGVsYXkpIGV4cHJlc3Npb24pKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEZGlnaXQ/IGNoYXJhY3RlcikgKGNvbmQgKCN0IChvciAoZXF2PyAjXDAgY2hhcmFjdGVyKSAoZXF2PyAjXDEgY2hhcmFjdGVyKSAoZXF2PyAjXDIgY2hhcmFjdGVyKSAoZXF2PyAjXDMgY2hhcmFjdGVyKSAoZXF2PyAjXDQgY2hhcmFjdGVyKSAoZXF2PyAjXDUgY2hhcmFjdGVyKSAoZXF2PyAjXDYgY2hhcmFjdGVyKSAoZXF2PyAjXDcgY2hhcmFjdGVyKSAoZXF2PyAjXDggY2hhcmFjdGVyKSAoZXF2PyAjXDkgY2hhcmFjdGVyKSkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURkaXNjYXJkLWNvbW1lbnRzISBwcm9ncmFtIGNvbGxlY3QpIChjb25kICgobnVsbD8gcHJvZ3JhbSkgY29sbGVjdCkgKCN0IChaRURkaXNjYXJkLWNvbW1lbnRzISAoY2RkZGRyIHByb2dyYW0pIChjb25zIChjYWRkZHIgcHJvZ3JhbSkgKGNvbnMgKGNhZGRyIHByb2dyYW0pIChjb25zIChjYXIgcHJvZ3JhbSkgY29sbGVjdCkpKSkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURkaXNjYXJkLWNvbW1lbnRzIHByb2dyYW0pIChjb25kICgjdCAocmV2ZXJzZSAoWkVEZGlzY2FyZC1jb21tZW50cyEgcHJvZ3JhbSAocXVvdGUgKCkpKSkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURkciEgdmFsdWUpIChjb25kICgocGFpcj8gdmFsdWUpIChaRURtcCBaRURkciEgKFpFRGZpcnN0IDY0IHZhbHVlKSkpICgjdCB2YWx1ZSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRGRyIHZhbHVlKSAoY29uZCAoI3QgKGJlZ2luIChkaXNwbGF5IChaRURwciAoWkVEZHIhIHZhbHVlKSkpIChuZXdsaW5lKSAobmV3bGluZSkgdmFsdWUpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEZHJyIHZhbHVlKSAoY29uZCAoI3QgKGJlZ2luIChkaXNwbGF5IChaRURwciB2YWx1ZSkpIChuZXdsaW5lKSAobmV3bGluZSkgdmFsdWUpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEZmFsc2U/IG5vdW4tbGlzdCkgKGNvbmQgKCN0IChlcXVhbD8gbm91bi1saXN0IChsaXN0ICNcIyAjXGYgI1xhICNcbCAjXHMgI1xlKSkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURmaSBmdW5jdGlvbiBsaXN0KSAoY29uZCAoKG51bGw/IGxpc3QpIChxdW90ZSAoKSkpICgoZnVuY3Rpb24gKGlmIChwcm9taXNlPyAoY2FyIGxpc3QpKSAoZm9yY2UgKGNhciBsaXN0KSkgKGNhciBsaXN0KSkpIChjb25zIChkZWxheSAoaWYgKHByb21pc2U/IChjYXIgbGlzdCkpIChmb3JjZSAoY2FyIGxpc3QpKSAoY2FyIGxpc3QpKSkgKGRlbGF5IChaRURmaSBmdW5jdGlvbiAoaWYgKHByb21pc2U/IChjZHIgbGlzdCkpIChmb3JjZSAoY2RyIGxpc3QpKSAoY2RyIGxpc3QpKSkpKSkgKCN0IChaRURmaSBmdW5jdGlvbiAoaWYgKHByb21pc2U/IChjZHIgbGlzdCkpIChmb3JjZSAoY2RyIGxpc3QpKSAoY2RyIGxpc3QpKSkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURmaWx0ZXIhIHByZWRpY2F0ZSBsaXN0IGNvbGxlY3QpIChjb25kICgobnVsbD8gbGlzdCkgY29sbGVjdCkgKChwcmVkaWNhdGUgKGNhciBsaXN0KSkgKFpFRGZpbHRlciEgcHJlZGljYXRlIChjZHIgbGlzdCkgKGNvbnMgKGNhciBsaXN0KSBjb2xsZWN0KSkpICgjdCAoWkVEZmlsdGVyISBwcmVkaWNhdGUgKGNkciBsaXN0KSBjb2xsZWN0KSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRGZpbHRlciBwcmVkaWNhdGUgbGlzdCkgKGNvbmQgKCN0IChyZXZlcnNlIChaRURmaWx0ZXIhIHByZWRpY2F0ZSBsaXN0IChxdW90ZSAoKSkpKSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRGZpcnN0ISBpbnRlZ2VyIGxpc3QgY29sbGVjdCkgKGNvbmQgKChvciAoemVybz8gaW50ZWdlcikgKG51bGw/IGxpc3QpKSAocmV2ZXJzZSBjb2xsZWN0KSkgKChub3QgKHBhaXI/IGxpc3QpKSAocmV2ZXJzZSAoY29ucyBsaXN0IGNvbGxlY3QpKSkgKCg+IGludGVnZXIgMCkgKFpFRGZpcnN0ISAoLSBpbnRlZ2VyIDEpIChpZiAocHJvbWlzZT8gKGNkciBsaXN0KSkgKGZvcmNlIChjZHIgbGlzdCkpIChjZHIgbGlzdCkpIChjb25zIChpZiAocHJvbWlzZT8gKGNhciBsaXN0KSkgKGZvcmNlIChjYXIgbGlzdCkpIChjYXIgbGlzdCkpIGNvbGxlY3QpKSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRGZpcnN0IGludGVnZXIgbGlzdCkgKGNvbmQgKChub3QgKHBhaXI/IGxpc3QpKSBsaXN0KSAoI3QgKFpFRGZpcnN0ISBpbnRlZ2VyIGxpc3QgKHF1b3RlICgpKSkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURmbGF0dGVuISBaRURsaXN0IFpFRHN1Yi1saXN0LWZvdW5kPyBaRURjb2xsZWN0KSAoY29uZCAoKGFuZCAoWkVEbnVsbD8gWkVEbGlzdCkgKFpFRG5vdCBaRURzdWItbGlzdC1mb3VuZD8pKSAoWkVEcmV2ZXJzZSBaRURjb2xsZWN0KSkgKChaRURudWxsPyBaRURsaXN0KSAoWkVEZmxhdHRlbiEgKFpFRHJldmVyc2UgWkVEY29sbGVjdCkgI2YgKHF1b3RlICgpKSkpICgoWkVEbm90IChaRURwYWlyPyBaRURsaXN0KSkgKFpFRGZsYXR0ZW4hIChxdW90ZSAoKSkgWkVEc3ViLWxpc3QtZm91bmQ/IChaRURjb25zIFpFRGxpc3QgWkVEY29sbGVjdCkpKSAoKFpFRHBhaXI/IChpZiAocHJvbWlzZT8gKGNhciBaRURsaXN0KSkgKGZvcmNlIChjYXIgWkVEbGlzdCkpIChjYXIgWkVEbGlzdCkpKSAoWkVEZmxhdHRlbiEgKGlmIChwcm9taXNlPyAoY2RyIFpFRGxpc3QpKSAoZm9yY2UgKGNkciBaRURsaXN0KSkgKGNkciBaRURsaXN0KSkgI3QgKFpFRGNvbnMgKGlmIChwcm9taXNlPyAoY2RyIChpZiAocHJvbWlzZT8gKGNhciBaRURsaXN0KSkgKGZvcmNlIChjYXIgWkVEbGlzdCkpIChjYXIgWkVEbGlzdCkpKSkgKGZvcmNlIChjZHIgKGlmIChwcm9taXNlPyAoY2FyIFpFRGxpc3QpKSAoZm9yY2UgKGNhciBaRURsaXN0KSkgKGNhciBaRURsaXN0KSkpKSAoY2RyIChpZiAocHJvbWlzZT8gKGNhciBaRURsaXN0KSkgKGZvcmNlIChjYXIgWkVEbGlzdCkpIChjYXIgWkVEbGlzdCkpKSkgKFpFRGNvbnMgKGlmIChwcm9taXNlPyAoY2FyIChpZiAocHJvbWlzZT8gKGNhciBaRURsaXN0KSkgKGZvcmNlIChjYXIgWkVEbGlzdCkpIChjYXIgWkVEbGlzdCkpKSkgKGZvcmNlIChjYXIgKGlmIChwcm9taXNlPyAoY2FyIFpFRGxpc3QpKSAoZm9yY2UgKGNhciBaRURsaXN0KSkgKGNhciBaRURsaXN0KSkpKSAoY2FyIChpZiAocHJvbWlzZT8gKGNhciBaRURsaXN0KSkgKGZvcmNlIChjYXIgWkVEbGlzdCkpIChjYXIgWkVEbGlzdCkpKSkgWkVEY29sbGVjdCkpKSkgKChaRURudWxsPyAoaWYgKHByb21pc2U/IChjYXIgWkVEbGlzdCkpIChmb3JjZSAoY2FyIFpFRGxpc3QpKSAoY2FyIFpFRGxpc3QpKSkgKFpFRGZsYXR0ZW4hIChpZiAocHJvbWlzZT8gKGNkciBaRURsaXN0KSkgKGZvcmNlIChjZHIgWkVEbGlzdCkpIChjZHIgWkVEbGlzdCkpIFpFRHN1Yi1saXN0LWZvdW5kPyBaRURjb2xsZWN0KSkgKCN0IChaRURmbGF0dGVuISAoaWYgKHByb21pc2U/IChjZHIgWkVEbGlzdCkpIChmb3JjZSAoY2RyIFpFRGxpc3QpKSAoY2RyIFpFRGxpc3QpKSBaRURzdWItbGlzdC1mb3VuZD8gKFpFRGNvbnMgKGlmIChwcm9taXNlPyAoY2FyIFpFRGxpc3QpKSAoZm9yY2UgKGNhciBaRURsaXN0KSkgKGNhciBaRURsaXN0KSkgWkVEY29sbGVjdCkpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEZmxhdHRlbiBaRURsaXN0KSAoY29uZCAoI3QgKFpFRGZsYXR0ZW4hIFpFRGxpc3QgI2YgKHF1b3RlICgpKSkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURmb3ItZWFjaCBaRURlZmZlY3QgWkVEbGlzdCkgKGNvbmQgKCN0IChmb3ItZWFjaCBaRURlZmZlY3QgWkVEbGlzdCkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURmdW5jdGlvbiBleHByZXNzaW9uKSAoY29uZCAoI3QgKGNhYXIgZXhwcmVzc2lvbikpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURmdW5jdGlvbi1zb3J0IHNlbnRlbmNlcykgKGNvbmQgKCN0IChaRURyZCAocXVvdGUgKCkpIGFwcGVuZCAoWkVEc29ydCBaRURjbGF1c2UtbGVzcz8gKFpFRGJ5LWZvdXIgc2VudGVuY2VzKSkpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEZnVuY3Rpb25pemUgY2xhdXNlIGFyaXR5LWhhc2gpIChjb25kICgjdCAobGlzdCAocXVvdGUgZGVmaW5lKSAoY29ucyAoWkVEY2xhdXNlLW5hbWUgY2xhdXNlKSAoWkVEY2xhdXNlLWFyZ3VtZW50cyBjbGF1c2UpKSAoY29ucyAocXVvdGUgY29uZCkgKGFwcGVuZCAoWkVEY29uZGVmeSAoWkVEbWFwLXdpdGggWkVEc2NoZW1lZnkgKFpFRGNsYXVzZS1ib2R5IGNsYXVzZSkgYXJpdHktaGFzaCkpIChsaXN0IChsaXN0IChxdW90ZSBlbHNlKSAocXVvdGUgZXJyKSkpKSkpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEZ2F0aGVyLWNvdW50PyEgY2FuZGlkYXRlKSAoY29uZCAoI3QgKGFuZCAoPSA2IChsZW5ndGggY2FuZGlkYXRlKSkgKGVxdj8gI1xaIChjYXIgY2FuZGlkYXRlKSkgKGVxdj8gI1xFIChjYWRyIGNhbmRpZGF0ZSkpIChlcXY/ICNcRCAoY2FkZHIgY2FuZGlkYXRlKSkgKGVxdj8gI1wwIChjYWRkZHIgY2FuZGlkYXRlKSkgKFpFRGRpZ2l0PyAoY2FyIChjZGRkZHIgY2FuZGlkYXRlKSkpIChaRURkaWdpdD8gKGNhZHIgKGNkZGRkciBjYW5kaWRhdGUpKSkpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEZ2F0aGVyLWNvdW50PyBzeW1ib2wpIChjb25kICgjdCAoWkVEZ2F0aGVyLWNvdW50PyEgKHN0cmluZy0+bGlzdCAoc3ltYm9sLT5zdHJpbmcgc3ltYm9sKSkpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEZ2F0aGVyLW5vdW4gc2VudGVuY2UpIChjb25kICgobnVsbD8gc2VudGVuY2UpIChxdW90ZSAoKSkpICgoZXF2PyAjXHNwYWNlIChjYXIgc2VudGVuY2UpKSAocXVvdGUgKCkpKSAoI3QgKGNvbnMgKGNhciBzZW50ZW5jZSkgKFpFRGdhdGhlci1ub3VuIChjZHIgc2VudGVuY2UpKSkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURnYXRoZXItdmVyYiBzZW50ZW5jZSkgKGNvbmQgKChlcXY/ICNcKSAoY2FyIHNlbnRlbmNlKSkgKHF1b3RlICgpKSkgKCN0IChjb25zIChjYXIgc2VudGVuY2UpIChaRURnYXRoZXItdmVyYiAoY2RyIHNlbnRlbmNlKSkpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEZ3IgZ2FyYmFnZSB2YWx1ZSkgKGNvbmQgKCN0IChiZWdpbiAoWkVEZHIgZ2FyYmFnZSkgdmFsdWUpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEZ3JyIGdhcmJhZ2UgdmFsdWUpIChjb25kICgjdCAoYmVnaW4gKFpFRGRyciBnYXJiYWdlKSB2YWx1ZSkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURsZWFkaW5nLW5ld2xpbmUgcHJvZ3JhbSkgKGNvbmQgKChudWxsPyBwcm9ncmFtKSAocXVvdGUgKCkpKSAoKGVxdj8gI1xuZXdsaW5lIChjYXIgcHJvZ3JhbSkpIChjZHIgcHJvZ3JhbSkpICgjdCBwcm9ncmFtKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEbGl0ZXJhbD8gbGl0ZXJhbC1saXN0KSAoY29uZCAoI3QgKGVxdj8gI1wiIChjYXIgbGl0ZXJhbC1saXN0KSkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURtYWtlLVpFRCBaRUQtbGlzdCkgKGNvbmQgKChlcXVhbD8gWkVELWxpc3QgKGxpc3QgI1xlICNcciAjXHIpKSAiJ2VyciIpICgoZXF1YWw/IFpFRC1saXN0IChsaXN0ICNcbiAjXGkgI1xsKSkgIicoKSIpICgoZXF1YWw/IFpFRC1saXN0IChsaXN0ICNcYSAjXG4gI1xkKSkgImFuZCIpICgoZXF1YWw/IFpFRC1saXN0IChsaXN0ICNcbyAjXHIpKSAib3IiKSAoKGVxdWFsPyBaRUQtbGlzdCAobGlzdCAjXHEgI1x1ICNcbyAjXHQgI1xlKSkgInF1b3RlIikgKChlcXVhbD8gWkVELWxpc3QgKGxpc3QgI1xzICNcZSkpICJiZWdpbiIpICgjdCAobGlzdC0+c3RyaW5nIChhcHBlbmQgKGxpc3QgI1xaICNcRSAjXEQpIFpFRC1saXN0KSkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURtYWtlLWNoYXJhY3RlciBub3VuLWxpc3QpIChjb25kICgjdCAobGlzdC0+c3RyaW5nIChjb25zICNcIyAoY29ucyAjXFwgKGNkciBub3VuLWxpc3QpKSkpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEbWFrZS1leGFjdCBleGFjdC1saXN0KSAoY29uZCAoI3QgKGxpc3QtPnN0cmluZyAoYXBwZW5kIChsaXN0ICNcIyAjXGUpIGV4YWN0LWxpc3QpKSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRG1ha2UtbGl0ZXJhbCBsaXRlcmFsLWxpc3QpIChjb25kICgjdCAobGlzdC0+c3RyaW5nIChjZHIgKHJldmVyc2UgKGNkciAocmV2ZXJzZSBsaXRlcmFsLWxpc3QpKSkpKSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRG1ha2UtbnVtYmVyLWNoYXJhY3RlciBub3VuLWxpc3QpIChjb25kICgjdCAobGlzdC0+c3RyaW5nIChsaXN0ICNcIyAjXFwgKGludGVnZXItPmNoYXIgKHN0cmluZy0+bnVtYmVyIChsaXN0LT5zdHJpbmcgKGNkZHIgbm91bi1saXN0KSkpKSkpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEbWFwLXdpdGghIGZ1bmN0aW9uIGxpc3QgZXh0cmEgY29sbGVjdCkgKGNvbmQgKChudWxsPyBsaXN0KSBjb2xsZWN0KSAoI3QgKFpFRG1hcC13aXRoISBmdW5jdGlvbiAoY2RyIGxpc3QpIGV4dHJhIChjb25zIChmdW5jdGlvbiAoY2FyIGxpc3QpIGV4dHJhKSBjb2xsZWN0KSkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURtYXAtd2l0aCBmdW5jdGlvbiBsaXN0IGV4dHJhKSAoY29uZCAoI3QgKHJldmVyc2UgKFpFRG1hcC13aXRoISBmdW5jdGlvbiBsaXN0IGV4dHJhIChxdW90ZSAoKSkpKSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRG1lcmdlISBjb21wYXJhdG9yIGxpc3QxIGxpc3QyIGNvbGxlY3QpIChjb25kICgobnVsbD8gbGlzdDIpIChhcHBlbmQgKHJldmVyc2UgY29sbGVjdCkgbGlzdDEpKSAoKG51bGw/IGxpc3QxKSAoYXBwZW5kIChyZXZlcnNlIGNvbGxlY3QpIGxpc3QyKSkgKChjb21wYXJhdG9yIChjYXIgbGlzdDIpIChjYXIgbGlzdDEpKSAoWkVEbWVyZ2UhIGNvbXBhcmF0b3IgbGlzdDEgKGNkciBsaXN0MikgKGNvbnMgKGNhciBsaXN0MikgY29sbGVjdCkpKSAoI3QgKFpFRG1lcmdlISBjb21wYXJhdG9yIChjZHIgbGlzdDEpIGxpc3QyIChjb25zIChjYXIgbGlzdDEpIGNvbGxlY3QpKSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRG1lcmdlIGNvbXBhcmF0b3IgbGlzdDEgbGlzdDIpIChjb25kICgjdCAoWkVEbWVyZ2UhIGNvbXBhcmF0b3IgbGlzdDEgbGlzdDIgKHF1b3RlICgpKSkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURtcCBmdW5jdGlvbiBsaXN0KSAoY29uZCAoKG51bGw/IGxpc3QpIChxdW90ZSAoKSkpICgocGFpcj8gbGlzdCkgKGNvbnMgKGRlbGF5IChmdW5jdGlvbiAoaWYgKHByb21pc2U/IChjYXIgbGlzdCkpIChmb3JjZSAoY2FyIGxpc3QpKSAoY2FyIGxpc3QpKSkpIChkZWxheSAoWkVEbXAgZnVuY3Rpb24gKGlmIChwcm9taXNlPyAoY2RyIGxpc3QpKSAoZm9yY2UgKGNkciBsaXN0KSkgKGNkciBsaXN0KSkpKSkpICgjdCAoZnVuY3Rpb24gbGlzdCkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURuZXdsaW5lLXNwYWNlISBwcm9ncmFtKSAoY29uZCAoI3QgKGNvbnMgI1xuZXdsaW5lIChaRURuZXdsaW5lLXNwYWNlIWEgcHJvZ3JhbSkpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEbmV3bGluZS1zcGFjZSFhIHByb2dyYW0pIChjb25kICgjdCAoWkVEbmV3bGluZS1zcGFjZSFhYSBwcm9ncmFtIChyZXZlcnNlIChaRURuZXdsaW5lLXNwYWNlIWFiIHByb2dyYW0gKHF1b3RlICgpKSkpKSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRG5ld2xpbmUtc3BhY2UhYWEgcHJvZ3JhbSB0cmFuc2Zvcm1lZCkgKGNvbmQgKChlcXVhbD8gcHJvZ3JhbSB0cmFuc2Zvcm1lZCkgcHJvZ3JhbSkgKCN0IChaRURuZXdsaW5lLXNwYWNlIWEgdHJhbnNmb3JtZWQpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEbmV3bGluZS1zcGFjZSFhYiBwcm9ncmFtIGNvbGxlY3QpIChjb25kICgobnVsbD8gcHJvZ3JhbSkgY29sbGVjdCkgKChudWxsPyAoY2RyIHByb2dyYW0pKSAoY29ucyAoY2FyIHByb2dyYW0pIGNvbGxlY3QpKSAoKGFuZCAoZXF2PyAjXG5ld2xpbmUgKGNhciBwcm9ncmFtKSkgKG9yIChlcXY/ICNcc3BhY2UgKGNhZHIgcHJvZ3JhbSkpIChlcXY/ICNcaHQgKGNhZHIgcHJvZ3JhbSkpKSkgKFpFRG5ld2xpbmUtc3BhY2UhYWIgKGNkciBwcm9ncmFtKSBjb2xsZWN0KSkgKCN0IChaRURuZXdsaW5lLXNwYWNlIWFiIChjZHIgcHJvZ3JhbSkgKGNvbnMgKGNhciBwcm9ncmFtKSBjb2xsZWN0KSkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURuZXdsaW5lLXNwYWNlIHByb2dyYW0pIChjb25kICgjdCAoWkVEbmV3bGluZS1zcGFjZSEgcHJvZ3JhbSkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURuZXdsaW5lLXNwYWNlLXRhYi1yZXBlYXRzISBwcm9ncmFtIGNvbGxlY3QpIChjb25kICgob3IgKG51bGw/IHByb2dyYW0pIChudWxsPyAoY2RyIHByb2dyYW0pKSkgKGFwcGVuZCBwcm9ncmFtIGNvbGxlY3QpKSAoKGFuZCAoZXF2PyAjXG5ld2xpbmUgKGNhciBwcm9ncmFtKSkgKGVxdj8gI1xuZXdsaW5lIChjYWRyIHByb2dyYW0pKSkgKFpFRG5ld2xpbmUtc3BhY2UtdGFiLXJlcGVhdHMhIChjZHIgcHJvZ3JhbSkgY29sbGVjdCkpICgoYW5kIChvciAoZXF2PyAjXHNwYWNlIChjYXIgcHJvZ3JhbSkpIChlcXY/ICNcaHQgKGNhciBwcm9ncmFtKSkpIChvciAoZXF2PyAjXHNwYWNlIChjYWRyIHByb2dyYW0pKSAoZXF2PyAjXGh0IChjYWRyIHByb2dyYW0pKSkpIChaRURuZXdsaW5lLXNwYWNlLXRhYi1yZXBlYXRzISAoY2RyIHByb2dyYW0pIGNvbGxlY3QpKSAoI3QgKFpFRG5ld2xpbmUtc3BhY2UtdGFiLXJlcGVhdHMhIChjZHIgcHJvZ3JhbSkgKGNvbnMgKGNhciBwcm9ncmFtKSBjb2xsZWN0KSkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURuZXdsaW5lLXNwYWNlLXRhYi1yZXBlYXRzIHByb2dyYW0pIChjb25kICgjdCAocmV2ZXJzZSAoWkVEbmV3bGluZS1zcGFjZS10YWItcmVwZWF0cyEgcHJvZ3JhbSAocXVvdGUgKCkpKSkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURuZXdsaW5lcyBjbGF1c2VzKSAoY29uZCAoI3QgKFpFRGFkZC1iZXR3ZWVuLXJhIChaRURtYXAtd2l0aCBaRURhZGQtYmV0d2Vlbi1yYSBjbGF1c2VzIChsaXN0ICNcbmV3bGluZSkpIChsaXN0IChsaXN0ICNcbmV3bGluZSAjXG5ld2xpbmUpKSkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURub3JtYWwtY2hhcmFjdGVyPyBub3VuLWxpc3QpIChjb25kICgjdCAoZXF2PyAoY2FyIG5vdW4tbGlzdCkgI1wjKSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRG5vdCBaRUR2YWx1ZSkgKGNvbmQgKCN0IChub3QgWkVEdmFsdWUpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEbm90LXJldHVybj8gY2hhcmFjdGVyKSAoY29uZCAoI3QgKG5vdCAoZXF2PyAjXGNyIGNoYXJhY3RlcikpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEbm91biEgbm91bi1saXN0IG51bWJlcj8pIChjb25kIChudW1iZXI/IChaRURtYWtlLWV4YWN0IG5vdW4tbGlzdCkpICgoWkVEbGl0ZXJhbD8gbm91bi1saXN0KSAoWkVEbWFrZS1saXRlcmFsIG5vdW4tbGlzdCkpICgoWkVEdHJ1ZT8gbm91bi1saXN0KSAiI3QiKSAoKFpFRGZhbHNlPyBub3VuLWxpc3QpICIjZiIpICgoWkVEbnVtYmVyLWNoYXJhY3Rlcj8gbm91bi1saXN0KSAoWkVEbWFrZS1udW1iZXItY2hhcmFjdGVyIG5vdW4tbGlzdCkpICgoWkVEbm9ybWFsLWNoYXJhY3Rlcj8gbm91bi1saXN0KSAoWkVEbWFrZS1jaGFyYWN0ZXIgbm91bi1saXN0KSkgKCN0IChaRURtYWtlLVpFRCBub3VuLWxpc3QpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEbm91biBub3VuLWxpc3QpIChjb25kICgjdCAoWkVEbm91biEgbm91bi1saXN0IChzdHJpbmctPm51bWJlciAobGlzdC0+c3RyaW5nIG5vdW4tbGlzdCkpKSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRG51bGw/IFpFRHZhbHVlKSAoY29uZCAoI3QgKG51bGw/IFpFRHZhbHVlKSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRG51bWJlci1jaGFyYWN0ZXI/IG5vdW4tbGlzdCkgKGNvbmQgKCN0IChhbmQgKGVxdj8gKGNhciBub3VuLWxpc3QpICNcIykgKGVxdj8gKGNhZHIgbm91bi1saXN0KSAjXDApIChub3QgKG51bGw/IChjZGRyIG5vdW4tbGlzdCkpKSkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURwYWlyPyBaRUR2YWx1ZSkgKGNvbmQgKCN0IChwYWlyPyBaRUR2YWx1ZSkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURwb3Agc3RhY2spIChjb25kICgjdCAoY2RyIHN0YWNrKSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRHByISB2YWx1ZSBvdXRwdXQtc3RyaW5nKSAoY29uZCAoI3QgKGJlZ2luIChkaXNwbGF5IChaRURwciFhIHZhbHVlIChxdW90ZSAoKSkpIG91dHB1dC1zdHJpbmcpIChaRURwciFiIG91dHB1dC1zdHJpbmcgKGdldC1vdXRwdXQtc3RyaW5nIG91dHB1dC1zdHJpbmcpKSkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURwciFhIHZhbHVlIGNvbGxlY3QpIChjb25kICgoY2hhcj8gdmFsdWUpIChaRURwciFhYSAobGlzdC0+c3RyaW5nIChsaXN0ICNcIyB2YWx1ZSkpIGNvbGxlY3QpKSAoKHN0cmluZz8gdmFsdWUpIChaRURwciFhYSAoc3RyaW5nLWFwcGVuZCAiXCIiIHZhbHVlICJcIiIpIGNvbGxlY3QpKSAoKHN5bWJvbD8gdmFsdWUpIChaRURwciFhYSAoc3ltYm9sLT5zdHJpbmcgdmFsdWUpIGNvbGxlY3QpKSAoKG51bWJlcj8gdmFsdWUpIChaRURwciFhYSAobnVtYmVyLT5zdHJpbmcgdmFsdWUpIGNvbGxlY3QpKSAoKGFuZCAoYm9vbGVhbj8gdmFsdWUpIHZhbHVlKSAoWkVEcHIhYWEgIiN0cnVlIiBjb2xsZWN0KSkgKChib29sZWFuPyB2YWx1ZSkgKFpFRHByIWFhICIjZmFsc2UiIGNvbGxlY3QpKSAoKG51bGw/IHZhbHVlKSAocmV2ZXJzZSBjb2xsZWN0KSkgKCN0IChaRURwciFhIChpZiAocHJvbWlzZT8gKGNkciB2YWx1ZSkpIChmb3JjZSAoY2RyIHZhbHVlKSkgKGNkciB2YWx1ZSkpIChjb25zIChaRURwciFhIChpZiAocHJvbWlzZT8gKGNhciB2YWx1ZSkpIChmb3JjZSAoY2FyIHZhbHVlKSkgKGNhciB2YWx1ZSkpIChxdW90ZSAoKSkpIGNvbGxlY3QpKSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRHByIWFhIHN0cmluZyBjb2xsZWN0KSAoY29uZCAoKG51bGw/IGNvbGxlY3QpIHN0cmluZykgKCN0IChyZXZlcnNlIChjb25zIHN0cmluZyAoY29ucyAiLiIgY29sbGVjdCkpKSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRHByIWIgb3V0cHV0LXN0cmluZyB2YWx1ZSkgKGNvbmQgKCN0IChiZWdpbiAoY2xvc2Utb3V0cHV0LXBvcnQgb3V0cHV0LXN0cmluZykgdmFsdWUpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEcHIgdmFsdWUpIChjb25kICgjdCAoWkVEcHIhIHZhbHVlIChvcGVuLW91dHB1dC1zdHJpbmcpKSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRHByb2dyYW1pemUgcHJvZ3JhbSBhcml0eS1oYXNoKSAoY29uZCAoI3QgKGNvbnMgKHF1b3RlIGJlZ2luKSAoWkVEbWFwLXdpdGggWkVEZnVuY3Rpb25pemUgcHJvZ3JhbSBhcml0eS1oYXNoKSkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURwdXNoIG9iamVjdCBzdGFjaykgKGNvbmQgKCN0IChjb25zIG9iamVjdCBzdGFjaykpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURyZCEgZnVuY3Rpb24gbGlzdCkgKGNvbmQgKChudWxsPyAoaWYgKHByb21pc2U/IChjZHIgbGlzdCkpIChmb3JjZSAoY2RyIGxpc3QpKSAoY2RyIGxpc3QpKSkgKGlmIChwcm9taXNlPyAoY2FyIGxpc3QpKSAoZm9yY2UgKGNhciBsaXN0KSkgKGNhciBsaXN0KSkpICgjdCAoWkVEcmQhIGZ1bmN0aW9uIChjb25zIChmdW5jdGlvbiAoaWYgKHByb21pc2U/IChjYXIgKGlmIChwcm9taXNlPyAoY2RyIGxpc3QpKSAoZm9yY2UgKGNkciBsaXN0KSkgKGNkciBsaXN0KSkpKSAoZm9yY2UgKGNhciAoaWYgKHByb21pc2U/IChjZHIgbGlzdCkpIChmb3JjZSAoY2RyIGxpc3QpKSAoY2RyIGxpc3QpKSkpIChjYXIgKGlmIChwcm9taXNlPyAoY2RyIGxpc3QpKSAoZm9yY2UgKGNkciBsaXN0KSkgKGNkciBsaXN0KSkpKSAoaWYgKHByb21pc2U/IChjYXIgbGlzdCkpIChmb3JjZSAoY2FyIGxpc3QpKSAoY2FyIGxpc3QpKSkgKGlmIChwcm9taXNlPyAoY2RyIChpZiAocHJvbWlzZT8gKGNkciBsaXN0KSkgKGZvcmNlIChjZHIgbGlzdCkpIChjZHIgbGlzdCkpKSkgKGZvcmNlIChjZHIgKGlmIChwcm9taXNlPyAoY2RyIGxpc3QpKSAoZm9yY2UgKGNkciBsaXN0KSkgKGNkciBsaXN0KSkpKSAoY2RyIChpZiAocHJvbWlzZT8gKGNkciBsaXN0KSkgKGZvcmNlIChjZHIgbGlzdCkpIChjZHIgbGlzdCkpKSkpKSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRHJkIGZpbmFsIGZ1bmN0aW9uIGxpc3QpIChjb25kICgjdCAoWkVEcmQhIGZ1bmN0aW9uIChjb25zIGZpbmFsIChyZXZlcnNlIGxpc3QpKSkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURyZWFkLWFsbCEgY29sbGVjdCkgKGNvbmQgKCN0IChaRURyZWFkLWFsbCFhIChyZWFkLWNoYXIpIGNvbGxlY3QpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEcmVhZC1hbGwhYSBjaGFyYWN0ZXIgY29sbGVjdCkgKGNvbmQgKChlb2Ytb2JqZWN0PyBjaGFyYWN0ZXIpIGNvbGxlY3QpICgjdCAoWkVEcmVhZC1hbGwhIChjb25zIGNoYXJhY3RlciBjb2xsZWN0KSkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURyZWFkLWFsbCkgKGNvbmQgKCN0IChyZXZlcnNlIChaRURyZWFkLWFsbCEgKHF1b3RlICgpKSkpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEcmVhZC1zZW50ZW5jZSFhIHNlbnRlbmNlIGNvbGxlY3QpIChjb25kICgobnVsbD8gc2VudGVuY2UpIGNvbGxlY3QpICgoZXF2PyAjXHNwYWNlIChjYXIgc2VudGVuY2UpKSAoWkVEcmVhZC1zZW50ZW5jZSFhIChjZHIgc2VudGVuY2UpIGNvbGxlY3QpKSAoKGVxdj8gI1woIChjYXIgc2VudGVuY2UpKSAoWkVEcmVhZC1zZW50ZW5jZSFhYSBzZW50ZW5jZSAoWkVEZ2F0aGVyLXZlcmIgKGNkciBzZW50ZW5jZSkpIGNvbGxlY3QpKSAoI3QgKFpFRHJlYWQtc2VudGVuY2UhYWIgc2VudGVuY2UgKFpFRGdhdGhlci1ub3VuIHNlbnRlbmNlKSBjb2xsZWN0KSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRHJlYWQtc2VudGVuY2UhYWEgc2VudGVuY2UgZ2F0aGVyLXZlcmIgY29sbGVjdCkgKGNvbmQgKCN0IChaRURyZWFkLXNlbnRlbmNlIWEgKFpFRHRhaWxzICgrIDIgKGxlbmd0aCBnYXRoZXItdmVyYikpIHNlbnRlbmNlKSAoY29ucyAoWkVEdmVyYiBnYXRoZXItdmVyYikgY29sbGVjdCkpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEcmVhZC1zZW50ZW5jZSFhYiBzZW50ZW5jZSBnYXRoZXItbm91biBjb2xsZWN0KSAoY29uZCAoI3QgKFpFRHJlYWQtc2VudGVuY2UhYSAoWkVEdGFpbHMgKGxlbmd0aCBnYXRoZXItbm91bikgc2VudGVuY2UpIChjb25zIChaRURub3VuIGdhdGhlci1ub3VuKSBjb2xsZWN0KSkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURyZWFkLXNlbnRlbmNlIWIgbGlzdCBvdXRwdXQtc3RyaW5nKSAoY29uZCAoI3QgKGJlZ2luIChkaXNwbGF5IGxpc3Qgb3V0cHV0LXN0cmluZykgKFpFRHJlYWQtc2VudGVuY2UhYmEgb3V0cHV0LXN0cmluZyAoZ2V0LW91dHB1dC1zdHJpbmcgb3V0cHV0LXN0cmluZykpKSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRHJlYWQtc2VudGVuY2UhYmEgb3V0cHV0LXN0cmluZyBnZXQtb3V0cHV0LXN0cmluZykgKGNvbmQgKCN0IChiZWdpbiAoY2xvc2Utb3V0cHV0LXBvcnQgb3V0cHV0LXN0cmluZykgKFpFRHJlYWQtc2VudGVuY2UhYmFhIChvcGVuLWlucHV0LXN0cmluZyBnZXQtb3V0cHV0LXN0cmluZykpKSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRHJlYWQtc2VudGVuY2UhYmFhIGlucHV0LXN0cmluZykgKGNvbmQgKCN0IChaRURyZWFkLXNlbnRlbmNlIWJhYWEgaW5wdXQtc3RyaW5nIChyZWFkIGlucHV0LXN0cmluZykpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEcmVhZC1zZW50ZW5jZSFiYWFhIGlucHV0LXN0cmluZyBhbnN3ZXIpIChjb25kICgjdCAoYmVnaW4gKGNsb3NlLWlucHV0LXBvcnQgaW5wdXQtc3RyaW5nKSBhbnN3ZXIpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEcmVhZC1zZW50ZW5jZSBzZW50ZW5jZSkgKGNvbmQgKCN0IChaRURyZWFkLXNlbnRlbmNlIWIgKHJldmVyc2UgKFpFRHJlYWQtc2VudGVuY2UhYSBzZW50ZW5jZSAocXVvdGUgKCkpKSkgKG9wZW4tb3V0cHV0LXN0cmluZykpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEcmVhZC1zZW50ZW5jZXMgc2VudGVuY2VzKSAoY29uZCAoI3QgKG1hcCBaRURyZWFkLXNlbnRlbmNlIHNlbnRlbmNlcykpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURyZWFkeS1jbGF1c2UgY2xhdXNlKSAoY29uZCAoI3QgKGNvbnMgKGNhYWFyIGNsYXVzZSkgKGNvbnMgKGNkYXIgY2xhdXNlKSAoY2RyIGNsYXVzZSkpKSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRHJlYWR5LXByb2dyYW0gcHJvZ3JhbSkgKGNvbmQgKCN0IChtYXAgWkVEcmVhZHktY2xhdXNlIHByb2dyYW0pKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEcmVwbGFjZS10cmFpbGluZy13aGl0ZS1zcGFjZSEgcHJvZ3JhbSkgKGNvbmQgKChudWxsPyBwcm9ncmFtKSAocXVvdGUgKCkpKSAoKG9yIChlcXY/IChjYXIgcHJvZ3JhbSkgI1xzcGFjZSkgKGVxdj8gKGNhciBwcm9ncmFtKSAjXGh0KSAoZXF2PyAoY2FyIHByb2dyYW0pICNcY3IpIChlcXY/IChjYXIgcHJvZ3JhbSkgI1xuZXdsaW5lKSkgKFpFRHJlcGxhY2UtdHJhaWxpbmctd2hpdGUtc3BhY2UhIChjZHIgcHJvZ3JhbSkpKSAoI3QgKGNvbnMgI1xuZXdsaW5lIHByb2dyYW0pKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEcmVwbGFjZS10cmFpbGluZy13aGl0ZS1zcGFjZSBwcm9ncmFtKSAoY29uZCAoI3QgKHJldmVyc2UgKFpFRHJlcGxhY2UtdHJhaWxpbmctd2hpdGUtc3BhY2UhIChyZXZlcnNlIHByb2dyYW0pKSkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURyZXZlcnNlIFpFRGxpc3QpIChjb25kICgjdCAocmV2ZXJzZSBaRURsaXN0KSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRHNjaGVtZWZ5ISBleHByZXNzaW9uIGFyaXR5LWhhc2ggc3RhY2spIChjb25kICgobnVsbD8gZXhwcmVzc2lvbikgKFpFRHRvcCBzdGFjaykpICgoWkVEYXBwbGljYXRpb24/IGV4cHJlc3Npb24pIChaRURzY2hlbWVmeSFhIGV4cHJlc3Npb24gYXJpdHktaGFzaCBzdGFjayAoWkVEZnVuY3Rpb24gZXhwcmVzc2lvbikpKSAoI3QgKFpFRHNjaGVtZWZ5ISAoY2RyIGV4cHJlc3Npb24pIGFyaXR5LWhhc2ggKFpFRHB1c2ggKGNhciBleHByZXNzaW9uKSBzdGFjaykpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEc2NoZW1lZnkhYSBleHByZXNzaW9uIGFyaXR5LWhhc2ggc3RhY2sgZnVuY3Rpb24pIChjb25kICgjdCAoWkVEc2NoZW1lZnkhYWEgZXhwcmVzc2lvbiBhcml0eS1oYXNoIHN0YWNrIGZ1bmN0aW9uIChaRURhcml0eSBhcml0eS1oYXNoIGZ1bmN0aW9uKSkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURzY2hlbWVmeSFhYSBleHByZXNzaW9uIGFyaXR5LWhhc2ggc3RhY2sgZnVuY3Rpb24gYXJpdHkpIChjb25kICgoWkVEZ2F0aGVyLWNvdW50PyBmdW5jdGlvbikgKFpFRHNjaGVtZWZ5ISAoY2RyIGV4cHJlc3Npb24pIGFyaXR5LWhhc2ggKFpFRHB1c2ggKFpFRGZpcnN0IGFyaXR5IHN0YWNrKSAoWkVEdGFpbHMgYXJpdHkgc3RhY2spKSkpICgoZXE/IGZ1bmN0aW9uIChxdW90ZSBaRUQxKSkgKFpFRHNjaGVtZWZ5ISAoY2RyIGV4cHJlc3Npb24pIGFyaXR5LWhhc2ggKFpFRHB1c2ggKGxpc3QgKHF1b3RlIGlmKSAobGlzdCAocXVvdGUgcHJvbWlzZT8pIChjb25zIChxdW90ZSBjYXIpIChaRURmaXJzdCBhcml0eSBzdGFjaykpKSAobGlzdCAocXVvdGUgZm9yY2UpIChjb25zIChxdW90ZSBjYXIpIChaRURmaXJzdCBhcml0eSBzdGFjaykpKSAoY29ucyAocXVvdGUgY2FyKSAoWkVEZmlyc3QgYXJpdHkgc3RhY2spKSkgKFpFRHRhaWxzIGFyaXR5IHN0YWNrKSkpKSAoKGVxPyBmdW5jdGlvbiAocXVvdGUgWkVEISkpIChaRURzY2hlbWVmeSEgKGNkciBleHByZXNzaW9uKSBhcml0eS1oYXNoIChaRURwdXNoIChsaXN0IChxdW90ZSBpZikgKGxpc3QgKHF1b3RlIHByb21pc2U/KSAoY29ucyAocXVvdGUgY2RyKSAoWkVEZmlyc3QgYXJpdHkgc3RhY2spKSkgKGxpc3QgKHF1b3RlIGZvcmNlKSAoY29ucyAocXVvdGUgY2RyKSAoWkVEZmlyc3QgYXJpdHkgc3RhY2spKSkgKGNvbnMgKHF1b3RlIGNkcikgKFpFRGZpcnN0IGFyaXR5IHN0YWNrKSkpIChaRUR0YWlscyBhcml0eSBzdGFjaykpKSkgKChlcT8gZnVuY3Rpb24gKHF1b3RlIFpFRGMpKSAoWkVEc2NoZW1lZnkhIChjZHIgZXhwcmVzc2lvbikgYXJpdHktaGFzaCAoWkVEcHVzaCAoY29ucyAocXVvdGUgY29ucykgKG1hcCBaRURkZWxheS13cmFwIChaRURmaXJzdCBhcml0eSBzdGFjaykpKSAoWkVEdGFpbHMgYXJpdHkgc3RhY2spKSkpICgjdCAoWkVEc2NoZW1lZnkhIChjZHIgZXhwcmVzc2lvbikgYXJpdHktaGFzaCAoWkVEcHVzaCAoY29ucyBmdW5jdGlvbiAoWkVEZmlyc3QgYXJpdHkgc3RhY2spKSAoWkVEdGFpbHMgYXJpdHkgc3RhY2spKSkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRURzY2hlbWVmeSBleHByZXNzaW9uIGFyaXR5LWhhc2gpIChjb25kICgjdCAobGlzdCAoWkVEc2NoZW1lZnkhIChyZXZlcnNlIGV4cHJlc3Npb24pIGFyaXR5LWhhc2ggKFpFRHN0YWNrKSkpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEc2VudGVuY2UtbGVzcz8gc2VudGVuY2UxIHNlbnRlbmNlMikgKGNvbmQgKChudWxsPyBzZW50ZW5jZTIpICNmKSAoKG51bGw/IHNlbnRlbmNlMSkgI3QpICgoWkVEY2hhcmFjdGVyLWxlc3M/IChjYXIgc2VudGVuY2UxKSAoY2FyIHNlbnRlbmNlMikpICN0KSAoKFpFRGNoYXJhY3Rlci1sZXNzPyAoY2FyIHNlbnRlbmNlMikgKGNhciBzZW50ZW5jZTEpKSAjZikgKCN0IChaRURzZW50ZW5jZS1sZXNzPyAoY2RyIHNlbnRlbmNlMSkgKGNkciBzZW50ZW5jZTIpKSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRHNlbnRlbmNlcyEgcHJvZ3JhbSBjb2xsZWN0MSBjb2xsZWN0MikgKGNvbmQgKChudWxsPyBwcm9ncmFtKSBjb2xsZWN0MikgKChlcXY/ICNcbmV3bGluZSAoY2FyIHByb2dyYW0pKSAoWkVEc2VudGVuY2VzISAoY2RyIHByb2dyYW0pIChxdW90ZSAoKSkgKGNvbnMgKHJldmVyc2UgY29sbGVjdDEpIGNvbGxlY3QyKSkpICgjdCAoWkVEc2VudGVuY2VzISAoY2RyIHByb2dyYW0pIChjb25zIChjYXIgcHJvZ3JhbSkgY29sbGVjdDEpIGNvbGxlY3QyKSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRHNlbnRlbmNlcyBwcm9ncmFtKSAoY29uZCAoI3QgKHJldmVyc2UgKFpFRHNlbnRlbmNlcyEgcHJvZ3JhbSAocXVvdGUgKCkpIChxdW90ZSAoKSkpKSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRHNvcnQhYSBqdW1ibGUpIChjb25kICgjdCAobWFwIGxpc3QganVtYmxlKSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRHNvcnQhYiBjb21wYXJhdG9yIGp1bWJsZSkgKGNvbmQgKChudWxsPyBqdW1ibGUpIChxdW90ZSAoKSkpICgobnVsbD8gKGNkciBqdW1ibGUpKSBqdW1ibGUpICgjdCAoWkVEc29ydCFiIGNvbXBhcmF0b3IgKGNvbnMgKFpFRG1lcmdlIGNvbXBhcmF0b3IgKGNhciBqdW1ibGUpIChjYWRyIGp1bWJsZSkpIChaRURzb3J0IWIgY29tcGFyYXRvciAoY2RkciBqdW1ibGUpKSkpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEc29ydCBjb21wYXJhdG9yIGp1bWJsZSkgKGNvbmQgKCN0IChjYXIgKFpFRHNvcnQhYiBjb21wYXJhdG9yIChaRURzb3J0IWEganVtYmxlKSkpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEc3BhY2UtbmV3bGluZSEgcHJvZ3JhbSBjb2xsZWN0KSAoY29uZCAoKG9yIChudWxsPyBwcm9ncmFtKSAobnVsbD8gKGNkciBwcm9ncmFtKSkpIChhcHBlbmQgcHJvZ3JhbSBjb2xsZWN0KSkgKChhbmQgKGVxdj8gI1xzcGFjZSAoY2FyIHByb2dyYW0pKSAoZXF2PyAjXG5ld2xpbmUgKGNhZHIgcHJvZ3JhbSkpKSAoWkVEc3BhY2UtbmV3bGluZSEgKGNkciBwcm9ncmFtKSBjb2xsZWN0KSkgKCN0IChaRURzcGFjZS1uZXdsaW5lISAoY2RyIHByb2dyYW0pIChjb25zIChjYXIgcHJvZ3JhbSkgY29sbGVjdCkpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEc3BhY2UtbmV3bGluZSBwcm9ncmFtKSAoY29uZCAoI3QgKHJldmVyc2UgKFpFRHNwYWNlLW5ld2xpbmUhIHByb2dyYW0gKHF1b3RlICgpKSkpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEc3RhY2spIChjb25kICgjdCAocXVvdGUgKCkpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEdGFiLXJlcGxhY2UhIHByb2dyYW0gY29sbGVjdCkgKGNvbmQgKChudWxsPyBwcm9ncmFtKSBjb2xsZWN0KSAoKGVxdj8gI1xodCAoY2FyIHByb2dyYW0pKSAoWkVEdGFiLXJlcGxhY2UhIChjZHIgcHJvZ3JhbSkgKGNvbnMgI1xzcGFjZSBjb2xsZWN0KSkpICgjdCAoWkVEdGFiLXJlcGxhY2UhIChjZHIgcHJvZ3JhbSkgKGNvbnMgKGNhciBwcm9ncmFtKSBjb2xsZWN0KSkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRUR0YWItcmVwbGFjZSBwcm9ncmFtKSAoY29uZCAoI3QgKHJldmVyc2UgKFpFRHRhYi1yZXBsYWNlISBwcm9ncmFtIChxdW90ZSAoKSkpKSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRHRhaWxzIG51bWJlciBsaXN0KSAoY29uZCAoKG51bGw/IGxpc3QpIChxdW90ZSAoKSkpICgoemVybz8gbnVtYmVyKSBsaXN0KSAoKD4gbnVtYmVyIDApIChaRUR0YWlscyAoLSBudW1iZXIgMSkgKGNkciBsaXN0KSkpIChlbHNlIGVycikpKSAoZGVmaW5lIChaRUR0b3Agc3RhY2spIChjb25kICgjdCAoY2FyIHN0YWNrKSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRHRydWU/IG5vdW4tbGlzdCkgKGNvbmQgKCN0IChlcXVhbD8gbm91bi1saXN0IChsaXN0ICNcIyAjXHQgI1xyICNcdSAjXGUpKSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRHZlcmIgdmVyYi1saXN0KSAoY29uZCAoKFpFRGxpdGVyYWw/IHZlcmItbGlzdCkgKGxpc3QgKFpFRG1ha2UtbGl0ZXJhbCB2ZXJiLWxpc3QpKSkgKCN0IChsaXN0IChaRURtYWtlLVpFRCB2ZXJiLWxpc3QpKSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRHdyaXRlLWFsbCBwcm9ncmFtKSAoY29uZCAoKG51bGw/IHByb2dyYW0pIChxdW90ZSBlcnIpKSAoI3QgKFpFRHdyaXRlLWFsbCAoYmVnaW4gKHdyaXRlLWNoYXIgKGNhciBwcm9ncmFtKSkgKGNkciBwcm9ncmFtKSkpKSAoZWxzZSBlcnIpKSkgKGRlZmluZSAoWkVEemVkLT5zY2hlbWUhIHZhbHVlIGNvbGxlY3QpIChjb25kICgobnVsbD8gdmFsdWUpIChyZXZlcnNlIGNvbGxlY3QpKSAoI3QgKFpFRHplZC0+c2NoZW1lISAoaWYgKHByb21pc2U/IChjZHIgdmFsdWUpKSAoZm9yY2UgKGNkciB2YWx1ZSkpIChjZHIgdmFsdWUpKSAoY29ucyAoWkVEemVkLT5zY2hlbWUgKGlmIChwcm9taXNlPyAoY2FyIHZhbHVlKSkgKGZvcmNlIChjYXIgdmFsdWUpKSAoY2FyIHZhbHVlKSkpIGNvbGxlY3QpKSkgKGVsc2UgZXJyKSkpIChkZWZpbmUgKFpFRHplZC0+c2NoZW1lIHZhbHVlKSAoY29uZCAoKG5vdCAocGFpcj8gdmFsdWUpKSB2YWx1ZSkgKCN0IChaRUR6ZWQtPnNjaGVtZSEgdmFsdWUgKHF1b3RlICgpKSkpIChlbHNlIGVycikpKSkKKFpFRGNvbXApO2Rvbid0IGZvcmdldA==
stdin
KCopIG51bWJlcjEgbnVtYmVyMgpjb21tZW50OgojdHJ1ZQooMDAzKSAmcXVvdDsqJnF1b3Q7IG51bWJlcjEgbnVtYmVyMgoKKCspIG51bWJlcjEgbnVtYmVyMgpjb21tZW50OgojdHJ1ZQooMDAzKSAmcXVvdDsrJnF1b3Q7IG51bWJlcjEgbnVtYmVyMgoKKC0pIG51bWJlcjEgbnVtYmVyMgpjb21tZW50OgojdHJ1ZQooMDAzKSAmcXVvdDstJnF1b3Q7IG51bWJlcjEgbnVtYmUyCgooLykgbnVtYmVyMSBudW1iZXIyCmNvbW1lbnQ6CiN0cnVlCigwMDMpICZxdW90Oy8mcXVvdDsgbnVtYmVyMSBudW1iZXIyCgooPSkgJnF1b3Q7dmFsdWUxJnF1b3Q7ICZxdW90O3ZhbHVlMiZxdW90Owpjb21tZW50OgojdHJ1ZQooMDAzKSAmcXVvdDtlcXY/JnF1b3Q7ICZxdW90O3ZhbHVlMSZxdW90OyAmcXVvdDt2YWx1ZTImcXVvdDsKCihhZGQtYmV0d2VlbiEpICZxdW90O2l0ZW0mcXVvdDsgJnF1b3Q7bGlzdCZxdW90OyAmcXVvdDtjb2xsZWN0JnF1b3Q7CmNvbW1lbnQ6CigwMDIpICZxdW90O251bGw/JnF1b3Q7ICZxdW90O2xpc3QmcXVvdDsKJnF1b3Q7Y29sbGVjdCZxdW90OwoKKGFkZC1iZXR3ZWVuISkgJnF1b3Q7aXRlbSZxdW90OyAmcXVvdDtsaXN0JnF1b3Q7ICZxdW90O2NvbGxlY3QmcXVvdDsKY29tbWVudDoKKDAwMikgJnF1b3Q7bnVsbD8mcXVvdDsgKDAwMikgJnF1b3Q7Y2RyJnF1b3Q7ICZxdW90O2xpc3QmcXVvdDsKKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAoMDAyKSAmcXVvdDtjYXImcXVvdDsgJnF1b3Q7bGlzdCZxdW90OyAmcXVvdDtjb2xsZWN0JnF1b3Q7CgooYWRkLWJldHdlZW4hKSAmcXVvdDtpdGVtJnF1b3Q7ICZxdW90O2xpc3QmcXVvdDsgJnF1b3Q7Y29sbGVjdCZxdW90Owpjb21tZW50OgojdHJ1ZQooYWRkLWJldHdlZW4hKSAmcXVvdDtpdGVtJnF1b3Q7IAogICAgICAgICAgICAgICAoMDAyKSAmcXVvdDtjZHImcXVvdDsgJnF1b3Q7bGlzdCZxdW90OyAKICAgICAgICAgICAgICAgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDtpdGVtJnF1b3Q7ICgwMDMpICZxdW90O2NvbnMmcXVvdDsgKDAwMikgJnF1b3Q7Y2FyJnF1b3Q7ICZxdW90O2xpc3QmcXVvdDsgJnF1b3Q7Y29sbGVjdCZxdW90OwoKKGFkZC1iZXR3ZWVuKSAmcXVvdDtpdGVtJnF1b3Q7ICZxdW90O2xpc3QmcXVvdDsKY29tbWVudDoKI3RydWUKKDAwMikgJnF1b3Q7cmV2ZXJzZSZxdW90OyAoYWRkLWJldHdlZW4hKSAmcXVvdDtpdGVtJnF1b3Q7ICZxdW90O2xpc3QmcXVvdDsgbmlsCgooYWRkLWJldHdlZW4tcmEpICZxdW90O2xpc3QmcXVvdDsgJnF1b3Q7aXRlbSZxdW90Owpjb21tZW50OgojdHJ1ZQooMDAyKSAmcXVvdDtyZXZlcnNlJnF1b3Q7IChhZGQtYmV0d2VlbiEpICZxdW90O2l0ZW0mcXVvdDsgJnF1b3Q7bGlzdCZxdW90OyBuaWwKCihhbHBoYSkKY29tbWVudDoKI3RydWUKKHdyaXRlLWFsbCkgKHJkKSBuaWwgCiAgICAgICAgICAgICAgICAgJnF1b3Q7YXBwZW5kJnF1b3Q7IAogICAgICAgICAgICAgICAgIChyZCkgbmlsICZxdW90O2FwcGVuZCZxdW90OyAobmV3bGluZXMpIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYnktZm91cikgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24tc29ydCkgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbnRlbmNlcykgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsZWFkaW5nLW5ld2xpbmUpIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNwYWNlLW5ld2xpbmUpIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0YWItcmVwbGFjZSkgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXdsaW5lLXNwYWNlLXRhYi1yZXBlYXRzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ld2xpbmUtc3BhY2UpIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWx0ZXIpIG5vdC1yZXR1cm4/IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZXBsYWNlLXRyYWlsaW5nLXdoaXRlLXNwYWNlKSAocmVhZC1hbGwpCgooYXBwbGljYXRpb24/KSAmcXVvdDtleHByZXNzaW9uJnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCigwMDQpICZxdW90O2FuZCZxdW90OyAoMDAyKSAmcXVvdDtub3QmcXVvdDsgKDAwMikgJnF1b3Q7bnVsbD8mcXVvdDsgJnF1b3Q7ZXhwcmVzc2lvbiZxdW90OyAKICAgICAgICAgICAgKDAwMikgJnF1b3Q7cGFpcj8mcXVvdDsgKDAwMikgJnF1b3Q7Y2FyJnF1b3Q7ICZxdW90O2V4cHJlc3Npb24mcXVvdDsgCiAgICAgICAgICAgICgwMDIpICZxdW90O251bGw/JnF1b3Q7ICgwMDIpICZxdW90O2NkYXImcXVvdDsgJnF1b3Q7ZXhwcmVzc2lvbiZxdW90OwoKKGFyaXR5KSAmcXVvdDthcml0eS1oYXNoJnF1b3Q7ICZxdW90O2Z1bmN0aW9uJnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCigwMDIpICZxdW90O2NkciZxdW90OyAoMDAzKSAmcXVvdDthc3NvYyZxdW90OyAmcXVvdDtmdW5jdGlvbiZxdW90OyAmcXVvdDthcml0eS1oYXNoJnF1b3Q7CgooYXJpdHktaGFzaCEpICZxdW90O2NsYXVzZSZxdW90Owpjb21tZW50OgojdHJ1ZQooMDAzKSAmcXVvdDtjb25zJnF1b3Q7IChjbGF1c2UtbmFtZSkgJnF1b3Q7Y2xhdXNlJnF1b3Q7IChjbGF1c2UtYXJpdHkpICZxdW90O2NsYXVzZSZxdW90OwoKKGFyaXR5LWhhc2gpICZxdW90O3Byb2dyYW0mcXVvdDsKY29tbWVudDoKI3RydWUKKDAwMykgJnF1b3Q7YXBwZW5kJnF1b3Q7ICgwMDMpICZxdW90O21hcCZxdW90OyBhcml0eS1oYXNoISAmcXVvdDtwcm9ncmFtJnF1b3Q7ICgwMDMpICZxdW90O2FwcGVuZCZxdW90OyAoMDA5KSAmcXVvdDtsaXN0JnF1b3Q7ICgwMDMpICZxdW90O2NvbnMmcXVvdDsgJnF1b3Q7J1pFRDEmcXVvdDsgMSAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICZxdW90OydaRUQhJnF1b3Q7IDEgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnWkVEMDAxJnF1b3Q7IDEgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnb3ImcXVvdDsgMiAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICZxdW90OydhbmQmcXVvdDsgMiAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICZxdW90OydiZWdpbiZxdW90OyAyICgwMDMpICZxdW90O2NvbnMmcXVvdDsgJnF1b3Q7J1pFRGMmcXVvdDsgMiAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICZxdW90OydxdW90ZSZxdW90OyAxICgwOTkpICZxdW90O2xpc3QmcXVvdDsgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnWkVEMDAyJnF1b3Q7IDIgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnWkVEMDAzJnF1b3Q7IDMgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnWkVEMDA0JnF1b3Q7IDQgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnWkVEMDA1JnF1b3Q7IDUgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnWkVEMDA2JnF1b3Q7IDYgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnWkVEMDA3JnF1b3Q7IDcgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnWkVEMDA4JnF1b3Q7IDggKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnWkVEMDA5JnF1b3Q7IDkgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnWkVEMDEwJnF1b3Q7IDEwICgwMDMpICZxdW90O2NvbnMmcXVvdDsgJnF1b3Q7J1pFRDAxMSZxdW90OyAxMSAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICZxdW90OydaRUQwMTImcXVvdDsgMTIgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnWkVEMDEzJnF1b3Q7IDEzICgwMDMpICZxdW90O2NvbnMmcXVvdDsgJnF1b3Q7J1pFRDAxNCZxdW90OyAxNCAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICZxdW90OydaRUQwMTUmcXVvdDsgMTUgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnWkVEMDE2JnF1b3Q7IDE2ICgwMDMpICZxdW90O2NvbnMmcXVvdDsgJnF1b3Q7J1pFRDAxNyZxdW90OyAxNyAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICZxdW90OydaRUQwMTgmcXVvdDsgMTggKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnWkVEMDE5JnF1b3Q7IDE5ICgwMDMpICZxdW90O2NvbnMmcXVvdDsgJnF1b3Q7J1pFRDAyMCZxdW90OyAyMCAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICZxdW90OydaRUQwMjEmcXVvdDsgMjEgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnWkVEMDIyJnF1b3Q7IDIyICgwMDMpICZxdW90O2NvbnMmcXVvdDsgJnF1b3Q7J1pFRDAyMyZxdW90OyAyMyAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICZxdW90OydaRUQwMjQmcXVvdDsgMjQgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnWkVEMDI1JnF1b3Q7IDI1ICgwMDMpICZxdW90O2NvbnMmcXVvdDsgJnF1b3Q7J1pFRDAyNiZxdW90OyAyNiAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICZxdW90OydaRUQwMjcmcXVvdDsgMjcgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnWkVEMDI4JnF1b3Q7IDI4ICgwMDMpICZxdW90O2NvbnMmcXVvdDsgJnF1b3Q7J1pFRDAyOSZxdW90OyAyOSAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICZxdW90OydaRUQwMzAmcXVvdDsgMzAgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnWkVEMDMxJnF1b3Q7IDMxICgwMDMpICZxdW90O2NvbnMmcXVvdDsgJnF1b3Q7J1pFRDAzMiZxdW90OyAzMiAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICZxdW90OydaRUQwMzMmcXVvdDsgMzMgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnWkVEMDM0JnF1b3Q7IDM0ICgwMDMpICZxdW90O2NvbnMmcXVvdDsgJnF1b3Q7J1pFRDAzNSZxdW90OyAzNSAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICZxdW90OydaRUQwMzYmcXVvdDsgMzYgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnWkVEMDM3JnF1b3Q7IDM3ICgwMDMpICZxdW90O2NvbnMmcXVvdDsgJnF1b3Q7J1pFRDAzOCZxdW90OyAzOCAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICZxdW90OydaRUQwMzkmcXVvdDsgMzkgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnWkVEMDQwJnF1b3Q7IDQwICgwMDMpICZxdW90O2NvbnMmcXVvdDsgJnF1b3Q7J1pFRDA0MSZxdW90OyA0MSAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICZxdW90OydaRUQwNDImcXVvdDsgNDIgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnWkVEMDQzJnF1b3Q7IDQzICgwMDMpICZxdW90O2NvbnMmcXVvdDsgJnF1b3Q7J1pFRDA0NCZxdW90OyA0NCAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICZxdW90OydaRUQwNDUmcXVvdDsgNDUgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnWkVEMDQ2JnF1b3Q7IDQ2ICgwMDMpICZxdW90O2NvbnMmcXVvdDsgJnF1b3Q7J1pFRDA0NyZxdW90OyA0NyAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICZxdW90OydaRUQwNDgmcXVvdDsgNDggKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnWkVEMDQ5JnF1b3Q7IDQ5ICgwMDMpICZxdW90O2NvbnMmcXVvdDsgJnF1b3Q7J1pFRDA1MCZxdW90OyA1MCAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICZxdW90OydaRUQwNTEmcXVvdDsgNTEgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnWkVEMDUyJnF1b3Q7IDUyICgwMDMpICZxdW90O2NvbnMmcXVvdDsgJnF1b3Q7J1pFRDA1MyZxdW90OyA1MyAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICZxdW90OydaRUQwNTQmcXVvdDsgNTQgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnWkVEMDU1JnF1b3Q7IDU1ICgwMDMpICZxdW90O2NvbnMmcXVvdDsgJnF1b3Q7J1pFRDA1NiZxdW90OyA1NiAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICZxdW90OydaRUQwNTcmcXVvdDsgNTcgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnWkVEMDU4JnF1b3Q7IDU4ICgwMDMpICZxdW90O2NvbnMmcXVvdDsgJnF1b3Q7J1pFRDA1OSZxdW90OyA1OSAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICZxdW90OydaRUQwNjAmcXVvdDsgNjAgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnWkVEMDYxJnF1b3Q7IDYxICgwMDMpICZxdW90O2NvbnMmcXVvdDsgJnF1b3Q7J1pFRDA2MiZxdW90OyA2MiAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICZxdW90OydaRUQwNjMmcXVvdDsgNjMgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnWkVEMDY0JnF1b3Q7IDY0ICgwMDMpICZxdW90O2NvbnMmcXVvdDsgJnF1b3Q7J1pFRDA2NSZxdW90OyA2NSAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICZxdW90OydaRUQwNjYmcXVvdDsgNjYgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnWkVEMDY3JnF1b3Q7IDY3ICgwMDMpICZxdW90O2NvbnMmcXVvdDsgJnF1b3Q7J1pFRDA2OCZxdW90OyA2OCAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICZxdW90OydaRUQwNjkmcXVvdDsgNjkgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnWkVEMDcwJnF1b3Q7IDcwICgwMDMpICZxdW90O2NvbnMmcXVvdDsgJnF1b3Q7J1pFRDA3MSZxdW90OyA3MSAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICZxdW90OydaRUQwNzImcXVvdDsgNzIgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnWkVEMDczJnF1b3Q7IDczICgwMDMpICZxdW90O2NvbnMmcXVvdDsgJnF1b3Q7J1pFRDA3NCZxdW90OyA3NCAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICZxdW90OydaRUQwNzUmcXVvdDsgNzUgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnWkVEMDc2JnF1b3Q7IDc2ICgwMDMpICZxdW90O2NvbnMmcXVvdDsgJnF1b3Q7J1pFRDA3NyZxdW90OyA3NyAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICZxdW90OydaRUQwNzgmcXVvdDsgNzggKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnWkVEMDc5JnF1b3Q7IDc5ICgwMDMpICZxdW90O2NvbnMmcXVvdDsgJnF1b3Q7J1pFRDA4MCZxdW90OyA4MCAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICZxdW90OydaRUQwODEmcXVvdDsgODEgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnWkVEMDgyJnF1b3Q7IDgyICgwMDMpICZxdW90O2NvbnMmcXVvdDsgJnF1b3Q7J1pFRDA4MyZxdW90OyA4MyAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICZxdW90OydaRUQwODQmcXVvdDsgODQgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnWkVEMDg1JnF1b3Q7IDg1ICgwMDMpICZxdW90O2NvbnMmcXVvdDsgJnF1b3Q7J1pFRDA4NiZxdW90OyA4NiAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICZxdW90OydaRUQwODcmcXVvdDsgODcgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnWkVEMDg4JnF1b3Q7IDg4ICgwMDMpICZxdW90O2NvbnMmcXVvdDsgJnF1b3Q7J1pFRDA4OSZxdW90OyA4OSAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICZxdW90OydaRUQwOTAmcXVvdDsgOTAgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnWkVEMDkxJnF1b3Q7IDkxICgwMDMpICZxdW90O2NvbnMmcXVvdDsgJnF1b3Q7J1pFRDA5MiZxdW90OyA5MiAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICZxdW90OydaRUQwOTMmcXVvdDsgOTMgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnWkVEMDk0JnF1b3Q7IDk0ICgwMDMpICZxdW90O2NvbnMmcXVvdDsgJnF1b3Q7J1pFRDA5NSZxdW90OyA5NSAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICZxdW90OydaRUQwOTYmcXVvdDsgOTYgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnWkVEMDk3JnF1b3Q7IDk3ICgwMDMpICZxdW90O2NvbnMmcXVvdDsgJnF1b3Q7J1pFRDA5OCZxdW90OyA5OCAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICZxdW90OydaRUQwOTkmcXVvdDsgOTkKCihieS1mb3VyISkgJnF1b3Q7c2VudGVuY2VzJnF1b3Q7ICZxdW90O2NvbGxlY3QmcXVvdDsKY29tbWVudDoKKDAwMikgJnF1b3Q7bnVsbD8mcXVvdDsgJnF1b3Q7c2VudGVuY2VzJnF1b3Q7CiZxdW90O2NvbGxlY3QmcXVvdDsKCihieS1mb3VyISkgJnF1b3Q7c2VudGVuY2VzJnF1b3Q7ICZxdW90O2NvbGxlY3QmcXVvdDsKY29tbWVudDoKI3RydWUKKGJ5LWZvdXIhKSAoMDAyKSAmcXVvdDtjZGRkZHImcXVvdDsgJnF1b3Q7c2VudGVuY2VzJnF1b3Q7IAogICAgICAgICAgICgwMDMpICZxdW90O2NvbnMmcXVvdDsgKDAwNSkgJnF1b3Q7bGlzdCZxdW90OyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAwMikgJnF1b3Q7Y2FyJnF1b3Q7ICZxdW90O3NlbnRlbmNlcyZxdW90OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMDAyKSAmcXVvdDtjYWRyJnF1b3Q7ICZxdW90O3NlbnRlbmNlcyZxdW90OyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAwMikgJnF1b3Q7Y2FkZHImcXVvdDsgJnF1b3Q7c2VudGVuY2VzJnF1b3Q7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMDAyKSAmcXVvdDtjYWRkZHImcXVvdDsgJnF1b3Q7c2VudGVuY2VzJnF1b3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICZxdW90O2NvbGxlY3QmcXVvdDsKCihieS1mb3VyKSAmcXVvdDtzZW50ZW5jZXMmcXVvdDsKY29tbWVudDoKI3RydWUKKDAwMikgJnF1b3Q7cmV2ZXJzZSZxdW90OyAoYnktZm91ciEpICZxdW90O3NlbnRlbmNlcyZxdW90OyBuaWwKCihieS10aHJlZSEpICZxdW90O3NlbnRlbmNlcyZxdW90OyAmcXVvdDtjb2xsZWN0JnF1b3Q7CmNvbW1lbnQ6CigwMDIpICZxdW90O251bGw/JnF1b3Q7ICZxdW90O3NlbnRlbmNlcyZxdW90OwomcXVvdDtjb2xsZWN0JnF1b3Q7CgooYnktdGhyZWUhKSAmcXVvdDtzZW50ZW5jZXMmcXVvdDsgJnF1b3Q7Y29sbGVjdCZxdW90Owpjb21tZW50OgojdHJ1ZQooYnktdGhyZWUhKSAoMDAyKSAmcXVvdDtjZGRkciZxdW90OyAmcXVvdDtzZW50ZW5jZXMmcXVvdDsgCiAgICAgICAgICAgICgwMDMpICZxdW90O2NvbnMmcXVvdDsgKDAwNCkgJnF1b3Q7bGlzdCZxdW90OyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwMDIpICZxdW90O2NhciZxdW90OyAmcXVvdDtzZW50ZW5jZXMmcXVvdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwMDIpICZxdW90O2NhZHImcXVvdDsgJnF1b3Q7c2VudGVuY2VzJnF1b3Q7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAwMikgJnF1b3Q7Y2FkZHImcXVvdDsgJnF1b3Q7c2VudGVuY2VzJnF1b3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICAmcXVvdDtjb2xsZWN0JnF1b3Q7CgooYnktdGhyZWUpICZxdW90O3NlbnRlbmNlcyZxdW90Owpjb21tZW50OgojdHJ1ZQooMDAyKSAmcXVvdDtyZXZlcnNlJnF1b3Q7IChieS10aHJlZSEpICZxdW90O3NlbnRlbmNlcyZxdW90OyBuaWwKCihjaGFyYWN0ZXItbGVzcz8pICZxdW90O2NoYXJhY3RlcjEmcXVvdDsgJnF1b3Q7Y2hhcmFjdGVyMiZxdW90Owpjb21tZW50OgojdHJ1ZQooMDAzKSAmcXVvdDsmbHQ7JnF1b3Q7ICgwMDIpICZxdW90O2NoYXItJmd0O2ludGVnZXImcXVvdDsgJnF1b3Q7Y2hhcmFjdGVyMSZxdW90OyAoMDAyKSAmcXVvdDtjaGFyLSZndDtpbnRlZ2VyJnF1b3Q7ICZxdW90O2NoYXJhY3RlcjImcXVvdDsKCihjbGF1c2UtYXJndW1lbnRzKSAmcXVvdDtjbGF1c2UmcXVvdDsKY29tbWVudDoKI3RydWUKKDAwMikgJnF1b3Q7Y2FkciZxdW90OyAmcXVvdDtjbGF1c2UmcXVvdDsKCihjbGF1c2UtYXJndW1lbnRzLWFncmVlKSAmcXVvdDtjbGF1c2UxJnF1b3Q7ICZxdW90O2NsYXVzZTImcXVvdDsKY29tbWVudDoKKDAwMykgJnF1b3Q7ZXF1YWw/JnF1b3Q7IChjbGF1c2UtYXJndW1lbnRzKSAmcXVvdDtjbGF1c2UxJnF1b3Q7IChjbGF1c2UtYXJndW1lbnRzKSAmcXVvdDtjbGF1c2UyJnF1b3Q7CihjbGF1c2UtYXJndW1lbnRzKSAmcXVvdDtjbGF1c2UxJnF1b3Q7CgooY2xhdXNlLWFyaXR5KSAmcXVvdDtjbGF1c2UmcXVvdDsKY29tbWVudDoKI3RydWUKKDAwMikgJnF1b3Q7bGVuZ3RoJnF1b3Q7IChjbGF1c2UtYXJndW1lbnRzKSAmcXVvdDtjbGF1c2UmcXVvdDsKCihjbGF1c2UtYm9keSkgJnF1b3Q7Y2xhdXNlJnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCigwMDIpICZxdW90O2NkZHImcXVvdDsgJnF1b3Q7Y2xhdXNlJnF1b3Q7CgooY2xhdXNlLWxlc3M/KSAmcXVvdDtjbGF1c2UxJnF1b3Q7ICZxdW90O2NsYXVzZTImcXVvdDsKY29tbWVudDoKI3RydWUKKHNlbnRlbmNlLWxlc3M/KSAoMDAyKSAmcXVvdDtjYXImcXVvdDsgJnF1b3Q7Y2xhdXNlMSZxdW90OyAoMDAyKSAmcXVvdDtjYXImcXVvdDsgJnF1b3Q7Y2xhdXNlMiZxdW90OwoKKGNsYXVzZS1uYW1lKSAmcXVvdDtjbGF1c2UmcXVvdDsKY29tbWVudDoKI3RydWUKKDAwMikgJnF1b3Q7Y2FyJnF1b3Q7ICZxdW90O2NsYXVzZSZxdW90OwoKKGNsYXVzZS1uYW1lLWFncmVlKSAmcXVvdDtjbGF1c2UxJnF1b3Q7ICZxdW90O2NsYXVzZTImcXVvdDsKY29tbWVudDoKKDAwMykgJnF1b3Q7ZXE/JnF1b3Q7IChjbGF1c2UtbmFtZSkgJnF1b3Q7Y2xhdXNlMSZxdW90OyAoY2xhdXNlLW5hbWUpICZxdW90O2NsYXVzZTImcXVvdDsKKGNsYXVzZS1uYW1lKSAmcXVvdDtjbGF1c2UxJnF1b3Q7CgooY29tYmluZS1hbGwhKSAmcXVvdDtwcm9ncmFtJnF1b3Q7ICZxdW90O2NvbGxlY3QmcXVvdDsKY29tbWVudDoKKDAwMikgJnF1b3Q7bnVsbD8mcXVvdDsgJnF1b3Q7cHJvZ3JhbSZxdW90OwomcXVvdDtjb2xsZWN0JnF1b3Q7CgooY29tYmluZS1hbGwhKSAmcXVvdDtwcm9ncmFtJnF1b3Q7ICZxdW90O2NvbGxlY3QmcXVvdDsKY29tbWVudDoKKDAwMikgJnF1b3Q7bnVsbD8mcXVvdDsgKDAwMikgJnF1b3Q7Y2RyJnF1b3Q7ICZxdW90O3Byb2dyYW0mcXVvdDsKKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAoMDAyKSAmcXVvdDtjYXImcXVvdDsgJnF1b3Q7cHJvZ3JhbSZxdW90OyAmcXVvdDtjb2xsZWN0JnF1b3Q7CgooY29tYmluZS1hbGwhKSAmcXVvdDtwcm9ncmFtJnF1b3Q7ICZxdW90O2NvbGxlY3QmcXVvdDsKY29tbWVudDoKKDAwMykgJnF1b3Q7ZXE/JnF1b3Q7IChjbGF1c2UtbmFtZSkgKDAwMikgJnF1b3Q7Y2FyJnF1b3Q7ICZxdW90O3Byb2dyYW0mcXVvdDsgKGNsYXVzZS1uYW1lKSAoMDAyKSAmcXVvdDtjYWRyJnF1b3Q7ICZxdW90O3Byb2dyYW0mcXVvdDsKKGNvbWJpbmUtYWxsISkgKGNvbWJpbmUtaGVhZC1jbGF1c2VzKSAmcXVvdDtwcm9ncmFtJnF1b3Q7ICZxdW90O2NvbGxlY3QmcXVvdDsKCihjb21iaW5lLWFsbCEpICZxdW90O3Byb2dyYW0mcXVvdDsgJnF1b3Q7Y29sbGVjdCZxdW90Owpjb21tZW50OgojdHJ1ZQooY29tYmluZS1hbGwhKSAoMDAyKSAmcXVvdDtjZHImcXVvdDsgJnF1b3Q7cHJvZ3JhbSZxdW90OyAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICgwMDIpICZxdW90O2NhciZxdW90OyAmcXVvdDtwcm9ncmFtJnF1b3Q7ICZxdW90O2NvbGxlY3QmcXVvdDsKCihjb21iaW5lLWFsbCkgJnF1b3Q7cHJvZ3JhbSZxdW90Owpjb21tZW50OgojdHJ1ZQooMDAyKSAmcXVvdDtyZXZlcnNlJnF1b3Q7IChjb21iaW5lLWFsbCEpICZxdW90O3Byb2dyYW0mcXVvdDsgbmlsCgooY29tYmluZS1jbGF1c2VzKSAmcXVvdDtjbGF1c2UxJnF1b3Q7ICZxdW90O2NsYXVzZTImcXVvdDsKY29tbWVudDoKI3RydWUKKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAoY2xhdXNlLW5hbWUtYWdyZWUpICZxdW90O2NsYXVzZTEmcXVvdDsgJnF1b3Q7Y2xhdXNlMiZxdW90OyAKICAgICAgICAgICAgICgwMDMpICZxdW90O2NvbnMmcXVvdDsgKGNsYXVzZS1hcmd1bWVudHMtYWdyZWUpICZxdW90O2NsYXVzZTEmcXVvdDsgJnF1b3Q7Y2xhdXNlMiZxdW90OyAKICAgICAgICAgICAgICAgICAgICAgICAgICAoMDAzKSAmcXVvdDthcHBlbmQmcXVvdDsgKGNsYXVzZS1ib2R5KSAmcXVvdDtjbGF1c2UxJnF1b3Q7IChjbGF1c2UtYm9keSkgJnF1b3Q7Y2xhdXNlMiZxdW90OwoKKGNvbWJpbmUtaGVhZC1jbGF1c2VzKSAmcXVvdDtwcm9ncmFtJnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCigwMDMpICZxdW90O2NvbnMmcXVvdDsgKGNvbWJpbmUtY2xhdXNlcykgKDAwMikgJnF1b3Q7Y2FyJnF1b3Q7ICZxdW90O3Byb2dyYW0mcXVvdDsgKDAwMikgJnF1b3Q7Y2FkciZxdW90OyAmcXVvdDtwcm9ncmFtJnF1b3Q7IAogICAgICAgICAgICAgKDAwMikgJnF1b3Q7Y2RkciZxdW90OyAmcXVvdDtwcm9ncmFtJnF1b3Q7CgooY29tYmluZS1wcm9ncmFtLWNsYXVzZXMpICZxdW90O3Byb2dyYW0mcXVvdDsKY29tbWVudDoKI3RydWUKKGNvbWJpbmUtYWxsKSAocmVhZHktcHJvZ3JhbSkgJnF1b3Q7cHJvZ3JhbSZxdW90OwoKKGNvbXAhKQpjb21tZW50OgojdHJ1ZQooY29tcCFhKSAoY29tYmluZS1wcm9ncmFtLWNsYXVzZXMpCiAgICAgICAgICAoYnktdGhyZWUpCiAgICAgICAgICAgKHJlYWQtc2VudGVuY2VzKSAKICAgICAgICAgICAgKGRpc2NhcmQtY29tbWVudHMpIAogICAgICAgICAgICAgKGZ1bmN0aW9uLXNvcnQpIAogICAgICAgICAgICAgIChzZW50ZW5jZXMpIAogICAgICAgICAgICAgICAobGVhZGluZy1uZXdsaW5lKSAKICAgICAgICAgICAgICAgIChzcGFjZS1uZXdsaW5lKQogICAgICAgICAgICAgICAgICh0YWItcmVwbGFjZSkKICAgICAgICAgICAgICAgICAgKG5ld2xpbmUtc3BhY2UtdGFiLXJlcGVhdHMpIAogICAgICAgICAgICAgICAgICAgKG5ld2xpbmUtc3BhY2UpIAogICAgICAgICAgICAgICAgICAgIChmaWx0ZXIpIG5vdC1yZXR1cm4/IChyZXBsYWNlLXRyYWlsaW5nLXdoaXRlLXNwYWNlKSAocmVhZC1hbGwpCgooY29tcCFhKSAmcXVvdDtjb21iaW5lZCZxdW90Owpjb21tZW50OgojdHJ1ZQooY29tcCFhYSkgKHByb2dyYW1pemUpICZxdW90O2NvbWJpbmVkJnF1b3Q7IChhcml0eS1oYXNoKSAmcXVvdDtjb21iaW5lZCZxdW90OwoKKGNvbXAhYWEpICZxdW90O3Byb2dyYW1pemVkJnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCigwMDIpICZxdW90O3dyaXRlJnF1b3Q7ICZxdW90O3Byb2dyYW1pemVkJnF1b3Q7CgooY29tcCkKY29tbWVudDoKI3RydWUKKGNvbXAhKQoKKGNvbmRlZnkhKSAmcXVvdDtleHByZXNzaW9ucyZxdW90OyAmcXVvdDtjb2xsZWN0JnF1b3Q7CmNvbW1lbnQ6CigwMDIpICZxdW90O251bGw/JnF1b3Q7ICZxdW90O2V4cHJlc3Npb25zJnF1b3Q7CiZxdW90O2NvbGxlY3QmcXVvdDsKCihjb25kZWZ5ISkgJnF1b3Q7ZXhwcmVzc2lvbnMmcXVvdDsgJnF1b3Q7Y29sbGVjdCZxdW90Owpjb21tZW50OgojdHJ1ZQooY29uZGVmeSEpICgwMDIpICZxdW90O2NkZHImcXVvdDsgJnF1b3Q7ZXhwcmVzc2lvbnMmcXVvdDsKICAgICAgICAgICAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICgwMDMpICZxdW90O2FwcGVuZCZxdW90OyAoMDAyKSAmcXVvdDtjYXImcXVvdDsgJnF1b3Q7ZXhwcmVzc2lvbnMmcXVvdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAwMikgJnF1b3Q7Y2FkciZxdW90OyAmcXVvdDtleHByZXNzaW9ucyZxdW90OwogICAgICAgICAgICAgICAgICAgICAgICAmcXVvdDtjb2xsZWN0JnF1b3Q7CgooY29uZGVmeSkgJnF1b3Q7ZXhwcmVzc2lvbnMmcXVvdDsKY29tbWVudDoKI3RydWUKKDAwMikgJnF1b3Q7cmV2ZXJzZSZxdW90OyAoY29uZGVmeSEpICZxdW90O2V4cHJlc3Npb25zJnF1b3Q7IG5pbAoKKGNvbnMpIHZhbHVlMSB2YWx1ZTIKY29tbWVudDoKI3RydWUKKDAwMykgJnF1b3Q7Y29ucyZxdW90OyB2YWx1ZTEgdmFsdWUyCgooY291bnQpIG51bWJlcgpjb21tZW50OgojdHJ1ZQooYykgbnVtYmVyIChjb3VudCkgKCspIG51bWJlciAxCgooY291bnQtYnkpIHN0ZXAgbnVtYmVyCmNvbW1lbnQ6CiN0cnVlCihjKSBudW1iZXIgKGNvdW50LWJ5KSBzdGVwICgrKSBudW1iZXIgc3RlcAoKKGRlbGF5LXdyYXApICZxdW90O2V4cHJlc3Npb24mcXVvdDsKY29tbWVudDoKI3RydWUKKDAwMykgJnF1b3Q7bGlzdCZxdW90OyAmcXVvdDsnZGVsYXkmcXVvdDsgJnF1b3Q7ZXhwcmVzc2lvbiZxdW90OwoKKGRpZ2l0PykgJnF1b3Q7Y2hhcmFjdGVyJnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCigwMTEpICZxdW90O29yJnF1b3Q7ICgwMDMpICZxdW90O2Vxdj8mcXVvdDsgIzAgJnF1b3Q7Y2hhcmFjdGVyJnF1b3Q7ICgwMDMpICZxdW90O2Vxdj8mcXVvdDsgIzEgJnF1b3Q7Y2hhcmFjdGVyJnF1b3Q7ICgwMDMpICZxdW90O2Vxdj8mcXVvdDsgIzIgJnF1b3Q7Y2hhcmFjdGVyJnF1b3Q7ICgwMDMpICZxdW90O2Vxdj8mcXVvdDsgIzMgJnF1b3Q7Y2hhcmFjdGVyJnF1b3Q7ICgwMDMpICZxdW90O2Vxdj8mcXVvdDsgIzQgJnF1b3Q7Y2hhcmFjdGVyJnF1b3Q7ICgwMDMpICZxdW90O2Vxdj8mcXVvdDsgIzUgJnF1b3Q7Y2hhcmFjdGVyJnF1b3Q7ICgwMDMpICZxdW90O2Vxdj8mcXVvdDsgIzYgJnF1b3Q7Y2hhcmFjdGVyJnF1b3Q7ICgwMDMpICZxdW90O2Vxdj8mcXVvdDsgIzcgJnF1b3Q7Y2hhcmFjdGVyJnF1b3Q7ICgwMDMpICZxdW90O2Vxdj8mcXVvdDsgIzggJnF1b3Q7Y2hhcmFjdGVyJnF1b3Q7ICgwMDMpICZxdW90O2Vxdj8mcXVvdDsgIzkgJnF1b3Q7Y2hhcmFjdGVyJnF1b3Q7CgooZGlzY2FyZC1jb21tZW50cyEpICZxdW90O3Byb2dyYW0mcXVvdDsgJnF1b3Q7Y29sbGVjdCZxdW90Owpjb21tZW50OgooMDAyKSAmcXVvdDtudWxsPyZxdW90OyAmcXVvdDtwcm9ncmFtJnF1b3Q7CiZxdW90O2NvbGxlY3QmcXVvdDsKCihkaXNjYXJkLWNvbW1lbnRzISkgJnF1b3Q7cHJvZ3JhbSZxdW90OyAmcXVvdDtjb2xsZWN0JnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCihkaXNjYXJkLWNvbW1lbnRzISkgKDAwMikgJnF1b3Q7Y2RkZGRyJnF1b3Q7ICZxdW90O3Byb2dyYW0mcXVvdDsgCiAgICAgICAgICAgICAgICAgICAgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAoMDAyKSAmcXVvdDtjYWRkZHImcXVvdDsgJnF1b3Q7cHJvZ3JhbSZxdW90OyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAoMDAyKSAmcXVvdDtjYWRkciZxdW90OyAmcXVvdDtwcm9ncmFtJnF1b3Q7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAoMDAyKSAmcXVvdDtjYXImcXVvdDsgJnF1b3Q7cHJvZ3JhbSZxdW90OyAmcXVvdDtjb2xsZWN0JnF1b3Q7CgooZGlzY2FyZC1jb21tZW50cykgJnF1b3Q7cHJvZ3JhbSZxdW90Owpjb21tZW50OgojdHJ1ZQooMDAyKSAmcXVvdDtyZXZlcnNlJnF1b3Q7IChkaXNjYXJkLWNvbW1lbnRzISkgJnF1b3Q7cHJvZ3JhbSZxdW90OyBuaWwKCihkciEpICZxdW90O3ZhbHVlJnF1b3Q7CmNvbW1lbnQ6CigwMDIpICZxdW90O3BhaXI/JnF1b3Q7ICZxdW90O3ZhbHVlJnF1b3Q7CihtcCkgZHIhIChmaXJzdCkgNjQgJnF1b3Q7dmFsdWUmcXVvdDsKCihkciEpICZxdW90O3ZhbHVlJnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCiZxdW90O3ZhbHVlJnF1b3Q7CgooZHIpICZxdW90O3ZhbHVlJnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCigwMDUpICZxdW90O2JlZ2luJnF1b3Q7ICgwMDIpICZxdW90O2Rpc3BsYXkmcXVvdDsgKHByKSAoZHIhKSAmcXVvdDt2YWx1ZSZxdW90OyAoMDAxKSAmcXVvdDtuZXdsaW5lJnF1b3Q7ICgwMDEpICZxdW90O25ld2xpbmUmcXVvdDsgJnF1b3Q7dmFsdWUmcXVvdDsKCihkcnIpICZxdW90O3ZhbHVlJnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCigwMDUpICZxdW90O2JlZ2luJnF1b3Q7ICgwMDIpICZxdW90O2Rpc3BsYXkmcXVvdDsgKHByKSAmcXVvdDt2YWx1ZSZxdW90OyAoMDAxKSAmcXVvdDtuZXdsaW5lJnF1b3Q7ICgwMDEpICZxdW90O25ld2xpbmUmcXVvdDsgJnF1b3Q7dmFsdWUmcXVvdDsKCihmYWxzZT8pICZxdW90O25vdW4tbGlzdCZxdW90Owpjb21tZW50OgojdHJ1ZQooMDAzKSAmcXVvdDtlcXVhbD8mcXVvdDsgJnF1b3Q7bm91bi1saXN0JnF1b3Q7ICgwMDcpICZxdW90O2xpc3QmcXVvdDsgIyMgI2YgI2EgI2wgI3MgI2UKCihmaSkgJnF1b3Q7ZnVuY3Rpb24mcXVvdDsgJnF1b3Q7bGlzdCZxdW90Owpjb21tZW50OgooMDAyKSAmcXVvdDtudWxsPyZxdW90OyAmcXVvdDtsaXN0JnF1b3Q7Cm5pbAoKKGZpKSAmcXVvdDtmdW5jdGlvbiZxdW90OyAmcXVvdDtsaXN0JnF1b3Q7CmNvbW1lbnQ6CigwMDIpICZxdW90O2Z1bmN0aW9uJnF1b3Q7ICgxKSAmcXVvdDtsaXN0JnF1b3Q7CihjKSAoMSkgJnF1b3Q7bGlzdCZxdW90OyAoZmkpICZxdW90O2Z1bmN0aW9uJnF1b3Q7ICghKSAmcXVvdDtsaXN0JnF1b3Q7CgooZmkpICZxdW90O2Z1bmN0aW9uJnF1b3Q7ICZxdW90O2xpc3QmcXVvdDsKY29tbWVudDoKI3RydWUKKGZpKSAmcXVvdDtmdW5jdGlvbiZxdW90OyAoISkgJnF1b3Q7bGlzdCZxdW90OwoKKGZpbHRlciEpICZxdW90O3ByZWRpY2F0ZSZxdW90OyAmcXVvdDtsaXN0JnF1b3Q7ICZxdW90O2NvbGxlY3QmcXVvdDsKY29tbWVudDoKKDAwMikgJnF1b3Q7bnVsbD8mcXVvdDsgJnF1b3Q7bGlzdCZxdW90OwomcXVvdDtjb2xsZWN0JnF1b3Q7CgooZmlsdGVyISkgJnF1b3Q7cHJlZGljYXRlJnF1b3Q7ICZxdW90O2xpc3QmcXVvdDsgJnF1b3Q7Y29sbGVjdCZxdW90Owpjb21tZW50OgooMDAyKSAmcXVvdDtwcmVkaWNhdGUmcXVvdDsgKDAwMikgJnF1b3Q7Y2FyJnF1b3Q7ICZxdW90O2xpc3QmcXVvdDsKKGZpbHRlciEpICZxdW90O3ByZWRpY2F0ZSZxdW90OyAoMDAyKSAmcXVvdDtjZHImcXVvdDsgJnF1b3Q7bGlzdCZxdW90OyAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICgwMDIpICZxdW90O2NhciZxdW90OyAmcXVvdDtsaXN0JnF1b3Q7ICZxdW90O2NvbGxlY3QmcXVvdDsKCihmaWx0ZXIhKSAmcXVvdDtwcmVkaWNhdGUmcXVvdDsgJnF1b3Q7bGlzdCZxdW90OyAmcXVvdDtjb2xsZWN0JnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCihmaWx0ZXIhKSAmcXVvdDtwcmVkaWNhdGUmcXVvdDsgKDAwMikgJnF1b3Q7Y2RyJnF1b3Q7ICZxdW90O2xpc3QmcXVvdDsgJnF1b3Q7Y29sbGVjdCZxdW90OwoKKGZpbHRlcikgJnF1b3Q7cHJlZGljYXRlJnF1b3Q7ICZxdW90O2xpc3QmcXVvdDsKY29tbWVudDoKI3RydWUKKDAwMikgJnF1b3Q7cmV2ZXJzZSZxdW90OyAoZmlsdGVyISkgJnF1b3Q7cHJlZGljYXRlJnF1b3Q7ICZxdW90O2xpc3QmcXVvdDsgbmlsCgooZmlyc3QhKSAmcXVvdDtpbnRlZ2VyJnF1b3Q7ICZxdW90O2xpc3QmcXVvdDsgJnF1b3Q7Y29sbGVjdCZxdW90Owpjb21tZW50OgooMDAzKSAmcXVvdDtvciZxdW90OyAoMDAyKSAmcXVvdDt6ZXJvPyZxdW90OyAmcXVvdDtpbnRlZ2VyJnF1b3Q7ICgwMDIpICZxdW90O251bGw/JnF1b3Q7ICZxdW90O2xpc3QmcXVvdDsKKDAwMikgJnF1b3Q7cmV2ZXJzZSZxdW90OyAmcXVvdDtjb2xsZWN0JnF1b3Q7CgooZmlyc3QhKSAmcXVvdDtpbnRlZ2VyJnF1b3Q7ICZxdW90O2xpc3QmcXVvdDsgJnF1b3Q7Y29sbGVjdCZxdW90Owpjb21tZW50OgooMDAyKSAmcXVvdDtub3QmcXVvdDsgKDAwMikgJnF1b3Q7cGFpcj8mcXVvdDsgJnF1b3Q7bGlzdCZxdW90OwooMDAyKSAmcXVvdDtyZXZlcnNlJnF1b3Q7ICgwMDMpICZxdW90O2NvbnMmcXVvdDsgJnF1b3Q7bGlzdCZxdW90OyAmcXVvdDtjb2xsZWN0JnF1b3Q7CgooZmlyc3QhKSAmcXVvdDtpbnRlZ2VyJnF1b3Q7ICZxdW90O2xpc3QmcXVvdDsgJnF1b3Q7Y29sbGVjdCZxdW90Owpjb21tZW50OgooMDAzKSAmcXVvdDsmZ3Q7JnF1b3Q7ICZxdW90O2ludGVnZXImcXVvdDsgMAooZmlyc3QhKSAoMDAzKSAmcXVvdDstJnF1b3Q7ICZxdW90O2ludGVnZXImcXVvdDsgMSAoISkgJnF1b3Q7bGlzdCZxdW90OyAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICgxKSAmcXVvdDtsaXN0JnF1b3Q7ICZxdW90O2NvbGxlY3QmcXVvdDsKCihmaXJzdCkgJnF1b3Q7aW50ZWdlciZxdW90OyAmcXVvdDtsaXN0JnF1b3Q7CmNvbW1lbnQ6CigwMDIpICZxdW90O25vdCZxdW90OyAoMDAyKSAmcXVvdDtwYWlyPyZxdW90OyAmcXVvdDtsaXN0JnF1b3Q7CiZxdW90O2xpc3QmcXVvdDsKCihmaXJzdCkgJnF1b3Q7aW50ZWdlciZxdW90OyAmcXVvdDtsaXN0JnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCihmaXJzdCEpICZxdW90O2ludGVnZXImcXVvdDsgJnF1b3Q7bGlzdCZxdW90OyBuaWwKCihmbGF0dGVuISkgbGlzdCBzdWItbGlzdC1mb3VuZD8gY29sbGVjdApjb21tZW50OgooYW5kKSAobnVsbD8pIGxpc3QgKG5vdCkgc3ViLWxpc3QtZm91bmQ/CihyZXZlcnNlKSBjb2xsZWN0CgooZmxhdHRlbiEpIGxpc3Qgc3ViLWxpc3QtZm91bmQ/IGNvbGxlY3QKY29tbWVudDoKKG51bGw/KSBsaXN0CihmbGF0dGVuISkgKHJldmVyc2UpIGNvbGxlY3QgI2ZhbHNlIG5pbAoKKGZsYXR0ZW4hKSBsaXN0IHN1Yi1saXN0LWZvdW5kPyBjb2xsZWN0CmNvbW1lbnQ6Cihub3QpIChwYWlyPykgbGlzdAooZmxhdHRlbiEpIG5pbCBzdWItbGlzdC1mb3VuZD8gKGNvbnMpIGxpc3QgY29sbGVjdAoKKGZsYXR0ZW4hKSBsaXN0IHN1Yi1saXN0LWZvdW5kPyBjb2xsZWN0CmNvbW1lbnQ6CihwYWlyPykgKDEpIGxpc3QKKGZsYXR0ZW4hKSAoISkgbGlzdCAjdHJ1ZSAoY29ucykgKCEpICgxKSBsaXN0IChjb25zKSAoMSkgKDEpIGxpc3QgY29sbGVjdAoKKGZsYXR0ZW4hKSBsaXN0IHN1Yi1saXN0LWZvdW5kPyBjb2xsZWN0CmNvbW1lbnQ6CihudWxsPykgKDEpIGxpc3QKKGZsYXR0ZW4hKSAoISkgbGlzdCBzdWItbGlzdC1mb3VuZD8gY29sbGVjdAoKKGZsYXR0ZW4hKSBsaXN0IHN1Yi1saXN0LWZvdW5kPyBjb2xsZWN0CmNvbW1lbnQ6CiN0cnVlCihmbGF0dGVuISkgKCEpIGxpc3Qgc3ViLWxpc3QtZm91bmQ/IChjb25zKSAoMSkgbGlzdCBjb2xsZWN0CgooZmxhdHRlbikgbGlzdApjb21tZW50OgojdHJ1ZQooZmxhdHRlbiEpIGxpc3QgI2ZhbHNlIG5pbAoKKGZvci1lYWNoKSBlZmZlY3QgbGlzdApjb21tZW50OgojdHJ1ZQooMDAzKSAmcXVvdDtmb3ItZWFjaCZxdW90OyBlZmZlY3QgbGlzdAoKKGZ1bmN0aW9uKSAmcXVvdDtleHByZXNzaW9uJnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCigwMDIpICZxdW90O2NhYXImcXVvdDsgJnF1b3Q7ZXhwcmVzc2lvbiZxdW90OwoKKGZ1bmN0aW9uLXNvcnQpICZxdW90O3NlbnRlbmNlcyZxdW90Owpjb21tZW50OgojdHJ1ZQoocmQpIG5pbCAmcXVvdDthcHBlbmQmcXVvdDsgKHNvcnQpIGNsYXVzZS1sZXNzPyAoYnktZm91cikgJnF1b3Q7c2VudGVuY2VzJnF1b3Q7CgooZnVuY3Rpb25pemUpICZxdW90O2NsYXVzZSZxdW90OyAmcXVvdDthcml0eS1oYXNoJnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCigwMDQpICZxdW90O2xpc3QmcXVvdDsgCiAgICAgICZxdW90OydkZWZpbmUmcXVvdDsgCiAgICAgICgwMDMpICZxdW90O2NvbnMmcXVvdDsgKGNsYXVzZS1uYW1lKSAmcXVvdDtjbGF1c2UmcXVvdDsgKGNsYXVzZS1hcmd1bWVudHMpICZxdW90O2NsYXVzZSZxdW90OyAKICAgICAgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnY29uZCZxdW90OyAoMDAzKSAmcXVvdDthcHBlbmQmcXVvdDsgKGNvbmRlZnkpIChtYXAtd2l0aCkgc2NoZW1lZnkgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGF1c2UtYm9keSkgJnF1b3Q7Y2xhdXNlJnF1b3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZxdW90O2FyaXR5LWhhc2gmcXVvdDsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwMDIpICZxdW90O2xpc3QmcXVvdDsgKDAwMykgJnF1b3Q7bGlzdCZxdW90OyAmcXVvdDsnZWxzZSZxdW90OyBlcnIKCihnYXRoZXItY291bnQ/ISkgJnF1b3Q7Y2FuZGlkYXRlJnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCigwMDgpICZxdW90O2FuZCZxdW90OyAKICAgICAgKDAwMykgJnF1b3Q7PSZxdW90OyA2ICgwMDIpICZxdW90O2xlbmd0aCZxdW90OyAmcXVvdDtjYW5kaWRhdGUmcXVvdDsKICAgICAgKDAwMykgJnF1b3Q7ZXF2PyZxdW90OyAjWiAoMDAyKSAmcXVvdDtjYXImcXVvdDsgJnF1b3Q7Y2FuZGlkYXRlJnF1b3Q7CiAgICAgICgwMDMpICZxdW90O2Vxdj8mcXVvdDsgI0UgKDAwMikgJnF1b3Q7Y2FkciZxdW90OyAmcXVvdDtjYW5kaWRhdGUmcXVvdDsKICAgICAgKDAwMykgJnF1b3Q7ZXF2PyZxdW90OyAjRCAoMDAyKSAmcXVvdDtjYWRkciZxdW90OyAmcXVvdDtjYW5kaWRhdGUmcXVvdDsKICAgICAgKDAwMykgJnF1b3Q7ZXF2PyZxdW90OyAjMCAoMDAyKSAmcXVvdDtjYWRkZHImcXVvdDsgJnF1b3Q7Y2FuZGlkYXRlJnF1b3Q7CiAgICAgIChkaWdpdD8pICgwMDIpICZxdW90O2NhciZxdW90OyAoMDAyKSAmcXVvdDtjZGRkZHImcXVvdDsgJnF1b3Q7Y2FuZGlkYXRlJnF1b3Q7CiAgICAgIChkaWdpdD8pICgwMDIpICZxdW90O2NhZHImcXVvdDsgKDAwMikgJnF1b3Q7Y2RkZGRyJnF1b3Q7ICZxdW90O2NhbmRpZGF0ZSZxdW90OwoKKGdhdGhlci1jb3VudD8pICZxdW90O3N5bWJvbCZxdW90Owpjb21tZW50OgojdHJ1ZQooZ2F0aGVyLWNvdW50PyEpICgwMDIpICZxdW90O3N0cmluZy0mZ3Q7bGlzdCZxdW90OyAoMDAyKSAmcXVvdDtzeW1ib2wtJmd0O3N0cmluZyZxdW90OyAmcXVvdDtzeW1ib2wmcXVvdDsKCihnYXRoZXItbm91bikgJnF1b3Q7c2VudGVuY2UmcXVvdDsKY29tbWVudDoKKDAwMikgJnF1b3Q7bnVsbD8mcXVvdDsgJnF1b3Q7c2VudGVuY2UmcXVvdDsKbmlsCgooZ2F0aGVyLW5vdW4pICZxdW90O3NlbnRlbmNlJnF1b3Q7CmNvbW1lbnQ6CigwMDMpICZxdW90O2Vxdj8mcXVvdDsgI3NwYWNlICgwMDIpICZxdW90O2NhciZxdW90OyAmcXVvdDtzZW50ZW5jZSZxdW90OwpuaWwKCihnYXRoZXItbm91bikgJnF1b3Q7c2VudGVuY2UmcXVvdDsKY29tbWVudDoKI3RydWUKKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAoMDAyKSAmcXVvdDtjYXImcXVvdDsgJnF1b3Q7c2VudGVuY2UmcXVvdDsgKGdhdGhlci1ub3VuKSAoMDAyKSAmcXVvdDtjZHImcXVvdDsgJnF1b3Q7c2VudGVuY2UmcXVvdDsKCihnYXRoZXItdmVyYikgJnF1b3Q7c2VudGVuY2UmcXVvdDsKY29tbWVudDoKKDAwMykgJnF1b3Q7ZXF2PyZxdW90OyAjKSAoMDAyKSAmcXVvdDtjYXImcXVvdDsgJnF1b3Q7c2VudGVuY2UmcXVvdDsKbmlsCgooZ2F0aGVyLXZlcmIpICZxdW90O3NlbnRlbmNlJnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCigwMDMpICZxdW90O2NvbnMmcXVvdDsgKDAwMikgJnF1b3Q7Y2FyJnF1b3Q7ICZxdW90O3NlbnRlbmNlJnF1b3Q7IChnYXRoZXItdmVyYikgKDAwMikgJnF1b3Q7Y2RyJnF1b3Q7ICZxdW90O3NlbnRlbmNlJnF1b3Q7CgooZ3IpICZxdW90O2dhcmJhZ2UmcXVvdDsgJnF1b3Q7dmFsdWUmcXVvdDsKY29tbWVudDoKI3RydWUKKDAwMykgJnF1b3Q7YmVnaW4mcXVvdDsgKGRyKSAmcXVvdDtnYXJiYWdlJnF1b3Q7ICZxdW90O3ZhbHVlJnF1b3Q7CgooZ3JyKSAmcXVvdDtnYXJiYWdlJnF1b3Q7ICZxdW90O3ZhbHVlJnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCigwMDMpICZxdW90O2JlZ2luJnF1b3Q7IChkcnIpICZxdW90O2dhcmJhZ2UmcXVvdDsgJnF1b3Q7dmFsdWUmcXVvdDsKCihsZWFkaW5nLW5ld2xpbmUpICZxdW90O3Byb2dyYW0mcXVvdDsKY29tbWVudDoKKDAwMikgJnF1b3Q7bnVsbD8mcXVvdDsgJnF1b3Q7cHJvZ3JhbSZxdW90OwpuaWwKCihsZWFkaW5nLW5ld2xpbmUpICZxdW90O3Byb2dyYW0mcXVvdDsKY29tbWVudDoKKDAwMykgJnF1b3Q7ZXF2PyZxdW90OyAjbmV3bGluZSAoMDAyKSAmcXVvdDtjYXImcXVvdDsgJnF1b3Q7cHJvZ3JhbSZxdW90OwooMDAyKSAmcXVvdDtjZHImcXVvdDsgJnF1b3Q7cHJvZ3JhbSZxdW90OwoKKGxlYWRpbmctbmV3bGluZSkgJnF1b3Q7cHJvZ3JhbSZxdW90Owpjb21tZW50OgojdHJ1ZQomcXVvdDtwcm9ncmFtJnF1b3Q7CgoobGl0ZXJhbD8pICZxdW90O2xpdGVyYWwtbGlzdCZxdW90Owpjb21tZW50OgojdHJ1ZQooMDAzKSAmcXVvdDtlcXY/JnF1b3Q7ICMmcXVvdDsgKDAwMikgJnF1b3Q7Y2FyJnF1b3Q7ICZxdW90O2xpdGVyYWwtbGlzdCZxdW90OwoKKG1ha2UtWkVEKSAmcXVvdDtaRUQtbGlzdCZxdW90Owpjb21tZW50OgooMDAzKSAmcXVvdDtlcXVhbD8mcXVvdDsgJnF1b3Q7WkVELWxpc3QmcXVvdDsgKDAwNCkgJnF1b3Q7bGlzdCZxdW90OyAjZSAjciAjcgomcXVvdDsmcXVvdDsnZXJyJnF1b3Q7JnF1b3Q7CgoobWFrZS1aRUQpICZxdW90O1pFRC1saXN0JnF1b3Q7CmNvbW1lbnQ6CigwMDMpICZxdW90O2VxdWFsPyZxdW90OyAmcXVvdDtaRUQtbGlzdCZxdW90OyAoMDA0KSAmcXVvdDtsaXN0JnF1b3Q7ICNuICNpICNsCiZxdW90OyZxdW90OycoKSZxdW90OyZxdW90OwoKKG1ha2UtWkVEKSAmcXVvdDtaRUQtbGlzdCZxdW90Owpjb21tZW50OgooMDAzKSAmcXVvdDtlcXVhbD8mcXVvdDsgJnF1b3Q7WkVELWxpc3QmcXVvdDsgKDAwNCkgJnF1b3Q7bGlzdCZxdW90OyAjYSAjbiAjZAomcXVvdDsmcXVvdDthbmQmcXVvdDsmcXVvdDsKCihtYWtlLVpFRCkgJnF1b3Q7WkVELWxpc3QmcXVvdDsKY29tbWVudDoKKDAwMykgJnF1b3Q7ZXF1YWw/JnF1b3Q7ICZxdW90O1pFRC1saXN0JnF1b3Q7ICgwMDMpICZxdW90O2xpc3QmcXVvdDsgI28gI3IKJnF1b3Q7JnF1b3Q7b3ImcXVvdDsmcXVvdDsKCihtYWtlLVpFRCkgJnF1b3Q7WkVELWxpc3QmcXVvdDsKY29tbWVudDoKKDAwMykgJnF1b3Q7ZXF1YWw/JnF1b3Q7ICZxdW90O1pFRC1saXN0JnF1b3Q7ICgwMDYpICZxdW90O2xpc3QmcXVvdDsgI3EgI3UgI28gI3QgI2UKJnF1b3Q7JnF1b3Q7cXVvdGUmcXVvdDsmcXVvdDsKCihtYWtlLVpFRCkgJnF1b3Q7WkVELWxpc3QmcXVvdDsKY29tbWVudDoKKDAwMykgJnF1b3Q7ZXF1YWw/JnF1b3Q7ICZxdW90O1pFRC1saXN0JnF1b3Q7ICgwMDMpICZxdW90O2xpc3QmcXVvdDsgI3MgI2UKJnF1b3Q7JnF1b3Q7YmVnaW4mcXVvdDsmcXVvdDsKCihtYWtlLVpFRCkgJnF1b3Q7WkVELWxpc3QmcXVvdDsKY29tbWVudDoKI3RydWUKKDAwMikgJnF1b3Q7bGlzdC0mZ3Q7c3RyaW5nJnF1b3Q7ICgwMDMpICZxdW90O2FwcGVuZCZxdW90OyAoMDA0KSAmcXVvdDtsaXN0JnF1b3Q7ICNaICNFICNEICZxdW90O1pFRC1saXN0JnF1b3Q7CgoobWFrZS1jaGFyYWN0ZXIpICZxdW90O25vdW4tbGlzdCZxdW90Owpjb21tZW50OgojdHJ1ZQooMDAyKSAmcXVvdDtsaXN0LSZndDtzdHJpbmcmcXVvdDsgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAjIyAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICNcICgwMDIpICZxdW90O2NkciZxdW90OyAmcXVvdDtub3VuLWxpc3QmcXVvdDsKCihtYWtlLWV4YWN0KSAmcXVvdDtleGFjdC1saXN0JnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCigwMDIpICZxdW90O2xpc3QtJmd0O3N0cmluZyZxdW90OyAoMDAzKSAmcXVvdDthcHBlbmQmcXVvdDsgKDAwMykgJnF1b3Q7bGlzdCZxdW90OyAjIyAjZSAmcXVvdDtleGFjdC1saXN0JnF1b3Q7CgoobWFrZS1saXRlcmFsKSAmcXVvdDtsaXRlcmFsLWxpc3QmcXVvdDsKY29tbWVudDoKI3RydWUKKDAwMikgJnF1b3Q7bGlzdC0mZ3Q7c3RyaW5nJnF1b3Q7ICgwMDIpICZxdW90O2NkciZxdW90OyAoMDAyKSAmcXVvdDtyZXZlcnNlJnF1b3Q7ICgwMDIpICZxdW90O2NkciZxdW90OyAoMDAyKSAmcXVvdDtyZXZlcnNlJnF1b3Q7ICZxdW90O2xpdGVyYWwtbGlzdCZxdW90OwoKKG1ha2UtbnVtYmVyLWNoYXJhY3RlcikgJnF1b3Q7bm91bi1saXN0JnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCigwMDIpICZxdW90O2xpc3QtJmd0O3N0cmluZyZxdW90OyAoMDA0KSAmcXVvdDtsaXN0JnF1b3Q7ICMjICNcICgwMDIpICZxdW90O2ludGVnZXItJmd0O2NoYXImcXVvdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMDAyKSAmcXVvdDtzdHJpbmctJmd0O251bWJlciZxdW90OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMDAyKSAmcXVvdDtsaXN0LSZndDtzdHJpbmcmcXVvdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwMDIpICZxdW90O2NkZHImcXVvdDsgJnF1b3Q7bm91bi1saXN0JnF1b3Q7CgoobWFwLXdpdGghKSAmcXVvdDtmdW5jdGlvbiZxdW90OyAmcXVvdDtsaXN0JnF1b3Q7ICZxdW90O2V4dHJhJnF1b3Q7ICZxdW90O2NvbGxlY3QmcXVvdDsKY29tbWVudDoKKDAwMikgJnF1b3Q7bnVsbD8mcXVvdDsgJnF1b3Q7bGlzdCZxdW90OwomcXVvdDtjb2xsZWN0JnF1b3Q7CgoobWFwLXdpdGghKSAmcXVvdDtmdW5jdGlvbiZxdW90OyAmcXVvdDtsaXN0JnF1b3Q7ICZxdW90O2V4dHJhJnF1b3Q7ICZxdW90O2NvbGxlY3QmcXVvdDsKY29tbWVudDoKI3RydWUKKG1hcC13aXRoISkgJnF1b3Q7ZnVuY3Rpb24mcXVvdDsKICAgICAgICAgICAgKDAwMikgJnF1b3Q7Y2RyJnF1b3Q7ICZxdW90O2xpc3QmcXVvdDsKICAgICAgICAgICAgJnF1b3Q7ZXh0cmEmcXVvdDsgCiAgICAgICAgICAgICgwMDMpICZxdW90O2NvbnMmcXVvdDsgKDAwMykgJnF1b3Q7ZnVuY3Rpb24mcXVvdDsgKDAwMikgJnF1b3Q7Y2FyJnF1b3Q7ICZxdW90O2xpc3QmcXVvdDsgJnF1b3Q7ZXh0cmEmcXVvdDsKICAgICAgICAgICAgICAgICAgICAgICAgICZxdW90O2NvbGxlY3QmcXVvdDsKCihtYXAtd2l0aCkgJnF1b3Q7ZnVuY3Rpb24mcXVvdDsgJnF1b3Q7bGlzdCZxdW90OyAmcXVvdDtleHRyYSZxdW90Owpjb21tZW50OgojdHJ1ZQooMDAyKSAmcXVvdDtyZXZlcnNlJnF1b3Q7IChtYXAtd2l0aCEpICZxdW90O2Z1bmN0aW9uJnF1b3Q7ICZxdW90O2xpc3QmcXVvdDsgJnF1b3Q7ZXh0cmEmcXVvdDsgbmlsCgoobWVyZ2UhKSAmcXVvdDtjb21wYXJhdG9yJnF1b3Q7ICZxdW90O2xpc3QxJnF1b3Q7ICZxdW90O2xpc3QyJnF1b3Q7ICZxdW90O2NvbGxlY3QmcXVvdDsKY29tbWVudDoKKDAwMikgJnF1b3Q7bnVsbD8mcXVvdDsgJnF1b3Q7bGlzdDImcXVvdDsKKDAwMykgJnF1b3Q7YXBwZW5kJnF1b3Q7ICgwMDIpICZxdW90O3JldmVyc2UmcXVvdDsgJnF1b3Q7Y29sbGVjdCZxdW90OyAmcXVvdDtsaXN0MSZxdW90OwoKKG1lcmdlISkgJnF1b3Q7Y29tcGFyYXRvciZxdW90OyAmcXVvdDtsaXN0MSZxdW90OyAmcXVvdDtsaXN0MiZxdW90OyAmcXVvdDtjb2xsZWN0JnF1b3Q7CmNvbW1lbnQ6CigwMDIpICZxdW90O251bGw/JnF1b3Q7ICZxdW90O2xpc3QxJnF1b3Q7CigwMDMpICZxdW90O2FwcGVuZCZxdW90OyAoMDAyKSAmcXVvdDtyZXZlcnNlJnF1b3Q7ICZxdW90O2NvbGxlY3QmcXVvdDsgJnF1b3Q7bGlzdDImcXVvdDsKCihtZXJnZSEpICZxdW90O2NvbXBhcmF0b3ImcXVvdDsgJnF1b3Q7bGlzdDEmcXVvdDsgJnF1b3Q7bGlzdDImcXVvdDsgJnF1b3Q7Y29sbGVjdCZxdW90Owpjb21tZW50OgooMDAzKSAmcXVvdDtjb21wYXJhdG9yJnF1b3Q7ICgwMDIpICZxdW90O2NhciZxdW90OyAmcXVvdDtsaXN0MiZxdW90OyAoMDAyKSAmcXVvdDtjYXImcXVvdDsgJnF1b3Q7bGlzdDEmcXVvdDsKKG1lcmdlISkgJnF1b3Q7Y29tcGFyYXRvciZxdW90OyAmcXVvdDtsaXN0MSZxdW90OyAoMDAyKSAmcXVvdDtjZHImcXVvdDsgJnF1b3Q7bGlzdDImcXVvdDsgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAoMDAyKSAmcXVvdDtjYXImcXVvdDsgJnF1b3Q7bGlzdDImcXVvdDsgJnF1b3Q7Y29sbGVjdCZxdW90OwoKKG1lcmdlISkgJnF1b3Q7Y29tcGFyYXRvciZxdW90OyAmcXVvdDtsaXN0MSZxdW90OyAmcXVvdDtsaXN0MiZxdW90OyAmcXVvdDtjb2xsZWN0JnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCihtZXJnZSEpICZxdW90O2NvbXBhcmF0b3ImcXVvdDsgKDAwMikgJnF1b3Q7Y2RyJnF1b3Q7ICZxdW90O2xpc3QxJnF1b3Q7ICZxdW90O2xpc3QyJnF1b3Q7ICgwMDMpICZxdW90O2NvbnMmcXVvdDsgKDAwMikgJnF1b3Q7Y2FyJnF1b3Q7ICZxdW90O2xpc3QxJnF1b3Q7ICZxdW90O2NvbGxlY3QmcXVvdDsKCihtZXJnZSkgJnF1b3Q7Y29tcGFyYXRvciZxdW90OyAmcXVvdDtsaXN0MSZxdW90OyAmcXVvdDtsaXN0MiZxdW90Owpjb21tZW50OgojdHJ1ZQoobWVyZ2UhKSAmcXVvdDtjb21wYXJhdG9yJnF1b3Q7ICZxdW90O2xpc3QxJnF1b3Q7ICZxdW90O2xpc3QyJnF1b3Q7IG5pbAoKKG1wKSAmcXVvdDtmdW5jdGlvbiZxdW90OyAmcXVvdDtsaXN0JnF1b3Q7CmNvbW1lbnQ6CigwMDIpICZxdW90O251bGw/JnF1b3Q7ICZxdW90O2xpc3QmcXVvdDsKbmlsCgoobXApICZxdW90O2Z1bmN0aW9uJnF1b3Q7ICZxdW90O2xpc3QmcXVvdDsKY29tbWVudDoKKDAwMikgJnF1b3Q7cGFpcj8mcXVvdDsgJnF1b3Q7bGlzdCZxdW90OwooYykgKDAwMikgJnF1b3Q7ZnVuY3Rpb24mcXVvdDsgKDEpICZxdW90O2xpc3QmcXVvdDsgKG1wKSAmcXVvdDtmdW5jdGlvbiZxdW90OyAoISkgJnF1b3Q7bGlzdCZxdW90OwoKKG1wKSAmcXVvdDtmdW5jdGlvbiZxdW90OyAmcXVvdDtsaXN0JnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCigwMDIpICZxdW90O2Z1bmN0aW9uJnF1b3Q7ICZxdW90O2xpc3QmcXVvdDsKCihuZXdsaW5lLXNwYWNlISkgJnF1b3Q7cHJvZ3JhbSZxdW90Owpjb21tZW50OgojdHJ1ZQooMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICNuZXdsaW5lIChuZXdsaW5lLXNwYWNlIWEpICZxdW90O3Byb2dyYW0mcXVvdDsKCihuZXdsaW5lLXNwYWNlIWEpICZxdW90O3Byb2dyYW0mcXVvdDsKY29tbWVudDoKI3RydWUKKG5ld2xpbmUtc3BhY2UhYWEpICZxdW90O3Byb2dyYW0mcXVvdDsgKDAwMikgJnF1b3Q7cmV2ZXJzZSZxdW90OyAobmV3bGluZS1zcGFjZSFhYikgJnF1b3Q7cHJvZ3JhbSZxdW90OyBuaWwKCihuZXdsaW5lLXNwYWNlIWFhKSAmcXVvdDtwcm9ncmFtJnF1b3Q7ICZxdW90O3RyYW5zZm9ybWVkJnF1b3Q7CmNvbW1lbnQ6CigwMDMpICZxdW90O2VxdWFsPyZxdW90OyAmcXVvdDtwcm9ncmFtJnF1b3Q7ICZxdW90O3RyYW5zZm9ybWVkJnF1b3Q7CiZxdW90O3Byb2dyYW0mcXVvdDsKCihuZXdsaW5lLXNwYWNlIWFhKSAmcXVvdDtwcm9ncmFtJnF1b3Q7ICZxdW90O3RyYW5zZm9ybWVkJnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCihuZXdsaW5lLXNwYWNlIWEpICZxdW90O3RyYW5zZm9ybWVkJnF1b3Q7CgoobmV3bGluZS1zcGFjZSFhYikgJnF1b3Q7cHJvZ3JhbSZxdW90OyAmcXVvdDtjb2xsZWN0JnF1b3Q7CmNvbW1lbnQ6CigwMDIpICZxdW90O251bGw/JnF1b3Q7ICZxdW90O3Byb2dyYW0mcXVvdDsKJnF1b3Q7Y29sbGVjdCZxdW90OwoKKG5ld2xpbmUtc3BhY2UhYWIpICZxdW90O3Byb2dyYW0mcXVvdDsgJnF1b3Q7Y29sbGVjdCZxdW90Owpjb21tZW50OgooMDAyKSAmcXVvdDtudWxsPyZxdW90OyAoMDAyKSAmcXVvdDtjZHImcXVvdDsgJnF1b3Q7cHJvZ3JhbSZxdW90OwooMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICgwMDIpICZxdW90O2NhciZxdW90OyAmcXVvdDtwcm9ncmFtJnF1b3Q7ICZxdW90O2NvbGxlY3QmcXVvdDsKCihuZXdsaW5lLXNwYWNlIWFiKSAmcXVvdDtwcm9ncmFtJnF1b3Q7ICZxdW90O2NvbGxlY3QmcXVvdDsKY29tbWVudDoKKDAwMykgJnF1b3Q7YW5kJnF1b3Q7ICgwMDMpICZxdW90O2Vxdj8mcXVvdDsgI25ld2xpbmUgKDAwMikgJnF1b3Q7Y2FyJnF1b3Q7ICZxdW90O3Byb2dyYW0mcXVvdDsKICAgICAgICAgICAgKDAwMykgJnF1b3Q7b3ImcXVvdDsgKDAwMykgJnF1b3Q7ZXF2PyZxdW90OyAjc3BhY2UgKDAwMikgJnF1b3Q7Y2FkciZxdW90OyAmcXVvdDtwcm9ncmFtJnF1b3Q7CiAgICAgICAgICAgICAgICAgICAgICAgKDAwMykgJnF1b3Q7ZXF2PyZxdW90OyAjdGFiICgwMDIpICZxdW90O2NhZHImcXVvdDsgJnF1b3Q7cHJvZ3JhbSZxdW90OwoobmV3bGluZS1zcGFjZSFhYikgKDAwMikgJnF1b3Q7Y2RyJnF1b3Q7ICZxdW90O3Byb2dyYW0mcXVvdDsgJnF1b3Q7Y29sbGVjdCZxdW90OwoKKG5ld2xpbmUtc3BhY2UhYWIpICZxdW90O3Byb2dyYW0mcXVvdDsgJnF1b3Q7Y29sbGVjdCZxdW90Owpjb21tZW50OgojdHJ1ZQoobmV3bGluZS1zcGFjZSFhYikgKDAwMikgJnF1b3Q7Y2RyJnF1b3Q7ICZxdW90O3Byb2dyYW0mcXVvdDsgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAoMDAyKSAmcXVvdDtjYXImcXVvdDsgJnF1b3Q7cHJvZ3JhbSZxdW90OyAmcXVvdDtjb2xsZWN0JnF1b3Q7CgoobmV3bGluZS1zcGFjZSkgJnF1b3Q7cHJvZ3JhbSZxdW90Owpjb21tZW50OgojdHJ1ZQoobmV3bGluZS1zcGFjZSEpICZxdW90O3Byb2dyYW0mcXVvdDsKCihuZXdsaW5lLXNwYWNlLXRhYi1yZXBlYXRzISkgJnF1b3Q7cHJvZ3JhbSZxdW90OyAmcXVvdDtjb2xsZWN0JnF1b3Q7CmNvbW1lbnQ6CigwMDMpICZxdW90O29yJnF1b3Q7ICgwMDIpICZxdW90O251bGw/JnF1b3Q7ICZxdW90O3Byb2dyYW0mcXVvdDsgKDAwMikgJnF1b3Q7bnVsbD8mcXVvdDsgKDAwMikgJnF1b3Q7Y2RyJnF1b3Q7ICZxdW90O3Byb2dyYW0mcXVvdDsKKDAwMykgJnF1b3Q7YXBwZW5kJnF1b3Q7ICZxdW90O3Byb2dyYW0mcXVvdDsgJnF1b3Q7Y29sbGVjdCZxdW90OwoKKG5ld2xpbmUtc3BhY2UtdGFiLXJlcGVhdHMhKSAmcXVvdDtwcm9ncmFtJnF1b3Q7ICZxdW90O2NvbGxlY3QmcXVvdDsKY29tbWVudDoKKDAwMykgJnF1b3Q7YW5kJnF1b3Q7ICgwMDMpICZxdW90O2Vxdj8mcXVvdDsgI25ld2xpbmUgKDAwMikgJnF1b3Q7Y2FyJnF1b3Q7ICZxdW90O3Byb2dyYW0mcXVvdDsKICAgICAgICAgICAgKDAwMykgJnF1b3Q7ZXF2PyZxdW90OyAjbmV3bGluZSAoMDAyKSAmcXVvdDtjYWRyJnF1b3Q7ICZxdW90O3Byb2dyYW0mcXVvdDsKKG5ld2xpbmUtc3BhY2UtdGFiLXJlcGVhdHMhKSAoMDAyKSAmcXVvdDtjZHImcXVvdDsgJnF1b3Q7cHJvZ3JhbSZxdW90OyAmcXVvdDtjb2xsZWN0JnF1b3Q7CgoobmV3bGluZS1zcGFjZS10YWItcmVwZWF0cyEpICZxdW90O3Byb2dyYW0mcXVvdDsgJnF1b3Q7Y29sbGVjdCZxdW90Owpjb21tZW50OgooMDAzKSAmcXVvdDthbmQmcXVvdDsgKDAwMykgJnF1b3Q7b3ImcXVvdDsgKDAwMykgJnF1b3Q7ZXF2PyZxdW90OyAjc3BhY2UgKDAwMikgJnF1b3Q7Y2FyJnF1b3Q7ICZxdW90O3Byb2dyYW0mcXVvdDsKICAgICAgICAgICAgICAgICAgICAgICAoMDAzKSAmcXVvdDtlcXY/JnF1b3Q7ICN0YWIgKDAwMikgJnF1b3Q7Y2FyJnF1b3Q7ICZxdW90O3Byb2dyYW0mcXVvdDsKICAgICAgICAgICAgKDAwMykgJnF1b3Q7b3ImcXVvdDsgKDAwMykgJnF1b3Q7ZXF2PyZxdW90OyAjc3BhY2UgKDAwMikgJnF1b3Q7Y2FkciZxdW90OyAmcXVvdDtwcm9ncmFtJnF1b3Q7CiAgICAgICAgICAgICAgICAgICAgICAgKDAwMykgJnF1b3Q7ZXF2PyZxdW90OyAjdGFiICgwMDIpICZxdW90O2NhZHImcXVvdDsgJnF1b3Q7cHJvZ3JhbSZxdW90OwoobmV3bGluZS1zcGFjZS10YWItcmVwZWF0cyEpICgwMDIpICZxdW90O2NkciZxdW90OyAmcXVvdDtwcm9ncmFtJnF1b3Q7ICZxdW90O2NvbGxlY3QmcXVvdDsKCihuZXdsaW5lLXNwYWNlLXRhYi1yZXBlYXRzISkgJnF1b3Q7cHJvZ3JhbSZxdW90OyAmcXVvdDtjb2xsZWN0JnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCihuZXdsaW5lLXNwYWNlLXRhYi1yZXBlYXRzISkgKDAwMikgJnF1b3Q7Y2RyJnF1b3Q7ICZxdW90O3Byb2dyYW0mcXVvdDsgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAoMDAyKSAmcXVvdDtjYXImcXVvdDsgJnF1b3Q7cHJvZ3JhbSZxdW90OyAmcXVvdDtjb2xsZWN0JnF1b3Q7CgoobmV3bGluZS1zcGFjZS10YWItcmVwZWF0cykgJnF1b3Q7cHJvZ3JhbSZxdW90Owpjb21tZW50OgojdHJ1ZQooMDAyKSAmcXVvdDtyZXZlcnNlJnF1b3Q7IChuZXdsaW5lLXNwYWNlLXRhYi1yZXBlYXRzISkgJnF1b3Q7cHJvZ3JhbSZxdW90OyBuaWwKCihuZXdsaW5lcykgJnF1b3Q7Y2xhdXNlcyZxdW90Owpjb21tZW50OgojdHJ1ZQooYWRkLWJldHdlZW4tcmEpIChtYXAtd2l0aCkgYWRkLWJldHdlZW4tcmEgJnF1b3Q7Y2xhdXNlcyZxdW90OyAoMDAyKSAmcXVvdDtsaXN0JnF1b3Q7ICNuZXdsaW5lCiAgICAgICAgICAgICAgICAgKDAwMikgJnF1b3Q7bGlzdCZxdW90OyAoMDAzKSAmcXVvdDtsaXN0JnF1b3Q7ICNuZXdsaW5lICNuZXdsaW5lCgoobm9ybWFsLWNoYXJhY3Rlcj8pICZxdW90O25vdW4tbGlzdCZxdW90Owpjb21tZW50OgojdHJ1ZQooMDAzKSAmcXVvdDtlcXY/JnF1b3Q7ICgwMDIpICZxdW90O2NhciZxdW90OyAmcXVvdDtub3VuLWxpc3QmcXVvdDsgIyMKCihub3QpIHZhbHVlCmNvbW1lbnQ6CiN0cnVlCigwMDIpICZxdW90O25vdCZxdW90OyB2YWx1ZQoKKG5vdC1yZXR1cm4/KSAmcXVvdDtjaGFyYWN0ZXImcXVvdDsKY29tbWVudDoKI3RydWUKKDAwMikgJnF1b3Q7bm90JnF1b3Q7ICgwMDMpICZxdW90O2Vxdj8mcXVvdDsgI3JldHVybiAmcXVvdDtjaGFyYWN0ZXImcXVvdDsKCihub3VuISkgJnF1b3Q7bm91bi1saXN0JnF1b3Q7ICZxdW90O251bWJlcj8mcXVvdDsKY29tbWVudDoKJnF1b3Q7bnVtYmVyPyZxdW90OwoobWFrZS1leGFjdCkgJnF1b3Q7bm91bi1saXN0JnF1b3Q7Cgoobm91biEpICZxdW90O25vdW4tbGlzdCZxdW90OyAmcXVvdDtudW1iZXI/JnF1b3Q7CmNvbW1lbnQ6CihsaXRlcmFsPykgJnF1b3Q7bm91bi1saXN0JnF1b3Q7CihtYWtlLWxpdGVyYWwpICZxdW90O25vdW4tbGlzdCZxdW90OwoKKG5vdW4hKSAmcXVvdDtub3VuLWxpc3QmcXVvdDsgJnF1b3Q7bnVtYmVyPyZxdW90Owpjb21tZW50OgoodHJ1ZT8pICZxdW90O25vdW4tbGlzdCZxdW90OwomcXVvdDsmcXVvdDsjdCZxdW90OyZxdW90OwoKKG5vdW4hKSAmcXVvdDtub3VuLWxpc3QmcXVvdDsgJnF1b3Q7bnVtYmVyPyZxdW90Owpjb21tZW50OgooZmFsc2U/KSAmcXVvdDtub3VuLWxpc3QmcXVvdDsKJnF1b3Q7JnF1b3Q7I2YmcXVvdDsmcXVvdDsKCihub3VuISkgJnF1b3Q7bm91bi1saXN0JnF1b3Q7ICZxdW90O251bWJlcj8mcXVvdDsKY29tbWVudDoKKG51bWJlci1jaGFyYWN0ZXI/KSAmcXVvdDtub3VuLWxpc3QmcXVvdDsKKG1ha2UtbnVtYmVyLWNoYXJhY3RlcikgJnF1b3Q7bm91bi1saXN0JnF1b3Q7Cgoobm91biEpICZxdW90O25vdW4tbGlzdCZxdW90OyAmcXVvdDtudW1iZXI/JnF1b3Q7CmNvbW1lbnQ6Cihub3JtYWwtY2hhcmFjdGVyPykgJnF1b3Q7bm91bi1saXN0JnF1b3Q7CihtYWtlLWNoYXJhY3RlcikgJnF1b3Q7bm91bi1saXN0JnF1b3Q7Cgoobm91biEpICZxdW90O25vdW4tbGlzdCZxdW90OyAmcXVvdDtudW1iZXI/JnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCihtYWtlLVpFRCkgJnF1b3Q7bm91bi1saXN0JnF1b3Q7Cgoobm91bikgJnF1b3Q7bm91bi1saXN0JnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCihub3VuISkgJnF1b3Q7bm91bi1saXN0JnF1b3Q7ICgwMDIpICZxdW90O3N0cmluZy0mZ3Q7bnVtYmVyJnF1b3Q7ICgwMDIpICZxdW90O2xpc3QtJmd0O3N0cmluZyZxdW90OyAmcXVvdDtub3VuLWxpc3QmcXVvdDsKCihudWxsPykgdmFsdWUKY29tbWVudDoKI3RydWUKKDAwMikgJnF1b3Q7bnVsbD8mcXVvdDsgdmFsdWUKCihudW1iZXItY2hhcmFjdGVyPykgJnF1b3Q7bm91bi1saXN0JnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCigwMDQpICZxdW90O2FuZCZxdW90OwogICAgICAoMDAzKSAmcXVvdDtlcXY/JnF1b3Q7ICgwMDIpICZxdW90O2NhciZxdW90OyAmcXVvdDtub3VuLWxpc3QmcXVvdDsgIyMKICAgICAgKDAwMykgJnF1b3Q7ZXF2PyZxdW90OyAoMDAyKSAmcXVvdDtjYWRyJnF1b3Q7ICZxdW90O25vdW4tbGlzdCZxdW90OyAjMAogICAgICAoMDAyKSAmcXVvdDtub3QmcXVvdDsgKDAwMikgJnF1b3Q7bnVsbD8mcXVvdDsgKDAwMikgJnF1b3Q7Y2RkciZxdW90OyAmcXVvdDtub3VuLWxpc3QmcXVvdDsKCihwYWlyPykgdmFsdWUKY29tbWVudDoKI3RydWUKKDAwMikgJnF1b3Q7cGFpcj8mcXVvdDsgdmFsdWUKCihwb3ApICZxdW90O3N0YWNrJnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCigwMDIpICZxdW90O2NkciZxdW90OyAmcXVvdDtzdGFjayZxdW90OwoKKHByISkgJnF1b3Q7dmFsdWUmcXVvdDsgJnF1b3Q7b3V0cHV0LXN0cmluZyZxdW90Owpjb21tZW50OgojdHJ1ZQooMDAzKSAmcXVvdDtiZWdpbiZxdW90OwogICAgICAoMDAzKSAmcXVvdDtkaXNwbGF5JnF1b3Q7IChwciFhKSAmcXVvdDt2YWx1ZSZxdW90OyBuaWwKICAgICAgICAgICAgICAgICAgICAgICZxdW90O291dHB1dC1zdHJpbmcmcXVvdDsKICAgICAgKHByIWIpICZxdW90O291dHB1dC1zdHJpbmcmcXVvdDsgKDAwMikgJnF1b3Q7Z2V0LW91dHB1dC1zdHJpbmcmcXVvdDsgJnF1b3Q7b3V0cHV0LXN0cmluZyZxdW90OwoKKHByIWEpICZxdW90O3ZhbHVlJnF1b3Q7ICZxdW90O2NvbGxlY3QmcXVvdDsKY29tbWVudDoKKDAwMikgJnF1b3Q7Y2hhcj8mcXVvdDsgJnF1b3Q7dmFsdWUmcXVvdDsKKHByIWFhKSAoMDAyKSAmcXVvdDtsaXN0LSZndDtzdHJpbmcmcXVvdDsgKDAwMykgJnF1b3Q7bGlzdCZxdW90OyAjIyAmcXVvdDt2YWx1ZSZxdW90OyAmcXVvdDtjb2xsZWN0JnF1b3Q7CgoocHIhYSkgJnF1b3Q7dmFsdWUmcXVvdDsgJnF1b3Q7Y29sbGVjdCZxdW90Owpjb21tZW50OgooMDAyKSAmcXVvdDtzdHJpbmc/JnF1b3Q7ICZxdW90O3ZhbHVlJnF1b3Q7CihwciFhYSkgKDAwNCkgJnF1b3Q7c3RyaW5nLWFwcGVuZCZxdW90OyAmcXVvdDsmcXVvdDtcJnF1b3Q7JnF1b3Q7JnF1b3Q7ICZxdW90O3ZhbHVlJnF1b3Q7ICZxdW90OyZxdW90O1wmcXVvdDsmcXVvdDsmcXVvdDsgJnF1b3Q7Y29sbGVjdCZxdW90OwoKKHByIWEpICZxdW90O3ZhbHVlJnF1b3Q7ICZxdW90O2NvbGxlY3QmcXVvdDsKY29tbWVudDoKKDAwMikgJnF1b3Q7c3ltYm9sPyZxdW90OyAmcXVvdDt2YWx1ZSZxdW90OwoocHIhYWEpICgwMDIpICZxdW90O3N5bWJvbC0mZ3Q7c3RyaW5nJnF1b3Q7ICZxdW90O3ZhbHVlJnF1b3Q7ICZxdW90O2NvbGxlY3QmcXVvdDsKCihwciFhKSAmcXVvdDt2YWx1ZSZxdW90OyAmcXVvdDtjb2xsZWN0JnF1b3Q7CmNvbW1lbnQ6CigwMDIpICZxdW90O251bWJlcj8mcXVvdDsgJnF1b3Q7dmFsdWUmcXVvdDsKKHByIWFhKSAoMDAyKSAmcXVvdDtudW1iZXItJmd0O3N0cmluZyZxdW90OyAmcXVvdDt2YWx1ZSZxdW90OyAmcXVvdDtjb2xsZWN0JnF1b3Q7CgoocHIhYSkgJnF1b3Q7dmFsdWUmcXVvdDsgJnF1b3Q7Y29sbGVjdCZxdW90Owpjb21tZW50OgooMDAzKSAmcXVvdDthbmQmcXVvdDsgKDAwMikgJnF1b3Q7Ym9vbGVhbj8mcXVvdDsgJnF1b3Q7dmFsdWUmcXVvdDsgJnF1b3Q7dmFsdWUmcXVvdDsKKHByIWFhKSAmcXVvdDsmcXVvdDsjdHJ1ZSZxdW90OyZxdW90OyAmcXVvdDtjb2xsZWN0JnF1b3Q7CgoocHIhYSkgJnF1b3Q7dmFsdWUmcXVvdDsgJnF1b3Q7Y29sbGVjdCZxdW90Owpjb21tZW50OgooMDAyKSAmcXVvdDtib29sZWFuPyZxdW90OyAmcXVvdDt2YWx1ZSZxdW90OwoocHIhYWEpICZxdW90OyZxdW90OyNmYWxzZSZxdW90OyZxdW90OyAmcXVvdDtjb2xsZWN0JnF1b3Q7CgoocHIhYSkgJnF1b3Q7dmFsdWUmcXVvdDsgJnF1b3Q7Y29sbGVjdCZxdW90Owpjb21tZW50OgooMDAyKSAmcXVvdDtudWxsPyZxdW90OyAmcXVvdDt2YWx1ZSZxdW90OwooMDAyKSAmcXVvdDtyZXZlcnNlJnF1b3Q7ICZxdW90O2NvbGxlY3QmcXVvdDsKCihwciFhKSAmcXVvdDt2YWx1ZSZxdW90OyAmcXVvdDtjb2xsZWN0JnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCihwciFhKSAoISkgJnF1b3Q7dmFsdWUmcXVvdDsgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAocHIhYSkgKDEpICZxdW90O3ZhbHVlJnF1b3Q7IG5pbCAmcXVvdDtjb2xsZWN0JnF1b3Q7CgoocHIhYWEpICZxdW90O3N0cmluZyZxdW90OyAmcXVvdDtjb2xsZWN0JnF1b3Q7CmNvbW1lbnQ6CigwMDIpICZxdW90O251bGw/JnF1b3Q7ICZxdW90O2NvbGxlY3QmcXVvdDsKJnF1b3Q7c3RyaW5nJnF1b3Q7CgoocHIhYWEpICZxdW90O3N0cmluZyZxdW90OyAmcXVvdDtjb2xsZWN0JnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCigwMDIpICZxdW90O3JldmVyc2UmcXVvdDsgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDtzdHJpbmcmcXVvdDsgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsmcXVvdDsuJnF1b3Q7JnF1b3Q7ICZxdW90O2NvbGxlY3QmcXVvdDsKCihwciFiKSAmcXVvdDtvdXRwdXQtc3RyaW5nJnF1b3Q7ICZxdW90O3ZhbHVlJnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCigwMDMpICZxdW90O2JlZ2luJnF1b3Q7ICgwMDIpICZxdW90O2Nsb3NlLW91dHB1dC1wb3J0JnF1b3Q7ICZxdW90O291dHB1dC1zdHJpbmcmcXVvdDsgJnF1b3Q7dmFsdWUmcXVvdDsKCihwcikgJnF1b3Q7dmFsdWUmcXVvdDsKY29tbWVudDoKI3RydWUKKHByISkgJnF1b3Q7dmFsdWUmcXVvdDsgKDAwMSkgJnF1b3Q7b3Blbi1vdXRwdXQtc3RyaW5nJnF1b3Q7CgoocHJvZ3JhbWl6ZSkgJnF1b3Q7cHJvZ3JhbSZxdW90OyAmcXVvdDthcml0eS1oYXNoJnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCigwMDMpICZxdW90O2NvbnMmcXVvdDsgJnF1b3Q7J2JlZ2luJnF1b3Q7IChtYXAtd2l0aCkgZnVuY3Rpb25pemUgJnF1b3Q7cHJvZ3JhbSZxdW90OyAmcXVvdDthcml0eS1oYXNoJnF1b3Q7CgoocHVzaCkgJnF1b3Q7b2JqZWN0JnF1b3Q7ICZxdW90O3N0YWNrJnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCigwMDMpICZxdW90O2NvbnMmcXVvdDsgJnF1b3Q7b2JqZWN0JnF1b3Q7ICZxdW90O3N0YWNrJnF1b3Q7CgoocmQhKSAmcXVvdDtmdW5jdGlvbiZxdW90OyAmcXVvdDtsaXN0JnF1b3Q7CmNvbW1lbnQ6CigwMDIpICZxdW90O251bGw/JnF1b3Q7ICghKSAmcXVvdDtsaXN0JnF1b3Q7CigxKSAmcXVvdDtsaXN0JnF1b3Q7CgoocmQhKSAmcXVvdDtmdW5jdGlvbiZxdW90OyAmcXVvdDtsaXN0JnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCihyZCEpICZxdW90O2Z1bmN0aW9uJnF1b3Q7ICgwMDMpICZxdW90O2NvbnMmcXVvdDsgKDAwMykgJnF1b3Q7ZnVuY3Rpb24mcXVvdDsgKDEpICghKSAmcXVvdDtsaXN0JnF1b3Q7ICgxKSAmcXVvdDtsaXN0JnF1b3Q7ICghKSAoISkgJnF1b3Q7bGlzdCZxdW90OwoKKHJkKSAmcXVvdDtmaW5hbCZxdW90OyAmcXVvdDtmdW5jdGlvbiZxdW90OyAmcXVvdDtsaXN0JnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCihyZCEpICZxdW90O2Z1bmN0aW9uJnF1b3Q7ICgwMDMpICZxdW90O2NvbnMmcXVvdDsgJnF1b3Q7ZmluYWwmcXVvdDsgKDAwMikgJnF1b3Q7cmV2ZXJzZSZxdW90OyAmcXVvdDtsaXN0JnF1b3Q7CgoocmVhZC1hbGwhKSAmcXVvdDtjb2xsZWN0JnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCihyZWFkLWFsbCFhKSAoMDAxKSAmcXVvdDtyZWFkLWNoYXImcXVvdDsgJnF1b3Q7Y29sbGVjdCZxdW90OwoKKHJlYWQtYWxsIWEpICZxdW90O2NoYXJhY3RlciZxdW90OyAmcXVvdDtjb2xsZWN0JnF1b3Q7CmNvbW1lbnQ6CigwMDIpICZxdW90O2VvZi1vYmplY3Q/JnF1b3Q7ICZxdW90O2NoYXJhY3RlciZxdW90OwomcXVvdDtjb2xsZWN0JnF1b3Q7CgoocmVhZC1hbGwhYSkgJnF1b3Q7Y2hhcmFjdGVyJnF1b3Q7ICZxdW90O2NvbGxlY3QmcXVvdDsKY29tbWVudDoKI3RydWUKKHJlYWQtYWxsISkgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDtjaGFyYWN0ZXImcXVvdDsgJnF1b3Q7Y29sbGVjdCZxdW90OwoKKHJlYWQtYWxsKQpjb21tZW50OgojdHJ1ZQooMDAyKSAmcXVvdDtyZXZlcnNlJnF1b3Q7IChyZWFkLWFsbCEpIG5pbAoKKHJlYWQtc2VudGVuY2UhYSkgJnF1b3Q7c2VudGVuY2UmcXVvdDsgJnF1b3Q7Y29sbGVjdCZxdW90Owpjb21tZW50OgooMDAyKSAmcXVvdDtudWxsPyZxdW90OyAmcXVvdDtzZW50ZW5jZSZxdW90OwomcXVvdDtjb2xsZWN0JnF1b3Q7CgoocmVhZC1zZW50ZW5jZSFhKSAmcXVvdDtzZW50ZW5jZSZxdW90OyAmcXVvdDtjb2xsZWN0JnF1b3Q7CmNvbW1lbnQ6CigwMDMpICZxdW90O2Vxdj8mcXVvdDsgI3NwYWNlICgwMDIpICZxdW90O2NhciZxdW90OyAmcXVvdDtzZW50ZW5jZSZxdW90OwoocmVhZC1zZW50ZW5jZSFhKSAoMDAyKSAmcXVvdDtjZHImcXVvdDsgJnF1b3Q7c2VudGVuY2UmcXVvdDsgJnF1b3Q7Y29sbGVjdCZxdW90OwoKKHJlYWQtc2VudGVuY2UhYSkgJnF1b3Q7c2VudGVuY2UmcXVvdDsgJnF1b3Q7Y29sbGVjdCZxdW90Owpjb21tZW50OgooMDAzKSAmcXVvdDtlcXY/JnF1b3Q7ICMoICgwMDIpICZxdW90O2NhciZxdW90OyAmcXVvdDtzZW50ZW5jZSZxdW90OwoocmVhZC1zZW50ZW5jZSFhYSkgJnF1b3Q7c2VudGVuY2UmcXVvdDsgKGdhdGhlci12ZXJiKSAoMDAyKSAmcXVvdDtjZHImcXVvdDsgJnF1b3Q7c2VudGVuY2UmcXVvdDsgJnF1b3Q7Y29sbGVjdCZxdW90OwoKKHJlYWQtc2VudGVuY2UhYSkgJnF1b3Q7c2VudGVuY2UmcXVvdDsgJnF1b3Q7Y29sbGVjdCZxdW90Owpjb21tZW50OgojdHJ1ZQoocmVhZC1zZW50ZW5jZSFhYikgJnF1b3Q7c2VudGVuY2UmcXVvdDsgKGdhdGhlci1ub3VuKSAmcXVvdDtzZW50ZW5jZSZxdW90OyAmcXVvdDtjb2xsZWN0JnF1b3Q7CgoocmVhZC1zZW50ZW5jZSFhYSkgJnF1b3Q7c2VudGVuY2UmcXVvdDsgJnF1b3Q7Z2F0aGVyLXZlcmImcXVvdDsgJnF1b3Q7Y29sbGVjdCZxdW90Owpjb21tZW50OgojdHJ1ZQoocmVhZC1zZW50ZW5jZSFhKSAodGFpbHMpICgwMDMpICZxdW90OysmcXVvdDsgMiAoMDAyKSAmcXVvdDtsZW5ndGgmcXVvdDsgJnF1b3Q7Z2F0aGVyLXZlcmImcXVvdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAmcXVvdDtzZW50ZW5jZSZxdW90OwogICAgICAgICAgICAgICAgICAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICh2ZXJiKSAmcXVvdDtnYXRoZXItdmVyYiZxdW90OyAmcXVvdDtjb2xsZWN0JnF1b3Q7CgoocmVhZC1zZW50ZW5jZSFhYikgJnF1b3Q7c2VudGVuY2UmcXVvdDsgJnF1b3Q7Z2F0aGVyLW5vdW4mcXVvdDsgJnF1b3Q7Y29sbGVjdCZxdW90Owpjb21tZW50OgojdHJ1ZQoocmVhZC1zZW50ZW5jZSFhKSAodGFpbHMpICgwMDIpICZxdW90O2xlbmd0aCZxdW90OyAmcXVvdDtnYXRoZXItbm91biZxdW90OyAmcXVvdDtzZW50ZW5jZSZxdW90OwogICAgICAgICAgICAgICAgICAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7IChub3VuKSAmcXVvdDtnYXRoZXItbm91biZxdW90OyAmcXVvdDtjb2xsZWN0JnF1b3Q7CgoocmVhZC1zZW50ZW5jZSFiKSAmcXVvdDtsaXN0JnF1b3Q7ICZxdW90O291dHB1dC1zdHJpbmcmcXVvdDsKY29tbWVudDoKI3RydWUKKDAwMykgJnF1b3Q7YmVnaW4mcXVvdDsgKDAwMykgJnF1b3Q7ZGlzcGxheSZxdW90OyAmcXVvdDtsaXN0JnF1b3Q7ICZxdW90O291dHB1dC1zdHJpbmcmcXVvdDsgCiAgICAgICAgICAgICAgKHJlYWQtc2VudGVuY2UhYmEpICZxdW90O291dHB1dC1zdHJpbmcmcXVvdDsgKDAwMikgJnF1b3Q7Z2V0LW91dHB1dC1zdHJpbmcmcXVvdDsgJnF1b3Q7b3V0cHV0LXN0cmluZyZxdW90OwoKKHJlYWQtc2VudGVuY2UhYmEpICZxdW90O291dHB1dC1zdHJpbmcmcXVvdDsgJnF1b3Q7Z2V0LW91dHB1dC1zdHJpbmcmcXVvdDsKY29tbWVudDoKI3RydWUKKDAwMykgJnF1b3Q7YmVnaW4mcXVvdDsgKDAwMikgJnF1b3Q7Y2xvc2Utb3V0cHV0LXBvcnQmcXVvdDsgJnF1b3Q7b3V0cHV0LXN0cmluZyZxdW90OwogICAgICAgICAgICAgIChyZWFkLXNlbnRlbmNlIWJhYSkgKDAwMikgJnF1b3Q7b3Blbi1pbnB1dC1zdHJpbmcmcXVvdDsgJnF1b3Q7Z2V0LW91dHB1dC1zdHJpbmcmcXVvdDsKCihyZWFkLXNlbnRlbmNlIWJhYSkgJnF1b3Q7aW5wdXQtc3RyaW5nJnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCihyZWFkLXNlbnRlbmNlIWJhYWEpICZxdW90O2lucHV0LXN0cmluZyZxdW90OyAoMDAyKSAmcXVvdDtyZWFkJnF1b3Q7ICZxdW90O2lucHV0LXN0cmluZyZxdW90OwoKKHJlYWQtc2VudGVuY2UhYmFhYSkgJnF1b3Q7aW5wdXQtc3RyaW5nJnF1b3Q7ICZxdW90O2Fuc3dlciZxdW90Owpjb21tZW50OgojdHJ1ZQooMDAzKSAmcXVvdDtiZWdpbiZxdW90OyAoMDAyKSAmcXVvdDtjbG9zZS1pbnB1dC1wb3J0JnF1b3Q7ICZxdW90O2lucHV0LXN0cmluZyZxdW90OyAmcXVvdDthbnN3ZXImcXVvdDsKCihyZWFkLXNlbnRlbmNlKSAmcXVvdDtzZW50ZW5jZSZxdW90Owpjb21tZW50OgojdHJ1ZQoocmVhZC1zZW50ZW5jZSFiKSAoMDAyKSAmcXVvdDtyZXZlcnNlJnF1b3Q7IChyZWFkLXNlbnRlbmNlIWEpICZxdW90O3NlbnRlbmNlJnF1b3Q7IG5pbCAoMDAxKSAmcXVvdDtvcGVuLW91dHB1dC1zdHJpbmcmcXVvdDsKCihyZWFkLXNlbnRlbmNlcykgJnF1b3Q7c2VudGVuY2VzJnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCigwMDMpICZxdW90O21hcCZxdW90OyByZWFkLXNlbnRlbmNlICZxdW90O3NlbnRlbmNlcyZxdW90OwoKKHJlYWR5LWNsYXVzZSkgJnF1b3Q7Y2xhdXNlJnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCigwMDMpICZxdW90O2NvbnMmcXVvdDsgKDAwMikgJnF1b3Q7Y2FhYXImcXVvdDsgJnF1b3Q7Y2xhdXNlJnF1b3Q7ICgwMDMpICZxdW90O2NvbnMmcXVvdDsgKDAwMikgJnF1b3Q7Y2RhciZxdW90OyAmcXVvdDtjbGF1c2UmcXVvdDsgKDAwMikgJnF1b3Q7Y2RyJnF1b3Q7ICZxdW90O2NsYXVzZSZxdW90OwoKKHJlYWR5LXByb2dyYW0pICZxdW90O3Byb2dyYW0mcXVvdDsKY29tbWVudDoKI3RydWUKKDAwMykgJnF1b3Q7bWFwJnF1b3Q7IHJlYWR5LWNsYXVzZSAmcXVvdDtwcm9ncmFtJnF1b3Q7CgoocmVwbGFjZS10cmFpbGluZy13aGl0ZS1zcGFjZSEpICZxdW90O3Byb2dyYW0mcXVvdDsKY29tbWVudDoKKDAwMikgJnF1b3Q7bnVsbD8mcXVvdDsgJnF1b3Q7cHJvZ3JhbSZxdW90OwpuaWwKCihyZXBsYWNlLXRyYWlsaW5nLXdoaXRlLXNwYWNlISkgJnF1b3Q7cHJvZ3JhbSZxdW90Owpjb21tZW50OgooMDA1KSAmcXVvdDtvciZxdW90OwogICAgICAoMDAzKSAmcXVvdDtlcXY/JnF1b3Q7ICgwMDIpICZxdW90O2NhciZxdW90OyAmcXVvdDtwcm9ncmFtJnF1b3Q7ICNzcGFjZQogICAgICAoMDAzKSAmcXVvdDtlcXY/JnF1b3Q7ICgwMDIpICZxdW90O2NhciZxdW90OyAmcXVvdDtwcm9ncmFtJnF1b3Q7ICN0YWIKICAgICAgKDAwMykgJnF1b3Q7ZXF2PyZxdW90OyAoMDAyKSAmcXVvdDtjYXImcXVvdDsgJnF1b3Q7cHJvZ3JhbSZxdW90OyAjcmV0dXJuCiAgICAgICgwMDMpICZxdW90O2Vxdj8mcXVvdDsgKDAwMikgJnF1b3Q7Y2FyJnF1b3Q7ICZxdW90O3Byb2dyYW0mcXVvdDsgI25ld2xpbmUKKHJlcGxhY2UtdHJhaWxpbmctd2hpdGUtc3BhY2UhKSAoMDAyKSAmcXVvdDtjZHImcXVvdDsgJnF1b3Q7cHJvZ3JhbSZxdW90OwoKKHJlcGxhY2UtdHJhaWxpbmctd2hpdGUtc3BhY2UhKSAmcXVvdDtwcm9ncmFtJnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCigwMDMpICZxdW90O2NvbnMmcXVvdDsgI25ld2xpbmUgJnF1b3Q7cHJvZ3JhbSZxdW90OwoKKHJlcGxhY2UtdHJhaWxpbmctd2hpdGUtc3BhY2UpICZxdW90O3Byb2dyYW0mcXVvdDsKY29tbWVudDoKI3RydWUKKDAwMikgJnF1b3Q7cmV2ZXJzZSZxdW90OyAocmVwbGFjZS10cmFpbGluZy13aGl0ZS1zcGFjZSEpICgwMDIpICZxdW90O3JldmVyc2UmcXVvdDsgJnF1b3Q7cHJvZ3JhbSZxdW90OwoKKHJldmVyc2UpIGxpc3QKY29tbWVudDoKI3RydWUKKDAwMikgJnF1b3Q7cmV2ZXJzZSZxdW90OyBsaXN0Cgooc2NoZW1lZnkhKSAmcXVvdDtleHByZXNzaW9uJnF1b3Q7ICZxdW90O2FyaXR5LWhhc2gmcXVvdDsgJnF1b3Q7c3RhY2smcXVvdDsKY29tbWVudDoKKDAwMikgJnF1b3Q7bnVsbD8mcXVvdDsgJnF1b3Q7ZXhwcmVzc2lvbiZxdW90OwoodG9wKSAmcXVvdDtzdGFjayZxdW90OwoKKHNjaGVtZWZ5ISkgJnF1b3Q7ZXhwcmVzc2lvbiZxdW90OyAmcXVvdDthcml0eS1oYXNoJnF1b3Q7ICZxdW90O3N0YWNrJnF1b3Q7CmNvbW1lbnQ6CihhcHBsaWNhdGlvbj8pICZxdW90O2V4cHJlc3Npb24mcXVvdDsKKHNjaGVtZWZ5IWEpICZxdW90O2V4cHJlc3Npb24mcXVvdDsgJnF1b3Q7YXJpdHktaGFzaCZxdW90OyAmcXVvdDtzdGFjayZxdW90OyAoZnVuY3Rpb24pICZxdW90O2V4cHJlc3Npb24mcXVvdDsKCihzY2hlbWVmeSEpICZxdW90O2V4cHJlc3Npb24mcXVvdDsgJnF1b3Q7YXJpdHktaGFzaCZxdW90OyAmcXVvdDtzdGFjayZxdW90Owpjb21tZW50OgojdHJ1ZQooc2NoZW1lZnkhKSAoMDAyKSAmcXVvdDtjZHImcXVvdDsgJnF1b3Q7ZXhwcmVzc2lvbiZxdW90OyAmcXVvdDthcml0eS1oYXNoJnF1b3Q7IChwdXNoKSAoMDAyKSAmcXVvdDtjYXImcXVvdDsgJnF1b3Q7ZXhwcmVzc2lvbiZxdW90OyAmcXVvdDtzdGFjayZxdW90OwoKKHNjaGVtZWZ5IWEpICZxdW90O2V4cHJlc3Npb24mcXVvdDsgJnF1b3Q7YXJpdHktaGFzaCZxdW90OyAmcXVvdDtzdGFjayZxdW90OyAmcXVvdDtmdW5jdGlvbiZxdW90Owpjb21tZW50OgojdHJ1ZQooc2NoZW1lZnkhYWEpICZxdW90O2V4cHJlc3Npb24mcXVvdDsgJnF1b3Q7YXJpdHktaGFzaCZxdW90OyAmcXVvdDtzdGFjayZxdW90OyAmcXVvdDtmdW5jdGlvbiZxdW90OyAoYXJpdHkpICZxdW90O2FyaXR5LWhhc2gmcXVvdDsgJnF1b3Q7ZnVuY3Rpb24mcXVvdDsKCihzY2hlbWVmeSFhYSkgJnF1b3Q7ZXhwcmVzc2lvbiZxdW90OyAmcXVvdDthcml0eS1oYXNoJnF1b3Q7ICZxdW90O3N0YWNrJnF1b3Q7ICZxdW90O2Z1bmN0aW9uJnF1b3Q7ICZxdW90O2FyaXR5JnF1b3Q7CmNvbW1lbnQ6CihnYXRoZXItY291bnQ/KSAmcXVvdDtmdW5jdGlvbiZxdW90Owooc2NoZW1lZnkhKSAoMDAyKSAmcXVvdDtjZHImcXVvdDsgJnF1b3Q7ZXhwcmVzc2lvbiZxdW90OyAmcXVvdDthcml0eS1oYXNoJnF1b3Q7IChwdXNoKSAoZmlyc3QpICZxdW90O2FyaXR5JnF1b3Q7ICZxdW90O3N0YWNrJnF1b3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0YWlscykgJnF1b3Q7YXJpdHkmcXVvdDsgJnF1b3Q7c3RhY2smcXVvdDsKCihzY2hlbWVmeSFhYSkgJnF1b3Q7ZXhwcmVzc2lvbiZxdW90OyAmcXVvdDthcml0eS1oYXNoJnF1b3Q7ICZxdW90O3N0YWNrJnF1b3Q7ICZxdW90O2Z1bmN0aW9uJnF1b3Q7ICZxdW90O2FyaXR5JnF1b3Q7CmNvbW1lbnQ6CigwMDMpICZxdW90O2VxPyZxdW90OyAmcXVvdDtmdW5jdGlvbiZxdW90OyAmcXVvdDsnWkVEMSZxdW90Owooc2NoZW1lZnkhKSAoMDAyKSAmcXVvdDtjZHImcXVvdDsgJnF1b3Q7ZXhwcmVzc2lvbiZxdW90OwogICAgICAgICAgICAmcXVvdDthcml0eS1oYXNoJnF1b3Q7CiAgICAgICAgICAgIChwdXNoKSAoMDA1KSAmcXVvdDtsaXN0JnF1b3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICAmcXVvdDsnaWYmcXVvdDsKICAgICAgICAgICAgICAgICAgICAgICAgICgwMDMpICZxdW90O2xpc3QmcXVvdDsgJnF1b3Q7J3Byb21pc2U/JnF1b3Q7ICgwMDMpICZxdW90O2NvbnMmcXVvdDsgJnF1b3Q7J2NhciZxdW90OyAoZmlyc3QpICZxdW90O2FyaXR5JnF1b3Q7ICZxdW90O3N0YWNrJnF1b3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICAoMDAzKSAmcXVvdDtsaXN0JnF1b3Q7ICZxdW90Oydmb3JjZSZxdW90OyAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICZxdW90OydjYXImcXVvdDsgKGZpcnN0KSAmcXVvdDthcml0eSZxdW90OyAmcXVvdDtzdGFjayZxdW90OwogICAgICAgICAgICAgICAgICAgICAgICAgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnY2FyJnF1b3Q7IChmaXJzdCkgJnF1b3Q7YXJpdHkmcXVvdDsgJnF1b3Q7c3RhY2smcXVvdDsKICAgICAgICAgICAgICAgICAgICh0YWlscykgJnF1b3Q7YXJpdHkmcXVvdDsgJnF1b3Q7c3RhY2smcXVvdDsKCihzY2hlbWVmeSFhYSkgJnF1b3Q7ZXhwcmVzc2lvbiZxdW90OyAmcXVvdDthcml0eS1oYXNoJnF1b3Q7ICZxdW90O3N0YWNrJnF1b3Q7ICZxdW90O2Z1bmN0aW9uJnF1b3Q7ICZxdW90O2FyaXR5JnF1b3Q7CmNvbW1lbnQ6CigwMDMpICZxdW90O2VxPyZxdW90OyAmcXVvdDtmdW5jdGlvbiZxdW90OyAmcXVvdDsnWkVEISZxdW90Owooc2NoZW1lZnkhKSAoMDAyKSAmcXVvdDtjZHImcXVvdDsgJnF1b3Q7ZXhwcmVzc2lvbiZxdW90OwogICAgICAgICAgICAmcXVvdDthcml0eS1oYXNoJnF1b3Q7CiAgICAgICAgICAgIChwdXNoKSAoMDA1KSAmcXVvdDtsaXN0JnF1b3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICAmcXVvdDsnaWYmcXVvdDsKICAgICAgICAgICAgICAgICAgICAgICAgICgwMDMpICZxdW90O2xpc3QmcXVvdDsgJnF1b3Q7J3Byb21pc2U/JnF1b3Q7ICgwMDMpICZxdW90O2NvbnMmcXVvdDsgJnF1b3Q7J2NkciZxdW90OyAoZmlyc3QpICZxdW90O2FyaXR5JnF1b3Q7ICZxdW90O3N0YWNrJnF1b3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICAoMDAzKSAmcXVvdDtsaXN0JnF1b3Q7ICZxdW90Oydmb3JjZSZxdW90OyAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICZxdW90OydjZHImcXVvdDsgKGZpcnN0KSAmcXVvdDthcml0eSZxdW90OyAmcXVvdDtzdGFjayZxdW90OwogICAgICAgICAgICAgICAgICAgICAgICAgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAmcXVvdDsnY2RyJnF1b3Q7IChmaXJzdCkgJnF1b3Q7YXJpdHkmcXVvdDsgJnF1b3Q7c3RhY2smcXVvdDsKICAgICAgICAgICAgICAgICAgICh0YWlscykgJnF1b3Q7YXJpdHkmcXVvdDsgJnF1b3Q7c3RhY2smcXVvdDsKCihzY2hlbWVmeSFhYSkgJnF1b3Q7ZXhwcmVzc2lvbiZxdW90OyAmcXVvdDthcml0eS1oYXNoJnF1b3Q7ICZxdW90O3N0YWNrJnF1b3Q7ICZxdW90O2Z1bmN0aW9uJnF1b3Q7ICZxdW90O2FyaXR5JnF1b3Q7CmNvbW1lbnQ6CigwMDMpICZxdW90O2VxPyZxdW90OyAmcXVvdDtmdW5jdGlvbiZxdW90OyAmcXVvdDsnWkVEYyZxdW90Owooc2NoZW1lZnkhKSAoMDAyKSAmcXVvdDtjZHImcXVvdDsgJnF1b3Q7ZXhwcmVzc2lvbiZxdW90OwogICAgICAgICAgICAmcXVvdDthcml0eS1oYXNoJnF1b3Q7CiAgICAgICAgICAgIChwdXNoKSAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICZxdW90Oydjb25zJnF1b3Q7ICgwMDMpICZxdW90O21hcCZxdW90OyBkZWxheS13cmFwIChmaXJzdCkgJnF1b3Q7YXJpdHkmcXVvdDsgJnF1b3Q7c3RhY2smcXVvdDsKICAgICAgICAgICAgICAgICAgICh0YWlscykgJnF1b3Q7YXJpdHkmcXVvdDsgJnF1b3Q7c3RhY2smcXVvdDsKCihzY2hlbWVmeSFhYSkgJnF1b3Q7ZXhwcmVzc2lvbiZxdW90OyAmcXVvdDthcml0eS1oYXNoJnF1b3Q7ICZxdW90O3N0YWNrJnF1b3Q7ICZxdW90O2Z1bmN0aW9uJnF1b3Q7ICZxdW90O2FyaXR5JnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCihzY2hlbWVmeSEpICgwMDIpICZxdW90O2NkciZxdW90OyAmcXVvdDtleHByZXNzaW9uJnF1b3Q7CiAgICAgICAgICAgICZxdW90O2FyaXR5LWhhc2gmcXVvdDsKICAgICAgICAgICAgKHB1c2gpICgwMDMpICZxdW90O2NvbnMmcXVvdDsgJnF1b3Q7ZnVuY3Rpb24mcXVvdDsgKGZpcnN0KSAmcXVvdDthcml0eSZxdW90OyAmcXVvdDtzdGFjayZxdW90OyAodGFpbHMpICZxdW90O2FyaXR5JnF1b3Q7ICZxdW90O3N0YWNrJnF1b3Q7Cgooc2NoZW1lZnkpICZxdW90O2V4cHJlc3Npb24mcXVvdDsgJnF1b3Q7YXJpdHktaGFzaCZxdW90Owpjb21tZW50OgojdHJ1ZQooMDAyKSAmcXVvdDtsaXN0JnF1b3Q7IChzY2hlbWVmeSEpICgwMDIpICZxdW90O3JldmVyc2UmcXVvdDsgJnF1b3Q7ZXhwcmVzc2lvbiZxdW90OyAmcXVvdDthcml0eS1oYXNoJnF1b3Q7IChzdGFjaykKCihzZW50ZW5jZS1sZXNzPykgJnF1b3Q7c2VudGVuY2UxJnF1b3Q7ICZxdW90O3NlbnRlbmNlMiZxdW90Owpjb21tZW50OgooMDAyKSAmcXVvdDtudWxsPyZxdW90OyAmcXVvdDtzZW50ZW5jZTImcXVvdDsKJnF1b3Q7I2YmcXVvdDsKCihzZW50ZW5jZS1sZXNzPykgJnF1b3Q7c2VudGVuY2UxJnF1b3Q7ICZxdW90O3NlbnRlbmNlMiZxdW90Owpjb21tZW50OgooMDAyKSAmcXVvdDtudWxsPyZxdW90OyAmcXVvdDtzZW50ZW5jZTEmcXVvdDsKJnF1b3Q7I3QmcXVvdDsKCihzZW50ZW5jZS1sZXNzPykgJnF1b3Q7c2VudGVuY2UxJnF1b3Q7ICZxdW90O3NlbnRlbmNlMiZxdW90Owpjb21tZW50OgooY2hhcmFjdGVyLWxlc3M/KSAoMDAyKSAmcXVvdDtjYXImcXVvdDsgJnF1b3Q7c2VudGVuY2UxJnF1b3Q7ICgwMDIpICZxdW90O2NhciZxdW90OyAmcXVvdDtzZW50ZW5jZTImcXVvdDsKJnF1b3Q7I3QmcXVvdDsKCihzZW50ZW5jZS1sZXNzPykgJnF1b3Q7c2VudGVuY2UxJnF1b3Q7ICZxdW90O3NlbnRlbmNlMiZxdW90Owpjb21tZW50OgooY2hhcmFjdGVyLWxlc3M/KSAoMDAyKSAmcXVvdDtjYXImcXVvdDsgJnF1b3Q7c2VudGVuY2UyJnF1b3Q7ICgwMDIpICZxdW90O2NhciZxdW90OyAmcXVvdDtzZW50ZW5jZTEmcXVvdDsKJnF1b3Q7I2YmcXVvdDsKCihzZW50ZW5jZS1sZXNzPykgJnF1b3Q7c2VudGVuY2UxJnF1b3Q7ICZxdW90O3NlbnRlbmNlMiZxdW90Owpjb21tZW50OgojdHJ1ZQooc2VudGVuY2UtbGVzcz8pICgwMDIpICZxdW90O2NkciZxdW90OyAmcXVvdDtzZW50ZW5jZTEmcXVvdDsgKDAwMikgJnF1b3Q7Y2RyJnF1b3Q7ICZxdW90O3NlbnRlbmNlMiZxdW90OwoKKHNlbnRlbmNlcyEpICZxdW90O3Byb2dyYW0mcXVvdDsgJnF1b3Q7Y29sbGVjdDEmcXVvdDsgJnF1b3Q7Y29sbGVjdDImcXVvdDsKY29tbWVudDoKKDAwMikgJnF1b3Q7bnVsbD8mcXVvdDsgJnF1b3Q7cHJvZ3JhbSZxdW90OwomcXVvdDtjb2xsZWN0MiZxdW90OwoKKHNlbnRlbmNlcyEpICZxdW90O3Byb2dyYW0mcXVvdDsgJnF1b3Q7Y29sbGVjdDEmcXVvdDsgJnF1b3Q7Y29sbGVjdDImcXVvdDsKY29tbWVudDoKKDAwMykgJnF1b3Q7ZXF2PyZxdW90OyAjbmV3bGluZSAoMDAyKSAmcXVvdDtjYXImcXVvdDsgJnF1b3Q7cHJvZ3JhbSZxdW90Owooc2VudGVuY2VzISkgKDAwMikgJnF1b3Q7Y2RyJnF1b3Q7ICZxdW90O3Byb2dyYW0mcXVvdDsgbmlsICgwMDMpICZxdW90O2NvbnMmcXVvdDsgKDAwMikgJnF1b3Q7cmV2ZXJzZSZxdW90OyAmcXVvdDtjb2xsZWN0MSZxdW90OyAmcXVvdDtjb2xsZWN0MiZxdW90OwoKKHNlbnRlbmNlcyEpICZxdW90O3Byb2dyYW0mcXVvdDsgJnF1b3Q7Y29sbGVjdDEmcXVvdDsgJnF1b3Q7Y29sbGVjdDImcXVvdDsKY29tbWVudDoKI3RydWUKKHNlbnRlbmNlcyEpICgwMDIpICZxdW90O2NkciZxdW90OyAmcXVvdDtwcm9ncmFtJnF1b3Q7ICgwMDMpICZxdW90O2NvbnMmcXVvdDsgKDAwMikgJnF1b3Q7Y2FyJnF1b3Q7ICZxdW90O3Byb2dyYW0mcXVvdDsgJnF1b3Q7Y29sbGVjdDEmcXVvdDsgJnF1b3Q7Y29sbGVjdDImcXVvdDsKCihzZW50ZW5jZXMpICZxdW90O3Byb2dyYW0mcXVvdDsKY29tbWVudDoKI3RydWUKKDAwMikgJnF1b3Q7cmV2ZXJzZSZxdW90OyAoc2VudGVuY2VzISkgJnF1b3Q7cHJvZ3JhbSZxdW90OyBuaWwgbmlsCgooc29ydCFhKSAmcXVvdDtqdW1ibGUmcXVvdDsKY29tbWVudDoKI3RydWUKKDAwMykgJnF1b3Q7bWFwJnF1b3Q7ICZxdW90O2xpc3QmcXVvdDsgJnF1b3Q7anVtYmxlJnF1b3Q7Cgooc29ydCFiKSAmcXVvdDtjb21wYXJhdG9yJnF1b3Q7ICZxdW90O2p1bWJsZSZxdW90Owpjb21tZW50OgooMDAyKSAmcXVvdDtudWxsPyZxdW90OyAmcXVvdDtqdW1ibGUmcXVvdDsKbmlsCgooc29ydCFiKSAmcXVvdDtjb21wYXJhdG9yJnF1b3Q7ICZxdW90O2p1bWJsZSZxdW90Owpjb21tZW50OgooMDAyKSAmcXVvdDtudWxsPyZxdW90OyAoMDAyKSAmcXVvdDtjZHImcXVvdDsgJnF1b3Q7anVtYmxlJnF1b3Q7CiZxdW90O2p1bWJsZSZxdW90OwoKKHNvcnQhYikgJnF1b3Q7Y29tcGFyYXRvciZxdW90OyAmcXVvdDtqdW1ibGUmcXVvdDsKY29tbWVudDoKI3RydWUKKHNvcnQhYikgJnF1b3Q7Y29tcGFyYXRvciZxdW90OwogICAgICAgICAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7IChtZXJnZSkgJnF1b3Q7Y29tcGFyYXRvciZxdW90OyAoMDAyKSAmcXVvdDtjYXImcXVvdDsgJnF1b3Q7anVtYmxlJnF1b3Q7ICgwMDIpICZxdW90O2NhZHImcXVvdDsgJnF1b3Q7anVtYmxlJnF1b3Q7CiAgICAgICAgICAgICAgICAgICAgICAoc29ydCFiKSAmcXVvdDtjb21wYXJhdG9yJnF1b3Q7ICgwMDIpICZxdW90O2NkZHImcXVvdDsgJnF1b3Q7anVtYmxlJnF1b3Q7Cgooc29ydCkgJnF1b3Q7Y29tcGFyYXRvciZxdW90OyAmcXVvdDtqdW1ibGUmcXVvdDsKY29tbWVudDoKI3RydWUKKDAwMikgJnF1b3Q7Y2FyJnF1b3Q7IChzb3J0IWIpICZxdW90O2NvbXBhcmF0b3ImcXVvdDsgKHNvcnQhYSkgJnF1b3Q7anVtYmxlJnF1b3Q7Cgooc3BhY2UtbmV3bGluZSEpICZxdW90O3Byb2dyYW0mcXVvdDsgJnF1b3Q7Y29sbGVjdCZxdW90Owpjb21tZW50OgooMDAzKSAmcXVvdDtvciZxdW90OyAoMDAyKSAmcXVvdDtudWxsPyZxdW90OyAmcXVvdDtwcm9ncmFtJnF1b3Q7ICgwMDIpICZxdW90O251bGw/JnF1b3Q7ICgwMDIpICZxdW90O2NkciZxdW90OyAmcXVvdDtwcm9ncmFtJnF1b3Q7CigwMDMpICZxdW90O2FwcGVuZCZxdW90OyAmcXVvdDtwcm9ncmFtJnF1b3Q7ICZxdW90O2NvbGxlY3QmcXVvdDsKCihzcGFjZS1uZXdsaW5lISkgJnF1b3Q7cHJvZ3JhbSZxdW90OyAmcXVvdDtjb2xsZWN0JnF1b3Q7CmNvbW1lbnQ6CigwMDMpICZxdW90O2FuZCZxdW90OyAoMDAzKSAmcXVvdDtlcXY/JnF1b3Q7ICNzcGFjZSAoMDAyKSAmcXVvdDtjYXImcXVvdDsgJnF1b3Q7cHJvZ3JhbSZxdW90OwogICAgICAgICAgICAoMDAzKSAmcXVvdDtlcXY/JnF1b3Q7ICNuZXdsaW5lICgwMDIpICZxdW90O2NhZHImcXVvdDsgJnF1b3Q7cHJvZ3JhbSZxdW90Owooc3BhY2UtbmV3bGluZSEpICgwMDIpICZxdW90O2NkciZxdW90OyAmcXVvdDtwcm9ncmFtJnF1b3Q7ICZxdW90O2NvbGxlY3QmcXVvdDsKCihzcGFjZS1uZXdsaW5lISkgJnF1b3Q7cHJvZ3JhbSZxdW90OyAmcXVvdDtjb2xsZWN0JnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCihzcGFjZS1uZXdsaW5lISkgKDAwMikgJnF1b3Q7Y2RyJnF1b3Q7ICZxdW90O3Byb2dyYW0mcXVvdDsgKDAwMykgJnF1b3Q7Y29ucyZxdW90OyAoMDAyKSAmcXVvdDtjYXImcXVvdDsgJnF1b3Q7cHJvZ3JhbSZxdW90OyAmcXVvdDtjb2xsZWN0JnF1b3Q7Cgooc3BhY2UtbmV3bGluZSkgJnF1b3Q7cHJvZ3JhbSZxdW90Owpjb21tZW50OgojdHJ1ZQooMDAyKSAmcXVvdDtyZXZlcnNlJnF1b3Q7IChzcGFjZS1uZXdsaW5lISkgJnF1b3Q7cHJvZ3JhbSZxdW90OyBuaWwKCihzdGFjaykKY29tbWVudDoKI3RydWUKbmlsCgoodGFiLXJlcGxhY2UhKSAmcXVvdDtwcm9ncmFtJnF1b3Q7ICZxdW90O2NvbGxlY3QmcXVvdDsKY29tbWVudDoKKDAwMikgJnF1b3Q7bnVsbD8mcXVvdDsgJnF1b3Q7cHJvZ3JhbSZxdW90OwomcXVvdDtjb2xsZWN0JnF1b3Q7CgoodGFiLXJlcGxhY2UhKSAmcXVvdDtwcm9ncmFtJnF1b3Q7ICZxdW90O2NvbGxlY3QmcXVvdDsKY29tbWVudDoKKDAwMykgJnF1b3Q7ZXF2PyZxdW90OyAjdGFiICgwMDIpICZxdW90O2NhciZxdW90OyAmcXVvdDtwcm9ncmFtJnF1b3Q7Cih0YWItcmVwbGFjZSEpICgwMDIpICZxdW90O2NkciZxdW90OyAmcXVvdDtwcm9ncmFtJnF1b3Q7ICgwMDMpICZxdW90O2NvbnMmcXVvdDsgI3NwYWNlICZxdW90O2NvbGxlY3QmcXVvdDsKCih0YWItcmVwbGFjZSEpICZxdW90O3Byb2dyYW0mcXVvdDsgJnF1b3Q7Y29sbGVjdCZxdW90Owpjb21tZW50OgojdHJ1ZQoodGFiLXJlcGxhY2UhKSAoMDAyKSAmcXVvdDtjZHImcXVvdDsgJnF1b3Q7cHJvZ3JhbSZxdW90OyAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICgwMDIpICZxdW90O2NhciZxdW90OyAmcXVvdDtwcm9ncmFtJnF1b3Q7ICZxdW90O2NvbGxlY3QmcXVvdDsKCih0YWItcmVwbGFjZSkgJnF1b3Q7cHJvZ3JhbSZxdW90Owpjb21tZW50OgojdHJ1ZQooMDAyKSAmcXVvdDtyZXZlcnNlJnF1b3Q7ICh0YWItcmVwbGFjZSEpICZxdW90O3Byb2dyYW0mcXVvdDsgbmlsCgoodGFpbHMpICZxdW90O251bWJlciZxdW90OyAmcXVvdDtsaXN0JnF1b3Q7CmNvbW1lbnQ6CigwMDIpICZxdW90O251bGw/JnF1b3Q7ICZxdW90O2xpc3QmcXVvdDsKbmlsCgoodGFpbHMpICZxdW90O251bWJlciZxdW90OyAmcXVvdDtsaXN0JnF1b3Q7CmNvbW1lbnQ6CigwMDIpICZxdW90O3plcm8/JnF1b3Q7ICZxdW90O251bWJlciZxdW90OwomcXVvdDtsaXN0JnF1b3Q7CgoodGFpbHMpICZxdW90O251bWJlciZxdW90OyAmcXVvdDtsaXN0JnF1b3Q7CmNvbW1lbnQ6CigwMDMpICZxdW90OyZndDsmcXVvdDsgJnF1b3Q7bnVtYmVyJnF1b3Q7IDAKKHRhaWxzKSAoMDAzKSAmcXVvdDstJnF1b3Q7ICZxdW90O251bWJlciZxdW90OyAxICgwMDIpICZxdW90O2NkciZxdW90OyAmcXVvdDtsaXN0JnF1b3Q7CgoodG9wKSAmcXVvdDtzdGFjayZxdW90Owpjb21tZW50OgojdHJ1ZQooMDAyKSAmcXVvdDtjYXImcXVvdDsgJnF1b3Q7c3RhY2smcXVvdDsKCih0cnVlPykgJnF1b3Q7bm91bi1saXN0JnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCigwMDMpICZxdW90O2VxdWFsPyZxdW90OyAmcXVvdDtub3VuLWxpc3QmcXVvdDsgKDAwNikgJnF1b3Q7bGlzdCZxdW90OyAjIyAjdCAjciAjdSAjZQoKKHZlcmIpICZxdW90O3ZlcmItbGlzdCZxdW90Owpjb21tZW50OgoobGl0ZXJhbD8pICZxdW90O3ZlcmItbGlzdCZxdW90OwooMDAyKSAmcXVvdDtsaXN0JnF1b3Q7IChtYWtlLWxpdGVyYWwpICZxdW90O3ZlcmItbGlzdCZxdW90OwoKKHZlcmIpICZxdW90O3ZlcmItbGlzdCZxdW90Owpjb21tZW50OgojdHJ1ZQooMDAyKSAmcXVvdDtsaXN0JnF1b3Q7IChtYWtlLVpFRCkgJnF1b3Q7dmVyYi1saXN0JnF1b3Q7Cgood3JpdGUtYWxsKSAmcXVvdDtwcm9ncmFtJnF1b3Q7CmNvbW1lbnQ6CigwMDIpICZxdW90O251bGw/JnF1b3Q7ICZxdW90O3Byb2dyYW0mcXVvdDsKZXJyCgood3JpdGUtYWxsKSAmcXVvdDtwcm9ncmFtJnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCih3cml0ZS1hbGwpICgwMDMpICZxdW90O2JlZ2luJnF1b3Q7ICgwMDIpICZxdW90O3dyaXRlLWNoYXImcXVvdDsgKDAwMikgJnF1b3Q7Y2FyJnF1b3Q7ICZxdW90O3Byb2dyYW0mcXVvdDsgKDAwMikgJnF1b3Q7Y2RyJnF1b3Q7ICZxdW90O3Byb2dyYW0mcXVvdDsKCih6ZWQtJmd0O3NjaGVtZSEpICZxdW90O3ZhbHVlJnF1b3Q7ICZxdW90O2NvbGxlY3QmcXVvdDsKY29tbWVudDoKKDAwMikgJnF1b3Q7bnVsbD8mcXVvdDsgJnF1b3Q7dmFsdWUmcXVvdDsKKDAwMikgJnF1b3Q7cmV2ZXJzZSZxdW90OyAmcXVvdDtjb2xsZWN0JnF1b3Q7CgooemVkLSZndDtzY2hlbWUhKSAmcXVvdDt2YWx1ZSZxdW90OyAmcXVvdDtjb2xsZWN0JnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCih6ZWQtJmd0O3NjaGVtZSEpICghKSAmcXVvdDt2YWx1ZSZxdW90OyAoMDAzKSAmcXVvdDtjb25zJnF1b3Q7ICh6ZWQtJmd0O3NjaGVtZSkgKDEpICZxdW90O3ZhbHVlJnF1b3Q7ICZxdW90O2NvbGxlY3QmcXVvdDsKCih6ZWQtJmd0O3NjaGVtZSkgJnF1b3Q7dmFsdWUmcXVvdDsKY29tbWVudDoKKDAwMikgJnF1b3Q7bm90JnF1b3Q7ICgwMDIpICZxdW90O3BhaXI/JnF1b3Q7ICZxdW90O3ZhbHVlJnF1b3Q7CiZxdW90O3ZhbHVlJnF1b3Q7CgooemVkLSZndDtzY2hlbWUpICZxdW90O3ZhbHVlJnF1b3Q7CmNvbW1lbnQ6CiN0cnVlCih6ZWQtJmd0O3NjaGVtZSEpICZxdW90O3ZhbHVlJnF1b3Q7IG5pbAo=
(*) number1 number2
comment:
#true
(003) "*" number1 number2
(+) number1 number2
comment:
#true
(003) "+" number1 number2
(-) number1 number2
comment:
#true
(003) "-" number1 numbe2
(/) number1 number2
comment:
#true
(003) "/" number1 number2
(=) "value1" "value2"
comment:
#true
(003) "eqv?" "value1" "value2"
(add-between!) "item" "list" "collect"
comment:
(002) "null?" "list"
"collect"
(add-between!) "item" "list" "collect"
comment:
(002) "null?" (002) "cdr" "list"
(003) "cons" (002) "car" "list" "collect"
(add-between!) "item" "list" "collect"
comment:
#true
(add-between!) "item"
(002) "cdr" "list"
(003) "cons" "item" (003) "cons" (002) "car" "list" "collect"
(add-between) "item" "list"
comment:
#true
(002) "reverse" (add-between!) "item" "list" nil
(add-between-ra) "list" "item"
comment:
#true
(002) "reverse" (add-between!) "item" "list" nil
(alpha)
comment:
#true
(write-all) (rd) nil
"append"
(rd) nil "append" (newlines)
(by-four)
(function-sort)
(sentences)
(leading-newline)
(space-newline)
(tab-replace)
(newline-space-tab-repeats)
(newline-space)
(filter) not-return?
(replace-trailing-white-space) (read-all)
(application?) "expression"
comment:
#true
(004) "and" (002) "not" (002) "null?" "expression"
(002) "pair?" (002) "car" "expression"
(002) "null?" (002) "cdar" "expression"
(arity) "arity-hash" "function"
comment:
#true
(002) "cdr" (003) "assoc" "function" "arity-hash"
(arity-hash!) "clause"
comment:
#true
(003) "cons" (clause-name) "clause" (clause-arity) "clause"
(arity-hash) "program"
comment:
#true
(003) "append" (003) "map" arity-hash! "program" (003) "append" (009) "list" (003) "cons" "'ZED1" 1 (003) "cons" "'ZED!" 1 (003) "cons" "'ZED001" 1 (003) "cons" "'or" 2 (003) "cons" "'and" 2 (003) "cons" "'begin" 2 (003) "cons" "'ZEDc" 2 (003) "cons" "'quote" 1 (099) "list" (003) "cons" "'ZED002" 2 (003) "cons" "'ZED003" 3 (003) "cons" "'ZED004" 4 (003) "cons" "'ZED005" 5 (003) "cons" "'ZED006" 6 (003) "cons" "'ZED007" 7 (003) "cons" "'ZED008" 8 (003) "cons" "'ZED009" 9 (003) "cons" "'ZED010" 10 (003) "cons" "'ZED011" 11 (003) "cons" "'ZED012" 12 (003) "cons" "'ZED013" 13 (003) "cons" "'ZED014" 14 (003) "cons" "'ZED015" 15 (003) "cons" "'ZED016" 16 (003) "cons" "'ZED017" 17 (003) "cons" "'ZED018" 18 (003) "cons" "'ZED019" 19 (003) "cons" "'ZED020" 20 (003) "cons" "'ZED021" 21 (003) "cons" "'ZED022" 22 (003) "cons" "'ZED023" 23 (003) "cons" "'ZED024" 24 (003) "cons" "'ZED025" 25 (003) "cons" "'ZED026" 26 (003) "cons" "'ZED027" 27 (003) "cons" "'ZED028" 28 (003) "cons" "'ZED029" 29 (003) "cons" "'ZED030" 30 (003) "cons" "'ZED031" 31 (003) "cons" "'ZED032" 32 (003) "cons" "'ZED033" 33 (003) "cons" "'ZED034" 34 (003) "cons" "'ZED035" 35 (003) "cons" "'ZED036" 36 (003) "cons" "'ZED037" 37 (003) "cons" "'ZED038" 38 (003) "cons" "'ZED039" 39 (003) "cons" "'ZED040" 40 (003) "cons" "'ZED041" 41 (003) "cons" "'ZED042" 42 (003) "cons" "'ZED043" 43 (003) "cons" "'ZED044" 44 (003) "cons" "'ZED045" 45 (003) "cons" "'ZED046" 46 (003) "cons" "'ZED047" 47 (003) "cons" "'ZED048" 48 (003) "cons" "'ZED049" 49 (003) "cons" "'ZED050" 50 (003) "cons" "'ZED051" 51 (003) "cons" "'ZED052" 52 (003) "cons" "'ZED053" 53 (003) "cons" "'ZED054" 54 (003) "cons" "'ZED055" 55 (003) "cons" "'ZED056" 56 (003) "cons" "'ZED057" 57 (003) "cons" "'ZED058" 58 (003) "cons" "'ZED059" 59 (003) "cons" "'ZED060" 60 (003) "cons" "'ZED061" 61 (003) "cons" "'ZED062" 62 (003) "cons" "'ZED063" 63 (003) "cons" "'ZED064" 64 (003) "cons" "'ZED065" 65 (003) "cons" "'ZED066" 66 (003) "cons" "'ZED067" 67 (003) "cons" "'ZED068" 68 (003) "cons" "'ZED069" 69 (003) "cons" "'ZED070" 70 (003) "cons" "'ZED071" 71 (003) "cons" "'ZED072" 72 (003) "cons" "'ZED073" 73 (003) "cons" "'ZED074" 74 (003) "cons" "'ZED075" 75 (003) "cons" "'ZED076" 76 (003) "cons" "'ZED077" 77 (003) "cons" "'ZED078" 78 (003) "cons" "'ZED079" 79 (003) "cons" "'ZED080" 80 (003) "cons" "'ZED081" 81 (003) "cons" "'ZED082" 82 (003) "cons" "'ZED083" 83 (003) "cons" "'ZED084" 84 (003) "cons" "'ZED085" 85 (003) "cons" "'ZED086" 86 (003) "cons" "'ZED087" 87 (003) "cons" "'ZED088" 88 (003) "cons" "'ZED089" 89 (003) "cons" "'ZED090" 90 (003) "cons" "'ZED091" 91 (003) "cons" "'ZED092" 92 (003) "cons" "'ZED093" 93 (003) "cons" "'ZED094" 94 (003) "cons" "'ZED095" 95 (003) "cons" "'ZED096" 96 (003) "cons" "'ZED097" 97 (003) "cons" "'ZED098" 98 (003) "cons" "'ZED099" 99
(by-four!) "sentences" "collect"
comment:
(002) "null?" "sentences"
"collect"
(by-four!) "sentences" "collect"
comment:
#true
(by-four!) (002) "cddddr" "sentences"
(003) "cons" (005) "list"
(002) "car" "sentences"
(002) "cadr" "sentences"
(002) "caddr" "sentences"
(002) "cadddr" "sentences"
"collect"
(by-four) "sentences"
comment:
#true
(002) "reverse" (by-four!) "sentences" nil
(by-three!) "sentences" "collect"
comment:
(002) "null?" "sentences"
"collect"
(by-three!) "sentences" "collect"
comment:
#true
(by-three!) (002) "cdddr" "sentences"
(003) "cons" (004) "list"
(002) "car" "sentences"
(002) "cadr" "sentences"
(002) "caddr" "sentences"
"collect"
(by-three) "sentences"
comment:
#true
(002) "reverse" (by-three!) "sentences" nil
(character-less?) "character1" "character2"
comment:
#true
(003) "<" (002) "char->integer" "character1" (002) "char->integer" "character2"
(clause-arguments) "clause"
comment:
#true
(002) "cadr" "clause"
(clause-arguments-agree) "clause1" "clause2"
comment:
(003) "equal?" (clause-arguments) "clause1" (clause-arguments) "clause2"
(clause-arguments) "clause1"
(clause-arity) "clause"
comment:
#true
(002) "length" (clause-arguments) "clause"
(clause-body) "clause"
comment:
#true
(002) "cddr" "clause"
(clause-less?) "clause1" "clause2"
comment:
#true
(sentence-less?) (002) "car" "clause1" (002) "car" "clause2"
(clause-name) "clause"
comment:
#true
(002) "car" "clause"
(clause-name-agree) "clause1" "clause2"
comment:
(003) "eq?" (clause-name) "clause1" (clause-name) "clause2"
(clause-name) "clause1"
(combine-all!) "program" "collect"
comment:
(002) "null?" "program"
"collect"
(combine-all!) "program" "collect"
comment:
(002) "null?" (002) "cdr" "program"
(003) "cons" (002) "car" "program" "collect"
(combine-all!) "program" "collect"
comment:
(003) "eq?" (clause-name) (002) "car" "program" (clause-name) (002) "cadr" "program"
(combine-all!) (combine-head-clauses) "program" "collect"
(combine-all!) "program" "collect"
comment:
#true
(combine-all!) (002) "cdr" "program" (003) "cons" (002) "car" "program" "collect"
(combine-all) "program"
comment:
#true
(002) "reverse" (combine-all!) "program" nil
(combine-clauses) "clause1" "clause2"
comment:
#true
(003) "cons" (clause-name-agree) "clause1" "clause2"
(003) "cons" (clause-arguments-agree) "clause1" "clause2"
(003) "append" (clause-body) "clause1" (clause-body) "clause2"
(combine-head-clauses) "program"
comment:
#true
(003) "cons" (combine-clauses) (002) "car" "program" (002) "cadr" "program"
(002) "cddr" "program"
(combine-program-clauses) "program"
comment:
#true
(combine-all) (ready-program) "program"
(comp!)
comment:
#true
(comp!a) (combine-program-clauses)
(by-three)
(read-sentences)
(discard-comments)
(function-sort)
(sentences)
(leading-newline)
(space-newline)
(tab-replace)
(newline-space-tab-repeats)
(newline-space)
(filter) not-return? (replace-trailing-white-space) (read-all)
(comp!a) "combined"
comment:
#true
(comp!aa) (programize) "combined" (arity-hash) "combined"
(comp!aa) "programized"
comment:
#true
(002) "write" "programized"
(comp)
comment:
#true
(comp!)
(condefy!) "expressions" "collect"
comment:
(002) "null?" "expressions"
"collect"
(condefy!) "expressions" "collect"
comment:
#true
(condefy!) (002) "cddr" "expressions"
(003) "cons" (003) "append" (002) "car" "expressions"
(002) "cadr" "expressions"
"collect"
(condefy) "expressions"
comment:
#true
(002) "reverse" (condefy!) "expressions" nil
(cons) value1 value2
comment:
#true
(003) "cons" value1 value2
(count) number
comment:
#true
(c) number (count) (+) number 1
(count-by) step number
comment:
#true
(c) number (count-by) step (+) number step
(delay-wrap) "expression"
comment:
#true
(003) "list" "'delay" "expression"
(digit?) "character"
comment:
#true
(011) "or" (003) "eqv?" #0 "character" (003) "eqv?" #1 "character" (003) "eqv?" #2 "character" (003) "eqv?" #3 "character" (003) "eqv?" #4 "character" (003) "eqv?" #5 "character" (003) "eqv?" #6 "character" (003) "eqv?" #7 "character" (003) "eqv?" #8 "character" (003) "eqv?" #9 "character"
(discard-comments!) "program" "collect"
comment:
(002) "null?" "program"
"collect"
(discard-comments!) "program" "collect"
comment:
#true
(discard-comments!) (002) "cddddr" "program"
(003) "cons" (002) "cadddr" "program"
(003) "cons" (002) "caddr" "program"
(003) "cons" (002) "car" "program" "collect"
(discard-comments) "program"
comment:
#true
(002) "reverse" (discard-comments!) "program" nil
(dr!) "value"
comment:
(002) "pair?" "value"
(mp) dr! (first) 64 "value"
(dr!) "value"
comment:
#true
"value"
(dr) "value"
comment:
#true
(005) "begin" (002) "display" (pr) (dr!) "value" (001) "newline" (001) "newline" "value"
(drr) "value"
comment:
#true
(005) "begin" (002) "display" (pr) "value" (001) "newline" (001) "newline" "value"
(false?) "noun-list"
comment:
#true
(003) "equal?" "noun-list" (007) "list" ## #f #a #l #s #e
(fi) "function" "list"
comment:
(002) "null?" "list"
nil
(fi) "function" "list"
comment:
(002) "function" (1) "list"
(c) (1) "list" (fi) "function" (!) "list"
(fi) "function" "list"
comment:
#true
(fi) "function" (!) "list"
(filter!) "predicate" "list" "collect"
comment:
(002) "null?" "list"
"collect"
(filter!) "predicate" "list" "collect"
comment:
(002) "predicate" (002) "car" "list"
(filter!) "predicate" (002) "cdr" "list" (003) "cons" (002) "car" "list" "collect"
(filter!) "predicate" "list" "collect"
comment:
#true
(filter!) "predicate" (002) "cdr" "list" "collect"
(filter) "predicate" "list"
comment:
#true
(002) "reverse" (filter!) "predicate" "list" nil
(first!) "integer" "list" "collect"
comment:
(003) "or" (002) "zero?" "integer" (002) "null?" "list"
(002) "reverse" "collect"
(first!) "integer" "list" "collect"
comment:
(002) "not" (002) "pair?" "list"
(002) "reverse" (003) "cons" "list" "collect"
(first!) "integer" "list" "collect"
comment:
(003) ">" "integer" 0
(first!) (003) "-" "integer" 1 (!) "list" (003) "cons" (1) "list" "collect"
(first) "integer" "list"
comment:
(002) "not" (002) "pair?" "list"
"list"
(first) "integer" "list"
comment:
#true
(first!) "integer" "list" nil
(flatten!) list sub-list-found? collect
comment:
(and) (null?) list (not) sub-list-found?
(reverse) collect
(flatten!) list sub-list-found? collect
comment:
(null?) list
(flatten!) (reverse) collect #false nil
(flatten!) list sub-list-found? collect
comment:
(not) (pair?) list
(flatten!) nil sub-list-found? (cons) list collect
(flatten!) list sub-list-found? collect
comment:
(pair?) (1) list
(flatten!) (!) list #true (cons) (!) (1) list (cons) (1) (1) list collect
(flatten!) list sub-list-found? collect
comment:
(null?) (1) list
(flatten!) (!) list sub-list-found? collect
(flatten!) list sub-list-found? collect
comment:
#true
(flatten!) (!) list sub-list-found? (cons) (1) list collect
(flatten) list
comment:
#true
(flatten!) list #false nil
(for-each) effect list
comment:
#true
(003) "for-each" effect list
(function) "expression"
comment:
#true
(002) "caar" "expression"
(function-sort) "sentences"
comment:
#true
(rd) nil "append" (sort) clause-less? (by-four) "sentences"
(functionize) "clause" "arity-hash"
comment:
#true
(004) "list"
"'define"
(003) "cons" (clause-name) "clause" (clause-arguments) "clause"
(003) "cons" "'cond" (003) "append" (condefy) (map-with) schemefy
(clause-body) "clause"
"arity-hash"
(002) "list" (003) "list" "'else" err
(gather-count?!) "candidate"
comment:
#true
(008) "and"
(003) "=" 6 (002) "length" "candidate"
(003) "eqv?" #Z (002) "car" "candidate"
(003) "eqv?" #E (002) "cadr" "candidate"
(003) "eqv?" #D (002) "caddr" "candidate"
(003) "eqv?" #0 (002) "cadddr" "candidate"
(digit?) (002) "car" (002) "cddddr" "candidate"
(digit?) (002) "cadr" (002) "cddddr" "candidate"
(gather-count?) "symbol"
comment:
#true
(gather-count?!) (002) "string->list" (002) "symbol->string" "symbol"
(gather-noun) "sentence"
comment:
(002) "null?" "sentence"
nil
(gather-noun) "sentence"
comment:
(003) "eqv?" #space (002) "car" "sentence"
nil
(gather-noun) "sentence"
comment:
#true
(003) "cons" (002) "car" "sentence" (gather-noun) (002) "cdr" "sentence"
(gather-verb) "sentence"
comment:
(003) "eqv?" #) (002) "car" "sentence"
nil
(gather-verb) "sentence"
comment:
#true
(003) "cons" (002) "car" "sentence" (gather-verb) (002) "cdr" "sentence"
(gr) "garbage" "value"
comment:
#true
(003) "begin" (dr) "garbage" "value"
(grr) "garbage" "value"
comment:
#true
(003) "begin" (drr) "garbage" "value"
(leading-newline) "program"
comment:
(002) "null?" "program"
nil
(leading-newline) "program"
comment:
(003) "eqv?" #newline (002) "car" "program"
(002) "cdr" "program"
(leading-newline) "program"
comment:
#true
"program"
(literal?) "literal-list"
comment:
#true
(003) "eqv?" #" (002) "car" "literal-list"
(make-ZED) "ZED-list"
comment:
(003) "equal?" "ZED-list" (004) "list" #e #r #r
""'err""
(make-ZED) "ZED-list"
comment:
(003) "equal?" "ZED-list" (004) "list" #n #i #l
""'()""
(make-ZED) "ZED-list"
comment:
(003) "equal?" "ZED-list" (004) "list" #a #n #d
""and""
(make-ZED) "ZED-list"
comment:
(003) "equal?" "ZED-list" (003) "list" #o #r
""or""
(make-ZED) "ZED-list"
comment:
(003) "equal?" "ZED-list" (006) "list" #q #u #o #t #e
""quote""
(make-ZED) "ZED-list"
comment:
(003) "equal?" "ZED-list" (003) "list" #s #e
""begin""
(make-ZED) "ZED-list"
comment:
#true
(002) "list->string" (003) "append" (004) "list" #Z #E #D "ZED-list"
(make-character) "noun-list"
comment:
#true
(002) "list->string" (003) "cons" ## (003) "cons" #\ (002) "cdr" "noun-list"
(make-exact) "exact-list"
comment:
#true
(002) "list->string" (003) "append" (003) "list" ## #e "exact-list"
(make-literal) "literal-list"
comment:
#true
(002) "list->string" (002) "cdr" (002) "reverse" (002) "cdr" (002) "reverse" "literal-list"
(make-number-character) "noun-list"
comment:
#true
(002) "list->string" (004) "list" ## #\ (002) "integer->char"
(002) "string->number"
(002) "list->string"
(002) "cddr" "noun-list"
(map-with!) "function" "list" "extra" "collect"
comment:
(002) "null?" "list"
"collect"
(map-with!) "function" "list" "extra" "collect"
comment:
#true
(map-with!) "function"
(002) "cdr" "list"
"extra"
(003) "cons" (003) "function" (002) "car" "list" "extra"
"collect"
(map-with) "function" "list" "extra"
comment:
#true
(002) "reverse" (map-with!) "function" "list" "extra" nil
(merge!) "comparator" "list1" "list2" "collect"
comment:
(002) "null?" "list2"
(003) "append" (002) "reverse" "collect" "list1"
(merge!) "comparator" "list1" "list2" "collect"
comment:
(002) "null?" "list1"
(003) "append" (002) "reverse" "collect" "list2"
(merge!) "comparator" "list1" "list2" "collect"
comment:
(003) "comparator" (002) "car" "list2" (002) "car" "list1"
(merge!) "comparator" "list1" (002) "cdr" "list2" (003) "cons" (002) "car" "list2" "collect"
(merge!) "comparator" "list1" "list2" "collect"
comment:
#true
(merge!) "comparator" (002) "cdr" "list1" "list2" (003) "cons" (002) "car" "list1" "collect"
(merge) "comparator" "list1" "list2"
comment:
#true
(merge!) "comparator" "list1" "list2" nil
(mp) "function" "list"
comment:
(002) "null?" "list"
nil
(mp) "function" "list"
comment:
(002) "pair?" "list"
(c) (002) "function" (1) "list" (mp) "function" (!) "list"
(mp) "function" "list"
comment:
#true
(002) "function" "list"
(newline-space!) "program"
comment:
#true
(003) "cons" #newline (newline-space!a) "program"
(newline-space!a) "program"
comment:
#true
(newline-space!aa) "program" (002) "reverse" (newline-space!ab) "program" nil
(newline-space!aa) "program" "transformed"
comment:
(003) "equal?" "program" "transformed"
"program"
(newline-space!aa) "program" "transformed"
comment:
#true
(newline-space!a) "transformed"
(newline-space!ab) "program" "collect"
comment:
(002) "null?" "program"
"collect"
(newline-space!ab) "program" "collect"
comment:
(002) "null?" (002) "cdr" "program"
(003) "cons" (002) "car" "program" "collect"
(newline-space!ab) "program" "collect"
comment:
(003) "and" (003) "eqv?" #newline (002) "car" "program"
(003) "or" (003) "eqv?" #space (002) "cadr" "program"
(003) "eqv?" #tab (002) "cadr" "program"
(newline-space!ab) (002) "cdr" "program" "collect"
(newline-space!ab) "program" "collect"
comment:
#true
(newline-space!ab) (002) "cdr" "program" (003) "cons" (002) "car" "program" "collect"
(newline-space) "program"
comment:
#true
(newline-space!) "program"
(newline-space-tab-repeats!) "program" "collect"
comment:
(003) "or" (002) "null?" "program" (002) "null?" (002) "cdr" "program"
(003) "append" "program" "collect"
(newline-space-tab-repeats!) "program" "collect"
comment:
(003) "and" (003) "eqv?" #newline (002) "car" "program"
(003) "eqv?" #newline (002) "cadr" "program"
(newline-space-tab-repeats!) (002) "cdr" "program" "collect"
(newline-space-tab-repeats!) "program" "collect"
comment:
(003) "and" (003) "or" (003) "eqv?" #space (002) "car" "program"
(003) "eqv?" #tab (002) "car" "program"
(003) "or" (003) "eqv?" #space (002) "cadr" "program"
(003) "eqv?" #tab (002) "cadr" "program"
(newline-space-tab-repeats!) (002) "cdr" "program" "collect"
(newline-space-tab-repeats!) "program" "collect"
comment:
#true
(newline-space-tab-repeats!) (002) "cdr" "program" (003) "cons" (002) "car" "program" "collect"
(newline-space-tab-repeats) "program"
comment:
#true
(002) "reverse" (newline-space-tab-repeats!) "program" nil
(newlines) "clauses"
comment:
#true
(add-between-ra) (map-with) add-between-ra "clauses" (002) "list" #newline
(002) "list" (003) "list" #newline #newline
(normal-character?) "noun-list"
comment:
#true
(003) "eqv?" (002) "car" "noun-list" ##
(not) value
comment:
#true
(002) "not" value
(not-return?) "character"
comment:
#true
(002) "not" (003) "eqv?" #return "character"
(noun!) "noun-list" "number?"
comment:
"number?"
(make-exact) "noun-list"
(noun!) "noun-list" "number?"
comment:
(literal?) "noun-list"
(make-literal) "noun-list"
(noun!) "noun-list" "number?"
comment:
(true?) "noun-list"
""#t""
(noun!) "noun-list" "number?"
comment:
(false?) "noun-list"
""#f""
(noun!) "noun-list" "number?"
comment:
(number-character?) "noun-list"
(make-number-character) "noun-list"
(noun!) "noun-list" "number?"
comment:
(normal-character?) "noun-list"
(make-character) "noun-list"
(noun!) "noun-list" "number?"
comment:
#true
(make-ZED) "noun-list"
(noun) "noun-list"
comment:
#true
(noun!) "noun-list" (002) "string->number" (002) "list->string" "noun-list"
(null?) value
comment:
#true
(002) "null?" value
(number-character?) "noun-list"
comment:
#true
(004) "and"
(003) "eqv?" (002) "car" "noun-list" ##
(003) "eqv?" (002) "cadr" "noun-list" #0
(002) "not" (002) "null?" (002) "cddr" "noun-list"
(pair?) value
comment:
#true
(002) "pair?" value
(pop) "stack"
comment:
#true
(002) "cdr" "stack"
(pr!) "value" "output-string"
comment:
#true
(003) "begin"
(003) "display" (pr!a) "value" nil
"output-string"
(pr!b) "output-string" (002) "get-output-string" "output-string"
(pr!a) "value" "collect"
comment:
(002) "char?" "value"
(pr!aa) (002) "list->string" (003) "list" ## "value" "collect"
(pr!a) "value" "collect"
comment:
(002) "string?" "value"
(pr!aa) (004) "string-append" ""\""" "value" ""\""" "collect"
(pr!a) "value" "collect"
comment:
(002) "symbol?" "value"
(pr!aa) (002) "symbol->string" "value" "collect"
(pr!a) "value" "collect"
comment:
(002) "number?" "value"
(pr!aa) (002) "number->string" "value" "collect"
(pr!a) "value" "collect"
comment:
(003) "and" (002) "boolean?" "value" "value"
(pr!aa) ""#true"" "collect"
(pr!a) "value" "collect"
comment:
(002) "boolean?" "value"
(pr!aa) ""#false"" "collect"
(pr!a) "value" "collect"
comment:
(002) "null?" "value"
(002) "reverse" "collect"
(pr!a) "value" "collect"
comment:
#true
(pr!a) (!) "value" (003) "cons" (pr!a) (1) "value" nil "collect"
(pr!aa) "string" "collect"
comment:
(002) "null?" "collect"
"string"
(pr!aa) "string" "collect"
comment:
#true
(002) "reverse" (003) "cons" "string" (003) "cons" ""."" "collect"
(pr!b) "output-string" "value"
comment:
#true
(003) "begin" (002) "close-output-port" "output-string" "value"
(pr) "value"
comment:
#true
(pr!) "value" (001) "open-output-string"
(programize) "program" "arity-hash"
comment:
#true
(003) "cons" "'begin" (map-with) functionize "program" "arity-hash"
(push) "object" "stack"
comment:
#true
(003) "cons" "object" "stack"
(rd!) "function" "list"
comment:
(002) "null?" (!) "list"
(1) "list"
(rd!) "function" "list"
comment:
#true
(rd!) "function" (003) "cons" (003) "function" (1) (!) "list" (1) "list" (!) (!) "list"
(rd) "final" "function" "list"
comment:
#true
(rd!) "function" (003) "cons" "final" (002) "reverse" "list"
(read-all!) "collect"
comment:
#true
(read-all!a) (001) "read-char" "collect"
(read-all!a) "character" "collect"
comment:
(002) "eof-object?" "character"
"collect"
(read-all!a) "character" "collect"
comment:
#true
(read-all!) (003) "cons" "character" "collect"
(read-all)
comment:
#true
(002) "reverse" (read-all!) nil
(read-sentence!a) "sentence" "collect"
comment:
(002) "null?" "sentence"
"collect"
(read-sentence!a) "sentence" "collect"
comment:
(003) "eqv?" #space (002) "car" "sentence"
(read-sentence!a) (002) "cdr" "sentence" "collect"
(read-sentence!a) "sentence" "collect"
comment:
(003) "eqv?" #( (002) "car" "sentence"
(read-sentence!aa) "sentence" (gather-verb) (002) "cdr" "sentence" "collect"
(read-sentence!a) "sentence" "collect"
comment:
#true
(read-sentence!ab) "sentence" (gather-noun) "sentence" "collect"
(read-sentence!aa) "sentence" "gather-verb" "collect"
comment:
#true
(read-sentence!a) (tails) (003) "+" 2 (002) "length" "gather-verb"
"sentence"
(003) "cons" (verb) "gather-verb" "collect"
(read-sentence!ab) "sentence" "gather-noun" "collect"
comment:
#true
(read-sentence!a) (tails) (002) "length" "gather-noun" "sentence"
(003) "cons" (noun) "gather-noun" "collect"
(read-sentence!b) "list" "output-string"
comment:
#true
(003) "begin" (003) "display" "list" "output-string"
(read-sentence!ba) "output-string" (002) "get-output-string" "output-string"
(read-sentence!ba) "output-string" "get-output-string"
comment:
#true
(003) "begin" (002) "close-output-port" "output-string"
(read-sentence!baa) (002) "open-input-string" "get-output-string"
(read-sentence!baa) "input-string"
comment:
#true
(read-sentence!baaa) "input-string" (002) "read" "input-string"
(read-sentence!baaa) "input-string" "answer"
comment:
#true
(003) "begin" (002) "close-input-port" "input-string" "answer"
(read-sentence) "sentence"
comment:
#true
(read-sentence!b) (002) "reverse" (read-sentence!a) "sentence" nil (001) "open-output-string"
(read-sentences) "sentences"
comment:
#true
(003) "map" read-sentence "sentences"
(ready-clause) "clause"
comment:
#true
(003) "cons" (002) "caaar" "clause" (003) "cons" (002) "cdar" "clause" (002) "cdr" "clause"
(ready-program) "program"
comment:
#true
(003) "map" ready-clause "program"
(replace-trailing-white-space!) "program"
comment:
(002) "null?" "program"
nil
(replace-trailing-white-space!) "program"
comment:
(005) "or"
(003) "eqv?" (002) "car" "program" #space
(003) "eqv?" (002) "car" "program" #tab
(003) "eqv?" (002) "car" "program" #return
(003) "eqv?" (002) "car" "program" #newline
(replace-trailing-white-space!) (002) "cdr" "program"
(replace-trailing-white-space!) "program"
comment:
#true
(003) "cons" #newline "program"
(replace-trailing-white-space) "program"
comment:
#true
(002) "reverse" (replace-trailing-white-space!) (002) "reverse" "program"
(reverse) list
comment:
#true
(002) "reverse" list
(schemefy!) "expression" "arity-hash" "stack"
comment:
(002) "null?" "expression"
(top) "stack"
(schemefy!) "expression" "arity-hash" "stack"
comment:
(application?) "expression"
(schemefy!a) "expression" "arity-hash" "stack" (function) "expression"
(schemefy!) "expression" "arity-hash" "stack"
comment:
#true
(schemefy!) (002) "cdr" "expression" "arity-hash" (push) (002) "car" "expression" "stack"
(schemefy!a) "expression" "arity-hash" "stack" "function"
comment:
#true
(schemefy!aa) "expression" "arity-hash" "stack" "function" (arity) "arity-hash" "function"
(schemefy!aa) "expression" "arity-hash" "stack" "function" "arity"
comment:
(gather-count?) "function"
(schemefy!) (002) "cdr" "expression" "arity-hash" (push) (first) "arity" "stack"
(tails) "arity" "stack"
(schemefy!aa) "expression" "arity-hash" "stack" "function" "arity"
comment:
(003) "eq?" "function" "'ZED1"
(schemefy!) (002) "cdr" "expression"
"arity-hash"
(push) (005) "list"
"'if"
(003) "list" "'promise?" (003) "cons" "'car" (first) "arity" "stack"
(003) "list" "'force" (003) "cons" "'car" (first) "arity" "stack"
(003) "cons" "'car" (first) "arity" "stack"
(tails) "arity" "stack"
(schemefy!aa) "expression" "arity-hash" "stack" "function" "arity"
comment:
(003) "eq?" "function" "'ZED!"
(schemefy!) (002) "cdr" "expression"
"arity-hash"
(push) (005) "list"
"'if"
(003) "list" "'promise?" (003) "cons" "'cdr" (first) "arity" "stack"
(003) "list" "'force" (003) "cons" "'cdr" (first) "arity" "stack"
(003) "cons" "'cdr" (first) "arity" "stack"
(tails) "arity" "stack"
(schemefy!aa) "expression" "arity-hash" "stack" "function" "arity"
comment:
(003) "eq?" "function" "'ZEDc"
(schemefy!) (002) "cdr" "expression"
"arity-hash"
(push) (003) "cons" "'cons" (003) "map" delay-wrap (first) "arity" "stack"
(tails) "arity" "stack"
(schemefy!aa) "expression" "arity-hash" "stack" "function" "arity"
comment:
#true
(schemefy!) (002) "cdr" "expression"
"arity-hash"
(push) (003) "cons" "function" (first) "arity" "stack" (tails) "arity" "stack"
(schemefy) "expression" "arity-hash"
comment:
#true
(002) "list" (schemefy!) (002) "reverse" "expression" "arity-hash" (stack)
(sentence-less?) "sentence1" "sentence2"
comment:
(002) "null?" "sentence2"
"#f"
(sentence-less?) "sentence1" "sentence2"
comment:
(002) "null?" "sentence1"
"#t"
(sentence-less?) "sentence1" "sentence2"
comment:
(character-less?) (002) "car" "sentence1" (002) "car" "sentence2"
"#t"
(sentence-less?) "sentence1" "sentence2"
comment:
(character-less?) (002) "car" "sentence2" (002) "car" "sentence1"
"#f"
(sentence-less?) "sentence1" "sentence2"
comment:
#true
(sentence-less?) (002) "cdr" "sentence1" (002) "cdr" "sentence2"
(sentences!) "program" "collect1" "collect2"
comment:
(002) "null?" "program"
"collect2"
(sentences!) "program" "collect1" "collect2"
comment:
(003) "eqv?" #newline (002) "car" "program"
(sentences!) (002) "cdr" "program" nil (003) "cons" (002) "reverse" "collect1" "collect2"
(sentences!) "program" "collect1" "collect2"
comment:
#true
(sentences!) (002) "cdr" "program" (003) "cons" (002) "car" "program" "collect1" "collect2"
(sentences) "program"
comment:
#true
(002) "reverse" (sentences!) "program" nil nil
(sort!a) "jumble"
comment:
#true
(003) "map" "list" "jumble"
(sort!b) "comparator" "jumble"
comment:
(002) "null?" "jumble"
nil
(sort!b) "comparator" "jumble"
comment:
(002) "null?" (002) "cdr" "jumble"
"jumble"
(sort!b) "comparator" "jumble"
comment:
#true
(sort!b) "comparator"
(003) "cons" (merge) "comparator" (002) "car" "jumble" (002) "cadr" "jumble"
(sort!b) "comparator" (002) "cddr" "jumble"
(sort) "comparator" "jumble"
comment:
#true
(002) "car" (sort!b) "comparator" (sort!a) "jumble"
(space-newline!) "program" "collect"
comment:
(003) "or" (002) "null?" "program" (002) "null?" (002) "cdr" "program"
(003) "append" "program" "collect"
(space-newline!) "program" "collect"
comment:
(003) "and" (003) "eqv?" #space (002) "car" "program"
(003) "eqv?" #newline (002) "cadr" "program"
(space-newline!) (002) "cdr" "program" "collect"
(space-newline!) "program" "collect"
comment:
#true
(space-newline!) (002) "cdr" "program" (003) "cons" (002) "car" "program" "collect"
(space-newline) "program"
comment:
#true
(002) "reverse" (space-newline!) "program" nil
(stack)
comment:
#true
nil
(tab-replace!) "program" "collect"
comment:
(002) "null?" "program"
"collect"
(tab-replace!) "program" "collect"
comment:
(003) "eqv?" #tab (002) "car" "program"
(tab-replace!) (002) "cdr" "program" (003) "cons" #space "collect"
(tab-replace!) "program" "collect"
comment:
#true
(tab-replace!) (002) "cdr" "program" (003) "cons" (002) "car" "program" "collect"
(tab-replace) "program"
comment:
#true
(002) "reverse" (tab-replace!) "program" nil
(tails) "number" "list"
comment:
(002) "null?" "list"
nil
(tails) "number" "list"
comment:
(002) "zero?" "number"
"list"
(tails) "number" "list"
comment:
(003) ">" "number" 0
(tails) (003) "-" "number" 1 (002) "cdr" "list"
(top) "stack"
comment:
#true
(002) "car" "stack"
(true?) "noun-list"
comment:
#true
(003) "equal?" "noun-list" (006) "list" ## #t #r #u #e
(verb) "verb-list"
comment:
(literal?) "verb-list"
(002) "list" (make-literal) "verb-list"
(verb) "verb-list"
comment:
#true
(002) "list" (make-ZED) "verb-list"
(write-all) "program"
comment:
(002) "null?" "program"
err
(write-all) "program"
comment:
#true
(write-all) (003) "begin" (002) "write-char" (002) "car" "program" (002) "cdr" "program"
(zed->scheme!) "value" "collect"
comment:
(002) "null?" "value"
(002) "reverse" "collect"
(zed->scheme!) "value" "collect"
comment:
#true
(zed->scheme!) (!) "value" (003) "cons" (zed->scheme) (1) "value" "collect"
(zed->scheme) "value"
comment:
(002) "not" (002) "pair?" "value"
"value"
(zed->scheme) "value"
comment:
#true
(zed->scheme!) "value" nil