v =  { } 
 
waiting =  False 
 
def  replace_low_and_cap( text,  splitBy,  joinBy) :
    text =  text.split ( splitBy.lower ( ) ) 
    text =  joinBy.join ( text) 
    text =  text.split ( splitBy.title ( ) ) 
    text =  joinBy.join ( text) 
    return  text
 
def  replace_all( text,  replaceWith,  *splitList) :
    text =  replace_low_and_cap( text,  replaceWith,  replaceWith) 
    for  splitBy in  splitList:
        text =  replace_low_and_cap( text,  splitBy,  replaceWith) 
    return  text
 
def  replace_all_dash( text,  replaceWith,  *splitList) :
    text =  replace_all( text,  replaceWith,  replaceWith) 
    for  splitBy in  splitList:
        text =  replace_all( text,  replaceWith,  "-" +splitBy) 
    return  text
 
def  replace_first( text,  replaceWith,  spl) :
    text =  text.split ( spl) 
    if  len ( text)  >=  2 :
        text[ 0 ]  +=  replaceWith+text.pop ( 1 ) 
    text =  spl.join ( text) 
    return  text
 
def  echo( l= "" ) :
    print ( l,  end= "" ) 
    return  l
 
def  println( l= "" ) :
    print ( l) 
    return  l
 
def  compileCode( inp) :
    storeIn =  None 
    shouldEcho =  None 
    shouldPrint =  None 
    inp =  replace_first( inp,  '-r"' ,  '"' ) 
    inp =  replace_all_dash( inp,  "-r" ,  "raw" ) 
    inp =  replace_all_dash( inp,  "-a" ,  "alias" ,  "v" ,  "var" ) 
    inp =  replace_all_dash( inp,  "-e" ,  "echo" ) 
    inp =  replace_all_dash( inp,  "-p" ,  "print" ,  "println" ) 
    inp =  replace_all_dash( inp,  "True" ,  "yes" ,  "positive" ) 
    inp =  replace_all_dash( inp,  "False" ,  "no" ,  "negative" ) 
    inp =  replace_all_dash( inp,  "None" ,  "nothing" ,  "empty" ,  "undefined" ,  "null" ) 
    spl =  inp.split ( "-e" ) 
    if  len ( spl)  >=  2 :
        i =  len ( spl) -1 
        del  spl[ i] 
        shouldEcho =  True 
    spl =  "-e" .join ( spl) 
    spl =  spl.split ( "-p" ) 
    if  len ( spl)  >=  2 :
        i =  len ( spl) -1 
        del  spl[ i] 
        shouldPrint =  True 
    spl =  "-p" .join ( spl) 
    spl =  spl.split ( "-ifvar" ) 
    if  len ( spl)  >=  2 :
        i =  len ( spl) -1 
        words =  spl[ i] .split ( ) 
        varTxt =  'var[' +words.pop ( i) +']' 
        cond =  varTxt+'words' 
        t =  test ( cond) 
        if  t !=  True :
            return 
    spl =  "-ifvar" .join ( spl) 
    spl =  spl.split ( "-if" ) 
    if  len ( spl)  >=  2 :
        i =  len ( spl) -1 
        cond =  eval ( spl.pop ( i) ) 
        t =  test ( cond) 
        if  t !=  True :
            return 
    spl =  "if" .join ( spl) 
    spl =  spl.split ( "-store in " ) 
    if  len ( spl)  >=  2 :
        i =  len ( spl)  - 1 
        storeIn =  eval ( spl.pop ( i) ) 
    spl =  "-store in " .join ( spl) 
    spl =  spl.split ( "-r" ) 
    if  len ( spl)  >=  2 :
        cmd  =  "." .join ( spl.pop ( 0 ) .split ( ) ) 
        args =  "-r" .join ( spl) .split ( "-a" ) 
        for  i in  range ( len ( args) ) :
            if  i >  0 :
                a =  "v[" +args[ i] +"]" 
                args[ i]  =  a
        args =  "" .join ( args) 
        if  shouldEcho:
            code  =  "{0}({1}, shouldEcho=True)" .format ( cmd ,  args) 
        elif  shouldPrint:
            code  =  "{}({}, shouldPrint=True)" .format ( cmd ,  args) 
        else :
            code  =  "{0}({1})" .format ( cmd ,  args) 
    else :
        spl =  "" .join ( spl) 
        spl =  spl.split ( "-a" ) 
        if  len ( spl)  >=  2 :
            cmd  =  "." .join ( spl[ 0 ] .split ( ) ) 
            for  i in  range ( len ( spl) ) :
                if  i >  0 :
                    a =  "v[" +spl[ i] +"]" 
                    spl[ i]  =  a
            spl.pop ( 0 ) 
            spl =  "" .join ( spl) 
            if  shouldEcho:
                code  =  "{}({}, shouldEcho=True)" .format ( cmd ,  spl) 
            elif  shouldPrint:
                code  =  "{}({}, shouldPrint=True)" .format ( cmd ,  spl) 
            else :
                code  =  "{}({})" .format ( cmd ,  spl) 
        else :
            spl =  "" .join ( spl) 
            spl =  spl.split ( "-f" ) 
            if  len ( spl)  >=  2 :
        	    cmd  =  spl.pop ( 0 ) 
        	    arg =  spl.pop ( 0 ) 
        	    cmd  =  "" .join ( cmd ) 
        	    cmd  =  "." .join ( cmd .split ( ) ) 
        	    if  shouldEcho:
        	        code  =  "{}({}(), shouldEcho=True)" .format ( cmd ,  arg) 
        	    elif  shouldPrint:
        	        code  =  "{}({}(), shouldPrint=True)" .format ( cmd ,  arg) 
        	    else :
        	        code  =  "{}({}())" .format ( cmd ,  arg) 
            else :
                spl =  "" .join ( spl) 
                spl =  "." .join ( spl.split ( ) ) 
 
                if  shouldEcho:
                    code  =  "{}(shouldEcho=True)" .format ( spl) 
                elif  shouldPrint:
                    code  =  "{}(shouldPrint=True)" .format ( spl) 
                else :
                    code  =  "{}()" .format ( spl) 
    if  type ( storeIn)  ==  str : 
        code  =  """temp = {} 
v["{}"] = temp""" .format ( code ,  storeIn) 
    return  code 
def  runCode( inp) :
    code  =  compileCode( inp) 
    eval ( code ) 
waiting =  False 
 
def  q( shouldPrint= False ,  shouldEcho= False ) :
    if  shouldEcho:
        return  echo( "Quitting ..." ) 
    if  shouldPrint:
        return  println( "Quitting ..." ) 
    exit( ) 
    raise  Exception ( "Error exiting app" ) 
 
def  printAliases( ) :
    for  var in  v:
        val =  v[ var] 
        if  type ( val)  ==  str :
            val =  "\" " +val+"\" " 
        print ( var+": " +str ( val) ) 
 
def  getAliases( ) :
    return  v
 
def  amountOfAliases( ) :
    return  len ( v) 
 
def  alias( var,  i= None ,  shouldPrint= False ,  shouleEcho= False ) :
    if  i !=  None :
        v[ var]  =  i
    if  shouldEcho:
        echo( var+":" , v[ var] ) 
    if  shouldPrint:
        println( var+":" , v[ var] ) 
    return  v[ var] 
 
class  error:
    def  __init__ ( self ,  e= "" ,  fatal= False ,  shouldPrint= False ,  shouldEcho= False ) :
        if  fatal ==  False :
            self .txt  =  "Error" 
        else :
            self .txt  =  "Fatal error" 
        if  e !=  "" :
            self .txt  +=  ": " +e
        if  shouldPrint:
            println( str ( self ) ) 
        if  shouldEcho:
            echo( str ( self ) ) 
 
    @ staticmethod 
    def  fatal( e= "" ,  shouldPrint= False ,  shouldEcho= False ) :
        err =  error( e,  True ,  shouldPrint= shouldPrint,  shouldEcho= shouldEcho) 
        q( shouldPrint,  shouldEcho) 
        return  err
 
    @ staticmethod 
    def  makeFatal( self ,  shouldPrint= False ,  sholdEcho= False ) :
        e =  "" .join ( self .txt .split ( "Error: " ) ) 
        return  type ( self ) .fatal ( e,  shouldPrint,  shouldEcho) 
 
    def  __str__ ( self ) :
        return  self .txt 
 
def  python( c) :
    eval ( c) 
 
class  ui:
    @ staticmethod 
    def  userinput( prompt) :
        pauseLoop( ) 
        inp =  input ( prompt) 
        print ( ) 
        return ( inp) 
 
def  test ( cond,  shouldEcho= False ,  shouldPrint= False ) :
    if  type ( cond)  ==  bool :
        if  shouldEcho:
            echo( cond) 
        if  shouldPrint:
            println( cond) 
        return  cond
    else :
        error.fatal ( "Condition is invalid." ) 
 
def  testcond( cond) :
    pauseLoop( ) 
    quit =  False 
    cond =  str ( cond) 
    while  not  quit:
        test  =  input ( "if the condition is:\n $ " ) 
        println( test ) 
        if  test  ==  "exit" :
            quit =  True 
        ifTrue =  input ( "Do:\n $ " ) 
        println( ifTrue) 
        if  test  ==  "other" :
            quit =  True 
            condtest =  "True" 
        else :
        	condtest =  cond+test 
        if  eval ( condtest) :
            quit =  True 
            runCode( ifTrue) 
    playLoop( ) 
 
def  mainLoop( ) :
    print ( "Mainloop" ) 
    while  waiting ==  False :
        inp =  input ( "\n $ " ) 
        println( inp) 
        runCode( inp) 
        for  var in  v:
            print ( var) 
        print ( "" ) 
 
def  pauseLoop( ) :
    waiting =  True 
 
def  playLoop( ) :
    waiting =  False 
    mainLoop( ) 
 
playLoop( ) 
diA9IHt9Cgp3YWl0aW5nID0gRmFsc2UKCmRlZiByZXBsYWNlX2xvd19hbmRfY2FwKHRleHQsIHNwbGl0QnksIGpvaW5CeSk6CiAgICB0ZXh0ID0gdGV4dC5zcGxpdChzcGxpdEJ5Lmxvd2VyKCkpCiAgICB0ZXh0ID0gam9pbkJ5LmpvaW4odGV4dCkKICAgIHRleHQgPSB0ZXh0LnNwbGl0KHNwbGl0QnkudGl0bGUoKSkKICAgIHRleHQgPSBqb2luQnkuam9pbih0ZXh0KQogICAgcmV0dXJuIHRleHQKCmRlZiByZXBsYWNlX2FsbCh0ZXh0LCByZXBsYWNlV2l0aCwgKnNwbGl0TGlzdCk6CiAgICB0ZXh0ID0gcmVwbGFjZV9sb3dfYW5kX2NhcCh0ZXh0LCByZXBsYWNlV2l0aCwgcmVwbGFjZVdpdGgpCiAgICBmb3Igc3BsaXRCeSBpbiBzcGxpdExpc3Q6CiAgICAgICAgdGV4dCA9IHJlcGxhY2VfbG93X2FuZF9jYXAodGV4dCwgc3BsaXRCeSwgcmVwbGFjZVdpdGgpCiAgICByZXR1cm4gdGV4dAoKZGVmIHJlcGxhY2VfYWxsX2Rhc2godGV4dCwgcmVwbGFjZVdpdGgsICpzcGxpdExpc3QpOgogICAgdGV4dCA9IHJlcGxhY2VfYWxsKHRleHQsIHJlcGxhY2VXaXRoLCByZXBsYWNlV2l0aCkKICAgIGZvciBzcGxpdEJ5IGluIHNwbGl0TGlzdDoKICAgICAgICB0ZXh0ID0gcmVwbGFjZV9hbGwodGV4dCwgcmVwbGFjZVdpdGgsICItIitzcGxpdEJ5KQogICAgcmV0dXJuIHRleHQKCmRlZiByZXBsYWNlX2ZpcnN0KHRleHQsIHJlcGxhY2VXaXRoLCBzcGwpOgogICAgdGV4dCA9IHRleHQuc3BsaXQoc3BsKQogICAgaWYgbGVuKHRleHQpID49IDI6CiAgICAgICAgdGV4dFswXSArPSByZXBsYWNlV2l0aCt0ZXh0LnBvcCgxKQogICAgdGV4dCA9IHNwbC5qb2luKHRleHQpCiAgICByZXR1cm4gdGV4dAoKZGVmIGVjaG8obD0iIik6CiAgICBwcmludChsLCBlbmQ9IiIpCiAgICByZXR1cm4gbAogICAgCmRlZiBwcmludGxuKGw9IiIpOgogICAgcHJpbnQobCkKICAgIHJldHVybiBsCgpkZWYgY29tcGlsZUNvZGUoaW5wKToKICAgIHN0b3JlSW4gPSBOb25lCiAgICBzaG91bGRFY2hvID0gTm9uZQogICAgc2hvdWxkUHJpbnQgPSBOb25lCiAgICBpbnAgPSByZXBsYWNlX2ZpcnN0KGlucCwgJy1yIicsICciJykKICAgIGlucCA9IHJlcGxhY2VfYWxsX2Rhc2goaW5wLCAiLXIiLCAicmF3IikKICAgIGlucCA9IHJlcGxhY2VfYWxsX2Rhc2goaW5wLCAiLWEiLCAiYWxpYXMiLCAidiIsICJ2YXIiKQogICAgaW5wID0gcmVwbGFjZV9hbGxfZGFzaChpbnAsICItZSIsICJlY2hvIikKICAgIGlucCA9IHJlcGxhY2VfYWxsX2Rhc2goaW5wLCAiLXAiLCAicHJpbnQiLCAicHJpbnRsbiIpCiAgICBpbnAgPSByZXBsYWNlX2FsbF9kYXNoKGlucCwgIlRydWUiLCAieWVzIiwgInBvc2l0aXZlIikKICAgIGlucCA9IHJlcGxhY2VfYWxsX2Rhc2goaW5wLCAiRmFsc2UiLCAibm8iLCAibmVnYXRpdmUiKQogICAgaW5wID0gcmVwbGFjZV9hbGxfZGFzaChpbnAsICJOb25lIiwgIm5vdGhpbmciLCAiZW1wdHkiLCAidW5kZWZpbmVkIiwgIm51bGwiKQogICAgc3BsID0gaW5wLnNwbGl0KCItZSIpCiAgICBpZiBsZW4oc3BsKSA+PSAyOgogICAgICAgIGkgPSBsZW4oc3BsKS0xCiAgICAgICAgZGVsIHNwbFtpXQogICAgICAgIHNob3VsZEVjaG8gPSBUcnVlCiAgICBzcGwgPSAiLWUiLmpvaW4oc3BsKQogICAgc3BsID0gc3BsLnNwbGl0KCItcCIpCiAgICBpZiBsZW4oc3BsKSA+PSAyOgogICAgICAgIGkgPSBsZW4oc3BsKS0xCiAgICAgICAgZGVsIHNwbFtpXQogICAgICAgIHNob3VsZFByaW50ID0gVHJ1ZQogICAgc3BsID0gIi1wIi5qb2luKHNwbCkKICAgIHNwbCA9IHNwbC5zcGxpdCgiLWlmdmFyIikKICAgIGlmIGxlbihzcGwpID49IDI6CiAgICAgICAgaSA9IGxlbihzcGwpLTEKICAgICAgICB3b3JkcyA9IHNwbFtpXS5zcGxpdCgpCiAgICAgICAgdmFyVHh0ID0gJ3ZhclsnK3dvcmRzLnBvcChpKSsnXScKICAgICAgICBjb25kID0gdmFyVHh0Kyd3b3JkcycKICAgICAgICB0ID0gdGVzdChjb25kKQogICAgICAgIGlmIHQgIT0gVHJ1ZToKICAgICAgICAgICAgcmV0dXJuCiAgICBzcGwgPSAiLWlmdmFyIi5qb2luKHNwbCkKICAgIHNwbCA9IHNwbC5zcGxpdCgiLWlmIikKICAgIGlmIGxlbihzcGwpID49IDI6CiAgICAgICAgaSA9IGxlbihzcGwpLTEKICAgICAgICBjb25kID0gZXZhbChzcGwucG9wKGkpKQogICAgICAgIHQgPSB0ZXN0KGNvbmQpCiAgICAgICAgaWYgdCAhPSBUcnVlOgogICAgICAgICAgICByZXR1cm4KICAgIHNwbCA9ICJpZiIuam9pbihzcGwpCiAgICBzcGwgPSBzcGwuc3BsaXQoIi1zdG9yZSBpbiAiKQogICAgaWYgbGVuKHNwbCkgPj0gMjoKICAgICAgICBpID0gbGVuKHNwbCkgLSAxCiAgICAgICAgc3RvcmVJbiA9IGV2YWwoc3BsLnBvcChpKSkKICAgIHNwbCA9ICItc3RvcmUgaW4gIi5qb2luKHNwbCkKICAgIHNwbCA9IHNwbC5zcGxpdCgiLXIiKQogICAgaWYgbGVuKHNwbCkgPj0gMjoKICAgICAgICBjbWQgPSAiLiIuam9pbihzcGwucG9wKDApLnNwbGl0KCkpCiAgICAgICAgYXJncyA9ICItciIuam9pbihzcGwpLnNwbGl0KCItYSIpCiAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGFyZ3MpKToKICAgICAgICAgICAgaWYgaSA+IDA6CiAgICAgICAgICAgICAgICBhID0gInZbIithcmdzW2ldKyJdIgogICAgICAgICAgICAgICAgYXJnc1tpXSA9IGEKICAgICAgICBhcmdzID0gIiIuam9pbihhcmdzKQogICAgICAgIGlmIHNob3VsZEVjaG86CiAgICAgICAgICAgIGNvZGUgPSAiezB9KHsxfSwgc2hvdWxkRWNobz1UcnVlKSIuZm9ybWF0KGNtZCwgYXJncykKICAgICAgICBlbGlmIHNob3VsZFByaW50OgogICAgICAgICAgICBjb2RlID0gInt9KHt9LCBzaG91bGRQcmludD1UcnVlKSIuZm9ybWF0KGNtZCwgYXJncykKICAgICAgICBlbHNlOgogICAgICAgICAgICBjb2RlID0gInswfSh7MX0pIi5mb3JtYXQoY21kLCBhcmdzKQogICAgZWxzZToKICAgICAgICBzcGwgPSAiIi5qb2luKHNwbCkKICAgICAgICBzcGwgPSBzcGwuc3BsaXQoIi1hIikKICAgICAgICBpZiBsZW4oc3BsKSA+PSAyOgogICAgICAgICAgICBjbWQgPSAiLiIuam9pbihzcGxbMF0uc3BsaXQoKSkKICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHNwbCkpOgogICAgICAgICAgICAgICAgaWYgaSA+IDA6CiAgICAgICAgICAgICAgICAgICAgYSA9ICJ2WyIrc3BsW2ldKyJdIgogICAgICAgICAgICAgICAgICAgIHNwbFtpXSA9IGEKICAgICAgICAgICAgc3BsLnBvcCgwKQogICAgICAgICAgICBzcGwgPSAiIi5qb2luKHNwbCkKICAgICAgICAgICAgaWYgc2hvdWxkRWNobzoKICAgICAgICAgICAgICAgIGNvZGUgPSAie30oe30sIHNob3VsZEVjaG89VHJ1ZSkiLmZvcm1hdChjbWQsIHNwbCkKICAgICAgICAgICAgZWxpZiBzaG91bGRQcmludDoKICAgICAgICAgICAgICAgIGNvZGUgPSAie30oe30sIHNob3VsZFByaW50PVRydWUpIi5mb3JtYXQoY21kLCBzcGwpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBjb2RlID0gInt9KHt9KSIuZm9ybWF0KGNtZCwgc3BsKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNwbCA9ICIiLmpvaW4oc3BsKQogICAgICAgICAgICBzcGwgPSBzcGwuc3BsaXQoIi1mIikKICAgICAgICAgICAgaWYgbGVuKHNwbCkgPj0gMjoKICAgICAgICAJICAgIGNtZCA9IHNwbC5wb3AoMCkKICAgICAgICAJICAgIGFyZyA9IHNwbC5wb3AoMCkKICAgICAgICAJICAgIGNtZCA9ICIiLmpvaW4oY21kKQogICAgICAgIAkgICAgY21kID0gIi4iLmpvaW4oY21kLnNwbGl0KCkpCiAgICAgICAgCSAgICBpZiBzaG91bGRFY2hvOgogICAgICAgIAkgICAgICAgIGNvZGUgPSAie30oe30oKSwgc2hvdWxkRWNobz1UcnVlKSIuZm9ybWF0KGNtZCwgYXJnKQogICAgICAgIAkgICAgZWxpZiBzaG91bGRQcmludDoKICAgICAgICAJICAgICAgICBjb2RlID0gInt9KHt9KCksIHNob3VsZFByaW50PVRydWUpIi5mb3JtYXQoY21kLCBhcmcpCiAgICAgICAgCSAgICBlbHNlOgogICAgICAgIAkgICAgICAgIGNvZGUgPSAie30oe30oKSkiLmZvcm1hdChjbWQsIGFyZykKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHNwbCA9ICIiLmpvaW4oc3BsKQogICAgICAgICAgICAgICAgc3BsID0gIi4iLmpvaW4oc3BsLnNwbGl0KCkpCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmIHNob3VsZEVjaG86CiAgICAgICAgICAgICAgICAgICAgY29kZSA9ICJ7fShzaG91bGRFY2hvPVRydWUpIi5mb3JtYXQoc3BsKQogICAgICAgICAgICAgICAgZWxpZiBzaG91bGRQcmludDoKICAgICAgICAgICAgICAgICAgICBjb2RlID0gInt9KHNob3VsZFByaW50PVRydWUpIi5mb3JtYXQoc3BsKQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBjb2RlID0gInt9KCkiLmZvcm1hdChzcGwpCiAgICBpZiB0eXBlKHN0b3JlSW4pID09IHN0cjogCiAgICAgICAgY29kZSA9ICIiInRlbXAgPSB7fQp2WyJ7fSJdID0gdGVtcCIiIi5mb3JtYXQoY29kZSwgc3RvcmVJbikKICAgIHJldHVybiBjb2RlCmRlZiBydW5Db2RlKGlucCk6CiAgICBjb2RlID0gY29tcGlsZUNvZGUoaW5wKQogICAgZXZhbChjb2RlKQp3YWl0aW5nID0gRmFsc2UKCmRlZiBxKHNob3VsZFByaW50PUZhbHNlLCBzaG91bGRFY2hvPUZhbHNlKToKICAgIGlmIHNob3VsZEVjaG86CiAgICAgICAgcmV0dXJuIGVjaG8oIlF1aXR0aW5nIC4uLiIpCiAgICBpZiBzaG91bGRQcmludDoKICAgICAgICByZXR1cm4gcHJpbnRsbigiUXVpdHRpbmcgLi4uIikKICAgIGV4aXQoKQogICAgcmFpc2UgRXhjZXB0aW9uKCJFcnJvciBleGl0aW5nIGFwcCIpCgpkZWYgcHJpbnRBbGlhc2VzKCk6CiAgICBmb3IgdmFyIGluIHY6CiAgICAgICAgdmFsID0gdlt2YXJdCiAgICAgICAgaWYgdHlwZSh2YWwpID09IHN0cjoKICAgICAgICAgICAgdmFsID0gIlwiIit2YWwrIlwiIgogICAgICAgIHByaW50KHZhcisiOiAiK3N0cih2YWwpKQoKZGVmIGdldEFsaWFzZXMoKToKICAgIHJldHVybiB2CgpkZWYgYW1vdW50T2ZBbGlhc2VzKCk6CiAgICByZXR1cm4gbGVuKHYpCgpkZWYgYWxpYXModmFyLCBpPU5vbmUsIHNob3VsZFByaW50PUZhbHNlLCBzaG91bGVFY2hvPUZhbHNlKToKICAgIGlmIGkgIT0gTm9uZToKICAgICAgICB2W3Zhcl0gPSBpCiAgICBpZiBzaG91bGRFY2hvOgogICAgICAgIGVjaG8odmFyKyI6Iix2W3Zhcl0pCiAgICBpZiBzaG91bGRQcmludDoKICAgICAgICBwcmludGxuKHZhcisiOiIsdlt2YXJdKQogICAgcmV0dXJuIHZbdmFyXQogICAgCmNsYXNzIGVycm9yOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGU9IiIsIGZhdGFsPUZhbHNlLCBzaG91bGRQcmludD1GYWxzZSwgc2hvdWxkRWNobz1GYWxzZSk6CiAgICAgICAgaWYgZmF0YWwgPT0gRmFsc2U6CiAgICAgICAgICAgIHNlbGYudHh0ID0gIkVycm9yIgogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNlbGYudHh0ID0gIkZhdGFsIGVycm9yIgogICAgICAgIGlmIGUgIT0gIiI6CiAgICAgICAgICAgIHNlbGYudHh0ICs9ICI6ICIrZQogICAgICAgIGlmIHNob3VsZFByaW50OgogICAgICAgICAgICBwcmludGxuKHN0cihzZWxmKSkKICAgICAgICBpZiBzaG91bGRFY2hvOgogICAgICAgICAgICBlY2hvKHN0cihzZWxmKSkKICAgICAgICAgICAgCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgZmF0YWwoZT0iIiwgc2hvdWxkUHJpbnQ9RmFsc2UsIHNob3VsZEVjaG89RmFsc2UpOgogICAgICAgIGVyciA9IGVycm9yKGUsIFRydWUsIHNob3VsZFByaW50PXNob3VsZFByaW50LCBzaG91bGRFY2hvPXNob3VsZEVjaG8pCiAgICAgICAgcShzaG91bGRQcmludCwgc2hvdWxkRWNobykKICAgICAgICByZXR1cm4gZXJyCiAgICAKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBtYWtlRmF0YWwoc2VsZiwgc2hvdWxkUHJpbnQ9RmFsc2UsIHNob2xkRWNobz1GYWxzZSk6CiAgICAgICAgZSA9ICIiLmpvaW4oc2VsZi50eHQuc3BsaXQoIkVycm9yOiAiKSkKICAgICAgICByZXR1cm4gdHlwZShzZWxmKS5mYXRhbChlLCBzaG91bGRQcmludCwgc2hvdWxkRWNobykKICAgICAgICAKICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLnR4dAoKZGVmIHB5dGhvbihjKToKICAgIGV2YWwoYykKCmNsYXNzIHVpOgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIHVzZXJpbnB1dChwcm9tcHQpOgogICAgICAgIHBhdXNlTG9vcCgpCiAgICAgICAgaW5wID0gaW5wdXQocHJvbXB0KQogICAgICAgIHByaW50KCkKICAgICAgICByZXR1cm4oaW5wKQogICAgCmRlZiB0ZXN0KGNvbmQsIHNob3VsZEVjaG89RmFsc2UsIHNob3VsZFByaW50PUZhbHNlKToKICAgIGlmIHR5cGUoY29uZCkgPT0gYm9vbDoKICAgICAgICBpZiBzaG91bGRFY2hvOgogICAgICAgICAgICBlY2hvKGNvbmQpCiAgICAgICAgaWYgc2hvdWxkUHJpbnQ6CiAgICAgICAgICAgIHByaW50bG4oY29uZCkKICAgICAgICByZXR1cm4gY29uZAogICAgZWxzZToKICAgICAgICBlcnJvci5mYXRhbCgiQ29uZGl0aW9uIGlzIGludmFsaWQuIikKCmRlZiB0ZXN0Y29uZChjb25kKToKICAgIHBhdXNlTG9vcCgpCiAgICBxdWl0ID0gRmFsc2UKICAgIGNvbmQgPSBzdHIoY29uZCkKICAgIHdoaWxlIG5vdCBxdWl0OgogICAgICAgIHRlc3QgPSBpbnB1dCgiaWYgdGhlIGNvbmRpdGlvbiBpczpcbiQgIikKICAgICAgICBwcmludGxuKHRlc3QpCiAgICAgICAgaWYgdGVzdCA9PSAiZXhpdCI6CiAgICAgICAgICAgIHF1aXQgPSBUcnVlCiAgICAgICAgaWZUcnVlID0gaW5wdXQoIkRvOlxuJCAiKQogICAgICAgIHByaW50bG4oaWZUcnVlKQogICAgICAgIGlmIHRlc3QgPT0gIm90aGVyIjoKICAgICAgICAgICAgcXVpdCA9IFRydWUKICAgICAgICAgICAgY29uZHRlc3QgPSAiVHJ1ZSIKICAgICAgICBlbHNlOgogICAgICAgIAljb25kdGVzdCA9IGNvbmQrdGVzdAogICAgICAgIGlmIGV2YWwoY29uZHRlc3QpOgogICAgICAgICAgICBxdWl0ID0gVHJ1ZQogICAgICAgICAgICBydW5Db2RlKGlmVHJ1ZSkKICAgIHBsYXlMb29wKCkKCmRlZiBtYWluTG9vcCgpOgogICAgcHJpbnQoIk1haW5sb29wIikKICAgIHdoaWxlIHdhaXRpbmcgPT0gRmFsc2U6CiAgICAgICAgaW5wID0gaW5wdXQoIlxuJCAiKQogICAgICAgIHByaW50bG4oaW5wKQogICAgICAgIHJ1bkNvZGUoaW5wKQogICAgICAgIGZvciB2YXIgaW4gdjoKICAgICAgICAgICAgcHJpbnQodmFyKQogICAgICAgIHByaW50KCIiKQoKZGVmIHBhdXNlTG9vcCgpOgogICAgd2FpdGluZyA9IFRydWUKCmRlZiBwbGF5TG9vcCgpOgogICAgd2FpdGluZyA9IEZhbHNlCiAgICBtYWluTG9vcCgpCgpwbGF5TG9vcCgp