Error writing to database on first try setting up HotPot on Moodle 2.2.3+

Error writing to database on first try setting up HotPot on Moodle 2.2.3+

by Jeff Finnan -
Number of replies: 13

Hi All,


It's been a while since I posted here. Moodle 1.9 has been working fine for me with QuizPorts and such. But, alas, my district is moving to 2.2 this summer. Man, I've been spoiled with QuizPort. I'm going to miss it. Gordon, why did you make me so dependent? wink

I just set up my own Moodle 2.2.3+. Added the HotPot module. Added a Hotpot quiz. I think I uploaded it properly. I picked some simple ones. As soon as I click on a
HotPot quiz, I get "Error writing to database". 

I turned on debugging and get:

1.00272 secs RAM: 62.5MB RAM peak: 62.8MB Included 700 files Contexts for which filters were loaded: 0 Filters created: 0 Pieces of content filtered: 0 Strings filtered: 0 get_string calls: 1408 strings mem cache hits: 1229 strings disk cache hits: 181 DB reads/writes: 81/2 ticks: 101 user: 90 sys: 8 cuser: 0 csys: 0 Load average: 0.67 Session: 7.1KB
 
Any ideas?
 
Thanks,
Jeff

Average of ratings: -
In reply to Jeff Finnan

Re: Error writing to database on first try setting up HotPot on Moodle 2.2.3+

by Gordon Bateson -
Picture of Core developers Picture of Peer reviewers Picture of Plugin developers

Hi Jeff,
we need a more specific error. Try switching the Moodle debugging to "Developer" level and enable "Display errors". That should at least give you a small list showing which line of which script(s) the error came from.

You could also try uploading the quiz to my Moodle 2.2. If you can reproduce the error there, I can definitely tell you what is going wrong, and can probably fix it for you too.

regards
Gordon

In reply to Gordon Bateson

Re: Error writing to database on first try setting up HotPot on Moodle 2.2.3+

by Jeff Finnan -

Hi Gordon,

The quiz works fine on your server.

Here is the developer info:

 

================================

Debug info: Data too long for column 'content' at row 1
INSERT INTO mdl_hotpot_cache (hotpotid,md5key,timemodified,slasharguments,hotpot_enableobfuscate,hotpot_enableswf,name,sourcefile,sourcetype,sourcelocation,configfile,configlocation,navigation,stopbutton,stoptext,title,usefilters,useglossary,usemediafilter,studentfeedback,studentfeedbackurl,timelimit,delay3,clickreporting,sourcelastmodified,configlastmodified,sourceetag,configetag,content) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
[array (
0 => '3',
1 => '0df892f3aa670ffe5c6b30784b3c6c8c',
2 => 1340842443,
3 => '1',
4 => '1',
5 => '1',
6 => 'Acid Base',
7 => '/trstHP/acidsNamesMC.jqz',
8 => 'hp_6_jquiz_xml',
9 => '0',
10 => '',
11 => '0',
12 => '1',
13 => '0',
14 => '',
15 => '3',
16 => '0',
17 => '0',
18 => '',
19 => '0',
20 => '',
21 => '0',
22 => '0',
23 => '0',
24 => '',
25 => '',
26 => '',
27 => '',
28 => 'Tzo4OiJzdGRDbGFzcyI6Nzp7czoxNDoieG1sZGVjbGFyYXRpb24iO3M6MjI6Ijw/eG1sIHZlcnNpb249IjEuMCI/PgoiO3M6NzoiZG9jdHlwZSI7czowOiIiO3M6MTQ6Imh0bWxhdHRyaWJ1dGVzIjtzOjA6IiI7czoxNDoiaGVhZGF0dHJpYnV0ZXMiO3M6MDoiIjtzOjExOiJoZWFkY29udGVudCI7czo3NDEzMjoiCjxsaW5rIHJlbD0ic2NoZW1hLkRDIiBocmVmPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgLz4KPG1ldGEgbmFtZT0iREM6Q3JlYXRvciIgY29udGVudD0iSmVmZiBGaW5uYW4iIC8+CjxtZXRhIG5hbWU9IkRDOlRpdGxlIiBjb250ZW50PSJOYW1pbmcgQWNpZHMgLSBNdWx0aXBsZSBDaG9pY2UiIC8+CjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEiIC8+CjwhLS0gTWFkZSB3aXRoIGV4ZWN1dGFibGUgdmVyc2lvbiA2LnggKE1vb2RsZSAyLjIuMysgKEJ1aWxkOiAyMDEyMDYyNCksIEhvdFBvdCB2My4wLjM5KSAtLT4KPCEtLSBUaGUgZm9sbG93aW5nIGluc2VydGlvbiBhbGxvd3MgeW91IHRvIGFkZCB5b3VyIG93biBjb2RlIGRpcmVjdGx5IHRvIHRoaXMgaGVhZCB0YWcgZnJvbSB0aGUgY29uZmlndXJhdGlvbiBzY3JlZW4gLS0+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiNyZWdpb24tbWFpbiBkaXYjQ2hhcmFjdGVyS2V5cGFkIGJ1dHRvbiwKI3JlZ2lvbi1tYWluIGlucHV0LlNob3J0QW5zd2VyQm94LAojcmVnaW9uLW1haW4gdGV4dGFyZWEuU2hvcnRBbnN3ZXJCb3gKewogZm9udC1mYW1pbHk6ICJMdWNpZGEgU2FucyBVbmljb2RlIjsKfQo8L3N0eWxlPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgovKiBUaGlzIGlzIHRoZSBDU1Mgc3R5bGVzaGVldCB1c2VkIGluIHRoZSBleGVyY2lzZS4gKi8KLyogRWxlbWVudHMgaW4gc3F1YXJlIGJyYWNrZXRzIGFyZSByZXBsYWNlZCBieSBkYXRhIGJhc2VkIG9uIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3Mgd2hlbiB0aGUgZXhlcmNpc2UgaXMgYnVpbHQuICovCi8qIEJlZ2luQ29yZVBhZ2VDU1MgKi8KLyogTWFkZSB3aXRoIGV4ZWN1dGFibGUgdmVyc2lvbiA2LnggKE1vb2RsZSAyLjIuMysgKEJ1aWxkOiAyMDEyMDYyNCksIEhvdFBvdCB2My4wLjM5KSAqLwovKiBIYWNrIHRvIGhpZGUgYSBuZXN0ZWQgUXVpY2t0aW1lIHBsYXllciBmcm9tIElFLCB3aGljaCBjYW4ndCBoYW5kbGUgaXQuICovCipodG1sIG9iamVjdC5NZWRpYVBsYXllck5vdEZvcklFCnsKCWRpc3BsYXk6IG5vbmU7Cn0KI3JlZ2lvbi1tYWluIHAKewoJdGV4dC1hbGlnbjogbGVmdDsKCW1hcmdpbjogMHB4OwoJZm9udC1zaXplOiAxMDAlOwp9CiNyZWdpb24tbWFpbiB0YWJsZSwKI3JlZ2lvbi1tYWluIGRpdiwKI3JlZ2lvbi1tYWluIHNwYW4sCiNyZWdpb24tbWFpbiB0ZAp7Cglmb250LXNpemU6IDEwMCU7Cgljb2xvcjogI2ZmZmZmZjsKfQojcmVnaW9uLW1haW4gZGl2LlRpdGxlcwp7CglwYWRkaW5nOiAwLjVlbTs7Cgl0ZXh0LWFsaWduOiBjZW50ZXI7Cgljb2xvcjogI0QxQ0FCMDsKfQojcmVnaW9uLW1haW4gYnV0dG9uCnsKCWZvbnQtZmFtaWx5OiBBcmlhbCxHZW5ldmEsc2Fucy1zZXJpZjsKCWZvbnQtc2l6ZTogMTAwJTsKCWRpc3BsYXk6IGlubGluZTsKfQojcmVnaW9uLW1haW4gLkV4ZXJjaXNlVGl0bGUKewoJZm9udC1zaXplOiAxNDAlOwoJY29sb3I6ICNEMUNBQjA7Cn0KI3JlZ2lvbi1tYWluIC5FeGVyY2lzZVN1YnRpdGxlCnsKCWZvbnQtc2l6ZTogMTIwJTsKCWNvbG9yOiAjRDFDQUIwOwp9CiNyZWdpb24tbWFpbiBkaXYuU3RkRGl2CnsKCWJhY2tncm91bmQtY29sb3I6ICM0Mzk2Yzg7Cgl0ZXh0LWFsaWduOiBjZW50ZXI7Cglmb250LXNpemU6IDEwMCU7Cgljb2xvcjogI2ZmZmZmZjsKCXBhZGRpbmc6IDAuNWVtOwoJYm9yZGVyLXN0eWxlOiBzb2xpZDsKCWJvcmRlci13aWR0aDogMXB4IDFweCAxcHggMXB4OwoJYm9yZGVyLWNvbG9yOiAjZmZmZmZmOwoJbWFyZ2luLWJvdHRvbTogMXB4Owp9Ci8qIEVuZENvcmVQYWdlQ1NTICovCiNyZWdpb24tbWFpbiAuUlRMVGV4dAp7Cgl0ZXh0LWFsaWduOiByaWdodDsKCWZvbnQtc2l6ZTogMTUwJTsKCWRpcmVjdGlvbjogcnRsOwoJZm9udC1mYW1pbHk6ICJTaW1wbGlmaWVkIEFyYWJpYyIsICJUcmFkaXRpb25hbCBBcmFiaWMiLCAiVGltZXMgTmV3IFJvbWFuIiwgQXJpYWwsR2VuZXZhLHNhbnMtc2VyaWY7Cn0KI3JlZ2lvbi1tYWluIC5DZW50cmVkUlRMVGV4dAp7Cgl0ZXh0LWFsaWduOiBjZW50ZXI7Cglmb250LXNpemU6IDE1MCU7CglkaXJlY3Rpb246IHJ0bDsKCWZvbnQtZmFtaWx5OiAiU2ltcGxpZmllZCBBcmFiaWMiLCAiVHJhZGl0aW9uYWwgQXJhYmljIiwgIlRpbWVzIE5ldyBSb21hbiIsIEFyaWFsLEdlbmV2YSxzYW5zLXNlcmlmOwp9CiNyZWdpb24tbWFpbiBidXR0b24gcC5SVExUZXh0CnsKCXRleHQtYWxpZ246IGNlbnRlcjsKfQojcmVnaW9uLW1haW4gLlJUTEdhcEJveAp7Cgl0ZXh0LWFsaWduOiByaWdodDsKCWZvbnQtc2l6ZTogMTUwJTsKCWRpcmVjdGlvbjogcnRsOwoJZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBBcmlhbCxHZW5ldmEsc2Fucy1zZXJpZjsKfQojcmVnaW9uLW1haW4gLkd1ZXNzCnsKCWZvbnQtd2VpZ2h0OiBib2xkOwp9CiNyZWdpb24tbWFpbiAuQ29ycmVjdEFuc3dlcgp7Cglmb250LXdlaWdodDogYm9sZDsKfQojcmVnaW9uLW1haW4gZGl2I1RpbWVyCnsKCXBhZGRpbmc6IDAuMjVlbTsKCW1hcmdpbi1sZWZ0OiBhdXRvOwoJbWFyZ2luLXJpZ2h0OiBhdXRvOwoJdGV4dC1hbGlnbjogY2VudGVyOwoJY29sb3I6ICNEMUNBQjA7Cn0KI3JlZ2lvbi1tYWluIHNwYW4jVGltZXJUZXh0CnsKCXBhZGRpbmc6IDAuMjVlbTsKCWJvcmRlci13aWR0aDogMXB4OwoJYm9yZGVyLXN0eWxlOiBzb2xpZDsKCWZvbnQtd2VpZ2h0OiBib2xkOwoJZGlzcGxheTogbm9uZTsKCWNvbG9yOiAjRDFDQUIwOwp9CiNyZWdpb24tbWFpbiBzcGFuLkluc3RydWN0aW9ucwp7Cn0KI3JlZ2lvbi1tYWluIGRpdi5FeGVyY2lzZVRleHQKewp9CiNyZWdpb24tbWFpbiAuRmVlZGJhY2tUZXh0LAojcmVnaW9uLW1haW4gLkZlZWRiYWNrVGV4dCBzcGFuLkNvcnJlY3RBbnN3ZXIsCiNyZWdpb24tbWFpbiAuRmVlZGJhY2tUZXh0IHNwYW4uR3Vlc3MsCiNyZWdpb24tbWFpbiAuRmVlZGJhY2tUZXh0IHNwYW4uQW5zd2VyCnsKCWNvbG9yOiAjRDFDQUIwOwp9CiNyZWdpb24tbWFpbiAuTGVmdEl0ZW0KewoJZm9udC1zaXplOiAxMDAlOwoJY29sb3I6ICNmZmZmZmY7Cgl0ZXh0LWFsaWduOiBsZWZ0Owp9CiNyZWdpb24tbWFpbiAuUmlnaHRJdGVtCnsKCWZvbnQtd2VpZ2h0OiBib2xkOwoJZm9udC1zaXplOiAxMDAlOwoJY29sb3I6ICNmZmZmZmY7Cn0KI3JlZ2lvbi1tYWluIHNwYW4uQ29ycmVjdE1hcmsKewp9CiNyZWdpb24tbWFpbiBpbnB1dCwKI3JlZ2lvbi1tYWluIHRleHRhcmVhCnsKCWZvbnQtZmFtaWx5OiBBcmlhbCxHZW5ldmEsc2Fucy1zZXJpZjsKCWZvbnQtc2l6ZTogMTIwJTsKfQojcmVnaW9uLW1haW4gc2VsZWN0CnsKCWZvbnQtc2l6ZTogMTAwJTsKfQojcmVnaW9uLW1haW4gZGl2LkZlZWRiYWNrCnsKCWJhY2tncm91bmQtY29sb3I6ICMxMjU4OWU7CglsZWZ0OiAzMyU7Cgl3aWR0aDogMzQlOwoJdG9wOiAzMyU7Cgl6LWluZGV4OiAxOwoJYm9yZGVyLXN0eWxlOiBzb2xpZDsKCWJvcmRlci13aWR0aDogMXB4OwoJcGFkZGluZzogNXB4OwoJdGV4dC1hbGlnbjogY2VudGVyOwoJY29sb3I6ICNEMUNBQjA7Cglwb3NpdGlvbjogYWJzb2x1dGU7CglkaXNwbGF5OiBub25lOwoJZm9udC1zaXplOiAxMDAlOwp9CiNyZWdpb24tbWFpbiBkaXYuRXhlcmNpc2VEaXYKewoJY29sb3I6ICNmZmZmZmY7Cn0KLyogSk1hdGNoIGZsYXNoY2FyZCBzdHlsZXMgKi8KI3JlZ2lvbi1tYWluIHRhYmxlLkZsYXNoY2FyZFRhYmxlCnsKCWJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OwoJY29sb3I6ICNmZmZmZmY7Cglib3JkZXItY29sb3I6ICNmZmZmZmY7CgltYXJnaW4tbGVmdDogNSU7CgltYXJnaW4tcmlnaHQ6IDUlOwoJbWFyZ2luLXRvcDogMmVtOwoJbWFyZ2luLWJvdHRvbTogMmVtOwoJd2lkdGg6IDkwJTsKCXBvc2l0aW9uOiByZWxhdGl2ZTsKCXRleHQtYWxpZ246IGNlbnRlcjsKCXBhZGRpbmc6IDBweDsKfQojcmVnaW9uLW1haW4gdGFibGUuRmxhc2hjYXJkVGFibGUgdHIKewoJYm9yZGVyLXN0eWxlOiBub25lOwoJbWFyZ2luOiAwcHg7CglwYWRkaW5nOiAwcHg7CgliYWNrZ3JvdW5kLWNvbG9yOiAjNDM5NmM4Owp9CiNyZWdpb24tbWFpbiB0YWJsZS5GbGFzaGNhcmRUYWJsZSB0ZC5TaG93aW5nCnsKCWZvbnQtc2l6ZTogMTQwJTsKCXRleHQtYWxpZ246IGNlbnRlcjsKCXdpZHRoOiA1MCU7CglkaXNwbGF5OiB0YWJsZS1jZWxsOwoJcGFkZGluZzogMmVtOwoJbWFyZ2luOiAwcHg7Cglib3JkZXItc3R5bGU6IHNvbGlkOwoJYm9yZGVyLXdpZHRoOiAxcHg7Cgljb2xvcjogI2ZmZmZmZjsKCWJhY2tncm91bmQtY29sb3I6ICM0Mzk2Yzg7Cn0KI3JlZ2lvbi1tYWluIHRhYmxlLkZsYXNoY2FyZFRhYmxlIHRkLkhpZGRlbgp7CglkaXNwbGF5OiBub25lOwp9Ci8qIEpNaXggc3R5bGVzICovCiNyZWdpb24tbWFpbiBkaXYjU2VnbWVudERpdgp7CgltYXJnaW4tdG9wOiAyZW07CgltYXJnaW4tYm90dG9tOiAyZW07Cgl0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KI3JlZ2lvbi1tYWluIGEuRXhTZWdtZW50CnsKCWZvbnQtc2l6ZTogMTIwJTsKCWZvbnQtd2VpZ2h0OiBib2xkOwoJdGV4dC1kZWNvcmF0aW9uOiBub25lOwoJY29sb3I6ICNmZmZmZmY7Cn0KI3JlZ2lvbi1tYWluIHNwYW4uUmVtYWluaW5nV29yZExpc3QKewoJZm9udC1zdHlsZTogaXRhbGljOwp9CiNyZWdpb24tbWFpbiBkaXYuRHJvcExpbmUKewoJcG9zaXRpb246IGFic29sdXRlOwoJdGV4dC1hbGlnbjogY2VudGVyOwoJYm9yZGVyLWJvdHRvbS1zdHlsZTogc29saWQ7Cglib3JkZXItYm90dG9tLXdpZHRoOiAxcHg7Cglib3JkZXItYm90dG9tLWNvbG9yOiAjRDFDQUIwOwoJd2lkdGg6IDgwJTsKfQovKiBKQ2xvemUgc3R5bGVzICovCiNyZWdpb24tbWFpbiAuQ2xvemVXb3JkTGlzdAp7Cgl0ZXh0LWFsaWduOiBjZW50ZXI7Cglmb250LXdlaWdodDogYm9sZDsKfQojcmVnaW9uLW1haW4gZGl2LkNsb3plQm9keQp7Cgl0ZXh0LWFsaWduOiBsZWZ0OwoJbWFyZ2luLXRvcDogMmVtOwoJbWFyZ2luLWJvdHRvbTogMmVtOwoJbGluZS1oZWlnaHQ6IDIuMAp9CiNyZWdpb24tbWFpbiBzcGFuLkdhcFNwYW4KewoJZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KLyogSkNyb3NzIHN0eWxlcyAqLwojcmVnaW9uLW1haW4gdGFibGUuQ3Jvc3N3b3JkR3JpZAp7CgltYXJnaW46IGF1dG8gYXV0byAxZW0gYXV0bzsKCWJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CglwYWRkaW5nOiAwcHg7CgliYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwOwp9CiNyZWdpb24tbWFpbiB0YWJsZS5Dcm9zc3dvcmRHcmlkIHRib2R5IHRyIHRkCnsKCXdpZHRoOiAxLjVlbTsKCWhlaWdodDogMS41ZW07Cgl0ZXh0LWFsaWduOiBjZW50ZXI7Cgl2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwoJZm9udC1zaXplOiAxNDAlOwoJcGFkZGluZzogMXB4OwoJbWFyZ2luOiAwcHg7Cglib3JkZXItc3R5bGU6IHNvbGlkOwoJYm9yZGVyLXdpZHRoOiAxcHg7Cglib3JkZXItY29sb3I6ICMwMDAwMDA7Cgljb2xvcjogIzAwMDAwMDsKfQojcmVnaW9uLW1haW4gdGFibGUuQ3Jvc3N3b3JkR3JpZCBzcGFuCnsKCWNvbG9yOiAjMDAwMDAwOwp9CiNyZWdpb24tbWFpbiB0YWJsZS5Dcm9zc3dvcmRHcmlkIHRkLkJsYW5rQ2VsbAp7CgliYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwOwoJY29sb3I6ICMwMDAwMDA7Cn0KI3JlZ2lvbi1tYWluIHRhYmxlLkNyb3Nzd29yZEdyaWQgdGQuTGV0dGVyT25seUNlbGwKewoJdGV4dC1hbGlnbjogY2VudGVyOwoJdmVydGljYWwtYWxpZ246IG1pZGRsZTsKCWJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7Cgljb2xvcjogIzAwMDAwMDsKCWZvbnQtd2VpZ2h0OiBib2xkOwp9CiNyZWdpb24tbWFpbiB0YWJsZS5Dcm9zc3dvcmRHcmlkIHRkLk51bUxldHRlckNlbGwKewoJdGV4dC1hbGlnbjogbGVmdDsKCXZlcnRpY2FsLWFsaWduOiB0b3A7CgliYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmOwoJY29sb3I6ICMwMDAwMDA7CglwYWRkaW5nOiAxcHg7Cglmb250LXdlaWdodDogYm9sZDsKfQojcmVnaW9uLW1haW4gLk51bUxldHRlckNlbGxUZXh0CnsKCWN1cnNvcjogcG9pbnRlcjsKCWNvbG9yOiAjMDAwMDAwOwp9CiNyZWdpb24tbWFpbiAuR3JpZE51bQp7Cgl2ZXJ0aWNhbC1hbGlnbjogc3VwZXI7Cglmb250LXNpemU6IDY2JTsKCWZvbnQtd2VpZ2h0OiBib2xkOwoJdGV4dC1kZWNvcmF0aW9uOiBub25lOwoJY29sb3I6ICMwMDAwMDA7Cn0KI3JlZ2lvbi1tYWluIC5HcmlkTnVtOmhvdmVyLAojcmVnaW9uLW1haW4gLkdyaWROdW06dmlzaXRlZAp7Cgljb2xvcjogIzAwMDAwMDsKfQojcmVnaW9uLW1haW4gdGFibGUjQ2x1ZXMKewoJbWFyZ2luOiBhdXRvOwoJdmVydGljYWwtYWxpZ246IHRvcDsKfQojcmVnaW9uLW1haW4gdGFibGUjQ2x1ZXMgdGQKewoJdmVydGljYWwtYWxpZ246IHRvcDsKfQojcmVnaW9uLW1haW4gdGFibGUuQ2x1ZUxpc3QKewogIG1hcmdpbjogYXV0bzsKfQojcmVnaW9uLW1haW4gdGQuQ2x1ZU51bQp7Cgl0ZXh0LWFsaWduOiByaWdodDsKCWZvbnQtd2VpZ2h0OiBib2xkOwoJdmVydGljYWwtYWxpZ246IHRvcDsKfQojcmVnaW9uLW1haW4gdGQuQ2x1ZQp7Cgl0ZXh0LWFsaWduOiBsZWZ0Owp9CiNyZWdpb24tbWFpbiBkaXYjQ2x1ZUVudHJ5CnsKCXRleHQtYWxpZ246IGxlZnQ7CgltYXJnaW4tYm90dG9tOiAxZW07Cn0KLyogS2V5cGFkIHN0eWxlcyAqLwojcmVnaW9uLW1haW4gZGl2LktleXBhZAp7Cgl0ZXh0LWFsaWduOiBjZW50ZXI7CglkaXNwbGF5OiBub25lOyAvKiBpbml0aWFsbHkgaGlkZGVuLCBzaG93biBpZiBuZWVkZWQgKi8KCW1hcmdpbi1ib3R0b206IDAuNWVtOwp9CiNyZWdpb24tbWFpbiBkaXYuS2V5cGFkIGJ1dHRvbgp7Cglmb250LWZhbWlseTogQXJpYWwsR2VuZXZhLHNhbnMtc2VyaWY7Cglmb250LXNpemU6IDEyMCU7CgliYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmOwoJY29sb3I6ICMwMDAwMDA7Cgl3aWR0aDogMmVtOwp9Ci8qIEpRdWl6IHN0eWxlcyAqLwojcmVnaW9uLW1haW4gZGl2LlF1ZXN0aW9uTmF2aWdhdGlvbgp7Cgl0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KI3JlZ2lvbi1tYWluIC5RTnVtCnsKCW1hcmdpbjogMGVtIDFlbSAwLjVlbSAxZW07Cglmb250LXdlaWdodDogYm9sZDsKCXZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Cn0KI3JlZ2lvbi1tYWluIHRleHRhcmVhCnsKCWZvbnQtZmFtaWx5OiBBcmlhbCxHZW5ldmEsc2Fucy1zZXJpZjsKfQojcmVnaW9uLW1haW4gLlF1ZXN0aW9uVGV4dAp7Cgl0ZXh0LWFsaWduOiBsZWZ0OwoJbWFyZ2luOiAwcHg7Cglmb250LXNpemU6IDEwMCU7Cn0KI3JlZ2lvbi1tYWluIC5BbnN3ZXIKewoJZm9udC1zaXplOiAxMjAlOwoJbGV0dGVyLXNwYWNpbmc6IDAuMWVtOwp9CiNyZWdpb24tbWFpbiAuUGFydGlhbEFuc3dlcgp7Cglmb250LXNpemU6IDEyMCU7CglsZXR0ZXItc3BhY2luZzogMC4xZW07Cgljb2xvcjogI0QxQ0FCMDsKfQojcmVnaW9uLW1haW4gLkhpZ2hsaWdodAp7Cgljb2xvcjogIzAwMDAwMDsKCWJhY2tncm91bmQtY29sb3I6ICNmZmZmMDA7Cglmb250LXdlaWdodDogYm9sZDsKCWZvbnQtc2l6ZTogMTIwJTsKfQojcmVnaW9uLW1haW4gb2wuUXVpelF1ZXN0aW9ucwp7Cgl0ZXh0LWFsaWduOiBsZWZ0OwoJbGlzdC1zdHlsZS10eXBlOiBub25lOwp9CiNyZWdpb24tbWFpbiBvbC5RdWl6UXVlc3Rpb25zIGxpIHsKCWxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKfQojcmVnaW9uLW1haW4gbGkuUXVpelF1ZXN0aW9uCnsKCXBhZGRpbmc6IDFlbTsKCWJvcmRlci1zdHlsZTogc29saWQ7Cglib3JkZXItd2lkdGg6IDBweCAwcHggMXB4IDBweDsKfQojcmVnaW9uLW1haW4gb2wuTUNBbnN3ZXJzCnsKCXRleHQtYWxpZ246IGxlZnQ7CglsaXN0LXN0eWxlLXR5cGU6IHVwcGVyLWFscGhhOwoJcGFkZGluZzogMWVtOwp9CiNyZWdpb24tbWFpbiBvbC5NQ0Fuc3dlcnMgbGkgewoJbGlzdC1zdHlsZS10eXBlOiB1cHBlci1hbHBoYTsKfQojcmVnaW9uLW1haW4gb2wuTUNBbnN3ZXJzIGxpCnsKCW1hcmdpbi1ib3R0b206IDFlbTsKfQojcmVnaW9uLW1haW4gb2wuTVNlbEFuc3dlcnMKewoJdGV4dC1hbGlnbjogbGVmdDsKCWxpc3Qtc3R5bGUtdHlwZTogbG93ZXItYWxwaGE7CglwYWRkaW5nOiAxZW07Cn0KI3JlZ2lvbi1tYWluIG9sLk1TZWxBbnN3ZXJzIGxpIHsKCWxpc3Qtc3R5bGUtdHlwZTogbG93ZXItYWxwaGE7Cn0KI3JlZ2lvbi1tYWluIGRpdi5TaG9ydEFuc3dlcgp7CglwYWRkaW5nOiAxZW07Cn0KI3JlZ2lvbi1tYWluIC5GdW5jQnV0dG9uCnsKCXRleHQtYWxpZ246IGNlbnRlcjsKCWJvcmRlci1zdHlsZTogc29saWQ7Cglib3JkZXItbGVmdC1jb2xvcjogI2ExY2FlMzsKCWJvcmRlci10b3AtY29sb3I6ICNhMWNhZTM7Cglib3JkZXItcmlnaHQtY29sb3I6ICMyMTRiNjQ7Cglib3JkZXItYm90dG9tLWNvbG9yOiAjMjE0YjY0OwoJY29sb3I6ICNmZmZmZmY7CgliYWNrZ3JvdW5kLWNvbG9yOiAjNDM5NmM4OwoJYm9yZGVyLXdpZHRoOiAycHg7CglwYWRkaW5nOiAzcHggNnB4IDNweCA2cHg7CgljdXJzb3I6IHBvaW50ZXI7Cn0KI3JlZ2lvbi1tYWluIC5GdW5jQnV0dG9uVXAKewoJY29sb3I6ICM0Mzk2Yzg7Cgl0ZXh0LWFsaWduOiBjZW50ZXI7Cglib3JkZXItc3R5bGU6IHNvbGlkOwoJYm9yZGVyLWxlZnQtY29sb3I6ICNhMWNhZTM7Cglib3JkZXItdG9wLWNvbG9yOiAjYTFjYWUzOwoJYm9yZGVyLXJpZ2h0LWNvbG9yOiAjMjE0YjY0OwoJYm9yZGVyLWJvdHRvbS1jb2xvcjogIzIxNGI2NDsKCWJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7Cgljb2xvcjogIzQzOTZjODsKCWJvcmRlci13aWR0aDogMnB4OwoJcGFkZGluZzogM3B4IDZweCAzcHggNnB4OwoJY3Vyc29yOiBwb2ludGVyOwp9CiNyZWdpb24tbWFpbiAuRnVuY0J1dHRvbkRvd24KewoJY29sb3I6ICM0Mzk2Yzg7Cgl0ZXh0LWFsaWduOiBjZW50ZXI7Cglib3JkZXItc3R5bGU6IHNvbGlkOwoJYm9yZGVyLWxlZnQtY29sb3I6ICMyMTRiNjQ7Cglib3JkZXItdG9wLWNvbG9yOiAjMjE0YjY0OwoJYm9yZGVyLXJpZ2h0LWNvbG9yOiAjYTFjYWUzOwoJYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ExY2FlMzsKCWJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7Cgljb2xvcjogIzQzOTZjODsKCWJvcmRlci13aWR0aDogMnB4OwoJcGFkZGluZzogM3B4IDZweCAzcHggNnB4OwoJY3Vyc29yOiBwb2ludGVyOwp9Ci8qQmVnaW5OYXZCYXJTdHlsZSovCiNyZWdpb24tbWFpbiBkaXYuTmF2QnV0dG9uQmFyCnsKCWJhY2tncm91bmQtY29sb3I6ICMwMDAwMDA7Cgl0ZXh0LWFsaWduOiBjZW50ZXI7CgltYXJnaW46IDJweCAwcHggMnB4IDBweDsKCWNsZWFyOiBib3RoOwoJZm9udC1zaXplOiAxMDAlOwp9CiNyZWdpb24tbWFpbiAuTmF2QnV0dG9uCnsKCWJvcmRlci1zdHlsZTogc29saWQ7Cglib3JkZXItbGVmdC1jb2xvcjogIzdmN2Y3ZjsKCWJvcmRlci10b3AtY29sb3I6ICM3ZjdmN2Y7Cglib3JkZXItcmlnaHQtY29sb3I6ICMwMDAwMDA7Cglib3JkZXItYm90dG9tLWNvbG9yOiAjMDAwMDAwOwoJYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDsKCWNvbG9yOiAjZmZmZmZmOwoJYm9yZGVyLXdpZHRoOiAycHg7CgljdXJzb3I6IHBvaW50ZXI7Cn0KI3JlZ2lvbi1tYWluIC5OYXZCdXR0b25VcAp7Cglib3JkZXItc3R5bGU6IHNvbGlkOwoJYm9yZGVyLWxlZnQtY29sb3I6ICM3ZjdmN2Y7Cglib3JkZXItdG9wLWNvbG9yOiAjN2Y3ZjdmOwoJYm9yZGVyLXJpZ2h0LWNvbG9yOiAjMDAwMDAwOwoJYm9yZGVyLWJvdHRvbS1jb2xvcjogIzAwMDAwMDsKCWNvbG9yOiAjMDAwMDAwOwoJYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsKCWJvcmRlci13aWR0aDogMnB4OwoJY3Vyc29yOiBwb2ludGVyOwp9CiNyZWdpb24tbWFpbiAuTmF2QnV0dG9uRG93bgp7Cglib3JkZXItc3R5bGU6IHNvbGlkOwoJYm9yZGVyLWxlZnQtY29sb3I6ICMwMDAwMDA7Cglib3JkZXItdG9wLWNvbG9yOiAjMDAwMDAwOwoJYm9yZGVyLXJpZ2h0LWNvbG9yOiAjN2Y3ZjdmOwoJYm9yZGVyLWJvdHRvbS1jb2xvcjogIzdmN2Y3ZjsKCWNvbG9yOiAjMDAwMDAwOwoJYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsKCWJvcmRlci13aWR0aDogMnB4OwoJY3Vyc29yOiBwb2ludGVyOwp9Ci8qRW5kTmF2QmFyU3R5bGUqLwojcmVnaW9uLW1haW4gYQp7Cgljb2xvcjogI2ZmODAwMDsKfQojcmVnaW9uLW1haW4gYTp2aXNpdGVkCnsKCWNvbG9yOiAjZmY4MDAwOwp9CiNyZWdpb24tbWFpbiBhOmhvdmVyCnsKCWNvbG9yOiAjZmY4MDAwOwp9CiNyZWdpb24tbWFpbiBkaXYuQ2FyZFN0eWxlCnsKCXBvc2l0aW9uOiBhYnNvbHV0ZTsKCWZvbnQtZmFtaWx5OiBBcmlhbCxHZW5ldmEsc2Fucy1zZXJpZjsKCWZvbnQtc2l6ZTogMTAwJTsKCXBhZGRpbmc6IDVweDsKCWJvcmRlci1zdHlsZTogc29saWQ7Cglib3JkZXItd2lkdGg6IDFweDsKCWNvbG9yOiAjZmZmZmZmOwoJYmFja2dyb3VuZC1jb2xvcjogIzQzOTZjODsKCWxlZnQ6IC01MHB4OwoJdG9wOiAtNTBweDsKCW92ZXJmbG93OiB2aXNpYmxlOwp9CiNyZWdpb24tbWFpbiAucnRsCnsKCXRleHQtYWxpZ246IHJpZ2h0OwoJZm9udC1zaXplOiAxNDAlOwp9Cm9sLlF1aXpRdWVzdGlvbnN7CgltYXJnaW4tYm90dG9tOjBweDsKfQo8L3N0eWxlPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci8vPCFbQ0RBVEFbCjwhLS0KZnVuY3Rpb24gQ2xpZW50KCl7Cgl0aGlzLm1pbiA9IGZhbHNlOyBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQpe3RoaXMubWluID0gdHJ1ZTt9OwoJdGhpcy51YSA9IG5hdmlnYXRvci51c2VyQWdlbnQ7Cgl0aGlzLm5hbWUgPSBuYXZpZ2F0b3IuYXBwTmFtZTsKCXRoaXMudmVyID0gbmF2aWdhdG9yLmFwcFZlcnNpb247Cgl0aGlzLm1hYyA9ICh0aGlzLnZlci5pbmRleE9mKCdNYWMnKSAhPSAtMSk7Cgl0aGlzLndpbiA9ICh0aGlzLnZlci5pbmRleE9mKCdXaW5kb3dzJykgIT0gLTEpOwoJdGhpcy5nZWNrbyA9ICh0aGlzLnVhLmluZGV4T2YoJ0dlY2tvJykgPiAxKTsKCWlmICh0aGlzLmdlY2tvKXsKCQl0aGlzLmdlY2tvVmVyID0gcGFyc2VJbnQodGhpcy51YS5zdWJzdHJpbmcodGhpcy51YS5pbmRleE9mKCdHZWNrbycpKzYsIHRoaXMudWEubGVuZ3RoKSk7CgkJaWYgKHRoaXMuZ2Vja29WZXIgPCAyMDAyMDAwMCl7dGhpcy5taW4gPSBmYWxzZTt9Cgl9Cgl0aGlzLmZpcmViaXJkID0gKHRoaXMudWEuaW5kZXhPZignRmlyZWJpcmQnKSA+IDEpOwoJdGhpcy5zYWZhcmkgPSAodGhpcy51YS5pbmRleE9mKCdTYWZhcmknKSA+IDEpOwoJaWYgKHRoaXMuc2FmYXJpKXsKCQl0aGlzLmdlY2tvID0gZmFsc2U7Cgl9Cgl0aGlzLmllID0gKHRoaXMudWEuaW5kZXhPZignTVNJRScpID4gMCk7CglpZiAodGhpcy5pZSl7CgkJdGhpcy5pZVZlciA9IHBhcnNlRmxvYXQodGhpcy51YS5zdWJzdHJpbmcodGhpcy51YS5pbmRleE9mKCdNU0lFJykrNSwgdGhpcy51YS5sZW5ndGgpKTsKCQlpZiAodGhpcy5pZVZlciA8IDUuNSl7dGhpcy5taW4gPSBmYWxzZTt9Cgl9Cgl0aGlzLm9wZXJhID0gKHRoaXMudWEuaW5kZXhPZignT3BlcmEnKSA+IDApOwoJaWYgKHRoaXMub3BlcmEpewoJCXRoaXMub3BlcmFWZXIgPSBwYXJzZUZsb2F0KHRoaXMudWEuc3Vic3RyaW5nKHRoaXMudWEuaW5kZXhPZignT3BlcmEnKSs2LCB0aGlzLnVhLmxlbmd0aCkpOwoJCWlmICh0aGlzLm9wZXJhVmVyIDwgNy4wNCl7dGhpcy5taW4gPSBmYWxzZTt9Cgl9Cgl0aGlzLmNocm9tZSA9ICh0aGlzLnVhLmluZGV4T2YoJ0Nocm9tZScpID4gMCk7CglpZiAodGhpcy5jaHJvbWUpIHsKCQl0aGlzLmdlY2tvVmVyID0gMDsKCQl0aGlzLnNhZmFyaSA9IGZhbHNlOwoJCXRoaXMubWluID0gdHJ1ZTsKCX0KCWlmICh0aGlzLm1pbiA9PSBmYWxzZSl7CgkJYWxlcnQoJ1lvdXIgYnJvd3NlciBtYXkgbm90IGJlIGFibGUgdG8gaGFuZGxlIHRoaXMgcGFnZS4nKTsKCX0KCXRoaXMuaWU1bWFjID0gKHRoaXMuaWUmJnRoaXMubWFjJiYodGhpcy5pZVZlcjw2KSk7Cn0KdmFyIEMgPSBuZXcgQ2xpZW50KCk7CmZ1bmN0aW9uIE5hdkJ0bk92ZXIoQnRuKXsKCWlmIChCdG4uY2xhc3NOYW1lICE9ICdOYXZCdXR0b25Eb3duJyl7QnRuLmNsYXNzTmFtZSA9ICdOYXZCdXR0b25VcCc7fQp9CmZ1bmN0aW9uIE5hdkJ0bk91dChCdG4pewoJQnRuLmNsYXNzTmFtZSA9ICdOYXZCdXR0b24nOwp9CmZ1bmN0aW9uIE5hdkJ0bkRvd24oQnRuKXsKCUJ0bi5jbGFzc05hbWUgPSAnTmF2QnV0dG9uRG93bic7Cn0KZnVuY3Rpb24gRnVuY0J0bk92ZXIoQnRuKXsKCWlmIChCdG4uY2xhc3NOYW1lICE9ICdGdW5jQnV0dG9uRG93bicpe0J0bi5jbGFzc05hbWUgPSAnRnVuY0J1dHRvblVwJzt9Cn0KZnVuY3Rpb24gRnVuY0J0bk91dChCdG4pewoJQnRuLmNsYXNzTmFtZSA9ICdGdW5jQnV0dG9uJzsKfQpmdW5jdGlvbiBGdW5jQnRuRG93bihCdG4pewoJQnRuLmNsYXNzTmFtZSA9ICdGdW5jQnV0dG9uRG93bic7Cn0KZnVuY3Rpb24gRm9jdXNBQnV0dG9uKCl7CglpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0NoZWNrQnV0dG9uMScpICE9IG51bGwpewoJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdDaGVja0J1dHRvbjEnKS5mb2N1cygpOwoJfSBlbHNlIHsKCQlpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0NoZWNrQnV0dG9uMicpICE9IG51bGwpewoJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnQ2hlY2tCdXR0b24yJykuZm9jdXMoKTsKCQl9IGVsc2UgewoJCQlkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylbMF0uZm9jdXMoKTsKCQl9Cgl9Cn0KdmFyIHRvcFogPSAxMDAwOwpmdW5jdGlvbiBTaG93TWVzc2FnZShGZWVkYmFjayl7Cgl2YXIgT3V0cHV0ID0gRmVlZGJhY2sgKyAnPGJyIC8+PGJyIC8+JzsKCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdGZWVkYmFja0NvbnRlbnQnKS5pbm5lckhUTUwgPSBPdXRwdXQ7Cgl2YXIgRkRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdGZWVkYmFja0RpdicpOwoJdG9wWisrOwoJRkRpdi5zdHlsZS56SW5kZXggPSB0b3BaOwoJRkRpdi5zdHlsZS50b3AgPSBUb3BTZXR0aW5nV2l0aFNjcm9sbE9mZnNldCgzMCkgKyAncHgnOwoJRkRpdi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKCVNob3dFbGVtZW50cyhmYWxzZSwgJ2lucHV0Jyk7CglTaG93RWxlbWVudHMoZmFsc2UsICdzZWxlY3QnKTsKCVNob3dFbGVtZW50cyhmYWxzZSwgJ29iamVjdCcpOwoJU2hvd0VsZW1lbnRzKHRydWUsICdvYmplY3QnLCAnRmVlZGJhY2tDb250ZW50Jyk7CglzZXRUaW1lb3V0KCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnRmVlZGJhY2tPS0J1dHRvbicpLmZvY3VzKCkiLCA1MCk7Cn0KZnVuY3Rpb24gU2hvd0VsZW1lbnRzKFNob3csIFRhZ05hbWUsIENvbnRhaW5lclRvUmV2ZXJzZSl7CglUb3BOb2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoQ29udGFpbmVyVG9SZXZlcnNlKTsKCXZhciBFbHM7CglpZiAoVG9wTm9kZSAhPSBudWxsKSB7CgkJRWxzID0gVG9wTm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZShUYWdOYW1lKTsKCX0gZWxzZSB7CgkJRWxzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoVGFnTmFtZSk7Cgl9Cglmb3IgKHZhciBpPTA7IGk8RWxzLmxlbmd0aDsgaSsrKXsKCQlpZiAoVGFnTmFtZSA9PSAiZW1iZWQiIHx8IFRhZ05hbWUgPT0gIm9iamVjdCIpIHsKCQkJaWYgKFNob3cgPT0gdHJ1ZSl7CgkJCQlFbHNbaV0uc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJzsKCQkJCWlmIChDLm1hYyAmJiBDLmdlY2tvKSB7RWxzW2ldLnN0eWxlLmRpc3BsYXkgPSAnJzt9CgkJCX0gZWxzZSB7CgkJCQlFbHNbaV0uc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nOwoJCQkJaWYgKEMubWFjICYmIEMuZ2Vja28pIHtFbHNbaV0uc3R5bGUuZGlzcGxheSA9ICdub25lJzt9CgkJCX0KCQl9IGVsc2UgewoJCQlpZiAoQy5pZSkgewoJCQkJaWYgKEMuaWVWZXIgPCA3KSB7CgkJCQkJaWYgKFNob3cgPT0gdHJ1ZSl7CgkJCQkJCUVsc1tpXS5zdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnOwoJCQkJCX0gZWxzZSB7CgkJCQkJCUVsc1tpXS5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJfQp9CmZ1bmN0aW9uIEhpZGVGZWVkYmFjaygpewoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0ZlZWRiYWNrRGl2Jykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKCVNob3dFbGVtZW50cyh0cnVlLCAnaW5wdXQnKTsKCVNob3dFbGVtZW50cyh0cnVlLCAnc2VsZWN0Jyk7CglTaG93RWxlbWVudHModHJ1ZSwgJ29iamVjdCcpOwoJaWYgKEMuY2hyb21lKSB7CgkJU2hvd0VsZW1lbnRzKHRydWUsICdlbWJlZCcpOwoJfQp9CmZ1bmN0aW9uIGdldFN0eWxlVmFsdWUob2JqLCBwcm9wZXJ0eV9uYW1lLCBwcm9wZXJ0eU5hbWUpewoJdmFyIHZhbHVlID0gMDsKCWlmIChvYmogJiYgb2JqLnN0eWxlKXsKCQlpZiAoZG9jdW1lbnQuZGVmYXVsdFZpZXcgJiYgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSl7CgkJCXZhbHVlID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShvYmosIG51bGwpLmdldFByb3BlcnR5VmFsdWUocHJvcGVydHlfbmFtZSk7CgkJfSBlbHNlIGlmIChvYmouY3VycmVudFN0eWxlKSB7CgkJCXZhbHVlID0gb2JqLmN1cnJlbnRTdHlsZVtwcm9wZXJ0eU5hbWVdOwoJCX0KCQlpZiAodHlwZW9mKHZhbHVlKT09J3N0cmluZycpewoJCQl2YXIgciA9IG5ldyBSZWdFeHAoJyhbMC05Ll0qKShbYS16XSspJyk7CgkJCXZhciBtID0gdmFsdWUubWF0Y2gocik7CgkJCWlmIChtKXsKCQkJCXN3aXRjaCAobVsyXSl7CgkJCQkJY2FzZSAnZW0nOgoJCQkJCQlpZiAodHlwZW9mKG9iai5FbUluUHgpPT0ndW5kZWZpbmVkJyl7CgkJCQkJCQl2YXIgZGl2ID0gb2JqLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpOwoJCQkJCQkJZGl2LnN0eWxlLm1hcmdpbiA9ICcwcHgnOwoJCQkJCQkJZGl2LnN0eWxlLnBhZGRpbmcgPSAnMHB4JzsKCQkJCQkJCWRpdi5zdHlsZS5ib3JkZXIgPSAnbm9uZSc7CgkJCQkJCQlkaXYuc3R5bGUuaGVpZ2h0ID0gJzFlbSc7CgkJCQkJCQlvYmouRW1JblB4ID0gZ2V0T2Zmc2V0KGRpdiwgJ0hlaWdodCcpOwoJCQkJCQkJb2JqLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZGl2KTsKCQkJCQkJfQoJCQkJCQl2YWx1ZSA9IHBhcnNlRmxvYXQobVsxXSAqIG9iai5FbUluUHgpOwoJCQkJCQlicmVhazsKCQkJCQljYXNlICdweCc6CgkJCQkJCXZhbHVlID0gcGFyc2VGbG9hdChtWzFdKTsKCQkJCQkJYnJlYWs7CgkJCQkJZGVmYXVsdDoKCQkJCQkJdmFsdWUgPSAwOwoJCQkJfQoJCQl9IGVsc2UgewoJCQkJdmFsdWUgPSAwIDsKCQkJfQoJCX0gZWxzZSB7CgkJCXZhbHVlID0gMDsKCQl9Cgl9CglyZXR1cm4gdmFsdWU7Cn0KZnVuY3Rpb24gaXNTdHJpY3QoKXsKCXJldHVybiBmYWxzZTsKCWlmICh0eXBlb2Yod2luZG93LmNhY2hlX2lzU3RyaWN0KT09J3VuZGVmaW5lZCcpewoJCWlmIChkb2N1bWVudC5jb21wYXRNb2RlKSB7CgkJCXdpbmRvdy5jYWNoZV9pc1N0cmljdCA9IChkb2N1bWVudC5jb21wYXRNb2RlPT0nQ1NTMUNvbXBhdCcpOwoJCX0gZWxzZSBpZiAoZG9jdW1lbnQuZG9jdHlwZSl7CgkJCXZhciBzID0gZG9jdW1lbnQuZG9jdHlwZS5zeXN0ZW1JZCB8fCBkb2N1bWVudC5kb2N0eXBlLm5hbWU7CgkJCXdpbmRvdy5jYWNoZV9pc1N0cmljdCA9IChzICYmIHMuaW5kZXhPZignc3RyaWN0LmR0ZCcpID49IDApOwoJCX0gZWxzZSB7CgkJCXdpbmRvdy5jYWNoZV9pc1N0cmljdCA9IGZhbHNlOwoJCX0KCX0KCXJldHVybiB3aW5kb3cuY2FjaGVfaXNTdHJpY3Q7Cn0KZnVuY3Rpb24gc2V0T2Zmc2V0KG9iaiwgdHlwZSwgdmFsdWUpewoJaWYgKCEgb2JqKXsKCQlyZXR1cm4gZmFsc2U7Cgl9Cglzd2l0Y2ggKHR5cGUpewoJCWNhc2UgJ1JpZ2h0JzoKCQkJcmV0dXJuIHNldE9mZnNldChvYmosICdXaWR0aCcsIHZhbHVlIC0gZ2V0T2Zmc2V0KG9iaiwgJ0xlZnQnKSk7CgkJY2FzZSAnQm90dG9tJzoKCQkJcmV0dXJuIHNldE9mZnNldChvYmosICdIZWlnaHQnLCB2YWx1ZSAtIGdldE9mZnNldChvYmosICdUb3AnKSk7Cgl9CglpZiAoaXNTdHJpY3QoKSl7CgkJdmFyIHByb3BlcnRpZXMgPSBuZXcgQXJyYXkoJ21hcmdpbicsICdib3JkZXInLCAncGFkZGluZycpOwoJCXN3aXRjaCAodHlwZSl7CgkJCWNhc2UgJ1RvcCc6CgkJCQl2YXIgc2lkZXMgPSBuZXcgQXJyYXkoJ1RvcCcpOwoJCQkJYnJlYWs7CgkJCWNhc2UgJ0xlZnQnOgoJCQkJdmFyIHNpZGVzID0gbmV3IEFycmF5KCdMZWZ0Jyk7CgkJCQlicmVhazsKCQkJY2FzZSAnV2lkdGgnOgoJCQkJdmFyIHNpZGVzID0gbmV3IEFycmF5KCdMZWZ0JywgJ1JpZ2h0Jyk7CgkJCQlicmVhazsKCQkJY2FzZSAnSGVpZ2h0JzoKCQkJCXZhciBzaWRlcyA9IG5ldyBBcnJheSgnVG9wJywgJ0JvdHRvbScpOwoJCQkJYnJlYWs7CgkJCWRlZmF1bHQ6CgkJCQlyZXR1cm4gMDsKCQl9CgkJZm9yICh2YXIgcD0wOyBwPHByb3BlcnRpZXMubGVuZ3RoOyBwKyspewoJCQlmb3IgKHZhciBzPTA7IHM8c2lkZXMubGVuZ3RoOyBzKyspewoJCQkJdmFyIHByb3BlcnR5TmFtZSA9IHByb3BlcnRpZXNbcF0gKyBzaWRlc1tzXTsKCQkJCXZhciBwcm9wZXJ0eV9uYW1lID0gcHJvcGVydGllc1twXSArICctJyArIHNpZGVzW3NdLnRvTG93ZXJDYXNlKCk7CgkJCQl2YWx1ZSAtPSBnZXRTdHlsZVZhbHVlKG9iaiwgcHJvcGVydHlfbmFtZSwgcHJvcGVydHlOYW1lKTsKCQkJfQoJCX0KCQl2YWx1ZSA9IE1hdGguZmxvb3IodmFsdWUpOwoJfQoJaWYgKHR5cGU9PSdUb3AnIHx8IHR5cGU9PSdMZWZ0JykgewoJCXZhbHVlIC09IGdldE9mZnNldChvYmoub2Zmc2V0UGFyZW50LCB0eXBlKTsKCX0KCWlmIChvYmouc3R5bGUpIHsKCQlvYmouc3R5bGVbdHlwZS50b0xvd2VyQ2FzZSgpXSA9IHZhbHVlICsgJ3B4JzsKCX0KfQpmdW5jdGlvbiBnZXRPZmZzZXQob2JqLCB0eXBlKXsKCWlmICghIG9iail7CgkJcmV0dXJuIDA7Cgl9Cglzd2l0Y2ggKHR5cGUpewoJCWNhc2UgJ1dpZHRoJzoKCQljYXNlICdIZWlnaHQnOgoJCQlyZXR1cm4gZXZhbCgnKG9iai5vZmZzZXQnK3R5cGUrJ3x8MCknKTsKCQljYXNlICdUb3AnOgoJCWNhc2UgJ0xlZnQnOgoJCQlyZXR1cm4gZXZhbCgnKG9iai5vZmZzZXQnK3R5cGUrJ3x8MCkgKyBnZXRPZmZzZXQob2JqLm9mZnNldFBhcmVudCwgdHlwZSknKTsKCQljYXNlICdSaWdodCc6CgkJCXJldHVybiBnZXRPZmZzZXQob2JqLCAnTGVmdCcpICsgZ2V0T2Zmc2V0KG9iaiwgJ1dpZHRoJyk7CgkJY2FzZSAnQm90dG9tJzoKCQkJcmV0dXJuIGdldE9mZnNldChvYmosICdUb3AnKSArIGdldE9mZnNldChvYmosICdIZWlnaHQnKTsKCQlkZWZhdWx0OgoJCQlyZXR1cm4gMDsKCX0KfQpmdW5jdGlvbiBQYWdlRGltKCl7Cgl2YXIgb2JqID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlZ2lvbi1tYWluJyk7Cgl0aGlzLlcgPSBnZXRPZmZzZXQob2JqLCAnV2lkdGgnKTsKCXRoaXMuSCA9IGdldE9mZnNldChvYmosICdIZWlnaHQnKTsKCXRoaXMuVG9wID0gZ2V0T2Zmc2V0KG9iaiwgJ1RvcCcpOwoJdGhpcy5MZWZ0ID0gZ2V0T2Zmc2V0KG9iaiwgJ0xlZnQnKTsKfQpmdW5jdGlvbiBnZXRDbGFzc0F0dHJpYnV0ZShjbGFzc05hbWUsIGF0dHJpYnV0ZU5hbWUpewoJaWYgKCEgZG9jdW1lbnQuc3R5bGVTaGVldHMpewoJCXJldHVybiBudWxsOwoJfQoJdmFyIGNzcyA9IGRvY3VtZW50LnN0eWxlU2hlZXRzOwoJdmFyIHJ1bGVzID0gKGRvY3VtZW50LmFsbCA/ICdydWxlcycgOiAnY3NzUnVsZXMnKTsKCXZhciByZWdleHAgPSBuZXcgUmVnRXhwKCdcXC4nK2NsYXNzTmFtZSsnXFxiJyk7Cgl0cnkgewoJCXZhciBpX21heCA9IGNzcy5sZW5ndGg7Cgl9IGNhdGNoKGVycikgewoJCXZhciBpX21heCA9IDA7Cgl9Cglmb3IgKHZhciBpPTA7IGk8aV9tYXg7IGkrKyl7CgkJdHJ5IHsKCQkJdmFyIGlpX21heCA9IGNzc1tpXVtydWxlc10ubGVuZ3RoOwoJCX0gY2F0Y2goZXJyKSB7CgkJCXZhciBpaV9tYXggPSAwOwoJCX0KCQlmb3IgKHZhciBpaT0wOyBpaTxpaV9tYXg7IGlpKyspewoJCQlpZiAoISBjc3NbaV1bcnVsZXNdW2lpXS5zZWxlY3RvclRleHQpewoJCQkJY29udGludWU7CgkJCX0KCQkJaWYgKGNzc1tpXVtydWxlc11baWldLnNlbGVjdG9yVGV4dC5tYXRjaChyZWdleHApKXsKCQkJCWlmIChjc3NbaV1bcnVsZXNdW2lpXS5zdHlsZVthdHRyaWJ1dGVOYW1lXSl7CgkJCQkJcmV0dXJuIGNzc1tpXVtydWxlc11baWldLnN0eWxlW2F0dHJpYnV0ZU5hbWVdOwoJCQkJfQoJCQl9CgkJfQoJfQoJcmV0dXJuIG51bGw7Cn0KdmFyIHBnID0gbnVsbDsKZnVuY3Rpb24gR2V0UGFnZVhZKEVsKSB7Cgl2YXIgWFkgPSB7eDogMCwgeTogMH07Cgl3aGlsZShFbCl7CgkJWFkueCArPSBFbC5vZmZzZXRMZWZ0OwoJCVhZLnkgKz0gRWwub2Zmc2V0VG9wOwoJCUVsID0gRWwub2Zmc2V0UGFyZW50OwoJfQoJcmV0dXJuIFhZOwp9CmZ1bmN0aW9uIEdldFNjcm9sbFRvcCgpewoJaWYgKHR5cGVvZih3aW5kb3cucGFnZVlPZmZzZXQpID09ICdudW1iZXInKXsKCQlyZXR1cm4gd2luZG93LnBhZ2VZT2Zmc2V0OwoJfSBlbHNlIHsKCQlpZiAoKGRvY3VtZW50LmJvZHkpJiYoZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ApKXsKCQkJcmV0dXJuIGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wOwoJCX0gZWxzZSB7CgkJCWlmICgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSYmKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3ApKXsKCQkJCXJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wOwoJCQl9IGVsc2UgewoJCQkJcmV0dXJuIDA7CgkJCX0KCQl9Cgl9Cn0KZnVuY3Rpb24gR2V0Vmlld3BvcnRTaXplKHR5cGUpewoJaWYgKGV2YWwoJ3dpbmRvdy5pbm5lcicgKyB0eXBlKSl7CgkJcmV0dXJuIGV2YWwoJ3dpbmRvdy5pbm5lcicgKyB0eXBlKTsKCX0KCWlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpewoJCWlmIChldmFsKCdkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50JyArIHR5cGUpKXsKCQkJcmV0dXJuIGV2YWwoJ2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnQnICsgdHlwZSk7CgkJfQoJfQoJaWYgKGRvY3VtZW50LmJvZHkpewoJCWlmIChldmFsKCdkb2N1bWVudC5ib2R5LmNsaWVudCcgKyB0eXBlKSl7CgkJCXJldHVybiBldmFsKCdkb2N1bWVudC5ib2R5LmNsaWVudCcgKyB0eXBlKTsKCQl9Cgl9CglyZXR1cm4gMDsKfQpmdW5jdGlvbiBHZXRWaWV3cG9ydEhlaWdodCgpewoJcmV0dXJuIEdldFZpZXdwb3J0U2l6ZSgnSGVpZ2h0Jyk7Cn0KZnVuY3Rpb24gR2V0Vmlld3BvcnRXaWR0aCgpewoJcmV0dXJuIEdldFZpZXdwb3J0U2l6ZSgnV2lkdGgnKTsKfQpmdW5jdGlvbiBUb3BTZXR0aW5nV2l0aFNjcm9sbE9mZnNldChUb3BQZXJjZW50KXsKCXZhciBUID0gTWF0aC5mbG9vcihHZXRWaWV3cG9ydEhlaWdodCgpICogKFRvcFBlcmNlbnQvMTAwKSk7CglyZXR1cm4gR2V0U2Nyb2xsVG9wKCkgKyBUOwp9CnZhciBJblRleHRCb3ggPSBmYWxzZTsKZnVuY3Rpb24gU3VwcHJlc3NCYWNrc3BhY2UoZSl7CglpZiAoSW5UZXh0Qm94ID09IHRydWUpe3JldHVybjt9CglpZiAoQy5pZSkgewoJCXRoaXNLZXkgPSB3aW5kb3cuZXZlbnQua2V5Q29kZTsKCX0gZWxzZSB7CgkJdGhpc0tleSA9IGUua2V5Q29kZTsKCX0KCXZhciBTdXBwcmVzcyA9IGZhbHNlOwoJaWYgKHRoaXNLZXkgPT0gOCkgewoJCVN1cHByZXNzID0gdHJ1ZTsKCX0KCWlmIChTdXBwcmVzcyA9PSB0cnVlKXsKCQlpZiAoQy5pZSl7CgkJCXdpbmRvdy5ldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlOwoJCQl3aW5kb3cuZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTsKCQl9IGVsc2UgewoJCQllLnByZXZlbnREZWZhdWx0KCk7CgkJfQoJfQp9CmlmIChDLmllKXsKCWRvY3VtZW50LmF0dGFjaEV2ZW50KCdvbmtleWRvd24nLFN1cHByZXNzQmFja3NwYWNlKTsKCXdpbmRvdy5hdHRhY2hFdmVudCgnb25rZXlkb3duJyxTdXBwcmVzc0JhY2tzcGFjZSk7Cn0gZWxzZSB7CglpZiAod2luZG93LmFkZEV2ZW50TGlzdGVuZXIpewoJCXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlwcmVzcycsU3VwcHJlc3NCYWNrc3BhY2UsZmFsc2UpOwoJfQp9CmZ1bmN0aW9uIFJlZHVjZUl0ZW1zKEluQXJyYXksIFJlZHVjZVRvU2l6ZSl7Cgl2YXIgSXRlbVRvRHVtcD0wOwoJdmFyIGo9MDsKCXdoaWxlIChJbkFycmF5Lmxlbmd0aCA+IFJlZHVjZVRvU2l6ZSl7CgkJSXRlbVRvRHVtcCA9IE1hdGguZmxvb3IoSW5BcnJheS5sZW5ndGgqTWF0aC5yYW5kb20oKSk7CgkJSW5BcnJheS5zcGxpY2UoSXRlbVRvRHVtcCwgMSk7Cgl9Cn0KZnVuY3Rpb24gU2h1ZmZsZShJbkFycmF5KXsKCXZhciBOdW07Cgl2YXIgVGVtcCA9IG5ldyBBcnJheSgpOwoJdmFyIExlbiA9IEluQXJyYXkubGVuZ3RoOwoJdmFyIGogPSBMZW47Cglmb3IgKHZhciBpPTA7IGk8TGVuOyBpKyspewoJCVRlbXBbaV0gPSBJbkFycmF5W2ldOwoJfQoJZm9yIChpPTA7IGk8TGVuOyBpKyspewoJCU51bSA9IE1hdGguZmxvb3IoaiAgKiAgTWF0aC5yYW5kb20oKSk7CgkJSW5BcnJheVtpXSA9IFRlbXBbTnVtXTsKCQlmb3IgKHZhciBrPU51bTsgayA8IChqLTEpOyBrKyspIHsKCQkJVGVtcFtrXSA9IFRlbXBbaysxXTsKCQl9CgkJai0tOwoJfQoJcmV0dXJuIEluQXJyYXk7Cn0KZnVuY3Rpb24gV3JpdGVUb0luc3RydWN0aW9ucyhGZWVkYmFjaykgewoJaWYgKCEgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0luc3RydWN0aW9uc0RpdicpKSByZXR1cm4gZmFsc2U7Cglkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnSW5zdHJ1Y3Rpb25zRGl2JykuaW5uZXJIVE1MID0gRmVlZGJhY2s7CglTdHJldGNoQ2FudmFzVG9Db3ZlckNvbnRlbnQodHJ1ZSk7Cn0KZnVuY3Rpb24gRXNjYXBlRG91YmxlUXVvdGVzKEluU3RyaW5nKXsKCXJldHVybiBJblN0cmluZy5yZXBsYWNlKC8iL2csICcmcXVvdDsnKQp9CmZ1bmN0aW9uIFRyaW1TdHJpbmcoSW5TdHJpbmcpewoJaWYgKHR5cGVvZihJblN0cmluZyk9PSdzdHJpbmcnKXsKCQlJblN0cmluZyA9IEluU3RyaW5nLnJlcGxhY2UobmV3IFJlZ0V4cCgnXlxccysnLCAnZycpLCAnJyk7CgkJSW5TdHJpbmcgPSBJblN0cmluZy5yZXBsYWNlKG5ldyBSZWdFeHAoJ1xccyskJywgJ2cnKSwgJycpOwoJCUluU3RyaW5nID0gSW5TdHJpbmcucmVwbGFjZShuZXcgUmVnRXhwKCdcXHMrJywgJ2cnKSwgJyAnKTsKCX0KCXJldHVybiBJblN0cmluZzsKfQpmdW5jdGlvbiBGaW5kTG9uZ2VzdChJbkFycmF5KXsKCWlmIChJbkFycmF5Lmxlbmd0aCA8IDEpe3JldHVybiAtMTt9Cgl2YXIgTG9uZ2VzdCA9IDA7Cglmb3IgKHZhciBpPTE7IGk8SW5BcnJheS5sZW5ndGg7IGkrKyl7CgkJaWYgKEluQXJyYXlbaV0ubGVuZ3RoID4gSW5BcnJheVtMb25nZXN0XS5sZW5ndGgpewoJCQlMb25nZXN0ID0gaTsKCQl9Cgl9CglyZXR1cm4gTG9uZ2VzdDsKfQpmdW5jdGlvbiBJc0NvbWJpbmluZ0RpYWNyaXRpYyhDaGFyTnVtKXsKCXZhciBSZXN1bHQgPSAoKChDaGFyTnVtID49IDB4MDMwMCkmJihDaGFyTnVtIDw9IDB4MzcwKSl8fCgoQ2hhck51bSA+PSAweDIwZDApJiYoQ2hhck51bSA8PSAweDIwZmYpKSk7CglSZXN1bHQgPSBSZXN1bHQgfHwgKCgoQ2hhck51bSA+PSAweDMwOTkpJiYoQ2hhck51bSA8PSAweDMwOWEpKXx8KChDaGFyTnVtID49IDB4ZmUyMCkmJihDaGFyTnVtIDw9IDB4ZmUyMykpKTsKCXJldHVybiBSZXN1bHQ7Cn0KZnVuY3Rpb24gSXNDSksoQ2hhck51bSl7CglyZXR1cm4gKChDaGFyTnVtID49IDB4MzAwMCkmJihDaGFyTnVtIDwgMHhkODAwKSk7Cn0KZnVuY3Rpb24gQ2xlYXJUZXh0Qm94ZXMoKXsKCXZhciBOTGlzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpOwoJZm9yICh2YXIgaT0wOyBpPE5MaXN0Lmxlbmd0aDsgaSsrKXsKCQlpZiAoKE5MaXN0W2ldLmlkLmluZGV4T2YoJ0d1ZXNzJykgPiAtMSl8fChOTGlzdFtpXS5pZC5pbmRleE9mKCdHYXAnKSA+IC0xKSl7CgkJCU5MaXN0W2ldLnZhbHVlID0gJyc7CgkJfQoJCWlmIChOTGlzdFtpXS5pZC5pbmRleE9mKCdDaGsnKSA+IC0xKXsKCQkJTkxpc3RbaV0uY2hlY2tlZCA9ICcnOwoJCX0KCX0KfQpmdW5jdGlvbiBBcnJheV9JbmRleE9mKElucHV0KXsKCXZhciBSZXN1bHQgPSAtMTsKCWZvciAodmFyIGk9MDsgaTx0aGlzLmxlbmd0aDsgaSsrKXsKCQlpZiAodGhpc1tpXSA9PSBJbnB1dCl7CgkJCVJlc3VsdCA9IGk7CgkJfQoJfQoJcmV0dXJuIFJlc3VsdDsKfQpBcnJheS5wcm90b3R5cGUuaW5kZXhPZiA9IEFycmF5X0luZGV4T2Y7CmZ1bmN0aW9uIFJlbW92ZUJvdHRvbU5hdkJhckZvcklFKCl7CglpZiAoQy5pZSkgewoJCWlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUmVhZGluZycpKXsKCQkJdmFyIG9iaiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdCb3R0b21OYXZCYXInKTsKCQkJaWYgKG9iail7CgkJCQlvYmoucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvYmopOwoJCQl9CgkJfQoJfQp9CnZhciBTdWJtaXNzaW9uVGltZW91dCA9IDA7CnZhciBEZXRhaWwgPSAnJzsKdmFyIEN1cnJRTnVtID0gMDsKdmFyIENvcnJlY3RJbmRpY2F0b3IgPSAnOi0pIEhvb3JheSEnOwp2YXIgSW5jb3JyZWN0SW5kaWNhdG9yID0gJzooIC0gYnVtbWVyIGR1ZGUuIFRyeSBhZ2Fpbi4nOwp2YXIgWW91clNjb3JlSXMgPSAnWW91ciBzY29yZSBpcyAnOwp2YXIgQ29tcGxldGVkU29GYXIgPSAnUXVlc3Rpb25zIGNvbXBsZXRlZCBzbyBmYXI6ICc7CnZhciBFeGVyY2lzZUNvbXBsZXRlZCA9ICdZb3UgaGF2ZSBjb21wbGV0ZWQgdGhlIGV4ZXJjaXNlLic7CnZhciBTaG93Q29tcGxldGVkU29GYXIgPSB0cnVlOwp2YXIgQ29udGludW91c1Njb3JpbmcgPSB0cnVlOwp2YXIgQ29ycmVjdEZpcnN0VGltZSA9ICdRdWVzdGlvbnMgYW5zd2VyZWQgY29ycmVjdGx5IGZpcnN0IHRpbWU6ICc7CnZhciBTaG93Q29ycmVjdEZpcnN0VGltZSA9IHRydWU7CnZhciBTaHVmZmxlUXMgPSB0cnVlOwp2YXIgU2h1ZmZsZUFzID0gdHJ1ZTsKdmFyIERlZmF1bHRSaWdodCA9ICdDb3JyZWN0ISc7CnZhciBEZWZhdWx0V3JvbmcgPSAnU29ycnkhIFRyeSBhZ2Fpbi4nOwp2YXIgUXNUb1Nob3cgPSAyMTsKdmFyIFNjb3JlID0gMDsKdmFyIEZpbmlzaGVkID0gZmFsc2U7CnZhciBRcyA9IG51bGw7CnZhciBRQXJyYXkgPSBuZXcgQXJyYXkoKTsKdmFyIFNob3dpbmdBbGxRdWVzdGlvbnMgPSBmYWxzZTsKdmFyIFNob3dBbGxRdWVzdGlvbnNDYXB0aW9uID0gJ1Nob3cgYWxsIHF1ZXN0aW9ucyc7CnZhciBTaG93T25lQnlPbmVDYXB0aW9uID0gJ1Nob3cgcXVlc3Rpb25zIG9uZSBieSBvbmUnOwp2YXIgU3RhdGUgPSBuZXcgQXJyYXkoKTsKdmFyIEZlZWRiYWNrID0gJyc7CnZhciBUaW1lT3ZlciA9IGZhbHNlOwp2YXIgc3RySW5zdHJ1Y3Rpb25zID0gJyc7CnZhciBMb2NrZWQgPSBmYWxzZTsKdmFyIHN0clF1ZXN0aW9uRmluaXNoZWQgPSAnJzsKZnVuY3Rpb24gQ29tcGxldGVFbXB0eUZlZWRiYWNrKCl7Cgl2YXIgUU51bSwgQU51bTsKCWZvciAoUU51bT0wOyBRTnVtPEkubGVuZ3RoOyBRTnVtKyspewoJCWlmIChJW1FOdW1dWzJdICE9ICczJyl7CiAgCQlmb3IgKEFOdW0gPSAwOyBBTnVtPElbUU51bV1bM10ubGVuZ3RoOyBBTnVtKyspewogIAkJCWlmIChJW1FOdW1dWzNdW0FOdW1dWzFdLmxlbmd0aCA8IDEpewogIAkJCQlpZiAoSVtRTnVtXVszXVtBTnVtXVsyXSA+IDApewogIAkJCQkJSVtRTnVtXVszXVtBTnVtXVsxXSA9IERlZmF1bHRSaWdodDsKICAJCQkJfSBlbHNlIHsKICAJCQkJCUlbUU51bV1bM11bQU51bV1bMV0gPSBEZWZhdWx0V3Jvbmc7CiAgCQkJCX0KICAJCQl9CiAgCQl9CgkJfQoJfQp9CmZ1bmN0aW9uIFNldFVwUXVlc3Rpb25zKCl7Cgl2YXIgQUxpc3QgPSBuZXcgQXJyYXkoKTsKCXZhciBRTGlzdCA9IG5ldyBBcnJheSgpOwoJdmFyIGksIGo7CglRcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdRdWVzdGlvbnMnKTsKCXdoaWxlIChRcy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnbGknKS5sZW5ndGggPiAwKXsKCQl0cnkgewoJCQlRTGlzdC5wdXNoKFFzLnJlbW92ZUNoaWxkKFFzLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdsaScpWzBdKSk7CgkJfSBjYXRjaChlcnIpIHsKCQkJYWxlcnQoJ1NvcnJ5LCBTZXRVcFF1ZXN0aW9ucygpIGZhaWxlZC4nKydcbicrJ1BlcmhhcHMgdGhlIFhIVE1MIG9mIHRoaXMgcXVpeiBmaWxlIGlzIG5vdCB2YWxpZD8nKTsKCQkJcmV0dXJuOwoJCX0KCX0KCXZhciBEdW1wSXRlbSA9IDA7CglpZiAoUXNUb1Nob3cgPiBRTGlzdC5sZW5ndGgpewoJCVFzVG9TaG93ID0gUUxpc3QubGVuZ3RoOwoJfQoJd2hpbGUgKFFzVG9TaG93IDwgUUxpc3QubGVuZ3RoKXsKCQlEdW1wSXRlbSA9IE1hdGguZmxvb3IoUUxpc3QubGVuZ3RoKk1hdGgucmFuZG9tKCkpOwoJCWZvciAoaj1EdW1wSXRlbTsgajwoUUxpc3QubGVuZ3RoLTEpOyBqKyspewoJCQlRTGlzdFtqXSA9IFFMaXN0W2orMV07CgkJfQoJCVFMaXN0Lmxlbmd0aCA9IFFMaXN0Lmxlbmd0aC0xOwoJfQoJaWYgKFNodWZmbGVRcyA9PSB0cnVlKXsKCQlRTGlzdCA9IFNodWZmbGUoUUxpc3QpOwoJfQoJaWYgKFNodWZmbGVBcyA9PSB0cnVlKXsKCQl2YXIgQXM7CgkJZm9yICh2YXIgaT0wOyBpPFFMaXN0Lmxlbmd0aDsgaSsrKXsKCQkJQXMgPSBRTGlzdFtpXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb2wnKVswXTsKCQkJaWYgKEFzICE9IG51bGwpewogIAkJCUFMaXN0Lmxlbmd0aCA9IDA7CgkJCQl3aGlsZSAoQXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2xpJykubGVuZ3RoID4gMCl7CgkJCQkJQUxpc3QucHVzaChBcy5yZW1vdmVDaGlsZChBcy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnbGknKVswXSkpOwoJCQkJfQoJCQkJQUxpc3QgPSBTaHVmZmxlKEFMaXN0KTsKCQkJCWZvciAoaj0wOyBqPEFMaXN0Lmxlbmd0aDsgaisrKXsKCQkJCQlBcy5hcHBlbmRDaGlsZChBTGlzdFtqXSk7CgkJCQl9CgkJCX0KCQl9Cgl9Cglmb3IgKGk9MDsgaTxRTGlzdC5sZW5ndGg7IGkrKyl7CgkJUUxpc3RbaV0uc3R5bGUuYm9yZGVyV2lkdGggPSAnMHB4JzsKCQlRcy5hcHBlbmRDaGlsZChRTGlzdFtpXSk7CgkJUUFycmF5W1FBcnJheS5sZW5ndGhdID0gUUxpc3RbaV07Cgl9CglRQXJyYXlbMF0uc3R5bGUuZGlzcGxheSA9ICcnOwoJZm9yIChpPTE7IGk8UUFycmF5Lmxlbmd0aDsgaSsrKXsKCQlRQXJyYXlbaV0uc3R5bGUuZGlzcGxheSA9ICdub25lJzsKCX0KCVNldFFOdW1SZWFkb3V0KCk7CglTZXRGb2N1c1RvVGV4dGJveCgpOwp9CmZ1bmN0aW9uIFNldEZvY3VzVG9UZXh0Ym94KCl7CglpZiAoUUFycmF5W0N1cnJRTnVtXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVswXSAhPSBudWxsKXsKCQlRQXJyYXlbQ3VyclFOdW1dLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdLmZvY3VzKCk7CgkJaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdDaGFyYWN0ZXJLZXlwYWQnKSAhPSBudWxsKXsKCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0NoYXJhY3RlcktleXBhZCcpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwoJCX0KCX0gZWxzZSB7CiAgCWlmIChRQXJyYXlbQ3VyclFOdW1dLmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0ZXh0YXJlYScpWzBdICE9IG51bGwpewogIAkJUUFycmF5W0N1cnJRTnVtXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGV4dGFyZWEnKVswXS5mb2N1cygpOwoJCQlpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0NoYXJhY3RlcktleXBhZCcpICE9IG51bGwpewoJCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0NoYXJhY3RlcktleXBhZCcpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwoJCQl9CgkJfSBlbHNlIHsKCQkJaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdDaGFyYWN0ZXJLZXlwYWQnKSAhPSBudWxsKXsKCQkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdDaGFyYWN0ZXJLZXlwYWQnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwoJCQl9CgkJfQoJfQp9CmZ1bmN0aW9uIENoYW5nZVEoQ2hhbmdlQnkpewoJaWYgKCgoQ3VyclFOdW0gKyBDaGFuZ2VCeSkgPCAwKXx8KChDdXJyUU51bSArIENoYW5nZUJ5KSA+PSBRQXJyYXkubGVuZ3RoKSl7cmV0dXJuO30KCVFBcnJheVtDdXJyUU51bV0uc3R5bGUuZGlzcGxheSA9ICdub25lJzsKCUN1cnJRTnVtICs9IENoYW5nZUJ5OwoJUUFycmF5W0N1cnJRTnVtXS5zdHlsZS5kaXNwbGF5ID0gJyc7CglTaG93U3BlY2lhbFJlYWRpbmdGb3JRdWVzdGlvbigpOwoJU2V0UU51bVJlYWRvdXQoKTsKCVNldEZvY3VzVG9UZXh0Ym94KCk7CglTdHJldGNoQ2FudmFzVG9Db3ZlckNvbnRlbnQodHJ1ZSk7Cn0KdmFyIEhpZGRlblJlYWRpbmdTaG93biA9IGZhbHNlOwpmdW5jdGlvbiBTaG93U3BlY2lhbFJlYWRpbmdGb3JRdWVzdGlvbigpewoJdmFyIFJlYWRpbmdEaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUmVhZGluZ0RpdicpOwoJaWYgKFJlYWRpbmdEaXYpewoJCXZhciBSZWFkaW5nVGV4dCA9IG51bGw7CgkJdmFyIGRpdnMgPSBSZWFkaW5nRGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdkaXYnKTsKCQlmb3IgKHZhciBpPTA7IGk8ZGl2cy5sZW5ndGg7IGkrKyl7CgkJCWlmIChkaXZzW2ldLmNsYXNzTmFtZT09J1JlYWRpbmdUZXh0JyB8fCBkaXZzW2ldLmNsYXNzTmFtZT09J1RlbXBSZWFkaW5nVGV4dCcpewoJCQkJUmVhZGluZ1RleHQgPSBkaXZzW2ldOwoJCQkJYnJlYWs7CgkJCX0KCQl9CgkJaWYgKFJlYWRpbmdUZXh0ICYmIEhpZGRlblJlYWRpbmdTaG93bil7CgkJCVN3YXBSZWFkaW5nVGV4dHMoUmVhZGluZ1RleHQsIEhpZGRlblJlYWRpbmdTaG93bik7CgkJCVJlYWRpbmdUZXh0ID0gSGlkZGVuUmVhZGluZ1Nob3duOwoJCQlIaWRkZW5SZWFkaW5nU2hvd24gPSBmYWxzZTsKCQl9CgkJdmFyIEhpZGRlblJlYWRpbmcgPSBudWxsOwoJCWlmIChRQXJyYXlbQ3VyclFOdW1dKXsKCQkJdmFyIGRpdnMgPSBRQXJyYXlbQ3VyclFOdW1dLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdkaXYnKTsKCQkJZm9yICh2YXIgaT0wOyBpPGRpdnMubGVuZ3RoOyBpKyspewoJCQkJaWYgKGRpdnNbaV0uY2xhc3NOYW1lPT0nSGlkZGVuUmVhZGluZycpewoJCQkJCUhpZGRlblJlYWRpbmcgPSBkaXZzW2ldOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQl9CgkJfQoJCWlmIChIaWRkZW5SZWFkaW5nKXsKCQkJaWYgKCEgUmVhZGluZ1RleHQpewoJCQkJUmVhZGluZ1RleHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKCQkJCVJlYWRpbmdUZXh0LmNsYXNzTmFtZSA9ICdSZWFkaW5nVGV4dCc7CgkJCQlSZWFkaW5nRGl2LmFwcGVuZENoaWxkKFJlYWRpbmdUZXh0KTsKCQkJfQoJCQlTd2FwUmVhZGluZ1RleHRzKFJlYWRpbmdUZXh0LCBIaWRkZW5SZWFkaW5nKTsKCQkJSGlkZGVuUmVhZGluZ1Nob3duID0gUmVhZGluZ1RleHQ7CgkJfQoJCXZhciBidG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU2hvd01ldGhvZEJ1dHRvbicpOwoJCWlmIChidG4pewoJCQlpZiAoSGlkZGVuUmVhZGluZ1Nob3duKXsKCQkJCWlmIChidG4uc3R5bGUuZGlzcGxheSE9J25vbmUnKXsKCQkJCQlidG4uc3R5bGUuZGlzcGxheSA9ICdub25lJzsKCQkJCX0KCQkJfSBlbHNlIHsKCQkJCWlmIChidG4uc3R5bGUuZGlzcGxheT09J25vbmUnKXsKCQkJCQlidG4uc3R5bGUuZGlzcGxheSA9ICcnOwoJCQkJfQoJCQl9CgkJfQoJCWJ0biA9IG51bGw7CgkJUmVhZGluZ0RpdiA9IG51bGw7CgkJUmVhZGluZ1RleHQgPSBudWxsOwoJCUhpZGRlblJlYWRpbmcgPSBudWxsOwoJfQp9CmZ1bmN0aW9uIFN3YXBSZWFkaW5nVGV4dHMoUmVhZGluZ1RleHQsIEhpZGRlblJlYWRpbmcpIHsKCUhpZGRlblJlYWRpbmdQYXJlbnROb2RlID0gSGlkZGVuUmVhZGluZy5wYXJlbnROb2RlOwoJSGlkZGVuUmVhZGluZ1BhcmVudE5vZGUucmVtb3ZlQ2hpbGQoSGlkZGVuUmVhZGluZyk7CglSZWFkaW5nVGV4dC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChIaWRkZW5SZWFkaW5nLCBSZWFkaW5nVGV4dCk7CglpZiAoSGlkZGVuUmVhZGluZy5Jc09yaWdpbmFsUmVhZGluZ1RleHQpewoJCUhpZGRlblJlYWRpbmcuY2xhc3NOYW1lID0gJ1JlYWRpbmdUZXh0JzsKCX0gZWxzZSB7CgkJSGlkZGVuUmVhZGluZy5jbGFzc05hbWUgPSAnVGVtcFJlYWRpbmdUZXh0JzsKCX0KCUhpZGRlblJlYWRpbmcuc3R5bGUuZGlzcGxheSA9ICcnOwoJaWYgKFJlYWRpbmdUZXh0LmNsYXNzTmFtZT09J1JlYWRpbmdUZXh0Jyl7CgkgICAgUmVhZGluZ1RleHQuSXNPcmlnaW5hbFJlYWRpbmdUZXh0ID0gdHJ1ZTsKCX0gZWxzZSB7CgkgICAgUmVhZGluZ1RleHQuSXNPcmlnaW5hbFJlYWRpbmdUZXh0ID0gZmFsc2U7Cgl9CglSZWFkaW5nVGV4dC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwoJUmVhZGluZ1RleHQuY2xhc3NOYW1lID0gJ0hpZGRlblJlYWRpbmcnOwoJSGlkZGVuUmVhZGluZ1BhcmVudE5vZGUuYXBwZW5kQ2hpbGQoUmVhZGluZ1RleHQpOwoJSGlkZGVuUmVhZGluZ1BhcmVudE5vZGUgPSBudWxsOwp9CmZ1bmN0aW9uIFNldFFOdW1SZWFkb3V0KCl7Cglkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUU51bVJlYWRvdXQnKS5pbm5lckhUTUwgPSAoQ3VyclFOdW0rMSkgKyAnIC8gJyArIFFBcnJheS5sZW5ndGg7CglpZiAoKEN1cnJRTnVtKzEpID49IFFBcnJheS5sZW5ndGgpewoJCWlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnTmV4dFFCdXR0b24nKSAhPSBudWxsKXsKCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ05leHRRQnV0dG9uJykuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nOwoJCX0KCX0gZWxzZSB7CgkJaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdOZXh0UUJ1dHRvbicpICE9IG51bGwpewoJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnTmV4dFFCdXR0b24nKS5zdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnOwoJCX0KCX0KCWlmIChDdXJyUU51bSA8PSAwKXsKCQlpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1ByZXZRQnV0dG9uJykgIT0gbnVsbCl7CgkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdQcmV2UUJ1dHRvbicpLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJzsKCQl9Cgl9IGVsc2UgewoJCWlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUHJldlFCdXR0b24nKSAhPSBudWxsKXsKCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1ByZXZRQnV0dG9uJykuc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJzsKCQl9Cgl9Cn0KST1uZXcgQXJyYXkoKTsKSVswXSA9IG5ldyBBcnJheSgpOwpJWzBdWzBdID0gMTAwOwpJWzBdWzFdID0gJyc7CklbMF1bMl0gPSAnMCc7CklbMF1bM10gPSBuZXcgQXJyYXkoKTsKSVswXVszXVswXSA9IG5ldyBBcnJheSgnbml0cmljIGFjaWQnLCdBY2lkcyB0aGF0IGRvIG5vdCBjb250YWluIG94eWdlbiwgaW9uIGVuZHMgaW4gXCJpZGVcIiwgdXNlIGh5ZHJvIGFzIGEgcHJlZml4LiBBY2lkcyB0aGF0IGNvbnRhaW4gb3h5Z2VuIGRvIG5vdCB1c2UgaHlkcm8gYXMgYSBwcmVmaXguIFRoZSBhY2lkcyBtdXN0IGVuZCBpbiB0aGUgd29yZCBhY2lkLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcIml0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJvdXNcIi4nLDEsMTAwLDEpOwpJWzBdWzNdWzFdID0gbmV3IEFycmF5KCduaXRyb3VzIGFjaWQnLCdBY2lkcyB0aGF0IGRvIG5vdCBjb250YWluIG94eWdlbiwgaW9uIGVuZHMgaW4gXCJpZGVcIiwgdXNlIGh5ZHJvIGFzIGEgcHJlZml4LiBBY2lkcyB0aGF0IGNvbnRhaW4gb3h5Z2VuIGRvIG5vdCB1c2UgaHlkcm8gYXMgYSBwcmVmaXguIFRoZSBhY2lkcyBtdXN0IGVuZCBpbiB0aGUgd29yZCBhY2lkLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcIml0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJvdXNcIi4nLDAsMCwxKTsKSVswXVszXVsyXSA9IG5ldyBBcnJheSgnaHlkcm9uaXRyaWMgYWNpZCcsJ0FjaWRzIHRoYXQgZG8gbm90IGNvbnRhaW4gb3h5Z2VuLCBpb24gZW5kcyBpbiBcImlkZVwiLCB1c2UgaHlkcm8gYXMgYSBwcmVmaXguIEFjaWRzIHRoYXQgY29udGFpbiBveHlnZW4gZG8gbm90IHVzZSBoeWRybyBhcyBhIHByZWZpeC4gVGhlIGFjaWRzIG11c3QgZW5kIGluIHRoZSB3b3JkIGFjaWQuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiaXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcIm91c1wiLicsMCwwLDEpOwpJWzBdWzNdWzNdID0gbmV3IEFycmF5KCduaXRyaWMnLCdBY2lkcyB0aGF0IGRvIG5vdCBjb250YWluIG94eWdlbiwgaW9uIGVuZHMgaW4gXCJpZGVcIiwgdXNlIGh5ZHJvIGFzIGEgcHJlZml4LiBBY2lkcyB0aGF0IGNvbnRhaW4gb3h5Z2VuIGRvIG5vdCB1c2UgaHlkcm8gYXMgYSBwcmVmaXguIFRoZSBhY2lkcyBtdXN0IGVuZCBpbiB0aGUgd29yZCBhY2lkLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcIml0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJvdXNcIi4nLDAsMCwxKTsKSVsxXSA9IG5ldyBBcnJheSgpOwpJWzFdWzBdID0gMTAwOwpJWzFdWzFdID0gJyc7CklbMV1bMl0gPSAnMCc7CklbMV1bM10gPSBuZXcgQXJyYXkoKTsKSVsxXVszXVswXSA9IG5ldyBBcnJheSgnaHlkcm9jeWFuaWMgYWNpZCcsJ0FjaWRzIHRoYXQgZG8gbm90IGNvbnRhaW4gb3h5Z2VuLCBpb24gZW5kcyBpbiBcImlkZVwiLCB1c2UgaHlkcm8gYXMgYSBwcmVmaXggYW5kIGVuZCBpbiBcImljXCIuIEFjaWRzIHRoYXQgY29udGFpbiBveHlnZW4gZG8gbm90IHVzZSBoeWRybyBhcyBhIHByZWZpeC4gVGhlIGFjaWRzIG11c3QgZW5kIGluIHRoZSB3b3JkIGFjaWQuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiaXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcIm91c1wiLicsMSwxMDAsMSk7CklbMV1bM11bMV0gPSBuZXcgQXJyYXkoJ2h5ZHJvY3lhbm91cyBhY2lkJywnQWNpZHMgdGhhdCBkbyBub3QgY29udGFpbiBveHlnZW4sIGlvbiBlbmRzIGluIFwiaWRlXCIsIHVzZSBoeWRybyBhcyBhIHByZWZpeCBhbmQgZW5kIGluIFwiaWNcIi4gQWNpZHMgdGhhdCBjb250YWluIG94eWdlbiBkbyBub3QgdXNlIGh5ZHJvIGFzIGEgcHJlZml4LiBUaGUgYWNpZHMgbXVzdCBlbmQgaW4gdGhlIHdvcmQgYWNpZC4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJpdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwib3VzXCIuJywwLDAsMSk7CklbMV1bM11bMl0gPSBuZXcgQXJyYXkoJ2h5ZHJvY3lhbmljJywnQWNpZHMgdGhhdCBkbyBub3QgY29udGFpbiBveHlnZW4sIGlvbiBlbmRzIGluIFwiaWRlXCIsIHVzZSBoeWRybyBhcyBhIHByZWZpeCBhbmQgZW5kIGluIFwiaWNcIi4gQWNpZHMgdGhhdCBjb250YWluIG94eWdlbiBkbyBub3QgdXNlIGh5ZHJvIGFzIGEgcHJlZml4LiBUaGUgYWNpZHMgbXVzdCBlbmQgaW4gdGhlIHdvcmQgYWNpZC4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJpdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwib3VzXCIuJywwLDAsMSk7CklbMV1bM11bM10gPSBuZXcgQXJyYXkoJ2N5YW5pYyBhY2lkJywnQWNpZHMgdGhhdCBkbyBub3QgY29udGFpbiBveHlnZW4sIGlvbiBlbmRzIGluIFwiaWRlXCIsIHVzZSBoeWRybyBhcyBhIHByZWZpeCBhbmQgZW5kIGluIFwiaWNcIi4gQWNpZHMgdGhhdCBjb250YWluIG94eWdlbiBkbyBub3QgdXNlIGh5ZHJvIGFzIGEgcHJlZml4LiBUaGUgYWNpZHMgbXVzdCBlbmQgaW4gdGhlIHdvcmQgYWNpZC4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJpdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwib3VzXCIuJywwLDAsMSk7CklbMl0gPSBuZXcgQXJyYXkoKTsKSVsyXVswXSA9IDEwMDsKSVsyXVsxXSA9ICcnOwpJWzJdWzJdID0gJzAnOwpJWzJdWzNdID0gbmV3IEFycmF5KCk7CklbMl1bM11bMF0gPSBuZXcgQXJyYXkoJ2h5cG9icm9tb3VzIGFjaWQnLCdBY2lkcyB0aGF0IGRvIG5vdCBjb250YWluIG94eWdlbiwgaW9uIGVuZHMgaW4gXCJpZGVcIiwgdXNlIGh5ZHJvIGFzIGEgcHJlZml4IGFuZCBlbmQgaW4gXCJpY1wiLiBBY2lkcyB0aGF0IGNvbnRhaW4gb3h5Z2VuIGRvIG5vdCB1c2UgaHlkcm8gYXMgYSBwcmVmaXguIFRoZSBhY2lkcyBtdXN0IGVuZCBpbiB0aGUgd29yZCBhY2lkLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcIml0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJvdXNcIi4nLDEsMTAwLDEpOwpJWzJdWzNdWzFdID0gbmV3IEFycmF5KCdoeWRyb2h5cG9icm9tb3VzIGFjaWQnLCdBY2lkcyB0aGF0IGRvIG5vdCBjb250YWluIG94eWdlbiwgaW9uIGVuZHMgaW4gXCJpZGVcIiwgdXNlIGh5ZHJvIGFzIGEgcHJlZml4IGFuZCBlbmQgaW4gXCJpY1wiLiBBY2lkcyB0aGF0IGNvbnRhaW4gb3h5Z2VuIGRvIG5vdCB1c2UgaHlkcm8gYXMgYSBwcmVmaXguIFRoZSBhY2lkcyBtdXN0IGVuZCBpbiB0aGUgd29yZCBhY2lkLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcIml0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJvdXNcIi4nLDAsMCwxKTsKSVsyXVszXVsyXSA9IG5ldyBBcnJheSgnaHlwb2Jyb21vdXMnLCdBY2lkcyB0aGF0IGRvIG5vdCBjb250YWluIG94eWdlbiwgaW9uIGVuZHMgaW4gXCJpZGVcIiwgdXNlIGh5ZHJvIGFzIGEgcHJlZml4IGFuZCBlbmQgaW4gXCJpY1wiLiBBY2lkcyB0aGF0IGNvbnRhaW4gb3h5Z2VuIGRvIG5vdCB1c2UgaHlkcm8gYXMgYSBwcmVmaXguIFRoZSBhY2lkcyBtdXN0IGVuZCBpbiB0aGUgd29yZCBhY2lkLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcIml0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJvdXNcIi4nLDAsMCwxKTsKSVsyXVszXVszXSA9IG5ldyBBcnJheSgnaHlwb2Jyb21pYyBhY2lkJywnQWNpZHMgdGhhdCBkbyBub3QgY29udGFpbiBveHlnZW4sIGlvbiBlbmRzIGluIFwiaWRlXCIsIHVzZSBoeWRybyBhcyBhIHByZWZpeCBhbmQgZW5kIGluIFwiaWNcIi4gQWNpZHMgdGhhdCBjb250YWluIG94eWdlbiBkbyBub3QgdXNlIGh5ZHJvIGFzIGEgcHJlZml4LiBUaGUgYWNpZHMgbXVzdCBlbmQgaW4gdGhlIHdvcmQgYWNpZC4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJpdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwib3VzXCIuJywwLDAsMSk7CklbM10gPSBuZXcgQXJyYXkoKTsKSVszXVswXSA9IDEwMDsKSVszXVsxXSA9ICcnOwpJWzNdWzJdID0gJzAnOwpJWzNdWzNdID0gbmV3IEFycmF5KCk7CklbM11bM11bMF0gPSBuZXcgQXJyYXkoJ3BlcmNobG9yaWMgYWNpZCcsJ0FjaWRzIHRoYXQgZG8gbm90IGNvbnRhaW4gb3h5Z2VuLCBpb24gZW5kcyBpbiBcImlkZVwiLCB1c2UgaHlkcm8gYXMgYSBwcmVmaXggYW5kIGVuZCBpbiBcImljXCIuIEFjaWRzIHRoYXQgY29udGFpbiBveHlnZW4gZG8gbm90IHVzZSBoeWRybyBhcyBhIHByZWZpeC4gVGhlIGFjaWRzIG11c3QgZW5kIGluIHRoZSB3b3JkIGFjaWQuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiaXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcIm91c1wiLicsMSwxMDAsMSk7CklbM11bM11bMV0gPSBuZXcgQXJyYXkoJ2h5ZHJvcGVyY2hsb3JpYyBhY2lkJywnQWNpZHMgdGhhdCBkbyBub3QgY29udGFpbiBveHlnZW4sIGlvbiBlbmRzIGluIFwiaWRlXCIsIHVzZSBoeWRybyBhcyBhIHByZWZpeCBhbmQgZW5kIGluIFwiaWNcIi4gQWNpZHMgdGhhdCBjb250YWluIG94eWdlbiBkbyBub3QgdXNlIGh5ZHJvIGFzIGEgcHJlZml4LiBUaGUgYWNpZHMgbXVzdCBlbmQgaW4gdGhlIHdvcmQgYWNpZC4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJpdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwib3VzXCIuJywwLDAsMSk7CklbM11bM11bMl0gPSBuZXcgQXJyYXkoJ3BlcmNobG9yaWMnLCdBY2lkcyB0aGF0IGRvIG5vdCBjb250YWluIG94eWdlbiwgaW9uIGVuZHMgaW4gXCJpZGVcIiwgdXNlIGh5ZHJvIGFzIGEgcHJlZml4IGFuZCBlbmQgaW4gXCJpY1wiLiBBY2lkcyB0aGF0IGNvbnRhaW4gb3h5Z2VuIGRvIG5vdCB1c2UgaHlkcm8gYXMgYSBwcmVmaXguIFRoZSBhY2lkcyBtdXN0IGVuZCBpbiB0aGUgd29yZCBhY2lkLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcIml0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJvdXNcIi4nLDAsMCwxKTsKSVszXVszXVszXSA9IG5ldyBBcnJheSgncGVyY2hsb3JvdXMgYWNpZCcsJ0FjaWRzIHRoYXQgZG8gbm90IGNvbnRhaW4gb3h5Z2VuLCBpb24gZW5kcyBpbiBcImlkZVwiLCB1c2UgaHlkcm8gYXMgYSBwcmVmaXggYW5kIGVuZCBpbiBcImljXCIuIEFjaWRzIHRoYXQgY29udGFpbiBveHlnZW4gZG8gbm90IHVzZSBoeWRybyBhcyBhIHByZWZpeC4gVGhlIGFjaWRzIG11c3QgZW5kIGluIHRoZSB3b3JkIGFjaWQuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiaXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcIm91c1wiLicsMCwwLDEpOwpJWzRdID0gbmV3IEFycmF5KCk7CklbNF1bMF0gPSAxMDA7CklbNF1bMV0gPSAnJzsKSVs0XVsyXSA9ICcwJzsKSVs0XVszXSA9IG5ldyBBcnJheSgpOwpJWzRdWzNdWzBdID0gbmV3IEFycmF5KCdjaGxvcm91cyBhY2lkJywnQWNpZHMgdGhhdCBkbyBub3QgY29udGFpbiBveHlnZW4sIGlvbiBlbmRzIGluIFwiaWRlXCIsIHVzZSBoeWRybyBhcyBhIHByZWZpeCBhbmQgZW5kIGluIFwiaWNcIi4gQWNpZHMgdGhhdCBjb250YWluIG94eWdlbiBkbyBub3QgdXNlIGh5ZHJvIGFzIGEgcHJlZml4LiBUaGUgYWNpZHMgbXVzdCBlbmQgaW4gdGhlIHdvcmQgYWNpZC4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJpdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwib3VzXCIuJywxLDEwMCwxKTsKSVs0XVszXVsxXSA9IG5ldyBBcnJheSgnaHlkcm9jaGxvcm91cyBhY2lkJywnQWNpZHMgdGhhdCBkbyBub3QgY29udGFpbiBveHlnZW4sIGlvbiBlbmRzIGluIFwiaWRlXCIsIHVzZSBoeWRybyBhcyBhIHByZWZpeCBhbmQgZW5kIGluIFwiaWNcIi4gQWNpZHMgdGhhdCBjb250YWluIG94eWdlbiBkbyBub3QgdXNlIGh5ZHJvIGFzIGEgcHJlZml4LiBUaGUgYWNpZHMgbXVzdCBlbmQgaW4gdGhlIHdvcmQgYWNpZC4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJpdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwib3VzXCIuJywwLDAsMSk7CklbNF1bM11bMl0gPSBuZXcgQXJyYXkoJ2NobG9yaWMgYWNpZCcsJ0FjaWRzIHRoYXQgZG8gbm90IGNvbnRhaW4gb3h5Z2VuLCBpb24gZW5kcyBpbiBcImlkZVwiLCB1c2UgaHlkcm8gYXMgYSBwcmVmaXggYW5kIGVuZCBpbiBcImljXCIuIEFjaWRzIHRoYXQgY29udGFpbiBveHlnZW4gZG8gbm90IHVzZSBoeWRybyBhcyBhIHByZWZpeC4gVGhlIGFjaWRzIG11c3QgZW5kIGluIHRoZSB3b3JkIGFjaWQuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiaXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcIm91c1wiLicsMCwwLDEpOwpJWzRdWzNdWzNdID0gbmV3IEFycmF5KCdjaGxvcm91cycsJ0FjaWRzIHRoYXQgZG8gbm90IGNvbnRhaW4gb3h5Z2VuLCBpb24gZW5kcyBpbiBcImlkZVwiLCB1c2UgaHlkcm8gYXMgYSBwcmVmaXggYW5kIGVuZCBpbiBcImljXCIuIEFjaWRzIHRoYXQgY29udGFpbiBveHlnZW4gZG8gbm90IHVzZSBoeWRybyBhcyBhIHByZWZpeC4gVGhlIGFjaWRzIG11c3QgZW5kIGluIHRoZSB3b3JkIGFjaWQuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiaXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcIm91c1wiLicsMCwwLDEpOwpJWzVdID0gbmV3IEFycmF5KCk7CklbNV1bMF0gPSAxMDA7CklbNV1bMV0gPSAnJzsKSVs1XVsyXSA9ICcwJzsKSVs1XVszXSA9IG5ldyBBcnJheSgpOwpJWzVdWzNdWzBdID0gbmV3IEFycmF5KCdwaG9zcGhvcmljIGFjaWQnLCdBY2lkcyB0aGF0IGRvIG5vdCBjb250YWluIG94eWdlbiwgaW9uIGVuZHMgaW4gXCJpZGVcIiwgdXNlIGh5ZHJvIGFzIGEgcHJlZml4IGFuZCBlbmQgaW4gXCJpY1wiLiBBY2lkcyB0aGF0IGNvbnRhaW4gb3h5Z2VuIGRvIG5vdCB1c2UgaHlkcm8gYXMgYSBwcmVmaXguIFRoZSBhY2lkcyBtdXN0IGVuZCBpbiB0aGUgd29yZCBhY2lkLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcIml0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJvdXNcIi4nLDEsMTAwLDEpOwpJWzVdWzNdWzFdID0gbmV3IEFycmF5KCdoeWRyb3Bob3NwaG9yaWMgYWNpZCcsJ0FjaWRzIHRoYXQgZG8gbm90IGNvbnRhaW4gb3h5Z2VuLCBpb24gZW5kcyBpbiBcImlkZVwiLCB1c2UgaHlkcm8gYXMgYSBwcmVmaXggYW5kIGVuZCBpbiBcImljXCIuIEFjaWRzIHRoYXQgY29udGFpbiBveHlnZW4gZG8gbm90IHVzZSBoeWRybyBhcyBhIHByZWZpeC4gVGhlIGFjaWRzIG11c3QgZW5kIGluIHRoZSB3b3JkIGFjaWQuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiaXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcIm91c1wiLicsMCwwLDEpOwpJWzVdWzNdWzJdID0gbmV3IEFycmF5KCdwaG9zcGhvcm91cyBhY2lkJywnQWNpZHMgdGhhdCBkbyBub3QgY29udGFpbiBveHlnZW4sIGlvbiBlbmRzIGluIFwiaWRlXCIsIHVzZSBoeWRybyBhcyBhIHByZWZpeCBhbmQgZW5kIGluIFwiaWNcIi4gQWNpZHMgdGhhdCBjb250YWluIG94eWdlbiBkbyBub3QgdXNlIGh5ZHJvIGFzIGEgcHJlZml4LiBUaGUgYWNpZHMgbXVzdCBlbmQgaW4gdGhlIHdvcmQgYWNpZC4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJpdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwib3VzXCIuJywwLDAsMSk7CklbNV1bM11bM10gPSBuZXcgQXJyYXkoJ3Bob3NwaG9yaWMnLCdBY2lkcyB0aGF0IGRvIG5vdCBjb250YWluIG94eWdlbiwgaW9uIGVuZHMgaW4gXCJpZGVcIiwgdXNlIGh5ZHJvIGFzIGEgcHJlZml4IGFuZCBlbmQgaW4gXCJpY1wiLiBBY2lkcyB0aGF0IGNvbnRhaW4gb3h5Z2VuIGRvIG5vdCB1c2UgaHlkcm8gYXMgYSBwcmVmaXguIFRoZSBhY2lkcyBtdXN0IGVuZCBpbiB0aGUgd29yZCBhY2lkLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcIml0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJvdXNcIi4nLDAsMCwxKTsKSVs2XSA9IG5ldyBBcnJheSgpOwpJWzZdWzBdID0gMTAwOwpJWzZdWzFdID0gJyc7CklbNl1bMl0gPSAnMCc7CklbNl1bM10gPSBuZXcgQXJyYXkoKTsKSVs2XVszXVswXSA9IG5ldyBBcnJheSgncGhvc3Bob3JpYyBhY2lkJywnQWNpZHMgdGhhdCBkbyBub3QgY29udGFpbiBveHlnZW4sIGlvbiBlbmRzIGluIFwiaWRlXCIsIHVzZSBoeWRybyBhcyBhIHByZWZpeCBhbmQgZW5kIGluIFwiaWNcIi4gQWNpZHMgdGhhdCBjb250YWluIG94eWdlbiBkbyBub3QgdXNlIGh5ZHJvIGFzIGEgcHJlZml4LiBUaGUgYWNpZHMgbXVzdCBlbmQgaW4gdGhlIHdvcmQgYWNpZC4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJpdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwib3VzXCIuJywwLDAsMSk7CklbNl1bM11bMV0gPSBuZXcgQXJyYXkoJ2h5ZHJvcGhvc3Bob3JpYyBhY2lkJywnQWNpZHMgdGhhdCBkbyBub3QgY29udGFpbiBveHlnZW4sIGlvbiBlbmRzIGluIFwiaWRlXCIsIHVzZSBoeWRybyBhcyBhIHByZWZpeCBhbmQgZW5kIGluIFwiaWNcIi4gQWNpZHMgdGhhdCBjb250YWluIG94eWdlbiBkbyBub3QgdXNlIGh5ZHJvIGFzIGEgcHJlZml4LiBUaGUgYWNpZHMgbXVzdCBlbmQgaW4gdGhlIHdvcmQgYWNpZC4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJpdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwib3VzXCIuJywwLDAsMSk7CklbNl1bM11bMl0gPSBuZXcgQXJyYXkoJ3Bob3NwaG9yb3VzIGFjaWQnLCdBY2lkcyB0aGF0IGRvIG5vdCBjb250YWluIG94eWdlbiwgaW9uIGVuZHMgaW4gXCJpZGVcIiwgdXNlIGh5ZHJvIGFzIGEgcHJlZml4IGFuZCBlbmQgaW4gXCJpY1wiLiBBY2lkcyB0aGF0IGNvbnRhaW4gb3h5Z2VuIGRvIG5vdCB1c2UgaHlkcm8gYXMgYSBwcmVmaXguIFRoZSBhY2lkcyBtdXN0IGVuZCBpbiB0aGUgd29yZCBhY2lkLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcIml0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJvdXNcIi4nLDEsMTAwLDEpOwpJWzZdWzNdWzNdID0gbmV3IEFycmF5KCdwaG9zcGhvcmljJywnQWNpZHMgdGhhdCBkbyBub3QgY29udGFpbiBveHlnZW4sIGlvbiBlbmRzIGluIFwiaWRlXCIsIHVzZSBoeWRybyBhcyBhIHByZWZpeCBhbmQgZW5kIGluIFwiaWNcIi4gQWNpZHMgdGhhdCBjb250YWluIG94eWdlbiBkbyBub3QgdXNlIGh5ZHJvIGFzIGEgcHJlZml4LiBUaGUgYWNpZHMgbXVzdCBlbmQgaW4gdGhlIHdvcmQgYWNpZC4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJpdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwib3VzXCIuJywwLDAsMSk7CklbN10gPSBuZXcgQXJyYXkoKTsKSVs3XVswXSA9IDEwMDsKSVs3XVsxXSA9ICcnOwpJWzddWzJdID0gJzAnOwpJWzddWzNdID0gbmV3IEFycmF5KCk7CklbN11bM11bMF0gPSBuZXcgQXJyYXkoJ3N1bGZ1cm91cyBhY2lkJywnQWNpZHMgdGhhdCBkbyBub3QgY29udGFpbiBveHlnZW4sIGlvbiBlbmRzIGluIFwiaWRlXCIsIHVzZSBoeWRybyBhcyBhIHByZWZpeCBhbmQgZW5kIGluIFwiaWNcIi4gQWNpZHMgdGhhdCBjb250YWluIG94eWdlbiBkbyBub3QgdXNlIGh5ZHJvIGFzIGEgcHJlZml4LiBUaGUgYWNpZHMgbXVzdCBlbmQgaW4gdGhlIHdvcmQgYWNpZC4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJpdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwib3VzXCIuJywxLDEwMCwxKTsKSVs3XVszXVsxXSA9IG5ldyBBcnJheSgnaHlkcm9zdWxmdXJvdXMgYWNpZCcsJ0FjaWRzIHRoYXQgZG8gbm90IGNvbnRhaW4gb3h5Z2VuLCBpb24gZW5kcyBpbiBcImlkZVwiLCB1c2UgaHlkcm8gYXMgYSBwcmVmaXggYW5kIGVuZCBpbiBcImljXCIuIEFjaWRzIHRoYXQgY29udGFpbiBveHlnZW4gZG8gbm90IHVzZSBoeWRybyBhcyBhIHByZWZpeC4gVGhlIGFjaWRzIG11c3QgZW5kIGluIHRoZSB3b3JkIGFjaWQuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiaXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcIm91c1wiLicsMCwwLDEpOwpJWzddWzNdWzJdID0gbmV3IEFycmF5KCdzdWxmdXJpYyBhY2lkJywnQWNpZHMgdGhhdCBkbyBub3QgY29udGFpbiBveHlnZW4sIGlvbiBlbmRzIGluIFwiaWRlXCIsIHVzZSBoeWRybyBhcyBhIHByZWZpeCBhbmQgZW5kIGluIFwiaWNcIi4gQWNpZHMgdGhhdCBjb250YWluIG94eWdlbiBkbyBub3QgdXNlIGh5ZHJvIGFzIGEgcHJlZml4LiBUaGUgYWNpZHMgbXVzdCBlbmQgaW4gdGhlIHdvcmQgYWNpZC4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJpdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwib3VzXCIuJywwLDAsMSk7CklbN11bM11bM10gPSBuZXcgQXJyYXkoJ3N1bGZ1cm91cycsJ0FjaWRzIHRoYXQgZG8gbm90IGNvbnRhaW4gb3h5Z2VuLCBpb24gZW5kcyBpbiBcImlkZVwiLCB1c2UgaHlkcm8gYXMgYSBwcmVmaXggYW5kIGVuZCBpbiBcImljXCIuIEFjaWRzIHRoYXQgY29udGFpbiBveHlnZW4gZG8gbm90IHVzZSBoeWRybyBhcyBhIHByZWZpeC4gVGhlIGFjaWRzIG11c3QgZW5kIGluIHRoZSB3b3JkIGFjaWQuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiaXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcIm91c1wiLicsMCwwLDEpOwpJWzhdID0gbmV3IEFycmF5KCk7CklbOF1bMF0gPSAxMDA7CklbOF1bMV0gPSAnJzsKSVs4XVsyXSA9ICcwJzsKSVs4XVszXSA9IG5ldyBBcnJheSgpOwpJWzhdWzNdWzBdID0gbmV3IEFycmF5KCdjYXJib25pYyBhY2lkJywnQWNpZHMgdGhhdCBkbyBub3QgY29udGFpbiBveHlnZW4sIGlvbiBlbmRzIGluIFwiaWRlXCIsIHVzZSBoeWRybyBhcyBhIHByZWZpeCBhbmQgZW5kIGluIFwiaWNcIi4gQWNpZHMgdGhhdCBjb250YWluIG94eWdlbiBkbyBub3QgdXNlIGh5ZHJvIGFzIGEgcHJlZml4LiBUaGUgYWNpZHMgbXVzdCBlbmQgaW4gdGhlIHdvcmQgYWNpZC4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJpdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwib3VzXCIuJywxLDEwMCwxKTsKSVs4XVszXVsxXSA9IG5ldyBBcnJheSgnaHlkcm9jYXJib25pYyBhY2lkJywnQWNpZHMgdGhhdCBkbyBub3QgY29udGFpbiBveHlnZW4sIGlvbiBlbmRzIGluIFwiaWRlXCIsIHVzZSBoeWRybyBhcyBhIHByZWZpeCBhbmQgZW5kIGluIFwiaWNcIi4gQWNpZHMgdGhhdCBjb250YWluIG94eWdlbiBkbyBub3QgdXNlIGh5ZHJvIGFzIGEgcHJlZml4LiBUaGUgYWNpZHMgbXVzdCBlbmQgaW4gdGhlIHdvcmQgYWNpZC4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJpdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwib3VzXCIuJywwLDAsMSk7CklbOF1bM11bMl0gPSBuZXcgQXJyYXkoJ2NhYm9uYXRlIGFjaWQnLCdBY2lkcyB0aGF0IGRvIG5vdCBjb250YWluIG94eWdlbiwgaW9uIGVuZHMgaW4gXCJpZGVcIiwgdXNlIGh5ZHJvIGFzIGEgcHJlZml4IGFuZCBlbmQgaW4gXCJpY1wiLiBBY2lkcyB0aGF0IGNvbnRhaW4gb3h5Z2VuIGRvIG5vdCB1c2UgaHlkcm8gYXMgYSBwcmVmaXguIFRoZSBhY2lkcyBtdXN0IGVuZCBpbiB0aGUgd29yZCBhY2lkLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcIml0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJvdXNcIi4nLDAsMCwxKTsKSVs4XVszXVszXSA9IG5ldyBBcnJheSgnY2FyYm9uaWMnLCdBY2lkcyB0aGF0IGRvIG5vdCBjb250YWluIG94eWdlbiwgaW9uIGVuZHMgaW4gXCJpZGVcIiwgdXNlIGh5ZHJvIGFzIGEgcHJlZml4IGFuZCBlbmQgaW4gXCJpY1wiLiBBY2lkcyB0aGF0IGNvbnRhaW4gb3h5Z2VuIGRvIG5vdCB1c2UgaHlkcm8gYXMgYSBwcmVmaXguIFRoZSBhY2lkcyBtdXN0IGVuZCBpbiB0aGUgd29yZCBhY2lkLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcIml0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJvdXNcIi4nLDAsMCwxKTsKSVs5XSA9IG5ldyBBcnJheSgpOwpJWzldWzBdID0gMTAwOwpJWzldWzFdID0gJyc7CklbOV1bMl0gPSAnMCc7CklbOV1bM10gPSBuZXcgQXJyYXkoKTsKSVs5XVszXVswXSA9IG5ldyBBcnJheSgnaW9kaWMgYWNpZCcsJ0FjaWRzIHRoYXQgZG8gbm90IGNvbnRhaW4gb3h5Z2VuLCBpb24gZW5kcyBpbiBcImlkZVwiLCB1c2UgaHlkcm8gYXMgYSBwcmVmaXggYW5kIGVuZCBpbiBcImljXCIuIEFjaWRzIHRoYXQgY29udGFpbiBveHlnZW4gZG8gbm90IHVzZSBoeWRybyBhcyBhIHByZWZpeC4gVGhlIGFjaWRzIG11c3QgZW5kIGluIHRoZSB3b3JkIGFjaWQuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiaXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcIm91c1wiLicsMCwwLDEpOwpJWzldWzNdWzFdID0gbmV3IEFycmF5KCdoeWRyb2lvZGljIGFjaWQnLCdBY2lkcyB0aGF0IGRvIG5vdCBjb250YWluIG94eWdlbiwgaW9uIGVuZHMgaW4gXCJpZGVcIiwgdXNlIGh5ZHJvIGFzIGEgcHJlZml4IGFuZCBlbmQgaW4gXCJpY1wiLiBBY2lkcyB0aGF0IGNvbnRhaW4gb3h5Z2VuIGRvIG5vdCB1c2UgaHlkcm8gYXMgYSBwcmVmaXguIFRoZSBhY2lkcyBtdXN0IGVuZCBpbiB0aGUgd29yZCBhY2lkLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcIml0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJvdXNcIi4nLDEsMTAwLDEpOwpJWzldWzNdWzJdID0gbmV3IEFycmF5KCdpb2RpZGUgYWNpZCcsJ0FjaWRzIHRoYXQgZG8gbm90IGNvbnRhaW4gb3h5Z2VuLCBpb24gZW5kcyBpbiBcImlkZVwiLCB1c2UgaHlkcm8gYXMgYSBwcmVmaXggYW5kIGVuZCBpbiBcImljXCIuIEFjaWRzIHRoYXQgY29udGFpbiBveHlnZW4gZG8gbm90IHVzZSBoeWRybyBhcyBhIHByZWZpeC4gVGhlIGFjaWRzIG11c3QgZW5kIGluIHRoZSB3b3JkIGFjaWQuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiaXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcIm91c1wiLicsMCwwLDEpOwpJWzldWzNdWzNdID0gbmV3IEFycmF5KCdpb2RpYycsJ0FjaWRzIHRoYXQgZG8gbm90IGNvbnRhaW4gb3h5Z2VuLCBpb24gZW5kcyBpbiBcImlkZVwiLCB1c2UgaHlkcm8gYXMgYSBwcmVmaXggYW5kIGVuZCBpbiBcImljXCIuIEFjaWRzIHRoYXQgY29udGFpbiBveHlnZW4gZG8gbm90IHVzZSBoeWRybyBhcyBhIHByZWZpeC4gVGhlIGFjaWRzIG11c3QgZW5kIGluIHRoZSB3b3JkIGFjaWQuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiaXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcIm91c1wiLicsMCwwLDEpOwpJWzEwXSA9IG5ldyBBcnJheSgpOwpJWzEwXVswXSA9IDEwMDsKSVsxMF1bMV0gPSAnJzsKSVsxMF1bMl0gPSAnMCc7CklbMTBdWzNdID0gbmV3IEFycmF5KCk7CklbMTBdWzNdWzBdID0gbmV3IEFycmF5KCdicm9taWMgYWNpZCcsJ0FjaWRzIHRoYXQgZG8gbm90IGNvbnRhaW4gb3h5Z2VuLCBpb24gZW5kcyBpbiBcImlkZVwiLCB1c2UgaHlkcm8gYXMgYSBwcmVmaXggYW5kIGVuZCBpbiBcImljXCIuIEFjaWRzIHRoYXQgY29udGFpbiBveHlnZW4gZG8gbm90IHVzZSBoeWRybyBhcyBhIHByZWZpeC4gVGhlIGFjaWRzIG11c3QgZW5kIGluIHRoZSB3b3JkIGFjaWQuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiaXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcIm91c1wiLicsMCwwLDEpOwpJWzEwXVszXVsxXSA9IG5ldyBBcnJheSgnaHlkcm9icm9taWMgYWNpZCcsJ0FjaWRzIHRoYXQgZG8gbm90IGNvbnRhaW4gb3h5Z2VuLCBpb24gZW5kcyBpbiBcImlkZVwiLCB1c2UgaHlkcm8gYXMgYSBwcmVmaXggYW5kIGVuZCBpbiBcImljXCIuIEFjaWRzIHRoYXQgY29udGFpbiBveHlnZW4gZG8gbm90IHVzZSBoeWRybyBhcyBhIHByZWZpeC4gVGhlIGFjaWRzIG11c3QgZW5kIGluIHRoZSB3b3JkIGFjaWQuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiaXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcIm91c1wiLicsMSwxMDAsMSk7CklbMTBdWzNdWzJdID0gbmV3IEFycmF5KCdicm9taWRlIGFjaWQnLCdBY2lkcyB0aGF0IGRvIG5vdCBjb250YWluIG94eWdlbiwgaW9uIGVuZHMgaW4gXCJpZGVcIiwgdXNlIGh5ZHJvIGFzIGEgcHJlZml4IGFuZCBlbmQgaW4gXCJpY1wiLiBBY2lkcyB0aGF0IGNvbnRhaW4gb3h5Z2VuIGRvIG5vdCB1c2UgaHlkcm8gYXMgYSBwcmVmaXguIFRoZSBhY2lkcyBtdXN0IGVuZCBpbiB0aGUgd29yZCBhY2lkLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcIml0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJvdXNcIi4nLDAsMCwxKTsKSVsxMF1bM11bM10gPSBuZXcgQXJyYXkoJ2Jyb21pYycsJ0FjaWRzIHRoYXQgZG8gbm90IGNvbnRhaW4gb3h5Z2VuLCBpb24gZW5kcyBpbiBcImlkZVwiLCB1c2UgaHlkcm8gYXMgYSBwcmVmaXggYW5kIGVuZCBpbiBcImljXCIuIEFjaWRzIHRoYXQgY29udGFpbiBveHlnZW4gZG8gbm90IHVzZSBoeWRybyBhcyBhIHByZWZpeC4gVGhlIGFjaWRzIG11c3QgZW5kIGluIHRoZSB3b3JkIGFjaWQuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiaXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcIm91c1wiLicsMCwwLDEpOwpJWzExXSA9IG5ldyBBcnJheSgpOwpJWzExXVswXSA9IDEwMDsKSVsxMV1bMV0gPSAnJzsKSVsxMV1bMl0gPSAnMCc7CklbMTFdWzNdID0gbmV3IEFycmF5KCk7CklbMTFdWzNdWzBdID0gbmV3IEFycmF5KCdmbHVvcmljIGFjaWQnLCdBY2lkcyB0aGF0IGRvIG5vdCBjb250YWluIG94eWdlbiwgaW9uIGVuZHMgaW4gXCJpZGVcIiwgdXNlIGh5ZHJvIGFzIGEgcHJlZml4IGFuZCBlbmQgaW4gXCJpY1wiLiBBY2lkcyB0aGF0IGNvbnRhaW4gb3h5Z2VuIGRvIG5vdCB1c2UgaHlkcm8gYXMgYSBwcmVmaXguIFRoZSBhY2lkcyBtdXN0IGVuZCBpbiB0aGUgd29yZCBhY2lkLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcIml0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJvdXNcIi4nLDAsMCwxKTsKSVsxMV1bM11bMV0gPSBuZXcgQXJyYXkoJ2h5ZHJvZmx1b3JpYyBhY2lkJywnQWNpZHMgdGhhdCBkbyBub3QgY29udGFpbiBveHlnZW4sIGlvbiBlbmRzIGluIFwiaWRlXCIsIHVzZSBoeWRybyBhcyBhIHByZWZpeCBhbmQgZW5kIGluIFwiaWNcIi4gQWNpZHMgdGhhdCBjb250YWluIG94eWdlbiBkbyBub3QgdXNlIGh5ZHJvIGFzIGEgcHJlZml4LiBUaGUgYWNpZHMgbXVzdCBlbmQgaW4gdGhlIHdvcmQgYWNpZC4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJpdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwib3VzXCIuJywxLDEwMCwxKTsKSVsxMV1bM11bMl0gPSBuZXcgQXJyYXkoJ2ZsdW9yaWRlIGFjaWQnLCdBY2lkcyB0aGF0IGRvIG5vdCBjb250YWluIG94eWdlbiwgaW9uIGVuZHMgaW4gXCJpZGVcIiwgdXNlIGh5ZHJvIGFzIGEgcHJlZml4IGFuZCBlbmQgaW4gXCJpY1wiLiBBY2lkcyB0aGF0IGNvbnRhaW4gb3h5Z2VuIGRvIG5vdCB1c2UgaHlkcm8gYXMgYSBwcmVmaXguIFRoZSBhY2lkcyBtdXN0IGVuZCBpbiB0aGUgd29yZCBhY2lkLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcIml0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJvdXNcIi4nLDAsMCwxKTsKSVsxMV1bM11bM10gPSBuZXcgQXJyYXkoJ2ZsdW9yaWMnLCdBY2lkcyB0aGF0IGRvIG5vdCBjb250YWluIG94eWdlbiwgaW9uIGVuZHMgaW4gXCJpZGVcIiwgdXNlIGh5ZHJvIGFzIGEgcHJlZml4IGFuZCBlbmQgaW4gXCJpY1wiLiBBY2lkcyB0aGF0IGNvbnRhaW4gb3h5Z2VuIGRvIG5vdCB1c2UgaHlkcm8gYXMgYSBwcmVmaXguIFRoZSBhY2lkcyBtdXN0IGVuZCBpbiB0aGUgd29yZCBhY2lkLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcIml0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJvdXNcIi4nLDAsMCwxKTsKSVsxMl0gPSBuZXcgQXJyYXkoKTsKSVsxMl1bMF0gPSAxMDA7CklbMTJdWzFdID0gJyc7CklbMTJdWzJdID0gJzAnOwpJWzEyXVszXSA9IG5ldyBBcnJheSgpOwpJWzEyXVszXVswXSA9IG5ldyBBcnJheSgnZmx1b3JpYyBhY2lkJywnQWNpZHMgdGhhdCBkbyBub3QgY29udGFpbiBveHlnZW4sIGlvbiBlbmRzIGluIFwiaWRlXCIsIHVzZSBoeWRybyBhcyBhIHByZWZpeCBhbmQgZW5kIGluIFwiaWNcIi4gQWNpZHMgdGhhdCBjb250YWluIG94eWdlbiBkbyBub3QgdXNlIGh5ZHJvIGFzIGEgcHJlZml4LiBUaGUgYWNpZHMgbXVzdCBlbmQgaW4gdGhlIHdvcmQgYWNpZC4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJpdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwib3VzXCIuJywwLDAsMSk7CklbMTJdWzNdWzFdID0gbmV3IEFycmF5KCdoeWRyb2ZsdW9yaWMgYWNpZCcsJ0FjaWRzIHRoYXQgZG8gbm90IGNvbnRhaW4gb3h5Z2VuLCBpb24gZW5kcyBpbiBcImlkZVwiLCB1c2UgaHlkcm8gYXMgYSBwcmVmaXggYW5kIGVuZCBpbiBcImljXCIuIEFjaWRzIHRoYXQgY29udGFpbiBveHlnZW4gZG8gbm90IHVzZSBoeWRybyBhcyBhIHByZWZpeC4gVGhlIGFjaWRzIG11c3QgZW5kIGluIHRoZSB3b3JkIGFjaWQuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiaXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcIm91c1wiLicsMCwwLDEpOwpJWzEyXVszXVsyXSA9IG5ldyBBcnJheSgnZmx1b3JpZGUgYWNpZCcsJ0FjaWRzIHRoYXQgZG8gbm90IGNvbnRhaW4gb3h5Z2VuLCBpb24gZW5kcyBpbiBcImlkZVwiLCB1c2UgaHlkcm8gYXMgYSBwcmVmaXggYW5kIGVuZCBpbiBcImljXCIuIEFjaWRzIHRoYXQgY29udGFpbiBveHlnZW4gZG8gbm90IHVzZSBoeWRybyBhcyBhIHByZWZpeC4gVGhlIGFjaWRzIG11c3QgZW5kIGluIHRoZSB3b3JkIGFjaWQuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiaXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcIm91c1wiLicsMCwwLDEpOwpJWzEyXVszXVszXSA9IG5ldyBBcnJheSgnaHlkcm9nZW4gbW9ub2ZsdW9yaWRlJywnQWNpZHMgdGhhdCBkbyBub3QgY29udGFpbiBveHlnZW4sIGlvbiBlbmRzIGluIFwiaWRlXCIsIHVzZSBoeWRybyBhcyBhIHByZWZpeCBhbmQgZW5kIGluIFwiaWNcIi4gQWNpZHMgdGhhdCBjb250YWluIG94eWdlbiBkbyBub3QgdXNlIGh5ZHJvIGFzIGEgcHJlZml4LiBUaGUgYWNpZHMgbXVzdCBlbmQgaW4gdGhlIHdvcmQgYWNpZC4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJpdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwib3VzXCIuJywxLDEwMCwxKTsKSVsxM10gPSBuZXcgQXJyYXkoKTsKSVsxM11bMF0gPSAxMDA7CklbMTNdWzFdID0gJyc7CklbMTNdWzJdID0gJzAnOwpJWzEzXVszXSA9IG5ldyBBcnJheSgpOwpJWzEzXVszXVswXSA9IG5ldyBBcnJheSgnYnJvbWljIGFjaWQnLCdBY2lkcyB0aGF0IGRvIG5vdCBjb250YWluIG94eWdlbiwgaW9uIGVuZHMgaW4gXCJpZGVcIiwgdXNlIGh5ZHJvIGFzIGEgcHJlZml4IGFuZCBlbmQgaW4gXCJpY1wiLiBBY2lkcyB0aGF0IGNvbnRhaW4gb3h5Z2VuIGRvIG5vdCB1c2UgaHlkcm8gYXMgYSBwcmVmaXguIFRoZSBhY2lkcyBtdXN0IGVuZCBpbiB0aGUgd29yZCBhY2lkLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcIml0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJvdXNcIi4nLDAsMCwxKTsKSVsxM11bM11bMV0gPSBuZXcgQXJyYXkoJ2h5ZHJvYnJvbWljIGFjaWQnLCdBY2lkcyB0aGF0IGRvIG5vdCBjb250YWluIG94eWdlbiwgaW9uIGVuZHMgaW4gXCJpZGVcIiwgdXNlIGh5ZHJvIGFzIGEgcHJlZml4IGFuZCBlbmQgaW4gXCJpY1wiLiBBY2lkcyB0aGF0IGNvbnRhaW4gb3h5Z2VuIGRvIG5vdCB1c2UgaHlkcm8gYXMgYSBwcmVmaXguIFRoZSBhY2lkcyBtdXN0IGVuZCBpbiB0aGUgd29yZCBhY2lkLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcIml0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJvdXNcIi4nLDAsMCwxKTsKSVsxM11bM11bMl0gPSBuZXcgQXJyYXkoJ2Jyb21pZGUgYWNpZCcsJ0FjaWRzIHRoYXQgZG8gbm90IGNvbnRhaW4gb3h5Z2VuLCBpb24gZW5kcyBpbiBcImlkZVwiLCB1c2UgaHlkcm8gYXMgYSBwcmVmaXggYW5kIGVuZCBpbiBcImljXCIuIEFjaWRzIHRoYXQgY29udGFpbiBveHlnZW4gZG8gbm90IHVzZSBoeWRybyBhcyBhIHByZWZpeC4gVGhlIGFjaWRzIG11c3QgZW5kIGluIHRoZSB3b3JkIGFjaWQuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiaXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcIm91c1wiLicsMCwwLDEpOwpJWzEzXVszXVszXSA9IG5ldyBBcnJheSgnaHlkcm9nZW4gbW9ub2Jyb21pZGUnLCdBY2lkcyB0aGF0IGRvIG5vdCBjb250YWluIG94eWdlbiwgaW9uIGVuZHMgaW4gXCJpZGVcIiwgdXNlIGh5ZHJvIGFzIGEgcHJlZml4IGFuZCBlbmQgaW4gXCJpY1wiLiBBY2lkcyB0aGF0IGNvbnRhaW4gb3h5Z2VuIGRvIG5vdCB1c2UgaHlkcm8gYXMgYSBwcmVmaXguIFRoZSBhY2lkcyBtdXN0IGVuZCBpbiB0aGUgd29yZCBhY2lkLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcIml0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJvdXNcIi4nLDEsMTAwLDEpOwpJWzE0XSA9IG5ldyBBcnJheSgpOwpJWzE0XVswXSA9IDEwMDsKSVsxNF1bMV0gPSAnJzsKSVsxNF1bMl0gPSAnMCc7CklbMTRdWzNdID0gbmV3IEFycmF5KCk7CklbMTRdWzNdWzBdID0gbmV3IEFycmF5KCdpb2RpYyBhY2lkJywnQWNpZHMgdGhhdCBkbyBub3QgY29udGFpbiBveHlnZW4sIGlvbiBlbmRzIGluIFwiaWRlXCIsIHVzZSBoeWRybyBhcyBhIHByZWZpeCBhbmQgZW5kIGluIFwiaWNcIi4gQWNpZHMgdGhhdCBjb250YWluIG94eWdlbiBkbyBub3QgdXNlIGh5ZHJvIGFzIGEgcHJlZml4LiBUaGUgYWNpZHMgbXVzdCBlbmQgaW4gdGhlIHdvcmQgYWNpZC4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJpdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwib3VzXCIuJywwLDAsMSk7CklbMTRdWzNdWzFdID0gbmV3IEFycmF5KCdoeWRyb2lvZGljIGFjaWQnLCdBY2lkcyB0aGF0IGRvIG5vdCBjb250YWluIG94eWdlbiwgaW9uIGVuZHMgaW4gXCJpZGVcIiwgdXNlIGh5ZHJvIGFzIGEgcHJlZml4IGFuZCBlbmQgaW4gXCJpY1wiLiBBY2lkcyB0aGF0IGNvbnRhaW4gb3h5Z2VuIGRvIG5vdCB1c2UgaHlkcm8gYXMgYSBwcmVmaXguIFRoZSBhY2lkcyBtdXN0IGVuZCBpbiB0aGUgd29yZCBhY2lkLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcIml0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJvdXNcIi4nLDAsMCwxKTsKSVsxNF1bM11bMl0gPSBuZXcgQXJyYXkoJ2lvZGlkZSBhY2lkJywnQWNpZHMgdGhhdCBkbyBub3QgY29udGFpbiBveHlnZW4sIGlvbiBlbmRzIGluIFwiaWRlXCIsIHVzZSBoeWRybyBhcyBhIHByZWZpeCBhbmQgZW5kIGluIFwiaWNcIi4gQWNpZHMgdGhhdCBjb250YWluIG94eWdlbiBkbyBub3QgdXNlIGh5ZHJvIGFzIGEgcHJlZml4LiBUaGUgYWNpZHMgbXVzdCBlbmQgaW4gdGhlIHdvcmQgYWNpZC4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJpdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwib3VzXCIuJywwLDAsMSk7CklbMTRdWzNdWzNdID0gbmV3IEFycmF5KCdoeWRyb2dlbiBtb25vaW9kaWRlJywnQWNpZHMgdGhhdCBkbyBub3QgY29udGFpbiBveHlnZW4sIGlvbiBlbmRzIGluIFwiaWRlXCIsIHVzZSBoeWRybyBhcyBhIHByZWZpeCBhbmQgZW5kIGluIFwiaWNcIi4gQWNpZHMgdGhhdCBjb250YWluIG94eWdlbiBkbyBub3QgdXNlIGh5ZHJvIGFzIGEgcHJlZml4LiBUaGUgYWNpZHMgbXVzdCBlbmQgaW4gdGhlIHdvcmQgYWNpZC4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJpdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwib3VzXCIuJywxLDEwMCwxKTsKSVsxNV0gPSBuZXcgQXJyYXkoKTsKSVsxNV1bMF0gPSAxMDA7CklbMTVdWzFdID0gJyc7CklbMTVdWzJdID0gJzAnOwpJWzE1XVszXSA9IG5ldyBBcnJheSgpOwpJWzE1XVszXVswXSA9IG5ldyBBcnJheSgnY2hsb3JpYyBhY2lkJywnQWNpZHMgdGhhdCBkbyBub3QgY29udGFpbiBveHlnZW4sIGlvbiBlbmRzIGluIFwiaWRlXCIsIHVzZSBoeWRybyBhcyBhIHByZWZpeCBhbmQgZW5kIGluIFwiaWNcIi4gQWNpZHMgdGhhdCBjb250YWluIG94eWdlbiBkbyBub3QgdXNlIGh5ZHJvIGFzIGEgcHJlZml4LiBUaGUgYWNpZHMgbXVzdCBlbmQgaW4gdGhlIHdvcmQgYWNpZC4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJpdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwib3VzXCIuJywxLDEwMCwxKTsKSVsxNV1bM11bMV0gPSBuZXcgQXJyYXkoJ2h5ZHJvY2hsb3JpYyBhY2lkJywnQWNpZHMgdGhhdCBkbyBub3QgY29udGFpbiBveHlnZW4sIGlvbiBlbmRzIGluIFwiaWRlXCIsIHVzZSBoeWRybyBhcyBhIHByZWZpeCBhbmQgZW5kIGluIFwiaWNcIi4gQWNpZHMgdGhhdCBjb250YWluIG94eWdlbiBkbyBub3QgdXNlIGh5ZHJvIGFzIGEgcHJlZml4LiBUaGUgYWNpZHMgbXVzdCBlbmQgaW4gdGhlIHdvcmQgYWNpZC4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJpdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwib3VzXCIuJywwLDAsMSk7CklbMTVdWzNdWzJdID0gbmV3IEFycmF5KCdjaGxvcmljJywnQWNpZHMgdGhhdCBkbyBub3QgY29udGFpbiBveHlnZW4sIGlvbiBlbmRzIGluIFwiaWRlXCIsIHVzZSBoeWRybyBhcyBhIHByZWZpeCBhbmQgZW5kIGluIFwiaWNcIi4gQWNpZHMgdGhhdCBjb250YWluIG94eWdlbiBkbyBub3QgdXNlIGh5ZHJvIGFzIGEgcHJlZml4LiBUaGUgYWNpZHMgbXVzdCBlbmQgaW4gdGhlIHdvcmQgYWNpZC4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJpdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwib3VzXCIuJywwLDAsMSk7CklbMTVdWzNdWzNdID0gbmV3IEFycmF5KCdjaGxvcm91cyBhY2lkJywnQWNpZHMgdGhhdCBkbyBub3QgY29udGFpbiBveHlnZW4sIGlvbiBlbmRzIGluIFwiaWRlXCIsIHVzZSBoeWRybyBhcyBhIHByZWZpeCBhbmQgZW5kIGluIFwiaWNcIi4gQWNpZHMgdGhhdCBjb250YWluIG94eWdlbiBkbyBub3QgdXNlIGh5ZHJvIGFzIGEgcHJlZml4LiBUaGUgYWNpZHMgbXVzdCBlbmQgaW4gdGhlIHdvcmQgYWNpZC4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJpdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwib3VzXCIuJywwLDAsMSk7CklbMTZdID0gbmV3IEFycmF5KCk7CklbMTZdWzBdID0gMTAwOwpJWzE2XVsxXSA9ICcnOwpJWzE2XVsyXSA9ICcwJzsKSVsxNl1bM10gPSBuZXcgQXJyYXkoKTsKSVsxNl1bM11bMF0gPSBuZXcgQXJyYXkoJ2FjZXRpYyBhY2lkJywnQWNpZHMgdGhhdCBkbyBub3QgY29udGFpbiBveHlnZW4sIGlvbiBlbmRzIGluIFwiaWRlXCIsIHVzZSBoeWRybyBhcyBhIHByZWZpeCBhbmQgZW5kIGluIFwiaWNcIi4gQWNpZHMgdGhhdCBjb250YWluIG94eWdlbiBkbyBub3QgdXNlIGh5ZHJvIGFzIGEgcHJlZml4LiBUaGUgYWNpZHMgbXVzdCBlbmQgaW4gdGhlIHdvcmQgYWNpZC4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJpdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwib3VzXCIuJywxLDEwMCwxKTsKSVsxNl1bM11bMV0gPSBuZXcgQXJyYXkoJ2h5ZHJvYWNldGljIGFjaWQnLCdBY2lkcyB0aGF0IGRvIG5vdCBjb250YWluIG94eWdlbiwgaW9uIGVuZHMgaW4gXCJpZGVcIiwgdXNlIGh5ZHJvIGFzIGEgcHJlZml4IGFuZCBlbmQgaW4gXCJpY1wiLiBBY2lkcyB0aGF0IGNvbnRhaW4gb3h5Z2VuIGRvIG5vdCB1c2UgaHlkcm8gYXMgYSBwcmVmaXguIFRoZSBhY2lkcyBtdXN0IGVuZCBpbiB0aGUgd29yZCBhY2lkLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcIml0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJvdXNcIi4nLDAsMCwxKTsKSVsxNl1bM11bMl0gPSBuZXcgQXJyYXkoJ2FjZXRpYycsJ0FjaWRzIHRoYXQgZG8gbm90IGNvbnRhaW4gb3h5Z2VuLCBpb24gZW5kcyBpbiBcImlkZVwiLCB1c2UgaHlkcm8gYXMgYSBwcmVmaXggYW5kIGVuZCBpbiBcImljXCIuIEFjaWRzIHRoYXQgY29udGFpbiBveHlnZW4gZG8gbm90IHVzZSBoeWRybyBhcyBhIHByZWZpeC4gVGhlIGFjaWRzIG11c3QgZW5kIGluIHRoZSB3b3JkIGFjaWQuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiaXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcIm91c1wiLicsMCwwLDEpOwpJWzE2XVszXVszXSA9IG5ldyBBcnJheSgnYWNldGF0ZSBhY2lkJywnQWNpZHMgdGhhdCBkbyBub3QgY29udGFpbiBveHlnZW4sIGlvbiBlbmRzIGluIFwiaWRlXCIsIHVzZSBoeWRybyBhcyBhIHByZWZpeCBhbmQgZW5kIGluIFwiaWNcIi4gQWNpZHMgdGhhdCBjb250YWluIG94eWdlbiBkbyBub3QgdXNlIGh5ZHJvIGFzIGEgcHJlZml4LiBUaGUgYWNpZHMgbXVzdCBlbmQgaW4gdGhlIHdvcmQgYWNpZC4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJpdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwib3VzXCIuJywwLDAsMSk7CklbMTddID0gbmV3IEFycmF5KCk7CklbMTddWzBdID0gMTAwOwpJWzE3XVsxXSA9ICcnOwpJWzE3XVsyXSA9ICcwJzsKSVsxN11bM10gPSBuZXcgQXJyYXkoKTsKSVsxN11bM11bMF0gPSBuZXcgQXJyYXkoJ2JvcmljIGFjaWQnLCdBY2lkcyB0aGF0IGRvIG5vdCBjb250YWluIG94eWdlbiwgaW9uIGVuZHMgaW4gXCJpZGVcIiwgdXNlIGh5ZHJvIGFzIGEgcHJlZml4IGFuZCBlbmQgaW4gXCJpY1wiLiBBY2lkcyB0aGF0IGNvbnRhaW4gb3h5Z2VuIGRvIG5vdCB1c2UgaHlkcm8gYXMgYSBwcmVmaXguIFRoZSBhY2lkcyBtdXN0IGVuZCBpbiB0aGUgd29yZCBhY2lkLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcIml0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJvdXNcIi4nLDEsMTAwLDEpOwpJWzE3XVszXVsxXSA9IG5ldyBBcnJheSgnaHlkcm9ib3JpYyBhY2lkJywnQWNpZHMgdGhhdCBkbyBub3QgY29udGFpbiBveHlnZW4sIGlvbiBlbmRzIGluIFwiaWRlXCIsIHVzZSBoeWRybyBhcyBhIHByZWZpeCBhbmQgZW5kIGluIFwiaWNcIi4gQWNpZHMgdGhhdCBjb250YWluIG94eWdlbiBkbyBub3QgdXNlIGh5ZHJvIGFzIGEgcHJlZml4LiBUaGUgYWNpZHMgbXVzdCBlbmQgaW4gdGhlIHdvcmQgYWNpZC4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJpdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwib3VzXCIuJywwLDAsMSk7CklbMTddWzNdWzJdID0gbmV3IEFycmF5KCdib3JvdXMgYWNpZCcsJ0FjaWRzIHRoYXQgZG8gbm90IGNvbnRhaW4gb3h5Z2VuLCBpb24gZW5kcyBpbiBcImlkZVwiLCB1c2UgaHlkcm8gYXMgYSBwcmVmaXggYW5kIGVuZCBpbiBcImljXCIuIEFjaWRzIHRoYXQgY29udGFpbiBveHlnZW4gZG8gbm90IHVzZSBoeWRybyBhcyBhIHByZWZpeC4gVGhlIGFjaWRzIG11c3QgZW5kIGluIHRoZSB3b3JkIGFjaWQuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiaXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcIm91c1wiLicsMCwwLDEpOwpJWzE3XVszXVszXSA9IG5ldyBBcnJheSgnYm9yYXRlIGFjaWQnLCdBY2lkcyB0aGF0IGRvIG5vdCBjb250YWluIG94eWdlbiwgaW9uIGVuZHMgaW4gXCJpZGVcIiwgdXNlIGh5ZHJvIGFzIGEgcHJlZml4IGFuZCBlbmQgaW4gXCJpY1wiLiBBY2lkcyB0aGF0IGNvbnRhaW4gb3h5Z2VuIGRvIG5vdCB1c2UgaHlkcm8gYXMgYSBwcmVmaXguIFRoZSBhY2lkcyBtdXN0IGVuZCBpbiB0aGUgd29yZCBhY2lkLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcIml0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJvdXNcIi4nLDAsMCwxKTsKSVsxOF0gPSBuZXcgQXJyYXkoKTsKSVsxOF1bMF0gPSAxMDA7CklbMThdWzFdID0gJyc7CklbMThdWzJdID0gJzAnOwpJWzE4XVszXSA9IG5ldyBBcnJheSgpOwpJWzE4XVszXVswXSA9IG5ldyBBcnJheSgnc2lsaWNpYyBhY2lkJywnQWNpZHMgdGhhdCBkbyBub3QgY29udGFpbiBveHlnZW4sIGlvbiBlbmRzIGluIFwiaWRlXCIsIHVzZSBoeWRybyBhcyBhIHByZWZpeCBhbmQgZW5kIGluIFwiaWNcIi4gQWNpZHMgdGhhdCBjb250YWluIG94eWdlbiBkbyBub3QgdXNlIGh5ZHJvIGFzIGEgcHJlZml4LiBUaGUgYWNpZHMgbXVzdCBlbmQgaW4gdGhlIHdvcmQgYWNpZC4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJpdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwib3VzXCIuJywxLDEwMCwxKTsKSVsxOF1bM11bMV0gPSBuZXcgQXJyYXkoJ2h5ZHJvc2lsaWNpYyBhY2lkJywnQWNpZHMgdGhhdCBkbyBub3QgY29udGFpbiBveHlnZW4sIGlvbiBlbmRzIGluIFwiaWRlXCIsIHVzZSBoeWRybyBhcyBhIHByZWZpeCBhbmQgZW5kIGluIFwiaWNcIi4gQWNpZHMgdGhhdCBjb250YWluIG94eWdlbiBkbyBub3QgdXNlIGh5ZHJvIGFzIGEgcHJlZml4LiBUaGUgYWNpZHMgbXVzdCBlbmQgaW4gdGhlIHdvcmQgYWNpZC4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJpdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwib3VzXCIuJywwLDAsMSk7CklbMThdWzNdWzJdID0gbmV3IEFycmF5KCdzaWxpY291cyBhY2lkJywnQWNpZHMgdGhhdCBkbyBub3QgY29udGFpbiBveHlnZW4sIGlvbiBlbmRzIGluIFwiaWRlXCIsIHVzZSBoeWRybyBhcyBhIHByZWZpeCBhbmQgZW5kIGluIFwiaWNcIi4gQWNpZHMgdGhhdCBjb250YWluIG94eWdlbiBkbyBub3QgdXNlIGh5ZHJvIGFzIGEgcHJlZml4LiBUaGUgYWNpZHMgbXVzdCBlbmQgaW4gdGhlIHdvcmQgYWNpZC4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJpdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwib3VzXCIuJywwLDAsMSk7CklbMThdWzNdWzNdID0gbmV3IEFycmF5KCdzaWxpY2F0ZSBhY2lkJywnQWNpZHMgdGhhdCBkbyBub3QgY29udGFpbiBveHlnZW4sIGlvbiBlbmRzIGluIFwiaWRlXCIsIHVzZSBoeWRybyBhcyBhIHByZWZpeCBhbmQgZW5kIGluIFwiaWNcIi4gQWNpZHMgdGhhdCBjb250YWluIG94eWdlbiBkbyBub3QgdXNlIGh5ZHJvIGFzIGEgcHJlZml4LiBUaGUgYWNpZHMgbXVzdCBlbmQgaW4gdGhlIHdvcmQgYWNpZC4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJpdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwib3VzXCIuJywwLDAsMSk7CklbMTldID0gbmV3IEFycmF5KCk7CklbMTldWzBdID0gMTAwOwpJWzE5XVsxXSA9ICcnOwpJWzE5XVsyXSA9ICcwJzsKSVsxOV1bM10gPSBuZXcgQXJyYXkoKTsKSVsxOV1bM11bMF0gPSBuZXcgQXJyYXkoJ294YWxpYyBhY2lkJywnQWNpZHMgdGhhdCBkbyBub3QgY29udGFpbiBveHlnZW4sIGlvbiBlbmRzIGluIFwiaWRlXCIsIHVzZSBoeWRybyBhcyBhIHByZWZpeCBhbmQgZW5kIGluIFwiaWNcIi4gQWNpZHMgdGhhdCBjb250YWluIG94eWdlbiBkbyBub3QgdXNlIGh5ZHJvIGFzIGEgcHJlZml4LiBUaGUgYWNpZHMgbXVzdCBlbmQgaW4gdGhlIHdvcmQgYWNpZC4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJpdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwib3VzXCIuJywxLDEwMCwxKTsKSVsxOV1bM11bMV0gPSBuZXcgQXJyYXkoJ2h5ZHJvb3hhbGljIGFjaWQnLCdBY2lkcyB0aGF0IGRvIG5vdCBjb250YWluIG94eWdlbiwgaW9uIGVuZHMgaW4gXCJpZGVcIiwgdXNlIGh5ZHJvIGFzIGEgcHJlZml4IGFuZCBlbmQgaW4gXCJpY1wiLiBBY2lkcyB0aGF0IGNvbnRhaW4gb3h5Z2VuIGRvIG5vdCB1c2UgaHlkcm8gYXMgYSBwcmVmaXguIFRoZSBhY2lkcyBtdXN0IGVuZCBpbiB0aGUgd29yZCBhY2lkLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcIml0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJvdXNcIi4nLDAsMCwxKTsKSVsxOV1bM11bMl0gPSBuZXcgQXJyYXkoJ294YWxpY291cyBhY2lkJywnQWNpZHMgdGhhdCBkbyBub3QgY29udGFpbiBveHlnZW4sIGlvbiBlbmRzIGluIFwiaWRlXCIsIHVzZSBoeWRybyBhcyBhIHByZWZpeCBhbmQgZW5kIGluIFwiaWNcIi4gQWNpZHMgdGhhdCBjb250YWluIG94eWdlbiBkbyBub3QgdXNlIGh5ZHJvIGFzIGEgcHJlZml4LiBUaGUgYWNpZHMgbXVzdCBlbmQgaW4gdGhlIHdvcmQgYWNpZC4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcImF0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJpY1wiLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJpdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwib3VzXCIuJywwLDAsMSk7CklbMTldWzNdWzNdID0gbmV3IEFycmF5KCdveGFsYXRlIGFjaWQnLCdBY2lkcyB0aGF0IGRvIG5vdCBjb250YWluIG94eWdlbiwgaW9uIGVuZHMgaW4gXCJpZGVcIiwgdXNlIGh5ZHJvIGFzIGEgcHJlZml4IGFuZCBlbmQgaW4gXCJpY1wiLiBBY2lkcyB0aGF0IGNvbnRhaW4gb3h5Z2VuIGRvIG5vdCB1c2UgaHlkcm8gYXMgYSBwcmVmaXguIFRoZSBhY2lkcyBtdXN0IGVuZCBpbiB0aGUgd29yZCBhY2lkLiBJZiB0aGUgcG9seWF0b21pYyBlbmRpbmcgaXMgXCJhdGVcIiB0aGUgYWNpZCBlbmRzIGluIFwiaWNcIi4gSWYgdGhlIHBvbHlhdG9taWMgZW5kaW5nIGlzIFwiYXRlXCIgdGhlIGFjaWQgZW5kcyBpbiBcImljXCIuIElmIHRoZSBwb2x5YXRvbWljIGVuZGluZyBpcyBcIml0ZVwiIHRoZSBhY2lkIGVuZHMgaW4gXCJvdXNcIi4nLDAsMCwxKTsKZnVuY3Rpb24gU3RhcnRVcCgpewoJUmVtb3ZlQm90dG9tTmF2QmFyRm9ySUUoKTsKCWlmIChRc1RvU2hvdyA8IDIpewoJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdRTmF2Jykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKCX0KCXN0ckluc3RydWN0aW9ucyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdJbnN0cnVjdGlvbnNEaXYnKS5pbm5lckhUTUw7CglDb21wbGV0ZUVtcHR5RmVlZGJhY2soKTsKCVNldFVwUXVlc3Rpb25zKCk7CglDbGVhclRleHRCb3hlcygpOwoJQ3JlYXRlU3RhdHVzQXJyYXkoKTsKCWlmIChkb2N1bWVudC5sb2NhdGlvbi5zZWFyY2gubGVuZ3RoID4gMCl7CgkJaWYgKFNodWZmbGVRcyA9PSBmYWxzZSl7CgkJCXZhciBKdW1wVG8gPSBwYXJzZUludChkb2N1bWVudC5sb2NhdGlvbi5zZWFyY2guc3Vic3RyaW5nKDEsZG9jdW1lbnQubG9jYXRpb24uc2VhcmNoLmxlbmd0aCkpLTE7CgkJCWlmIChKdW1wVG8gPD0gUXNUb1Nob3cpewoJCQkJQ2hhbmdlUShKdW1wVG8pOwoJCQl9CgkJfQoJfQoJU2hvd1NwZWNpYWxSZWFkaW5nRm9yUXVlc3Rpb24oKTsKCWlmICghIHdpbmRvdy5wZyl7CgkJd2luZG93LnBnID0gbmV3IFBhZ2VEaW0oKTsKCX0KCXZhciBGRGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0ZlZWRiYWNrRGl2Jyk7CglpZiAoRkRpdil7CgkJdmFyIHcgPSBnZXRPZmZzZXQoRkRpdiwgJ1dpZHRoJykgfHwgRkRpdi5zdHlsZS53aWR0aCB8fCBnZXRDbGFzc0F0dHJpYnV0ZShGRGl2LmNsYXNzTmFtZSwgJ3dpZHRoJyk7CgkJaWYgKHcpewoJCQlpZiAodHlwZW9mKHcpPT0nc3RyaW5nJyAmJiB3LmluZGV4T2YoJyUnKT49MCl7CgkJCQl2YXIgcGVyY2VudCA9IHBhcnNlSW50KHcpOwoJCQl9IGVsc2UgewoJCQkJdmFyIHBlcmNlbnQgPSBNYXRoLmZsb29yKDEwMCAqIHBhcnNlSW50KHcpIC8gcGcuVyk7CgkJCX0KCQl9IGVsc2UgaWYgKHdpbmRvdy5GZWVkYmFja1dpZHRoICYmIHdpbmRvdy5EaXZXaWR0aCl7CgkJCXZhciBwZXJjZW50ID0gTWF0aC5mbG9vcigxMDAgKiBGZWVkYmFja1dpZHRoIC8gRGl2V2lkdGgpOwoJCX0gZWxzZSB7CgkJCXZhciBwZXJjZW50ID0gMzQ7CgkJfQoJCUZEaXYuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CgkJc2V0T2Zmc2V0KEZEaXYsICdMZWZ0JywgcGcuTGVmdCArIE1hdGguZmxvb3IocGcuVyAqICg1MCAtIHBlcmNlbnQvMikgLyAxMDApKTsKCQlzZXRPZmZzZXQoRkRpdiwgJ1dpZHRoJywgTWF0aC5mbG9vcihwZy5XICogcGVyY2VudCAvIDEwMCkpOwoJCUZEaXYuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKCX0KCXdpbmRvdy5IUCA9IG5ldyBKUXVpeignJywnMCcpOwoJdmFyIHMgPSAnJzsKCWlmICh0eXBlb2Yod2luZG93Lm9udW5sb2FkKT09J2Z1bmN0aW9uJyl7CgkJd2luZG93Lm9udW5sb2FkX1N0YXJ0VXAgPSBvbnVubG9hZDsKCQlzICs9ICd3aW5kb3cub251bmxvYWRfU3RhcnRVcCgpOycKCX0KCXdpbmRvdy5vbnVubG9hZCA9IG5ldyBGdW5jdGlvbihzICsgJ2lmKHdpbmRvdy5IUCl7SFAuc3RhdHVzPTM7SFAub251bmxvYWQoKTtvYmplY3RfZGVzdHJveShIUCk7fXJldHVybiB0cnVlOycpOwoJd2luZG93LmhvdHBvdGJlZm9yZXVubG9hZCA9IGZ1bmN0aW9uKCl7CgkJcmV0dXJuICdZb3VyIHJlc3VsdHMgc28gZmFyIHdpbGwgYmUgc2F2ZWQgYnV0IGlmIHlvdSB3YW50IHRvIHJlZG8gdGhpcyBhY3Rpdml0eSBhZ2FpbiBsYXRlciwgeW91IHdpbGwgaGF2ZSB0byBzdGFydCBmcm9tIHRoZSBiZWdpbm5pbmcuJzsKCX0KCWlmICh3aW5kb3cub3BlcmEpIHsKCQloaXN0b3J5Lm5hdmlnYXRpb25Nb2RlID0gJ2NvbXBhdGlibGUnOwoJfQoJd2luZG93Lm9uYmVmb3JldW5sb2FkID0gd2luZG93LmhvdHBvdGJlZm9yZXVubG9hZDsKCWlmICghIHdpbmRvdy5ob3Rwb3RfbWVkaWFmaWx0ZXJfbG9hZGVyKXsKCQlTdHJldGNoQ2FudmFzVG9Db3ZlckNvbnRlbnQoKTsKCX0KfQpmdW5jdGlvbiBTdHJldGNoQ2FudmFzVG9Db3ZlckNvbnRlbnQoc2tpcFRpbWVvdXQpewoJaWYgKCEgc2tpcFRpbWVvdXQpewoJCWlmIChuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0ZpcmVmb3gvMycpPj0wKXsKCQkJdmFyIG1pbGxpc2VjcyA9IDEwMDA7CgkJfSBlbHNlIHsKCQkJdmFyIG1pbGxpc2VjcyA9IDUwMDsKCQl9CgkJc2V0VGltZW91dCgnU3RyZXRjaENhbnZhc1RvQ292ZXJDb250ZW50KHRydWUpJywgbWlsbGlzZWNzKTsKCQlyZXR1cm47Cgl9Cgl2YXIgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlZ2lvbi1tYWluJyk7CglpZiAoY2FudmFzKXsKCQl2YXIgaWRzID0gbmV3IEFycmF5KCdSZWFkaW5nJywnUmVhZGluZ0RpdicsJ01haW5EaXYnKTsKCQl2YXIgaV9tYXggPSBpZHMubGVuZ3RoOwoJCWZvciAodmFyIGk9aV9tYXgtMTsgaT49MDsgaS0tKXsKCQkJdmFyIG9iaiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkc1tpXSk7CgkJCWlmIChvYmopewoJCQkJb2JqLnN0eWxlLmhlaWdodCA9ICcnOwoJCQl9IGVsc2UgewoJCQkJaWRzLnNwbGljZShpLCAxKTsKCQkJCWlfbWF4LS07CgkJCX0KCQl9CgkJdmFyIGIgPSAwOwoJCWZvciAodmFyIGk9MDsgaTxpX21heDsgaSsrKXsKCQkJdmFyIG9iaiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkc1tpXSk7CgkJCWIgPSBNYXRoLm1heChiLCBnZXRPZmZzZXQob2JqLCdCb3R0b20nKSk7CgkJfQoJCWlmICh3aW5kb3cuU2VnbWVudHMpIHsKCQkJdmFyIG9iaiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdEJysoU2VnbWVudHMubGVuZ3RoLTEpKTsKCQkJaWYgKG9iaikgewoJCQkJYiA9IE1hdGgubWF4KGIsIGdldE9mZnNldChvYmosJ0JvdHRvbScpKTsKCQkJfQoJCX0KCQlpZiAoYil7CgkJCXNldE9mZnNldChjYW52YXMsICdCb3R0b20nLCBiICsgMjEpOwoJCQlmb3IgKHZhciBpPTA7IGk8aV9tYXg7IGkrKyl7CgkJCQl2YXIgb2JqID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRzW2ldKTsKCQkJCXNldE9mZnNldChvYmosICdCb3R0b20nLCBiKTsKCQkJfQoJCX0KCX0KfQpmdW5jdGlvbiBTaG93SGlkZVF1ZXN0aW9ucygpewoJRnVuY0J0bk91dChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU2hvd01ldGhvZEJ1dHRvbicpKTsKCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdTaG93TWV0aG9kQnV0dG9uJykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKCWlmIChTaG93aW5nQWxsUXVlc3Rpb25zID09IGZhbHNlKXsKCQlmb3IgKHZhciBpPTA7IGk8UUFycmF5Lmxlbmd0aDsgaSsrKXsKCQkJCWlmICgoaSsxKTxRQXJyYXkubGVuZ3RoKXsKCQkJCQlRQXJyYXlbaV0uc3R5bGUuYm9yZGVyV2lkdGggPSAnJzsKCQkJCX0KCQkJCVFBcnJheVtpXS5zdHlsZS5kaXNwbGF5ID0gJyc7CgkJCX0KCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUXVlc3Rpb25zJykuc3R5bGUubGlzdFN0eWxlVHlwZSA9ICdkZWNpbWFsJzsKCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnT25lQnlPbmVSZWFkb3V0Jykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU2hvd01ldGhvZEJ1dHRvbicpLmlubmVySFRNTCA9IFNob3dPbmVCeU9uZUNhcHRpb247CgkJU2hvd2luZ0FsbFF1ZXN0aW9ucyA9IHRydWU7Cgl9IGVsc2UgewoJCWZvciAodmFyIGk9MDsgaTxRQXJyYXkubGVuZ3RoOyBpKyspewoJCQkJUUFycmF5W2ldLnN0eWxlLmJvcmRlcldpZHRoID0gJzBweCc7CgkJCQlpZiAoaSAhPSBDdXJyUU51bSl7CgkJCQkJUUFycmF5W2ldLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CgkJCQl9CgkJCX0KCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUXVlc3Rpb25zJykuc3R5bGUubGlzdFN0eWxlVHlwZSA9ICdub25lJzsKCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnT25lQnlPbmVSZWFkb3V0Jykuc3R5bGUuZGlzcGxheSA9ICcnOwoJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdTaG93TWV0aG9kQnV0dG9uJykuaW5uZXJIVE1MID0gU2hvd0FsbFF1ZXN0aW9uc0NhcHRpb247CgkJU2hvd2luZ0FsbFF1ZXN0aW9ucyA9IGZhbHNlOwoJfQoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1Nob3dNZXRob2RCdXR0b24nKS5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZSc7CglTdHJldGNoQ2FudmFzVG9Db3ZlckNvbnRlbnQodHJ1ZSk7Cn0KZnVuY3Rpb24gQ3JlYXRlU3RhdHVzQXJyYXkoKXsKCXZhciBRTnVtLCBBTnVtOwoJZm9yIChRTnVtPTA7IFFOdW08SS5sZW5ndGg7IFFOdW0rKyl7CgkJaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdRXycgKyBRTnVtKSAhPSBudWxsKXsKCQkJU3RhdGVbUU51bV0gPSBuZXcgQXJyYXkoKTsKCQkJU3RhdGVbUU51bV1bMF0gPSAtMTsKCQkJU3RhdGVbUU51bV1bMV0gPSBuZXcgQXJyYXkoKTsKCQkJZm9yIChBTnVtID0gMDsgQU51bTxJW1FOdW1dWzNdLmxlbmd0aDsgQU51bSsrKXsKCQkJCVN0YXRlW1FOdW1dWzFdW0FOdW1dID0gMDsKCQkJfQoJCQlTdGF0ZVtRTnVtXVsyXSA9IDA7CgkJCVN0YXRlW1FOdW1dWzNdID0gMDsKCQkJU3RhdGVbUU51bV1bNF0gPSAwOwoJCQlTdGF0ZVtRTnVtXVs1XSA9ICcnOwoJCX0gZWxzZSB7CgkJCVN0YXRlW1FOdW1dID0gbnVsbDsKCQl9Cgl9Cn0KZnVuY3Rpb24gQ2hlY2tNQ0Fuc3dlcihRTnVtLCBBTnVtLCBCdG4pewoJaWYoIUZpbmlzaGVkICYmIFN0YXRlW1FOdW1dLmxlbmd0aCAmJiBTdGF0ZVtRTnVtXVswXTwwKSB7CgkJdmFyIGFyZ3MgPSBuZXcgQXJyYXkoUU51bSwgSVtRTnVtXVszXVtBTnVtXVswXSk7CgkJSFAub25jbGlja0NoZWNrKGFyZ3MpOwoJfQoJaWYgKFN0YXRlW1FOdW1dLmxlbmd0aCA8IDEpe3JldHVybjt9CglGZWVkYmFjayA9IElbUU51bV1bM11bQU51bV1bMV07CglpZiAoU3RhdGVbUU51bV1bMF0gPiAtMSl7CgkJaWYgKHN0clF1ZXN0aW9uRmluaXNoZWQubGVuZ3RoID4gMCl7RmVlZGJhY2sgKz0gJzxiciAvPicgKyBzdHJRdWVzdGlvbkZpbmlzaGVkO30KCQlTaG93TWVzc2FnZShGZWVkYmFjayk7CgkJcmV0dXJuOwoJfQoJQnRuLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CglTdGF0ZVtRTnVtXVsyXSsrOwoJU3RhdGVbUU51bV1bM10gKz0gSVtRTnVtXVszXVtBTnVtXVszXTsKCVN0YXRlW1FOdW1dWzFdW0FOdW1dID0gU3RhdGVbUU51bV1bMl07CglpZiAoU3RhdGVbUU51bV1bNV0ubGVuZ3RoID4gMCl7U3RhdGVbUU51bV1bNV0gKz0gJyB8ICc7fQoJU3RhdGVbUU51bV1bNV0gKz0gU3RyaW5nLmZyb21DaGFyQ29kZSg2NStBTnVtKTsKCWlmIChJW1FOdW1dWzNdW0FOdW1dWzJdIDwgMSl7CgkJQnRuLmlubmVySFRNTCA9IEluY29ycmVjdEluZGljYXRvcjsKCQlpZiAoRmluaXNoZWQgPT0gZmFsc2UpewoJCQlXcml0ZVRvSW5zdHJ1Y3Rpb25zKHN0ckluc3RydWN0aW9ucyk7CgkJfQoJCXZhciBSZW1haW5pbmdBbnN3ZXIgPSBGaW5hbEFuc3dlcihRTnVtKTsKCQlpZiAoUmVtYWluaW5nQW5zd2VyID4gLTEpewoJCQlTdGF0ZVtRTnVtXVsyXSsrOwoJCQlDYWxjdWxhdGVNQ1F1ZXN0aW9uU2NvcmUoUU51bSk7CgkJCUNhbGN1bGF0ZU92ZXJhbGxTY29yZSgpOwoJCQl2YXIgUXNEb25lID0gQ2hlY2tRdWVzdGlvbnNDb21wbGV0ZWQoKTsKCQkJaWYgKChDb250aW51b3VzU2NvcmluZyA9PSB0cnVlKXx8KEZpbmlzaGVkID09IHRydWUpKXsKCQkJCUZlZWRiYWNrICs9ICc8YnIgLz4nICsgWW91clNjb3JlSXMgKyAnICcgKyBTY29yZSArICclLicgKyAnPGJyIC8+JyArIFFzRG9uZTsKCQkJCVdyaXRlVG9JbnN0cnVjdGlvbnMoWW91clNjb3JlSXMgKyAnICcgKyBTY29yZSArICclLicgKyAnPGJyIC8+JyArIFFzRG9uZSk7CgkJCX0gZWxzZSB7CgkJCQlXcml0ZVRvSW5zdHJ1Y3Rpb25zKFFzRG9uZSk7CgkJCX0KCQl9Cgl9IGVsc2UgewoJCUJ0bi5pbm5lckhUTUwgPSBDb3JyZWN0SW5kaWNhdG9yOwoJCUNhbGN1bGF0ZU1DUXVlc3Rpb25TY29yZShRTnVtKTsKCQl2YXIgUXNEb25lID0gQ2hlY2tRdWVzdGlvbnNDb21wbGV0ZWQoKTsKCQlpZiAoQ29udGludW91c1Njb3JpbmcgPT0gdHJ1ZSl7CgkJCUNhbGN1bGF0ZU92ZXJhbGxTY29yZSgpOwoJCQlpZiAoKENvbnRpbnVvdXNTY29yaW5nID09IHRydWUpfHwoRmluaXNoZWQgPT0gdHJ1ZSkpewoJCQkJRmVlZGJhY2sgKz0gJzxiciAvPicgKyBZb3VyU2NvcmVJcyArICcgJyArIFNjb3JlICsgJyUuJyArICc8YnIgLz4nICsgUXNEb25lOwoJCQkJV3JpdGVUb0luc3RydWN0aW9ucyhZb3VyU2NvcmVJcyArICcgJyArIFNjb3JlICsgJyUuJyArICc8YnIgLz4nICsgUXNEb25lKTsKCQkJfQoJCX0gZWxzZSB7CgkJCVdyaXRlVG9JbnN0cnVjdGlvbnMoUXNEb25lKTsKCQl9Cgl9CglCdG4uc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUnOwoJU2hvd01lc3NhZ2UoRmVlZGJhY2spOwoJQ2hlY2tGaW5pc2hlZCgpOwp9CmZ1bmN0aW9uIENhbGN1bGF0ZU1DUXVlc3Rpb25TY29yZShRTnVtKXsKCXZhciBUcmllcyA9IFN0YXRlW1FOdW1dWzJdICsgU3RhdGVbUU51bV1bNF07Cgl2YXIgUGVyY2VudENvcnJlY3QgPSBTdGF0ZVtRTnVtXVszXTsKCXZhciBUb3RBbnMgPSBHZXRUb3RhbE1DQW5zd2VycyhRTnVtKTsKCXZhciBIaW50UGVuYWx0aWVzID0gU3RhdGVbUU51bV1bNF07CglpZiAoU3RhdGVbUU51bV1bMF0gPCAwKXsKCQlpZiAoSGludFBlbmFsdGllcyA+PSAxKXsKCQkJU3RhdGVbUU51bV1bMF0gPSAwOwoJCX0gZWxzZSB7CgkJCWlmIChUb3RBbnMgPT0gMSl7CgkJCQlTdGF0ZVtRTnVtXVswXSA9IDE7CgkJCX0gZWxzZSB7CgkJCQlTdGF0ZVtRTnVtXVswXSA9ICgoVG90QW5zLSgoVHJpZXMqMTAwKS9TdGF0ZVtRTnVtXVszXSkpLyhUb3RBbnMtMSkpOwoJCQl9CgkJfQoJCWlmICgoU3RhdGVbUU51bV1bMF0gPCAwKXx8KFN0YXRlW1FOdW1dWzBdID09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSkpewoJCQlTdGF0ZVtRTnVtXVswXSA9IDA7CgkJfQoJfQp9CmZ1bmN0aW9uIEdldFRvdGFsTUNBbnN3ZXJzKFFOdW0pewoJdmFyIFJlc3VsdCA9IDA7Cglmb3IgKHZhciBBTnVtPTA7IEFOdW08SVtRTnVtXVszXS5sZW5ndGg7IEFOdW0rKyl7CgkJaWYgKElbUU51bV1bM11bQU51bV1bNF0gPT0gMSl7CgkJCVJlc3VsdCsrOwoJCX0KCX0KCXJldHVybiBSZXN1bHQ7Cn0KZnVuY3Rpb24gRmluYWxBbnN3ZXIoUU51bSl7Cgl2YXIgVW5jaG9zZW5BbnN3ZXJzID0gMDsKCXZhciBGaW5hbEFuc3dlciA9IC0xOwoJZm9yICh2YXIgQU51bT0wOyBBTnVtPElbUU51bV1bM10ubGVuZ3RoOyBBTnVtKyspewoJCWlmIChJW1FOdW1dWzNdW0FOdW1dWzRdID09IDEpewoJCQlpZiAoU3RhdGVbUU51bV1bMV1bQU51bV0gPCAxKXsKCQkJCVVuY2hvc2VuQW5zd2VycysrOwoJCQkJRmluYWxBbnN3ZXIgPSBBTnVtOwoJCQl9CgkJfQoJfQoJaWYgKFVuY2hvc2VuQW5zd2VycyA9PSAxKXsKCQlyZXR1cm4gRmluYWxBbnN3ZXI7Cgl9IGVsc2UgewoJCXJldHVybiAtMTsKCX0KfQpmdW5jdGlvbiBDYWxjdWxhdGVPdmVyYWxsU2NvcmUoKXsKCXZhciBUb3RhbFdlaWdodGluZyA9IDA7Cgl2YXIgVG90YWxTY29yZSA9IDA7Cgl2YXIgVG90YWxDb3VudCA9IDA7Cglmb3IgKHZhciBRTnVtPTA7IFFOdW08U3RhdGUubGVuZ3RoOyBRTnVtKyspewoJCWlmIChTdGF0ZVtRTnVtXSAhPSBudWxsKXsKCQkJaWYgKFN0YXRlW1FOdW1dWzBdID4gLTEpewoJCQkJVG90YWxXZWlnaHRpbmcgKz0gSVtRTnVtXVswXTsKCQkJCVRvdGFsU2NvcmUgKz0gKElbUU51bV1bMF0gKiBTdGF0ZVtRTnVtXVswXSk7CgkJCQlUb3RhbENvdW50ICsrOwoJCQl9CgkJfQoJfQoJaWYgKFRvdGFsV2VpZ2h0aW5nID4gMCl7CgkJU2NvcmUgPSBNYXRoLmZsb29yKChUb3RhbFNjb3JlL1RvdGFsV2VpZ2h0aW5nKSoxMDApOwoJfSBlbHNlIGlmIChUb3RhbENvdW50PT0wKSB7CgkJU2NvcmUgPSAwOwoJfSBlbHNlIHsKCQlTY29yZSA9IDEwMDsKCX0KfQpmdW5jdGlvbiBDaGVja1F1ZXN0aW9uc0NvbXBsZXRlZCgpewoJaWYgKFNob3dDb21wbGV0ZWRTb0ZhciA9PSBmYWxzZSl7cmV0dXJuICcnO30KCXZhciBRc0NvbXBsZXRlZCA9IDA7Cglmb3IgKHZhciBRTnVtPTA7IFFOdW08U3RhdGUubGVuZ3RoOyBRTnVtKyspewoJCWlmIChTdGF0ZVtRTnVtXSAhPSBudWxsKXsKCQkJaWYgKFN0YXRlW1FOdW1dWzBdID49IDApewoJCQkJUXNDb21wbGV0ZWQrKzsKCQkJfQoJCX0KCX0KCWlmIChRc0NvbXBsZXRlZCA+PSBRQXJyYXkubGVuZ3RoKXsKCQlyZXR1cm4gRXhlcmNpc2VDb21wbGV0ZWQ7Cgl9IGVsc2UgewoJCXJldHVybiBDb21wbGV0ZWRTb0ZhciArICcgJyArIFFzQ29tcGxldGVkICsgJy8nICsgUUFycmF5Lmxlbmd0aCArICcuJzsKCX0KfQpmdW5jdGlvbiBDaGVja0ZpbmlzaGVkKEZvcmNlUXVpelN0YXR1cyl7Cgl2YXIgRkIgPSAnJzsKCXZhciBBbGxEb25lID0gdHJ1ZTsKCWZvciAodmFyIFFOdW09MDsgUU51bTxTdGF0ZS5sZW5ndGg7IFFOdW0rKyl7CgkJaWYgKFN0YXRlW1FOdW1dICE9IG51bGwpewoJCQlpZiAoU3RhdGVbUU51bV1bMF0gPCAwKXsKCQkJCUFsbERvbmUgPSBmYWxzZTsKCQkJfQoJCX0KCX0KCWlmIChBbGxEb25lKXsKCQl2YXIgUXVpelN0YXR1cyA9IDQ7Cgl9IGVsc2UgaWYgKEZvcmNlUXVpelN0YXR1cyl7CgkJdmFyIFF1aXpTdGF0dXMgPSBGb3JjZVF1aXpTdGF0dXM7Cgl9IGVsc2UgaWYgKFRpbWVPdmVyKXsKCQl2YXIgUXVpelN0YXR1cyA9IDI7Cgl9IGVsc2UgewoJCXZhciBRdWl6U3RhdHVzID0gMTsKCX0KCWlmIChRdWl6U3RhdHVzID4gMSkgewoJCUNhbGN1bGF0ZU92ZXJhbGxTY29yZSgpOwoJCUZCID0gWW91clNjb3JlSXMgKyAnICcgKyBTY29yZSArICclLic7CgkJaWYgKFNob3dDb3JyZWN0Rmlyc3RUaW1lID09IHRydWUpewoJCQl2YXIgQ0ZUID0gMDsKCQkJZm9yIChRTnVtPTA7IFFOdW08U3RhdGUubGVuZ3RoOyBRTnVtKyspewoJCQkJaWYgKFN0YXRlW1FOdW1dICE9IG51bGwpewoJCQkJCWlmIChTdGF0ZVtRTnVtXVswXSA+PSAxKXsKCQkJCQkJQ0ZUKys7CgkJCQkJfQoJCQkJfQoJCQl9CgkJCUZCICs9ICc8YnIgLz4nICsgQ29ycmVjdEZpcnN0VGltZSArICcgJyArIENGVCArICcvJyArIFFzVG9TaG93OwoJCX0KCQlGQiArPSAnPGJyIC8+JyArIEV4ZXJjaXNlQ29tcGxldGVkOwoJCVdyaXRlVG9JbnN0cnVjdGlvbnMoRkIpOwoJCWlmICh3aW5kb3cuSW50ZXJ2YWwpIHsKCQkJY2xlYXJJbnRlcnZhbCh3aW5kb3cuSW50ZXJ2YWwpOwoJCX0KCQlUaW1lT3ZlciA9IHRydWU7CgkJTG9ja2VkID0gdHJ1ZTsKCQlGaW5pc2hlZCA9IHRydWU7Cgl9CglpZiAoRmluaXNoZWQgfHwgSFAuc2VuZGFsbGNsaWNrcyl7CgkJaWYgKEZvcmNlUXVpelN0YXR1cyB8fCBRdWl6U3RhdHVzPT0xKXsKCQkJSFAub251bmxvYWQoUXVpelN0YXR1cyk7CgkJfSBlbHNlIHsKCQkJc2V0VGltZW91dCgnSFAub251bmxvYWQoJytRdWl6U3RhdHVzKycsMCknLCBTdWJtaXNzaW9uVGltZW91dCk7CgkJfQoJfQp9Ci8vLS0+Ci8vXV0+Cjwvc2NyaXB0PgoiO3M6MTQ6ImJvZHlhdHRyaWJ1dGVzIjtzOjE4OiJvbmxvYWQ9IlN0YXJ0VXAoKSIiO3M6MTE6ImJvZHljb250ZW50IjtzOjM1MjI1OiIKCjxkaXYgY2xhc3M9IlRpdGxlcyI+Cgk8aDIgY2xhc3M9IkV4ZXJjaXNlVGl0bGUiPkFjaWQgQmFzZTwvaDI+CjwvZGl2Pgo8ZGl2IGlkPSJJbnN0cnVjdGlvbnNEaXYiIGNsYXNzPSJTdGREaXYiPgoJPGRpdiBpZD0iSW5zdHJ1Y3Rpb25zIj5Zb3UgY2FuIGFuc3dlciBxdWVzdGlvbnMgaW4gYW55IG9yZGVyLiBZb3UgY2FuIGxpc3QgYWxsIG9mIHRoZSBxdWVzdGlvbnMgb3Igc2hvdyB0aGVtIHNpbmdseS4gWW91IG11c3QgZmluZCB0aGUgY29ycmVjdCBhbnN3ZXIgaW4gb3JkZXIgZm9yIHRoZSBxdWVzdGlvbiB0byBjb3VudC4gWW91IGNhbiB1c2UgdGhlIGhpbnQgYnV0dG9uIGZvciBoZWxwLiBIb3dldmVyLCB1c2luZyB0aGUgSGludCBidXR0b24gd2lsbCByZWR1Y2UgeW91ciBwZXJjZW50YWdlIHNjb3JlLjwvZGl2Pgo8L2Rpdj4KPGRpdiBpZD0iTWFpbkRpdiIgY2xhc3M9IlN0ZERpdiI+CjxkaXYgaWQ9IlFOYXYiIGNsYXNzPSJRdWVzdGlvbk5hdmlnYXRpb24iPgo8cCBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7Ij4KPGJ1dHRvbiBpZD0iU2hvd01ldGhvZEJ1dHRvbiIgY2xhc3M9IkZ1bmNCdXR0b24iIG9uZm9jdXM9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbmJsdXI9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2VvdmVyPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25tb3VzZW91dD0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZWRvd249IkZ1bmNCdG5Eb3duKHRoaXMpIiBvbm1vdXNldXA9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbmNsaWNrPSJTaG93SGlkZVF1ZXN0aW9ucygpOyByZXR1cm4gZmFsc2U7Ij5TaG93IGFsbCBxdWVzdGlvbnM8L2J1dHRvbj4KPC9wPgo8ZGl2IGlkPSJPbmVCeU9uZVJlYWRvdXQiPgo8YnV0dG9uIGlkPSJQcmV2UUJ1dHRvbiIgY2xhc3M9IkZ1bmNCdXR0b24iIG9uZm9jdXM9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbmJsdXI9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2VvdmVyPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25tb3VzZW91dD0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZWRvd249IkZ1bmNCdG5Eb3duKHRoaXMpIiBvbm1vdXNldXA9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbmNsaWNrPSJDaGFuZ2VRKC0xKTsgcmV0dXJuIGZhbHNlOyI+PD0gIHByZXZpb3VzIHF1ZXN0aW9uLjwvYnV0dG9uPgo8c3BhbiBpZD0iUU51bVJlYWRvdXQiIGNsYXNzPSJRTnVtIj4mbmJzcDs8L3NwYW4+CjxidXR0b24gaWQ9Ik5leHRRQnV0dG9uIiBjbGFzcz0iRnVuY0J1dHRvbiIgb25mb2N1cz0iRnVuY0J0bk92ZXIodGhpcykiIG9uYmx1cj0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZW92ZXI9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbm1vdXNlb3V0PSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlZG93bj0iRnVuY0J0bkRvd24odGhpcykiIG9ubW91c2V1cD0iRnVuY0J0bk92ZXIodGhpcykiIG9uY2xpY2s9IkNoYW5nZVEoMSk7IHJldHVybiBmYWxzZTsiPiBuZXh0IHF1ZXN0aW9uLiA9PiA8L2J1dHRvbj4KPGJyIC8+CjwvZGl2Pgo8L2Rpdj4KPG9sIGNsYXNzPSJRdWl6UXVlc3Rpb25zIiBpZD0iUXVlc3Rpb25zIj4KPGxpIGNsYXNzPSJRdWl6UXVlc3Rpb24iIGlkPSJRXzAiIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHAgY2xhc3M9IlF1ZXN0aW9uVGV4dCI+PGZvbnQgc2l6ZT0iNSI+V2hhdCBpcyB0aGUgbmFtZSBmb3IgdGhlIGZvbGxvd2luZyBmb3JtdWxhOiBITk8mI3gyMDgzOz8gPC9mb250PjwvcD48b2wgY2xhc3M9Ik1DQW5zd2VycyI+CjxsaSBpZD0iUV8wXzAiPjxidXR0b24gY2xhc3M9IkZ1bmNCdXR0b24iIG9uZm9jdXM9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbmJsdXI9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2VvdmVyPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25tb3VzZW91dD0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZWRvd249IkZ1bmNCdG5Eb3duKHRoaXMpIiBvbm1vdXNldXA9IkZ1bmNCdG5PdXQodGhpcykiIGlkPSJRXzBfMF9CdG4iIG9uY2xpY2s9IkNoZWNrTUNBbnN3ZXIoMCwwLHRoaXMpIj4mbmJzcDsmbmJzcDs/Jm5ic3A7Jm5ic3A7PC9idXR0b24+Jm5ic3A7Jm5ic3A7bml0cmljIGFjaWQ8L2xpPgo8bGkgaWQ9IlFfMF8xIj48YnV0dG9uIGNsYXNzPSJGdW5jQnV0dG9uIiBvbmZvY3VzPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25ibHVyPSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlb3Zlcj0iRnVuY0J0bk92ZXIodGhpcykiIG9ubW91c2VvdXQ9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2Vkb3duPSJGdW5jQnRuRG93bih0aGlzKSIgb25tb3VzZXVwPSJGdW5jQnRuT3V0KHRoaXMpIiBpZD0iUV8wXzFfQnRuIiBvbmNsaWNrPSJDaGVja01DQW5zd2VyKDAsMSx0aGlzKSI+Jm5ic3A7Jm5ic3A7PyZuYnNwOyZuYnNwOzwvYnV0dG9uPiZuYnNwOyZuYnNwO25pdHJvdXMgYWNpZDwvbGk+CjxsaSBpZD0iUV8wXzIiPjxidXR0b24gY2xhc3M9IkZ1bmNCdXR0b24iIG9uZm9jdXM9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbmJsdXI9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2VvdmVyPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25tb3VzZW91dD0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZWRvd249IkZ1bmNCdG5Eb3duKHRoaXMpIiBvbm1vdXNldXA9IkZ1bmNCdG5PdXQodGhpcykiIGlkPSJRXzBfMl9CdG4iIG9uY2xpY2s9IkNoZWNrTUNBbnN3ZXIoMCwyLHRoaXMpIj4mbmJzcDsmbmJzcDs/Jm5ic3A7Jm5ic3A7PC9idXR0b24+Jm5ic3A7Jm5ic3A7aHlkcm9uaXRyaWMgYWNpZDwvbGk+CjxsaSBpZD0iUV8wXzMiPjxidXR0b24gY2xhc3M9IkZ1bmNCdXR0b24iIG9uZm9jdXM9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbmJsdXI9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2VvdmVyPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25tb3VzZW91dD0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZWRvd249IkZ1bmNCdG5Eb3duKHRoaXMpIiBvbm1vdXNldXA9IkZ1bmNCdG5PdXQodGhpcykiIGlkPSJRXzBfM19CdG4iIG9uY2xpY2s9IkNoZWNrTUNBbnN3ZXIoMCwzLHRoaXMpIj4mbmJzcDsmbmJzcDs/Jm5ic3A7Jm5ic3A7PC9idXR0b24+Jm5ic3A7Jm5ic3A7bml0cmljPC9saT4KPC9vbD48L2xpPgo8bGkgY2xhc3M9IlF1aXpRdWVzdGlvbiIgaWQ9IlFfMSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48cCBjbGFzcz0iUXVlc3Rpb25UZXh0Ij48Zm9udCBzaXplPSI1Ij5XaGF0IGlzIHRoZSBuYW1lIGZvciB0aGUgZm9sbG93aW5nIGZvcm11bGE6IEhDTihhcSk/IDwvZm9udD48L3A+PG9sIGNsYXNzPSJNQ0Fuc3dlcnMiPgo8bGkgaWQ9IlFfMV8wIj48YnV0dG9uIGNsYXNzPSJGdW5jQnV0dG9uIiBvbmZvY3VzPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25ibHVyPSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlb3Zlcj0iRnVuY0J0bk92ZXIodGhpcykiIG9ubW91c2VvdXQ9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2Vkb3duPSJGdW5jQnRuRG93bih0aGlzKSIgb25tb3VzZXVwPSJGdW5jQnRuT3V0KHRoaXMpIiBpZD0iUV8xXzBfQnRuIiBvbmNsaWNrPSJDaGVja01DQW5zd2VyKDEsMCx0aGlzKSI+Jm5ic3A7Jm5ic3A7PyZuYnNwOyZuYnNwOzwvYnV0dG9uPiZuYnNwOyZuYnNwO2h5ZHJvY3lhbmljIGFjaWQ8L2xpPgo8bGkgaWQ9IlFfMV8xIj48YnV0dG9uIGNsYXNzPSJGdW5jQnV0dG9uIiBvbmZvY3VzPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25ibHVyPSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlb3Zlcj0iRnVuY0J0bk92ZXIodGhpcykiIG9ubW91c2VvdXQ9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2Vkb3duPSJGdW5jQnRuRG93bih0aGlzKSIgb25tb3VzZXVwPSJGdW5jQnRuT3V0KHRoaXMpIiBpZD0iUV8xXzFfQnRuIiBvbmNsaWNrPSJDaGVja01DQW5zd2VyKDEsMSx0aGlzKSI+Jm5ic3A7Jm5ic3A7PyZuYnNwOyZuYnNwOzwvYnV0dG9uPiZuYnNwOyZuYnNwO2h5ZHJvY3lhbm91cyBhY2lkPC9saT4KPGxpIGlkPSJRXzFfMiI+PGJ1dHRvbiBjbGFzcz0iRnVuY0J1dHRvbiIgb25mb2N1cz0iRnVuY0J0bk92ZXIodGhpcykiIG9uYmx1cj0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZW92ZXI9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbm1vdXNlb3V0PSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlZG93bj0iRnVuY0J0bkRvd24odGhpcykiIG9ubW91c2V1cD0iRnVuY0J0bk91dCh0aGlzKSIgaWQ9IlFfMV8yX0J0biIgb25jbGljaz0iQ2hlY2tNQ0Fuc3dlcigxLDIsdGhpcykiPiZuYnNwOyZuYnNwOz8mbmJzcDsmbmJzcDs8L2J1dHRvbj4mbmJzcDsmbmJzcDtoeWRyb2N5YW5pYzwvbGk+CjxsaSBpZD0iUV8xXzMiPjxidXR0b24gY2xhc3M9IkZ1bmNCdXR0b24iIG9uZm9jdXM9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbmJsdXI9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2VvdmVyPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25tb3VzZW91dD0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZWRvd249IkZ1bmNCdG5Eb3duKHRoaXMpIiBvbm1vdXNldXA9IkZ1bmNCdG5PdXQodGhpcykiIGlkPSJRXzFfM19CdG4iIG9uY2xpY2s9IkNoZWNrTUNBbnN3ZXIoMSwzLHRoaXMpIj4mbmJzcDsmbmJzcDs/Jm5ic3A7Jm5ic3A7PC9idXR0b24+Jm5ic3A7Jm5ic3A7Y3lhbmljIGFjaWQ8L2xpPgo8L29sPjwvbGk+CjxsaSBjbGFzcz0iUXVpelF1ZXN0aW9uIiBpZD0iUV8yIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxwIGNsYXNzPSJRdWVzdGlvblRleHQiPjxmb250IHNpemU9IjUiPldoYXQgaXMgdGhlIG5hbWUgZm9yIHRoZSBmb2xsb3dpbmcgZm9ybXVsYTogSEJyTz8gPC9mb250PjwvcD48b2wgY2xhc3M9Ik1DQW5zd2VycyI+CjxsaSBpZD0iUV8yXzAiPjxidXR0b24gY2xhc3M9IkZ1bmNCdXR0b24iIG9uZm9jdXM9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbmJsdXI9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2VvdmVyPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25tb3VzZW91dD0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZWRvd249IkZ1bmNCdG5Eb3duKHRoaXMpIiBvbm1vdXNldXA9IkZ1bmNCdG5PdXQodGhpcykiIGlkPSJRXzJfMF9CdG4iIG9uY2xpY2s9IkNoZWNrTUNBbnN3ZXIoMiwwLHRoaXMpIj4mbmJzcDsmbmJzcDs/Jm5ic3A7Jm5ic3A7PC9idXR0b24+Jm5ic3A7Jm5ic3A7aHlwb2Jyb21vdXMgYWNpZDwvbGk+CjxsaSBpZD0iUV8yXzEiPjxidXR0b24gY2xhc3M9IkZ1bmNCdXR0b24iIG9uZm9jdXM9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbmJsdXI9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2VvdmVyPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25tb3VzZW91dD0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZWRvd249IkZ1bmNCdG5Eb3duKHRoaXMpIiBvbm1vdXNldXA9IkZ1bmNCdG5PdXQodGhpcykiIGlkPSJRXzJfMV9CdG4iIG9uY2xpY2s9IkNoZWNrTUNBbnN3ZXIoMiwxLHRoaXMpIj4mbmJzcDsmbmJzcDs/Jm5ic3A7Jm5ic3A7PC9idXR0b24+Jm5ic3A7Jm5ic3A7aHlkcm9oeXBvYnJvbW91cyBhY2lkPC9saT4KPGxpIGlkPSJRXzJfMiI+PGJ1dHRvbiBjbGFzcz0iRnVuY0J1dHRvbiIgb25mb2N1cz0iRnVuY0J0bk92ZXIodGhpcykiIG9uYmx1cj0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZW92ZXI9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbm1vdXNlb3V0PSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlZG93bj0iRnVuY0J0bkRvd24odGhpcykiIG9ubW91c2V1cD0iRnVuY0J0bk91dCh0aGlzKSIgaWQ9IlFfMl8yX0J0biIgb25jbGljaz0iQ2hlY2tNQ0Fuc3dlcigyLDIsdGhpcykiPiZuYnNwOyZuYnNwOz8mbmJzcDsmbmJzcDs8L2J1dHRvbj4mbmJzcDsmbmJzcDtoeXBvYnJvbW91czwvbGk+CjxsaSBpZD0iUV8yXzMiPjxidXR0b24gY2xhc3M9IkZ1bmNCdXR0b24iIG9uZm9jdXM9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbmJsdXI9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2VvdmVyPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25tb3VzZW91dD0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZWRvd249IkZ1bmNCdG5Eb3duKHRoaXMpIiBvbm1vdXNldXA9IkZ1bmNCdG5PdXQodGhpcykiIGlkPSJRXzJfM19CdG4iIG9uY2xpY2s9IkNoZWNrTUNBbnN3ZXIoMiwzLHRoaXMpIj4mbmJzcDsmbmJzcDs/Jm5ic3A7Jm5ic3A7PC9idXR0b24+Jm5ic3A7Jm5ic3A7aHlwb2Jyb21pYyBhY2lkPC9saT4KPC9vbD48L2xpPgo8bGkgY2xhc3M9IlF1aXpRdWVzdGlvbiIgaWQ9IlFfMyIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48cCBjbGFzcz0iUXVlc3Rpb25UZXh0Ij48Zm9udCBzaXplPSI1Ij5XaGF0IGlzIHRoZSBuYW1lIGZvciB0aGUgZm9sbG93aW5nIGZvcm11bGE6IEhDbE8mI3gyMDg0Oz8gPC9mb250PjwvcD48b2wgY2xhc3M9Ik1DQW5zd2VycyI+CjxsaSBpZD0iUV8zXzAiPjxidXR0b24gY2xhc3M9IkZ1bmNCdXR0b24iIG9uZm9jdXM9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbmJsdXI9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2VvdmVyPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25tb3VzZW91dD0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZWRvd249IkZ1bmNCdG5Eb3duKHRoaXMpIiBvbm1vdXNldXA9IkZ1bmNCdG5PdXQodGhpcykiIGlkPSJRXzNfMF9CdG4iIG9uY2xpY2s9IkNoZWNrTUNBbnN3ZXIoMywwLHRoaXMpIj4mbmJzcDsmbmJzcDs/Jm5ic3A7Jm5ic3A7PC9idXR0b24+Jm5ic3A7Jm5ic3A7cGVyY2hsb3JpYyBhY2lkPC9saT4KPGxpIGlkPSJRXzNfMSI+PGJ1dHRvbiBjbGFzcz0iRnVuY0J1dHRvbiIgb25mb2N1cz0iRnVuY0J0bk92ZXIodGhpcykiIG9uYmx1cj0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZW92ZXI9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbm1vdXNlb3V0PSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlZG93bj0iRnVuY0J0bkRvd24odGhpcykiIG9ubW91c2V1cD0iRnVuY0J0bk91dCh0aGlzKSIgaWQ9IlFfM18xX0J0biIgb25jbGljaz0iQ2hlY2tNQ0Fuc3dlcigzLDEsdGhpcykiPiZuYnNwOyZuYnNwOz8mbmJzcDsmbmJzcDs8L2J1dHRvbj4mbmJzcDsmbmJzcDtoeWRyb3BlcmNobG9yaWMgYWNpZDwvbGk+CjxsaSBpZD0iUV8zXzIiPjxidXR0b24gY2xhc3M9IkZ1bmNCdXR0b24iIG9uZm9jdXM9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbmJsdXI9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2VvdmVyPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25tb3VzZW91dD0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZWRvd249IkZ1bmNCdG5Eb3duKHRoaXMpIiBvbm1vdXNldXA9IkZ1bmNCdG5PdXQodGhpcykiIGlkPSJRXzNfMl9CdG4iIG9uY2xpY2s9IkNoZWNrTUNBbnN3ZXIoMywyLHRoaXMpIj4mbmJzcDsmbmJzcDs/Jm5ic3A7Jm5ic3A7PC9idXR0b24+Jm5ic3A7Jm5ic3A7cGVyY2hsb3JpYzwvbGk+CjxsaSBpZD0iUV8zXzMiPjxidXR0b24gY2xhc3M9IkZ1bmNCdXR0b24iIG9uZm9jdXM9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbmJsdXI9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2VvdmVyPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25tb3VzZW91dD0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZWRvd249IkZ1bmNCdG5Eb3duKHRoaXMpIiBvbm1vdXNldXA9IkZ1bmNCdG5PdXQodGhpcykiIGlkPSJRXzNfM19CdG4iIG9uY2xpY2s9IkNoZWNrTUNBbnN3ZXIoMywzLHRoaXMpIj4mbmJzcDsmbmJzcDs/Jm5ic3A7Jm5ic3A7PC9idXR0b24+Jm5ic3A7Jm5ic3A7cGVyY2hsb3JvdXMgYWNpZDwvbGk+Cjwvb2w+PC9saT4KPGxpIGNsYXNzPSJRdWl6UXVlc3Rpb24iIGlkPSJRXzQiIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHAgY2xhc3M9IlF1ZXN0aW9uVGV4dCI+PGZvbnQgc2l6ZT0iNSI+V2hhdCBpcyB0aGUgbmFtZSBmb3IgdGhlIGZvbGxvd2luZyBmb3JtdWxhOiBIQ2xPJiN4MjA4Mjs/IDwvZm9udD48L3A+PG9sIGNsYXNzPSJNQ0Fuc3dlcnMiPgo8bGkgaWQ9IlFfNF8wIj48YnV0dG9uIGNsYXNzPSJGdW5jQnV0dG9uIiBvbmZvY3VzPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25ibHVyPSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlb3Zlcj0iRnVuY0J0bk92ZXIodGhpcykiIG9ubW91c2VvdXQ9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2Vkb3duPSJGdW5jQnRuRG93bih0aGlzKSIgb25tb3VzZXVwPSJGdW5jQnRuT3V0KHRoaXMpIiBpZD0iUV80XzBfQnRuIiBvbmNsaWNrPSJDaGVja01DQW5zd2VyKDQsMCx0aGlzKSI+Jm5ic3A7Jm5ic3A7PyZuYnNwOyZuYnNwOzwvYnV0dG9uPiZuYnNwOyZuYnNwO2NobG9yb3VzIGFjaWQ8L2xpPgo8bGkgaWQ9IlFfNF8xIj48YnV0dG9uIGNsYXNzPSJGdW5jQnV0dG9uIiBvbmZvY3VzPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25ibHVyPSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlb3Zlcj0iRnVuY0J0bk92ZXIodGhpcykiIG9ubW91c2VvdXQ9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2Vkb3duPSJGdW5jQnRuRG93bih0aGlzKSIgb25tb3VzZXVwPSJGdW5jQnRuT3V0KHRoaXMpIiBpZD0iUV80XzFfQnRuIiBvbmNsaWNrPSJDaGVja01DQW5zd2VyKDQsMSx0aGlzKSI+Jm5ic3A7Jm5ic3A7PyZuYnNwOyZuYnNwOzwvYnV0dG9uPiZuYnNwOyZuYnNwO2h5ZHJvY2hsb3JvdXMgYWNpZDwvbGk+CjxsaSBpZD0iUV80XzIiPjxidXR0b24gY2xhc3M9IkZ1bmNCdXR0b24iIG9uZm9jdXM9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbmJsdXI9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2VvdmVyPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25tb3VzZW91dD0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZWRvd249IkZ1bmNCdG5Eb3duKHRoaXMpIiBvbm1vdXNldXA9IkZ1bmNCdG5PdXQodGhpcykiIGlkPSJRXzRfMl9CdG4iIG9uY2xpY2s9IkNoZWNrTUNBbnN3ZXIoNCwyLHRoaXMpIj4mbmJzcDsmbmJzcDs/Jm5ic3A7Jm5ic3A7PC9idXR0b24+Jm5ic3A7Jm5ic3A7Y2hsb3JpYyBhY2lkPC9saT4KPGxpIGlkPSJRXzRfMyI+PGJ1dHRvbiBjbGFzcz0iRnVuY0J1dHRvbiIgb25mb2N1cz0iRnVuY0J0bk92ZXIodGhpcykiIG9uYmx1cj0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZW92ZXI9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbm1vdXNlb3V0PSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlZG93bj0iRnVuY0J0bkRvd24odGhpcykiIG9ubW91c2V1cD0iRnVuY0J0bk91dCh0aGlzKSIgaWQ9IlFfNF8zX0J0biIgb25jbGljaz0iQ2hlY2tNQ0Fuc3dlcig0LDMsdGhpcykiPiZuYnNwOyZuYnNwOz8mbmJzcDsmbmJzcDs8L2J1dHRvbj4mbmJzcDsmbmJzcDtjaGxvcm91czwvbGk+Cjwvb2w+PC9saT4KPGxpIGNsYXNzPSJRdWl6UXVlc3Rpb24iIGlkPSJRXzUiIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHAgY2xhc3M9IlF1ZXN0aW9uVGV4dCI+PGZvbnQgc2l6ZT0iNSI+V2hhdCBpcyB0aGUgbmFtZSBmb3IgdGhlIGZvbGxvd2luZyBmb3JtdWxhOiBIJiN4MjA4MztQTyYjeDIwODQ7PyA8L2ZvbnQ+PC9wPjxvbCBjbGFzcz0iTUNBbnN3ZXJzIj4KPGxpIGlkPSJRXzVfMCI+PGJ1dHRvbiBjbGFzcz0iRnVuY0J1dHRvbiIgb25mb2N1cz0iRnVuY0J0bk92ZXIodGhpcykiIG9uYmx1cj0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZW92ZXI9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbm1vdXNlb3V0PSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlZG93bj0iRnVuY0J0bkRvd24odGhpcykiIG9ubW91c2V1cD0iRnVuY0J0bk91dCh0aGlzKSIgaWQ9IlFfNV8wX0J0biIgb25jbGljaz0iQ2hlY2tNQ0Fuc3dlcig1LDAsdGhpcykiPiZuYnNwOyZuYnNwOz8mbmJzcDsmbmJzcDs8L2J1dHRvbj4mbmJzcDsmbmJzcDtwaG9zcGhvcmljIGFjaWQ8L2xpPgo8bGkgaWQ9IlFfNV8xIj48YnV0dG9uIGNsYXNzPSJGdW5jQnV0dG9uIiBvbmZvY3VzPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25ibHVyPSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlb3Zlcj0iRnVuY0J0bk92ZXIodGhpcykiIG9ubW91c2VvdXQ9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2Vkb3duPSJGdW5jQnRuRG93bih0aGlzKSIgb25tb3VzZXVwPSJGdW5jQnRuT3V0KHRoaXMpIiBpZD0iUV81XzFfQnRuIiBvbmNsaWNrPSJDaGVja01DQW5zd2VyKDUsMSx0aGlzKSI+Jm5ic3A7Jm5ic3A7PyZuYnNwOyZuYnNwOzwvYnV0dG9uPiZuYnNwOyZuYnNwO2h5ZHJvcGhvc3Bob3JpYyBhY2lkPC9saT4KPGxpIGlkPSJRXzVfMiI+PGJ1dHRvbiBjbGFzcz0iRnVuY0J1dHRvbiIgb25mb2N1cz0iRnVuY0J0bk92ZXIodGhpcykiIG9uYmx1cj0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZW92ZXI9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbm1vdXNlb3V0PSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlZG93bj0iRnVuY0J0bkRvd24odGhpcykiIG9ubW91c2V1cD0iRnVuY0J0bk91dCh0aGlzKSIgaWQ9IlFfNV8yX0J0biIgb25jbGljaz0iQ2hlY2tNQ0Fuc3dlcig1LDIsdGhpcykiPiZuYnNwOyZuYnNwOz8mbmJzcDsmbmJzcDs8L2J1dHRvbj4mbmJzcDsmbmJzcDtwaG9zcGhvcm91cyBhY2lkPC9saT4KPGxpIGlkPSJRXzVfMyI+PGJ1dHRvbiBjbGFzcz0iRnVuY0J1dHRvbiIgb25mb2N1cz0iRnVuY0J0bk92ZXIodGhpcykiIG9uYmx1cj0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZW92ZXI9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbm1vdXNlb3V0PSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlZG93bj0iRnVuY0J0bkRvd24odGhpcykiIG9ubW91c2V1cD0iRnVuY0J0bk91dCh0aGlzKSIgaWQ9IlFfNV8zX0J0biIgb25jbGljaz0iQ2hlY2tNQ0Fuc3dlcig1LDMsdGhpcykiPiZuYnNwOyZuYnNwOz8mbmJzcDsmbmJzcDs8L2J1dHRvbj4mbmJzcDsmbmJzcDtwaG9zcGhvcmljPC9saT4KPC9vbD48L2xpPgo8bGkgY2xhc3M9IlF1aXpRdWVzdGlvbiIgaWQ9IlFfNiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48cCBjbGFzcz0iUXVlc3Rpb25UZXh0Ij48Zm9udCBzaXplPSI1Ij5XaGF0IGlzIHRoZSBuYW1lIGZvciB0aGUgZm9sbG93aW5nIGZvcm11bGE6IEgmI3gyMDgzO1BPJiN4MjA4Mzs/IDwvZm9udD48L3A+PG9sIGNsYXNzPSJNQ0Fuc3dlcnMiPgo8bGkgaWQ9IlFfNl8wIj48YnV0dG9uIGNsYXNzPSJGdW5jQnV0dG9uIiBvbmZvY3VzPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25ibHVyPSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlb3Zlcj0iRnVuY0J0bk92ZXIodGhpcykiIG9ubW91c2VvdXQ9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2Vkb3duPSJGdW5jQnRuRG93bih0aGlzKSIgb25tb3VzZXVwPSJGdW5jQnRuT3V0KHRoaXMpIiBpZD0iUV82XzBfQnRuIiBvbmNsaWNrPSJDaGVja01DQW5zd2VyKDYsMCx0aGlzKSI+Jm5ic3A7Jm5ic3A7PyZuYnNwOyZuYnNwOzwvYnV0dG9uPiZuYnNwOyZuYnNwO3Bob3NwaG9yaWMgYWNpZDwvbGk+CjxsaSBpZD0iUV82XzEiPjxidXR0b24gY2xhc3M9IkZ1bmNCdXR0b24iIG9uZm9jdXM9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbmJsdXI9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2VvdmVyPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25tb3VzZW91dD0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZWRvd249IkZ1bmNCdG5Eb3duKHRoaXMpIiBvbm1vdXNldXA9IkZ1bmNCdG5PdXQodGhpcykiIGlkPSJRXzZfMV9CdG4iIG9uY2xpY2s9IkNoZWNrTUNBbnN3ZXIoNiwxLHRoaXMpIj4mbmJzcDsmbmJzcDs/Jm5ic3A7Jm5ic3A7PC9idXR0b24+Jm5ic3A7Jm5ic3A7aHlkcm9waG9zcGhvcmljIGFjaWQ8L2xpPgo8bGkgaWQ9IlFfNl8yIj48YnV0dG9uIGNsYXNzPSJGdW5jQnV0dG9uIiBvbmZvY3VzPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25ibHVyPSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlb3Zlcj0iRnVuY0J0bk92ZXIodGhpcykiIG9ubW91c2VvdXQ9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2Vkb3duPSJGdW5jQnRuRG93bih0aGlzKSIgb25tb3VzZXVwPSJGdW5jQnRuT3V0KHRoaXMpIiBpZD0iUV82XzJfQnRuIiBvbmNsaWNrPSJDaGVja01DQW5zd2VyKDYsMix0aGlzKSI+Jm5ic3A7Jm5ic3A7PyZuYnNwOyZuYnNwOzwvYnV0dG9uPiZuYnNwOyZuYnNwO3Bob3NwaG9yb3VzIGFjaWQ8L2xpPgo8bGkgaWQ9IlFfNl8zIj48YnV0dG9uIGNsYXNzPSJGdW5jQnV0dG9uIiBvbmZvY3VzPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25ibHVyPSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlb3Zlcj0iRnVuY0J0bk92ZXIodGhpcykiIG9ubW91c2VvdXQ9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2Vkb3duPSJGdW5jQnRuRG93bih0aGlzKSIgb25tb3VzZXVwPSJGdW5jQnRuT3V0KHRoaXMpIiBpZD0iUV82XzNfQnRuIiBvbmNsaWNrPSJDaGVja01DQW5zd2VyKDYsMyx0aGlzKSI+Jm5ic3A7Jm5ic3A7PyZuYnNwOyZuYnNwOzwvYnV0dG9uPiZuYnNwOyZuYnNwO3Bob3NwaG9yaWM8L2xpPgo8L29sPjwvbGk+CjxsaSBjbGFzcz0iUXVpelF1ZXN0aW9uIiBpZD0iUV83IiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxwIGNsYXNzPSJRdWVzdGlvblRleHQiPjxmb250IHNpemU9IjUiPldoYXQgaXMgdGhlIG5hbWUgZm9yIHRoZSBmb2xsb3dpbmcgZm9ybXVsYTogSCYjeDIwODI7U08mI3gyMDgzOz8gPC9mb250PjwvcD48b2wgY2xhc3M9Ik1DQW5zd2VycyI+CjxsaSBpZD0iUV83XzAiPjxidXR0b24gY2xhc3M9IkZ1bmNCdXR0b24iIG9uZm9jdXM9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbmJsdXI9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2VvdmVyPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25tb3VzZW91dD0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZWRvd249IkZ1bmNCdG5Eb3duKHRoaXMpIiBvbm1vdXNldXA9IkZ1bmNCdG5PdXQodGhpcykiIGlkPSJRXzdfMF9CdG4iIG9uY2xpY2s9IkNoZWNrTUNBbnN3ZXIoNywwLHRoaXMpIj4mbmJzcDsmbmJzcDs/Jm5ic3A7Jm5ic3A7PC9idXR0b24+Jm5ic3A7Jm5ic3A7c3VsZnVyb3VzIGFjaWQ8L2xpPgo8bGkgaWQ9IlFfN18xIj48YnV0dG9uIGNsYXNzPSJGdW5jQnV0dG9uIiBvbmZvY3VzPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25ibHVyPSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlb3Zlcj0iRnVuY0J0bk92ZXIodGhpcykiIG9ubW91c2VvdXQ9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2Vkb3duPSJGdW5jQnRuRG93bih0aGlzKSIgb25tb3VzZXVwPSJGdW5jQnRuT3V0KHRoaXMpIiBpZD0iUV83XzFfQnRuIiBvbmNsaWNrPSJDaGVja01DQW5zd2VyKDcsMSx0aGlzKSI+Jm5ic3A7Jm5ic3A7PyZuYnNwOyZuYnNwOzwvYnV0dG9uPiZuYnNwOyZuYnNwO2h5ZHJvc3VsZnVyb3VzIGFjaWQ8L2xpPgo8bGkgaWQ9IlFfN18yIj48YnV0dG9uIGNsYXNzPSJGdW5jQnV0dG9uIiBvbmZvY3VzPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25ibHVyPSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlb3Zlcj0iRnVuY0J0bk92ZXIodGhpcykiIG9ubW91c2VvdXQ9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2Vkb3duPSJGdW5jQnRuRG93bih0aGlzKSIgb25tb3VzZXVwPSJGdW5jQnRuT3V0KHRoaXMpIiBpZD0iUV83XzJfQnRuIiBvbmNsaWNrPSJDaGVja01DQW5zd2VyKDcsMix0aGlzKSI+Jm5ic3A7Jm5ic3A7PyZuYnNwOyZuYnNwOzwvYnV0dG9uPiZuYnNwOyZuYnNwO3N1bGZ1cmljIGFjaWQ8L2xpPgo8bGkgaWQ9IlFfN18zIj48YnV0dG9uIGNsYXNzPSJGdW5jQnV0dG9uIiBvbmZvY3VzPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25ibHVyPSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlb3Zlcj0iRnVuY0J0bk92ZXIodGhpcykiIG9ubW91c2VvdXQ9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2Vkb3duPSJGdW5jQnRuRG93bih0aGlzKSIgb25tb3VzZXVwPSJGdW5jQnRuT3V0KHRoaXMpIiBpZD0iUV83XzNfQnRuIiBvbmNsaWNrPSJDaGVja01DQW5zd2VyKDcsMyx0aGlzKSI+Jm5ic3A7Jm5ic3A7PyZuYnNwOyZuYnNwOzwvYnV0dG9uPiZuYnNwOyZuYnNwO3N1bGZ1cm91czwvbGk+Cjwvb2w+PC9saT4KPGxpIGNsYXNzPSJRdWl6UXVlc3Rpb24iIGlkPSJRXzgiIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHAgY2xhc3M9IlF1ZXN0aW9uVGV4dCI+PGZvbnQgc2l6ZT0iNSI+V2hhdCBpcyB0aGUgbmFtZSBmb3IgdGhlIGZvbGxvd2luZyBmb3JtdWxhOiBIJiN4MjA4MjtDTyYjeDIwODM7PyA8L2ZvbnQ+PC9wPjxvbCBjbGFzcz0iTUNBbnN3ZXJzIj4KPGxpIGlkPSJRXzhfMCI+PGJ1dHRvbiBjbGFzcz0iRnVuY0J1dHRvbiIgb25mb2N1cz0iRnVuY0J0bk92ZXIodGhpcykiIG9uYmx1cj0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZW92ZXI9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbm1vdXNlb3V0PSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlZG93bj0iRnVuY0J0bkRvd24odGhpcykiIG9ubW91c2V1cD0iRnVuY0J0bk91dCh0aGlzKSIgaWQ9IlFfOF8wX0J0biIgb25jbGljaz0iQ2hlY2tNQ0Fuc3dlcig4LDAsdGhpcykiPiZuYnNwOyZuYnNwOz8mbmJzcDsmbmJzcDs8L2J1dHRvbj4mbmJzcDsmbmJzcDtjYXJib25pYyBhY2lkPC9saT4KPGxpIGlkPSJRXzhfMSI+PGJ1dHRvbiBjbGFzcz0iRnVuY0J1dHRvbiIgb25mb2N1cz0iRnVuY0J0bk92ZXIodGhpcykiIG9uYmx1cj0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZW92ZXI9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbm1vdXNlb3V0PSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlZG93bj0iRnVuY0J0bkRvd24odGhpcykiIG9ubW91c2V1cD0iRnVuY0J0bk91dCh0aGlzKSIgaWQ9IlFfOF8xX0J0biIgb25jbGljaz0iQ2hlY2tNQ0Fuc3dlcig4LDEsdGhpcykiPiZuYnNwOyZuYnNwOz8mbmJzcDsmbmJzcDs8L2J1dHRvbj4mbmJzcDsmbmJzcDtoeWRyb2NhcmJvbmljIGFjaWQ8L2xpPgo8bGkgaWQ9IlFfOF8yIj48YnV0dG9uIGNsYXNzPSJGdW5jQnV0dG9uIiBvbmZvY3VzPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25ibHVyPSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlb3Zlcj0iRnVuY0J0bk92ZXIodGhpcykiIG9ubW91c2VvdXQ9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2Vkb3duPSJGdW5jQnRuRG93bih0aGlzKSIgb25tb3VzZXVwPSJGdW5jQnRuT3V0KHRoaXMpIiBpZD0iUV84XzJfQnRuIiBvbmNsaWNrPSJDaGVja01DQW5zd2VyKDgsMix0aGlzKSI+Jm5ic3A7Jm5ic3A7PyZuYnNwOyZuYnNwOzwvYnV0dG9uPiZuYnNwOyZuYnNwO2NhYm9uYXRlIGFjaWQ8L2xpPgo8bGkgaWQ9IlFfOF8zIj48YnV0dG9uIGNsYXNzPSJGdW5jQnV0dG9uIiBvbmZvY3VzPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25ibHVyPSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlb3Zlcj0iRnVuY0J0bk92ZXIodGhpcykiIG9ubW91c2VvdXQ9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2Vkb3duPSJGdW5jQnRuRG93bih0aGlzKSIgb25tb3VzZXVwPSJGdW5jQnRuT3V0KHRoaXMpIiBpZD0iUV84XzNfQnRuIiBvbmNsaWNrPSJDaGVja01DQW5zd2VyKDgsMyx0aGlzKSI+Jm5ic3A7Jm5ic3A7PyZuYnNwOyZuYnNwOzwvYnV0dG9uPiZuYnNwOyZuYnNwO2NhcmJvbmljPC9saT4KPC9vbD48L2xpPgo8bGkgY2xhc3M9IlF1aXpRdWVzdGlvbiIgaWQ9IlFfOSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48cCBjbGFzcz0iUXVlc3Rpb25UZXh0Ij48Zm9udCBzaXplPSI1Ij5XaGF0IGlzIHRoZSBuYW1lIGZvciB0aGUgZm9sbG93aW5nIGZvcm11bGE6IEhJKGFxKT8gPC9mb250PjwvcD48b2wgY2xhc3M9Ik1DQW5zd2VycyI+CjxsaSBpZD0iUV85XzAiPjxidXR0b24gY2xhc3M9IkZ1bmNCdXR0b24iIG9uZm9jdXM9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbmJsdXI9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2VvdmVyPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25tb3VzZW91dD0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZWRvd249IkZ1bmNCdG5Eb3duKHRoaXMpIiBvbm1vdXNldXA9IkZ1bmNCdG5PdXQodGhpcykiIGlkPSJRXzlfMF9CdG4iIG9uY2xpY2s9IkNoZWNrTUNBbnN3ZXIoOSwwLHRoaXMpIj4mbmJzcDsmbmJzcDs/Jm5ic3A7Jm5ic3A7PC9idXR0b24+Jm5ic3A7Jm5ic3A7aW9kaWMgYWNpZDwvbGk+CjxsaSBpZD0iUV85XzEiPjxidXR0b24gY2xhc3M9IkZ1bmNCdXR0b24iIG9uZm9jdXM9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbmJsdXI9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2VvdmVyPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25tb3VzZW91dD0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZWRvd249IkZ1bmNCdG5Eb3duKHRoaXMpIiBvbm1vdXNldXA9IkZ1bmNCdG5PdXQodGhpcykiIGlkPSJRXzlfMV9CdG4iIG9uY2xpY2s9IkNoZWNrTUNBbnN3ZXIoOSwxLHRoaXMpIj4mbmJzcDsmbmJzcDs/Jm5ic3A7Jm5ic3A7PC9idXR0b24+Jm5ic3A7Jm5ic3A7aHlkcm9pb2RpYyBhY2lkPC9saT4KPGxpIGlkPSJRXzlfMiI+PGJ1dHRvbiBjbGFzcz0iRnVuY0J1dHRvbiIgb25mb2N1cz0iRnVuY0J0bk92ZXIodGhpcykiIG9uYmx1cj0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZW92ZXI9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbm1vdXNlb3V0PSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlZG93bj0iRnVuY0J0bkRvd24odGhpcykiIG9ubW91c2V1cD0iRnVuY0J0bk91dCh0aGlzKSIgaWQ9IlFfOV8yX0J0biIgb25jbGljaz0iQ2hlY2tNQ0Fuc3dlcig5LDIsdGhpcykiPiZuYnNwOyZuYnNwOz8mbmJzcDsmbmJzcDs8L2J1dHRvbj4mbmJzcDsmbmJzcDtpb2RpZGUgYWNpZDwvbGk+CjxsaSBpZD0iUV85XzMiPjxidXR0b24gY2xhc3M9IkZ1bmNCdXR0b24iIG9uZm9jdXM9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbmJsdXI9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2VvdmVyPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25tb3VzZW91dD0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZWRvd249IkZ1bmNCdG5Eb3duKHRoaXMpIiBvbm1vdXNldXA9IkZ1bmNCdG5PdXQodGhpcykiIGlkPSJRXzlfM19CdG4iIG9uY2xpY2s9IkNoZWNrTUNBbnN3ZXIoOSwzLHRoaXMpIj4mbmJzcDsmbmJzcDs/Jm5ic3A7Jm5ic3A7PC9idXR0b24+Jm5ic3A7Jm5ic3A7aW9kaWM8L2xpPgo8L29sPjwvbGk+CjxsaSBjbGFzcz0iUXVpelF1ZXN0aW9uIiBpZD0iUV8xMCIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48cCBjbGFzcz0iUXVlc3Rpb25UZXh0Ij48Zm9udCBzaXplPSI1Ij5XaGF0IGlzIHRoZSBuYW1lIGZvciB0aGUgZm9sbG93aW5nIGZvcm11bGE6IEhCcihhcSk/IDwvZm9udD48L3A+PG9sIGNsYXNzPSJNQ0Fuc3dlcnMiPgo8bGkgaWQ9IlFfMTBfMCI+PGJ1dHRvbiBjbGFzcz0iRnVuY0J1dHRvbiIgb25mb2N1cz0iRnVuY0J0bk92ZXIodGhpcykiIG9uYmx1cj0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZW92ZXI9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbm1vdXNlb3V0PSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlZG93bj0iRnVuY0J0bkRvd24odGhpcykiIG9ubW91c2V1cD0iRnVuY0J0bk91dCh0aGlzKSIgaWQ9IlFfMTBfMF9CdG4iIG9uY2xpY2s9IkNoZWNrTUNBbnN3ZXIoMTAsMCx0aGlzKSI+Jm5ic3A7Jm5ic3A7PyZuYnNwOyZuYnNwOzwvYnV0dG9uPiZuYnNwOyZuYnNwO2Jyb21pYyBhY2lkPC9saT4KPGxpIGlkPSJRXzEwXzEiPjxidXR0b24gY2xhc3M9IkZ1bmNCdXR0b24iIG9uZm9jdXM9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbmJsdXI9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2VvdmVyPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25tb3VzZW91dD0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZWRvd249IkZ1bmNCdG5Eb3duKHRoaXMpIiBvbm1vdXNldXA9IkZ1bmNCdG5PdXQodGhpcykiIGlkPSJRXzEwXzFfQnRuIiBvbmNsaWNrPSJDaGVja01DQW5zd2VyKDEwLDEsdGhpcykiPiZuYnNwOyZuYnNwOz8mbmJzcDsmbmJzcDs8L2J1dHRvbj4mbmJzcDsmbmJzcDtoeWRyb2Jyb21pYyBhY2lkPC9saT4KPGxpIGlkPSJRXzEwXzIiPjxidXR0b24gY2xhc3M9IkZ1bmNCdXR0b24iIG9uZm9jdXM9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbmJsdXI9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2VvdmVyPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25tb3VzZW91dD0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZWRvd249IkZ1bmNCdG5Eb3duKHRoaXMpIiBvbm1vdXNldXA9IkZ1bmNCdG5PdXQodGhpcykiIGlkPSJRXzEwXzJfQnRuIiBvbmNsaWNrPSJDaGVja01DQW5zd2VyKDEwLDIsdGhpcykiPiZuYnNwOyZuYnNwOz8mbmJzcDsmbmJzcDs8L2J1dHRvbj4mbmJzcDsmbmJzcDticm9taWRlIGFjaWQ8L2xpPgo8bGkgaWQ9IlFfMTBfMyI+PGJ1dHRvbiBjbGFzcz0iRnVuY0J1dHRvbiIgb25mb2N1cz0iRnVuY0J0bk92ZXIodGhpcykiIG9uYmx1cj0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZW92ZXI9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbm1vdXNlb3V0PSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlZG93bj0iRnVuY0J0bkRvd24odGhpcykiIG9ubW91c2V1cD0iRnVuY0J0bk91dCh0aGlzKSIgaWQ9IlFfMTBfM19CdG4iIG9uY2xpY2s9IkNoZWNrTUNBbnN3ZXIoMTAsMyx0aGlzKSI+Jm5ic3A7Jm5ic3A7PyZuYnNwOyZuYnNwOzwvYnV0dG9uPiZuYnNwOyZuYnNwO2Jyb21pYzwvbGk+Cjwvb2w+PC9saT4KPGxpIGNsYXNzPSJRdWl6UXVlc3Rpb24iIGlkPSJRXzExIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxwIGNsYXNzPSJRdWVzdGlvblRleHQiPjxmb250IHNpemU9IjUiPldoYXQgaXMgdGhlIG5hbWUgZm9yIHRoZSBmb2xsb3dpbmcgZm9ybXVsYTogSEYoYXEpPyA8L2ZvbnQ+PC9wPjxvbCBjbGFzcz0iTUNBbnN3ZXJzIj4KPGxpIGlkPSJRXzExXzAiPjxidXR0b24gY2xhc3M9IkZ1bmNCdXR0b24iIG9uZm9jdXM9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbmJsdXI9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2VvdmVyPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25tb3VzZW91dD0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZWRvd249IkZ1bmNCdG5Eb3duKHRoaXMpIiBvbm1vdXNldXA9IkZ1bmNCdG5PdXQodGhpcykiIGlkPSJRXzExXzBfQnRuIiBvbmNsaWNrPSJDaGVja01DQW5zd2VyKDExLDAsdGhpcykiPiZuYnNwOyZuYnNwOz8mbmJzcDsmbmJzcDs8L2J1dHRvbj4mbmJzcDsmbmJzcDtmbHVvcmljIGFjaWQ8L2xpPgo8bGkgaWQ9IlFfMTFfMSI+PGJ1dHRvbiBjbGFzcz0iRnVuY0J1dHRvbiIgb25mb2N1cz0iRnVuY0J0bk92ZXIodGhpcykiIG9uYmx1cj0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZW92ZXI9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbm1vdXNlb3V0PSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlZG93bj0iRnVuY0J0bkRvd24odGhpcykiIG9ubW91c2V1cD0iRnVuY0J0bk91dCh0aGlzKSIgaWQ9IlFfMTFfMV9CdG4iIG9uY2xpY2s9IkNoZWNrTUNBbnN3ZXIoMTEsMSx0aGlzKSI+Jm5ic3A7Jm5ic3A7PyZuYnNwOyZuYnNwOzwvYnV0dG9uPiZuYnNwOyZuYnNwO2h5ZHJvZmx1b3JpYyBhY2lkPC9saT4KPGxpIGlkPSJRXzExXzIiPjxidXR0b24gY2xhc3M9IkZ1bmNCdXR0b24iIG9uZm9jdXM9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbmJsdXI9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2VvdmVyPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25tb3VzZW91dD0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZWRvd249IkZ1bmNCdG5Eb3duKHRoaXMpIiBvbm1vdXNldXA9IkZ1bmNCdG5PdXQodGhpcykiIGlkPSJRXzExXzJfQnRuIiBvbmNsaWNrPSJDaGVja01DQW5zd2VyKDExLDIsdGhpcykiPiZuYnNwOyZuYnNwOz8mbmJzcDsmbmJzcDs8L2J1dHRvbj4mbmJzcDsmbmJzcDtmbHVvcmlkZSBhY2lkPC9saT4KPGxpIGlkPSJRXzExXzMiPjxidXR0b24gY2xhc3M9IkZ1bmNCdXR0b24iIG9uZm9jdXM9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbmJsdXI9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2VvdmVyPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25tb3VzZW91dD0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZWRvd249IkZ1bmNCdG5Eb3duKHRoaXMpIiBvbm1vdXNldXA9IkZ1bmNCdG5PdXQodGhpcykiIGlkPSJRXzExXzNfQnRuIiBvbmNsaWNrPSJDaGVja01DQW5zd2VyKDExLDMsdGhpcykiPiZuYnNwOyZuYnNwOz8mbmJzcDsmbmJzcDs8L2J1dHRvbj4mbmJzcDsmbmJzcDtmbHVvcmljPC9saT4KPC9vbD48L2xpPgo8bGkgY2xhc3M9IlF1aXpRdWVzdGlvbiIgaWQ9IlFfMTIiIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHAgY2xhc3M9IlF1ZXN0aW9uVGV4dCI+PGZvbnQgc2l6ZT0iNSI+V2hhdCBpcyB0aGUgbmFtZSBmb3IgdGhlIGZvbGxvd2luZyBmb3JtdWxhOiBIRj8gPC9mb250PjwvcD48b2wgY2xhc3M9Ik1DQW5zd2VycyI+CjxsaSBpZD0iUV8xMl8wIj48YnV0dG9uIGNsYXNzPSJGdW5jQnV0dG9uIiBvbmZvY3VzPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25ibHVyPSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlb3Zlcj0iRnVuY0J0bk92ZXIodGhpcykiIG9ubW91c2VvdXQ9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2Vkb3duPSJGdW5jQnRuRG93bih0aGlzKSIgb25tb3VzZXVwPSJGdW5jQnRuT3V0KHRoaXMpIiBpZD0iUV8xMl8wX0J0biIgb25jbGljaz0iQ2hlY2tNQ0Fuc3dlcigxMiwwLHRoaXMpIj4mbmJzcDsmbmJzcDs/Jm5ic3A7Jm5ic3A7PC9idXR0b24+Jm5ic3A7Jm5ic3A7Zmx1b3JpYyBhY2lkPC9saT4KPGxpIGlkPSJRXzEyXzEiPjxidXR0b24gY2xhc3M9IkZ1bmNCdXR0b24iIG9uZm9jdXM9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbmJsdXI9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2VvdmVyPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25tb3VzZW91dD0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZWRvd249IkZ1bmNCdG5Eb3duKHRoaXMpIiBvbm1vdXNldXA9IkZ1bmNCdG5PdXQodGhpcykiIGlkPSJRXzEyXzFfQnRuIiBvbmNsaWNrPSJDaGVja01DQW5zd2VyKDEyLDEsdGhpcykiPiZuYnNwOyZuYnNwOz8mbmJzcDsmbmJzcDs8L2J1dHRvbj4mbmJzcDsmbmJzcDtoeWRyb2ZsdW9yaWMgYWNpZDwvbGk+CjxsaSBpZD0iUV8xMl8yIj48YnV0dG9uIGNsYXNzPSJGdW5jQnV0dG9uIiBvbmZvY3VzPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25ibHVyPSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlb3Zlcj0iRnVuY0J0bk92ZXIodGhpcykiIG9ubW91c2VvdXQ9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2Vkb3duPSJGdW5jQnRuRG93bih0aGlzKSIgb25tb3VzZXVwPSJGdW5jQnRuT3V0KHRoaXMpIiBpZD0iUV8xMl8yX0J0biIgb25jbGljaz0iQ2hlY2tNQ0Fuc3dlcigxMiwyLHRoaXMpIj4mbmJzcDsmbmJzcDs/Jm5ic3A7Jm5ic3A7PC9idXR0b24+Jm5ic3A7Jm5ic3A7Zmx1b3JpZGUgYWNpZDwvbGk+CjxsaSBpZD0iUV8xMl8zIj48YnV0dG9uIGNsYXNzPSJGdW5jQnV0dG9uIiBvbmZvY3VzPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25ibHVyPSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlb3Zlcj0iRnVuY0J0bk92ZXIodGhpcykiIG9ubW91c2VvdXQ9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2Vkb3duPSJGdW5jQnRuRG93bih0aGlzKSIgb25tb3VzZXVwPSJGdW5jQnRuT3V0KHRoaXMpIiBpZD0iUV8xMl8zX0J0biIgb25jbGljaz0iQ2hlY2tNQ0Fuc3dlcigxMiwzLHRoaXMpIj4mbmJzcDsmbmJzcDs/Jm5ic3A7Jm5ic3A7PC9idXR0b24+Jm5ic3A7Jm5ic3A7aHlkcm9nZW4gbW9ub2ZsdW9yaWRlPC9saT4KPC9vbD48L2xpPgo8bGkgY2xhc3M9IlF1aXpRdWVzdGlvbiIgaWQ9IlFfMTMiIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHAgY2xhc3M9IlF1ZXN0aW9uVGV4dCI+PGZvbnQgc2l6ZT0iNSI+V2hhdCBpcyB0aGUgbmFtZSBmb3IgdGhlIGZvbGxvd2luZyBmb3JtdWxhOiBIQnI/IDwvZm9udD48L3A+PG9sIGNsYXNzPSJNQ0Fuc3dlcnMiPgo8bGkgaWQ9IlFfMTNfMCI+PGJ1dHRvbiBjbGFzcz0iRnVuY0J1dHRvbiIgb25mb2N1cz0iRnVuY0J0bk92ZXIodGhpcykiIG9uYmx1cj0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZW92ZXI9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbm1vdXNlb3V0PSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlZG93bj0iRnVuY0J0bkRvd24odGhpcykiIG9ubW91c2V1cD0iRnVuY0J0bk91dCh0aGlzKSIgaWQ9IlFfMTNfMF9CdG4iIG9uY2xpY2s9IkNoZWNrTUNBbnN3ZXIoMTMsMCx0aGlzKSI+Jm5ic3A7Jm5ic3A7PyZuYnNwOyZuYnNwOzwvYnV0dG9uPiZuYnNwOyZuYnNwO2Jyb21pYyBhY2lkPC9saT4KPGxpIGlkPSJRXzEzXzEiPjxidXR0b24gY2xhc3M9IkZ1bmNCdXR0b24iIG9uZm9jdXM9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbmJsdXI9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2VvdmVyPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25tb3VzZW91dD0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZWRvd249IkZ1bmNCdG5Eb3duKHRoaXMpIiBvbm1vdXNldXA9IkZ1bmNCdG5PdXQodGhpcykiIGlkPSJRXzEzXzFfQnRuIiBvbmNsaWNrPSJDaGVja01DQW5zd2VyKDEzLDEsdGhpcykiPiZuYnNwOyZuYnNwOz8mbmJzcDsmbmJzcDs8L2J1dHRvbj4mbmJzcDsmbmJzcDtoeWRyb2Jyb21pYyBhY2lkPC9saT4KPGxpIGlkPSJRXzEzXzIiPjxidXR0b24gY2xhc3M9IkZ1bmNCdXR0b24iIG9uZm9jdXM9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbmJsdXI9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2VvdmVyPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25tb3VzZW91dD0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZWRvd249IkZ1bmNCdG5Eb3duKHRoaXMpIiBvbm1vdXNldXA9IkZ1bmNCdG5PdXQodGhpcykiIGlkPSJRXzEzXzJfQnRuIiBvbmNsaWNrPSJDaGVja01DQW5zd2VyKDEzLDIsdGhpcykiPiZuYnNwOyZuYnNwOz8mbmJzcDsmbmJzcDs8L2J1dHRvbj4mbmJzcDsmbmJzcDticm9taWRlIGFjaWQ8L2xpPgo8bGkgaWQ9IlFfMTNfMyI+PGJ1dHRvbiBjbGFzcz0iRnVuY0J1dHRvbiIgb25mb2N1cz0iRnVuY0J0bk92ZXIodGhpcykiIG9uYmx1cj0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZW92ZXI9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbm1vdXNlb3V0PSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlZG93bj0iRnVuY0J0bkRvd24odGhpcykiIG9ubW91c2V1cD0iRnVuY0J0bk91dCh0aGlzKSIgaWQ9IlFfMTNfM19CdG4iIG9uY2xpY2s9IkNoZWNrTUNBbnN3ZXIoMTMsMyx0aGlzKSI+Jm5ic3A7Jm5ic3A7PyZuYnNwOyZuYnNwOzwvYnV0dG9uPiZuYnNwOyZuYnNwO2h5ZHJvZ2VuIG1vbm9icm9taWRlPC9saT4KPC9vbD48L2xpPgo8bGkgY2xhc3M9IlF1aXpRdWVzdGlvbiIgaWQ9IlFfMTQiIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHAgY2xhc3M9IlF1ZXN0aW9uVGV4dCI+PGZvbnQgc2l6ZT0iNSI+V2hhdCBpcyB0aGUgbmFtZSBmb3IgdGhlIGZvbGxvd2luZyBmb3JtdWxhOiBIST8gPC9mb250PjwvcD48b2wgY2xhc3M9Ik1DQW5zd2VycyI+CjxsaSBpZD0iUV8xNF8wIj48YnV0dG9uIGNsYXNzPSJGdW5jQnV0dG9uIiBvbmZvY3VzPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25ibHVyPSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlb3Zlcj0iRnVuY0J0bk92ZXIodGhpcykiIG9ubW91c2VvdXQ9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2Vkb3duPSJGdW5jQnRuRG93bih0aGlzKSIgb25tb3VzZXVwPSJGdW5jQnRuT3V0KHRoaXMpIiBpZD0iUV8xNF8wX0J0biIgb25jbGljaz0iQ2hlY2tNQ0Fuc3dlcigxNCwwLHRoaXMpIj4mbmJzcDsmbmJzcDs/Jm5ic3A7Jm5ic3A7PC9idXR0b24+Jm5ic3A7Jm5ic3A7aW9kaWMgYWNpZDwvbGk+CjxsaSBpZD0iUV8xNF8xIj48YnV0dG9uIGNsYXNzPSJGdW5jQnV0dG9uIiBvbmZvY3VzPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25ibHVyPSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlb3Zlcj0iRnVuY0J0bk92ZXIodGhpcykiIG9ubW91c2VvdXQ9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2Vkb3duPSJGdW5jQnRuRG93bih0aGlzKSIgb25tb3VzZXVwPSJGdW5jQnRuT3V0KHRoaXMpIiBpZD0iUV8xNF8xX0J0biIgb25jbGljaz0iQ2hlY2tNQ0Fuc3dlcigxNCwxLHRoaXMpIj4mbmJzcDsmbmJzcDs/Jm5ic3A7Jm5ic3A7PC9idXR0b24+Jm5ic3A7Jm5ic3A7aHlkcm9pb2RpYyBhY2lkPC9saT4KPGxpIGlkPSJRXzE0XzIiPjxidXR0b24gY2xhc3M9IkZ1bmNCdXR0b24iIG9uZm9jdXM9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbmJsdXI9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2VvdmVyPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25tb3VzZW91dD0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZWRvd249IkZ1bmNCdG5Eb3duKHRoaXMpIiBvbm1vdXNldXA9IkZ1bmNCdG5PdXQodGhpcykiIGlkPSJRXzE0XzJfQnRuIiBvbmNsaWNrPSJDaGVja01DQW5zd2VyKDE0LDIsdGhpcykiPiZuYnNwOyZuYnNwOz8mbmJzcDsmbmJzcDs8L2J1dHRvbj4mbmJzcDsmbmJzcDtpb2RpZGUgYWNpZDwvbGk+CjxsaSBpZD0iUV8xNF8zIj48YnV0dG9uIGNsYXNzPSJGdW5jQnV0dG9uIiBvbmZvY3VzPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25ibHVyPSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlb3Zlcj0iRnVuY0J0bk92ZXIodGhpcykiIG9ubW91c2VvdXQ9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2Vkb3duPSJGdW5jQnRuRG93bih0aGlzKSIgb25tb3VzZXVwPSJGdW5jQnRuT3V0KHRoaXMpIiBpZD0iUV8xNF8zX0J0biIgb25jbGljaz0iQ2hlY2tNQ0Fuc3dlcigxNCwzLHRoaXMpIj4mbmJzcDsmbmJzcDs/Jm5ic3A7Jm5ic3A7PC9idXR0b24+Jm5ic3A7Jm5ic3A7aHlkcm9nZW4gbW9ub2lvZGlkZTwvbGk+Cjwvb2w+PC9saT4KPGxpIGNsYXNzPSJRdWl6UXVlc3Rpb24iIGlkPSJRXzE1IiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxwIGNsYXNzPSJRdWVzdGlvblRleHQiPjxmb250IHNpemU9IjUiPldoYXQgaXMgdGhlIG5hbWUgZm9yIHRoZSBmb2xsb3dpbmcgZm9ybXVsYTogSENsTyYjeDIwODM7PyA8L2ZvbnQ+PC9wPjxvbCBjbGFzcz0iTUNBbnN3ZXJzIj4KPGxpIGlkPSJRXzE1XzAiPjxidXR0b24gY2xhc3M9IkZ1bmNCdXR0b24iIG9uZm9jdXM9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbmJsdXI9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2VvdmVyPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25tb3VzZW91dD0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZWRvd249IkZ1bmNCdG5Eb3duKHRoaXMpIiBvbm1vdXNldXA9IkZ1bmNCdG5PdXQodGhpcykiIGlkPSJRXzE1XzBfQnRuIiBvbmNsaWNrPSJDaGVja01DQW5zd2VyKDE1LDAsdGhpcykiPiZuYnNwOyZuYnNwOz8mbmJzcDsmbmJzcDs8L2J1dHRvbj4mbmJzcDsmbmJzcDtjaGxvcmljIGFjaWQ8L2xpPgo8bGkgaWQ9IlFfMTVfMSI+PGJ1dHRvbiBjbGFzcz0iRnVuY0J1dHRvbiIgb25mb2N1cz0iRnVuY0J0bk92ZXIodGhpcykiIG9uYmx1cj0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZW92ZXI9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbm1vdXNlb3V0PSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlZG93bj0iRnVuY0J0bkRvd24odGhpcykiIG9ubW91c2V1cD0iRnVuY0J0bk91dCh0aGlzKSIgaWQ9IlFfMTVfMV9CdG4iIG9uY2xpY2s9IkNoZWNrTUNBbnN3ZXIoMTUsMSx0aGlzKSI+Jm5ic3A7Jm5ic3A7PyZuYnNwOyZuYnNwOzwvYnV0dG9uPiZuYnNwOyZuYnNwO2h5ZHJvY2hsb3JpYyBhY2lkPC9saT4KPGxpIGlkPSJRXzE1XzIiPjxidXR0b24gY2xhc3M9IkZ1bmNCdXR0b24iIG9uZm9jdXM9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbmJsdXI9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2VvdmVyPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25tb3VzZW91dD0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZWRvd249IkZ1bmNCdG5Eb3duKHRoaXMpIiBvbm1vdXNldXA9IkZ1bmNCdG5PdXQodGhpcykiIGlkPSJRXzE1XzJfQnRuIiBvbmNsaWNrPSJDaGVja01DQW5zd2VyKDE1LDIsdGhpcykiPiZuYnNwOyZuYnNwOz8mbmJzcDsmbmJzcDs8L2J1dHRvbj4mbmJzcDsmbmJzcDtjaGxvcmljPC9saT4KPGxpIGlkPSJRXzE1XzMiPjxidXR0b24gY2xhc3M9IkZ1bmNCdXR0b24iIG9uZm9jdXM9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbmJsdXI9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2VvdmVyPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25tb3VzZW91dD0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZWRvd249IkZ1bmNCdG5Eb3duKHRoaXMpIiBvbm1vdXNldXA9IkZ1bmNCdG5PdXQodGhpcykiIGlkPSJRXzE1XzNfQnRuIiBvbmNsaWNrPSJDaGVja01DQW5zd2VyKDE1LDMsdGhpcykiPiZuYnNwOyZuYnNwOz8mbmJzcDsmbmJzcDs8L2J1dHRvbj4mbmJzcDsmbmJzcDtjaGxvcm91cyBhY2lkPC9saT4KPC9vbD48L2xpPgo8bGkgY2xhc3M9IlF1aXpRdWVzdGlvbiIgaWQ9IlFfMTYiIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHAgY2xhc3M9IlF1ZXN0aW9uVGV4dCI+PGZvbnQgc2l6ZT0iNSI+V2hhdCBpcyB0aGUgbmFtZSBmb3IgdGhlIGZvbGxvd2luZyBmb3JtdWxhOiBIQyYjeDIwODI7SCYjeDIwODM7TyYjeDIwODI7PyA8L2ZvbnQ+PC9wPjxvbCBjbGFzcz0iTUNBbnN3ZXJzIj4KPGxpIGlkPSJRXzE2XzAiPjxidXR0b24gY2xhc3M9IkZ1bmNCdXR0b24iIG9uZm9jdXM9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbmJsdXI9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2VvdmVyPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25tb3VzZW91dD0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZWRvd249IkZ1bmNCdG5Eb3duKHRoaXMpIiBvbm1vdXNldXA9IkZ1bmNCdG5PdXQodGhpcykiIGlkPSJRXzE2XzBfQnRuIiBvbmNsaWNrPSJDaGVja01DQW5zd2VyKDE2LDAsdGhpcykiPiZuYnNwOyZuYnNwOz8mbmJzcDsmbmJzcDs8L2J1dHRvbj4mbmJzcDsmbmJzcDthY2V0aWMgYWNpZDwvbGk+CjxsaSBpZD0iUV8xNl8xIj48YnV0dG9uIGNsYXNzPSJGdW5jQnV0dG9uIiBvbmZvY3VzPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25ibHVyPSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlb3Zlcj0iRnVuY0J0bk92ZXIodGhpcykiIG9ubW91c2VvdXQ9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2Vkb3duPSJGdW5jQnRuRG93bih0aGlzKSIgb25tb3VzZXVwPSJGdW5jQnRuT3V0KHRoaXMpIiBpZD0iUV8xNl8xX0J0biIgb25jbGljaz0iQ2hlY2tNQ0Fuc3dlcigxNiwxLHRoaXMpIj4mbmJzcDsmbmJzcDs/Jm5ic3A7Jm5ic3A7PC9idXR0b24+Jm5ic3A7Jm5ic3A7aHlkcm9hY2V0aWMgYWNpZDwvbGk+CjxsaSBpZD0iUV8xNl8yIj48YnV0dG9uIGNsYXNzPSJGdW5jQnV0dG9uIiBvbmZvY3VzPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25ibHVyPSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlb3Zlcj0iRnVuY0J0bk92ZXIodGhpcykiIG9ubW91c2VvdXQ9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2Vkb3duPSJGdW5jQnRuRG93bih0aGlzKSIgb25tb3VzZXVwPSJGdW5jQnRuT3V0KHRoaXMpIiBpZD0iUV8xNl8yX0J0biIgb25jbGljaz0iQ2hlY2tNQ0Fuc3dlcigxNiwyLHRoaXMpIj4mbmJzcDsmbmJzcDs/Jm5ic3A7Jm5ic3A7PC9idXR0b24+Jm5ic3A7Jm5ic3A7YWNldGljPC9saT4KPGxpIGlkPSJRXzE2XzMiPjxidXR0b24gY2xhc3M9IkZ1bmNCdXR0b24iIG9uZm9jdXM9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbmJsdXI9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2VvdmVyPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25tb3VzZW91dD0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZWRvd249IkZ1bmNCdG5Eb3duKHRoaXMpIiBvbm1vdXNldXA9IkZ1bmNCdG5PdXQodGhpcykiIGlkPSJRXzE2XzNfQnRuIiBvbmNsaWNrPSJDaGVja01DQW5zd2VyKDE2LDMsdGhpcykiPiZuYnNwOyZuYnNwOz8mbmJzcDsmbmJzcDs8L2J1dHRvbj4mbmJzcDsmbmJzcDthY2V0YXRlIGFjaWQ8L2xpPgo8L29sPjwvbGk+CjxsaSBjbGFzcz0iUXVpelF1ZXN0aW9uIiBpZD0iUV8xNyIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48cCBjbGFzcz0iUXVlc3Rpb25UZXh0Ij48Zm9udCBzaXplPSI1Ij5XaGF0IGlzIHRoZSBuYW1lIGZvciB0aGUgZm9sbG93aW5nIGZvcm11bGE6IEgmI3gyMDgzO0JPJiN4MjA4Mzs/IDwvZm9udD48L3A+PG9sIGNsYXNzPSJNQ0Fuc3dlcnMiPgo8bGkgaWQ9IlFfMTdfMCI+PGJ1dHRvbiBjbGFzcz0iRnVuY0J1dHRvbiIgb25mb2N1cz0iRnVuY0J0bk92ZXIodGhpcykiIG9uYmx1cj0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZW92ZXI9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbm1vdXNlb3V0PSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlZG93bj0iRnVuY0J0bkRvd24odGhpcykiIG9ubW91c2V1cD0iRnVuY0J0bk91dCh0aGlzKSIgaWQ9IlFfMTdfMF9CdG4iIG9uY2xpY2s9IkNoZWNrTUNBbnN3ZXIoMTcsMCx0aGlzKSI+Jm5ic3A7Jm5ic3A7PyZuYnNwOyZuYnNwOzwvYnV0dG9uPiZuYnNwOyZuYnNwO2JvcmljIGFjaWQ8L2xpPgo8bGkgaWQ9IlFfMTdfMSI+PGJ1dHRvbiBjbGFzcz0iRnVuY0J1dHRvbiIgb25mb2N1cz0iRnVuY0J0bk92ZXIodGhpcykiIG9uYmx1cj0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZW92ZXI9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbm1vdXNlb3V0PSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlZG93bj0iRnVuY0J0bkRvd24odGhpcykiIG9ubW91c2V1cD0iRnVuY0J0bk91dCh0aGlzKSIgaWQ9IlFfMTdfMV9CdG4iIG9uY2xpY2s9IkNoZWNrTUNBbnN3ZXIoMTcsMSx0aGlzKSI+Jm5ic3A7Jm5ic3A7PyZuYnNwOyZuYnNwOzwvYnV0dG9uPiZuYnNwOyZuYnNwO2h5ZHJvYm9yaWMgYWNpZDwvbGk+CjxsaSBpZD0iUV8xN18yIj48YnV0dG9uIGNsYXNzPSJGdW5jQnV0dG9uIiBvbmZvY3VzPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25ibHVyPSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlb3Zlcj0iRnVuY0J0bk92ZXIodGhpcykiIG9ubW91c2VvdXQ9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2Vkb3duPSJGdW5jQnRuRG93bih0aGlzKSIgb25tb3VzZXVwPSJGdW5jQnRuT3V0KHRoaXMpIiBpZD0iUV8xN18yX0J0biIgb25jbGljaz0iQ2hlY2tNQ0Fuc3dlcigxNywyLHRoaXMpIj4mbmJzcDsmbmJzcDs/Jm5ic3A7Jm5ic3A7PC9idXR0b24+Jm5ic3A7Jm5ic3A7Ym9yb3VzIGFjaWQ8L2xpPgo8bGkgaWQ9IlFfMTdfMyI+PGJ1dHRvbiBjbGFzcz0iRnVuY0J1dHRvbiIgb25mb2N1cz0iRnVuY0J0bk92ZXIodGhpcykiIG9uYmx1cj0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZW92ZXI9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbm1vdXNlb3V0PSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlZG93bj0iRnVuY0J0bkRvd24odGhpcykiIG9ubW91c2V1cD0iRnVuY0J0bk91dCh0aGlzKSIgaWQ9IlFfMTdfM19CdG4iIG9uY2xpY2s9IkNoZWNrTUNBbnN3ZXIoMTcsMyx0aGlzKSI+Jm5ic3A7Jm5ic3A7PyZuYnNwOyZuYnNwOzwvYnV0dG9uPiZuYnNwOyZuYnNwO2JvcmF0ZSBhY2lkPC9saT4KPC9vbD48L2xpPgo8bGkgY2xhc3M9IlF1aXpRdWVzdGlvbiIgaWQ9IlFfMTgiIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+PHAgY2xhc3M9IlF1ZXN0aW9uVGV4dCI+PGZvbnQgc2l6ZT0iNSI+V2hhdCBpcyB0aGUgbmFtZSBmb3IgdGhlIGZvbGxvd2luZyBmb3JtdWxhOiBIJiN4MjA4MjtTaU8mI3gyMDgzOz8gPC9mb250PjwvcD48b2wgY2xhc3M9Ik1DQW5zd2VycyI+CjxsaSBpZD0iUV8xOF8wIj48YnV0dG9uIGNsYXNzPSJGdW5jQnV0dG9uIiBvbmZvY3VzPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25ibHVyPSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlb3Zlcj0iRnVuY0J0bk92ZXIodGhpcykiIG9ubW91c2VvdXQ9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2Vkb3duPSJGdW5jQnRuRG93bih0aGlzKSIgb25tb3VzZXVwPSJGdW5jQnRuT3V0KHRoaXMpIiBpZD0iUV8xOF8wX0J0biIgb25jbGljaz0iQ2hlY2tNQ0Fuc3dlcigxOCwwLHRoaXMpIj4mbmJzcDsmbmJzcDs/Jm5ic3A7Jm5ic3A7PC9idXR0b24+Jm5ic3A7Jm5ic3A7c2lsaWNpYyBhY2lkPC9saT4KPGxpIGlkPSJRXzE4XzEiPjxidXR0b24gY2xhc3M9IkZ1bmNCdXR0b24iIG9uZm9jdXM9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbmJsdXI9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2VvdmVyPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25tb3VzZW91dD0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZWRvd249IkZ1bmNCdG5Eb3duKHRoaXMpIiBvbm1vdXNldXA9IkZ1bmNCdG5PdXQodGhpcykiIGlkPSJRXzE4XzFfQnRuIiBvbmNsaWNrPSJDaGVja01DQW5zd2VyKDE4LDEsdGhpcykiPiZuYnNwOyZuYnNwOz8mbmJzcDsmbmJzcDs8L2J1dHRvbj4mbmJzcDsmbmJzcDtoeWRyb3NpbGljaWMgYWNpZDwvbGk+CjxsaSBpZD0iUV8xOF8yIj48YnV0dG9uIGNsYXNzPSJGdW5jQnV0dG9uIiBvbmZvY3VzPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25ibHVyPSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlb3Zlcj0iRnVuY0J0bk92ZXIodGhpcykiIG9ubW91c2VvdXQ9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2Vkb3duPSJGdW5jQnRuRG93bih0aGlzKSIgb25tb3VzZXVwPSJGdW5jQnRuT3V0KHRoaXMpIiBpZD0iUV8xOF8yX0J0biIgb25jbGljaz0iQ2hlY2tNQ0Fuc3dlcigxOCwyLHRoaXMpIj4mbmJzcDsmbmJzcDs/Jm5ic3A7Jm5ic3A7PC9idXR0b24+Jm5ic3A7Jm5ic3A7c2lsaWNvdXMgYWNpZDwvbGk+CjxsaSBpZD0iUV8xOF8zIj48YnV0dG9uIGNsYXNzPSJGdW5jQnV0dG9uIiBvbmZvY3VzPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25ibHVyPSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlb3Zlcj0iRnVuY0J0bk92ZXIodGhpcykiIG9ubW91c2VvdXQ9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2Vkb3duPSJGdW5jQnRuRG93bih0aGlzKSIgb25tb3VzZXVwPSJGdW5jQnRuT3V0KHRoaXMpIiBpZD0iUV8xOF8zX0J0biIgb25jbGljaz0iQ2hlY2tNQ0Fuc3dlcigxOCwzLHRoaXMpIj4mbmJzcDsmbmJzcDs/Jm5ic3A7Jm5ic3A7PC9idXR0b24+Jm5ic3A7Jm5ic3A7c2lsaWNhdGUgYWNpZDwvbGk+Cjwvb2w+PC9saT4KPGxpIGNsYXNzPSJRdWl6UXVlc3Rpb24iIGlkPSJRXzE5IiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxwIGNsYXNzPSJRdWVzdGlvblRleHQiPjxmb250IHNpemU9IjUiPldoYXQgaXMgdGhlIG5hbWUgZm9yIHRoZSBmb2xsb3dpbmcgZm9ybXVsYTogSCYjeDIwODI7QyYjeDIwODI7TyYjeDIwODQ7PyA8L2ZvbnQ+PC9wPjxvbCBjbGFzcz0iTUNBbnN3ZXJzIj4KPGxpIGlkPSJRXzE5XzAiPjxidXR0b24gY2xhc3M9IkZ1bmNCdXR0b24iIG9uZm9jdXM9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbmJsdXI9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2VvdmVyPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25tb3VzZW91dD0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZWRvd249IkZ1bmNCdG5Eb3duKHRoaXMpIiBvbm1vdXNldXA9IkZ1bmNCdG5PdXQodGhpcykiIGlkPSJRXzE5XzBfQnRuIiBvbmNsaWNrPSJDaGVja01DQW5zd2VyKDE5LDAsdGhpcykiPiZuYnNwOyZuYnNwOz8mbmJzcDsmbmJzcDs8L2J1dHRvbj4mbmJzcDsmbmJzcDtveGFsaWMgYWNpZDwvbGk+CjxsaSBpZD0iUV8xOV8xIj48YnV0dG9uIGNsYXNzPSJGdW5jQnV0dG9uIiBvbmZvY3VzPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25ibHVyPSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlb3Zlcj0iRnVuY0J0bk92ZXIodGhpcykiIG9ubW91c2VvdXQ9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2Vkb3duPSJGdW5jQnRuRG93bih0aGlzKSIgb25tb3VzZXVwPSJGdW5jQnRuT3V0KHRoaXMpIiBpZD0iUV8xOV8xX0J0biIgb25jbGljaz0iQ2hlY2tNQ0Fuc3dlcigxOSwxLHRoaXMpIj4mbmJzcDsmbmJzcDs/Jm5ic3A7Jm5ic3A7PC9idXR0b24+Jm5ic3A7Jm5ic3A7aHlkcm9veGFsaWMgYWNpZDwvbGk+CjxsaSBpZD0iUV8xOV8yIj48YnV0dG9uIGNsYXNzPSJGdW5jQnV0dG9uIiBvbmZvY3VzPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25ibHVyPSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlb3Zlcj0iRnVuY0J0bk92ZXIodGhpcykiIG9ubW91c2VvdXQ9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2Vkb3duPSJGdW5jQnRuRG93bih0aGlzKSIgb25tb3VzZXVwPSJGdW5jQnRuT3V0KHRoaXMpIiBpZD0iUV8xOV8yX0J0biIgb25jbGljaz0iQ2hlY2tNQ0Fuc3dlcigxOSwyLHRoaXMpIj4mbmJzcDsmbmJzcDs/Jm5ic3A7Jm5ic3A7PC9idXR0b24+Jm5ic3A7Jm5ic3A7b3hhbGljb3VzIGFjaWQ8L2xpPgo8bGkgaWQ9IlFfMTlfMyI+PGJ1dHRvbiBjbGFzcz0iRnVuY0J1dHRvbiIgb25mb2N1cz0iRnVuY0J0bk92ZXIodGhpcykiIG9uYmx1cj0iRnVuY0J0bk91dCh0aGlzKSIgb25tb3VzZW92ZXI9IkZ1bmNCdG5PdmVyKHRoaXMpIiBvbm1vdXNlb3V0PSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlZG93bj0iRnVuY0J0bkRvd24odGhpcykiIG9ubW91c2V1cD0iRnVuY0J0bk91dCh0aGlzKSIgaWQ9IlFfMTlfM19CdG4iIG9uY2xpY2s9IkNoZWNrTUNBbnN3ZXIoMTksMyx0aGlzKSI+Jm5ic3A7Jm5ic3A7PyZuYnNwOyZuYnNwOzwvYnV0dG9uPiZuYnNwOyZuYnNwO294YWxhdGUgYWNpZDwvbGk+Cjwvb2w+PC9saT4KPC9vbD4KPGRpdiBpZD0iQ2hhcmFjdGVyS2V5cGFkIiBjbGFzcz0iS2V5cGFkIj4KPGJ1dHRvbiBvbmNsaWNrPSJUeXBlQ2hhcnMoJ1x1MDBiMicpO3JldHVybiBmYWxzZTsiPiYjeDAwQjI7PC9idXR0b24+PGJ1dHRvbiBvbmNsaWNrPSJUeXBlQ2hhcnMoJ1x1MDBiMycpO3JldHVybiBmYWxzZTsiPiYjeDAwQjM7PC9idXR0b24+PGJ1dHRvbiBvbmNsaWNrPSJUeXBlQ2hhcnMoJ1x1MDBiOScpO3JldHVybiBmYWxzZTsiPiYjeDAwQjk7PC9idXR0b24+PGJ1dHRvbiBvbmNsaWNrPSJUeXBlQ2hhcnMoJ1x1MjA4NCcpO3JldHVybiBmYWxzZTsiPiYjeDIwODQ7PC9idXR0b24+PGJ1dHRvbiBvbmNsaWNrPSJUeXBlQ2hhcnMoJ1x1MjA4MycpO3JldHVybiBmYWxzZTsiPiYjeDIwODM7PC9idXR0b24+PGJ1dHRvbiBvbmNsaWNrPSJUeXBlQ2hhcnMoJ1x1MjA4MicpO3JldHVybiBmYWxzZTsiPiYjeDIwODI7PC9idXR0b24+PGJ1dHRvbiBvbmNsaWNrPSJUeXBlQ2hhcnMoJ1x1MjA4NScpO3JldHVybiBmYWxzZTsiPiYjeDIwODU7PC9idXR0b24+PGJ1dHRvbiBvbmNsaWNrPSJUeXBlQ2hhcnMoJ1x1MjA4OCcpO3JldHVybiBmYWxzZTsiPiYjeDIwODg7PC9idXR0b24+PGJ1dHRvbiBvbmNsaWNrPSJUeXBlQ2hhcnMoJ1x1MjA4OScpO3JldHVybiBmYWxzZTsiPiYjeDIwODk7PC9idXR0b24+PGJ1dHRvbiBvbmNsaWNrPSJUeXBlQ2hhcnMoJ1x1MjA4MScpO3JldHVybiBmYWxzZTsiPiYjeDIwODE7PC9idXR0b24+PGJ1dHRvbiBvbmNsaWNrPSJUeXBlQ2hhcnMoJ1x1MjA4NycpO3JldHVybiBmYWxzZTsiPiYjeDIwODc7PC9idXR0b24+PGJ1dHRvbiBvbmNsaWNrPSJUeXBlQ2hhcnMoJ1x1MjA4NicpO3JldHVybiBmYWxzZTsiPiYjeDIwODY7PC9idXR0b24+PGJ1dHRvbiBvbmNsaWNrPSJUeXBlQ2hhcnMoJ1x1MjA3YScpO3JldHVybiBmYWxzZTsiPiYjeDIwN0E7PC9idXR0b24+PGJ1dHRvbiBvbmNsaWNrPSJUeXBlQ2hhcnMoJ1x1MjA3NicpO3JldHVybiBmYWxzZTsiPiYjeDIwNzY7PC9idXR0b24+PGJ1dHRvbiBvbmNsaWNrPSJUeXBlQ2hhcnMoJ1x1MjA3NScpO3JldHVybiBmYWxzZTsiPiYjeDIwNzU7PC9idXR0b24+PGJ1dHRvbiBvbmNsaWNrPSJUeXBlQ2hhcnMoJ1x1MjA3NCcpO3JldHVybiBmYWxzZTsiPiYjeDIwNzQ7PC9idXR0b24+PGJ1dHRvbiBvbmNsaWNrPSJUeXBlQ2hhcnMoJ1x1MjA3NycpO3JldHVybiBmYWxzZTsiPiYjeDIwNzc7PC9idXR0b24+PGJ1dHRvbiBvbmNsaWNrPSJUeXBlQ2hhcnMoJ1x1MjA3OCcpO3JldHVybiBmYWxzZTsiPiYjeDIwNzg7PC9idXR0b24+PGJ1dHRvbiBvbmNsaWNrPSJUeXBlQ2hhcnMoJ1x1MjA3YicpO3JldHVybiBmYWxzZTsiPiYjeDIwN0I7PC9idXR0b24+PGJ1dHRvbiBvbmNsaWNrPSJUeXBlQ2hhcnMoJ1x1MjA3MCcpO3JldHVybiBmYWxzZTsiPiYjeDIwNzA7PC9idXR0b24+PGJ1dHRvbiBvbmNsaWNrPSJUeXBlQ2hhcnMoJ1x1MjA3OScpO3JldHVybiBmYWxzZTsiPiYjeDIwNzk7PC9idXR0b24+PGJ1dHRvbiBvbmNsaWNrPSJUeXBlQ2hhcnMoJ1x1MjA4MCcpO3JldHVybiBmYWxzZTsiPiYjeDIwODA7PC9idXR0b24+CjwvZGl2Pgo8L2Rpdj4KPGRpdiBjbGFzcz0iRmVlZGJhY2siIGlkPSJGZWVkYmFja0RpdiI+CjxkaXYgY2xhc3M9IkZlZWRiYWNrVGV4dCIgaWQ9IkZlZWRiYWNrQ29udGVudCI+PC9kaXY+CjxidXR0b24gaWQ9IkZlZWRiYWNrT0tCdXR0b24iIGNsYXNzPSJGdW5jQnV0dG9uIiBvbmZvY3VzPSJGdW5jQnRuT3Zlcih0aGlzKSIgb25ibHVyPSJGdW5jQnRuT3V0KHRoaXMpIiBvbm1vdXNlb3Zlcj0iRnVuY0J0bk92ZXIodGhpcykiIG9ubW91c2VvdXQ9IkZ1bmNCdG5PdXQodGhpcykiIG9ubW91c2Vkb3duPSJGdW5jQnRuRG93bih0aGlzKSIgb25tb3VzZXVwPSJGdW5jQnRuT3V0KHRoaXMpIiBvbmNsaWNrPSJIaWRlRmVlZGJhY2soKTsgcmV0dXJuIGZhbHNlOyI+Jm5ic3A7T0smbmJzcDs8L2J1dHRvbj4KPC9kaXY+Cgo8IS0tIEJlZ2luU3VibWlzc2lvbkZvcm0gLS0+CjwhLS0gRW5kU3VibWlzc2lvbkZvcm0gLS0+Cgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci8vPCFbQ0RBVEFbCmlmICh0eXBlb2Yod2luZG93Lm9ubG9hZCk9PSJmdW5jdGlvbiIpewoJdmFyIHMgPSBvbmxvYWQudG9TdHJpbmcoKTsKCXMgPSBzLnJlcGxhY2UobmV3IFJlZ0V4cCgiXFxzKyIsICJnIiksICIiKTsKCWlmIChzLmluZGV4T2YoIlN0YXJ0VXAoKSIpPDApewoJCXdpbmRvdy5vbmxvYWRfMDEgPSBvbmxvYWQ7CgkJd2luZG93Lm9ubG9hZCA9IG5ldyBGdW5jdGlvbigid2luZG93Lm9ubG9hZF8wMSgpOyIrIlN0YXJ0VXAoKTsiKTsKCX0KfSBlbHNlIHsKCXdpbmRvdy5vbmxvYWQgPSBuZXcgRnVuY3Rpb24oIlN0YXJ0VXAoKSIpOwp9Ci8vXV0+Cjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci8vPCFbQ0RBVEFbCgl2YXIgb2JqID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2EnKTsKCWlmIChvYmopIHsKCQl2YXIgaV9tYXggPSBvYmoubGVuZ3RoOwoJCWZvciAodmFyIGk9MDsgaTxpX21heDsgaSsrKSB7CgkJCWlmIChvYmpbaV0uaHJlZiAmJiAhIG9ialtpXS50YXJnZXQpIHsKCQkJCW9ialtpXS50YXJnZXQgPSAnX3RvcCc7CgkJCX0KCQl9CgkJdmFyIG9iaiA9IG51bGw7Cgl9Cgl2YXIgb2JqID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2Zvcm0nKTsKCWlmIChvYmopIHsKCQl2YXIgaV9tYXggPSBvYmoubGVuZ3RoOwoJCWZvciAodmFyIGk9MDsgaTxpX21heDsgaSsrKSB7CgkJCWlmIChvYmpbaV0uYWN0aW9uICYmICEgb2JqW2ldLnRhcmdldCkgewoJCQkJb2JqW2ldLnRhcmdldCA9ICdfdG9wJzsKCQkJfQoJCX0KCQl2YXIgb2JqID0gbnVsbDsKCX0KLy9dXT4KPC9zY3JpcHQ+CiI7fQ==',
)]
Stack trace:
  • line 397 of /lib/dml/moodle_database.php: dml_write_exception thrown
  • line 893 of /lib/dml/mysqli_native_moodle_database.php: call to moodle_database->query_end()
  • line 935 of /lib/dml/mysqli_native_moodle_database.php: call to mysqli_native_moodle_database->insert_record_raw()
  • line 751 of /mod/hotpot/attempt/renderer.php: call to mysqli_native_moodle_database->insert_record()
  • line 259 of /mod/hotpot/attempt/renderer.php: call to mod_hotpot_attempt_renderer->set_fields_in_cache()
  • line 92 of /mod/hotpot/attempt.php: call to mod_hotpot_attempt_renderer->render_attempt()

 

================================

Thanks,

Jeff

In reply to Jeff Finnan

Re: Error writing to database on first try setting up HotPot on Moodle 2.2.3+

by Gordon Bateson -
Picture of Core developers Picture of Peer reviewers Picture of Plugin developers

Thanks for that Jeff. I think you can workaround this problem for the moment by disabling the HotPot cache on your Moodle site.

  • Site administration -> Plugins -> Activity modules -> HotPot

I would like to know the type and length of the "content" field in the "hotpot_cache" table in your Moodle database. Please could you check and report back.

I think the "content" field may be "mediumtext" on your Moodle site, but it should be "longtext". This maybe because your site was updated from a Moodle 1.9 site. Does that sound possible?

regards
Gordon

In reply to Gordon Bateson

Re: Error writing to database on first try setting up HotPot on Moodle 2.2.3+

by Jeff Finnan -

Hi Gordon,

Per your suggestion, I disable the HotPot cache. I also cleared it. I tried again and the same error.

In the database, the hotpot_cache table has the "content" field which is column 28 as just "text" with no indication of length.  Do you want me to change it?

Actually, I did go in and changed it to "longtext" but no length. The HotPot did work, kind of, sort of. It did not open in a separate window. It opened in center column. It appeared to run okay.


This Moodle was a fresh install yesterday, no upgrade. I obtained the plugin from here: http://moodle.org/plugins/view.php?plugin=mod_hotpot&moodle_version=8.

Thanks,

Jeff

 

In reply to Jeff Finnan

Re: Error writing to database on first try setting up HotPot on Moodle 2.2.3+

by Jeff Finnan -

<<<The HotPot did work, kind of, sort of. It did not open in a separate window. It opened in center column.>>>


Actually the usual column on the right disappeared, but the usual column on the left stayed.

In reply to Jeff Finnan

Re: Error writing to database on first try setting up HotPot on Moodle 2.2.3+

by Gordon Bateson -
Picture of Core developers Picture of Peer reviewers Picture of Plugin developers

Hi Jeff,
if you disable the HotPot cache then that error message should disappear, because with the HotPot cache disabled the HotPot module should not be trying to write to the hotpot_cache table in the database.

The number of columns displayed in the browser is probably due to course edit mode being on or off, isn't it. I don't think changing the field type in the database would affect the layout of the pagein the browser.

Do you get the same error message with other HotPots? Or is it just this one? Also, could you tell me what kind of database you are using (MySQL, PostgreSQL, MS-SQL or Oracle) ?

Gordon

In reply to Gordon Bateson

Re: Error writing to database on first try setting up HotPot on Moodle 2.2.3+

by Jeff Finnan -

Hi Gordon,

With the HotPot cache disabled, the error message does disappear. I also changed the "content" spot in the from "longtext" back to "text" as it was originally.

I tried a couple of HotPot Quizzes early on to see if was due to some particular one.

No matter what mode, even student, the quiz displays in the middle column.  As I was writing this, I thought maybe it has something to do with navigation buttons which have been always checked on from the early days. Since I used QuizPorts, they meant nothing. I just tried one with them off and it still displays in the column.

The database is MySQL.

If you want access to the Moodle installation, I can give you full administrative rights if you want.


Thanks,

Jeff

In reply to Jeff Finnan

Re: Error writing to database on first try setting up HotPot on Moodle 2.2.3+

by Gordon Bateson -
Picture of Core developers Picture of Peer reviewers Picture of Plugin developers

Hi Jeff,thanks for confirming that error message disappears if you disable the HotPot cache.

I would very much like to come and visit your Moodle site. Please send access details to gordon at-sign kanazawa hyphen gu dot ac dot jp.

If possible, please make me a Moodle admin on your site. I would also like to look at the database. Could you send me access info that too?

thanks !
Gordon

Average of ratings: Useful (1)
In reply to Gordon Bateson

Re: Error writing to database on first try setting up HotPot on Moodle 2.2.3+

by Gordon Bateson -
Picture of Core developers Picture of Peer reviewers Picture of Plugin developers

Hi Jeff,
thanks for sending the access info.

I looked at one of the HotPots and it displays as I expect (please see screenshot).

I am not quite sure what you mean by it displaying "in the middle column". Perhaps if you are new to Moodle 2.x, you are not yet aware that the the "Navigation" and "Settings" menus are always on every page? On your theme, they appear on the left of the page, pushing the HotPot quiz into the center of the page. You can minimize the menu blocks by clicking on the "-", blue or grey icons next to the block titles, "Navigation" and "Settings".

I will investigate the database error message tomorrow.

cheers
Gordon

Attachment Screen Shot 2012-06-30 at 9.01.14 PM.png
Average of ratings: Useful (1)
In reply to Gordon Bateson

Re: Error writing to database on first try setting up HotPot on Moodle 2.2.3+

by Jeff Finnan -

Hi Gordon,

Okay on the "middle" column. I guess I'm a newbie all over again. Howeve, when I run the HotPot from your guestteacher moodle. The left-side panel disappears all together with no invoking the "-" required. Is it a theme issure?

I await your database spellunking.

Thanks,

Jeff

In reply to Jeff Finnan

Re: Error writing to database on first try setting up HotPot on Moodle 2.2.3+

by Gordon Bateson -
Picture of Core developers Picture of Peer reviewers Picture of Plugin developers

Hi Jeff,
a better workaround for the caching table error is to change the hotpot_cache.content field type to "MEDIUMTEXT". I have that done on your site, and enabled the cache and there is no error.

I am currently trying to work out why the field was created only as TEXT and not MEDIUMTEXT in the first place.

Gordon

Average of ratings: Useful (1)
In reply to Gordon Bateson

Re: Error writing to database on first try setting up HotPot on Moodle 2.2.3+

by Gordon Bateson -
Picture of Core developers Picture of Peer reviewers Picture of Plugin developers

Jeff,
it seems that on Moodle 2.0, 2.1, 2.2 it was possible to specify whether text fields in the database should be "short", "medium" or "long". The default was "short".

However, in Moodle 2.3 and later, all text fields are "long" and furthermore attempting to specify a length for the text fields now produces an error in Moodle. For this reason the length specifications were removed from the HotPot text fields. Unfortunately this means that installing the HotPot module on Moodle 2.0 - 2.2 gives us "short" text fields.

I have implemented and tested a workaround, whereby the HotPot fields are defined without a length specification as required by Moodle 2.3, but on Moodle 2.0 - 2.2, they wil be converted "long" by the install cleanup script.

I have also added a check to the HotPot update script, which will check and convert text fields on currently existing Moodle sites.

In short, this means that the HotPot text fields automatically next time the HotPot module is updated on your Moodle 2.x site. Actually in your case, I have installed the new module for you.

Thanks again for giving me access to your site to investigate the problem.

best regards
Gordon


P.S. For future reference, here is the relevant part of the Moodle which sets the field type:

lib/ddl/mysql_sql_generator.php (around line 181)

public function getTypeSQL($xmldb_type, $xmldb_length=null, $xmldb_decimals=null) {

switch ($xmldb_type) {

// Moodle 2.0, 2.1, 2.2
case XMLDB_TYPE_TEXT:
if (empty($xmldb_length)) {
$xmldb_length = 'small';
}
if ($xmldb_length == 'small') {
$dbtype = 'TEXT';
} else if ($xmldb_length == 'medium') {
$dbtype = 'MEDIUMTEXT';
} else {
$dbtype = 'LONGTEXT';
}
break;

// Moodle 2.3, 2.4
case XMLDB_TYPE_TEXT:
$dbtype = 'LONGTEXT';
break;
}
}
Average of ratings: Useful (1)
In reply to Gordon Bateson

Re: Error writing to database on first try setting up HotPot on Moodle 2.2.3+

by Jeff Finnan -

Hi Gordon,

Thanks much for all this work. Most excellent.

I will probably start some new thread about the HotPot quiz window placement. (Actually, I just figured this out. Navigation under Display was "Standard Moodle Navigation bars (top and side)" vs. "Original")


Thanks,

Jeff