From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.1.3 (2006-06-01) on yquem.inria.fr X-Spam-Level: * X-Spam-Status: No, score=1.4 required=5.0 tests=AWL,DNS_FROM_RFC_ABUSE, DNS_FROM_RFC_POST autolearn=disabled version=3.1.3 X-Original-To: caml-list@yquem.inria.fr Delivered-To: caml-list@yquem.inria.fr Received: from mail4-relais-sop.national.inria.fr (mail4-relais-sop.national.inria.fr [192.134.164.105]) by yquem.inria.fr (Postfix) with ESMTP id 0DE1FBBC4 for ; Sun, 8 Mar 2009 01:20:09 +0100 (CET) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Am4CADqesknZkrEHmWdsb2JhbACCHYpUiDEBAQEBAQgLCgcRrV2BB48OAQSEBQ X-IronPort-AV: E=Sophos;i="4.38,321,1233529200"; d="ml'?scan'208";a="36235667" Received: from web27007.mail.ukl.yahoo.com ([217.146.177.7]) by mail4-smtp-sop.national.inria.fr with SMTP; 08 Mar 2009 01:20:07 +0100 Received: (qmail 92631 invoked by uid 60001); 8 Mar 2009 00:20:06 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.fr; s=s1024; t=1236471606; bh=YcXajlXF2mE0BqXtSiKH6h+dj2Le47lT5tgw5YZ1c+E=; h=Message-ID:X-YMail-OSG:Received:X-Mailer:References:Date:From:Subject:To:MIME-Version:Content-Type; b=AcZAO7lNRRByZHJJyz9nXYQC5jcl3hdkKzpCi9rn2PIxZLAay0QAF2dX622ZSLgK1+OW3Mujpm4+lHmAa+3nuZS3MgP9iwFMytY7EWBaowDYC15KHswBVdMZiVixFwgW1+vcLfhd1I1yUOWJgI7tGOXHPa8WxvLRXzFSgc+rtV0= DomainKey-Signature:a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.fr; h=Message-ID:X-YMail-OSG:Received:X-Mailer:References:Date:From:Subject:To:MIME-Version:Content-Type; b=LuRESwgD2K5JzIbSw16Qec4UFXEKAPTRL2Ir3NsGd2u7NDzBlagHncdWKMT8dAcQgYNP39BFibg5Cf0mu5GTzmmEn+0ij2Xldy4HaF+e22CnCmHdklnM3cddOb99MrhCNcTjnsmAMauLgUUtAu9RfgxY50DvaHXJ+F1fH8TVeCY=; Message-ID: <597512.92153.qm@web27007.mail.ukl.yahoo.com> X-YMail-OSG: KsvZLv0VM1nKOoNpKFb3QkJooHhro.GnoXUWjHo4dC_Z1PUBas8lh98v1MxYi7XEKhI9k26ImAYJsLJ2T7fvVsk.MrgQja7xJy2HtyXiK8a__gdjXBtS.bfCVFm6eUz3bI.V95U6H3DpEhHq3kGxuQjz6lMsNNmnKjB5sI9ZGpcIWQxqzWG._JgYMBcJGVWUWI7aTRKQBausHqmUvrRZAhuSLgRmeMc4_ATZqPIh Received: from [82.242.132.106] by web27007.mail.ukl.yahoo.com via HTTP; Sun, 08 Mar 2009 00:20:06 GMT X-Mailer: YahooMailRC/1155.45 YahooMailWebService/0.7.289.1 References: <200903072352.18127.jon@ffconsultancy.com> <200903080012.10433.jon@ffconsultancy.com> Date: Sun, 8 Mar 2009 00:20:06 +0000 (GMT) From: Matthieu Wipliez Subject: Re : [Caml-list] camlp4 stream parser syntax To: caml-list@yquem.inria.fr MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="0-1016260411-1236471606=:92153" X-Spam: no; 0.00; matthieu:01 camlp:01 parser:01 syntax:01 parser:01 camlp:01 lexer:01 lexer:01 cduce:01 cduce:01 cheers:01 matthieu:01 syntax:01 ocaml:01 beginner's:01 X-Attachments: cset="utf-8" type="application/octet-stream" name="cal_parser.ml" name="cal_parser.ml" --0-1016260411-1236471606=:92153 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Joel asked me the parser so I gave it to him, but maybe it can be of use fo= r others, so here it is.=0AApart from the code specific to the application,= it gives a good example of a complete Camlp4 lexer/parser for a language.= =0A=0ANote that for the lexer I started from a custom lexer made by Pietro = Abate ( https://www.cduce.org/~abate/how-add-a-custom-lexer-camlp4 ) from t= he cduce lexer.=0A=0ACheers,=0AMatthieu=0A=0A=0A=0A----- Message d'origine = ----=0A> Swings and roundabouts, IMHO. Camlp4 is higher level, more capable= and the =0A> syntax is clearer but the documentation is so poor that I hav= e given up every =0A> time I have tried to use it either because the defaul= t lexer was insufficient =0A> or because I could not figure out how to extr= act the necessary data from the =0A> OCaml grammar.=0A> =0A> Matthieu's exa= mple looks fantastic though...=0A> =0A> -- =0A> Dr Jon Harrop, Flying Frog = Consultancy Ltd.=0A> http://www.ffconsultancy.com/?e=0A> =0A> _____________= __________________________________=0A> Caml-list mailing list. Subscription= management:=0A> http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list= =0A> Archives: http://caml.inria.fr=0A> Beginner's list: http://groups.yaho= o.com/group/ocaml_beginners=0A> Bug reports: http://caml.inria.fr/bin/caml-= bugs=0A=0A=0A=0A --0-1016260411-1236471606=:92153 Content-Type: application/octet-stream; name="cal_parser.ml" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="cal_parser.ml" KCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKQooKiBDYWwyQyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICopCigqIENvcHlyaWdodCAoYykgMjAw Ny0yMDA4LCBJRVRSL0lOU0Egb2YgUmVubmVzLiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKikKKCogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqKQooKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopCigqIFRo aXMgc29mdHdhcmUgaXMgZ292ZXJuZWQgYnkgdGhlIENlQ0lMTC1CIGxpY2Vu c2UgdW5kZXIgRnJlbmNoIGxhdyBhbmQgICAgKikKKCogYWJpZGluZyBieSB0 aGUgcnVsZXMgb2YgZGlzdHJpYnV0aW9uIG9mIGZyZWUgc29mdHdhcmUuIFlv dSBjYW4gIHVzZSwgICAgICAqKQooKiBtb2RpZnkgYW5kLyBvciByZWRpc3Ry aWJ1dGUgdGhlIHNvZnR3YXJlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ2VD SUxMLUIgICopCigqIGxpY2Vuc2UgYXMgY2lyY3VsYXRlZCBieSBDRUEsIENO UlMgYW5kIElOUklBIGF0IHRoZSBmb2xsb3dpbmcgVVJMICAgICAgICAgKikK KCogImh0dHA6Ly93d3cuY2VjaWxsLmluZm8iLiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKQooKiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICopCigqIE1hdHRoaWV1IFdJUExJRVog PE1hdHRoaWV1LldpcGxpZXpAaW5zYS1yZW5uZXMuZnIgICAgICAgICAgICAg ICAgICAgICAgICAgKikKKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKQoKb3BlbiBDYWwyY191dGlsCm9wZW4gUHJpbnRmCgpsZXQgdGltZSA9 IHJlZiAwLgoKKCogQ2FtbHA0IHN0dWZmICopCm1vZHVsZSBDYW1scDRMb2Mg PSBDYW1scDQuU3RydWN0LkxvYwptb2R1bGUgTGV4ZXIgPSBDYWxfbGV4ZXIu TWFrZShDYW1scDRMb2MpCm1vZHVsZSBHcmFtID0gQ2FtbHA0LlN0cnVjdC5H cmFtbWFyLlN0YXRpYy5NYWtlKExleGVyKQoKKCoqIFtjb252ZXJ0X2xvYyBf bG9jXSByZXR1cm5zIGEgW0xvYy50XSBmcm9tIGEgW0NhbWxwNC5TdHJ1Y3Qu TG9jLnRdLiAqKQpsZXQgY29udmVydF9sb2MgX2xvYyA9CglsZXQgKGZpbGVf bmFtZSwgc3RhcnRfbGluZSwgc3RhcnRfYm9sLCBzdGFydF9vZmYsCgkJc3Rv cF9saW5lLCBzdG9wX2JvbCwgc3RvcF9vZmYsIF8pID0gQ2FtbHA0TG9jLnRv X3R1cGxlIF9sb2MgaW4KCXsKCQlMb2MuZmlsZV9uYW1lID0gZmlsZV9uYW1l OwoJCUxvYy5zdGFydCA9IHtMb2MubGluZSA9IHN0YXJ0X2xpbmU7IExvYy5i b2wgPSBzdGFydF9ib2w7IExvYy5vZmYgPSBzdGFydF9vZmYgfTsKCQlMb2Mu c3RvcCA9IHtMb2MubGluZSA9IHN0b3BfbGluZTsgTG9jLmJvbCA9IHN0b3Bf Ym9sOyBMb2Mub2ZmID0gc3RvcF9vZmYgfTsKCX0KCm9wZW4gTGV4ZXIKCigq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKikKKCoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKQooKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiopCgooKiogW2JvcCBfbG9jIGUxIG9wIGUyXSByZXR1cm5z IFtDYWxhc3QuRXhwckJPcCAoY29udmVydF9sb2MgX2xvYywgZTEsIG9wLCBl MildICopCmxldCBib3AgX2xvYyBlMSBvcCBlMiA9IENhbGFzdC5FeHByQk9w IChjb252ZXJ0X2xvYyBfbG9jLCBlMSwgb3AsIGUyKQoKKCoqIFt1b3AgX2xv YyBlMSBvcCBlMl0gcmV0dXJucyBbQ2FsYXN0LkV4cHJVT3AgKGNvbnZlcnRf bG9jIF9sb2MsIGUsIG9wKV0gKikKbGV0IHVvcCBfbG9jIG9wIGUgPSBDYWxh c3QuRXhwclVPcCAoY29udmVydF9sb2MgX2xvYywgb3AsIGUpCgooKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiopCigqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKikKKCoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKQooKiBUeXBlIGRlZmluaXRpb25zICopCgooKiogRGVmaW5lcyBk aWZmZXJlbnQga2luZHMgb2YgdHlwZSBhdHRyaWJ1dGVzLiAqKQp0eXBlIHR5 cGVfYXR0ciA9Cgl8IEV4cHJBdHRyIG9mIENhbGFzdC5leHByICgqKiBBIHR5 cGUgYXR0cmlidXRlIHRoYXQgcmVmZXJlbmNlcyBhbiBleHByZXNzaW9uLiAq KQoJfCBUeXBlQXR0ciBvZiBDYWxhc3QudHlwZV9kZWYgKCoqIEEgdHlwZSBh dHRyaWJ1dGUgdGhhdCByZWZlcmVuY2VzIGEgdHlwZS4gKikKCigqKiBbZmlu ZF9zaXplIF9sb2MgdHlwZUF0dHJzXSBhdHRlbXBzIHRvIGZpbmQgYSBbdHlw ZV9hdHRyXSBuYW1lZCBbInNpemUiXQogdGhhdCBpcyBhbiBbRXhwckF0dHJd LiBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIFtDYWxhc3QuZXhwcl0uICopCmxl dCBmaW5kX3NpemUgX2xvYyB0eXBlQXR0cnMgPQoJbGV0IGF0dHIgPSAKCQlM aXN0LmFzc29jICJzaXplIiB0eXBlQXR0cnMKCWluCiAgbWF0Y2ggYXR0ciB3 aXRoCgkJfCBFeHByQXR0ciBlIC0+IGUKCQl8IF8gLT4KCQkgIEFzdGhlbHBl ci5mYWlsd2l0aCAoY29udmVydF9sb2MgX2xvYykgInNpemUgbXVzdCBiZSBh biBleHByZXNzaW9uISIKCigqKiBbZmluZF90eXBlIF9sb2MgdHlwZUF0dHJz XSBhdHRlbXBzIHRvIGZpbmQgYSBbdHlwZV9hdHRyXSBuYW1lZCBbInR5cGUi XQogdGhhdCBpcyBhbiBbVHlwZUF0dHJdLiBUaGUgZnVuY3Rpb24gcmV0dXJu cyBhIFtDYWxhc3QudHlwZV9kZWZdLiAqKQpsZXQgZmluZF90eXBlIF9sb2Mg dHlwZUF0dHJzID0KCWxldCBhdHRyID0gCgkJTGlzdC5hc3NvYyAidHlwZSIg dHlwZUF0dHJzCglpbgogIG1hdGNoIGF0dHIgd2l0aAoJCXwgVHlwZUF0dHIg dCAtPiB0CgkJfCBfIC0+IEFzdGhlbHBlci5mYWlsd2l0aCAoY29udmVydF9s b2MgX2xvYykgInR5cGUgbXVzdCBiZSBhIHR5cGUhIgoKKCoqIFtmaW5kX3Np emVfb3JfZGVmYXVsdCBfbG9jIHR5cGVBdHRyc10gYXR0ZW1wcyB0byBmaW5k IGEgW3R5cGVfYXR0cl0KIG5hbWVkIFsic2l6ZSJdIHRoYXQgaXMgYW4gW0V4 cHJBdHRyXS4gSWYgbm90IGZvdW5kLCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0 aGUKIGRlZmF1bHQgc2l6ZSBnaXZlbiBhcyBhbiBbaW50XS4gKikKbGV0IGZp bmRfc2l6ZV9vcl9kZWZhdWx0IF9sb2MgdHlwZUF0dHJzIGRlZmF1bHQgPQoJ KCogc2l6ZSBpbiBiaXRzICopCgl0cnkKCQlmaW5kX3NpemUgX2xvYyB0eXBl QXR0cnMKCXdpdGggTm90X2ZvdW5kIC0+CiAgCSgqIG5vIHNpemUgaW5mb3Jt YXRpb24gZm91bmQsIGFzc3VtaW5nICJkZWZhdWx0IiBiaXRzLiAqKQogIAlD YWxhc3QuRXhwckludCAoY29udmVydF9sb2MgX2xvYywgZGVmYXVsdCkKCigq KiBbdHlwZV9vZl90eXBlRGVmIF9sb2MgbmFtZSB0eXBlQXR0cnNdIHJldHVy bnMgYSBbQ2FsYXN0LnR5cGVfZGVmXSBmcm9tIGEKIG5hbWUgYW5kIHR5cGUg YXR0cmlidXRlcyB0aGF0IHdlcmUgcGFyc2VkLiAqKQpsZXQgdHlwZV9vZl90 eXBlRGVmIF9sb2MgbmFtZSB0eXBlQXR0cnMgPQoJbWF0Y2ggbmFtZSB3aXRo CgkJfCAiYm9vbCIgLT4gQ2FsYXN0LlR5cGVCb29sCgkJfCAiaW50IiAtPiBD YWxhc3QuVHlwZUludCAoZmluZF9zaXplX29yX2RlZmF1bHQgX2xvYyB0eXBl QXR0cnMgMzIpCgkJfCAibGlzdCIgLT4KCQkJQXN0aGVscGVyLmZhaWx3aXRo IChjb252ZXJ0X2xvYyBfbG9jKQoJCQkJIlRoZSB0eXBlIFwibGlzdFwiIGlz IGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgXCJMaXN0XCIuIgoJCXwgIkxpc3Qi IC0+CgkJCSgqIGdldCBhIHR5cGUgKikKCQkJbGV0IHQgPQoJCQkJdHJ5CgkJ CQkJZmluZF90eXBlIF9sb2MgdHlwZUF0dHJzCgkJCSAgd2l0aCBOb3RfZm91 bmQgLT4KCQkJICAgIEFzdGhlbHBlci5mYWlsd2l0aCAoY29udmVydF9sb2Mg X2xvYykKCQkJCQkJIlJWQy1DQUwgcmVxdWlyZXMgdGhhdCBhbGwgbGlzdHMg aGF2ZSBhIHR5cGUuIgoJCQlpbgoJCQkKCQkJKCogYW5kIGEgc2l6ZSBpbiBu dW1iZXIgb2YgZWxlbWVudHMgKikKCQkJbGV0IHNpemUgPQoJCQkJdHJ5CgkJ CQkJZmluZF9zaXplIF9sb2MgdHlwZUF0dHJzCgkJCQl3aXRoIE5vdF9mb3Vu ZCAtPgoJCQkgICAgQXN0aGVscGVyLmZhaWx3aXRoIChjb252ZXJ0X2xvYyBf bG9jKQoJCQkJCQkiUlZDLUNBTCByZXF1aXJlcyB0aGF0IGFsbCBsaXN0cyBo YXZlIGEgc2l6ZS4iCgkJCWluCgkJCUNhbGFzdC5UeXBlTGlzdCAodCwgc2l6 ZSkKICAgIHwgInN0cmluZyIgLT4KCQkJQXN0aGVscGVyLmZhaWx3aXRoIChj b252ZXJ0X2xvYyBfbG9jKQoJCQkJIlRoZSB0eXBlIFwic3RyaW5nXCIgaXMg ZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBcIlN0cmluZ1wiLiIKCQl8ICJTdHJp bmciIC0+IENhbGFzdC5UeXBlU3RyCgkJfCAidWludCIgLT4gQ2FsYXN0LlR5 cGVVaW50IChmaW5kX3NpemVfb3JfZGVmYXVsdCBfbG9jIHR5cGVBdHRycyAz MikKCQl8IHQgLT4KCQkJbGV0IG1lc3NhZ2UgPSAiVGhlIHR5cGUgXCIiIF4g dCBeICJcIiBpcyBub3Qga25vd24uXG5cCgkJCSAgRGlkIHlvdSB3YW50IHRv IGRlY2xhcmUgYSB2YXJpYWJsZSBcIiIgXiB0IF4gIlwiPyBcCgkJCQlJZiB0 aGF0IGlzIHRoZSBjYXNlIHBsZWFzZSBzcGVjaWZ5IGl0cyB0eXBlLiIgaW4K CQkJQXN0aGVscGVyLmZhaWx3aXRoIChjb252ZXJ0X2xvYyBfbG9jKSBtZXNz YWdlCgooKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopCigqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKikKKCoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKQooKiBBY3RvciBkZWZpbml0aW9ucy4gKikK CigqKiBEZWZpbmVzIGRpZmZlcmVudCBraW5kcyBvZiBhY3RvciBkZWNsYXJh dGlvbnMuICopCnR5cGUgYWN0b3JfZGVjbCA9Cgl8IEFjdGlvbiBvZiBDYWxh c3QuYWN0aW9uICgqKiBBbiBhY3Rpb24gb2YgdHlwZSBbQ2FsYXN0LmFjdGlv bl0uICopCgl8IEZ1bmNEZWNsIG9mIENhbGFzdC5mdW5jICgqKiBBIGZ1bmN0 aW9uIGRlY2xhcmF0aW9uIGF0IHRoZSBhY3RvciBsZXZlbC4gKikKCXwgSW5p dGlhbGl6YXRpb24gb2YgQ2FsYXN0LmFjdGlvbiAoKiogQW4gaW5pdGlhbGl6 YXRpb24gYWN0aW9uIG9mIHR5cGUgW0NhbGFzdC5hY3Rpb25dLiAqKSAKCXwg UHJpb3JpdHlPcmRlciBvZiBDYWxhc3QudGFnIGxpc3QgbGlzdCAoKiogQW4g YWN0b3IgZGVjbGFyYXRpb24gb2YgdHlwZSBwcmlvcml0eSBvcmRlci4gKikK CXwgUHJvY0RlY2wgb2YgQ2FsYXN0LnByb2MgKCoqIEEgcHJvY2VkdXJlIGRl Y2xhcmF0aW9uIGF0IHRoZSBhY3RvciBsZXZlbC4gKikKCXwgVmFyRGVjbCBv ZiBDYWxhc3QudmFyX2luZm8gKCoqIEEgdmFyaWFibGUgZGVjbGFyYXRpb24g YXQgdGhlIGFjdG9yIGxldmVsLiAqKQoKbGV0IGdldF9zb21ldGhpbmcgcHJl ZCBtYXAgZGVjbGFyYXRpb25zID0KCWxldCAoYWN0aW9ucywgZGVjbGFyYXRp b25zKSA9IExpc3QucGFydGl0aW9uIHByZWQgZGVjbGFyYXRpb25zIGluCgls ZXQgYWN0aW9ucyA9IExpc3QubWFwIG1hcCBhY3Rpb25zIGluCgkoYWN0aW9u cywgZGVjbGFyYXRpb25zKQoKKCoqIFtnZXRfYWN0aW9ucyBkZWNsYXJhdGlv bnNdIHJldHVybnMgYSB0dXBsZSBbKGFjdGlvbnMsIGRlY2xhcmF0aW9ucyld IHdoZXJlCiBhY3Rpb25zIGlzIGEgbGlzdCBvZiBhY3Rpb25zIGFuZCBkZWNs YXJhdGlvbnMgdGhlIHJlbWFpbmluZyBkZWNsYXJhdGlvbnMuICopCmxldCBn ZXRfYWN0aW9ucyBkZWNsYXJhdGlvbnMgPQoJZ2V0X3NvbWV0aGluZwoJCShm dW5jdGlvbiBBY3Rpb24gXyAtPiB0cnVlIHwgXyAtPiBmYWxzZSkKCSAgKGZ1 bmN0aW9uIHwgQWN0aW9uIGEgLT4gYSB8IF8gLT4gZmFpbHdpdGggIm5ldmVy IGhhcHBlbnMiKQoJCWRlY2xhcmF0aW9ucwoKKCoqIFtnZXRfZnVuY3MgZGVj bGFyYXRpb25zXSByZXR1cm5zIGEgdHVwbGUgWyhmdW5jcywgZGVjbGFyYXRp b25zKV0gd2hlcmUKIGZ1bmNzIGlzIGEgbGlzdCBvZiBmdW5jdGlvbiBkZWNs YXJhdGlvbnMgYW5kIFtkZWNsYXJhdGlvbnNdIHRoZQogcmVtYWluaW5nIGRl Y2xhcmF0aW9ucy4gKikKbGV0IGdldF9mdW5jcyBkZWNsYXJhdGlvbnMgPQoJ Z2V0X3NvbWV0aGluZwoJCShmdW5jdGlvbiBGdW5jRGVjbCBfIC0+IHRydWUg fCBfIC0+IGZhbHNlKQoJICAoZnVuY3Rpb24gfCBGdW5jRGVjbCBmIC0+IGYg fCBfIC0+IGZhaWx3aXRoICJuZXZlciBoYXBwZW5zIikKCQlkZWNsYXJhdGlv bnMKCigqKiBbZ2V0X3ByaW9yaXRpZXMgZGVjbGFyYXRpb25zXSByZXR1cm5z IGEgdHVwbGUgWyhwcmlvcml0aWVzLCBkZWNsYXJhdGlvbnMpXSB3aGVyZQog cHJpb3JpdGllcyBpcyBhIGxpc3Qgb2YgcHJpb3JpdGllcyBhbmQgZGVjbGFy YXRpb25zIHRoZSByZW1haW5pbmcgZGVjbGFyYXRpb25zLiAqKQpsZXQgZ2V0 X3ByaW9yaXRpZXMgZGVjbGFyYXRpb25zID0KCWxldCAocHJpb3JpdGllcywg ZGVjbGFyYXRpb25zKSA9CgkJZ2V0X3NvbWV0aGluZwoJCQkoZnVuY3Rpb24g UHJpb3JpdHlPcmRlciBfIC0+IHRydWUgfCBfIC0+IGZhbHNlKQoJCSAgKGZ1 bmN0aW9uIHwgUHJpb3JpdHlPcmRlciBwIC0+IHAgfCBfIC0+IGZhaWx3aXRo ICJuZXZlciBoYXBwZW5zIikKCQkJZGVjbGFyYXRpb25zCglpbgoJbGV0IHBy aW9yaXRpZXMgPSBMaXN0LmZsYXR0ZW4gcHJpb3JpdGllcyBpbgoJKHByaW9y aXRpZXMsIGRlY2xhcmF0aW9ucykKCigqKiBbZ2V0X2Z1bmNzIGRlY2xhcmF0 aW9uc10gcmV0dXJucyBhIHR1cGxlIFsoZnVuY3MsIGRlY2xhcmF0aW9ucyld IHdoZXJlCiBmdW5jcyBpcyBhIGxpc3Qgb2YgZnVuY3Rpb24gZGVjbGFyYXRp b25zIGFuZCBbZGVjbGFyYXRpb25zXSB0aGUKIHJlbWFpbmluZyBkZWNsYXJh dGlvbnMuICopCmxldCBnZXRfcHJvY3MgZGVjbGFyYXRpb25zID0KCWdldF9z b21ldGhpbmcKCQkoZnVuY3Rpb24gUHJvY0RlY2wgXyAtPiB0cnVlIHwgXyAt PiBmYWxzZSkKCSAgKGZ1bmN0aW9uIHwgUHJvY0RlY2wgcCAtPiBwIHwgXyAt PiBmYWlsd2l0aCAibmV2ZXIgaGFwcGVucyIpCgkJZGVjbGFyYXRpb25zCgoo KiogW2dldF9pbml0aWFsaXplcyBkZWNsYXJhdGlvbnNdIHJldHVybnMgYSB0 dXBsZSBbKGluaXRpYWxpemVzLCBkZWNsYXJhdGlvbnMpXQogd2hlcmUgaW5p dGlhbGl6ZXMgaXMgYSBsaXN0IG9mIGluaXRpYWxpemUgYW5kIGRlY2xhcmF0 aW9ucyB0aGUgcmVtYWluaW5nCiBkZWNsYXJhdGlvbnMuICopCmxldCBnZXRf aW5pdGlhbGl6ZXMgZGVjbGFyYXRpb25zID0KCWdldF9zb21ldGhpbmcKCQko ZnVuY3Rpb24gSW5pdGlhbGl6YXRpb24gXyAtPiB0cnVlIHwgXyAtPiBmYWxz ZSkKCSAgKGZ1bmN0aW9uIHwgSW5pdGlhbGl6YXRpb24gaSAtPiBpIHwgXyAt PiBmYWlsd2l0aCAibmV2ZXIgaGFwcGVucyIpCgkJZGVjbGFyYXRpb25zCgoo KiogW2dldF92YXJzIGRlY2xhcmF0aW9uc10gcmV0dXJucyBhIHR1cGxlIFso dmFycywgZGVjbGFyYXRpb25zKV0gd2hlcmUKIHZhcnMgaXMgYSBsaXN0IG9m IGxvY2FsIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyBhbmQgW2RlY2xhcmF0aW9u c10gdGhlCiByZW1haW5pbmcgZGVjbGFyYXRpb25zLiAqKQpsZXQgZ2V0X3Zh cnMgZGVjbGFyYXRpb25zID0KCWdldF9zb21ldGhpbmcKCQkoZnVuY3Rpb24g VmFyRGVjbCBfIC0+IHRydWUgfCBfIC0+IGZhbHNlKQoJICAoZnVuY3Rpb24g fCBWYXJEZWNsIHYgLT4gdiB8IF8gLT4gZmFpbHdpdGggIm5ldmVyIGhhcHBl bnMiKQoJCWRlY2xhcmF0aW9ucwoKbGV0IHZhciBhc3NpZ25hYmxlIGdsb2Jh bCBsb2MgbmFtZSB0IHYgPQoJeyBDYWxhc3Qudl9hc3NpZ25hYmxlID0gYXNz aWduYWJsZTsKCQl2X2dsb2JhbCA9IGdsb2JhbDsKCQl2X2xvYyA9IGxvYzsK CQl2X25hbWUgPSBuYW1lOwoJCXZfdHlwZSA9IHQ7CgkJdl92YWx1ZSA9IHYg fQoKKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKQooKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiopCigqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKikKKCogUnVsZSBkZWNsYXJhdGlvbnMgKikKbGV0 IGFjdG9yID0gR3JhbS5FbnRyeS5tayAiYWN0b3IiCmxldCBhY3RvckFjdGlv bk9ySW5pdCA9IEdyYW0uRW50cnkubWsgImFjdG9yQWN0aW9uT3JJbml0Igps ZXQgYWN0b3JEZWNsYXJhdGlvbnMgPSBHcmFtLkVudHJ5Lm1rICJhY3RvckRl Y2xhcmF0aW9ucyIKbGV0IGFjdG9ySW1wb3J0ID0gR3JhbS5FbnRyeS5tayAi YWN0b3JJbXBvcnQiCmxldCBhY3RvclBhcnMgPSBHcmFtLkVudHJ5Lm1rICJh Y3RvclBhcnMiCmxldCBhY3RvclBvcnREZWNscyA9IEdyYW0uRW50cnkubWsg ImFjdG9yUG9ydERlY2xzIgoKbGV0IGFjdGlvbiA9IEdyYW0uRW50cnkubWsg ImFjdGlvbiIKbGV0IGFjdGlvbkNoYW5uZWxTZWxlY3RvciA9IEdyYW0uRW50 cnkubWsgImFjdGlvbkNoYW5uZWxTZWxlY3RvciIKbGV0IGFjdGlvbkNoYW5u ZWxTZWxlY3Rvck5hbWVzID0gR3JhbS5FbnRyeS5tayAiYWN0aW9uQ2hhbm5l bFNlbGVjdG9yTmFtZXMiCmxldCBhY3Rpb25EZWxheSA9IEdyYW0uRW50cnku bWsgImFjdGlvbkRlbGF5IgpsZXQgYWN0aW9uR3VhcmRzID0gR3JhbS5FbnRy eS5tayAiYWN0aW9uR3VhcmRzIgpsZXQgYWN0aW9uSW5wdXRzID0gR3JhbS5F bnRyeS5tayAiYWN0aW9uSW5wdXRzIgpsZXQgYWN0aW9uT3V0cHV0cyA9IEdy YW0uRW50cnkubWsgImFjdGlvbk91dHB1dHMiCmxldCBhY3Rpb25SZXBlYXQg PSBHcmFtLkVudHJ5Lm1rICJhY3Rpb25SZXBlYXQiCmxldCBhY3Rpb25TdGF0 ZW1lbnRzID0gR3JhbS5FbnRyeS5tayAiYWN0aW9uU3RhdGVtZW50cyIKbGV0 IGFjdGlvblRhZyA9IEdyYW0uRW50cnkubWsgImFjdGlvblRhZyIKbGV0IGFj dGlvblRva2VuTmFtZXMgPSBHcmFtLkVudHJ5Lm1rICJhY3Rpb25Ub2tlbk5h bWVzIgoKbGV0IGV4cHJlc3Npb24gPSBHcmFtLkVudHJ5Lm1rICJleHByZXNz aW9uIgpsZXQgZXhwcmVzc2lvbkdlbmVyYXRvcnMgPSBHcmFtLkVudHJ5Lm1r ICJleHByZXNzaW9uR2VuZXJhdG9ycyIKbGV0IGV4cHJlc3Npb25HZW5lcmF0 b3JzT3B0ID0gR3JhbS5FbnRyeS5tayAiZXhwcmVzc2lvbkdlbmVyYXRvcnNP cHQiCmxldCBleHByZXNzaW9ucyA9IEdyYW0uRW50cnkubWsgImV4cHJlc3Np b25zIgpsZXQgaWRlbnQgPSBHcmFtLkVudHJ5Lm1rICJpZGVudCIKCmxldCBp bml0aWFsaXphdGlvbkFjdGlvbiA9IEdyYW0uRW50cnkubWsgImluaXRpYWxp emF0aW9uQWN0aW9uIgoKbGV0IHF1YWxpZmllZElkID0gR3JhbS5FbnRyeS5t ayAicXVhbGlmaWVkSWQiCgpsZXQgcHJpb3JpdHlJbmVxdWFsaXR5ID0gR3Jh bS5FbnRyeS5tayAicHJpb3JpdHlJbmVxdWFsaXR5IgpsZXQgcHJpb3JpdHlP cmRlciA9IEdyYW0uRW50cnkubWsgInByaW9yaXR5T3JkZXIiCmxldCBzY2hl ZHVsZSA9IEdyYW0uRW50cnkubWsgInNjaGVkdWxlIgpsZXQgc3RhdGVUcmFu c2l0aW9uID0gR3JhbS5FbnRyeS5tayAic3RhdGVUcmFuc2l0aW9uIgpsZXQg c3RhdGVUcmFuc2l0aW9ucyA9IEdyYW0uRW50cnkubWsgInN0YXRlVHJhbnNp dGlvbnMiCgpsZXQgc3RhdGVtZW50cyA9IEdyYW0uRW50cnkubWsgInN0YXRl bWVudHMiCmxldCBzdGF0ZW1lbnRGb3JFYWNoSWRlbnRzID0gR3JhbS5FbnRy eS5tayAic3RhdGVtZW50Rm9yRWFjaElkZW50cyIKbGV0IHN0YXRlbWVudElm RWxzZU9wdCA9IEdyYW0uRW50cnkubWsgInN0YXRlbWVudElmRWxzZU9wdCIK CmxldCB0eXBlQXR0cnMgPSBHcmFtLkVudHJ5Lm1rICJ0eXBlQXR0cnMiCmxl dCB0eXBlRGVmID0gR3JhbS5FbnRyeS5tayAidHlwZURlZiIKbGV0IHR5cGVQ YXJzID0gR3JhbS5FbnRyeS5tayAidHlwZVBhcnMiCmxldCB0eXBlUGFyc09w dCA9IEdyYW0uRW50cnkubWsgInR5cGVQYXJzT3B0IgoKbGV0IHZhckRlY2wg PSBHcmFtLkVudHJ5Lm1rICJ2YXJEZWNsIgpsZXQgdmFyRGVjbEZ1bmN0aW9u UGFyYW1zID0gR3JhbS5FbnRyeS5tayAidmFyRGVjbEZ1bmN0aW9uUGFyYW1z IgpsZXQgdmFyRGVjbE5vRXhwciA9IEdyYW0uRW50cnkubWsgInZhckRlY2xO b0V4cHIiCmxldCB2YXJEZWNscyA9IEdyYW0uRW50cnkubWsgInZhckRlY2xz IgpsZXQgdmFyRGVjbHNBbmREb09wdCA9IEdyYW0uRW50cnkubWsgInZhckRl Y2xzQW5kRG9PcHQiCmxldCB2YXJEZWNsc09wdCA9IEdyYW0uRW50cnkubWsg InZhckRlY2xzT3B0IgoKKCogR3JhbW1hciBkZWZpbml0aW9uICopCkVYVEVO RCBHcmFtCgogICgqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopCiAg KCogYW4gYWN0aW9uLiAqKQogIGFjdGlvbjogWwoJCVsgaW5wdXRzID0gYWN0 aW9uSW5wdXRzOyAiPT0+Ijsgb3V0cHV0cyA9IGFjdGlvbk91dHB1dHM7CgkJ ICBndWFyZHMgPSBhY3Rpb25HdWFyZHM7CgkJCU9QVCBhY3Rpb25EZWxheTsK CQkJZGVjbHMgPSB2YXJEZWNsc09wdDsKCQkgIHN0bXRzID0gYWN0aW9uU3Rh dGVtZW50czsKCQkgICJlbmQiIC0+CgkJCXsKCQkJCUNhbGFzdC5hX2d1YXJk cyA9IGd1YXJkczsKCQkJCWFfaW5wdXRzID0gaW5wdXRzOwoJCQkJYV9sb2Mg PSBjb252ZXJ0X2xvYyBfbG9jOwoJCQkJYV9vdXRwdXRzID0gb3V0cHV0czsK CQkJCWFfc3RtdHMgPSBzdG10czsKCQkJCWFfdGFnID0gW107ICgqIHRoZSB0 YWcgaXMgZmlsbGVkIGluIHRoZSBhY3RvckRlY2xhcmF0aW9ucyBydWxlLiAq KQoJCQkJYV92YXJzID0gZGVjbHM7CgkJCX0KCQldCgldOwoJCglhY3Rpb25D aGFubmVsU2VsZWN0b3I6IFsKCQlbIGFjdGlvbkNoYW5uZWxTZWxlY3Rvck5h bWVzIC0+CgkJCUFzdGhlbHBlci5mYWlsd2l0aCAoY29udmVydF9sb2MgX2xv YykKCQkJCSJSVkMtQ0FMIGRvZXMgbm90IHN1cHBvcnQgY2hhbm5lbCBzZWxl Y3RvcnMuIiBdCgldOwoJCglhY3Rpb25DaGFubmVsU2VsZWN0b3JOYW1lczog WyBbICJhdCIgfCAiYXQqIiB8ICJhbnkiIHwgImFsbCIgXSBdOwoJCglhY3Rp b25EZWxheTogWyBbICJkZWxheSI7IGV4cHJlc3Npb24gLT4KCQlBc3RoZWxw ZXIuZmFpbHdpdGggKGNvbnZlcnRfbG9jIF9sb2MpCgkJCSJSVkMtQ0FMIGRv ZXMgbm90IHBlcm1pdCB0aGUgdXNlIG9mIGRlbGF5LiIgXSBdOwoJCglhY3Rp b25HdWFyZHM6IFsgWyAiZ3VhcmQiOyBlID0gZXhwcmVzc2lvbnMgLT4gZSB8 IC0+IFtdIF0gXTsKCgkoKiBhY3Rpb24gaW5wdXRzICopCglhY3Rpb25JbnB1 dHM6IFsKCQlbIGwgPSBMSVNUMCBbCgkJCSJbIjsgdG9rZW5zID0gYWN0aW9u VG9rZW5OYW1lczsgIl0iOyByZXBlYXQgPSBhY3Rpb25SZXBlYXQ7IE9QVCBh Y3Rpb25DaGFubmVsU2VsZWN0b3IgLT4KCQkJCSgiIiwgdG9rZW5zLCByZXBl YXQpCgkJfCAoXywgcG9ydE5hbWUpID0gaWRlbnQ7ICI6IjsgIlsiOyB0b2tl bnMgPSBhY3Rpb25Ub2tlbk5hbWVzOyAiXSI7IHJlcGVhdCA9IGFjdGlvblJl cGVhdDsgT1BUIGFjdGlvbkNoYW5uZWxTZWxlY3RvciAtPgoJCQkJKHBvcnRO YW1lLCB0b2tlbnMsIHJlcGVhdCkKCQldIFNFUCAiLCIgLT4gbCBdCgldOwoK CSgqIGFjdGlvbiBvdXRwdXRzICopCglhY3Rpb25PdXRwdXRzOiBbCgkJWyBs ID0gTElTVDAgWwoJCSAgIlsiOyBleHBycyA9IGV4cHJlc3Npb25zOyAiXSI7 IHJlcGVhdCA9IGFjdGlvblJlcGVhdDsgT1BUIGFjdGlvbkNoYW5uZWxTZWxl Y3RvciAtPgoJCQkJKCIiLCBleHBycywgcmVwZWF0KQoJCXwgKF8sIHBvcnRO YW1lKSA9IGlkZW50OyAiOiI7ICJbIjsgZXhwcnMgPSBleHByZXNzaW9uczsg Il0iOyByZXBlYXQgPSBhY3Rpb25SZXBlYXQ7IE9QVCBhY3Rpb25DaGFubmVs U2VsZWN0b3IgLT4KCQkJCShwb3J0TmFtZSwgZXhwcnMsIHJlcGVhdCkKCQld IFNFUCAiLCIgLT4gbCBdCgldOwoJCglhY3Rpb25SZXBlYXQ6IFsKCQlbICJy ZXBlYXQiOyBlID0gZXhwcmVzc2lvbiAtPiBlCgkJfCAtPiBDYWxhc3QuRXhw ckludCAoY29udmVydF9sb2MgX2xvYywgMSkgXQoJXTsKCQoJYWN0aW9uU3Rh dGVtZW50czogWyBbICJkbyI7IHMgPSBzdGF0ZW1lbnRzIC0+IHMgfCAtPiBb XSBdIF07CgkKCWFjdGlvblRhZzogWyBbIHRhZyA9IExJU1QxIFsgKF8sIGlk KSA9IGlkZW50IC0+IGlkIF0gU0VQICIuIiAtPiB0YWcgXSBdOwoJCglhY3Rp b25Ub2tlbk5hbWVzOiBbCgkJWwl0b2tlbnMgPSBMSVNUMCBbIChsb2MsIGlk KSA9IGlkZW50IC0+IChsb2MsIGlkKSBdIFNFUCAiLCIgLT4gdG9rZW5zIF0K CV07CgkKCSgqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopCiAgKCog YSBDQUwgYWN0b3IuICopCiAgYWN0b3I6IFsKCQlbIExJU1QwIGFjdG9ySW1w b3J0OyAiYWN0b3IiOyAoXywgbmFtZSkgPSBpZGVudDsgdHlwZVBhcnNPcHQ7 CgkJICAiKCI7IHBhcmFtZXRlcnMgPSBhY3RvclBhcnM7ICIpIjsKCQkJaW5w dXRzID0gYWN0b3JQb3J0RGVjbHM7ICI9PT4iOyBvdXRwdXRzID0gYWN0b3JQ b3J0RGVjbHM7ICI6IjsKCQkJZGVjbGFyYXRpb25zMSA9IGFjdG9yRGVjbGFy YXRpb25zOwoJCQlmc20gPSBPUFQgc2NoZWR1bGU7CgkJCWRlY2xhcmF0aW9u czIgPSBhY3RvckRlY2xhcmF0aW9uczsKCQkJImVuZCI7IGBFT0kgLT4KCQkJ CWxldCBkZWNsYXJhdGlvbnMgPSBMaXN0LmFwcGVuZCBkZWNsYXJhdGlvbnMx IGRlY2xhcmF0aW9uczIgaW4KCQkJCWxldCAoYWN0aW9ucywgZGVjbGFyYXRp b25zKSA9IGdldF9hY3Rpb25zIGRlY2xhcmF0aW9ucyBpbgoJCQkJbGV0IChm dW5jcywgZGVjbGFyYXRpb25zKSA9IGdldF9mdW5jcyBkZWNsYXJhdGlvbnMg aW4KCQkJCWxldCAocHJpb3JpdGllcywgZGVjbGFyYXRpb25zKSA9IGdldF9w cmlvcml0aWVzIGRlY2xhcmF0aW9ucyBpbgoJCQkJbGV0IChwcm9jcywgZGVj bGFyYXRpb25zKSA9IGdldF9wcm9jcyBkZWNsYXJhdGlvbnMgaW4KCQkJCWxl dCAodmFycywgZGVjbGFyYXRpb25zKSA9IGdldF92YXJzIGRlY2xhcmF0aW9u cyBpbgoJCQkJbGV0IChfaW5pdGlhbGl6ZXMsIGRlY2xhcmF0aW9ucykgPSBn ZXRfaW5pdGlhbGl6ZXMgZGVjbGFyYXRpb25zIGluCgkJCQlhc3NlcnQgKGRl Y2xhcmF0aW9ucyA9IFtdKTsKCQkJCXsKCSAgICAgICAgQ2FsYXN0LmFjX2Fj dGlvbnMgPSBhY3Rpb25zOwoJICAgICAgICBhY19mc20gPSBmc207CgkJCQkJ YWNfZnVuY3MgPSBmdW5jczsKCSAgICAgICAgYWNfaW5wdXRzID0gaW5wdXRz OwoJICAgICAgICBhY19uYW1lID0gbmFtZTsKCSAgICAgICAgYWNfb3V0cHV0 cyA9IG91dHB1dHM7CgkgICAgICAgIGFjX3BhcmFtZXRlcnMgPSBwYXJhbWV0 ZXJzOwoJICAgICAgICBhY19wcmlvcml0aWVzID0gcHJpb3JpdGllczsKCSAg ICAgICAgYWNfcHJvY3MgPSBwcm9jczsKCSAgICAgICAgYWNfdmFycyA9IHZh cnM7CgkgICAgICB9CgkJXQoJXTsKCQoJYWN0b3JBY3Rpb25PckluaXQ6IFsK CQlbICJhY3Rpb24iOyBhID0gYWN0aW9uIC0+IEFjdGlvbiBhCgkJfCAiaW5p dGlhbGl6ZSI7IGkgPSBpbml0aWFsaXphdGlvbkFjdGlvbiAtPiBJbml0aWFs aXphdGlvbiBpIF0KCV07CgkKCSgqIGRlY2xhcmF0aW9ucyBpbiB0aGUgYWN0 b3IgYm9keS4gQSBmZXcgcnVsZXMgYXJlIGR1cGxpY2F0ZWQgaGVyZSBiZWNh dXNlCgkgdGhlIGdyYW1tYXIgaXMgbm90IExMKDEpLiBJbiBjb250cmFzdCB3 aXRoIENMUiwgZnVuY3Rpb25zIGFuZCBwcm9jZWR1cmVzCgkgbWF5IG9ubHkg YmUgZGVjbGFyZWQgYXQgdGhpcyBsZXZlbC4gQ2FsMkMgZG9lcyBub3Qgc3Vw cG9ydCBuZXN0ZWQgZnVuY3Rpb24KCSBkZWNsYXJhdGlvbnMuICopIAoJYWN0 b3JEZWNsYXJhdGlvbnM6IFsKCQlbIGwgPSBMSVNUMCBbCgkJCSJhY3Rpb24i OyBhID0gYWN0aW9uIC0+IEFjdGlvbiBhCgkJfCAiZnVuY3Rpb24iOyAoXywg bikgPSBpZGVudDsgIigiOyBwID0gdmFyRGVjbEZ1bmN0aW9uUGFyYW1zOyAi KSI7CgkJICAgICItLT4iOyB0ID0gdHlwZURlZjsgdiA9IHZhckRlY2xzT3B0 OyAiOiI7IGUgPSBleHByZXNzaW9uOyAiZW5kIiAtPgoJCQlGdW5jRGVjbCB7 CgkJCQlDYWxhc3QuZl9kZWNscyA9IHY7CgkJCQlmX2V4cHIgPSBlOwoJCQkJ Zl9sb2MgPSBjb252ZXJ0X2xvYyBfbG9jOwoJCQkJZl9uYW1lID0gbjsKCQkJ CWZfcGFyYW1zID0gcDsKCQkJCWZfcmV0dXJuID0gdDsKCQkJfQoJCXwgInBy b2NlZHVyZSI7IChfLCBuKSA9IGlkZW50OyAiKCI7IHAgPSB2YXJEZWNsRnVu Y3Rpb25QYXJhbXM7ICIpIjsKCQkgIHYgPSB2YXJEZWNsc09wdDsgImJlZ2lu IjsgcyA9IHN0YXRlbWVudHM7ICJlbmQiIC0+CgkJCVByb2NEZWNsIHsKCQkJ CUNhbGFzdC5wX2RlY2xzID0gdjsKCQkJCXBfbG9jID0gY29udmVydF9sb2Mg X2xvYzsKCQkJCXBfbmFtZSA9IG47CgkJCQlwX3BhcmFtcyA9IHA7CgkJCQlw X3N0bXRzID0gcwoJCQl9CgkJfCAiaW5pdGlhbGl6ZSI7IGkgPSBpbml0aWFs aXphdGlvbkFjdGlvbiAtPiBJbml0aWFsaXphdGlvbiBpCgkJfCAicHJpb3Jp dHkiOyBwID0gcHJpb3JpdHlPcmRlciAtPiBQcmlvcml0eU9yZGVyIHAKCgkJ fCAoXywgdGFnKSA9IGlkZW50OyAiOiI7IGEgPSBhY3RvckFjdGlvbk9ySW5p dCAtPgoJCQkobWF0Y2ggYSB3aXRoCgkJCQl8IEFjdGlvbiBhIC0+IEFjdGlv biB7YSB3aXRoIENhbGFzdC5hX3RhZyA9IFt0YWddfQoJCQkJfCBJbml0aWFs aXphdGlvbiBhIC0+IEluaXRpYWxpemF0aW9uIHthIHdpdGggQ2FsYXN0LmFf dGFnID0gW3RhZ119CgkJCQl8IF8gLT4gZmFpbHdpdGggIm5ldmVyIGhhcHBl bnMiKQoJCXwgKF8sIHRhZykgPSBpZGVudDsgIi4iOyB0YWdzID0gYWN0aW9u VGFnOyAiOiI7IGEgPSBhY3RvckFjdGlvbk9ySW5pdCAtPgoJCQkobWF0Y2gg YSB3aXRoCgkJCQl8IEFjdGlvbiBhIC0+IEFjdGlvbiB7YSB3aXRoIENhbGFz dC5hX3RhZyA9IHRhZyA6OiB0YWdzfQoJCQkJfCBJbml0aWFsaXphdGlvbiBh IC0+IEluaXRpYWxpemF0aW9uIHthIHdpdGggQ2FsYXN0LmFfdGFnID0gdGFn IDo6IHRhZ3N9CgkJCQl8IF8gLT4gZmFpbHdpdGggIm5ldmVyIGhhcHBlbnMi KQoJCQoJCXwgaWRlbnQ7ICJbIjsgdHlwZVBhcnM7ICJdIiAtPgoJCQlBc3Ro ZWxwZXIuZmFpbHdpdGggKGNvbnZlcnRfbG9jIF9sb2MpICJSVkMtQ0FMIGRv ZXMgbm90IHN1cHBvcnQgdHlwZSBwYXJhbWV0ZXJzLiIKCgkJfCAoXywgbmFt ZSkgPSBpZGVudDsgKHZhcl9sb2MsIHZhcl9uYW1lKSA9IGlkZW50OyAiOyIg LT4KCQkJICBsZXQgdCA9IHR5cGVfb2ZfdHlwZURlZiBfbG9jIG5hbWUgW10g aW4KCQkJCVZhckRlY2wgKHZhciB0cnVlIHRydWUgdmFyX2xvYyB2YXJfbmFt ZSB0IE5vbmUpCgoJCXwgKF8sIG5hbWUpID0gaWRlbnQ7ICh2YXJfbG9jLCB2 YXJfbmFtZSkgPSBpZGVudDsgIj0iOyBlID0gZXhwcmVzc2lvbjsgIjsiIC0+ CgkJCSAgbGV0IHQgPSB0eXBlX29mX3R5cGVEZWYgX2xvYyBuYW1lIFtdIGlu CgkJCQlWYXJEZWNsICh2YXIgZmFsc2UgdHJ1ZSB2YXJfbG9jIHZhcl9uYW1l IHQgKFNvbWUgZSkpCgoJCXwgKF8sIG5hbWUpID0gaWRlbnQ7ICh2YXJfbG9j LCB2YXJfbmFtZSkgPSBpZGVudDsgIjo9IjsgZSA9IGV4cHJlc3Npb247ICI7 IiAtPgoJCQkgIGxldCB0ID0gdHlwZV9vZl90eXBlRGVmIF9sb2MgbmFtZSBb XSBpbgoJCQkJVmFyRGVjbCAodmFyIHRydWUgdHJ1ZSB2YXJfbG9jIHZhcl9u YW1lIHQgKFNvbWUgZSkpCgoJCXwgKF8sIG5hbWUpID0gaWRlbnQ7ICIoIjsg YXR0cnMgPSB0eXBlQXR0cnM7ICIpIjsgKHZhcl9sb2MsIHZhcl9uYW1lKSA9 IGlkZW50OyAiOyIgLT4KCQkJICBsZXQgdCA9IHR5cGVfb2ZfdHlwZURlZiBf bG9jIG5hbWUgYXR0cnMgaW4KCQkJCVZhckRlY2wgKHZhciB0cnVlIHRydWUg dmFyX2xvYyB2YXJfbmFtZSB0IE5vbmUpCgoJCXwgKF8sIG5hbWUpID0gaWRl bnQ7ICIoIjsgYXR0cnMgPSB0eXBlQXR0cnM7ICIpIjsKCQkgICh2YXJfbG9j LCB2YXJfbmFtZSkgPSBpZGVudDsgIj0iOyBlID0gZXhwcmVzc2lvbjsgIjsi IC0+CgkJCSAgbGV0IHQgPSB0eXBlX29mX3R5cGVEZWYgX2xvYyBuYW1lIGF0 dHJzIGluCgkJCQlWYXJEZWNsICh2YXIgZmFsc2UgdHJ1ZSB2YXJfbG9jIHZh cl9uYW1lIHQgKFNvbWUgZSkpCgoJCXwgKF8sIG5hbWUpID0gaWRlbnQ7ICIo IjsgYXR0cnMgPSB0eXBlQXR0cnM7ICIpIjsKCQkgICh2YXJfbG9jLCB2YXJf bmFtZSkgPSBpZGVudDsgIjo9IjsgZSA9IGV4cHJlc3Npb247ICI7IiAtPgoJ CQkgIGxldCB0ID0gdHlwZV9vZl90eXBlRGVmIF9sb2MgbmFtZSBhdHRycyBp bgoJCQkJVmFyRGVjbCAodmFyIHRydWUgdHJ1ZSB2YXJfbG9jIHZhcl9uYW1l IHQgKFNvbWUgZSkpCgogICAgfCAoXywgaSkgPSBpZGVudDsgIjsiIC0+CgkJ CUFzdGhlbHBlci5mYWlsd2l0aCAoY29udmVydF9sb2MgX2xvYykKCQkJCSgi TWlzc2luZyB0eXBlIGZvciBkZWNsYXJhdGlvbiBvZiBcIiIgXiBpIF4gIlwi LiIpCgkJfCAoXywgaSkgPSBpZGVudDsgIj0iOyBleHByZXNzaW9uOyAiOyIg LT4KCQkJQXN0aGVscGVyLmZhaWx3aXRoIChjb252ZXJ0X2xvYyBfbG9jKQoJ CQkJKCJNaXNzaW5nIHR5cGUgZm9yIGRlY2xhcmF0aW9uIG9mIFwiIiBeIGkg XiAiXCIuIikKCQl8IChfLCBpKSA9IGlkZW50OyAiOj0iOyBleHByZXNzaW9u OyAiOyIgLT4KCQkJQXN0aGVscGVyLmZhaWx3aXRoIChjb252ZXJ0X2xvYyBf bG9jKQoJCQkJKCJNaXNzaW5nIHR5cGUgZm9yIGRlY2xhcmF0aW9uIG9mIFwi IiBeIGkgXiAiXCIuIikKCQkJCQoJCV0gLT4gbCBdCgldOwoJCgkoKiBzdHVm ZiBpbXBvcnRlZCBieSB0aGUgY3VycmVudCBhY3RvciAqKQoJYWN0b3JJbXBv cnQ6IFsKCQlbICJpbXBvcnQiOyAiYWxsIjsgcXVhbGlmaWVkSWQ7ICI7IiAt PiAoKQoJCXwgImltcG9ydCI7IHF1YWxpZmllZElkOyAiOyIgLT4gKCkgXQoJ XTsKCQoJKCogYWN0b3IgcGFyYW1ldGVyczogdHlwZSwgbmFtZSBhbmQgb3B0 aW9uYWwgZXhwcmVzc2lvbi4gKikKCWFjdG9yUGFyczogWwoJCVsgcGFyYW1l dGVycyA9IExJU1QwIFsKCQkJdCA9IHR5cGVEZWY7IChfLCBuYW1lKSA9IGlk ZW50OyB2ID0gT1BUIFsgIj0iOyBlID0gZXhwcmVzc2lvbiAtPiBlIF0gLT4g CgkJCXZhciBmYWxzZSB0cnVlIChjb252ZXJ0X2xvYyBfbG9jKSBuYW1lIHQg dgoJCV0gU0VQICIsIiAtPiBwYXJhbWV0ZXJzIF0KCV07CgkKCSgqIGEgcG9y dCBkZWNsYXJhdGlvbjogIm11bHRpIiBvciBub3QsIHR5cGUgYW5kIGlkZW50 aWZpZXIuICopCglhY3RvclBvcnREZWNsczogWwoJCVsgbCA9IExJU1QwIFsK CQkJT1BUICJtdWx0aSI7IHQgPSB0eXBlRGVmOyAoXywgbmFtZSkgPSBpZGVu dCAtPgoJCQl2YXIgZmFsc2UgdHJ1ZSAoY29udmVydF9sb2MgX2xvYykgbmFt ZSB0IE5vbmUKCQldIFNFUCAiLCIgLT4gbCBdCgldOwoJCgkoKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKQogICgqIGV4cHJlc3Npb25zLiAqKQkK CWV4cHJlc3Npb246IFsKCQkidG9wIgoJCSAgWwkiWyI7IGUgPSBleHByZXNz aW9uczsgZyA9IGV4cHJlc3Npb25HZW5lcmF0b3JzT3B0OyAiXSIgLT4KCQkJ CUNhbGFzdC5FeHByTGlzdCAoY29udmVydF9sb2MgX2xvYywgZSwgZykKCQkJ fCAiaWYiOyBlMSA9IFNFTEY7ICJ0aGVuIjsgZTIgPSBleHByZXNzaW9uOyAi ZWxzZSI7IGUzID0gZXhwcmVzc2lvbjsgImVuZCIgLT4KCQkJCUNhbGFzdC5F eHBySWYgKGNvbnZlcnRfbG9jIF9sb2MsIGUxLCBlMiwgZTMpIF0KCXwgIm9y IgoJCSAgWwllMSA9IFNFTEY7ICJvciI7IGUyID0gU0VMRiAtPiBib3AgX2xv YyBlMSBDYWxhc3QuQk9wT3IgZTIgXQoJfCAiYW5kIgoJCQlbIGUxID0gU0VM RjsgImFuZCI7IGUyID0gU0VMRiAtPiBib3AgX2xvYyBlMSBDYWxhc3QuQk9w QW5kIGUyIF0KCXwgImNtcCIKCSAgICBbIGUxID0gU0VMRjsgIj0iOyBlMiA9 IFNFTEYgLT4gYm9wIF9sb2MgZTEgQ2FsYXN0LkJPcEVRIGUyCgkJCXwgZTEg PSBTRUxGOyAiIT0iOyBlMiA9IFNFTEYgLT4gYm9wIF9sb2MgZTEgQ2FsYXN0 LkJPcE5FIGUyCgkJCXwgZTEgPSBTRUxGOyAiPCI7IGUyID0gU0VMRiAtPiBi b3AgX2xvYyBlMSBDYWxhc3QuQk9wTFQgZTIKCQkJfCBlMSA9IFNFTEY7ICI8 PSI7IGUyID0gU0VMRiAtPiBib3AgX2xvYyBlMSBDYWxhc3QuQk9wTEUgZTIK CQkJfCBlMSA9IFNFTEY7ICI+IjsgZTIgPSBTRUxGIC0+IGJvcCBfbG9jIGUx IENhbGFzdC5CT3BHVCBlMgoJCQl8IGUxID0gU0VMRjsgIj49IjsgZTIgPSBT RUxGIC0+IGJvcCBfbG9jIGUxIENhbGFzdC5CT3BHRSBlMgldCgl8CSJhZGQi CiAgICAgIFsgZTEgPSBTRUxGOyAiKyI7IGUyID0gU0VMRiAtPiBib3AgX2xv YyBlMSBDYWxhc3QuQk9wUGx1cyBlMgogICAgICB8IGUxID0gU0VMRjsgIi0i OyBlMiA9IFNFTEYgLT4gYm9wIF9sb2MgZTEgQ2FsYXN0LkJPcE1pbnVzIGUy IF0KCXwgIm11bCIKCQkgIFsgZTEgPSBTRUxGOyAiZGl2IjsgZTIgPSBTRUxG IC0+IGJvcCBfbG9jIGUxIENhbGFzdC5CT3BEaXZJbnQgZTIKICAgICAgfCBl MSA9IFNFTEY7ICJtb2QiOyBlMiA9IFNFTEYgLT4gYm9wIF9sb2MgZTEgQ2Fs YXN0LkJPcE1vZCBlMgoJCQl8IGUxID0gU0VMRjsgIioiOyBlMiA9IFNFTEYg LT4gYm9wIF9sb2MgZTEgQ2FsYXN0LkJPcFRpbWVzIGUyCiAgICAgIHwgZTEg PSBTRUxGOyAiLyI7IGUyID0gU0VMRiAtPiBib3AgX2xvYyBlMSBDYWxhc3Qu Qk9wRGl2IGUyIF0KCXwgImV4cCIKCSAgICBbIGUxID0gU0VMRjsgIl4iOyBl MiA9IFNFTEYgLT4gYm9wIF9sb2MgZTEgQ2FsYXN0LkJPcEV4cCBlMiBdCgl8 ICJ1bmFyeSIKCQkgIFsJIi0iOyBlID0gU0VMRiAtPiB1b3AgX2xvYyBDYWxh c3QuVU9wTWludXMgZQoJCQl8ICJub3QiOyBlID0gU0VMRiAtPiB1b3AgX2xv YyBDYWxhc3QuVU9wTm90IGUKCQkJfCAiIyI7IGUgPSBTRUxGIC0+IHVvcCBf bG9jIENhbGFzdC5VT3BOYkVsdHMgZSBdCgl8ICJzaW1wbGUiCgkJCVsgIigi OyBlID0gU0VMRjsgIikiIC0+IGUKCQkJfCAidHJ1ZSIgLT4gQ2FsYXN0LkV4 cHJCb29sIChjb252ZXJ0X2xvYyBfbG9jLCB0cnVlKQoJCQl8ICJmYWxzZSIg LT4gQ2FsYXN0LkV4cHJCb29sIChjb252ZXJ0X2xvYyBfbG9jLCBmYWxzZSkK CQkJfCAoaSwgXykgPSBJTlQgLT4gQ2FsYXN0LkV4cHJJbnQgKGNvbnZlcnRf bG9jIF9sb2MsIGkpCgkJCXwgKHMsIF8pID0gU1RSSU5HIC0+IENhbGFzdC5F eHByU3RyIChjb252ZXJ0X2xvYyBfbG9jLCBzKQoJCQl8IChfLCB2KSA9IGlk ZW50OyAiKCI7IGVsID0gZXhwcmVzc2lvbnM7ICIpIiAtPgoJCQkJQ2FsYXN0 LkV4cHJDYWxsIChjb252ZXJ0X2xvYyBfbG9jLCB2LCBlbCkKCQkJfCAobG9j LCB2KSA9IGlkZW50OyBlbCA9IExJU1QxIFsgIlsiOyBlID0gZXhwcmVzc2lv bjsgIl0iIC0+IGUgXSAtPgoJCQkJQ2FsYXN0LkV4cHJJZHggKGNvbnZlcnRf bG9jIF9sb2MsIChsb2MsIHYpLCBlbCkKCQkJfCAobG9jLCB2KSA9IGlkZW50 IC0+IENhbGFzdC5FeHByVmFyIChsb2MsIHYpIF0KCV07CgkKCWV4cHJlc3Np b25HZW5lcmF0b3JzOiBbCgkJWyBsID0gTElTVDEgWwoJCQkiZm9yIjsgdCA9 IHR5cGVEZWY7IChsb2MsIG5hbWUpID0gaWRlbnQ7ICJpbiI7IGUgPSBleHBy ZXNzaW9uIC0+CgkJCQlsZXQgdmFyID0gdmFyIGZhbHNlIGZhbHNlIGxvYyBu YW1lIHQgTm9uZSBpbgoJCQkJKHZhciwgZSkgXSBTRVAgIiwiIC0+IGwgXQoJ XTsKCQoJZXhwcmVzc2lvbkdlbmVyYXRvcnNPcHQ6IFsgWyAiOiI7IGcgPSBl eHByZXNzaW9uR2VuZXJhdG9ycyAtPiBnIHwgLT4gW10gXSBdOyAKCQoJZXhw cmVzc2lvbnM6IFsgWyBsID0gTElTVDAgWyBlID0gZXhwcmVzc2lvbiAtPiBl IF0gU0VQICIsIiAtPiBsIF0gXTsKCQoJaWRlbnQ6IFsgWyBzID0gSURFTlQg LT4gKGNvbnZlcnRfbG9jIF9sb2MsIHMpIF0gXTsKCQoJKCoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKikKCSgqIGluaXRpYWxpemF0aW9uIGFjdGlv bi4gKikKCWluaXRpYWxpemF0aW9uQWN0aW9uOiBbCgkJWyAiPT0+Ijsgb3V0 cHV0cyA9IGFjdGlvbk91dHB1dHM7CgkJICBndWFyZHMgPSBhY3Rpb25HdWFy ZHM7IE9QVCBhY3Rpb25EZWxheTsgZGVjbHMgPSB2YXJEZWNsc09wdDsKCQkg IHN0bXRzID0gYWN0aW9uU3RhdGVtZW50czsKCQkgICJlbmQiIC0+CgkJCXsK CQkJCUNhbGFzdC5hX2d1YXJkcyA9IGd1YXJkczsKCQkJCWFfaW5wdXRzID0g W107CgkJCQlhX2xvYyA9IGNvbnZlcnRfbG9jIF9sb2M7CgkJCQlhX291dHB1 dHMgPSBvdXRwdXRzOwoJCQkJYV9zdG10cyA9IHN0bXRzOwoJCQkJYV90YWcg PSBbXTsgKCogdGhlIHRhZyBpcyBmaWxsZWQgaW4gdGhlIGFjdG9yRGVjbGFy YXRpb25zIHJ1bGUuICopCgkJCQlhX3ZhcnMgPSBkZWNsczsKCQkJfQoJCV0K CV07CgkKCSgqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopCglxdWFs aWZpZWRJZDogWyBbIHFpZCA9IExJU1QxIFsgaWQgPSBpZGVudCAtPiBpZCBd IFNFUCAiLiIgLT4gcWlkIF0gXTsKCQoJKCoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKikKCSgqIHNjaGVkdWxlIGFuZCBwcmlvcml0aWVzLiBXZSBv bmx5IHN1cHBvcnQgRlNNIHNjaGVkdWxlcy4gKikKCXByaW9yaXR5SW5lcXVh bGl0eTogWwoJCVsgdGFnID0gYWN0aW9uVGFnOyAiPiI7IHRhZ3MgPSBMSVNU MSBbYSA9IGFjdGlvblRhZyAtPiBhIF0gU0VQICI+IiAtPiB0YWcgOjogdGFn cyBdCgldOwoJCglwcmlvcml0eU9yZGVyOiBbIFsgbCA9IExJU1QwIFsgcCA9 IHByaW9yaXR5SW5lcXVhbGl0eTsgIjsiIC0+IHAgXTsgImVuZCIgLT4gbCBd IF07CgkKCXNjaGVkdWxlOiBbCgkJWyAic2NoZWR1bGUiOyAiZnNtIjsgKF8s IGZpcnN0X3N0YXRlKSA9IGlkZW50OyAiOiI7CgkJICB0cmFuc2l0aW9ucyA9 IHN0YXRlVHJhbnNpdGlvbnM7ICJlbmQiIC0+IChmaXJzdF9zdGF0ZSwgdHJh bnNpdGlvbnMpCgkJfCAic2NoZWR1bGUiOyAicmVnZXhwIiAtPgoJCQlBc3Ro ZWxwZXIuZmFpbHdpdGggKGNvbnZlcnRfbG9jIF9sb2MpICJSVkMtQ0FMIGRv ZXMgbm90IHN1cHBvcnQgXCJyZWdleHBcIiBzY2hlZHVsZXMuIgoJCV0KCV07 CgkKCXN0YXRlVHJhbnNpdGlvbjogWwogICAgWyAoXywgZnJvbV9zdGF0ZSkg PSBpZGVudDsgIigiOyBhY3Rpb24gPSBhY3Rpb25UYWc7ICIpIjsgIi0tPiI7 IChfLCB0b19zdGF0ZSkgPSBpZGVudDsgIjsiIC0+CgkJCShmcm9tX3N0YXRl LCBhY3Rpb24sIHRvX3N0YXRlKSBdCgldOwoJCglzdGF0ZVRyYW5zaXRpb25z OiBbIFsgbCA9IExJU1QwIFsgdCA9IHN0YXRlVHJhbnNpdGlvbiAtPiB0IF0g LT4gbCBdIF07CgkKCSgqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiop CgkoKiBzdGF0ZW1lbnRzOiB3aGlsZSwgZm9yLCBpZi4uLiAqKQoJc3RhdGVt ZW50czogWwoJCVsgbCA9IExJU1QwIFsKCQkJImJlZ2luIjsgZGVjbHMgPSB2 YXJEZWNsc0FuZERvT3B0OyBzdCA9IHN0YXRlbWVudHM7ICJlbmQiIC0+CgkJ CUNhbGFzdC5TdG10QmxvY2sgKGNvbnZlcnRfbG9jIF9sb2MsIGRlY2xzLCBz dCkKCQl8ICJjaG9vc2UiIC0+CgkJCUFzdGhlbHBlci5mYWlsd2l0aCAoY29u dmVydF9sb2MgX2xvYykKCQkJCSJSVkMtQ0FMIGRvZXMgbm90IHN1cHBvcnQg dGhlIFwiY2hvb3NlXCIgc3RhdGVtZW50LiIKCQl8ICJmb3IiIC0+CgkJCUFz dGhlbHBlci5mYWlsd2l0aCAoY29udmVydF9sb2MgX2xvYykKCQkJCSJSVkMt Q0FMIGRvZXMgbm90IHN1cHBvcnQgdGhlIFwiZm9yXCIgc3RhdGVtZW50LCBw bGVhc2UgdXNlIFwiZm9yZWFjaFwiIGluc3RlYWQuIgoJCXwgImZvcmVhY2gi OyB2YXIgPSB2YXJEZWNsTm9FeHByOyAiaW4iOyBlID0gZXhwcmVzc2lvbjsK CQkJdiA9IHZhckRlY2xzT3B0OyAiZG8iOyBzID0gc3RhdGVtZW50czsgImVu ZCIgLT4KCQkJQ2FsYXN0LlN0bXRGb3JlYWNoIChjb252ZXJ0X2xvYyBfbG9j LCB2YXIsIGUsIHYsIHMpCgkJfCAiZm9yZWFjaCI7IHR5cGVEZWY7IGlkZW50 OyAiaW4iOyBleHByZXNzaW9uOyAiLi4iOyBleHByZXNzaW9uIC0+CgkJCUFz dGhlbHBlci5mYWlsd2l0aCAoY29udmVydF9sb2MgX2xvYykKCQkJCSJSVkMt Q0FMIGRvZXMgbm90IHN1cHBvcnQgdGhlIFwiLi5cIiBjb25zdHJ1Y3QsIHBs ZWFzZSB1c2UgXCJJbnRlZ2Vyc1wiIGluc3RlYWQuIgoJCXwgImlmIjsgZSA9 IGV4cHJlc3Npb247ICJ0aGVuIjsgczEgPSBzdGF0ZW1lbnRzOyBzMiA9IHN0 YXRlbWVudElmRWxzZU9wdDsgImVuZCIgLT4KCQkJQ2FsYXN0LlN0bXRJZiAo Y29udmVydF9sb2MgX2xvYywgZSwgczEsIHMyKQoJCXwgIndoaWxlIjsgZSA9 IGV4cHJlc3Npb247IGRlY2xzID0gdmFyRGVjbHNPcHQ7ICJkbyI7IHMgPSBz dGF0ZW1lbnRzOyAiZW5kIiAtPgoJCQlDYWxhc3QuU3RtdFdoaWxlIChjb252 ZXJ0X2xvYyBfbG9jLCBlLCBkZWNscywgcykKCQl8IChsb2MsIHYpID0gaWRl bnQ7ICJbIjsgZWwgPSBleHByZXNzaW9uczsgIl0iOyAiOj0iOyBlID0gZXhw cmVzc2lvbjsgIjsiIC0+CgkJCUNhbGFzdC5TdG10SW5zdHIgKGNvbnZlcnRf bG9jIF9sb2MsCgkJCQlbQ2FsYXN0Lkluc3RyQXNzaWduQXJyYXkgKGNvbnZl cnRfbG9jIF9sb2MsIChsb2MsIHYpLCBlbCwgZSldKQoJCXwgKF8sIHYpID0g aWRlbnQ7ICIuIjsgKF8sIGYpID0gaWRlbnQ7ICI6PSI7IGUgPSBleHByZXNz aW9uOyAiOyIgLT4KCQkJQ2FsYXN0LlN0bXRJbnN0ciAoY29udmVydF9sb2Mg X2xvYywKCQkJCVtDYWxhc3QuSW5zdHJBc3NpZ25GaWVsZCAoY29udmVydF9s b2MgX2xvYywgdiwgZiwgZSldKQoJCXwgKGxvYywgdikgPSBpZGVudDsgIjo9 IjsgZSA9IGV4cHJlc3Npb247ICI7IiAtPgoJCQlDYWxhc3QuU3RtdEluc3Ry IChjb252ZXJ0X2xvYyBfbG9jLAoJCQkJW0NhbGFzdC5JbnN0ckFzc2lnblZh ciAoY29udmVydF9sb2MgX2xvYywgKGxvYywgdiksIGUpXSkKCQl8IChfLCB2 KSA9IGlkZW50OyAiKCI7IGVsID0gZXhwcmVzc2lvbnM7ICIpIjsgIjsiIC0+ CgkJCUNhbGFzdC5TdG10SW5zdHIgKGNvbnZlcnRfbG9jIF9sb2MsCgkJCQlb Q2FsYXN0Lkluc3RyQ2FsbCAoY29udmVydF9sb2MgX2xvYywgdiwgZWwpXSkK CQl8IChfLCB2KSA9IGlkZW50OyAiLiI7IChfLCBtKSA9IGlkZW50OyAiKCI7 IGVsID0gZXhwcmVzc2lvbnM7ICIpIjsKCQkgIExJU1QwIFsgIi4iOyBpZGVu dDsgIigiOyBleHByZXNzaW9uczsgIikiIF07ICI7IiAtPgoJCQlDYWxhc3Qu U3RtdEluc3RyIChjb252ZXJ0X2xvYyBfbG9jLAoJCQkJW0NhbGFzdC5JbnN0 ckNhbGxNZXRob2QgKGNvbnZlcnRfbG9jIF9sb2MsIHYsIG0sIGVsKV0pCgkJ XSAtPiBsIF0KCV07CgkKCXN0YXRlbWVudEZvckVhY2hJZGVudHM6IFsgWyBs ID0gTElTVDEgWyB0ID0gdHlwZURlZjsgKGxvYywgbmFtZSkgPSBpZGVudCAt PgoJCXZhciBmYWxzZSBmYWxzZSBsb2MgbmFtZSB0IE5vbmUKCV0gLT4gbCBd IF07CgkKCXN0YXRlbWVudElmRWxzZU9wdDogWyBbICJlbHNlIjsgcyA9IHN0 YXRlbWVudHMgLT4gcyB8IC0+IFtdIF0gXTsKCQoJKCoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKikKCSgqIGEgdHlwZSBhdHRyaWJ1dGUsIHN1Y2gg YXMgInR5cGU6IiBhbmQgInNpemU9IiAqKQoJdHlwZUF0dHJzOiBbCgkJWyBs ID0gTElTVDAgWwoJCQkoXywgYXR0cikgPSBpZGVudDsgIjoiOyB0ID0gdHlw ZURlZiAtPiAoYXR0ciwgVHlwZUF0dHIgdCkKCQl8IChfLCBhdHRyKSA9IGlk ZW50OyAiPSI7IGUgPSBleHByZXNzaW9uIC0+IChhdHRyLCBFeHByQXR0ciBl KQoJCV0gU0VQICIsIiAtPiBsIF0KCV07CgoJKCogYSB0eXBlIGRlZmluaXRp b246IGJvb2wsIGludChzaXplPTUpLCBsaXN0KHR5cGU6aW50LCBzaXplPTEw KS4uLiAqKQkKCXR5cGVEZWY6IFsKCQlbIChfLCBuYW1lKSA9IGlkZW50IC0+ IHR5cGVfb2ZfdHlwZURlZiBfbG9jIG5hbWUgW10KCQl8IGlkZW50OyAiWyI7 IHR5cGVQYXJzOyAiXSIgLT4KCQkJQXN0aGVscGVyLmZhaWx3aXRoIChjb252 ZXJ0X2xvYyBfbG9jKSAiUlZDLUNBTCBkb2VzIG5vdCBzdXBwb3J0IHR5cGUg cGFyYW1ldGVycy4iCgkJfCAoXywgbmFtZSkgPSBpZGVudDsgIigiOyBhdHRy cyA9IHR5cGVBdHRyczsgIikiIC0+CgkJCSAgdHlwZV9vZl90eXBlRGVmIF9s b2MgbmFtZSBhdHRycyBdCgldOwoJCgkoKiB0eXBlIHBhcmFtZXRlcnMsIG5v dCBzdXBwb3J0ZWQgYXQgdGhpcyBwb2ludC4gKikKCXR5cGVQYXJzOiBbIFsg TElTVDAgWyBJREVOVCAtPiAoKSB8IElERU5UOyAiPCI7IHR5cGVEZWYgLT4g KCkJXSBTRVAgIiwiIC0+ICgpIF0gXTsKCQoJdHlwZVBhcnNPcHQ6IFsKCQlb ICJbIjsgdHlwZVBhcnM7ICJdIiAtPgoJCQlBc3RoZWxwZXIuZmFpbHdpdGgg KGNvbnZlcnRfbG9jIF9sb2MpICJSVkMtQ0FMIGRvZXMgbm90IHN1cHBvcnQg dHlwZSBwYXJhbWV0ZXJzLiIKCQl8IF0KCV07CgkKCSgqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiopCgkoKiB2YXJpYWJsZSBkZWNsYXJhdGlvbnMu ICopCgkKCSgqIHdlIGRvIG5vdCBzdXBwb3J0IG5lc3RlZCBkZWNsYXJhdGlv bnMgb2YgZnVuY3Rpb25zIG5vciBwcm9jZWR1cmVzLiAqKQoJdmFyRGVjbDog WwoJCVsgdCA9IHR5cGVEZWY7IChsb2MsIG5hbWUpID0gaWRlbnQ7ICI9Ijsg ZSA9IGV4cHJlc3Npb24gLT4KCQkJdmFyIGZhbHNlIGZhbHNlIGxvYyBuYW1l IHQgKFNvbWUgZSkKCQl8IHQgPSB0eXBlRGVmOyAobG9jLCBuYW1lKSA9IGlk ZW50OyAiOj0iOyBlID0gZXhwcmVzc2lvbiAtPgoJCQl2YXIgdHJ1ZSBmYWxz ZSBsb2MgbmFtZSB0IChTb21lIGUpCgkJfCB0ID0gdHlwZURlZjsgKGxvYywg bmFtZSkgPSBpZGVudCAtPiB2YXIgdHJ1ZSBmYWxzZSBsb2MgbmFtZSB0IE5v bmUgXQoJXTsKCQoJCgkoKiB0ID0gdHlwZURlZjsgKGxvYywgbmFtZSkgPSBp ZGVudCAtPiB2YXIgZmFsc2UgZmFsc2UgbG9jIG5hbWUgdCBOb25lCSopCgl2 YXJEZWNsRnVuY3Rpb25QYXJhbXM6IFsKCQlbIGwgPSBMSVNUMAoJCQlbIHQg PSB0eXBlRGVmOyAobG9jLCBuYW1lKSA9IGlkZW50IC0+IHZhciB0cnVlIGZh bHNlIGxvYyBuYW1lIHQgTm9uZQoJCV0gU0VQICIsIiAtPiBsIF0KCV07CgoJ dmFyRGVjbE5vRXhwcjogWwoJCVsgdCA9IHR5cGVEZWY7IChsb2MsIG5hbWUp ID0gaWRlbnQgLT4gdmFyIGZhbHNlIGZhbHNlIGxvYyBuYW1lIHQgTm9uZQoJ CV0KCV07CgkKCXZhckRlY2xzOiBbIFsgbCA9IExJU1QxIFsgdiA9IHZhckRl Y2wgLT4gdl0gU0VQICIsIiAtPiBsIF0gXTsKCQoJdmFyRGVjbHNBbmREb09w dDogWyBbICJ2YXIiOyBkZWNscyA9IHZhckRlY2xzOyAiZG8iIC0+IGRlY2xz IHwgLT4gW10gXSBdOwoJCgl2YXJEZWNsc09wdDogWyBbICJ2YXIiOyBkZWNs cyA9IHZhckRlY2xzIC0+IGRlY2xzIHwgLT4gW10gXSBdOwpFTkQKCigqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKikKKCogYWRkaXRpb25hbCBn cmFtbWFyIGZvciAtRCA8dHlwZT4gPG5hbWU+ID0gPHZhbHVlPiAqKQoKbGV0 IGFyZyA9IEdyYW0uRW50cnkubWsgImFyZyIKCigqIEdyYW1tYXIgZGVmaW5p dGlvbiAqKQpFWFRFTkQgR3JhbQoKICBhcmc6IFsKCQlbIChsb2MsIG5hbWUp ID0gaWRlbnQ7ICI9IjsgZSA9IGV4cHJlc3Npb24gLT4KCQkJdmFyIGZhbHNl IHRydWUgbG9jIG5hbWUgQ2FsYXN0LlR5cGVVbmtub3duIChTb21lIGUpIF0K CV07CgpFTkQKCmxldCBwYXJzZV93aXRoX21zZyBmIHJ1bGUgbG9jIHN0cmVh bSA9Cgl0cnkKCQlmIHJ1bGUgbG9jIHN0cmVhbQoJd2l0aCBDYW1scDRMb2Mu RXhjX2xvY2F0ZWQgKGxvYywgZXhuKSAtPgoJCShtYXRjaCBleG4gd2l0aAoJ CQl8IFN0cmVhbS5FcnJvciBlcnIgLT4gZnByaW50ZiBzdGRlcnIgIiVzXG4l c1xuIiAoQ2FtbHA0TG9jLnRvX3N0cmluZyBsb2MpIGVycgoJCQl8IF8gLT4g ZnByaW50ZiBzdGRlcnIgIiVzXG4lc1xuIiAoQ2FtbHA0TG9jLnRvX3N0cmlu ZyBsb2MpIChQcmludGV4Yy50b19zdHJpbmcgZXhuKSk7CgkJZXhpdCAoLTEp CgooKiogW3BhcnNlX2FjdG9yIHBhdGhdIHBhcnNlcyB0aGUgZmlsZSB3aG9z ZSBhYnNvbHV0ZSBwYXRoIGlzIGdpdmVuIGJ5IFtwYXRoXQogYW5kIHJldHVy bnMgYSBbQ2FsYXN0LmFjdG9yXS4gSWYgYW55dGhpbmcgZ29lcyB3cm9uZywg Q2FsMkMgZXhpc3RzLiAqKQpsZXQgcGFyc2VfYWN0b3IgZmlsZSA9CglsZXQg dDEgPSBTeXMudGltZSAoKSBpbgoJbGV0IGNoID0gb3Blbl9pbiBmaWxlIGlu CglsZXQgYWN0b3IgPQoJCXBhcnNlX3dpdGhfbXNnIEdyYW0ucGFyc2UgYWN0 b3IgKExvYy5tayBmaWxlKSAoU3RyZWFtLm9mX2NoYW5uZWwgY2gpCglpbgoJ Y2xvc2VfaW4gY2g7CglsZXQgdDIgPSBTeXMudGltZSAoKSBpbgoJdGltZSA6 PSAhdGltZSArLiB0MiAtLiB0MTsKCWFjdG9yCgooKiogW3BhcnNlX2FyZyBz dHJdIHBhcnNlcyB0aGUgc3RyaW5nIFtzdHJdIGFzIGEgdmFyaWFibGUgZGVj bGFyYXRpb24sCiBhbmQgcmV0dXJucyBhIFtDYWxhc3QudmFyX2RlY2xdLiBJ ZiBhbnl0aGluZyBnb2VzIHdyb25nLCBDYWwyQyBleGl0cy4gKikKbGV0IHBh cnNlX2FyZyBzdHIgPQoJcGFyc2Vfd2l0aF9tc2cgR3JhbS5wYXJzZSBhcmcg KExvYy5tayBzdHIpIChTdHJlYW0ub2Zfc3RyaW5nIHN0cikKCmxldCBwYXJz ZV9leHByIHN0ciA9CglwYXJzZV93aXRoX21zZyBHcmFtLnBhcnNlIGV4cHJl c3Npb24gKExvYy5tayBzdHIpIChTdHJlYW0ub2Zfc3RyaW5nIHN0cikK --0-1016260411-1236471606=:92153--