[Add all Hat web-docs to the CVS archive.
malcolm**20010208164535] {
adddir ./docs
addfile ./docs/browser-detail.html
addfile ./docs/compiler.gif
addfile ./docs/compiler2.gif
addfile ./docs/faq.html
addfile ./docs/feature-table.html
addfile ./docs/index.html
addfile ./docs/limitations-detail.html
addfile ./docs/limitations.html
addfile ./docs/maillist.html
addfile ./docs/old-tracing.html
addfile ./docs/paper.dvi
addfile ./docs/people.html
adddir ./docs/private
adddir ./docs/private/Memos
addfile ./docs/private/Memos/index.html
addfile ./docs/private/conf.html
addfile ./docs/private/index.html
addfile ./docs/proposal.html
addfile ./docs/tracing.html
hunk ./docs/browser-detail.html 1
+
Advanced Redex Trails
+
+
+
+
+ Redex Trail Browser:
+ bugs and wish-list
+
+
+
+
+This is a fuller list of bugs and wishes for
+the prototype tracing system Hat's redex trail browser.
+(There is also an overview page,
+and a more detailed page for the trail-building
+compiler.)
+Please mail us at
+ ART-team@cs.york.ac.uk
+with any other bugs or wishes.
+
+ Bugs
+
+
+- (FIXED) Exiting the trace browser does not implicitly disconnect from
+ any connected residual computation. This leaves the socket/port in an
+ unusable state.
+
+- Related to above: If the browser chrashes because of ony of the other bugs listed here, then it leaves the socket/port in an unusable state. Only after about 10 minutes the operating system frees it and then the browser can be used again.
+
- Concerning scripts:
+
+- In script recording, every object the mouse passes over on the
+ screen results in a recorded selection -- only the last such
+ selection before a specific action should be recorded.
+
+- (FIXED) In script playback, synchronisation between the explanatory messages
+ and the actions in the browser is poor. Either the action happens
+ before the description, or vice versa. It would be better to
+ ensure that action and description happen simultaneously. On some
+ occasions, actions should happen independently from the description,
+ but this is a less-common mode of use.
+
+- In script playback, often the cursor position is not correctly
+ displayed: for a large red box, the cursor is shown in the centre
+ of the box, but this is not where it would need to be (in normal
+ use) to cause that box.
+
+- In script playback, hiding visible trails by collapsing them
+ (denoted by dotted underlining) doesn't work - they stay visible.
+
+ - If a complete sequence of parents up to the root is shown by the browser, then left clicking on any of the redexes leads to the incorrect error message "The selected component has no trace".
+
- Left clicking on any redex of an incomplete sequence of parents shows the next parent. This behaviour contradicts the html-description.
+Furthermore it means that it is currently only possible to fold a complete sequence of parents by left clicking on the child that starts the sequence (and which is a subexpression of some other application). It is not possible to partially fold such a sequence.
+
- If the shown trace is longer than the trace window, then expansion of any trace causes a jump to somewhere in the middle of the trace. This hopping is very annoying.
+
- A string is always displayed as a single unit. That makes it impossible to select a substring which may have a different parent.
+
- Single element lists are (always?) shown as (:) 1 [] instead of 1:[]. In fact, [1] seems desirable if all subexpressions of the list have the same parent as the list (and hence selection of subexpressions is useless).
+
- A section (2:) is printed as ((:) 2). First, section is shorter. Second, original program structure should be preserved.
+
- The fromInteger in front of numeric constants that are introduced by the compiler are annoying. Problem of browser or of redex trails?
+
- A faulty program might not output anything, that is, execute putStr "". Then there is nothing to select in the output window and no way to look at the trace!
+
- Linking to the source code does not always work: the browser states that it loads the program source, but then just stops. Probably the bug is in the tracing runtime system. Nonetheless, the browser should give up after a short period and show an error message. No way to reliably reproduce the bug has been found yet. It is unclear under which circumstances loading a program source does not work.
+
- To change the font size the user currently has to hit enter in the dialogue box, just clicking ok doesn't make the change. Also the standard font size seems to be too big. Maybe the browser can determine the standard font size used by the user for other programs and that is used at the beginning?
+
- The siblings of the selected expression are shown in blue. If the selected expression is only a simple name, then it is not shown in blue. However, if it is a more complex expression, then it is shown in blue for all subexpressions that have the same parent. This behaviour is inconsistent. A single name should be shown in blue as well.
+
- More a problem than a bug: The siblings of the selected expression are shown in blue. However, subexpressions of siblings which have a different parent are not shown in blue. So if the sibling is just an application whose function and argument have different parents, than there is nothing which can be marked in blue.
+
+
+Wishes
+
+
+- In script playback, to show mouse-clicks in the original session
+ it would be nice to display a small mouse diagram near the cursor
+ with the relevant button shaded.
+
+- The various colour highlightings in the tracer window are confusing for beginners. Hence the option menu should permit to turn some features off. These include highlighting of parents and siblings. Both these features are not necessary, only helpful. When the trace browser is run for the first time the default setting should be that all these features are turned off.
+
- It should be possible to save the options.
+
- Options that are not for the user but for the development of the trace browser should be moved to a separate place.
+
- In the program source only the beginning of an expression is
+marked. The marking should indicate where the expression in question
+ends.
+
- The program source should be linked closer to the browsing of the trace. So the currently selected expression should be marked in the source code, if it happens to be visible at the moment (maybe the whole function definition should be marked). Maybe there should be an optional mode where the source window follows all selections in the trace window.
+
- Many subexpressions e of a redex have the same parent. If all subexpressions of e have the same parent as e, then it should not be possible to select e. This restricts the user from performing some rather fruitless operations. (General goal: restrict the number of choices the user has to avoid confusion).
+
- should order in a case redex be reversed? Write f 4 |> True instead of True <| f 4
+
- The source code window should give the name of the module it shows.
+
+
+
+
+This page last modified: 2000-09-13.
+
+
+ |
+
+
binary ./docs/compiler.gif
oldhex
*
newhex
*4749463837614e020203f700000000002f2f2f3030303f3f3f6060607f7f7f818181909090a3a3
*a3b4b4b4c0c0c0dfdfdfe0e0e0ecececff0000ffffff60f358d0dcd0160fbf4040f72350e0eb82
*d20f15bf4000f750580a01d1f700bf0200f7002e04608100d01500bf0000f704607b00d0cd0016
*1c004040e5004497b0d31115bf2e001881b0d31515bf62d160ee000002001e00004002d1007cb4
*2c0081d30015bf2304260100e800001c65f344eedcd3020fbf0040f7007c18b082d30204600000
*1e2ef36e81dc00150f80004005f47c9b8880001115000c040000f30200dc00000f00004000acc8
*40d28080bf1515f700001804f830008e01001130f3ec81dc8e150f11f4c8085b80811315154000
*0003a80400d10000bf000004f38000dc15000f4c609602d008001603600051d0b008161516bc00
*b4d2b08493d1c86400d01300bf0060f370d03715161c00fc6080800015151e4c04240200d50000
*bf60f35ad0dc21160f1d404040e4fccdd280ccbf151bf7004078d440d3d1e1bfbf11f7f7000804
*01d30006bf0000df60b6f3d001031600840058f3b08a03151100002400b0d57c0074d300cebf00
*1100d10120000617000000895400e0d3000fbf38005cd3b021bf1503bf00402922e10316110044
*5600822000150301600000d0000016004e230002eb0002520003010000be780082d2000c760100
*fb00000280e573d39700bf1100f740007cbe76d382fbbf1502389c78d3d2d1bfbfbff90a782900
*d10300bf2026001716004e9c0602d20002a70003d200003c0000d2002489f3d5e0dcbf0f0ff740
*4000009800b08200151500481400d28200bf150000000000000000000000000000000000000000
*000000000000000000000000000000000000000000000000000000000000000000000000000000
*000000000000000000000000000000000000000000000000000000000000000000000000000000
*000000000000000000000000000000000000000000000000000000000000000000000000000000
*000000000000000000000000000000000000000000000000000000000000000000000000000000
*002c000000004e0202030008fe0009081c48b0a0c18308132a5cc8b0a1c38710234a9c48b1a2c5
*8b18336adcc8b1a3c78f20437a6c40b2a4c9932853aa5cc9b2a5cb973063ca9c49b3a6cd9b3873
*eadcc9b3a7cf9f40830a1dda330081060a922a5dcab4a9d3a750a34a9d4ab5aad5ab58b36addca
*b5abd7af60c38a1d4bb6acd9b368c112308a34addbb770e3ca9d4bb7aeddbb78f3eacdbaf6e8de
*bf80030b1e4cb8b0e1c38895f66d9bb8b1e3c790234b9e4c19ebe2ca98336bdeccb9b3e7aa973f
*8b1e4dbab4e9d36743a35ecdbab5ebd79a55c39e4dbbb6eddb6965e3decdbbb76fdeba7f0b1f4e
*bc786cb6c6932b5fce3c7070b400a203182cbdb9f5ebd89f4a9f3ef6b9d3eddbbffe73d73e3e2d
*f8eae4d3bb0daf80fdd2e8d9e3cbd71adefd55f8dd9157c5dfbebc52fee2c5c51f804c11f89f7f
*078a05a081fdcde7e083520d88e07e1376e55d805e316896864d71089587582d58218424969860
*52207e38e2561776c8dd84f6b9a8628a54e107237c06c6d8df795fd988a08e0712c81e90261689
*9a84e27198238e342aa65f8d4436a8a27a4d46059e8c3baa8765583e6a59e08bfe8968e498ae9d
*f723985e0689e28a4cb5f8258a53c6f9e6895cd938e79a69d209569718de29259e4c9229e891e3
*09591e83881ecaa6937e5138958789f2d8958662f6e9e79ee8591ae495ef35b8e8a0a05686e47b
*666a8aa79e51b949eaa32b264ad6a8fe7fc6baaaa91966bae5ac33da1aeaae9bc17a6a8437e22a
*95aaa8d25aecaf556a59a9aec7fe99ac9cc6fa2ae5b3bc565b98b4ce06eb229aa03d092cb33b72
*baa6a4a4827b5fa9e566b9a98ee2d69a64bbe32ef9abb5f446561fb3f09aa9a8badd365aefbf00
*079c67bf8c096cf0c1d6529b14b10837ec707cf052c5f0c314572ce8c41667acb183186fecf1c7
*cb750cf2c824f72672c928a7fcdac92ab7ecf2682cbf2cf3cc95c54cf3cd3823b698483cf7ecf3
*cf40072df4d044176df4d148536454004c37edf4d350472df5d454576df5d55867adf5d65c77ed
*f5d760872df6d864976df6d968a7adf6da66e7ecf6db70c72df7dc74d76df7dd78e7adf7fede7c
*f74da6be80072ef8e0847feaf7e1f40290b443082ede11e2903ba638513c05d038e5989f1440e4
*9c1f36f902a0872efae8a4976efae9a887bed6e5a9b7eefaebb09fbe56e7b45377d402861db07a
*53b76fa6fbe6b507bfd7e7b9efde6603b86bf6bbf0cce3457c61bfb3bedf61cb376ffd5ccf976b
*38974c45cf3bf2da8719987fd55f6ffe7abd77fa9f5ce41bbf54fa70ae7f6df7b39f6fff59d9b7
*67e5a1b14e2762984ce28ff78e97bcf8c94f7fe34ad7bcfcc7bfff7d898102acdffd26a820f821
*f03b06b4d3a95e7440f12d6580ef03df013368c01122b0501cdc20094b78c1a4948f82309c9405
*2bc4bf0b164a7e376c210b41a81811b23087fe1e1c610a6d88c32216887ec08ba112e93343eda8
*2f87440cd7104dc8c385f95087501cd0118d18c5130ea943485ca21843d4440c72318b2cd4a10e
*aba8803276708b413ce11be3f723307e508263cca3952cd84220ce318a68549f52d8e8c63e6e11
*8b2bece210a1b8433ceaf19105e263b8fc14481b1a0a8583745f0f0b2845385e524f9544210031
*e9424742f294f9130c21af5899179e12959204cc2a39d94a53be528f9f3b802e77c9cb5efaf297
*c00ca63075a9492b2e6098c84ca63297094c5bde728c93735c422cf73d69622489cf7ca4e2d856
*b6c671f39b50cb262a0b47ce729a737be24ca73ad7c9ce76baf39df08ca73ce749cf7adaf39ef8
*fecca73e9bc2807efaf39f000da840074ad0821af4a0084da84217cad0863af4a1108da844274a
*d18a5af4a218cda84637cad1807aa5a3200da948474ad2929af4a4284da94a57ba520508802bfd
*dca74c472380976e25a633cd29675e6a53ace054a740cd4c4db5f2d3a01a55323cf529038ecad4
*c90cf52a456daa54119354ab4475aa5825cc53a972d5ac7a15305b9d4a57e759d3b2f6142d61fd
*aa57d2fa94b1d693ad6781ab5ab52257a6b8959e75254b5ee77a95bd2ae0ae64eda959055b56a5
*98d5b0857dca6093b258c626f6a9904dac4b1f7bd87cee15b08145ac6327bbd9c872f6b34df1ac
*686d3ad4d17696b43c45ad655d1a15ccca73ab9e45fe6c6a9912dbd0aad6b49c1dac6a359bdbdd
*e2b3aeae7d2d616ddb5bda3696b8c55dca682b0b5add82769f55e5e752730adbb37eb6b4d6f52b
*6e798b5de65e37bbd6d5275c832b5cde7277b6c995eb7637dbdbc3e216bb3a1def74a93b5ce352
*b6ba756d2c5b994b5ad912b6b633652b79f94ae0b9a475c0054e305cc28a60053b38ae3d6df083
*27acd7e94a98c218fe8a00967ae10c7b982b2fedf08747dcd7bfce97c4282e4b884f9ce2168365
*c54a79808c674ce31adbf8c638ceb18e77cce31efbf8c7400eb290874ce4221bf9c8484eb29297
*cce4263bf9c9508ef2900d6be2184bf9ca58ceb296b7cce52e7bf9cb600eb398bd5c80329bf9cc
*682e33fe957f3ae636bbf9cd708eb39ce74ce73abb790078ceb39ef73c8035cfd7ce800eb4a007
*4de8421bfad03f1e808ffbccd82a2705d1908eb4a4274de94a5b1ac78ae6710118cd5a365ffad3
*a00eb5a8474d6a24675ac70ad8b49fad5cea56bbfad5b08ef5a04f3de302d438d59c86f1a365cd
*eb5efbfad7c05632ad655c661ae37ad5bb0eb6b297cdec66cb7ad80f28f68c8fdd684f1f19005e
*8e0e8f01e7666ccf58db45de0ea5bd3d6672e798dce0ae71ba85bcee529b5bddd27980b8e5adee
*6d7f5b5fe77eb78c0367e3766f5bdffbd6b7bf653cec334f5bd5d5fef3b5017ee581c31bdf625e
*b7c3fb6d6e88dffbc713f771bbe78de38d733ce0f1de3178feeecdf18ca73be434ceb8c8194e71
*878f1ce4284f79c95ffef093d3dce5f19eb7c4592e6f7473fbc603e737bc838c738a63bac60697
*31b53badf070f33cca2aef79cbc3ec718dfbbce23bc7f8d3578ef58fcbbce6283713d76dfef1a2
*93fcdd51cff7bf692ef3b0b3fdec578f39dce18e75a0a3dde75fb77bdedbde729e4fdcebff367a
*cd6f4ceb342b1de14c6735d0039fedad077deb50bfbbd52f3e74caf738ed1d8f39b8cd1ef0bc67
*5dc726afbbdecf5ef92147fdf37b1f7de9559f7ac177def5af97bae557fff8be839ee5805f39ec
*614e781a1bfe014bd7b502322ff7d6f37ee7727f7bcfb58d7cd10bfef3cc0ff9cc97cf707fdb9c
*fa308f3eee5ffe7e1eba93fef6b20fbff8634ffecd3b3ff3e0377ed5519f7ddb373ffdc68f7fe8
*59bf7beb4b7ef6f65f7deacdaff6d1639efc00c87f35066d36167c8e367c7d577c00487d337773
*dd477764e776e8277ee63738d9a780f97781da277d80d77d1ce86d0ff880fe8777b3b780f1377e
*f4a77f194879d707816de780b9b77cbba77f26588235188002777fe5978334b883376876ffe783
*95e76f04786b88277c76a77c0b887a2d187e4c2880af0784a2e77624288133487696677fc5d784
*144882350885ecf7858f0779a6c7839ee7854ee87c1ca87e4118672b28844ba883a5178636d885
*4016866198695271840798800a387e558782383888762888b2077dfee7078571e87a4f986f72c8
*7759787e91887f66687b83e7646f9886b117889c28897f386899c87ea1587d68c879fb47867098
*8a0fa06869d68ab9d6877e488a2a0882b2788643287686a888ba38858f88825cc8855347896c17
*811da8869268882097849858899b488b25a88887888bc92869a3788af5578b0cf88763a884e9a7
*856f3700ade88ac8868060678a80e88cf4078dd05887d1688b9448886cf88e37088756d88c6b17
*82c7a872e69864d57871c0a88ee8a88c93d68faa788e1328743488909717901a1873035038af68
*6d60d77fcfc890ad079062a87a88688d069990a5e8856ff88bc6788fdc978f72b88bba47918b78
*91f51885f787734f37fe7f33287f7ed78b81589037b97799b89227789036696e03900042399444
*499411d9748b077f9108924ca99315c88239c8940c898868688322b99490688ff22883f32884b5
*e79401f989f39893f0c87b9388955cd98e2939813d58873269952769921e599582b8936d588cb0
*179406b0977cd9977b090047a978fdb696101877545876d2888b0a0971a2488b22188ff4f8816f
*276e92f97dd2a8928f099788397d335991d7188c1af8820da87397399600f7963dd9912cc9912c
*6971fb4896ec487cbd187b7a393881996c49a992a4d77c77b78539d775c0a97c943995bc887d29
*789524e77dc1489a591983d7b88fc6f982347998b0099be7e89bd1279d85fe9980ca3991179884
*c4f893b42797a289986ce999294898194970096000b6398ea0c778ba396a98d786b0669fb9299a
*dd998ba8d86da3b98d86799aff798caa49875de96ab52938b7498ef9799e9af86af5d99fb1869f
*838964d0e96c65988e1fe9a0bd96a081b3a0f1299fd928a191f67f144a670e90a22abaa22cdaa2
*9d8971fc589318ba70b2699c060a9515e8983a6a96a499a30dc9989569a3d2e7a18003a2e7a671
*a009a1fd49a276d6a24efaa40d0a668e37a346b67d1bb86ff526723c1aa43dbaa3429aa316f8a5
*5eaa7344aa2f46da71549aa66abaa66caa65656a26671aa56d3aa7745aa7764a78edf99e092798
*597aa77efaa7804aa56f7a1efe715aa1817aa8889aa8b036a8e051a87dfa64932996ecc6a48a5a
*a996ca6c8cba1d8e9a7291078392ba909f7aa9a23aaaca96a9d2b1a9df36640e20a26078a2ed47
*aab01aab989aa70a0a9f470a642caa9428399f1c2aabbefaabad66aad181aa58fa634e3a790599
*9aca0aacccdaac9126ac8069ab686aac2eca75ac999ed8eaacdabaad8406adc44a6f3e06a56357
*9e32ba90dc7aaee83a6bb4faa1d22aa73976aca0ca77002aa9ae9aaef67aaf4ee6aded6aa83d06
*afe69a9e16d7abf83ab0048b65fabaa7b8c9affdbaa2ba8a8dd9da96051bb1122b6ceb5aa4fbfa
*a8c62a9f6bd895113ab11efbb14976b08997b0181baea04a9dfa4886f50ab22c1bfeb1228b84b7
*1a64ab7ab2dea99436dbb2389bb30358b1667ab19c2a6433abb3423bb476f6b2b038ad324bb44a
*bbb46f66b412a9b026cbb4523bb55ce6b44809b5fd4ab55abbb55066b57cfab349cbb5623bb646
*e6b5240bb6b84ab66abbb68bc6b370eab3a90ab46c3bb774bbb3ee59ab08cba058cb6341db642b
*7bb3ce89b6ae1ab8333a9c9b57b7736ab67a5bb2590ba9948aac0dd9b0903ba2b329b0247989dc
*f99d999b8de029a488cba68a1ba2618b6858989c1a0ab99a77a30feb88030a9e01eabafb899ec8
*f8b9a5eab6840ab7c53aba87068cfc09b173c88c264aa21b398da9f995bd7a937f4bbba116ba31
*9bb684c97f9c797cc4a99d6829a2f6fed8a5dac7ba60faba66c97abb5abc027ab3aa39bbcaeb6b
*cc8bb4ce2bb994db8cf80896a9ab9f801ba01b08a67ec89592b9bdff5a88e0fbb0c69bace50b6c
*e7ebae3bd6b7e7f9942e8996c3ab95f07b9c5777960becc0faabba69a9bf541797ffeb6c01bcb7
*03ccaad3ab9650e98e0a9ca49019c156da96efebbfdd3ba26d9693c97bc19496c18ccbb71cec95
*16b9abae5993e1fbbb4e797b89f898e1797ac847be59c6c28febc29f06c3689bb1cfdbc1185988
*7f179339bcc310ecbd0d1c9919baba436cc1465cbb77cbae792bbae98b994c5cc3634c913be98b
*1b1ac256bc956977a367ec96e53a8bcbbac5c16abb8d8abbe0aabb6cb9b107ccbe7e9c96fe4d98
*ba510cc1811cc4846c8c7499866139c833899ab22bc4745c6a481cb77aecba7cecc1402a828919
*9cda58894fb8bd1e97bdd189bd3089b28cdc838e5c962d1cc98736c9b91bc6acebc1b23c9cbb09
*9cb3e89c2bd898dcfb705bda9cf49a7c31e8a9001abbaa5cc4ac2c69ae9cc7b0ac65ab3ca9542a
*cc028ab2a77ba0c73c6ac9cca404ccccc64ca3f78abcdb5ccd8876cdaafa65cdecccf66ab81609
*ce8b6ac79a8ac7d84ccedf7c6dddfc9b87abce1dcacea7eacee36ccffc8caee22cb7fd1cd0dafa
*cf952cd0060dab04bdcc7216cfa677d00e5db6f83cacfa0cd07546bf9acbc3e1199b0fbdd19816
*d1d1fac5cdabc474468cc4bcb93eccd01c7dfecc092dd273c6bbcb8a9ae59cd25bbcd2517bb9c4
*ec75c14ca01a6d9abe2bd31c4dd38d3b761f48bc9c7bd1d7faa21a6d9d3e2dd3402dc31adbc10f
*4a87316dce4b5dd5abe8d1dffaceea497c703cc21187d256fdbf4dbdc15bed82171db0d48c6553
*1dd6883bd63a96cd9dd9920c78a06b7d8760cdd6b4ebd6ef6abd5b798b33ccabbeabd4786dd07a
*8d6370cd8850dd82724dc148cdd3733cd8ea5cd83776d8e5e8985bba997899d489ecc8750dd96a
*2bd93646d935ebb9295cdac298d12608cd3dedd9918dd5135dd06f46d2461dcda89dd6acadd2ae
*0dd2e8cbd20bfdb8dfdcd9b72db6a05d63a2bdc24cfadb771ddc6c3bdc3456dc2b4c75cabdd1cc
*fe3d63ce1dddd67d69d32d63d57ddddc8dccb93db28b9bc435dddde47dc4df0db3bb3dde3c0cc9
*730765c9ddd05afacae8fb73654d6a531daa486acfd9fd00d54dcb27cb8d55aaa3bb6c75d2ecd8
*b3cb9b846bdb44e68dff5dd28dbde062a9da0afeb9fbdddfc21bca4c26db45ad7505be9eec28d8
*f56da1380de0edbde1e22be2366de2c03db4159ebf5a87c576add94417c7bd7b82207ee2222ec8
*44cdbf9017d340acbed5dce2189d9d4e3c869d37e2a698caa94de368ccc0487dd2d46bda7fcdb1
*4c6eb9a5adc924ced9efbdb442aebdd866c0977c8b589e7b120c9d5adec8ccf88306acc81d3eb9
*127ce03d8ec354388d9919d895ebc25d0e7f8a9dc8fe2e5985e4e98669ce93dbb9c67bfed884b8
*e26a0ec28cad64889eb3796ec6b61c9b36fce77076c676599aa62bcb7d6dbd751e79622c90133e
*b991fce87bfc884f4cc375dee82f8eca811e7a0e78d698deb0969dc55efec3861ee3417ede472b
*c06f9dbf64898193ced7c68de65758c2215c92017ed49e2eb02de9e35baeb4a4ae9191ded5343c
*e530bebf5e0d972fda88cf57c48d19e2907cea54fcd24caeea2d1bed88fdc1994ebc54a9ed328e
*eb0e6ae9adbe7d52bce77c5ec06b6ee56d6cecb3acd3d8bed3e58bee3a6cbf087ec2ec9bd906ce
*ea362befc5ee88bdace2edab9e58cee31f7ec325e9a50f6ae7abadbc025fef26e99ba798e4ad0b
*b023effeee1ef9e41b1b819648d75149a012ce9f9789e48b0cc76dcede14aeeb4f1bc3643d9086
*e9e0dabb9fe678a1e4ecb7b03bdbe556f410dfda5d6cb1bacdeb7b3d6ecf4ed5727ced434cf416
*7af4280ece1d5f68e60ed86abcf16a6df5f21c7131aadf387fb53adfeb9616f5301adfca9cde6a
*cbf6d07ef65f4bc90a5dde780f695b9ff77c1f687bdff7803f677fafcdffcd9cec06dd6e6ff39d
*5ba7e82cdfb979df2d3ca5dd066a834feb2469f8b8fef23f0feb40bec49919bc100ecca53ce025
*dee98d0fe7005f86ae5edb32a9f90dcef9d84df7676bf7bcfdd52e9ef5736dd4b239e041afb255
*4cd4a03fa9aeffaa265efa4ae8cdf8eeb8290ee5d25ef3cbfe3f8c729f6595afd6719ee1f72ec4
*30edb0eccdbb6f7eebd5bee3a88ff2d35ce3a17efb145ff1efbeeac96f6983efdfc4fffed21be5
*c8f8bd9bbeda677ef2477ebf5ffec4a4dc9db85c9c00f140200000020d3e20785021c2820b132e
*34f850a1c4810d2b3ab47811624482191976b4089222c68d1a39923c597264ca891e5bbe2c1953
*e64c9a350d0e486040e44e000314fc14a08001839f0a62baa4e98026cf903b398a3cc8f469c7a8
*483552fd88d224c4955ab97a5c19b6a953a71fc582cc9ab66c599912298a3d8ab42bcbaa30b7de
*9d5b11ad5ebe66f3328c6b97eedfb95d0983b56a53f1e2c5387532ede813a850a23f8f327ea074
*e6dba62cdd66fefcdc90f3d4bd80afca4d8c59b5e9ba76b1b23e0b77ebe8d9a95fb3c6bd5a776e
*daade90a7ed83bf7eedfc38913ff7b5cf94cc79023170d3ab4e865c69a03b72e8c18af68d063a1
*d6cebe5cb76cdfbdf3de369ed6a4708c9cbf8b673c923defc4f3d5a7df4d1efef8d4fbfd0b6cce
*b99ea0a36c3a9530b34e25edd2938f3b98a4bacbb7088bfbaf2d97c833cf36e1782a8f430bbb2b
*28b90a25c44d3ffc20f4cb3ee42eec6f44055d8411c09c041c7032e92c3bb0bacd160c0f3b1eeb
*0352302163fccaabf5baa350c2d006eb2c3eab4484b14112e97bf1ab26275cd148222ddc72c400
*9d934c81e82a332ac7c512dc484a067f7c30c834417c12c92aaf7bfe73480ce5848dc50e95bc92
*ce35b59c123fe3d48c9050404bc473ce22a754114b458d84b24bd5be842ccc310d4c13c1a5c6f2
*ecca0cb9f3d44dd30c4bf4d0407f3331cf3dfb625555269fa2704957870cf4b0455f15f2bccf6a
*3bb5572a81d370315b7d9554374a99b2b4401c33d57147b63c4c11ced2a0d5b52ff410a593543f
*87bbb3c3e0a0d52bc46f4303b5b496a665cb576d1fdd8e51c4a85d6bdc506fa597db52691d3458
*628b9d74460193bdb14c66cfac092df71abcd66038f11df5de83bddbb53d720d2db44ff74843ad
*5cf0a6faf0ddec5e4b97348ceb9d0fe174cd35ebc858d14559bff7425e19e4f71ce577b5637902
*984cea0876b266ff26fe1e39222b27be97669f8f7e796691c35db7d33a8bcd98e8538166bac573
*a54ef2e87e1f0393c08077560ccda705d51ab348b93aaec7b2d7ae9950b5bbb47ac7b1d73e9bed
*926ede29674cd16eb6e36bed56ad6ea1b3641770c37fa66aaf61b78c9bcbc2f915fcf083f01649
*ef65f9e679d3c625075bd21637e73c74cdc50d6e33d1cd441de9d31bf3b76b1b754ebd26b157a7
*bd76db6fc73d77dd31a31c24cb05c63cecdd8727be78e38f471ec6de9f7b7d6f87344d3e7ae9a7
*a7be7add9727e8f7ce65e78fbfbf158bbc2d17c30fdcf4b6cd277bb5efcd465f6bd063243fbff5
*bd6cbd52af611f5878f5dfaf7a7ec79dd5d7feb66536ab0d2b69281b1ac4fefaa495f8c5e53032
*43d70021572e052630683679db725064b47d29047b351293b280f7bcbe119080ef0adce760c641
*b93d0e7c7153db01fde7970bfe296bddf35b0d33d83688d57069297a61d33478b11b326c231fd4
*5eec92824361a126852d9c50036926c5f461296273c322b0e646c57a75914f599ce00d8568aaa1
*79517e5e399be070920036b6d18d6d4c62fe20e2003ad6d18e7744534222d832968d8e457a5c18
*bb04a7381922ea36a359a1961a95bec555cc8829ab0acbe6d7487b59d08790e418bd2839c5c67d
*2b9210442456faf826424a925c474c008d4078a9cb9130267884251daf564a198ab28027831702
*5b6534a9c5eb59bfac0b5902fe882b301a9162bf222504ada534632ec85ddfb1a5b42a88c6618a
*b1930e0a5a2e05f4c39145b36adf5c0812efe7bc89242596766c4f4a64e6b42a5e314fd8ac9813
*93a9325eb1ea8a19caa422f9b71f13554b9d89e2a23e1908cf5979b238011d2289f0694f77d2d0
*3500b5984bc4d9bc5696d39ce7d424410d4ac676fd8a3ddf23958a1abad1d3ac2a9f07dd277cfa
*29aa7c158d700abde502ebd941b8956aa41a75297a3e66d2e1acf18d3f4d401c8327138c66b49e
*3b8414411b864b96ee1288ecfc679b780a2b77d14d4fbd4211b8105a55acfed294094be97f3638
*ab9212339d4c9a19d1568213550ad5953389a5a2484ad248feafac5125e5b61e78fe4f36f968aa
*5f7c249156fab87516f189b98ad302a1a942c03967aa7375e94c0b4bcf984c34845f5362496029
*579c3a6a5d6a026d62edead487a24aa9908d999d22cbc86a0eb6981b62eca35c4bcda789689163
*0c6c25a17a576ce996b2bd4d9f655939428bdae48e7e422d6575ca576f31948321c5933b655550
*4e6d2755b78d2d16677bd686015682a615286f99ab1e975593939ba22d5461dbaa4346b4b911f2
*2950dde8d6e21a5796c8ed6cff3e9956a6d6525e08d4d57f039955af165297be155443cfcb558c
*81d29b985470829d89d2c56aeca9fad562e11687db2309d8bd9d0a99c22c0c4970c9a8ade3ac68
*54a087df993a749696fca421a599aafe879e85630fbb9a21254c4d07cbd4c521be6a830f9663ea
*c218c880e2ef46010c52695df2c7493323115d0c5c1987345c1bbb3244842bc2ed2dd17a02945e
*0cbfaa62894dd38a61559f91f95b4ccff5109c2f7e3342be6cacfa210bc5c425f39c058b66c921
*b560698b13e400cde69a424dcf5ba3117df37ce828f1b9b1e65dcaa05d285649139a718ec620a3
*7957679cddb9cb9afe59f43ee7b351e7aed465c334a8ffb365ccca51d5af8675ac652d6b56e36f
*a8b3c675ae75bdebddd59a9c8be675b0853d6c62d7ccd7291e9cb3a0c85160c34f85253e9f611d
*98ea68bb0f7d1c2e18b5e55ca134d68d99b83b369e933ded65e7b68a2a7d36b4db4cd387fe2d17
*836836995ef93843ff5a93aa3435a3c424d86e2845eac065fe77a5dfbd5faa84fbd3e6f6e768f7
*5ceefbac9bddd565ef35bd4770ed16d87ff54ed290f1cd6c75d3a7bd8944f83551285691f3bb20
*06cf6cc8272d6d7e6677e3e856b923597eee32e235bde2ed4f23dfc64730b338a993bc65b607ce
*ec9e0330582877f52cdd0c1e715de49829c3f17ef5adf1331f95742306e40e7745cbac2b88eb66
*0e3860a41b64ab138b9283fde8920119634136f5e127f93a376738e5ac7bec9b6b77e143907e6b
*a563f89d8b45a6901b3c78c1bfb947b4512505ff762761721de06a11709ca5dae20573bcb564ef
*2ed33f8e71ee66cdcfb7928a2f236874b556fe50983bbed5dedfca59f55677f1641f2f596585f8
*40f75699a7f131e377cbb4817a57a4f02c99683b2f1ed78e9d98b67c66be3f3fd079b51ebd1db6
*395f5dee1bd5d7774ea1ed6806b14fb2d3e6f7f0725a6fe0650edc00e3abbd66753e4ae7496498
*2336fa7db5b9c7d98cedb12dd4a3d34fae989f2f98ea371bf47dddbea49a3c01bcbf78a92df083
*a88e6230fbb3123e59b3fe81bd0f53172b6b3f987abf01c4bd24cb3b79123ac9522ca5e23eab33
*970843b28ce8bf71bb3e00843ff7f3ab10bcbfd7f2be04143fdf6240a372aedd4b20426230186c
*390274ba0fcc3e2081b4f1eb40f203c2862340d89aac7ec3bc131c88fddbbe0064c1f8b3c017f4
*fe22e3a332baba2e09543006acc11c443ef503ac45423d3134ad9b0ac2bcfa2e0483c2e83ac27c
*49c395c1c12e1a0927dc36bb8abdd9abbdf72a320f04152a242fd793c1c95a4037bcb7fbc042e8
*7b2e047441c83bc47c9b418a19412e1c17403495a7fb1f2f8ca891ebc3bb8a3d790b274ecb1b4f
*4b39071cbd6801c178f22f059a31568440936b310fe3c0dd3a2554ccb168f20ebfe32c5d8a8d76
*9343d9c23c1b233c0824bcb13a9109f33c4a24388f49b2535caacd6b27647c003b0c3aa943aba6
*b3a15b6c326b8c31aa43c53fc2c6f0abbb2c4ac440e44579c1324c1aad03832e7d8b19ac31c328
*62c6a90b24626498a74bb81afcb629933b37b43126fe1c126aecb39cd3b6812c425ee3a2a831b3
*6cac9d842c36d6e11afba128717bc2c3719b8234c8fd434847e3c83d6c488e7c48c510c88cd445
*ebe9b66193a28e5c43ce49c990144951ac1c524c3ab6f9234df33662c3c8f8689f8674c92d19c9
*9e04caa014caa19c4698f41d99e43ba254caa5644a50fbc9a684caa894cae879ca9ed99fb95b49
*f61991ad129fae1434afe4ca471c8f9d3c9d53a3b99a1b9e9cbc09a3649ecbb2b5d56ba214ea38
*8d24b79563b89783447b7bb2b0db4b42ecbd96db2bb01bc24beb31bd64a12a73b7833421b6abb8
*e5a2b7ec61cbec414ab87ca1133a97c3f21bfa1b3a4ba34bc25a3a90fb215cda228cb4ad31cb38
*b57cb7fec23ccd98434432c4cbba72328ffb2a82ec89c85c252e2bc5bbbc4bf20148797ca9bcec
*4c1eacbc49fbbdd7d4cd099c1ad454cc0cf3c14c8cc0cd7412da1bcd16e4a593b34d4543c122d9
*23c79cae69034719db9741c2c5538a3a5e01cd78dc24323a264c3ca90b03cdb3c33cdebba479f3
*c8e61cbf7104a2f5113d780c3bbca33205ccbcea2cca88b4b3893cb8c22330c023bd56bca0d274
*4e111bcf1e73afd36b3be454b82ac4d01ca4aa085dc9f504c707db3c78b4d078ec30a8d8cfc703
*d10ad34fe073982174d0aa6c40dc4bbfde34c2184442cf0a43d983b84f94befa3c4b6e0b46964a
*aec38c4bd58abff172cdced4bddf924f9ed2c40344bf35c9fe989724d04e33d0dcb43d46044e29
*0cd0677c3db4cc462e1dd2783352540b52d6ebbcb0644326ccbdd582cefb3444353ccd38f5cddf
*a23175cc329a80d1f492ce2d5d412fcd51364442d18cc3236d53695453abcc50a5532be35438f6
*d4a6d2133838fd2bd8d4bc4f61a6276da629d5d3eb9c4cebb3c13e1dbe24fcd32865cf27032f2b
*6452ef9ab9ad3c53189440e27b55ee329954fc4d4a9d43df4bc4d2f490e0bbd073dbd30c13d512
*2c54de62d57872ce5495c2084bcc630d2cf8b4cfe47456f5445469a43c4b6ca63275d2e6d3d56e
*cdcc40ddae21ad93601d433aedce403cbe4a9451223c291edd516ef5cb25bb393f05c529a4d5fc
*5ac47a2d440ffefc279982566db5bf8fdb563e74504bbc481625c8014db44ff53f61f5c749d4aa
*fe9a4d270b30c563bb049dcd5c64c7e74c4148f450466d54c8fb44c364d76859a6c81b469215d4
*5d8dd078c3c54c9acb6bc42d896d5385fd1786cd4e3e85a8d7e3d9d8004ff67ba45ab45485e1c6
*2bbb984d2a4f602a331f5aa98825d3916dd223a395662c51775c5ac9db42b352cdcb243110694f
*60442ab52b9ac8f0d42b9d495c4b54a4d943cebb436e2454a2e327359b44ce6cb4ad65c85d73c8
*f620d7594b5b52f3d14cbbd556d5a049155caba25b55cb5b54aad25134dba4ccb5be859ac13cd0
*3735b7c10d5c470d23bb7cb596acacb275cb5fcb59bc1535b2641cfed25d1db33c5dd3455b17d9
*dba974ddd7855dc369ddd8a5dddab55de5f1dce19adcdbe5dddef55d44bbd9c6a54cca0da294d4
*36e584dc8655de28b9b69cc4ca48f34ada415db8a1b5dcc5cdb30d4e3fe24bbb9c4be3cdcaeccd
*d6bee455fe0c20350d38ce4bcf9ada5a03324def6c50e50c9dd9fdde1815cbe504b8bf2dd2c39d
*df306d5faf13d19d23cd745bc8e5db33bb1533bb4da601865fc9915fcd25d6c59c5f2a4adfcacc
*5e12cc57349dd784fad56b255220f5b9bfe44c9d5be0c341b9c49392edacd5fabdda6eac47d66a
*229485ba6d34cf7dd4d63224ce6a0d5aee14516aade17e145ba01d51229c60954d5e12b6de5633
*6190b547938dc6666cfedf444a8e5e52d1899d61a2ad5095f5581c9ec051e2d01bee61267e30c3
*fbb67f9d56c322634ddb3b55bad71b74151afd14113c47ff552e7f4cbf39d6ba117e546b2dbb28
*25dc6e314243ed633cde5faa3ce2b7dc269da5ce67fdd3fc83b87794d662edd29bca5a338d563e
*3ebf1eb457affbc50ebe62f71164b6a93ec898ce2c0de14556bc3b1ed5b715537ca54012e5a14a
*5ee288451c586662f78c59ca2de2e3b49e50ee5e2d35561556d65225473d8eda235c561fbbd65c
*cee37b14beff548eed1ada79fcd1e554e6414e9efeebe544a6ab5ae93e4836d59acc16635e4166
*fd582ce6e11d3cc651bee08a83e5e2746160cc6045d657342e64d0a56152feae63c7a445416c92
*736d2973a5e339be3732ddc1211ece3515424036e3cb0baf486e3ebfb4610433e888ae6650ae67
*64bbd172f51688a55906c53075abd838fbba90b545a365b278aed433b62e8b53d753d4cc725ec6
*93b5d8943de8f20ae72caedc6bbe688a6cdb515642e852487a64cc26cde1af05a52ad3c6ba425a
*19565a38bb307615e5f6d4c155155f2d76eaae356a2643e0f25adfa0c6da4f5e9b06465cb06eb4
*faeb5faf7e6a02a6b4157edb9c2639035edbb396db4b56353b2cb68a7636fd1ddefc75eb67265c
*4e365ce0c452f0fd32bbbe6bb2f66007065508166ce2fbebc2555b6b0e5dbe76ca9d664ac45eeb
*dde536d5159de9ed6cce1e9ffeea5ddc9814dedf35edd3466d9bb1ecd466edd676edbb59edd796
*edd9466dc3a6eddbc6eda6b4eddce6edde76c9ddf6ede0166e5d03eee136eee3a6e7d13ecad246
*eee676eee45e58e67eeee9a66ee929eeeac6eeec3e9debd6eeeef6eeb08eedef16eff13662e56e
*4bdd25eff4566fade1eef576eff7566df3964ce986effab66f3a93efdb6cb5fbe6effe668cf6f6
*ef00af6f0017f002576f0237f004ff6e0457f006c76e0677f008776e0897f00a1f6e0ab7f00ce7
*6d0cd7f00e9f6d0ef7f010676d1017f112ff5d1237f114b75d1457f1167f5d1677f118874a1897
*f11a274a1ab7f11cef491cd7f11e27361ef7f120df352017f22217ede8fe5c8c36fef225674a22
*67f227d7332787f229a71e29a7f22b471e2bc7f22d1f1e2de7f22fbf1d2f07f331dfeef026f333
*3ff2e04d729e46f3369f333177f3383f1a3897f33a97143ab7f33cc7ddfcc64e3df7f32e37f33f
*17f45e0bf4413774dbc1f34357f44de3739c5df44797dd544272f486f44a67e0c4eb734bd77463
*2b804ef7f44ffff44cdff451f7c99a10755247752fa1890238f5547775f818809950005677f457
*b775f188758100f54e1788596ff55b07f64939885def755aa7ef604776613708627f005faff564
*87769bc8f565f7748370f6638ff66c978969d7f56a2ff65fd7f670bf8985e0756b37f63517f774
*d753722f8083b8767457f7783f2259fe3f774a97f77b07107a07777c47f65c2f8a7ffff77abf5e
*7e97f758dff583df7782bff50160f88677f8874f788597774f6b77894ff783c7f802a07888e7f8
*8ef7f88f07f99017f99127f99237f99347f99457f99567f99677f99787f99897f999a7f99ab7f9
*9adff89a28000090af9ef7f99f07faa017faa127faa237faa347faa457faa567faa677faa787fa
*a897faa9a7faaaff7900a878e6c8f999e8749eb7faaf07fbb017fbb1277bf9f2fa546aa3b32ffb
*b567fbb677fbb7672382c8fa9810f8af61757adf79363280bde7fbbef7fbbf07fcc017fcc127fc
*c237fcc347fcc457fcc567fcc677fcc72ffc54da7bc93700ca87fccbc7fcccd7fccde7fcfecef7
*fcc6ef88b9df8877d7ddbb978959cffb9cf8fcd567fdd677fdd7877dc6a7fcd90780d8b7fddbc7
*fddcd7fdc40f7d7ddf7a762ff6d4dffde127fee237fecea7fdc9affde367fee677fee7effbdeef
*76d16ff6bad719d31f766f477daf87feeef7feef8ffde4affce507fff237fff3777ce97f005077
*77eb9f0eec3ff8e0e77ef4a7fffab7ffbf177fcbbffffde7ffef57fff80788070a0a0c50605080
*02060c0c2a7840f001c4021227168038b0008004090c70ece8f123c8902247922c69f224ca942a
*57b26ce9f2254c930900709c599366cc9c3a77f2ece9f327d0970086568c4851a245820c112a64
*e87000c4a80e2726c5a83128d6ac5ab772edfeead2a601b060bd922d6bf62c5a944301149d4a35
*eac08207132e34f854aa54a4022566dc98f62fe0c0827d8ac5397630e2c48a17735cdbf6add4b8
*4be93a7d88f7f2c5be8c3773eeecb5f04dcfa247938ee9f83266a5739bdab58c1a2edfaba567d3
*ae0d1274589cb677f3f67cfa356cb90a98d66d68992172e4b167ae6deefc39f4e8d2a753af6efd
*3af6ecdab773efeefdfb75e619d78a076ffe3cfaf4ead7b36f0fbe68f2f8aa87536e0df528fe89
*e3ddf3efefff3f800176271e81021a782082092ad85d45f9e1271c71950d302185155a78218619
*6ab821871d7af82188218a382289259a78228a29aab8228b2dbaf8228c31ca28e264acc577238e
*fe39eab8238f3dfaf82390410a392491451a792492492ab924934d3af92494514a895c84535a79
*2596596ab925975d7af92598618a49657d639a79269a69aab9269b6dba39264202c839279d75da
*79279e79eab9279f7dfaf927a0810a3a28a1851a7a28a2892aba28a38d3afa28a491323a9ca495
*5a7a29a6996aba29a79d7afa29a8a116aa4000a59a7a2aaaa9aaba2aabadbafa2aacb1ca3a2bad
*b5da7a2baeb9eaba2bafbdfafa2bb0c10a3b2cb1be1a14c09bc92abb2cb3cd3afb2cb443224b6a
*b4d55a7b2db6d96abb6d8f074c3b2db7e18a3b2eb9e59aeba4b7c79ebb2ebbedbafb2eb6e9520b
*2fbdf5da7b2fbe53ca0b6ebefdfafb2fc0feee1b30fec1051b7cf0b6038b0900430c23fc30c411
*1fac7072ce5de9b002184bbc31c71db74b31721a5fec31c9259b1c2ec80dc78731cb196bbc56c8
*2e570cb3412d0f1532cd27ebbc33cf5aa65cf3ca2ad7ec30d142cb9cb1d12d0f0d34d24cf7fc34
*d45123f9b3cb37abfcb2d1496bedb4d24d772d35d8618b7d23d52267dd34dacd6d9df6da453b3d
*36dc71435df68d0c63cd74d779b72d34d166cbfd37e01cd35df1de6c73cdb7de5cdb1d38e38d47
*5cb6da8657fdf2cd6ea32d73e297bfed38e79de74bf58f7e6329bae7a59b6e2ee83e921e65cea7
*bbfefab8a9c33e3bed72cb5e3beeb93f7dbbeebdfbde31efbf0b3f7cc1c1137f3cf2f60e7c00f3
*cd3bfffe3cf4d14b3f3df5d55b7f3df6d96bbf3df7dd7bff3df8e18b3f3ef9e59b7f3efae9abbf
*bef8df16fb3efcf1cb3f3ffdf5db7f3ffef9ebbfffadc9fbff3f000328c00112d07f0a39200213
*a8c00532b0810e7c20042328c10952b08216bc200633a8410c1670761bfc20084328c21192b084
*261c217d3a783a1ba9305f726aa1e95808437bc569869c93a10debf542229db0873efc21108328
*44111609873984570d8534c42532b1894e7ce206531824231e118908516271aaf8ae2402898a5a
*6c17177de4c52f9a6b875dcc2219ad384534a6715d61e4d118db58c62b8a918d6ea413b4e81824
*3d82918f3b8a230de7b42c331a8c907fb4e3b9f4e8c7642dfeb2478d2ca3140f59c82b1a924d95
*0cd8256f04c87129f2598fdcd127cb95c9f86c925e3b1c259a50e92f551aa494e1ea649ccc88c7
*83bcb08682a4e529df189f59c2929794a22499ea64ca50b61291fd32242f2919cb5bfe928eb3c4
*d133a3994c56aa51923a0ca63323c945654e0696f479a437273397a564b393e31c261c8db94a67
*72339794a2e53bdfe9ce1bb9b39eede426c074991c57bed297dd0ca638cd89cb6f463239e13ca7
*40092ace826e3194fc44273ce5794f7822139fbbe4a33d296ad17fa1f2a1dcf22348013ace459e
*92a0e0142942c9f4cf851253940c658847219a51891a14a3c2a4a74d35aad16772f4a5c5bc5748
*0daa52660675fe2eb6ccd141a598d0306613a88f8c691f754ad3a992b3a63caaa8546bd952a7e2
*08aada2aea425388d15d56f5a8d044a92c8d5aceaa8ef49a8bf42abb66aa55a9b275aef1bc6856
*6399d7826512aed8022b394b7a4b92d652a93a9226538149d4c2b255876f55e73a65b958415612
*b19fb46c6073494dc79212b2084b2898b6ca513ffa558efdececc9781a26d1ae739f9e356d357f
*0adb7ceab1b4b3dd9619a1a8dbddf2b6b7be85e06d31f9dbe112b7b8c6fd6170f389c0e432b7b9
*8715806d9d2b5d15ca29bad3bdae00abfb5aec72d786daed2e780308000290b7bce63d2f395978
*def5b2b7bdee7d2f7ce32bdff9d2b7bef6bd2f7ef3abdffdf2b7bffefefd2f80032ce00113b8c0
*066e6fc808002b2a41378b0ae61f84232ce10953b8c216be30868555310537a0c31efe7003f8f5
*5d862838bc26ae1dbf32c6e105b0b8c52d2e717a1d9ce213d3b873f26ad88ac906635aaa77c635
*fe71e06e5cb31c2b80bc0c39c08e29d5632033b971425671001ab0008318d920481671839193e4
*2673796c4f1e6f94a76c5e2b2779c454f6b1dc56b72db3a9d95a6d3653eb92653529f96dce6ffa
*728ec7ac802b3378c96fb2588ed89cb337bfb95e85d6dce51677b4380be9d06a7274a397a4682b
*417a478eae748f261dba1ce139cc3ac6b29fe5cc2391654e479866d7a1d91c339659ae48a71ed3
*ab332d69444329d641fedbb49334ad3a4ea718cc52fe749f65bc2c9bcd19d082a659e426c76ad2
*59ad72556b989d9f8dec659b5adacf86b69a079d6c1ca97ad5d0565cdfec166d6c57aedce6c659
*b68b1d6d989d7b68ea6677df80a6edd501fada4863b4b72d7d6b5317fb68eefe37be95fd6f7467
*7bdf81a635b9c96db64e4b597a65ce3289d1fc689c1d0edd84e3f6d9be7671afb5fa6e5ee3dbd9
*365e718dc7ace2a33678ddee3df290977c6b4a23f9da128db8cd49cee4a46679c6638ea46e1f1c
*6f6e7b39ce692e73a1b73ce84482b9957bcde1f7825ad8caf238cc07bd32a9139cd9207f1bd447
*be6d94e76ddc33f3b8be459e72451b5be53d7739e2023ef0ac011ddc1a2ffeb5c0cf6e7325197b
*eb5f473bdecc8e7183233deef57635d5c9a6f400c0b7e95a96789ab24ef49a4beee627cf3bd65b
*6eb956575bf228df3bc22f5ff045074dd762d77bdb711d79c87fdce4732f7ae50b47f7cbf73cf4
*45f33cea479f799adbfaf482df70005cac7b161b3ee2c3b6fce1323769bdf5ddf545373ee3c58e
*fc94db9ef9b1bf78b3b5b6798e27aef86c07fef26da6f3be6b0eee47e239e6273ff7e97f8dfb88
*ae7de3cfd6e90520a0fdee77bf90cd5c64c4c3596dd3c6b6bb49fdeeb4ed9fdfe26ef6ffbd1bb5
*859bff2d1be5a49bfeb519f8dd1dff618d02dad9011ea0a509a0015e1b000edffe05a0c5055aeb
*cc1bfa011e014e9b038eda05fe66a097b01bfe25c7fabd1f0bc61fc49dd9ec7ce0f38dcce76d09
*d8d1599709c90ab220fcf51e0cc28e0c1add942ca00dce60aee56090ec200f22800b86dae9a8dd
*904061bb40a0d7495a152221afe11efb2d2113fae0fc612118cecde06de11236a1d385211a9e8c
*12f2a0191e5e1abe61c9ac610b7ae196c1a11d3e8c1cbe5f1bfade1df6211e8e21177661b0b9a1
*1f1662f1002217eee10f1a22230a0c2296211dd25f234ee2bae4610f0e221f52a226c28b25b69f
*227ee12686e2c73c221b46a2289ee2b974a220c61821a2a22ba20c29ce21262ee22bd662bcc4a2
*1e9aa22deea2b5a8e227d6212f06a3b2f8a22e0aa3310e232e5e222b6662a30561fed825deacb9
*59b93823be5023c010e32c82e2d149db154e1da659239ac820a165dab81920bd79a3f92d5ebe80
*e3f7890d362e232d465af23d5e90b0239c45e3339e9de30961f7e91ce6118c3dba9a3b26a32716
*2300de1b15469fcff59bd4111b012a1c37d699bd4d24144a61b2fddfda091cbc311b05e61f44ae
*5dbc859c437ee4b195e0474ee4cc2c0d466664442e0d4b120e0a766037dadbdf79e3d544dfbcdd
*24b519a1cebc238f9da1e1205fb9ed9baadde0e6eca3d5919ef8a51e3d4a24ea599fe96d1c52ca
*dbd01ddf52a660d0bd5d56ce5c5506e5d5cdde54ce63f3859f484a65cec91eb7d91dc2f8a49201
*a5504a1fc165dc453adf516ea55262fea5dca565bf719d5972a051ce65d551e55f021fad055ec2
*1da55aae1c5a0a6562d625b84da051a223c985e5f9ad5bd8b0a5fc25d95b069fea8da563e61b59
*26dff48566617e1eec391f65ee63da956567f6656b8ee35d5e5f6c161a65f2a3583edf027a9f6c
*fae54c060c66bea0367a656cd2e4f6f9633f2e64ea2da5f9911fcb856545ee8df009a7e611a6f6
*8d1f74da65e975e56682655f4265faa1266bbee66e46cd6f3aa1b56d1b0a22e6e244ce464ece49
*5224644a205e4aa6ff216447e2e5032620feed2445962344dedfc06d5d4ef2a7459a5bbcd5db45
*3a1b4a7e5d05cea74d6ea05e1ea67b62257a42e0406a6120fe22fd0564938c26b470e836fed20b
*358268989028bd942750d2a5a831e587b689899ec9889ecb8b722241aee24fb662ddf426ac2160
*b4e868e048613dfa2876a1288e1ea391ae099132e3912ee99924693c2e8c90bae4ef4561943229
*79d6a886ae49a59d9a0702294fee9c95968e9306278cca638896dea5e16098da18961623907820
*842e28d725e4cc1de44a52259afae57b32607de6df8cae69bf8c29303e63b72ddf3fbea5e2115f
*0d52e7ae25a76d022ad808aa24b25e829a633e326677a69d8542e6970aa16e426adc48aa99fa23
*e53125a262df57462669e62378aa23a85e669b66e3a03aaa745ee5a1a6ea702ae778b6ea6dcede
*77be2ae0886a334ae043be64d515ab05b21afec04d687bd6249f1aab9ff6e984026ba8c62a3c92
*a98c522b8d09eb146aeb8971ebba78a9b7de16b88eabb91e49b99eabbaeaa0b5dea8923ecb9656
*e93d4e1da73eea8a7ea8bc8ece9ff264bee6a88bfe48ba5a6195a6da9e2eea7ef62b988a9e8afe
*6b143e9d7fb2c939828953d623b3904ec032c9962aacaf6e6c3ab2ce9bb228c38eeac716a1c12e
*0cc8926cc9e6a59b586cbbb665911ee1a2116863d29e4e9e64e085db48aa4e48e6a80832286f16
*6b7b466844de69e7dde7c88aec101e674bb267bba99d9df6a749462bb446287f2eabb8152c845e
*ad47daa7c5212b3ad62cd4b6dbc5e263f635aa5546e5cb692d611e6dc48a1cf74d2c9e92e6f065
*fea5ad52ec99529ad28aa66266de76f25c6d9e9ca6256addb6aa42969c421aaa3eaae83e8eedea
*d9dca6d2e36e6a25674ae8371a1ddcbeedc222e0e3dee6a7ca5a0112e1e74a2dcf6eee7a1e66d7
*b5adaeba9d5c8aab601e1faebaeaf9250db2bdaeb3c6a5d0a926da30ae915ca5df9a6de49e25db
*44a799b6adebaa23dceaddc2821e7676ec3fda2dde2ea6d9292aebed6dea321e97226fa21aa769
*d22ef73665736eef9eb56c664e6ac37ea7f0366f554a6e03b6a6d9a2eeefaa6cfa266eadca6faf
*26afe7d260572aef634625aacee675f26fe769e7eb8a65df522f007ba6d2ba8deeeeae7e7a2d90
*5aeafd5528eec624ebee679f22a8827e6db4aa9b9efefa9b817670ff69ac08b3ceb93d47dc5a9b
*7a72aa065a300ad3e4e6faebd56270098730cf02dc05322bce3ae8ddad70dcbde402af6cedfce9
*be9a6cc2d6da930c31ab76c90f03710ca22cbca01f120be4c485c912d75805bfa9091b1a1423ac
*0d72f1117b3103271d8626a29baeab1903acf802e7ac9e311bc74715474d14232dbd52dc975cb1
*d0c22ffa92601cdf2f1d7730ecfed996bcf109ce6c49dae61e97291f23a79f46296c2671077628
*d67a6abb25ed08db6b892aecccda2f8e08721d43eeaf9eacbdd026df5d5d9a7a72f376eedd72ac
*f7e26f22a72c22b772c6a2f11843a2ac922f1173add496640e8baed31ea80b37f0414e2dd712ed
*03dbeefed64e2bd991de83f6307d82247b6a2a4736b2f419edcd1e33d1d2f115d65d0246f30ddb
*70347bf335af9ad1e671488670edba24279f2036afaec1aa6f52721cf4faaff166aaab8a4ef556
*a7a76aaff215e7014f2ff8baa43bab64ef12eac92a1e39c324adea2fdf0eee411bf01f1f591a9b
*67c87e32856a70f735a6a166ef4276636af6e6363bf4dfe567a756e60da2f248831fdc49af35af
*7243f77369a66c48afad6b8a3251caaeaa5e5c3a778941bf736abaf2fcbe6fe8b1ea645e6af766
*e74dd7b429f373fd1af228a32d5c22b06b26af414b3542c3efdc2e9e49cba6f7a523c6e43497ec
*f4d5fc6ffa79a7ad6ab451b328e236f559ff743db32ff0aafe34f34ab3ec053448eab35d971ae6
*aa354f3b34afe675aeda9e3d43f42c97622dcb99fd0573b2ae9b093a338f326d0f572af515a084
*ca29df29687a6e24469e334bf6329d66ad00862ea11ef681cae4043b5b26a7a7d0ca30c255ea50
*4ae9837230462376317f5bd76e36478b7182e55e8696b1e9c4e8ee4acd2157232b638957878d6f
*ff361c970e89ce6871033718c7691b6371703749734737b056b775832a76b791383e773362b14e
*5f5a2c9b8b77d3b6ce5269b744748a4a63529768266b692a3faf256f6ce3cef7723b4bede16e7b
*ef77d36c37c6c6b7265f728b966f96e877121bf1482778114f2972db37800b8d7fff77bdfa5d97
*eab0960033d4fe822d65af74cffee72433288152366aff324ecaa73533720693f8eb9938327334
*4376368597388b93b664e3f231efb067cf2e8cb7b8e652a8c344b884cb2dfdbab47c07e5cf2975
*231fefdfee3391ab1cefa6e45aa775b52533da1eb93cfb2ae5fcf5de1d6e51c326976375f46e9f
*9547f9f29e1e900729a3d1db0b2333887f1fd35a64ffaef54557a46102af4bf7b4be911d60e29d
*9c5f71e93e363df7b94753e79a3fb332f3f24c1aba9c0730ced275f6ddf6462bcd99d7374133aa
*825332482b75422b7900a3b55db7ee4bf3f9e0a62995333999d3aca986a7737ea5e5caaf94833a
*a75f39e8ee6dc94dfa82f775585be7432378a63b359803b07326fafe4c036e9fe7faa9177b9e23
*bbfe1670aa6bf9b277793f33fbd829fb554b3b52278ead37b8b432f6fa0af310b276b232368bd7
*300f87f49afbac8f67f37a3af00c23eb659f3bc5696d9c356b372feb866b6430cf7b0602288d5b
*f8c1e67b8a7f9bbc2b7666d73b0a17a89e2b6bf80eb62c5eeb1abbce741f2daad962b63f4dc457
*72768bc9a44307c9d83194663c9b543cc807a3c88ffc2e96bcc9d722caa7bc2bae3ccb9fa2cbbf
*7c28c6bccc6b22cdd7fc24de3cce33a2ceef7c21f6bccff721d007bd1d0e3dd1bfa1d11f3d1a26
*bdd28361a751076f37bd760f9e4654bdd56b44d487ab785fbcd43b22eef945480040d6275e9dcb
*f18177bd9852bd0148fec7d8bf32f3e23128a33d9b7efdda4747dbcf6b60326bd8f2a6f2c93874
*cb3dcf74da46b07d61efdc9b9760a3fbf1af7f397d835dda0e27e007beda13bec3f38b36237e81
*efa5edbefa8d9b75e2477ecf087edd43c7ddebac08623e330ff94f9375f11e3be8efcee4db7de1
*33f15843fbaa7a7e93bffee3c43ee9cfbe8beafb00f27bc0d7761677b8c1ebbec908fed55f7de9
*233fc553fd7434bff3bfa2e853bebb3ee9f40b63f5cb7ee567ff922afff257bdf47bbf280a7ef4
*fb3ef9933cef3fc7f8a7bfcdafbf73b4bffbe73cd587bff8a3fffcab3cf45bbfcbbe6bfeb73c40
*0450307020000201121800b09021438104050860c080a08283153166d4b8fe9163478f1f418614
*39926449932751a654b992654b972f61c6943973e68187040d2254d8b0e14d05112756bc489368
*51a347912655ba946953a74fa1dac4983321cf9e1581522438146a57af5fc186153b966cd9ae52
*2b52dd691580cfac427d9a953b976e5dbb77f1e6ed8816e7c1aa6cdb6295a8752057bd87112756
*bc987163827c0bfa5d6bd5ed60b88e3167d6bc9973e7949015a8051c18a2e5ad713da756bd9a75
*6bb2a04503ae1cf4b46bdbb771e7d6ad12b6dfd1a407beadbd9b7871e3c757f70ef01bf84fd385
*516f5c381540d2ea1f19debdde793b7295ddbd87c7a87c0102f3e7cf43160e5d24f8d0051be2cc
*7ed43dcafa19ef5377bf9d67fec7fdf3dfc34ebcb4caca6f40e3c8434f41f59eb3283ae9f02310
*a709e973c9400afdc3b0a0a9049430c00f333c10c4b02e1451b704154c6f36c21c4c0bc0d0008c
*4fc312a78391a31861e44fc61c3d8a51c61dfb838f3ff83cc4b03a1fe7fb2f49246be451baeba6
*3bb2c917795c523e03a53cd249217b9c72478d704c72cb30bd04af44136f4331450418a48d3d30
*378c73c8199b8430ce1b5dbcd34c0d39d413cf3bfd7c4f4b3e41ac71ce2bfb8413d00ff39bd3d0
*221da5f050458d0c94d249ed6434420f319df4c220d14c4dcd14db64d1b01ca1947446fcea4cf4
*534ef9c454bf2285ecf44741692db45256650552bf5661d574553925fd72d35db7fe7cb23b1a7d
*4dd452259d0db5b851175cf1b25d2305f4be460975f6d03d17cd145c61098572ca63c9e576d16f
*a315d7525d898db74364bb3d96464a63a5d7db2ea99456336ad12bf5da40b385f75d577b0c7644
*59911d92dd0d0b6e77d986d39df0615cc3c576588255cd385f79d5adf8d272115e77637f890358
*45c1dc6cd1c541b33357cb208de575c42ba33434cb65819df56544750cfa6757e3b3924b547dae
*12d1a36fcc59675483165a66ff981cba69337b5e1ae95aadfef2c533514e2eae9cca5b934d6b87
*0bfb25b03763bb3dd6dc569b3395cd13386db95b8adb31bde7f58c6fbc31a3fb6c964d7d107094
*fb4d29f1c3190f4b70bbdf6c5cf2c9fe299f7bec83ca5e1372972befdcf3cfef7a1cedc88bfbdb
*2966a9cb2beb90165fe9ccd64d073df0cb03c89cd4d1396fafe65c9b4dd83bb0f7639aad9162f7
*fde5d56f66ea75d953a6ddf66a091f98a47b155efe77d6d1cdd6ede2434437d3a7ac673e37d1a3
*bf9b788bcb7cf45799a316fa4922b3d49a4ba3938d30e6645ba7b34e20c38cb7d1f4b1b43f9d0d
*6a6b956292fbc064aeaba1af7df24b5ed2e227a83231d081e22b0af94ad3b253bd4d3e07a352c8
*c6054222194c5805c352c918962b903d6b61c64b61b02205b393a9af851e23d7f76818421556cf
*7b173b98056982c1e0346883d8a398cdc2d5bb5a89f086135b21d4baf72ce4ad4b4c4f04fed503
*ad864592114b86dae2a1c2ec653c91d1eb534a34d90ff307c49708d1391a349c187d58b223d60b
*8533ec58808027473a7ad18a777422485eb8453c62cc535fd41718f115c7424651902cfc9e1a6b
*e23cb30d2e83853bc91fd975310266928e2684941f7f482b4f467194a3b4a1231f584a42dad183
*9ddca3c13a75b29125518e3a842451d8b89edcb1ae684f3b9ab190c4a809526d67f0e3df04a776
*b5a865f14ff373669562e634e47d709a025460fc0ee8246932d366dbeae535bfb63f40a60f675d
*0b27f76ee9915c12f18dc74167bba6974ea4bc539e7359a71b4345cf5702b29e44d1673fcb724f
*4b9a288dd39b224011ca3c814a2fa10d75a8fe422569b6cd15f1a115b5e8e1166abe8b6e94a3fe
*ca28e93a1a52918ae7a3bb1ce949513abe886a0e77144de94b616ab9a9606e92136d674c719ad3
*c394d4a53af5e94fe9c2d39b0295a8453dcb4a6f573e901a95a94d7d8a509d1a55a92e05aa53b5
*ea55655255ac6e95ab28d16a57c11a567522157a9564a858d19ad6afa695ad61fd6a415377bad4
*fcb3741cfcce41e3aa1d8eae558b8fd45dd55cb8bb72e1a86fe2a12b4b0e2b462396e48078dda7
*48f9aab7d861b2b0d49b2323c393d8ef288fb18aebd8f67e1ad9a48dc998f0abdf1f0baba96cde
*8c66abad5f9e6c14c1d33a6d84af25d0fdcec92f9c05d0618f0a26c486f94ab82e9669a48ded35
*fef13748e526b081cada2b5903d652d450b684b07c17cfc247270fb68a8987c456aa3606dee59e
*1086ae0c652d7ba8af452a965753a46e0ccbeba771b9eb943b4ca8683526275baeb782123364d7
*da1b2bc156978f1cd36ffe6c69db2c328bb0a23ce407f999b7f8e271bfc5fa1a76c419e18be2d7
*c0837caf2c859b3defb692c42ebcee84c5abd85e69d8b2bc432f0e35ac2cf7a21862346ea25df3
*b8510e1358b90fe36f20596bc84d1a90622f34a575794cdefc625193f40df27f6f9c5afbd858bc
*aa2cb09303a9598c42776566bd9b558a4bbf014a10805c9b577fc43c40ac494d6b698ce6d34075
*4c0af37699fd652682c96966e1e5769f57340998f1fee74b1b29ed47b4f5f368150c458bf29526
*74d5b25c1c0db7cc3c1aa88c9ec961294d9648ab26d3d6692b482c1d93e1e6d3b1bcec34e5468d
*d6507f9ad54e5d75ab614dd457c79ad6399d75ad719dd25be79ad721dd75af81bd682ed74dbac1
*36b6ae874dc921e2f3d8cdf675b26dea6c69eb18dac59ef6b51dfa6b6c6ffb73dae6f6b727e76d
*708f1b70e226f7b951666e74afdb44ea66f7bbc3e3ee52377aae9e639b3ee77d6e776b91c179ee
*dea179d760cc5e4fd37285f75eaaad54939eaf9970ec333ca31547bf127c2ca786f8c107a25538
*075acdbb75206ad9dbdbe62aa9e34bb4f3a0a33426eed276d08926f3cb4fbe673c8b1cb808942d
*848949fe35d39ed3e2b07e2b286f5862d4c235781d0c3ace6739e212a6f8c34f7ce4915ffcef46
*8ef1c452a67227078ced9ff7514f0257741267bcaf507abd806b5edd919b3ee769d6d2bd1926e6
*b922fe60eec6789650c77845b63ede0ec7125ff6a5e565f548f5beeefd935cafecd49ddcf0a94b
*1cc47d0f639295d9f3abe6bdca84972f2bfb5a74540ef9f22c3432d00b5cf9a0c7dde98f1f3d2a
*3f76f4c67beff176bf7bc613ee6590e236b753b379990bf8ef6fd676492b67b3cc755be8afcb39
*99322e67cc67cbdbe3e71eb061c6f0ccc98cddc1b3fbd59267386e36cd697abf9e24d5a78bf5bb
*927dbff993fbdd8ffdb207eadc8da6faf98c63ffebf75d7efef98beafc6d4cfffcf17f9cf86306
*fc97fc73ff3dcb42522cff8c42dc006eb0e08ebd88c374946c819668dec00fc808d025d4adc504
*6fe276830107aeeeeaebe28a42022790252a90824c8eb50a0df7126de37e0b68040dc108cd9ace
*0cb9784ecfe24c9cc06b00cd0976aa69e7ac09e4988b046fee5c5650dfea4f977a8a9444efe39a
*29c15a8fe9aeee942aacbed22e09d58bc8fcee023170c9a8f055d028eace6bdb4610f08427c0a8
*0876400fc91c25eb12aca0a6508a12b004af88c1ae30c40ccf07d767f1e40e00a32a0c512ff014
*89c5aacef272ecc11cae0efb50f3ec30f136500b0371e234af0fe750daf8708c384fb58accbcf4
*2ebc2cefe9cefe309180ce941ce60cb9100be93013f92be91e51f040d0d90c70f75aaef7d60c68
*daaced8ae9b89aef7e5cee98a4af6f680f066d6f166d4f9a948f9b3c6e816af1995ec7dfbcc6df
*5c4eeb8a909df249d4364bf13290b842309266aa766acada084a1aa7d1f17423bbae111bd382a6
*248a1b0fe4fd724e26d45133da711cd7e819990d1ee991feb2f179a24be18eb01ef93131f6af1f
*01d271e4f1fe02b22011e31f0d322199022115b2218f82211d3222c9b12fb4f11cf571a8243223
*177220cf4a233df2a93852a33e7224a92a24978a2451f2214d72e152b2252732322a92a52ed225
*69f28256721f6b32274d022275522779b2276b7212a1420fc9af73fe30adb328ceaed83112c7e2
*2789471763d0057fe5b188d22caa92f5bef12b0e10ecde901aaf4f2be72efc46c229e349e9524f
*f1180f2b91e32a3df0cf0a4ec5ccf2b1bc522c99b2284342e36430b8e6a705c3b203052908abe8
*78d8a71853302f11682f15a8b8ec27e5f8cc01bfee076b2e32c77008a76fb154502fa129319b51
*b5708fe406b30437534778f0303393f7fa12f138a417893107d74e01286f8486ee136708af1e31
*8710adbbbe300dafcccaf8ad8e6c282da1ac8654efca982bec08c60919f1f420850a4f6b09034f
*c4f46b376593389f8c915c0f128fe535a34c10bd0689a891ba9287eccc682bd18ecad490edca28
*1105130fd1e834b3b2fe3c93732b43af5bc4d3ebe4130d314ff45aebc2da523849d33b07af46b4
*f3c7a6532d4751137f33f5f8cec4b613f22a9309fd5202eb231581533d4113c64aaf0d2b13c998
*4c41cfb21033713e79ccbffa1342a74f421fc3790e604559b445d1113e05313f434ec828b1463f
*2f439fb0376d0c15eb45e2d6508fe849434514143dd1f32ed148a57047f1134749d43a3b914629
*453908604aa9b44a0dc308c7669b6c5119534ee56091c55c71988009998031f8aca406c934179b
*af19a96918cbae3197d142dd9205e10c2a91d1ed4c2ecd3eb34c6f2fbbde0c9c6eb14b67ae2b8b
*73f9d8d4f74244391a605119b5511b001d114b29d85252bd51fbd6e65295fe3231f06d2991b229
*14750140355443f54aa111533d0dfb2a75fc52352b5d234857355395e25335e20048751e112bdf
*f0e61d2113a174b57470951d7f550469a70116c022a834e36a95208172594b4256ab1459219559
*a5f52e87b5588df53192b523a7755b374256af155a67925bc515e1b2915867355b45725cd5d55b
*c7035dd9a345e1355ee5755ee9b55eedf55ef1355ff5755ff9b55ffdf55f01366005766009b660
*0df66011366115766117b65ae7d55d1d240024766229b6622df66231366335766339b6633df663
*41366445766449b6644df66451366555766559b6655df665619665cbd54aadb4a5d4f56601e920
*3856e170b667fd8300484297fe7c7668d5b223849668917643652f6993566fd68339a0366aa576
*6aa9b66aadf66ab1366bb5766bb9b66bbdf66bc1366cc5766cc9b66ccdf66c41653d68766dd9b6
*6dddf66de1366ee5766ee9b66eedf66ef1366ff5766ff9b66ffdf66f01377005777009b770e756
*2e954a6763767119b7711df77121377225777229b7722df77229b62e65ef201cb5730900001220
*7445777449b7744df77451377555777559b7755df77561377665777669b7766df7767137776f17
*0044b5777df77781377885777889b7788df7789137798397003ad7517dc2699f837397f77313c2
*00acf77ab1377bb5777bb9b77bbdf77bc1377cc5777cc9b77ccdb77b130000ac37fe7dd7577dcf
*f77de1377ee5777ee9b77e776292f0377ff5777ff9b77ffdf77f013880d9847997f7794b426d03
*c05c338256a97732d0f681213882bd367d17828241578231388335f86a05b8833df88341388405
*985615b85d0d3868a33781adf55b1918741d788361388625d8826958866df88631588475788779
*b887fb97848b754af1ce30a0d74da4d75885d835a7d48571b8899df86b6bb8829f788aa9786b7d
*f88ab1388b43188891186895f884470281cdf55995b881abf88cd17834a2f882d3b88dddb821b4
*388ee5788e6b8a80bb185c11777355782bbcb885ffe28d01f989d7d88203b9909f988e113991b5
*988b93188ffd1223c4788587d88c0de2b9926378902d39936d589139b99345988b1798880f3885
*4b78929958935119823139955939823df99561f97f41d9843517fd4e83581f96925b7997c37695
*79f997c53696857998258a801f168c45428cdf968d81b999b5d6979d399ab39661a9b99aadb95f
*99d76d913924101873bdf99bc1399cc5799cc9b99ccd99726bd9feb6826989b68859849de11924
*8e369ee95923e6b99ef1798822629ff9b99ffdf99f013aa0057aa009baa00dfaa0113aa1157aa1
*19baa11dfaa1213aa2257aa229baa22dfaa2313aa3357aa339baa33dfaa3413aa4457aa449baa4
*4dfaa451ba9f0302003b
binary ./docs/compiler2.gif
oldhex
*
newhex
*4749463837614e020203f700000000000000ff2f2f2f3030303f3f3f6060607f7f7f8181819090
*90b4b4b4c0c0c0d9d9d9dfdfdfe0e0e0ecececff0000ffffffd0dcd0160fbf4040f72350e0eb82
*d20f15bf4000f750580a01d1f700bf0200f7002e04608100d01500bf0000f704607b00d0cd0016
*1c004040e5004497b0d31115bf2e001881b0d31515bf62d160ee000002001e00004002d1007cb4
*2c0081d30015bf2304260100e800001c65f344eedcd3020fbf0040f7007c18b082d30204600000
*1e2ef36e81dc00150f80004005f47c9b8880001115000d040000f35800dcd3000fbfacc840d280
*80bf1515f7000018043c30008f01001130f33481dc8f150f11004000f4c8085b80811315154000
*0003a80400d10000bf000004f38000dc15000f4c609602d008001603600081d0b008161516bc00
*b4d2b08493d1c86400d01300bf0060f370d03715161c00fc6080800015151e4c04240200d50000
*bf60f35ad0dc21160f1d404040e4fccdd280ccbf151bf7004078d440d3d1e1bfbf11f7f7000804
*01d30006bf0000df60b6f3d001031600840058f3b08a03151100002400b0d57c0074d300cebf00
*1100d10120000617000000895400e0d338005cd3b021bf1503bf00402922e10316110044560082
*2000150301600000d0000016004e230002eb00000f0002520003010000be780082d2000c760100
*fb00000280e573d39700bf1100f740007cbe76d382fbbf1502389c78d3d2d1bfbfbff90a782900
*d10300bf2026001716004e9c0602d20002a70003d200003c0000d2002489f3d5e0dcbf0f0ff740
*4000009800b08200151500481400d28200bf150000000000000000000000000000000000000000
*000000000000000000000000000000000000000000000000000000000000000000000000000000
*000000000000000000000000000000000000000000000000000000000000000000000000000000
*000000000000000000000000000000000000000000000000000000000000000000000000000000
*000000000000000000000000000000000000000000000000000000000000000000000000000000
*002c000000004e0202030008fe000b081c48b0a0c18308132a5cc8b0a1c38710234a9c48b1a2c5
*8b18336adcc8b1a3c78f20437a7440b2a4c9932853aa5cc9b2a5cb973063ca9c49b3a6cd9b3873
*eadcc9b3a7cf9f40830a1dda534001070a922a5dcab4a9d3a750a34a9d4ab5aad5ab58b36addca
*b5abd7af60c38a1d4bb6acd9b368c116308a34addbb770e3ca9d4bb7aeddbb78f3eacdbaf6e8de
*bf80030b1e4cb8b0e1c38895f66d9bb8b1e3c790234b9e4c19ebe2ca98336bdeccb9b3e7aa973f
*8b1e4dbab4e9d36743a35ecdbab5ebd79a55c39e4dbbb6eddb6965e3decdbbb76fdeba7f0b1f4e
*bc786cb6c6932b5fce3c7070b400a203182cbdb9f5ebd89f4a9f3ef6b9d3eddbbffe73d73e3e2d
*f8eae4d3bb0daf80fdd2e8d9e3cbd71adefd55f8dd9157c5dfbebc52fee2c5c51f804c11f89f7f
*078a05a081fdcde7e083520d88e07e1376e55d805e316896864d71089587582d58218424969860
*52207e38e2561776c8dd84f6b9a8628a54e107237c06c6d8df795fd988a08e0712c81e90261689
*9a84e27198238e342aa65f8d4436a8a27a4d46059e8c3baa8765583e6a59e08bfe8968e498ae9d
*f723985e0689e28a4cb5f8258a53c6f9e6895cd938e79a69d209569718de29259e4c9229e891e3
*09591e83881ecaa6937e5138958789f2d8958662f6e9e79ee8591ae495ef35b8e8a0a05686e47b
*666a8aa79e51b949eaa32b264ad6a8fe7fc6baaaa91966bae5ac33da1aeaae9bc17a6a8437e22a
*95aaa8d25aecaf556a59a9aec7fe99ac9cc6fa2ae5b3bc565b98b4ce06eb229aa03d092cb33b72
*baa6a4a4827b5fa9e566b9a98ee2d69a64bbe32ef9abb5f446561fb3f09aa9a8badd365aefbf00
*079c67bf8c096cf0c1d6529b14b10837ec707cf052c5f0c314572ce8c41667acb183186fecf1c7
*cb750cf2c824f72672c928a7fcdac92ab7ecf2682cbf2cf3cc95c54cf3cd3823b698483cf7ecf3
*cf40072df4d044176df4d148536494004c37edf4d350472df5d454576df5d55867adf5d65c77ed
*f5d760872df6d864976df6d968a7adf6da66e7ecf6db70c72df7dc74d76df7dd78e7adf7fede7c
*f74da6be80072ef8e0847feaf7e1f40290b443082ede11e2903ba638513c09d038e5989f2440e4
*9c1f363903a0872efae8a4976efae9a887bed6e5a9b7eefaebb09fbe56e7b4537714038621b07a
*53b76fa6fbe6b507bfd7e7b9efdea603b86bf6bbf0cce3457c61bfb3bedf61cb376ffd5ccf976b
*38974c45cf3bf2da8719987fd55f6ffe7abd77fa9f5ce41bbf54fa70ae7f6df7b39f6fff59d9b7
*67e5a1b14e2762984ce28ff78e97bcf8c94f7fe34ad7bcfcc7bfff7d898102acdffd26a820f821
*f03b06b4d3a95e7440f12d6580ef03df013368c01122b0501cdc20094b78c1a4948f82309c9405
*2bc4bf0b164a7e376c210b41a81811b23087fe1e1c610a6d88c32216887ec08ba112e93343eda8
*2f87440cd7104dc8c385f95087501cd0118d18c5130ea943485ca21843d4440c72318b2cd4a10e
*aba8803276708b413ce11be3f723307e508263cca3952cd84220ce318a68549f52d8e8c63e6e11
*8b2bece210a1b8433ceaf19105e263b8fc14481b1a0a8583745f0f0b2845385e524f9544210031
*e9424742f294f9130c21af5899179e12959204cc2a39d94a53be528f9f43802e77c9cb5efaf297
*c00ca63075a9492b326098c84ca63297094c5bde728c93735c422cf73d69622489cf7ca4e2d856
*b6c671f39b50cb262a0b47ce729a737be24ca73ad7c9ce76baf39df08ca73ce749cf7adaf39ef8
*fecca73e9bd2807efaf39f000da840074ad0821af4a0084da84217cad0863af4a1108da844274a
*d18a5af4a218cda84637cad1807aa5a3200da948474ad2929af4a4284da94a57ba52050c802bfd
*dca74c473380976e25a633cd29675e6a53ace054a740cd4c4db5f2d3a01a55323cf569038ecad4
*c90cf52a456daa54119354ab4475aa5825cc53a972d5ac7a15305b9d4a57e759d3b2f6142d61fd
*aa57d2fa94b1d693ad6781ab5ab52257a6b8959e75254b5ee77a95bd2ae0ae64eda959055b56a5
*98d5b0857dca6093b258c626f6a9904dac4b1f7bd87cee15b08145ac6327bbd9c872f6b34df1ac
*686d3ad4d17696b43c45ad655d1a15ccca73ab9e45fe6c6a9912dbd0aad6b49c1dac6a359bdbdd
*e2b3aeae7d2d616ddb5bda3696b8c55dca682b0b5add82769f55e5e752730adbb37eb6b4d6f52b
*6e798b5de65e37bbd6d5275c832b5cde7277b6c995eb7637dbdbc3e216bb3a1def74a93b5ce352
*b6ba756d2c5b994b5ad912b6b633652b79f94ae0b9a475c0054e305cc28a60053b38ae3d6df083
*27acd7a5fa93c218b6cb002c3cdf0c7b382e2f95f087479c95107798c428d6eb5f4f9ce2167fc5
*c44a81808c674ce31adbf8c638ceb18e77cce31efbf8c7400eb290874ce4221bf9c8484eb29297
*cce4263bf9c9508ef2900dbbe2184bf9ca58ceb296b7cce52e7bf9cb600eb398bd6c80329bf9cc
*682e33fe957f3ae636bbf9cd708eb39ce74ce73abb990078ceb39ef74c8035cfd7ce800eb4a007
*4de8421bfad03f26808ffbccd82a2705d1908eb4a4274de94a5b1ac78ae6b10118cd5a365ffad3
*a00eb5a8474d6a24675ac70ad8b49fad5cea56bbfad5b08ef5a04f3d6303d438d59c86f1a365cd
*eb5efbfad7c05632ad655c661ae37ad5bb0eb6b297cdec66cb7ad81028f68c8fdd684f1f19005e
*8e0e8f01e7666ccf58db45de0ea5bd3d6672e798dce0ae71ba85bcee529b5bddd28180b8e5adee
*6d7f5b5fe77eb78c0367e3766f5bdffbd6b7bf653cec334f5bd5d5fef3b5017ee581c31bdf625e
*b7c3fb6d6e88dffbc713f771bbe78de38d733ce0f1de3178feeecdf18ca73be434ceb8c8194e71
*878f1ce4284f79c95ffef093d3dce5f19eb7c4592e6f7473fbc603e737bc838c738a63bac60697
*31b53badf070f33cca2aef79cbc3ec718dfbbce23bc7f8d3578ef58fcbbce6283713d76dfef1a2
*93fcdd51cff7bf692ef3b0b3fdec578f39dce18e75a0a3dde75fb77bdedbde729e4fdcebff367a
*cd6f4ceb342b1de14c6735d0039fedad077deb50bfbbd52f3e74caf738ed1d8f39b8cd1ef0bc67
*5dc726afbbdecf5ef92147fdf37b1f7de9559f7ac177def5af97bae557fff8be839ee5805f39ec
*614e781a1b1e024bd7b502322ff7d6f37ee7727f7bcfb58d7cd10bfef3cc0ff9cc97cf707fdb9c
*fa308f3eee5ffe7e1eba93fef6b20fbff8634ffecd3b3ff3e0377ed5519f7ddb373ffdc68f7fe8
*59bf7beb4b7ef6f65f7deacdaff6d1639efc00c87f35066d36167c8e367c7d577c00487d337773
*dd477764e776e8277ee63738d9a780f97781da277d80d77d1ce86d0ff880fe8777b3b780f1377e
*f4a77f194879d707816de780b9b77cbba77f26588235188002777fe5978334b883376876ffe783
*95e76f04786b88277c76a77c0b887a2d187e4c2880af0784a2e77624288133487696677fc5d784
*144882350885ecf7858f0779a6c7839ee7854ee87c1ca87e4118672b28844ba883a5178636d885
*4016866198695271840798800a387e558782383888762888b2077dfee7078571e87a4f986f72c8
*7759787e91887f66687b83e7646f9886b117889c28897f386899c87ea1587d68c879fb47867098
*8a10a06869d68ab9d6877e488a2a0882b2788643287686a888ba38858f88825cc8855347896c17
*811da8869268882097849858899b488b25a88887888bc92869a3788af5578b0cf88763a884e9a7
*856f4700ade88ac8868060678a80e88cf4078dd05887d1688b9448886cf88e37088756d88c6b17
*82c7a872e69864d57871c0a88ee8a88c93d68faa788e1328743488909717901a1873045038af68
*6d60d77fcfc890ad079062a87a88688d069990a5e8856ff88bc6788fdc978f72b88bba47918b78
*91f51885f787734f37fe7f33287f7ed78b81589037b97799b89227789036696e04900042399444
*499411d9748b077f9108924ca99315c88239c8940c898868688322b99490688ff22883f32884b5
*e79401f989f39893f0c87b9388955cd98e2939813d58873269952769921e599582b8936d588cb0
*179407b0977cd9977b090047a978fdb696101877545876d2888b0a0971a2488b22188ff4f8816f
*276e92f97dd2a8928f099788397d335991d7188c1af8820da87397399600f7963dd9912cc9912c
*6971fb4896ec487cbd187b7a393881996c49a992a4d77c77b78539d775c0a97c943995bc887d29
*789524e77dc1489a591983d7b88fc6f982347998b0099be7e89bd1279d85fe9980ca3991179884
*c4f893b42797a289986ce999294898194970097000b6398ea0c778ba396a98d786b0669fb9299a
*dd998ba8d86da3b98d86799aff798caa49875de96ab52938b7498ef9799e9af86af5d99fb1869f
*838964d0e96c65988e1fe9a0bd96a081b3a0f1299fd928a191f67f144a670f90a22abaa22cdaa2
*9d8971fc589318ba70b2699c060a9515e8983a6a96a499a30dc9989569a3d2e7a18003a2e7a671
*a009a1fd49a276d6a24efaa40d0a668e37a346b67d1bb86ff526723c1aa43dbaa3429aa316f8a5
*5eaa7344aa2f46da71549aa66abaa66caa65656a26671aa56d3aa7745aa7764a78edf99e092798
*597aa77efaa7804aa56f7a1efe715aa1817aa8889aa8b036a8e051a87dfa64932996ecc6a48a5a
*a996ca6c8cba1d8e9a7291078392ba909f7aa9a23aaaca96a9d2b1a9df36640f20a26078a2ed47
*aab01aab989aa70a0a9f470a642caa9428399f1c2aabbefaabad66aad181aa58fa634e3a790599
*9aca0aacccdaac9126ac8069ab686aac2eca75ac999ed8eaacdabaad8406adc44a6f3e06a56357
*9e32ba90dc7aaee83a6bb4faa1d22aa73976aca0ca77002aa9ae9aaef67aaf4ee6aded6aa83d06
*afe69a9e16d7abf83ab0048b65fabaa7b8c9affdbaa2ba8a8dd9da96051bb1122b6ceb5aa4fbfa
*a8c62a9f6bd895113ab11efbb14976b08997b0181baea04a9dfa4886f50ab22c1bfeb1228b84b7
*1a64ab7ab2dea99436dbb2389bb30358b1667ab19c2a6433abb3423bb476f6b2b038ad324bb44a
*bbb46f66b412a9b026cbb4523bb55ce6b44809b5fd4ab55abbb55066b57cfab349cbb5623bb646
*e6b5240bb6b84ab66abbb68bc6b370eab3a90ab46c3bb774bbb3ee59ab08cba058cb6341db642b
*7bb3ce89b6ae1ab8333a9c9b57b7736ab67a5bb2590ba9948aac0dd9b0903ba2b329b0247989dc
*f99d999b8de029a488cba68a1ba2618b6858989c1a0ab99a77a30feb88030a9e01eabafb899ec8
*f8b9a5eab6840ab7c53aba87068cfc09b173c88c264aa21b398da9f995bd7a937f4bbba116ba31
*9bb684c97f9c797cc4a99d6829a2f6fed8a5dac7ba60faba66c97abb5abc027ab3aa39bbcaeb6b
*cc8bb4ce2bb994db8cf80896a9ab9f801ba01b08a67ec89592b9bdff5a88e0fbb0c69bace50b6c
*e7ebae3bd6b7e7f9942e8996c3ab95f07b9c5777960becc0faabba69a9bf541797ffeb6c01bcb7
*03ccaad3ab9650e98e0a9ca49019c156da96efebbfdd3ba26d9693c97bc19496c18ccbb71cec95
*16b9abae5993e1fbbb4e797b89f898e1797ac847be59c6c28febc29f06c3689bb1cfdbc1185988
*7f179339bcc310ecbd0d1c9919baba436cc1465cbb77cbae792bbae98b994c5cc3634c913be98b
*1b1ac256bc956977a367ec96e53a8bcbbac5c16abb8d8abbe0aabb6cb9b107ccbe7e9c96fe4d98
*ba510cc1811cc4846c8c7499866139c833899ab22bc4745c6a481cb77aecba7cecc1402a828919
*9cda58894fb8bd1e97bdd189bd3089b28cdc838e5c962d1cc98736c9b91bc6acebc1b23c9cbb09
*9cb3e89c2bd898dcfb705bda9cf49a7c31e8a9001abbaa5cc4ac2c69ae9cc7b0ac65ab3ca9542a
*cc028ab2a77ba0c73c6ac9cca404ccccc64ca3f78abcdb5ccd8876cdaafa65cdecccf66ab81609
*ce8b6ac79a8ac7d84ccedf7c6dddfc9b87abce1dcacea7eacee36ccffc8caee22cb7fd1cd0dafa
*cf952cd0060dab04bdcc7216cfa677d00e5db6f83cacfa0cd07546bf9acbc3e1199b0fbdd19816
*d1d1fac5cdabc474468cc4bcb93eccd01c7dfecc092dd273c6bbcb8a9ae59cd25bbcd2517bb9c4
*ec75c14ca01a6d9abe2bd31c4dd38d3b761f48bc9c7bd1d7faa21a6d9d3e2dd3402dc31adbc10f
*4a87316dce4b5dd5abe8d1dffaceea497c703cc21187d256fdbf4dbdc15bed82171db0d48c6553
*1dd6883bd63a96cd9dd9920c78a06b7d8760cdd6b4ebd6ef6abd5b798b33ccabbeabd4786dd07a
*8d6370cd8850dd82724dc148cdd3733cd8ea5cd83776d8e5e8985bba997899d489ecc8750dd96a
*2bd93646d935ebb9295cdac298d12608cd3dedd9918dd5135dd06f46d2461dcda89dd6acadd2ae
*0dd2e8cbd20bfdb8dfdcd9b72db6a05d63a2bdc24cfadb771ddc6c3bdc3456dc2b4c75cabdd1cc
*fe3d63ce1dddd67d69d32d63d57ddddc8dccb93db28b9bc435dddde47dc4df0db3bb3dde3c0cc9
*730765c9ddd05afacae8fb73654d6a531daa486acfd90d01d54dcb27cb8d55aaa3bb6c75d2ecd8
*b3cb9b846bdb44e68dff5dd28dbde062a9da0afeb9fbdddfc21bca4c26db45ad7505be9eec28d8
*f56da1380de0edbde1e22be2366de2c03db4159ebf5a87c576add94417c7bd7b82207ee2222ec8
*44cdbf9017d340acbed5dce2189d9d4e3c869d37e2a698caa94de368ccc0487dd2d46bda7fcdb1
*4c6eb9a5adc924ced9efbdb442aebdd866c0977c8b589e7b120c9d5adec8ccf88306acc81d3eb9
*127ce03d8ec354388d9919d895ebc25d0e7f8a9dc8fe2e5985e4e98669ce93dbb9c67bfed884b8
*e26a0ec28cad64889eb3796ec6b61c9b36fce77076c676599aa62bcb7d6dbd751e79622c90133e
*b991fce87bfc884f4cc375dee82f8eca811e7a0e78d698deb0969dc55efec3861ee3417ede472b
*c06f9dbf64898193ced7c68de65758c2215c92017ed49e2eb02de9e35baeb4a4ae9191ded5343c
*e530bebf5e0d972fda88cf57c48d19e2907cea54fcd24caeea2d1bed88fdc1994ebc54a9ed328e
*eb0e6ae9adbe7d52bce77c5ec06b6ee56d6cecb3acd3d8bed3e58bee3a6cbf087ec2ec9bd906ce
*ea362befc5ee88bdace2edab9e58cee31f7ec325e9a50f6ae7abadbc025fef26e99ba798e4ad0b
*b023effeee1ef9e41b1b819648d75149a012ce9f9789e48b0cc76dcede14aeeb4f1bc3643d9086
*e9e0dabb9fe678a1e4ecb7b03bdbe556f410dfda5d6cb1bacdeb7b3d6ecf4ed5727ced434cf416
*7af4280ece1d5f68e60ed86abcf16a6df5f21c7131aadf387fb53adfeb9616f5301adfca9cde6a
*cbf6d07ef65f4bc90a5dde780f695b9ff77c1f687bdff7803f677fafcdffcd9cec06dd6e6ff39d
*5ba7e82cdfb979df2d3ca5dd066a834feb2469f8b8fef23f0feb40bec49919bc100ecca53ce025
*dee98d0fe7005f86ae5edb32a9f90dcef9d84df7676bf7bcfdd52e9ef5736dd4b239e041afb255
*4cd4a03fa9aeffaa265efa4ae8cdf8eeb8290ee5d25ef3cbfe3f8c729f6595afd6719ee1f72ec4
*30edb0eccdbb6f7eebd5bee3a88ff2d35ce3a17efb145ff1efbeeac96f6983efdfc4fffed21be5
*c8f8bd9bbeda677ef2477ebf5ffec4a4dc9db85c9c000141200000020d4220785021c2820b132e
*34f850a1c4810d2b3ab47811624482191976b4089222c68d1a39923c597264ca891e5bbe2c1953
*e64c9a350d12487040e44e000414fc1ca0a041839f0a62baa4f98026cf903b398a3cc8f469c7a8
*483552fd88d224c4955ab97a5c19b6a953a71fc582cc9ab66c599912298a3d8ab42bcbaa30b7de
*9d5b11ad5ebe66f3328c6b97eedfb95d0983b56a53f1e2c5387532ede813a850a23f8f3286a074
*e6dba62cdd66fefcdc90f3d4bd80afca4d8c59b5e9ba76b1b23e0b77ebe8d9a95fb3c6bd5a776e
*daade90a7ed83bf7eedfc38913ff7b5cf94cc79023170d3ab4e865c69a03b72e8c18af68d063a1
*d6cebe5cb76cdfbdf3de369ed6a4708c9cbf8b673c923defc4f3d5a7df4d1efef8d4fbfd0b6cce
*b99ea0a36c3a9530b34e25edd2938f3b98a4bacbb7088bfbaf2d97c833cf36e1782a8f430bbb2b
*28b90a25c44d3ffc20f4cb3ee42eec6f44055d8411c09c041c7032e92c3bb0bacd160c0f3b1eeb
*0352302163fccaabf5baa350c2d006eb2c3eab4484b14112e97bf1ab26275cd148222ddc72c400
*9d934c81e82a332ac7c512dc484a067f7c30c834417c12c92aaf7bfe73480ce5848dc50e95bc92
*ce35b59c123fe3d48c9050404bc473ce22a754114b458d84b24bd5be842ccc310d4c13c1a5c6f2
*ecca0cb9f3d44dd30c4bf4d0407f3331cf3dfb625555269fa2704957870cf4b0455f15f2bccf6a
*3bb5572a81d370315b7d9554374a99b2b4401c33d57147b63c4c11ced2a0d5b52ff410a593543f
*87bbb3c3e0a0d52bc46f4303b5b496a665cb576d1fdd8e51c4a85d6bdc506fa597db52691d3458
*628b9d74460193bdb14c66cfac092df71abcd66038f11df5de83bddbb53d720d2db44ff74843ad
*5cf0a6faf0ddec5e4b97348ceb9d0fe174cd35ebc858d14559bff7425e19e4f71ce577b5637902
*984cea0876b266ff26fe1e39222b27be97669f8f7e796691c35db7d33a8bcd98e8538166bac573
*a54ef2e87e1f0393c08077560ccda705d51ab348b93aaec7b2d7ae9950b5bbb47ac7b1d73e9bed
*926ede29674cd16eb6e36bed56ad6ea1b3641770c37fa66aaf61b78c9bcbc2f915fcf083f01649
*ef65f9e679d3c625075bd21637e73c74cdc50d6e33d1cd441de9d31bf3b76b1b754ebd26b157a7
*bd76db6fc73d77dd31a31c24cb05c63cecdd8727be78e38f471ec6de9f7b7d6f87344d3e7ae9a7
*a7be7add9727e8f7ce65e78fbfbf158bbc2d17c30fdcf4b6cd277bb5efcd465f6bd063243fbff5
*bd6cbd52af611f5878f5dfaf7a7ec79dd5d7feb66536ab0d2b69281b1ac4fefaa495f8c5e53032
*43d70021572e052630683679db725064b47d29047b351293b280f7bcbe119080ef0adce760c641
*b93d0e7c7153db01fde7970bfe296bddf35b0d33d83688d57069297a61d33478b11b326c231fd4
*5eec92824361a126852d9c50036926c5f461296273c322b0e646c57a75914f599ce00d8568aaa1
*79517e5e399be070920036b6d18d6d4c62fe20f2003ad6d18e7744534222d832968d8e457a5c18
*bb04a7381922ea36a359a1961a95bec555cc8829ab0acbe6d7487b59d08790e418bd2839c5c67d
*2b9210442456faf826424a925c474c008d4078a9cb9130267884251daf564a198ab28027831702
*5b6534a9c5eb59bfac0b5902fe882b301a9162bf222504ada534632ec85ddfb1a5b42a88c6618a
*b1930e0a5a2e05f4c39145b36adf5c0812efe7bc89242596766c4f4a64e6b42a5e314fd8ac9813
*93a9325eb1ea8a19caa422f9b71f13554b9d89e2a23e1908cf5979b238011d2289f0694f77d2d0
*3500b5984bc4d9bc5696d39ce7d424410d4ac676fd8a3ddf23958a1abad1d3ac2a9f07dd277cfa
*29aa7c158d700abde502ebd941b8956aa41a75297a3e66d2e1acf18d3f4d401c8327138c66b49e
*3b8414411b864b96ee1288ecfc679b780a2b77d14d4fbd4211b8105a55acfed294094be97f3638
*ab9212339d4c9a19d1568213550ad5953389a5a2484ad248feafac5125e5b61e78fe4f36f968aa
*5f7c249156fab87516f189b98ad302a1a942c03967aa7375e94c0b4bcf984c34845f5362496029
*579c3a6a5d6a026d62edead487a24aa9908d999d22cbc86a0eb6981b62eca35c4bcda789689163
*0c6c25a17a576ce996b2bd4d9f655939428bdae48e7e422d6575ca576f31948321c5933b655550
*4e6d2755b78d2d16677bd686015682a615286f99ab1e975593939ba22d5461dbaa4346b4b911f2
*2950dde8d6e21a5796c8ed6cff3e9956a6d6525e08d4d57f039955af165297be155443cfcb558c
*81d29b985470829d89d2c56aeca9fad562e11687db2309d8bd9d0a99c22c0c4970c9a8ade3ac68
*54a087df993a749696fca421a599aafe879e85630fbb9a21254c4d07cbd4c521be6a830f9663ea
*c218c880e2ef46010c52695df2c7493323115d0c5c1987345c1bbb3244842bc2ed2dd17a02945e
*0cbfaa62894dd38a61559f91f95b4ccff5109c2f7e3342be6cacfa210bc5c425f39c058b66c921
*b560698b13e400cde69a424dcf5ba3117df37ce828f1b9b1e65dcaa05d285649139a718ec620a3
*7957679cddb9cb9afe59f43ee7b351e7aed465c334a8ffb365ccca51d5af8675ac652d6b56e36f
*a8b3c675ae75bdebddd59a9c8be675b0853d6c62d7ccd7291e9cb3a0c85160c34f85253e9f611d
*98ea68bb0f7d1c2e18b5e55ca134d68d99b83b369e933ded65e7b68a2a7d36b4db4cd387fe2d17
*836836995ef93843ff5a93aa3435a3c424d86e2845eac065fe77a5dfbd5faa84fbd3e6f6e768f7
*5ceefbac9bddd565ef35bd4770ed16d87ff54ed290f1cd6c75d3a7bd8944f83551285691f3bb20
*06cf6cc8272d6d7e6677e3e856b923597eee32e235bde2ed4f23dfc64730b338a993bc65b607ce
*ec9e0330582877f52cdd0c1e715de49829c3f17ef5adf1331f95742306e40e7745cbac2b88eb66
*0e3860a41b64ab138b9283fde8920119634136f5e127f93a376738e5ac7bec9b6b77e143907e6b
*a563f89d8b45a6901b3c78c1bfb947b4512505ff762761721de06a11709ca5dae20573bcb564ef
*2ed33f8e71ee66cdcfb7928a2f236874b556fe50983bbed5dedfca59f55677f1641f2f596585f8
*40f75699a7f131e377cbb4817a57a4f02c99683b2f1ed78e9d98b67c66be3f3fd079b51ebd1db6
*395f5dee1bd5d7774ea1ed6806b14fb2d3e6f7f0725a6fe0650edc00e3abbd66753e4ae7496498
*2336fa7db5b9c7d98cedb12dd4a3d34fae989f2f98ea371bf47dddbea49a3c01bcbf78a92df083
*a88e6230fbb3123e59b3fe81bd0f53172b6b3f987abf01c4bd24cb3b79123ac9522ca5e23eab33
*970843b28ce8bf71bb3e00843ff7f3ab10bcbfd7f2be04143fdf6240a372aedd4b20426230186c
*390274ba0fcc3e2081b4f1eb40f203c2862340d89aac7ec3bc131c88fddbbe0064c1f8b3c017f4
*fe22e3a332baba2e09543006acc11c443ef503ac45423d3134ad9b0ac2bcfa2e0483c2e83ac27c
*49c395c1c12e1a0927dc36bb8abdd9abbdf72a320f04152a242fd793c1c95a4037bcb7fbc042e8
*7b2e047441c83bc47c9b418a19412e1c17403495a7fb1f2f8ca891ebc3bb8a3d790b274ecb1b4f
*4b39071cbd6801c178f22f059a31568440936b310fe3c0dd3a2554ccb168f20ebfe32c5d8a8d76
*9343d9c23c1b233c0824bcb13a9109f33c4a24388f49b2535caacd6b276484003b0c3aa943aba6
*b3a15b6c326b8c31aa43c53fc2c6f0abbb2c4ac440e44579c1324c1aad03832e7d8b19ac31c328
*62c6a90b24626498a74bb81afcb629933b37b43126fe1c126aecb39cd3b6812c425ee3a2a831b3
*6cac9d842c36d6e11afba128717bc2c3719b8234c8fd434847e3c83d6c488e7c48c510c88cd445
*ebe9b66193a28e5c43ce49c990144951ac1c524c3ab6f9234df33662c3c8f8689f8674c92d19c9
*9e04caa014caa19c4698f41d99e43ba254caa5644a50fbc9a684caa894cae879ca9ed99fb95b49
*f61991ad129fae1434afe4ca471c8f9d3c9d53a3b99a1b9e9cbc09a3649ecbb2b5d56ba214ea38
*8d24b79563b89783447b7bb2b0db4b42ecbd96db2bb01bc24beb31bd64a12a73b7833421b6abb8
*e5a2b7ec61cbec414ab87ca1133a97c3f21bfa1b3a4ba34bc25a3a90fb215cda228cb4ad31cb38
*b57cb7fec23ccd98434432c4cbba72328ffb2a82ec89c85c252e2bc5bbbc4bf20148797ca9bcec
*4c1eacbc49fbbdd7d4cd099c1ad454cc0cf3c14c8cc0cd7412da1bcd16e4a593b34d4543c122d9
*23c79cae69034719db9741c2c5538a3a5e01cd78dc24323a264c3ca90b03cdb3c33cdebba479f3
*c8e61cbf7104a2f5113d780c3bbca33205ccbcea2cca88b4b3893cb8c22330c023bd56bca0d274
*4e111bcf1e73afd36b3be454b82ac4d01ca4aa085dc9f504c707db3c78b4d078ec30a8d8cfc703
*d10ad34fe073982174d0aa6c40dc4bbfde34c2184442cf0a43d983b84f94befa3c4b6e0b46964a
*aec38c4bd58abff172cdced4bddf924f9ed2c40344bf35c9fe989724d04e33d0dcb43d46044e29
*0cd0677c3db4cc462e1dd2783352540b52d6ebbcb0644326ccbdd582cefb3444353ccd38f5cddf
*a23175cc329a80d1f492ce2d5d412fcd51364442d18cc3236d53695453abcc50a5532be35438f6
*d4a6d2133838fd2bd8d4bc4f61a6276da629d5d3eb9c4cebb3c13e1dbe24fcd32865cf27032f2b
*6452ef9ab9ad3c53189440e27b55ee329954fc4d4a9d43df4bc4d2f490e0bbd073dbd30c13d512
*2c54de62d57872ce5495c2084bcc630d2cf8b4cfe47456f5445469a43c4b6ca63275d2e6d3d56e
*cdcc40ddae21ad93601d433aedce403cbe4a9451223c291edd516ef5cb25bb393f05c529a4d5fc
*5ac47a2d440ffefc279982566db5bf8fdb563e74504bbc481625c8014db44ff53f61f5c749d4aa
*fe9a4d270b30c563bb049dcd5c64c7e74c4148f450466d54c8fb44c364d76859a6c81b469215d4
*5d8dd078c3c54c9acb6bc42d896d5385fd1786cd4e3e85a8d7e3d9d8004ff67ba45ab45485e1c6
*2bbb984d2a4f602a331f5aa98825d3916dd223a395662c51775c5ac9db42b352cdcb243110694f
*60442ab52b9ac8f0d42b9d495c4b54a4d943cebb436e2454a2e327359b44ce6cb4ad65c85d73c8
*f620d7594b5b52f3d14cbbd556d5a049155caba25b55cb5b54aad25134dba4ccb5be859ac13cd0
*3735b7c10d5c470d23bb7cb596acacb275cb5fcb59bc1535b2641cfed25d1db33c5dd3455b17d9
*dba974ddd7855dc369ddd8a5dddab55de5f1dce19adcdbe5dddef55d44bbd9c6a54cca0da294d4
*36e584dc8655de28b9b69cc4ca48f34ada415db8a1b5dcc5cdb30d4e3fe24bbb9c4be3cdcaeccd
*d6bee455fe0c20350d38ce4bcf9ada5a03324def6c50e50c9dd9fdde1815cbe504b8bf2dd2c39d
*df306d5faf13d19d23cd745bc8e5db33bb1533bb4da601865fc9915fcd25d6c59c5f2a4adfcacc
*5e12cc57349dd784fad56b255220f5b9bfe44c9d5be0c341b9c49392edacd5fabdda6eac47d66a
*229485ba6d34cf7dd4d63224ce6a0d5aee14516aade17e145ba01d51229c60954d5e12b6de5633
*6190b547938dc6666cfedf444a8e5e52d1899d61a2ad5095f5581c9ec051e2d01bee61267e30c3
*fbb67f9d56c322634ddb3b55bad71b74151afd14113c47ff552e7f4cbf39d6ba117e546b2dbb28
*25dc6e314243ed633cde5faa3ce2b7dc269da5ce67fdd3fc83b87794d662edd29bca5a338d563e
*3ebf1eb457affbc50ebe62f71164b6a93ec898ce2c0de14556bc3b1ed5b715537ca54012e5a14a
*5ee288451c586662f78c59ca2de2e3b49e50ee5e2d35561556d65225473d8eda235c561fbbd65c
*cee37b14beff548eed1ada79fcd1e554e6414e9efeebe544a6ab5ae93e4836d59acc16635e4166
*fd582ce6e11d3cc651bee08a83e5e2746160cc6045d657342e64d0a56152feae63c7a445416c92
*736d2973a5e339be3732ddc1211ece3515424036e3cb0baf486e3ebfb4610433e888ae6650ae67
*64bbd172f51688a55906c53075abd838fbba90b545a365b278aed433b62e8b53d753d4cc725ec6
*93b5d8943de8f20ae72caedc6bbe688a6cdb515642e852487a64cc26cde1af05a52ad3c6ba425a
*19565a38bb307615e5f6d4c155155f2d76eaae356a2643e0f25adfa0c6da4f5e9b06465cb06eb4
*faeb5faf7e6a02a6b4157edb9c2639035edbb396db4b56353b2cb68a7636fd1ddefc75eb67265c
*4e365ce0c452f0fd32bbbe6bb2f66007065508166ce2fbebc2555b6b0e5dbe76ca9d664ac45eeb
*dde536d5159de9ed6cce1e9ffeea5ddc9814dedf35edd3466d9bb1ecd466edd676edbb59edd796
*edd9466dc3a6eddbc6eda6b4eddce6edde76c9ddf6ede0166e5d03eee136eee3a6e7d13ecad246
*eee676eee45e58e67eeee9a66ee929eeeac6eeec3e9debd6eeeef6eeb08eedef16eff13662e56e
*4bdd25eff4566fade1eef576eff7566df3964ce986effab66f3a93efdb6cb5fbe6effe668cf6f6
*ef00af6f0017f002576f0237f004ff6e0457f006c76e0677f008776e0897f00a1f6e0ab7f00ce7
*6d0cd7f00e9f6d0ef7f010676d1017f112ff5d1237f114b75d1457f1167f5d1677f118874a1897
*f11a274a1ab7f11cef491cd7f11e27361ef7f120df352017f22217ede8fe5c8c36fef225674a22
*67f227d7332787f229a71e29a7f22b471e2bc7f22d1f1e2de7f22fbf1d2f07f331dfeef026f333
*3ff2e04d729e46f3369f333177f3383f1a3897f33a97143ab7f33cc7ddfcc64e3df7f32e37f33f
*17f45e0bf4413774dbc1f34357f44de3739c5df44797dd544272f486f44a67e0c4eb734bd77463
*33804ef7f44ffff44cdff451f7c99a10755247752fa1090338f5547775f820809950005677f457
*b775f188758100f54e1788596ff55b07f64939885def755aa7ef6047766137086287005faff564
*87769bc8f565f7748370f6638ff66c978969d7f56a2ff65fd7f670bf8985e0756b37f63517f774
*d75372378083b8767457f7783f2259fe3f774a97f77b07107a07777c47f65c2f8a7ffff77abf5e
*7e97f758dff583df7782bf750260f88677f8874f788597774f6b77894ff783c77803a07888e7f8
*8ef7f88f07f99017f99127f99237f99347f99457f99567f99677f99787f99897f999a7f99ab7f9
*9adff89a30000090af9ef7f99f07faa017faa127faa237faa347faa457faa567faa677faa787fa
*a897faa9a7faaaff7900a878e6c8f999e8749e3f80af07fbb017fbb127fbb237fbb347fbb457fb
*b567fbb677fbb787fbb897fbb957fb54fa7abb3f00bca7fbbde7fbbef7fbbf07fcc0177cb92788
*ac8f0981ff1a56a7f79db74d1376fcc787fcc897fcc9a7fccab7fccbc77c9e90749eef88fecdcf
*fccf07fdd017fdd127fdd2a77cc3df8877d75dc597895967fcfc36fdd897fdd9a7fddafffccdc7
*7ddbd7fddde7fddef77da6407d88507d2e637d762ff6d7fffde457fee5677ec9cf7d82f0fce697
*fee9a77ee6cf7a6f7777c4d799e2a7f672777dafaffef017fff137fde7e77cf247fff457ffd3ef
*fe72fff6ad8780833f7ef05ffffab7fffb87feced77ffce7fffe47ffeb07080302074280a0c000
*01050a072868d040a10208080b4a1c48d0a04000090e00e8e8f123c8902247922c69f224ca942a
*57b26ce9f225cc98271378a4d9d1a6cc9c3a77f2ece9f327d09c06285abc7830e1c2860f154a24
*4091a8d18c1b8352ad6af52ad6ac2f7172d5feeaf52bd8b0625f0e2d58f4e951880c1d426cfaf4
*a9c082070d68e438f62edebc7a7d76bdb9f72fe0c0824996ad589862daa46c994e7ceb786eddc1
*922753d6da5763e5cc9a37f33cec582e42b54adb36fe8c58aa5dceaa57b306791967ebd8b2377b
*fe9c58c1daa5111b43ecdd1bf5ece0c201bf1e6efc38deb2be978756acdb6dd1e8033123af6ebd
*6af1ebdab7f71c2a3d3a52dca31913286ffe3cfaf4ead7b36feffe3dfcf8f2e7d3af6fff3efefc
*faf7f3efefff3f80010a382081f489b6d872092ab820830d3af82084114a382185155a78218619
*6ab821871d7af82188218a382289bde556228a29aab8228b2dbaf8228c31ca38238dbe9d58238e
*fe39eab8238f3dfaf823903832340091451a792492492ab924934d3af92494514a392595555a79
*2596596ab925975d7af92598618a39a697b89179269a69aab9269b6dbaf9269c71ca39e7950a08
*70279e79eab9279f7dfaf927a0810a3a28a1851a7a28a2892aba28a38d3afa28a4914a3a29a595
*5a0aa9420204b929a79d7afa29a8a18a5aa1a6768e7a2aaaa9aaba2aabad3e8840a9a5ba3a2bad
*b5da7a2bae20c29a69aebdfafa2bb0c1aabaaba9c21a7b2cb2c92a5b22b1b22efb2cb4d14a0b6d
*b3d35a7b2db6d9b65a2d8d0040e4adb6e18a3b6eb6dcfa06528ae02aa02eb9edbafbeeafe6f6c6
*6ebaf0da7b2fbeb3cafbed72eafabb2ebb1ecd0bf0feb9022bf46f47f31a9c2fc30d3bcce2be07
*f7cbefc1e05a4c31c1eb62fc6fc5126becf1c3218b3cb28611039c30bf0163bc31cb2073fcf1cb
*24cb3c33cd099a4cefca1febfc51cb3bf77c31c8350b3db4c83727e8adca1ebfbcf4cf145b8c33
*d1514bedaed1e736edb3cb4e33ed32d2537bfdf5b837f38cf5c901270cb4ce046f9d76d060bbfd
*f6b2264708b58a74c37d37deb8ca0da1dd232e9c37e081d7bab7e0851b4e34e1872bbe78c88933
*fe38e4ef3a1e39e5955f3bb9e5996b8e6cb50878fe39e8a18b3e3ae9a59b7e3aeaa9abbe3aebad
*bbfe3aecb1cb3e3bedb5db7e3beeb9ebbe3befbdd31eeba5c10b3f3cf1c51b7f3cf2c92bbf3cf3
*cd27bafe39f4d14b3f3df5d5a7e810f6d96bbf3df7dd7bff3df8e18b3f3ef9e59b7f3efae9abbf
*7efad61bce3efcf1cb3f3ffdf5db7f3ffde2b90f3882fb3f4ba4fff2d6bf00266b48047cdb000f
*882c002af06b096ca0b00c5821fc51b08216bc200633383f0b3d1082116408853428c21192b084
*26649ffe26d4410f024b82125a210b6fe5c208c13086bd62200d7563c3168230873b2c600f2154
*c31fce6a860e1a62ad8e242a1c4a88893cf4a1b58ce4a9204ecb890c4262124168c54d6dd1415d
*ccd5179783c5169aa853549496111734c6226af18c5c74a317e1784339f6668dbf0a221d759447
*6585b18e3a0c160301a8c48514492d823453210919c821d1fe518a662224220b39c84546b28f59
*7c901d7de54647e2513c898ca421c3e848502a527fa384962533d92a4ab2b28d8f94a42b5b794a
*13c5d29590bca5206df9c863a5d137aad4642745d3491cceb0980a1a66197b7848d1442b957f04
*24276b09c95ce2128fb99ca521a7a94b624a7397de34561f7f79472d26b39cc25c4e30d1a9ce73
*b2332968a4a33857e5c4794a939236626425e1d8ca5b7a739ffddca30c5328c66762cb98c8b411
*3a07b9ce32b6d3930a45a5407d49d027d2f29ed554261565f9498bbe729b18d5263f2d89ab2fc6
*73a4e64cca4119aa52069d31a59e0c57174baa2a7a7234901ccd6647b159cd5d7213a7d4fc271f
*e128d38036d4fe85cb5ca93113e452a326158d1155c8505145d37b2e3291565422921634ca87c2
*f2935c15a9adb618d5b07ab5ac06dca4591b99d6509a72a3ef4cd0583fc8cf19811595678c2b11
*674a45bc7eb0ae28f2ebfff63ad1bcf252b084ad6210f97ad853e150b18b65ec09232bd9c952b6
*b2e47b2c1a2dabd9cd72b6b315c42c6843cbd2013856b4a6951e914a7bdad5662eb583652d6c59
*e8dab698a6b6b6bd2d6e73abdbddf2b6b7befd2d70832bdce112b7b8c63d2e7293abdce532b7b9
*c8fd0e740d60480439b7bad6bd2e76b3abdded72b7bbdefd2e78b98b10f9188490d40d2f7ad34b
*dc8ed8d623ea7d2f7ce32bdff9d2f733a5b9ad53a6fb9cdb86e42dfefdddad7b21f091828c8422
*052630483e33600018f8c0020eb082ddcbe007b397c213e6ef7f112c60d354b8be1efe3088432c
*62e1deb7b613d12f6df9fb940e6fd8c0bc65f1855bece219d358c60f5ef18a2face31a1338c239
*e6718c751b64ff7278c4463e3292935cdf12dbe6c4e6ddaf8a710c6400cb38c641b63291a7dce3
*2c5779ca43fe728d879c5b31f378cb4a3e339ad3ace6e532d9334729af99ce1b6529dbb8ceeded
*b296cdac6730db99ce3bc6f195e74c66dc0ebacf855e33a213ade844b7f9306f46315308ed983f
*eb59d22dc6b2a12bad694adf59c1618ef2a13b5de4495378d1a63e35aa8fdc68b43839ce501635
*8d333ce62d5b19c239fe6671996b8d6b3a7319d3b565f0aea9fc6b1f6b3ad5c63e36b2c5eb14b8
*5c0423f97d728a616de6400bd9c59816f384b14d6a4f739bcbd3c670b1673dec6d9739d9e63e37
*ba8b5b628b9ce6d9ae8ef6b8fd4c6e41db98da95f675b98b8ded0c1f1adfc21eb5b7fb9cee8113
*bce0a6b96f7440e3eed9467ace7b9e37ac61ec6d7bd799d3fa86f8b77bcdeb7f777be3a13638c8
*437e6c849fc5d9706678442cade13cabfcc62ca778ad1bbcf15c775be22caf76bc352ef29df3dc
*dc4c7e4cab514ee804df7ac04286b08e45d2607e13dddab65e7a878d6ee1a2531dc11f573ad49f
*5eea9e73bdeba6fef95b1e0ded867bbdec663f3bdab3cb1b06059db4af4efe3bdce32ef7b9e776
*22d11dc8c2dd0e6fbaf3bdef7e2f3b42ee8ef793eb9dec7f1fae490eaff8c5cb17ec8ec9bb9c19
*2ff9c9537ecd135900e633af79cc2b00f26faf3ce8432ffaf95e7ef3a6ef3ce1233f7aeb4a7df5
*ae1f7de94daf79d4433ae5ed6dbad5b57efba4671bebb99fb4ac8fce5e60233dc0adcffdc7fd2b
*6b7fbfbef9928fbdec39eff9bd77dce6e106f8c3679e69ed7338e6dbe77ef2732e7ee793ffefd0
*8f3eedc76e7b69fb3bfc300ff886f9cc7d8c67bbe3f1b7bf6faf5efefd1ffefcb24fffbb191ef6
*655cbed95ffb919afc15e0fcdd1b02e25f6f855af8f19f04f69cff9ddef40920fe715a04be9fc0
*591cc5491bc4d95b02fed6a0fee9de049ea0d955e0e601a0d0b5dcb4e1ded0e1def1c59af2cde0
*f8919bfc8d60feb9200af660d7a9e0ec5de0fa8d9f07725cbd5d1caf45e0021220032e210f3aa0
*0f4621c80161e6b160e10de100e299133621175a98ad29a1025a1bf0c1e0073e21c649211a121c
*154a5fea7d9e01ce5cf271200de260708d20b0c1df116ee11682611af621a33945f405611b52df
*bc59dff585a0c7959bc5bd18f3d999b6dddc1336a21f4ee2c8016220b261edc5e0d3f95e0c2e1d
*f2195ff10d9f0d8e99095e5928121f27eedef18d2225b6e2a9ade10258a1eab9222dd662c8c1a2
*2cbaa12dee222f221b2e0a612f06a3301adb2f0e2206a65ae27557320e2333a65afe3166623346
*a33422d933aadf345e23367a583506201666a3377e63776d630baa22ae051f86359dd1b5de8279
*a2d59122ef7d228c695d2a82233da299385ea1b8ad5cf6e1dc1c26e18f41a2f81de01996613d16
*a491dde32cbe21406661fde99c3fea61c5252291e9201f1aa445821742ea22fc15213fce580e3a
*9cc0296417f618455ea44986584612e2467e9a112ea2248e24fb4919997164189ea44d86574a1e
*e34a7e2223aa6308caa339fedaf2952290c1e04d1ea57ae56437d2df4242a12306241e0ee0b589
*644822a555e2a4255e622eaa241cd25c3e3265ce11a4544a243c42e4559ee57529e557e6a11e96
*201d4e5c5452a508d61c5ad6257aa9fe65cb196255c6255bbadc48ba1f5ccadb5bda25612a1b04
*5c22265ae3396e6250765f296ee2d4dd1a3b9e233b1e98d42d182b16a6663e575606e256eae466
*86e630e2a56896663492a669a66630a226b22da36abee6927526fa01236cd6262db2a66de6261a
*e26634069b6ed6236fd6206366e618562627cee03c6a62fc9de2ef09271826e71dfea64906e7c4
*e1db0606a6225225b8c9dcf7e55b452a60744aa745522759466447f6e55396e45a5eda1b3e621d
*8edb778a272f92a7579ae75a0a24a081254822e2443ae579caa47c8ea76cfe1f6deea706be5860
*cee4cdc52148ce255fae2713062838d2e7a665dd060ea56f7aa051dea043f6634dee6784fe4aa8
*3752e853c224547aa45c0217042ee88346a2598a682f92e847b66817c2dcf2a9e8ac7d59f089e5
*0d26278c4aa38c62e787daa77dbae777da2191b2e490d6647cfe28250629779ae858e69991d661
*23ea207a2ae18a3ae9880ea8051ae352165d39366684bda3178262d44918710a65860a27d49da9
*098ea10dae2997cea797ae6081d6a99e321e89eea99fa25d9ffea9a0fee09d0a22349a9b6b6a57
*a20eaa801e26627e669832aaa4725da04eaaa50e5ca5f6a06f76e2a5f62185eee886b2a97162a8
*8e86eaee39e729d2e9d65d667822e821762aff41a93ea2678396677642649a96278f029ff63d27
*8dc26af3c9ea3ebeaaaeaea47aba207e26e9fe9d2de25e6a27b04ea0b04628603e24cd1d2b086a
*e1b036ab1822a17035e9b3f269a156619e12a192de2780d2a5adf6288a6e9bafb2e719baeab7a2
*60b45699a996a93a12e5bdd52b1ef2debe6d2a7c722b09c6ab0fce2b4d22ebb906dc4b82e89f3d
*62bbdedfbb42a8c0ee1fc1d667adbedc8d06ec60fa27bdb9e70346ecc0866b6272a3b9526c4c52
*29ba626cb93e6c5e722cc779abc7f69db0eae5b4a62cb332ebd14569551ee93ff2e5aeedeacb8a
*dea792219916673bc269efa5a928c62965569d9b3e20d28969b08de9d0fe6ce8656a2bfa2bd542
*2bc8c6e2b836a3cb666de559ed247e2dd8529ed89ed9a21e57da96ed349e2ddbbe6d7ab92ddcce
*fead77c92ddddeadda6d2da46aa2d42aad9c7ea1ef914464a6238636e762122ed21e6da9622dde
*6aada36a65d7569f75c26bb652dac2166275e26a8792ec9236aec4ea6de4f2a79466a0c9665c02
*7ea4cd8a24cbb66ae77a2ef94dece8eaa783e2d9e9d261ea8aaeb2b22eb1ba6eac822e98aee781
*b6e4c192ae90e661438adbea6eaeb6f26ef9c1ee99f6e470169ab5ee28ad0118be9628f6326f14
*3aafcf0ae6f0eaa792a2aeb029e85ffeaaf606abef1e2a08ba64477e20cb662f7eeaee89e627aa
*baeff93a2e6272edef1a2ce7629ffd82efb0daa8f0f667afa6ebfda2efe37a66e8666e53e22e41
*72ecffeed9cc022cc076ef01835ed0aee2d432ed8dfe3918f2c969d36ad8650adf869a62e21a2d
*d95e70dcd9ad0ab7306eb1b00bc7b07da5af62cab00dab1b0d8b6cdcaded0d37230cf7b00cff30
*10bbb0100fb10acb2850faeddfa6b0118b67a592ef0ee26c13776aa0ca6f455af014ef69157727
*e5ee6e16d7699fb22fcab6ee178b6818f72ff096f1a5462b1603b01a0b2a1293e1af62e91b6b71
*0e8fa3ba36b001d7b11d27f06ceeefb5266bc431311f97267db26ad26ef0f316b2a4163123d3ad
*233f32dc46b224b32d25c3a3aa56b2935eb226532d2777f2cb3a3221abe863be2f2833a35a82aa
*dfcea48461b2cb325fcd9e72dbde313ed69b05ebe83f5aee7209f2f2ca722be26504e7f1c1deee
*7b02e4fe28fbb2f30133e61aa8a81173d16e1dee723132dba91f13e8fed62e33436cc94a260e9a
*f234d7a232172ff19a21bdf5e8f069ec374f6238532bb96a733383e8ada63335e7efdec2ef4eb6
*258e6e6916f6b23c6f2f2d9f5730672fe75e71b3ba253af7f36efef37e791f24ee5b01e3e83213
*9bca22741aa6b2d042a7632e2e1fb272d46eea315334062b345746b19a7d34489bad4883e6182b
*99499ff4e47db24bc3714a47ea77f1704cdb244cdf741fd3f302ebb425cff49af52b0946ad4f9f
*600603ee092f6da92132963ab3f2f27351bf3450af6c3c57ac340bf4040b745423304f03f236eb
*f2c86a61539bef036f75f34e75368335ff8af5447bb1b242feb559f71f5aaf2f0132a8f78af1b5
*ceef8bc6b5f9cd753bdf9ffc66f41702b6c66ae9bef235573f6a4fd7e71d06768a36b67f362c05
*2376d5fa35438aa1633b30613fec461f3665af1e1be7676623ac685f35adea35197ff6dcc5ecec
*86758852b04367ec5eabb6dc1d3551bb75287aef4f066586b6296d03ad6523d94613f46f577635
*7fa9faa22d49776c711b77572737a236b7a706b774c36a4e57f76b5e3776a7a6769fea761f2585
*0680788ff7538c7700508479f3634b7ff7741f379e7a756d9d377acb3704d077799fe77ab3b714
*92a87dd7377aff7741f4376aeb377012404a2c76803b867cd33783e337815f24422480844f3885
*533882fbf75bfe2c388063f85a3f78816fc40184b8888f38475cb88037f879a7f8007bf887a706
*4998b882ffb78a0bf880b3783646b88b8f048c67b88cfb378d4fa98d4f28014c8549ecf886fb38
*923b78900b3991978491d7777f3738bce6f792f76e93bf387c7f86798bb7961fb9f055393de2f8
*495c3898cba79817799697f9260f798e8b0499abf96f9eb993a7399c9b319b8f399dd77980ca39
*9643b79e4b289feb789e1b19957f586f173a3cd376a0bbf9a0bb233a22ada3f75b465f9a8fd6a0
*a51ba1da3ae2471377752f7a48bcb95eb7b1b6e2729462f19832b772e9ae4973ba747b3a48803a
*90bf765e3fb46e2f6f788e36761daf5b7317a23fb2ab7f04ac6ba7fe533b211debf1b63aace172
*f38f65f2ba7a27f1cd6a645efab25f6f73ffba47043bbb0e9b645f76a719b6c306ef4026ac6ca3
*a2f2ad1cb8efeb9562b7b57704b687f041b775b1273bf2baebbb26efbf9962f87ae73e9775a7df
*399afb3973bbe5b68ff3a879bb5887aabd7f6504ab756326fc6cdff4ba0340bbdbeab037f44473
*fae5829fb3b2a94fde75b3879bc3a736c40f798597bc844f3c8bee7aee8e33ab7f7c076ebc6bb3
*75f56a7c34abbc4f47384aa07c8d9aefcaf36aca623abdfba5678bfc8cd6b504effbd057bbbfcf
*39c05b2fd399e9e1cee9a4bf29f4523d66f26b6e3f3309136dd15698d7ab29d643bad6c3f5cd2f
*7d9fd7b0720b63affbfe3ac99b7c85ebbc7aadbde2c93d23e33c9e37fd9f4b67c4c37da2d9b473
*f97dde6fd7de377ae0db6684bbfddb137ee1c3a6ddff3bda1717ddc7d7a1c7fde20fd7e067a22a
*632d4747a7078baab2bb73b76a7a73b57ce5f3d6e52b2643ef2ea9eba3a9e37b17677abcaf1744
*97be6f9dbe0e07b40316bd17df3ad9a77aec8657e4f7fb950b3a3462335d6fb38aed98ae0975b9
*33fbcc3bbbcbf56d99f2ea28067fab9b3df1a37e44ff75c1073cbd4b626cef7a1132a6b9ffbcbe
*a53bedf796edb7a0f173bfbd7abfaed33c69df7bb9efa3cd42b1015bbfd20f3fa317fff6733b40
*4010387020008106092654080121c3820501448cb8d0a1c28607292ebc78feb1e2438c1f3b4a94
*48912348931e33a654b992654b972f61c6943993664d9b3771e6d489d300810407440695480082
*02a3030634686054c1c98e4fa1462d99702acb86574f569dcab1aa46a104b9a2c40a55ab46aa66
*77a655bb966d5bb76fe1c6959bb0e74fa142893245aa9469d6b3602da205ecb4e556bf8207a384
*1936f1d88a8c0347563c796e65cb973167d6bcf9665da07745e63d9a74a9519313133bddba31f5
*4bc34f514b6edd556549c7213d6e2c2b3b6a6fcebf8107173e9cf84acfa043171dcdd7f457b0a0
*113f8fcd70a4ebead4518bc40e312877efd6a71f9c5e3d3b42edd7ef7edfdeba787bf7efe1c7cf
*791c7944d10af6966eaa93b6fe7cff6bfbfb4fc001092c702efaeabb2fbfbe760ad0c007ad8250
*c20929acf0250491539034062decd0c30f410c51449a30044d43e6f623ae3e0701ac6fc417618c
*51c6f97cfa2c41e5f0dbd0b41979ecd1c71f8154abc4bb4ed42fc823914c52c92087c40bc70577
*5c322616610c4f3dcea89452cb099b0caa480e33724ebcd8b44ba94cecccbb8ebb33d1ec6eccae
*ce8b0eba31df5c49cdf50a63cb20dbb25c6ca63eb70c74c02e93d34bc714cd7c8e32dffe6a7451
*c81cb3cd2b4579238b52c226bd344f00a5720b504c050d154242877af2d0081b130b55471d92f4
*af48cf7295bdd714db7351b3b0fa542df3581d4e5751811daeae15ed3315c55573fe5315d94e65
*4d16a4b020ab4d4ec06e4b3457e956e313cd290fb368cf34a9ba93ce70b78d2ed87305ec89d862
*0d3dd6cec8605d165256696d94b5653f7a8d57546dc5edd6d5d84bd4af3bcb7b36e0dec63317dd
*85e1eb098205208e58628815f8324a8153b535cb6afd5dd34a4c6f63315b7d417df5319250e66d
*e3c9c84c15e494e95598e199897378e29b17a8d85823dfb5b75546058b16367c2dcd8a60b468ed
*b7e78ec5ecb56864858e3724372b7dfa609ab1fecd669c25d6b95d9ea5f559633ff9a41ae847c5
*ac9730daae5d752ca11f759aa4a6e735d8ea80e13e3bebbd2ddb9a6b8a2d46344c47c7ee53e9b5
*6fed35e94ad5265c64a4e5565bd7a8fe953df960c965e65bf3cafcfedbebe5c0c6983a9fb9759a
*637393bed774d13f56785ff1609eed4fc9547f5b53bc57df5c77cc3ae7faf31cdd35d3ecca5d0b
*97cc9186f778cde5999753dc72f586beccf38ea71abdd6c314574df2c0ddf67aebab977bf7f1db
*ea1de7dfa1147ce65fc99789fdf6e167c9fc9bd13f95eff7e35f3afffd759a7fe2fa83c73f010e
*90807d23cadf2206c0d015d02bc8c9cc8a1818c119f9af6b8193e0053198c10b1d108139b3a006
*4118c2105230811fdc1bfe46c4a6371d4d842d14120711a84030cd8d4d6752a1b7aa97262ba5c7
*63367c5e9d24c7c3f5dcb0811f5321c126d2b43695ad5e94139f0ba1081312026e67338cfe5dcb
*aa56b566b1ac725b841d4450e7b8ab658e32e1c162b74697c5277a318a6ddce0c33a28c38b0dce
*651d131d17bdf8ba6a1d4e355a249c1df587ab583d648fb21b64d8629738372e922253f46015e7
*9848cb01928e65ec94c9ec46c827e22e354a5b99b50ef933346e918f6af40d0a19a94147ca517d
*6164daa6b8884684c14c75881c0cc9a2a7c89061448f86ec24dafab39b540e3323ab34e11d7133
*3697706c8fc97bd96960892dc8e5b264bb14e55586d7acd3e95292c4f426048c09c956324e93a5
*c498134b16b73ad689938bfbe4b43259484bca527cc2fce63dc3f9352bbaf267e604a5f16a4834
*2136ae71192b5e63d2d645dad14e8991abe4fe3dbf994fd0ed5365d412e532ef9649642e4e7164
*d4cd419d8549d2ad93928cb2e726211a4589026f8157ac9b9f72173d366293936bbc9d2d2779cb
*a0fd118c88836637d3995228ae347d7672e63671eac32412b14dcdabe10fc9f23c1b16063a4a05
*df52cd46b7ef61137ba7142a3e61e8b963d20c95a12aeb57f94754fb9d707f6745ebfed41ac0b7
*ce95aea30aabefc69a4108d695af1e8a6b4bfb1a58c10aebaee7cbeb60119b58de15967e876598
*5b2fc3d46542b6755015106415cb13c6fecfb1d81acf566b035ae8f5503703856a9c54665a1d3a
*4888fcb9895b4bd9d59ac00979a6c46966b5b6d90a8a136aa7632d3f7d2935b4ddf492b5aa6552
*fed3823fd81677572eb52d3271bb99bf523466f1146828e729dc8bceb3a6d0442a395d6b93b3be
*2ea8b3056e791f1a5de9eab684bc0de424bfeb4b4d76f495161d63778716df59d1497ba7f5d6ed
*50dbbc83e60d764fd5d440437b553ca154bd71996e245da9ddf4be949e5efde97b73ea2c2a45cd
*9acfacee696a69383cee30c4f47d2e6dd5d9e0f5c231869ddd2f2fb7bb345971c599161e9a40a5
*9aafc9def0a4b3ac681f810c4b1ac792a46c64a71a03845915bfb1838fd42784c1db4f6a02325a
*bffd7154cd384db16114ba4b34223c8b3b27a87d38cc26862e9c30bce403b1978a4f1ea7890b47
*361c0614c3088ef218db46b4cb4593c8339e2ddd78fe5ae4e706f9c46ad6cc83df2cdf38172f6f
*fa652ef108cdcd9eeaf95f7cee969f7382ce32bfd8cca04ab2a13383e8de8e14a429b6724d13e6
*c787caf6be689e747753fd4510cf8ed469bcb0ad6b256b1fdf1aa8a07e8bc398126c61b3d2a844
*74746a73d8d4227295d9d24ca4b1d143d5fe268fc74aa49e343fcb6a1a962d30d55eea9c0979da
*ade6d8d797e98901d09d6e75abdbc5c152b2e6deeda9729b9b282c69b7bbdd186f3dcd9bdef2bb
*37bf0da46f8053c8612a5100b0270a6509eeb5430cff9365078ea4828373dd0610c8c1ff1d718d
*0776e21457f7c511ce52ea6e9ce41cafb7402a0ef28c979ce542edb8c72dae72f7b69ce67d7df9
*c765eefee69aefbcae2fa73841303e739e0f3da53e4737d0435e54a22f1dac2b09bace991ef561
*fa5c214f4f78a2a59e7555d67bd8c24efa5ab51e76113aace2655fb9d8d19ebf9e1080ed6d77fb
*db859e76b93330e62e7173d9f19e77bdef9def7df7fbdf011f78c10f9ef08537fce1119f78c52f
*9ef18d77fce3211f79c957fcee6fb7fce5319f79cd6f9ef39df7fce7411f7ad18f9ef4a537fde9
*519f7ad5af9ef5ad77fdeb611ffbd58b93ea0b31000012907bddef9ef7bdf7fdef811f7ce10f9f
*f8c537fef1919f7ce52f9ff9cd77fef3a11f7de94f9ffad5b77e0204ae92baab2470b5a7cbed7f
*7200f18f9ffce537fff9d19f7ef5af9ffded77fffbe11f7ffef9cf9ffef5573ff6c58fff03e8df
*fefdf7ffff01300005700009f0fc22a2c9103001cf67fb8aa9fb4e2e230e0efc6c645d28b0022d
*f00231300335700339b0033dd002b12f224210f73eb0044df0045130055570053150015d50010f
*cee9be0e45bc6f202210f726900575700779b0077dd0034730087f700889b0088d90085f3009e3
*880117c2ea44ce286aefe88a02dd70f008adf00ab1300b57440845500bbdf00bc1f00895700c17
*7020d2adea66503f8cee0ca75002c3f00de1300e3b900b49500eedf00ef17045c8700f13a8eed6
*0de91cd00c53ae0dab300f0df110df900e47101119b111b3900ff93006516e109d307d26aeec40
*ce0d1d711339fe910715b113413114591012f75012618e0d2bf150d6500a6fd02e44f115611103
*3f311669b116299014c9d014ffd006d39029a230e65a31076d711869711689f118891117c75017
*a5101069ef0129221891711a5fd118a9f11a43511995d01421b017a1101a9b900a5d111bc91111
*adb11cd1f110b53109b9311abd31e870a4eba4311de9510ecfb11ef1f10dd7f10525511e7d3110
*fdae0ef37120b5f01e09f220add01f15722119d2eb4e11ef1c50f624722229b2222df222313223
*35722339b2233d52f3686fee449291dcac214df22451322555722559b2255df225613226657226
*69b2266df2267132277572276f327d78f22781322885722889b228658df22891322995f2277d72
*299df229a1322aa5722aa9b22aad322991222bb5722bb9b22bbdf22bc1322cc5722cc9b22ccdf2
*2cd1322dd5722dd9b22dddf22de1322ee5722ee9b22eedf22ef1322ff5722ff9b22ffdf22f0133
*3005733009b3300db32b0302003b
hunk ./docs/faq.html 1
+Advanced Redex Trails
+
+
+
+
+ Haskell Tracer:
+ frequently asked questions
+
+
+
+
+Why do you call it a tracer rather than a debugger?
+
+The word debugger suggests: firstly that there is a fault to be
+found; and secondly, that the tool will fix it. In actual fact, the
+tracer is just a tool for observing what happened in any particular
+program run. You can use it to find the cause of a fault, but equally,
+you can use it simply to aid your understanding of a correct program.
+While the tracer will help you to find bugs, it cannot find them for
+you. And once the bug is found, you must fix it, the tracer
+cannot!
+
+
+Briefly, how does tracing work?
+
+First, the tracing compiler does what amounts to a source-to-source
+transformation on the program. The transformed version computes the
+same result as the original, but additionally builds a trace as a normal
+functional data structure. After running the program, the Haskell
+runtime system waits for a connection from the trace browser.
+The browser is a Java program that simply displays the computed trace
+structure in a manageable way, allowing you to follow trail paths and to
+connect to the original program source. The browser communicates back
+and forth with the halted program, copying trace structures across
+when they are needed - typically users browse a very small proportion
+of the complete trace.
+
+
+I have trouble compiling my program for tracing.
+
+Unfortunately, the prototype tracer does not yet cover the whole of
+the Haskell'98 language, nor the whole of the Standard Prelude and
+Libraries. For example, many IO functions are missing. One of the
+first results of the ART project will be more comprehensive
+coverage. Check the Hat Feature
+Summary to see exactly which parts of the language are missing,
+and when you can expect them to be added.
+
+
+Even on a very simple program, the tracing compiler complains
+ about dPat: no match.
+
+This not-very-informative message actually means you have used an
+(n+k) pattern in a definition. The tracing compiler doesn't
+yet handle (n+k) patterns correctly. We hope to fix this soon,
+but in the meantime you will have to rewrite your program by hand
+to avoid this construct.
+
+
+
+The latest updates to these pages are available on the WWW from
+
+http://www.cs.york.ac.uk/fp/ART/
+
+
+This page last modified: 2000.09.15
+
+York Functional Programming Group
+
+ |
+
+
hunk ./docs/feature-table.html 1
+
+Hat feature summary
+
+
+How complete is Hat?
+
+
+
+Key:
+- = no support
++ = partial support
+* = full support
+
+
+
+
+
+
+
+Haskell'98 vs. Hat | Actual | Planned |
+
+ | Mar 2000 | Sept 2000 | Jan 2001 | June 2001 |
+
+
+
|
+
+Language constructs |
+
+modules | * | * | * | * |
+
+lambda abstractions | * | * | * | * |
+
+pattern matches | * | * | * | * |
+
+guards | * | * | * | * |
+
+if-then-else | * | * | * | * |
+
+case expr of | * | * | * | * |
+
+list comprehensions | + | + | * | * |
+
+monadic do | + | + | + | * |
+
+infix operators | * | * | * | * |
+
+numeric literals | + | * | * | * |
+
+numeric sequences | + | + | * | * |
+
+n+k patterns | - | - | * | * |
+
+
+Basic types |
+
+Bool | * | * | * | * |
+
+Char | * | * | * | * |
+
+List | * | * | * | * |
+
+Tuples | * | * | * | * |
+
+Int | * | * | * | * |
+
+Integer | - | * | * | * |
+
+Float | - | * | * | * |
+
+Double | - | * | * | * |
+
+Rational | - | * | * | * |
+
+
+User types |
+
+data types | * | * | * | * |
+
+type synonyms | + | + | * | * |
+
+newtypes | - | * | * | * |
+
+named fields | - | - | * | * |
+
+type classes | * | * | * | * |
+
+derived instances | - | * | * | * |
+
+strict types | - | - | * | * |
+
+
+
+
+ |
+
+
+
+Haskell'98 vs. Hat | Actual | Planned |
+
+ | Mar 2000 | Sept 2000 | Jan 2001 | June 2001 |
+
+
+
|
+
+Input/output |
+
+single I/O streams | * | * | * | * |
+
+file handling | - | - | + | * |
+
+
+Libraries |
+
+Prelude | + | * | * | * |
+
+Ratio | - | * | * | * |
+
+Complex | - | * | * | * |
+
+Numeric | - | + | * | * |
+
+Ix | - | * | * | * |
+
+Array | - | - | * | * |
+
+List | + | * | * | * |
+
+Maybe | + | * | * | * |
+
+Char | + | * | * | * |
+
+Monad | - | * | * | * |
+
+IO | - | + | + | * |
+
+Directory | - | - | * | * |
+
+System | - | - | * | * |
+
+Time | - | - | * | * |
+
+Locale | - | - | * | * |
+
+CPUTime | - | - | * | * |
+
+Random | - | - | * | * |
+
+
+Platform Portability |
+
+machine and O/S | * | * | * | * |
+
+other Haskell systems | - | - | - | * |
+
+
+Non-Haskell'98 Extensions |
+
+primitive FFI | - | * | * | * |
+
+IOExtras library | - | - | + | * |
+
+multi-parameter TCs | - | - | - | - |
+
+existentials | - | - | - | - |
+
+concurrency | - | - | - | - |
+
+parallelism | - | - | - | - |
+
+
+
+
+ |
+
+
hunk ./docs/index.html 1
+Advanced Redex Trails
+
+
+
+
hunk ./docs/limitations-detail.html 1
+Advanced Redex Trails
+
+
+
+
+ Advanced Redex Trails:
+ limitations, bugs, and workarounds
+
+
+
+
+This is a fuller list of limitations, bugs, and workarounds in
+the prototype tracing system, Hat.
+(There is also an overview page, and a
+more detailed page about the browser
+interface.)
+Please mail us at
+ ART-team@cs.york.ac.uk
+to report any new limitations, bugs, and workarounds that you discover.
+
+ Bugs and holes in the current trace compiler:
+
+
+
+- The traced program evaluates too much
+-
+The traced program
+
+main = print (True || h True)
+
+h = h
+
+does not terminate. The reason is that the trace transformation assumes that all
+values of type R t are of the form R v Trace. In the example the Sat for h True has to be constructed (to be able to show the expression). h has value R h' (Nm "h"). Then h' is applied to R True (Nm "True"). However, h' has value bottom and hence the value of this application is also bottom, that is, is not of the form R v Trace.
+
+This program has the additinal problem that it cannot be interrupted with Control-C. Interruption is only possible when reduction of a traced application is entered, not such an internal, real application.
+
+main = print (True || h True True)
+
+h x = h x
+
+This does not terminate for the same reason as above. It can, however, be interrupted and finally runs out of heap.
+
+ - Oversaturated applications are not shown correctly
+-
+
+main = print ((h True) True)
+h x = f
+f x = False
+
+correctly gives h True as parent of f and main as parent of f True, but
+
+main = print (h True True)
+h x = f
+f x = False
+
+incorrectly gives h True True as parent of f
+and also of f True!
+
+Oversatured applications are handled completely the wrong way round by the transformation. There is no code to every create an App trace node for the saturated application f True.
+
+
+- Overloaded numeric constants all fixed
+- literal Integers in patterns cause an "fsExp: strange expression"
+ compiler error
+ (fixed, August 2000)
+
+- literal Ints/Integers in definitions cause an "fsExp: strange expression"
+ compiler error
+ (fixed, July 2000)
+
+- literal floats cause an "overloaded rational" compiler error
+ (fixed, August 2000)
+
+
+- Pattern bindings are projections but not handled as such
+-
+Example:
+
+translateStatement symboltable startAddress (Assignment identifier exp)
+ = (expCode ++ [Sto varAddress], expCodeLength+1)
+ where
+ (expCode, expCodeLength) = translateExpression symboltable startAddress exp
+ Just varAddress = tableRead identifier symboltable
+
+The parent of the value of varAddress should be tableRead ... . Instead the parent is the parent of the object that was originally inserted into the table. Here definitely reductions are not recorded in the trail.
+
+
+- Strictness annotations in data type definitions
+
+- are not transformed correctly. With tracing, the data constructor is no longer strict in an argument annotated with !.
+Example:
+
+data Test = T !Bool
+
+f (T x) = True
+
+t = error "Hello"
+
+main = print (f (T t))
+
+With tracing this program prints True, although it should abort with the error message "Hello".
+
+
+- Type Synonyms
+
+- Type synonyms for arrow types are not necessarily translated correctly.
+In fact, at the moment they are not translated at all.
+
+
+- newtype (fixed 18/8/00)
+- A newtype often leads to a segmentation fault of the traced program.
+More precisely, pattern matching on the data constructor yields a nonsense value, probably a pointer is interpreted as data constructor.
+For example:
+
+newtype Test = T Int
+
+f (T x) = x
+
+main = print (f (T 3))
+
+yields 13493678.
+
+
+- Higher-Order Types
+- Data types with type variables of a kind beyond simple * cannot be handled by the transformation. Currently not even the normal nhc can handle them.
+When the latter problem is solved (or for a nhc independent version), the tracing transformation can be changed to handle higher-order type variables.
+We introduce a data type
+
+newtype Fun a b = Trace -> R a -> R b
+
+and the transformation replaces all ->'s by Fun.
+
+
+- Records
+- Records are currently not supported.
+
+- Derived Classes (fixed, July 2000)
+- Derived classes do not work correctly. Hence read does not work when derived. It demands an instance of class Read for the tracing type R.
+The cause is that data types are transformed for tracing before deriving. The order should be reversed.
+
+- Prelude and Libraries
+- libraries Array, Directory, etc. missing
+
+- functions readFile, appendFile
+ are missing from library IO
+- more generally, output IO is `special' because the tracer has to
+ record it such that the user can later select trails from it.
+ Thus, it is unclear what the meaning of many IO functions should be.
+
+- Unidentified bugs
+- on one occasion the compiler stopped with No match in _dCaf
+
+- on a few occasions the compiler crashed with heap overrun
+
+
+
+Bugs and holes in the run time system part for tracing
+
+
+- Our of heap space
+- Currently also a tracing program just abort, if it runs out of
+heap space. It should connect to the browser instead. Probably the same problem occurs, if the program runs out of stack space.
+- Runtime system crashes
+
+Program exited normally.
+in_bind_ne: bindin_bind_ne: resolver error. Host = LOCAL
+in_bind_ne: in_bind RETURNED BAD VALUE: -1
+
+This seems to happen when the browser has just been started and may still be initialising, not yet able to communicate.
+
+
+
+Wishes
+
+
+- Trusting derived instances
+- Currently derived instances have the same trusting status as the module in which they are derived. However, these instances should be trusted, because they are derived automatically. Possibly an additional compiler flag would permit to make these instances untrusted.
+The same applies to other compiler-generated code, e.g. to the automatically created selectors for field names.
+
+
+
+
+This page last modified: 2001.01.17.
+
+ |
+
+
hunk ./docs/limitations.html 1
+Hat 1.0 Bugs and Limitations
+
+
+
+
+ Hat 1.0 Bugs and Limitations
+
+
+
+
+This is a list of some known limitations and bugs in Hat 1.0,
+a tracer for the functional language Haskell 98.
+Please mail us at
+ ART-team@cs.york.ac.uk
+to report any other problems you find.
+
+ Compile-time problems:
+
+
+- Type synonyms for arrow types do not compile correctly.
+
+- Type variables of higher kinds have only limited support.
+
+- Records are not supported.
+
+- Libraries Array, Directory, System, Time, Locale, CPUTime, Random
+ are missing.
+
+- Library IO is not fully supported:
+ no readFile or appendFile.
+
+- Rarely, the compiler fails with heap overrun.
+
+- Very rarely, the compiler fails with No match in _dCaf.
+
+More details here.
+
+Run-time problems:
+
+
+- Programs that exhaust memory fail with no trace.
+
+- Strictness annotations in data type definitions lose their effect.
+
+
+Trace-time problems:
+
+
+- Comprehensions are not traced at source-level.
+
+- Monadic do expressions are not traced at source level.
+
+- Some numeric expressions are not traced at source level.
+
+- Traces involving pattern bindings may be incomplete.
+
+- Scrolling resets when trace is extended and is deeper than trace window.
+
+- If the output is empty, it cannot be selected.
+
+- In script playback, folding away trace sections doesn't work.
+
+- Shift-middle-click changes the display wrongly.
+
+- Rarely, the browser hangs following a source-code link.
+
+More details here.
+
+
+
+This page last modified: 2000.09.15
+
+ |
+
+
+
hunk ./docs/maillist.html 1
+nhc98 mailing list
+
+
+
+ART mailing list
+
+
+
+List information
+
+ The ART-list is for researchers and users interested in the
+ Advanced Redex Trails (ART) project, whose aim is to develop a
+ fully-fledged tracer/debugger for Haskell programs.
+
+
+ The list is initially envisaged as a means of contacting people who
+ are willing to take part in experiments as beta testers of the
+ tracer. However, it is also available both for discussion of
+ tracing of functional computations in general, and for discussion
+ of the features of our tracer in particular. The list is moderated.
+
+
+(If the list grows in traffic sufficiently to warrant it, we may at a
+later date split it into two, with one list for low-traffic
+announcements, the other for unmoderated free-for-all discussion.)
+
+
+ To subscribe or unsubscribe
+
+To join the list, send a message with the subject
+
+subscribe
+
+to the address: ART-list-request@cs.york.ac.uk. To leave the list,
+send the message
+
+unsubscribe
+
+to the same address.
+
+ To post to the list
+
+Messages intended for the whole list are sent to the address:
+
+ ART-list@cs.york.ac.uk
+
+
+ List archive
+
+A web archive of messages from the list is here:
+
+ http://www.cs.york.ac.uk/fp/ART/ART-list-archive/
+
+
+
+
+
+
+The latest updates to these pages are available on the WWW from
+
+http://www.cs.york.ac.uk/fp/ART/
+
+
+2000.03.02
+
+York Functional Programming Group
+Malcolm.Wallace@cs.york.ac.uk
+
+ |
+
+
hunk ./docs/old-tracing.html 1
+
+The Haskell Tracer Project
+
+
+
+
+The Haskell Tracer Project
+
+This page describes the current state of our Haskell tracer. The
+theory about the tracing model, the implementation of the tracer, as
+well as a user guide is included. We also provide a demonstration of
+the tracer in action.
+
+
Short introduction
+
+We describe the design and implementation of an experimental system for
+tracing Haskell computations. The basis of our tracing method is a
+program transformation carried out by the compiler: transformed
+programs compute the same values as the original, but embedded in
+functional data structures that also include redex trails showing
+how the values were obtained. When a final result is obtained in a
+computation with redex trails, or when an error occurs, the programmer
+can use a special-purpose interactive display program to investigate
+the derivation in detail, with cross-links to the source program.
+
+Similar schemes attempted by others have typically been limited, for
+example, with respect to the language used to express traced programs,
+the speed of traced execution, the detail recorded in the trace, and
+the size of computations for which traces can be built and explored.
+We aim to build a tracer for full Haskell, and ultimately a tracer that
+can be applied to large computations. Our present tracer, hosted by the
+nhc compiler, handles most of Haskell.
+
+
+
+
+
+
+
+
+
+Snapshots
+
+This pictures below shows the tracer user interface when tracing the nhc
+compiler. The top part of the window displays the interactive redex trail,
+and the bottom part shows either the source code (the first picture) or
+the program output (the second picture).
+
+
+
+The user can click on any expression, identifier or constant in the
+redex trail display to explore the redex trail of that item.
+By right-clicking on an item, the source code window will display the
+source code position of the particular occurrence of the item.
+By shift-right-clicking on an item, the source code window will display
+the source code of the definition of the item.
+
+
+
+
+If the output window is selected, the user can click on any part of the
+program output, and the redex trail for the expression responsible for that
+piece of the output will be display in the redex trail window.
+
+
+
+
+
+
binary ./docs/paper.dvi
oldhex
*
newhex
*f702018392c01c3b0000000003e81b20546558206f757470757420313939372e30322e31303a32
*3332398b0000000100000000000000000000000000000000000000000000000000000000000000
*0000000000ffffffffa0027900008da0fda30000a0023f00008da0fe0e00028d9200d057b8f30e
*44d3ed74001147ae001147ae0005636d723137b95491fea556726163696e678ea41600008d917f
*1ede4c617a79960537744691fea556756e6374696f6e616c93436f6d7075746174696f6e738ea1
*8d9200a89ec15573696e67960537745265646578935491fea5567261696c738ea18d9200ac2569
*28f30f9bbb8840001147ae000c00000006636d74693132ba507296ff22d0652d616c7068619106
*0c4d6472936166749101a4dcb9298e9f22faff8d8d8d8d8d920095ce17f31058ab510b000c0000
*000c00000005636d723132bb436f6c696e9603eaa852756e63696d616e93616e64934a616e9353
*70617275648e8e8e8e8e9f17888b8d9200bc3c644691ff0556656272756172799603eaa831302c
*93313939378e9f23b7028d9200d6214bf31a740c893a00090000000900000005636d627839c541
*627374726163748e9f0f63d28d9164dffcf3196fb48bc700090000000900000004636d7239c457
*91ff3aab659602833c646573637269629a41c765937468659364657369676e93616e6493696d70
*6c656d656e90be39746174696f6e936f6693616e93657870986572696d656e90be3974616c9373
*797374656d8ea40b00008d91570002666f72960219e074726163696e67934861736b90be39656c
*6c93636f6d7075746174696f6e732e9103c89f546865936261736973936f66936f757293747261
*63696e67936d6574686f9041c76493697393619370726f2d8ea18d915700026772616d960345f0
*7472616e73666f726d6174696f6e9363617272696564936f7574936290be39799374686593636f
*6d70696c65723a91047da87472616e73666f726d65649370726f6772616d738ea18d9157000263
*6f6d7075746596049ee17468659373616d65937691ff7c72616c75657393617393746865936f72
*6967696e616c2c9105014462757493656d90be39629041c7656464656493696e9366756e637469
*6f6e616c8ea18d91570002646174619602cbed73747275637475726573937468617493616c736f
*93696e636c75646593f31bbc6a91b900090000000900000005636d746939c67295871b65936465
*7891030ac874729361696c739602cbedc473686f9abe3977696e6793686f987793746865937691
*ff7c72616c7565739377986572658ea18d915700026f627461696e65642e910655545768656e96
*03d2f561930c6e616c93726573756c74936973936f627461696e656493696e936193636f6d7075
*746174696f6e93776974689372656465788ea18d91570002747261696c732c9b02c1fb6f729602
*ad247768656e93616e936572726f72936f9041c763637572732c987468659370726f6772616d6d
*65729363616e9375736593619373709541c7656369616c2d70757270936f73658ea18d91570002
*696e95be39746572616374697693659b03de8c646973706c6193799870726f6772616d98746f98
*696e93769365737469676174659874686598646572697691ff7c726174696f6e98696e98646574
*61696c2c910410da776974688ea18d9157000263726f73732d6c696e6b7396031554746f937468
*6593736f757263659370726f6772616d2e8ea18d9164dffc53696d696c617296035d8373639abe
*3968656d657393617474656d7074656493629879936f7468657273936861987698659374987970
*6963616c6c7993629041c765656e936c696d697465642c91036f8f666f728ea18d915700026578
*616d706c652c9103a24f776974689603861d726573709041c765637493746f93746865936c616e
*6775616765937573656493746f9365787072657373937472616365649370726f6772616d732c8e
*a18d915700027468659603bfe873709041c7656564936f66937472616365649365786563757469
*6f6e2c9b03ea8d7468659364657461696c937265636f7264656493696e93746865937472616365
*2c98616e64937468658ea18d9157000273697a65960482a16f6693636f6d7075746174696f6e73
*93666f72937768696390be3968937472616365739363616e93629041c765936275696c7493616e
*64936578706c6f7265642e910864575791ff3aab658ea18d9157000261696d9603f704746f9362
*75696c6493619374726163657293666f729366756c6c934861736b90be39656c6c2c91042f6f61
*6e6493756c74696d6174656c7993619374726163657293746861749363616e8ea18d9157000262
*9041c76596033c616170706c69656493746f936c6172676593636f6d7075746174696f6e732e91
*0491964f75729370726573656e9abe3974937472616365722c91034624686f7374656493629879
*9374686593c66e68638ea18d91570002c4636f6d70696c65722c91029d2d68616e646c65739602
*7f236d6f7374936f66934861736b9abe39656c6c2e9103ea6054686f756768936170706c696361
*74696f6e7393746f93646174659368619876986593629041c765656e8ea18d91570002736d616c
*6c2c91029d4f779abe396596027f4d63616e936769769865936578616d706c6573936f66936675
*6c6c792d74726163656493636f6d7075746174696f6e73936f66937570746f9361936d696c6c69
*6f6e8ea18d91570002726564756374696f6e732c9603155464657269769abe3965649366726f6d
*936f726967696e616c9370726f6772616d7393736576986572616c93706167657393696e936c65
*6e6774682e8e9f2105328d8d913e0000f31dc2d64ea0000e6666000c00000006636d62783132c8
*318e91564ccb496e908ccc74726f90733364756374696f6e8e9f17e71b8d8d913e0000f31ec2d6
*4ea0000c0000000c00000006636d62783132c9312e318e915cc0004d6f74697691ff4000617469
*6f6e8e9f1275548d913e0000f3074bf16079000a0000000a00000005636d723130b24691ff2aaa
*756e6374696f6e616c960297f970726f6772616d6d696e67936c616e677561676573936f0b6572
*936d616e9ab8e3799361647691ff71c7616e987461676573936f98769865729374686593636f6e
*987698656e9874696f6e616c8ea40c00008d913e0000616c7465726e6174697690b8e3659602c1
*8d6f669370726f90471d6365647572616c936c616e6775616765732e910440854691ff2aaa6f72
*936578616d706c652c9102df1b70726f6772616d93636f6e737472756374696f6e936973936d6f
*72658ea18d913e000072617069642c960540516d6f72659b04de1f6d6f90471d64756c61722c93
*6c657373986572726f722d70726f6e6598616e64987969656c6473986d95b8e37563936898736d
*616c6c65729870726f6772616d7398746f8ea18d913e00006d61696e90b8e37461696e2e8ea18d
*914d00005991ff2aaa65749604168166756e6374696f6e616c9370726f6772616d6d696e679373
*797374656d7393617265936e6f74937690b8e365727993776964656c7993757365642e9106b54c
*5468657265936172658ea18d913e00007691ff71c76172696f757396044500726561736f6e7393
*666f7293746869732c910480eb627574936f6e6593746861749363726f70739375709374696d65
*93616e6493616761696e93697393746865936c616390b8e36b936f668e8e9f1e00008d9200e800
*00318e8e8c8b000000020000000000000000000000000000000000000000000000000000000000
*000000000000000000002aa0027900008da0fda30000a0023f00008da0fde400008d913e0000b2
*74726163696e679602dffc666163696c69746965732e91044aaa54686f75676893746865726593
*6973936c6573739373636f7090471d6593666f72936d616b696e67936d697374616b90b8e36573
*93696e93619366756e6374696f6e616c8ea40c00008d913e00006c616e67756167652c910389a4
*70726f6772616d6d65727396037f2e646f937374696c6c936d616b90b8e365937468656d2e9104
*ef535768656e93619370726f6772616d93676f90471d65739377726f6e6793746865798ea18d91
*3e00006e6565649603ef42746f937472616365937468659363617573652e91063f8f416e649374
*68617493697393726174686572936195b8e3776b77936172649603ef427c936974936973936d95
*b8e3756393689603ef4268617264657293746f8ea18d913e00007472616365960391c3657691ff
*71c7616c756174696f6e93629ab8e379936e6f726d616c936f7264657293677261706893726564
*756374696f6e937468616e93746f93666f6c6c6f987793619373657175656e6365936f668ea18d
*913e0000636f6d6d616e647396047794616c7265616479936578706c6963697493696e93619373
*6f757263659370726f6772616d2e9107d885496d706c656d656e90b8e3746f7273936f66936675
*6e6374696f6e616c8ea18d913e00006c616e677561676573960342d461726593686172642d7072
*657373656493746f9370726f9ab8e37669646593657175697691ff71c7616c656e987473936f66
*937468659360646562756767696e6793746f90471d6f6c732793757365648ea18d913e00006295
*b8e3799b0355556d616e93799870726f6772616d6d65727398746f98696e937693657374696761
*7465986661756c747398696e9874686569729870726f90471d6365647572616c9870726f677261
*6d732e8ea18d914d000054686572659b043795686195b8e3769365986290471d65656e987691ff
*71c76172696f757398617474656d70747398746f98746163936b6c6598746869739870726f626c
*656d986f669874726163696e6798286c617a7991ff2aaa2c8ea18d913e00006869676865722d6f
*72646572299603655366756e6374696f6e616c9370726f6772616d732e9b04a1c07790b8e36593
*6469736375737393736f6d65936f66937468656d93696e93f30d21222c9a000a0000000a000000
*06636d73793130b8788df31f1af22256000a0000000a00000006636d62783130ca3f3f8e910adc
*6eb22e9842757493736f936661728ea18d913e0000617396039153779ab8e365936b6e6f987793
*74686572659369739361739379986574936e6f937265616c6c7993650b6563746976986593736f
*6c7574696f6e937c9361937374617465936f6693610b6169727393746861748ea18d913e000070
*726f6d7074656496035555757393746f93656e6761676593696e936f7572936f9ab8e3776e9363
*757272656e98749377986f726b936f6e937468659374726163696e679370726f626c656d2e8e9f
*1bfe368d8d913e0000c9312e328e915cc00044657369676e96048000676f616c7393616e649361
*7373756d7074696f6e738e9f1275548d913e0000b25791ff2aaa659603ae88639ab8e3686f9047
*1d6f736593746f93636f6e63656e987472617465936f6e93707572656c799366756e6374696f6e
*616c936c616e677561676573937375639868936173934861736b98656c6c93776974688ea18d91
*3e0000636f6d70696c656496039db9696d706c656d656e9ab8e3746174696f6e73936298799367
*726170682d726564756374696f6e3a9105028e69749369739374686593636f6d9862696e656493
*75736564936f66936c617a798ea18d913e0000657691ff71c7616c756174696f6e9602a93a616e
*64936869676865722d6f726465729366756e6374696f6e7393696e937375639ab8e368936c616e
*6775616765739374686174936d616b986573937468659370726f626c656d8ea18d913e00006469
*0e63756c742e8ea18d914d00004691ff2aaa7572746865722c91036454779ab8e3659603615461
*696d93746f9370726f98766964659360626163986b779861726427937472616365739366726f6d
*93726573756c7473936f729366726f6d9372756e2d74696d658ea18d913e00006572726f72732c
*9104c4486290471d65636175736596047ae4746865936d6f7374937072657373696e67936e6565
*6493666f72937472616365739361726973657393696e9374686593636f6e90b8e374657874936f
*6693616e8ea18d913e0000756e65787090471d65637465649603b6226f7574707574936f729366
*61696c7572652e9105942d496e93619373696d706c690c65649376696577936f66936772617068
*93726564756374696f6e2c9103ce55746865936f622d8ea18d913e00006a65637469769ab8e365
*9604e4d56f6693636f6d7075746174696f6e93697393746f93657691ff71c7616c756174659361
*6e9365787072657373696f6e93726570726573656e987465649362987993619367726170682e8e
*a18d913e00005468697396039ba9697393616395b8e3686965769365649b039ba9629379987265
*7090471d65617465646c799873656c656374696e6798736f6d65987375622d6772617068982861
*98f320fd00273a000a0000000a00000006636d74693130cb7296ff7d276593646578b229987768
*6f7365987691ff71c7616c75658ea18d913e00006973960411116e656564656493616e64937768
*696390b8e3689363616e936290471d65937265647563656493746f93616e6f7468657293286974
*7393cb6396ff7d276f6e747293616374756db2292e9106a4fa5468659104111172656475632d8e
*a18d913e000074696f6e9603be3672756c6573937573656493746f9364650c6e65937265706c61
*63656d656e9ab8e37473936172659364657269769865649366726f6d9374686593657175617469
*6f6e739367697698656e93696e8ea18d913e000074686596032b1670726f6772616d2e910463b2
*419ab8e37493656163986893726564756374696f6e93737465702c910333896193726564657893
*6d6174639868696e6793746865936c6566749368616e649373696465936f6693616e8ea18d913e
*00006571756174696f6e9602ad7f6973937265706c6163656493629ab8e379936193636f6e9874
*72616374756d937468617493726570726573656e9874739374686593636f727265737090471d6f
*6e64696e6793696e7374616e63658ea18d913e00006f669603fbfd74686593726967689ab8e374
*9368616e6493736964652e910665c0509861727473936f6693746865937265646578936e6f936c
*6f6e6765729372656163986861626c659366726f6d93746865936d61696e8ea18d913e00006772
*61706896033bc5617265936e6f726d616c6c79936469736361726465642c910340e2616e649374
*6865936d656d6f72799374686579936f90471d636375709ab8e379936973937265636c61696d65
*642e910469424966937798658ea18d913e0000696e7374656164960357516d616b9ab8e3659361
*936c696e6b9366726f6d9374686593636f6e987472616374756d93746f93746865937265646578
*2c910357d061937472616365936f669374686593636f6d707574612d8ea18d913e000074696f6e
*9602f1c56973936275696c7493617393726564756374696f6e9370726f9a471d63656564732c91
*0305af69749369739370986f737369626c6593746f9374726163659362616390b8e36b93746872
*6f7567689374686593cb7296ff7d2765936465788ea18d913e0000747291ff7d2761696c739603
*5555b2629ab8e3799377686963986893736f6d6593726573756c7493286f72936572726f722993
*63616d6593616290471d6f75742e8ea18d914d0000536f6d659604c7196f66936f7572936f7468
*65729364657369676e93676f616c732c9105238a616e649374686593617373756d7074696f6e73
*936f6e937768696390b8e3689374686579936172658ea18d913e000062617365642c9603555561
*726593617393666f6c6c6f90b8e377732e8ea919fe368d913e0000ca436f6d706c65746591059e
*0a747261636573910a0001b2556e95b8e374696c9b04e279779365986861937693659861987693
*657279987374726f6e6798726561736f6e98746f9864697363617264987061727473986f668ea1
*8d913e000074686596031077696e666f726d6174696f6e93696e93726564657893747261696c73
*2c91031e3d616e64936193636c65617293617267756d656e9ab8e3749377686963986893706172
*74739373686f756c6493676f2c91031e3d7798658ea18d913e00006d95b8e37573749b026aa868
*619376936598619873797374656d987468617498676976936573987468659870726f6772616d6d
*65729861636365737398746f986198636f6d706c6574659874726163652e9104238e5468657265
*8ea18d913e00006d9ab8e375737496031b236290471d65936193726570726573656e9874617469
*6f6e936f669365769865727993726564756374696f6e937374657093666f729364650c6e697469
*6f6e7393616e649365787072657373696f6e738ea18d913e00006f6696035555657690b8e36572
*79936b696e642e8ea68d913e0000ca53656c656374697695ae396591044f5e646973706c619379
*910a0001b2486f95b8e3779365769365722c9103d9fb619603bf7466756c6c937472616365936f
*6693657690b8e3656e9361936d6f90471d6465737493636f6d7075746174696f6e93636f6e2d8e
*a18d913e00007461696e7396043ffc61936772656174936465616c936f6693696e666f726d6174
*696f6e937c93746f90471d6f936d95b8e37563936896043ffc666f72937468659370726f677261
*6d6d657293746f936162736f72628ea18d913e0000696e9603555269747393656e95b8e3746972
*6574937991ff2aaa2e910471c650726f6772616d6d6572739603555273686f756c649374686572
*65666f726593686195b8e3769365960355520c6e6593636f6e9ab8e374726f6c936f9876986572
*93776861749374726163658ea18d913e0000696e666f726d6174696f6e96034bad697393616374
*75616c6c7993646973706c6195b8e37993656496034bad746f937468656d2c91034d9b646f9ab8
*e3776e93746f93746865936c657698656c936f6693696e9874657261637469769865936c696e6b
*2d8e8e9f1e00008d9200e80000328e8e8c8b000000030000000000000000000000000000000000
*0000000000000000000000000000000000000000000aafa0027900008da0fda30000a0023f0000
*8da0fde400008d913e0000b2629ab8e3792d6c696e6b9602aaa66578616d696e6174696f6e936f
*669374686593747261696c73936c656164696e6793746f93619372756e2d74696d65936661756c
*74936f729373656c656374656493667261676d656e98748ea40c00008d913e00006f6691035555
*6f75747075742e8ea919fe368d913e0000ca4e6f6e2d696e95ae397691ff5c7261736976936591
*059b49747261636573910a0001b25468659604e0147472616e73666f726d6174696f6e93746f93
*696e90b8e374726f90471d6475636593726564657893747261696c739373686f756c648ea18d91
*3e00006e6f749603427e639ab8e368616e67659374686593636f75727365936f66937468659375
*6e6465726c79696e6793636f6d7075746174696f6e93696e93616e987993779861987996ff2aaa
*2e91046b7f46936f729103427e6578616d706c652c8ea18d913e0000756e65769bff71c7616c75
*617465649603f45965787072657373696f6e739373686f756c649372656d61696e93756e657698
*616c75617465642e91064ed34e65697468657293697393746865726593616e90b8e3799363616c
*6c8ea18d913e0000746f9604b26970726f9ab8e376696465937468659370726f6772616d6d6572
*93776974689361936d65616e73936f669363697263756d987698656e9874696e67937468697393
*7072696e6369706c65937c8ea18d913e0000666f72960452ff6578616d706c652c910492696290
*b8e37993737562737469747574696e679361937691ff71c7616c756593666f7293616e93657870
*72657373696f6e93776974686f75749372656761726493746f937468658ea18d913e00007691ff
*71c7616c756596032a1374686174937790b8e36f756c64936290471d65936f627461696e656493
*6163636f7264696e6793746f93746865936571756174696f6e73936f66937468659370726f6772
*616d2e9104635c4966937468658ea18d913e000074726163696e6796038b9e636f756c6493610b
*6563749374686593629a471d65686190b8e376696f7572936f66937468659370726f6772616d93
*286298657990b8e36f6e649374686593636f6e73756d7074696f6e936f668ea18d913e00006578
*74726196034d7e74696d6593616e64936d656d6f727929936974936d69676890b8e374936f6e6c
*799368696e646572937468659370726f6772616d6d6572277393756e6465727374616e64696e67
*8ea18d913e00006f66960355556e6f726d616c93636f6d7075746174696f6e2e8ea68d913e0000
*ca5491ff0aab7261636573960351f66c696e6b90ae39656493746f93736f75726365910a0001b2
*486f95b8e3779365769365729b02e319676f95471d6f9364987468659874726163696e67987379
*7374656d2c9102f9f2736f757263659870726f6772616d738ea18d913e0000617265960314106c
*696b90b8e3656c7993746f9372656d61696e93746865937072696d617279937265666572656e63
*6593666f729370726f6772616d6d6572732e91045c05536f936e6f74936f6e6c799373686f756c
*648ea18d913e000065787072657373696f6e7396048d1e696e9374726163657393629a471d6593
*646973706c6195b8e37993656496048d1e6a7573749361739374686579936d69676890b8e37493
*629865937772697474656e93696e936193736f757263658ea18d913e000070726f6772616d3b91
*034e9b747261636596034b3f746578749373686f756c6493629a471d6593616c736f9362986593
*6c696e6b90b8e36564936469726563746c7993746f93736f7572636593746578742e91046e6a46
*91ff2aaa6f72936578616d2d8ea18d913e0000706c652c9103c0c17468659603ab4570726f6772
*616d6d65729373686f756c6493686195b8e37693659b03ab45636f6e937693656e69656e937498
*6163636573732c9103c0c166726f6d98616e9379986964656e9374690c657298696e98616e9379
*8ea18d913e000065787072657373696f6e9b0302c2646973706c6195b8e3799365649861739870
*617274986f6698619874726163652c91031346746f986569746865729874686598636f72726573
*7090471d6f6e64696e679864650c6e6974696f6e986f728ea18d913e0000746865960355557265
*6c657691ff71c7616e9ab8e374936170706c696564936f90471d6363757272656e6365936f6693
*74686174936964656e9874690c657293696e9374686593736f757263659370726f6772616d2e8d
*8d910471c79ffc5efff306d993a05200070000000700000004636d7237b1318e8e8ea68d913e00
*00ca41910448bb709051c76f727461626c65910448d9696d706c656d656e90ae39746174696f6e
*910a0001b246696e616c6c7991ff2aaa2c9103d2e5616c74686f7567689603b9c96f7572937072
*6f746f7490b8e3797090471d659374726163657293697393696d2d8ea18d913e0000706c656d65
*6e9ab8e374656496044ee2696e9374686593f321dfea3c78000a0000000a00000006636d747431
*30cc6e686393b24861736b98656c6c93636f6d70696c6572935b8d318e910500015d2c91048d45
*6f757293676f616c93697393746f9370726f9a471d6475636593619370986f727461626c658ea1
*8d913e00007472616365722c910354447468617496035400636f756c6493629a471d6593696e63
*6f7270986f726174656493696e936f7468657293696d706c656d656e9ab8e3746174696f6e7393
*6f66934861736b98656c6c936f729373696d692d8ea18d913e00006c61729603555566756e6374
*696f6e616c936c616e6775616765732e8e9f2111c48d8d913e0000c8328e91564ccb5468659605
*666664657369676e936f669361937472616365937374727563747572658e9f15e71b8d913e0000
*b25791ff2aaa6596025fc06d9ab8e3757374930c7273749364650c6e6593776861749377986593
*6d65616e9362987993619372656465789374726163652e91041feb5791ff2aaa659370726f7090
*471d6f736593746f9375736593cb6296ff7d2761636b77617293648ea18d913e0000747296ff7d
*2761639365739603fefab266726f6d93636f6e9ab8e37472616374756d7393746f937468659372
*65646578657393746861749363726561746564937468656d2e91066eb749669377986593666f72
*936578616d706c658ea18d913e00007365659602ef29746865936e95b8e3756d936290471d6572
*9602ef29cc343293b2696e937468659374726163652c91030398779ab8e3659377986f756c6493
*6c696b986593746f936290471d659361626c6593746f93616e7377986572937468659371756573
*74696f6e3a8ea18d913e0000576869639ab8e36896040a787265646578935c70726f90471d6475
*636564229374686174936e98756d986290471d65723f9106913049669377986593676574936193
*72756e2d74696d65936572726f722c910437c17798659377986f756c648ea18d913e00006c696b
*9ab8e3659604103e746f936290471d659361626c6593746f937365659374686593726564657893
*746861749377986173937265737090471d6f6e7369626c6593666f72936372656174696e679374
*6865936661756c74696e678ea18d913e000065787072657373696f6e2e910807155791ff2aaa65
*9604871a779ab8e36f756c6493616c736f936c696b986593746f936290471d659361626c659374
*6f93747261636593626163986b7798617264739366726f6d937061727473936f668ea18d913e00
*0074686596041d1070726f6772616d936f75747075742c91044eff746f9373656593776869639a
*b8e3689366756e6374696f6e9363616c6c73937798657265937265737090471d6f6e7369626c65
*93666f72936372656174696e678ea18d913e000074686174960368c270617274936f6693746865
*936f75747075742e9104ac0f5791ff2aaa659377696c6c936465736372696290471d6593746865
*93747261636593737472756374757265937769746893616e936578616d706c652e8ea18d913e00
*00436f6e7369646572960355557468659370726f6772616d93696e9346696775726593312e8e9f
*415b038d9fd9d99b8d8d8d8d913e2a609ff3238f89000066660158ab419f14b8e28d840014b8e2
*000066668d9ff8238f8d8d9f008e398d9174cf5acc6696053ffd3293776865726593669378933d
*9378932b93318e8e8e8e920157de75840014b8e2000066668e9e666689000066660158ab418e8e
*8e8e9f24349e8d8d9200ae5c6ab246696775726596035555313a910471c74193736d616c6c9370
*726f6772616d2e8e8e8e913e00009f06666689000066660089ff769f094a3d8d8d8d8d910b2235
*9ffd2d3af312b94161a800060000000600000004636d7236bd318e8e8e910f4cdcf3117c7b5907
*00080000000800000004636d7238bc5468659603465f696d709a3c726f7274616e6365936f6693
*676f986f9864936c696e6b739366726f6d93747261636593746f93736f7572636593779ac38e61
*73937374726f6e676c7993636f6e0c726d656493696e93619373747564656e98748e9f0980008d
*657690871c616c756174696f6e9602d5586f66936f7572930c727374937790c38e6f726b696e67
*937472616365722e8e8e9f1e00008d9200e80000b2338e8e8c8b00000004000000000000000000
*000000000000000000000000000000000000000000000000000000000019d0a0027900008da0fd
*a30000a0023f00008da0fde400008d914d0000b2546865960242c273657175656e6365936f6693
*726564756374696f6e7393696e93746869739370726f6772616d93697393cc6696053ffd3293b8
*2193cc32932b933193b82193cc33b22e91041641496e960242c2619374726163658ea40c00008d
*913e0000666f72960401fc7468659370726f6772616d2c91042d26779ab8e365937798616e9874
*93746f936290471d659361626c6593746f93747261636593626163986b9366726f6d93616c6c93
*73756290471d65787072657373696f6e7393696e8ea18d913e0000746861749b03613973657175
*656e63652c96036432692e652e2c93616c6c986170706c69636174696f6e732c936964656e90b8
*e374690c65727398616e64986c69746572616c739873686f756c64986290471d6598616e6e6f74
*617465648ea18d913e00007769746896036312746865937265646578937468617493779ab8e361
*73937265737090471d6f6e7369626c6593666f72937468656972936372656174696f6e2e91049a
*ff46696775726593329373686f98777393686f9877937468658ea18d913e00006261639ab8e36b
*9602a52f7472616365739328726570726573656e98746564936298799364617368656493617272
*6f9877732993666f72937468659370726f6772616d93696e9346696775726593319377696c6c93
*6c6f90471d6f6b8ea18d913e00006c696b90b8e3652e8ea0009d4e378da0ff7400008d913e0000
*cc2a2d2d2b2d2d2b2d2b2d2d2d2d2d2d2d2d2d2d2d2d2d2d2b8ea18d914dbff77c910a7ffa7c91
*053ffd7c91497fd67c8ea18d914dbff77c910a7ffa7c91053ffd7c9124bfeb2b2d2d2d2d2d2d2d
*2d2d2d2d2d2d2d2d2d2b8ea18d914dbff77c910a7ffa7c91053ffd7c9124bfeb7c911f7fee7c91
*2f3fe57c8ea18d914dbff77c910a7ffa7c91053ffd7c9124bfeb76911f7fee7c912f3fe57c8ea1
*8d914dbff7617096053ffd669332960a7ffa2d2d3e93617096053ffd282b2993329331960a7ffa
*2d2d3e93338ea18d914dbff75e913effdc7c910fbff77c9114fff47c8ea18d914dbff77c913eff
*dc7c910fbff77c9114fff47c8ea18d914dbff72b2d2d2d2d2d2d2d2d2d2d2d2d2b2d2d2d2b2d2d
*2d2d2b8e9f2000008d913e0000b246696775726596037084323a9104a826419103707d70696374
*757265936f6693746865937472616365936f66937468659363616c6c93cc6691053ffd3293b269
*6e9374686593736d616c6c9370726f6772616d93696e934669677572658ea18d913e0000312e8e
*8e9f1800008d914d00005791ff2aaa65960347b063616e93736565937468617493746865930c6e
*616c93726573756c742c96034a6acc33b22c936973960347b0616e6e6f74617465649377697468
*9361937090471d6f696e90b8e374657293746f937468659372656465788ea18d913e0000666f72
*9b043022cc3296053ffd2b9331b22c910466d57768696395b8e36898697473656c669869739861
*6e6e6f746174656498776974689861987090471d6f696e9374657298746f987468659872656465
*7898666f7298cc6691053ffd32b22e9107022f416c6c8ea18d913e000073756270617274739603
*c5766f669374686593746f702d6c65769ab8e3656c9363616c6c93cc6691053ffd3293b2617265
*93616e6e6f746174656493776974689361936e98756c6c937090471d6f696e9874657293287468
*659374726163658ea18d913e0000726f9a471d6f74292c910336776d65616e696e6796032ec074
*686174937468657993686195b8e376936596032ec06e6f93616e6365737472616c937265646578
*9374686174937790b8e361739372657370986f6e7369626c6593666f729374686569728ea18d91
*3e00006372656174696f6e2e910451105468659602f33070696374757265936973936193626974
*936d69736c656164696e6793696e93746861749369749373686f9ab8e3777393749877986f936f
*90471d6363757272656e636573936f66937468658ea18d913e00006e95b8e3756d936290471d65
*7296035555cc32b23b93746865799361726593696e9366616374937468659373616d652c93616e
*649374689ab8e3757393686198769865937468659373616d6593626163986b7798617264937472
*6163652e8ea18d914d0000546865960271c36964656193697393746f93636f6e73747275637493
*7375639ab8e368936193747261636593676976696e6793636f6d70726568656e73697698659369
*6e666f726d6174696f6e93616290471d6f75748ea18d913e0000619603e04266756e6374696f6e
*616c93636f6d7075746174696f6e2e9106128f5468659374726163659373686f756c6493629047
*1d65936275696c749361739374686593636f6d7075746174696f6e9370726f2d8ea18d913e0000
*63656564732e910471c74f6e63659603555574686593636f6d7075746174696f6e936973936f95
*b8e37693657296035555746865937472616365936973936a757374936193737461746963936461
*7461937374727563747572652e8ea18d913e000041960355557375697461626c65934861736b9a
*b8e3656c6c93726570726573656e98746174696f6e93666f729374726163657393697393707265
*73656e9874656493696e9346696775726593332e8ea0008000008d9f940e398d913e0000cc6461
*746196053ffd4e6f6465933d8ea18d91583ff1417096053ffd5472616365935b54726163655d8e
*a18d914dbff77c96053ffd4e6d93547261636593537472696e678ea1a18d913e00006461746196
*053ffd5472616365933d8ea18d91583ff1547261636596053ffdb80893cc4e6f64658ea18d914d
*bff77c91053ffd526f6f748ea19f1600008d8d92008aae2eb246696775726596035555333a9104
*71c7446174617490b8e3797090471d657393666f72937468659374726163659373747275637475
*72652e8e8e8e9f160e398d914d000041910381bccc5472616365960381c8b2666f7293616e9365
*787072657373696f6e936973937468659373657175656e6365936f66910448e5cc4e6f6465b273
*9364657363726962696e679374686593696e90b8e37465726d652d8ea18d913e00006469617465
*96033915726573756c747393696e9374686593636f6d7075746174696f6e936f66937468617493
*65787072657373696f6e2e9104685c4e6f74659374686174936966937468659365787072657373
*696f6e8ea18d913e00007790b8e361739602bf526e6f7493657691ff71c7616c75617465649364
*7572696e679374686593636f6d7075746174696f6e2c9102dd537468656e937468659374726163
*6593666f729369749373686f756c64936f6693636f757273658ea18d913e00006e6f749602b00c
*629a471d6593657691ff71c7616c7561746564936569746865722c9102d11b616c74686f756768
*9361937472616365936e6f9864659364657363726962696e6793746865936f726967696e616c93
*65787072657373696f6e8e8e9f1e00008d9200e80000348e8e8c8b000000050000000000000000
*0000000000000000000000000000000000000000000000000000000000002740a0027900008da0
*fda30000a0023f00008da0fde400008d913e0000b277696c6c9b03725b616c7795b8e361937973
*986290471d6598696e987468659874726163652e9104c8da416e986170706c69636174696f6e98
*697398726570726573656e9374656498629379910395e8cc417096053ffdf30a0ba0623e000a00
*00000a00000006636d6d693130b5748d9f017ffff3093065977200070000000700000005636d6d
*6937b461708e910e35bfcc5bb5748d9f017fffb4668e91052f20cc2c93b5748d9f017fffb4788d
*9f010000f30586039b5a00050000000500000004636d7235b0318e8e9108f004cc2c8ea40c0000
*8d8d913e0000b53a9601aaa83a933a8e9149aaa7cc2c91053ffdb5748d9f017fffb4788d9f0100
*00f3084f0dda5c00050000000500000005636d6d6935b36e8e8e9109f050cc5db22c9b0353c777
*6865726596035364b5748d9f017fffb461708e910c4926b269739374686593747261636593666f
*7293746865936170706c69636174696f6e93697473656c662c98b5748d9f017fffb4668e910882
*84b2697393746865937472616365936f66937468658ea18d913e000066756e6374696f6e9602ea
*6070617274936f6693746865936170706c69636174696f6e2c9102ffc4616e6493b5748d9f017f
*ffb4788d9f010000b0318e8e8d910bda64b53a9601aaa83a933a8e911a6f6b748d9f017fffb478
*8d9f010000b36e8e8e910cdab0b26172659374686593747261636573936f669374686593617267
*756d656e90b8e374732e8ea18d913e0000419103d9456e616d659603d96728619366756e637469
*6f6e2c9603fa6c7691ff71c761726961626c652c93636f6e7374727563746f729603d9676f7293
*6c69746572616c2993697393726570726573656e9ab8e3746564936298799103fcf4cc4e6d9105
*3ffdb5748d9f017fffb46e6d8e8ea18d913e0000cb6e616d659b03d810b27768657265960317b5
*b5748d9f017fffb46e6d8e910fa1ceb2697393746865937472616365936f6693746865936e616d
*6593616e6493cb6e616d6598b269739374686593737472696e6793726570726573656e90b8e374
*6174696f6e8ea18d913e00006f6696037ba5746865936e616d652e9104e4b84669677572659334
*9373686f9ab8e3777393686f98779374686593747261636593666f72937468659370726f677261
*6d93696e934669677572659331936973937265702d8ea18d913e0000726573656e9ab8e3746564
*96033921696e936f75729374726163659364617461749879709a471d65732e9104686054686593
*74726163659373657175656e63652d636f6e7374727563746f727393b80893b2617265936c6162
*98656c65648ea18d913e0000776974689604106c636f6e736563757469769ab8e365936e98756d
*986290471d65727393617393746865799361726593696e9874726f90471d64756365642c91043f
*31616e64937265666572656e63657393746f937468656d936172658ea18d913e000064656e6f74
*6564960355556290b8e37993b5748d9f017fffb46e8e9105717eb22e8ea000bc49f28da0ff5a0e
*39a18d8d913e0000cc526f6f7491053ffdb8088d9f017fffb1318e8e8ea18d8d913e0000cc4170
*91053ffd526f6f748e8ea18d8d8d914dbff75b8e9152fff4526f6f7496053ffdb8088d9f017fff
*b1328e9109bc70cc4e6d93526f6f74932266228e8ea18d8d914dbff72c526f6f7496053ffdb808
*8d9f017fffb1338e9109bc70cc4e6d93526f6f74932232228e8ea18d8d8d914dbff75d8e9152ff
*f4b8088d9f017fffb1348e8e8ea18d8d913e0000cc417091053ffdb5748d9f017fffb1318e8e8e
*a18d8d8d914dbff7cc5b8e9152fff4b5748d9f017fffb1318e9609bc70b8088d9f017fffb1358e
*93cc4e6d91053ffdb5748d9f017fffb1318e93cc222b228e8ea18d8d914dbff72cb5748d9f017f
*ffb1338e8e8ea18d8d914dbff7cc2cb5748d9f017fffb1318e9609bc70b8088d9f017fffb1368e
*93cc4e6d91053ffdb5748d9f017fffb1318e93cc2231228e8ea18d8d8d914dbff75d8e9152fff4
*b8088d9f017fffb1378e8e8ea18d8d913e0000cc4e6d91053ffdb5748d9f017fffb1348e9109bc
*70cc2233228e8e9f2000008d8d917071b9b246696775726596035555343a910471c75468659374
*7261636593666f72937468659373696d706c659370726f6772616d93696e934669677572659331
*2e8e8e8e8e9f1e00008d9200e80000358e8e8c8b00000006000000000000000000000000000000
*00000000000000000000000000000000000000000000003176a0027900008da0fda30000a0023f
*00008da0fe020e398d9fde0e398d913e0000cc6461746196053ffd529361933d93529361935472
*6163658e9f2000008d8d917bb1b9b246696775726596035555353a910471c75468659364650c6e
*6974696f6e936f6693746865937691ff71c7616c75659377726170709a471d6572937490b8e379
*7098658e8e8e9f64e38e8d9fae0e398d913e0000cc6461746196053ffd547265659361933d934e
*6f646593285472656593612993496e749328547265659361298ea40c00008d9152fff47c96053f
*fd4c65616693618ea18d913e00003d3e8ea18d913e00006461746196053ffd547265659361933d
*934e6f64659328529328547265659361292993285293496e742993285293285472656593612929
*8ea18d917cffdc7c96053ffd4c6561669328529361298e9f2000008d8d920092b8d7b246696775
*726596035555363a910471c75491ff2aaa72616e73666f726d6174696f6e936f66936193646174
*617490b8e3797090471d652e8e8e8e9f1e00008d8d913e0000c8338e91564ccb4372656174696e
*67910566667472616365738e9f15e71b8d913e0000b25468659604a4ba63656e9ab8e37472616c
*936964656193697393746f936465726976986593619373656c662d74726163696e67937472616e
*73666f726d6564937698657273696f6e936f6693616e98799367697698656e8ea40c00008d913e
*000070726f6772616d2e9104542e5791ff2aaa659602fc8a77696c6c93696e9ab8e374726f9047
*1d647563659361936e98756d986290471d6572936f6693636f6d9862696e61746f727393746861
*749361637475616c6c79937090471d6572666f726d937468658ea18d913e000074726163659602
*f2636372656174696f6e2c9103062d627574930c72737493779ab8e3659377696c6c9364657363
*72696290471d6593686f987793746865937498797090471d6573936f6693619370726f6772616d
*9377696c6c93639868616e67658ea18d913e000064756596035555746f93746865937472616e73
*666f726d6174696f6e2e8e9f1bfe368d8d913e0000c9332e318e915cc0005490a0007970906000
*65960480007472616e73666f726d6174696f6e9372756c65738ea91275548d913e0000b2457690
*b8e36572799603b7de7691ff71c7616c756593696e937468659370726f6772616d9377696c6c93
*629a471d6593777261707098656493696e9374686593cc529103b7c5b2646174617490b8e37970
*98659328736565934669677572659335292e8ea18d913e00005468659602dd86696e9ab8e37475
*6974696f6e936973937468617493657698657279937691ff71c7616c756593696e93746865936f
*726967696e616c9370726f6772616d9373686f756c649368619876986593619377726170709047
*1d65648ea18d913e0000769bff71c7616c756596037977696e93746865937472616e73666f726d
*65649370726f6772616d93636f6e90b8e37461696e696e6793746865936f726967696e616c9376
*98616c756593616e64936193747261636593666f728ea18d913e000074686174910355557691ff
*71c7616c75652e8ea18d914d000052756c6573960438e073686f9ab8e377696e6793686f987793
*746865937498797090471d65739377696c6c93639868616e676593696e93746865937472616e73
*666f726d65649370726f6772616d936172658ea18d913e000070726573656e9ab8e37465649603
*5555696e93466967757265933893616e64937798659377696c6c936e6f98779364657363726962
*90471d6593746865936d6f74697691ff71c76174696f6e93666f72937468659372756c65732e8e
*9f19fe368d8d913e0000ca332e312e318e916123825491ff0aab72616365739603d554666f7293
*737472756374757265649364617461937691ff5c72616c7565738ea68d913e0000b24691ff2aaa
*6f729603ed866193737472756374757265649364617461937691ff71c7616c75652c9104139377
*9ab8e365937798616e98749361937472616365936e6f74936f6e6c7993666f7293746865936f75
*7465726d6f737493636f6e2d8ea18d913e0000737472756374696f6e9602906562757493616c73
*6f93666f7293616c6c93636f6d7090471d6f6e656e9ab8e374732e910430224691ff2aaa6f7293
*6578616d706c652c9102b7c946696775726593369373686f98777393686f987793619373696d70
*6c658ea18d913e00007472656596035555646174617490b8e379709a471d659377696c6c936298
*65937472616e73666f726d65642e8e9f19fe368d8d913e0000ca332e312e328e916123825491ff
*0aab72616365739603d554666f72937691ff5c72616c756573936f669366756e6374696f6e9374
*90ae3979709051c7658ea68d913e0000b2496e96044d807072696e6369706c652c91048b8b6193
*769bff71c7616c7565936f669366756e6374696f6e937490b8e3797090471d6593b50b91046e2d
*b821910464b3b50c9104d49cb2697393619373747275637475726564937698616c756593776974
*6893636f6e2d8ea18d913e00007374727563746f729603e8e0b82193b2616e6493636f6d709047
*1d6f6e656e90b8e3747393b50b9103f25ab2616e6493b50c9100871cb22e91062c695468659374
*72616e73666f726d6174696f6e9372756c6593666f7293737472756374757265648ea18d913e00
*007691ff71c7616c75657396032d0273619ab8e3797393746861749374686593749879709a471d
*6593b50b9105fd94b8219105f41ab50c9103b41eb273686f756c6493629865937472616e73666f
*726d656493696e90b8e3746f93cc5291032cf8b228b8528db25b91fe80045b8e96040e3eb50b8d
*90097ab25d91fe80045d8e910417b8b821528db25b91fe80045b8e93b50c8d9100871cb25d91fe
*80045d8e9104955a292e8ea18d913e0000419103da0466756e6374696f6e9603da266f6693749a
*b8e3797090471d6593b50b91078813b82191077e99b50c91046142b26861739361936775617261
*6e9874656593746f9366756c0c6c6c2c9603fb5a692e652e2c9367697698656e9603da26616e93
*617267756d656e98748ea18d913e00006f669603b6cb749ab8e3797090471d6593b50b9103c045
*b2697493cb6775617296ff7d27616e7465936573910488ecb2746861749603b6cb69749377696c
*6c9372657475726e9361937691ff71c7616c7565936f66937498797090471d6593b50c9100871c
*b22e91059629427574937472616e73666f726d65648ea18d913e000066756e6374696f6e739603
*7a4668617393619366757274686572936f626c69676174696f6e3b91038cbf74686579936d90b8
*e375737493616c736f9372657475726e936193cb747296ff7d276163936591043aa1b2666f7296
*037a4674686174937691ff71c7616c75658ea18d913e00006f6696038f6b749ab8e3797090471d
*6593b50c9100871cb22e910520084691ff2aaa756e6374696f6e73936f66937498797090471d65
*73937472616e73666f726d6564937573696e67937468659373696d706c659372756c6593666f72
*93737472756374757265648ea18d913e00007691ff71c7616c75657396032dcf63616e6e6f7493
*7090471d6f737369626c799366756c0c6c6c9374686174936f626c69676174696f6e2c910335b7
*73696e6365937768656e937468659366756e6374696f6e936973936170706c6965648ea18d913e
*00006974960299e4646f90471d6573936e6f74936b6e6f9ab8e377937468659363757272656e98
*7493747261636593286f7293657691ff71c7616c756174696f6e93636f6e98746578742993736f
*9369749363616e6e6f749370726f90471d6475636593618e8e9f1e00008d9200e80000368e8e8c
*8b0000000700000000000000000000000000000000000000000000000000000000000000000000
*0000000037fca0027900008da0fda30000a0023f00008da0fe3371c78d9fae0e398d9200b05dda
*b8528db25b91fe80045b8e9107639328b50b9102d092b8219102c718b50c9b00871cb229960355
*55b82193b25bb50b90097ab25d93b82193b25bb50c98b25d8d935d91fe80045d8e8ea40c00008d
*9200e58000b8298ea18d92008ffd81cc5296035555b228cc547261636593b82193528db25b91fe
*80045b8e9b040e3eb50b9102d092b8219102c718b50c8d9103dc71b25d91fe80045d8e9107eaaf
*b82193528db25b91fe80045b8e985bb50b90097ab25d93b82193b25bb50c9100871cb25d8d935d
*91fe80045d8e91076393298ea18d9200e58000b8298ea18d91553e57cc5296035555b228cc5472
*61636593b82193cc5293b228cc547261636593b82193cc5293b50b91035ecfb82193cc5293b50c
*9b00871cb22993b82193cc5293b228cc547261636593b82193cc5293b25bb50b90097ab25d93b8
*2193cc5293b25bb50c98b25d29298e9f2000008d8d920088dc6446696775726596035555373a91
*0471c75491ff2aaa72616e73666f726d6174696f6e936f6693619366756e6374696f6e937490b8
*e3797090471d652e8e8e8e9f1e00008d913e000066756c6c9602f87d747261636593666f729374
*68659372657475726e937691ff71c7616c75652e910452d55791ff2aaa6593736f6c769ab8e365
*93746869739370726f626c656d9362987993726571756972696e6793746861749366756e637469
*6f6e8ea40c00008d913e00007691ff71c7616c75657396044089617265936769769ab8e3656e93
*746865937472616365936f6693746865936170706c69636174696f6e937369746593617393616e
*93657874726193617267756d656e9874937768656e8ea18d913e0000746865799603eeae617265
*936170706c6965642e91063dd2417393616e936578616d706c652c91041504746865937490b8e3
*797090471d65936f6693746865937374616e6461726493cb6d617091049046b266756e6374696f
*6e9377696c6c8ea18d913e0000639ab8e368616e6765960355556173936465736372696290471d
*656493696e934669677572659337932872656d656d986290471d6572937468617493b82193b269
*7393726967689874936173736f90471d6369617469769865292e8ea18d914d00005791ff2aaa65
*96040309616c736f937795b8e3616e937496040309746f936290471d659361626c6593746f9374
*72616365937061727469616c6c79936170706c6965649366756e6374696f6e732e91067ae35468
*6174936d65616e738ea18d913e0000746861749602a08566756e6374696f6e73936d9ab8e37573
*749372657475726e93616e93cc52b22d7691ff71c7616c756593666f7293656163986893617267
*756d656e9874936974936973936170706c69656493746f2e910435825791ff2aaa659363616e8e
*a18d913e00007365659603609474686174937468697393726571756972656d656e9ab8e3749369
*739366756c0c6c6c65649362987993746865937498797090471d65937472616e73666f726d6174
*696f6e9372756c657393696e934669677572658ea18d913e0000382e8e9f754cca8d9fbee7d48d
*8d8d8d913e2a609fd831c889000066660158ab419f4a9c708d84004a9c70000066668d9fdd31c8
*8d8d8d8d8d9fe7e6648d8d910c5556b8528db25b91fe80045b8e9b076393b5748d91035555b25d
*91fe80045d8e910ab8e83d96035555cc5293b228b8548d91028aabb25b91fe80045b8e9109ee3e
*b5748d93b25d91fe80045d8e98298e8ea1a18d8d910c5556b8548d91028aabb25b91fe80045b8e
*910698e9cb746391ff7d276f6e9b035555b5748d9f017fffb1318e9107d1c8b22e9601aaaa2e93
*2e93b5748d9f017fffb46e8e8d9108c6d3b25d91fe80045d8e91102a663d98cb746391ff7d276f
*6e98b8528db25b91fe80045b8e9b076393b5748d9f017fffb1318e8d9107d1c8b25d91fe80045d
*8e910f355b2e932e932e9104ffffb8528db25b91fe80045b8e98b5748d9f017fffb46e8e8d9108
*c6d3b25d91fe80045d8e8e8d9200dc059928b56e9602c718b81593b2302c96035555cb746391ff
*7d276f6e93b836b23d9327b821b227298e8ea18d8d910c5556b8548d91028aabb25b91fe80045b
*8e9109ee3eb5748d9f017fffb1318e9607d1c8b8219b035555b5748d9f017fffb1328e8d93b25d
*91fe80045d8e910f355b3d98cc547261636598b82198528db25b91fe80045b8e96076393b5748d
*9f017fffb1318e8d910b271db25d91fe80045d8e91128ab0b82198528db25b91fe80045b8e93b5
*748d9f017fffb1328e8d9107d1c8b25d91fe80045d8e8e8ea18d8d910c5556b8548d91028aabb2
*5b91fe80045b8e9109ee3eb50b8d91035ecfb25d91fe80045d8e910ac262b82991035555b50b8e
*8e8e8e8e8e8e8e920157de7584004a9c70000066668e9e666689000066660158ab418e8e8e8e9f
*3f26658d8d917e4a9eb246696775726596035555383a910471c75490b8e3797090471d65937275
*6c657393666f72937472616e73666f726d65649365787072657373696f6e732e8e8e8e9f27fe36
*8d8d913e0000c9332e328e915cc0005491fee000726163652d6275696c64696e67910480007072
*696d6974697690a00065738ea41275548d8d913e0000ca332e322e318e916123825491ff0aab72
*6163696e679103d554636f6e7374616e90ae3974738ea18d913e0000b2419104c736636f6e7374
*616e90b8e3749604c795697393746865936e616d65936f6693619366756e6374696f6e2c960524
*257691ff71c761726961626c652c93636f6e7374727563746f729604c7956f72936c6974657261
*6c2e9108c88849749369738ea40c00008d913e0000726570726573656e9ab8e37465649604516f
*696e93746865937472616365936298799374686593cc4e6d93b2636f6e7374727563746f722e91
*0766145791ff2aaa659364650c6e6593619366756e6374696f6e93cb6391ff7d276f6e910515d2
*b2746f8ea18d913e000070726f9a471d647563659603239b616e93cc4e6d93b26e6f9864652c91
*032d8d6769769ab8e3656e936193747261636593616e64936193636f6e7374616e98742c91032d
*8d7365659346696775726593392e9104613454686593b84e9101793db22d73639868656d658ea1
*8d913e00006769769ab8e365739603555561937465787475616c93726570726573656e98746174
*696f6e936f6693616e936964656e9874690c65722e8e9f473e918d9fd6e7d48d8d8d8d913e2a60
*9ff031c889000066660158ab419f1a9c708d84001a9c70000066668d9ff531c88d8d8d8d8d9ee6
*648d8d910c5556cb6391ff7d276f6e910419b8749104482d769b0468e2b23d96035555cc5293cb
*7698b228cb749b04482db808cc4e6d93cb7498b84e8d9101793db25b91fe80045b8e9105877bcb
*768d9101138db25d91fe80045d8e910521cb298e8e8e8e8e8e8e8e920157de7584001a9c700000
*66668e9e666689000066660158ab418e8e8e8e9f2726658d8d917e1c6446696775726596035555
*393a910471c744650c6e6974696f6e936f669374686593636f6e7374616e90b8e374936e6f9047
*1d64652d6275696c6465722e8e8e8e8e9f1e00008d9200e80000378e8e8c8b0000000800000000
*00000000000000000000000000000000000000000000000000000000000000000000432fa00279
*00008da0fda30000a0023f00008da0fde400008d8d913e0000ca332e322e328e916123825491ff
*0aab726163696e679603d55466756e6374696f6e936170706c69636174696f6e738e9f1275548d
*913e0000b25791ff2aaa659604a41e77696c6c936e6f9ab8e377936465736372696290471d6593
*686f98779366756e6374696f6e936170706c69636174696f6e739377696c6c936290471d659374
*72616365642e91085e22419104a3c873796e987461637469638ea40c00008d913e00006f90471d
*6363757272656e63659602d4376f6693616e93cb6e9100c463b22d6172799366756e6374696f6e
*936170706c69636174696f6e93636f6e7369737473936f6693619366756e6374696f6e93706172
*7493b5669103e7c6b2616e649361722d8ea18d913e000067756d656e90b8e3747396029da8b565
*8d9f017fffb1318e91071a1bb2746f93b5658d9f017fffb46e8e9105717eb22e9104348e546865
*93747261636593666f7293746865936170706c69636174696f6e936861739361936f6e652d746f
*2d6f6e6593636f727265737090471d6f6e64656e63658ea18d913e0000776974689603c3457468
*6593cc417093b2636f6e7374727563746f72937468617493616c736f93636f6e90b8e37461696e
*9374726163657393666f72937468659366756e6374696f6e937061727493616e64937468658ea1
*8d913e0000617267756d656e9ab8e374732e910475784669677572659603569031309373686f98
*7773937468659364650c6e6974696f6e936f6693619366756e6374696f6e93cb7661708d9f017f
*ffb46e8e9108c80eb27468617493636f6e7374727563747393618ea18d913e0000747261636596
*035555666f72936170706c69636174696f6e732e8e9f6b3e918d9fc4e7d48d8d8d8d913e2a609f
*de31c889000066660158ab419f3e9c708d84003e9c70000066668d9fe331c88d8d8d8d8d9fede6
*648d8d910c5556cb7661708d9f017fffb46e8e9108c6d3cc548d9f017fffb1308e9b047c73b228
*cc5296035555cb6693748d9f017fffb4668e91052f20b22993cb658d9f017fffb1318e98b24028
*cc528d9103eeed8900006666000300028e910a4444cb748d9f017fffb4658d9f010000b0318e8e
*9108326bb22993cb658d9f017fffb1328e98b24028cc528d9103eeed8900006666000300028e9b
*0a4444cb748d9f017fffb4658d9f010000b0328e8e9108326bb2298d93b53a9601aaa83a933a8e
*91125551cb658d9f017fffb46e8e9105717eb24028cc528d9103eeed8900006666000300028e98
*cb748d9f017fffb4658d9f010000b36e8e8e910932b7b229933d8e8ea18d8d9128c93df322dfea
*3c78000a0000000a00000007636d6974743130cd6c6574960393e7cb748d9f017fffb1318e9b08
*105acb3d93748d9f017fffb1308e98b808cc417093cb748d9f017fffb1308e98cb5b748d9f017f
*ffb4668e91052f20cb2c93748d9f017fffb4658d9f010000b0318e8e9b08326bcb2c93748d9f01
*7fffb4658d9f010000b0328e8e98cb2c8d93b53a9601aaa83a933a8e910f3e8ecb2c93748d9f01
*7fffb4658d9f010000b36e8e8e910932b7cb5d8e8ea18d8d9128c93dcd696e960393e7cb766170
*8d9f017fffb46ef30c4f21e28500070000000700000005636d737937b700b1318e911341d9cb74
*8d9f017fffb1318e9b08105acb286693748d9f017fffb1318e98cb658d9f017fffb1318e91047c
*73cb2993658d9f017fffb1328e8d98b53a9601aaa83a933a8e91174ee8cb658d9f017fffb46e8e
*8e8ea18d8d910c5556cb7661708d9f017fffb1308e9608105acb748d9f017fffb1308e93cb6596
*0393e73d93658e8e8e8e8e8e8e8e920157de7584003e9c70000066668e9e666689000066660158
*ab418e8e8e8e9f3926658d8d9175837fb24669677572659603555531303a910471c744650c6e69
*74696f6e936f6693746865936170706c69636174696f6e9374726163652d6275696c6465722e8e
*8e8ea9160e398d914d0000486f95b8e3779365769365729603a287746869739364650c6e697469
*6f6e9368617393619364726195b8e377626163936b2e9105595e49669b03a28777936598617265
*9874726163696e67987468659866756e6374696f6e9863616c6c8ea18d913e0000cb669603559e
*3193329333b22c91031f2c6974960311a177696c6c9370726f9a471d6475636593619374726163
*659377697468937365706172617465936e6f9864657393666f729365616390b8e368936f6693cb
*669603559e3193329333b22c91031f2ccb286693312993329333b22c8ea18d913e0000616e649b
*033367cb282866960374b031299332299333b22c91033a307768696395b8e368986973986e6f74
*987793616e937498779365987793616e93742e910466785791ff2aaa65986f6e6c79987793616e
*937498746865987472616365986f669874686598746f702d8ea18d913e00006c65769ab8e3656c
*960305dd63616c6c2e9104574a5491ff2aaa6f9361639868696576986593746869732c9b0315c2
*696e7374656164936f669363616c6c696e6793cb7661708d9f017fffb46eb700b1318e910fadf2
*b22c987790b8e3659363616c6c93619366756e6374696f6e93cb61708d9f017fffb46eb700b131
*8e9112b3cfb2696e8ea18d913e0000cb7661708d9f017fffb46e8e9109359cb2746861749603c4
*1e646f9a471d6573936e6f74936275696c649361937472616365936e6f98646593666f72937468
*65936170706c69636174696f6e2e9b05be21536565934669677572659331312e985791ff2aaa65
*8ea18d913e0000646f960355556e6f74936e6565649374686593cb7661708d9f017fffb1308e9b
*07d1c8b264650c6e6974696f6e93616e90b8e3796d6f72652c9373696e636593cb61708d9f017f
*ffb1308e98b277696c6c93646f93746865936a6f6293696e73746561642e8ea000833e918d9fb8
*e7d48d8d8d8d913e2a609fd231c889000066660158ab419f569c708d8400569c70000066668d9f
*d731c88d8d8d8d8d9fe1e6648d8d910c5556cb7661708d9f017fffb46e8e91090565cb748d9f01
*7fffb1308e9108105acb28cc52960393e7cb6693748d9f017fffb4668e91052f20cb2993658d9f
*017fffb1318e9b047c73cb4028cc528d910430e88900006666000311128e910ad5e1cb748d9f01
*7fffb4658d9f010000b0318e8e9108326bcb2993658d9f017fffb1328e98cb4028cc528d910430
*e88900006666000311128e9b0ad5e1cb748d9f017fffb4658d9f010000b0328e8e9108326bcb29
*8d93b53a9601aaa83a933a8e9112d275cb658d9f017fffb46e8e9105717ecb4028cc528d910430
*e88900006666000311128e98cb748d9f017fffb4658d9f010000b36e8e8e910932b7cb29933d8e
*8ea18d8d9128c93d6c6574960393e7748d9f017fffb1318e9b08105acb3d93748d9f017fffb130
*8e98b808cc417093cb748d9f017fffb1308e98cb5b748d9f017fffb4668e91052f20cb2c93748d
*9f017fffb4658d9f010000b0318e8e9b08326bcb2c93748d9f017fffb4658d9f010000b0328e8e
*98cb2c8d93b53a9601aaa83a933a8e910f3e8ecb2c93748d9f017fffb4658d9f010000b36e8e8e
*910932b7cb5d8e8ea18d8d9128c93d696e960393e761708d9f017fffb46eb700b1318e911341d9
*cb748d9f017fffb1318e9b08105acb286693748d9f017fffb1318e98cb658d9f017fffb1318e91
*047c73cb2993658d9f017fffb1328e8d98b53a9601aaa83a933a8e91174ee8cb658d9f017fffb4
*6e8e8e8ea18d8d910c5556cb61708d9f017fffb46e8e91090565cb748d9f017fffb1308e910810
*5acb28cc52960393e7cb6693748d9f017fffb4668e91052f20cb2993658d9f017fffb1318e9b04
*7c73cb4028cc528d910430e88900006666000311128e910ad5e1cb748d9f017fffb4658d9f0100
*00b0318e8e9108326bcb2993658d9f017fffb1328e98cb4028cc528d910430e889000066660003
*11128e9b0ad5e1cb748d9f017fffb4658d9f010000b0328e8e9108326bcb298d93b53a9601aaa8
*3a933a8e9112d275cb658d9f017fffb46e8e9105717ecb4028cc528d910430e889000066660003
*11128e98cb748d9f017fffb4658d9f010000b36e8e8e910932b7cb29933d8e8ea18d8d9128c93d
*61708d9f017fffb46eb700b1318e911341d9cb748d9f017fffb1308e9608105acb28669b0393e7
*748d9f017fffb1308e93cb658d9f017fffb1318e91047c73cb2998658d9f017fffb1328e8d93b5
*3a9601aaa83a933a8e91174ee8cb658d9f017fffb46e8e8e8ea18d8d910c5556cb61708d9f017f
*ffb1308e9608105acb748d9f017fffb1308e93cb65960393e73d93658e8e8e8e8e8e8e8e920157
*de758400569c70000066668e9e666689000066660158ab418e8e8e8e9f4526658d8d917961adb2
*4669677572659603555531313a910471c744650c6e6974696f6e936f6693cb61708d9f017fffb4
*6e8e9108c6d3b2616e6493746865936d6f90471d64690c656493cb7661708d9f017fffb46e8e91
*05717eb22e8e8e8ea68d914d00004669677572659602638b31329373686f9ab8e3777393686f98
*7793746865936170706c69636174696f6e937472616365729377696c6c936290471d6593757365
*6493696e93746865937472616e73666f726d6174696f6e8ea18d913e00006f669603890e746865
*9365787072657373696f6e93cb669603c37d78932867933129b22c910395fd7768657265960389
*0ecb6693b2616e6493cb6793b261726593cb6c6574b22d6290471d6f756e649366756e6374696f
*6e7393616e6493cb7893b26973936193b515b22d8ea18d913e00006290471d6f756e649604ad9e
*7691ff71c761726961626c652e91087aa154686593736390b8e368656d65937573656493666f72
*937472616e73666f726d696e679365787072657373696f6e739369739363616c6c656493746865
*8ea18d913e0000b8459100e4f8b22d73639ab8e368656d652c91043869616e6496040afe697493
*686173936193636f6e98746578749374686174936973937468659363757272656e987493747261
*636593cb749104fdd6b2666f7293746865936170706c69636174696f6e8ea18d913e0000746861
*749603555563726561746564937468659365787072657373696f6e2e8e9f1bfe368d8d913e0000
*c9332e338e915cc0004691fee000756e6374696f6e9104800064650c6e6974696f6e738e9f1275
*548d913e0000b24f6e659603e8486d69676890b8e374937468696e6b937468617493619366756e
*6374696f6e9364650c6e6974696f6e93636f756c64936290471d65937472616e73666f726d6564
*93617393696e934669677572658ea18d913e000031332c96035555627574937468657265936973
*93619370726f626c656d93776974689374686973936e61697690b8e365937472616e73666f726d
*6174696f6e2e8e8e9f1e00008d9200e80000388e8e8c8b00000009000000000000000000000000
*00000000000000000000000000000000000000000000000000004da9a0027900008da0fda30000
*a0023f00008da0fe134cca8d9fd6e7d48d8d8d8d913e2a609ff031c889000066660158ab419f1a
*9c708d84001a9c70000066668d9ff531c88d8d8d8d8d9ee6648d8d910c5556b8458d9100e4f8b2
*5b91fe80045b8e9104f336b566910468e47896035555b228b5679103b12eb231298d935d91fe80
*045d8e8d910763939f017fffb4748e910e3e3eb82993cb7661708d9f017fffb1328e9b08105acb
*74960393e72866937429937893287661708d9f017fffb1318e98cb7493286793742993286391ff
*7d276f6e9374933129298e8e8e8e8e8e8e8e920157de7584001a9c70000066668e9e6666890000
*66660158ab418e8e8e8e9f2726658d8d9162ce24b24669677572659603555531323a910471c741
*6e936578616d706c65937472616e73666f726d6174696f6e936f669366756e6374696f6e936170
*706c69636174696f6e8e8e8e9f5c4cca8d9fcb67d48d8d8d8d913e2a609fe4b1c8890000666601
*58ab419f319c708d8400319c70000066668d9fe9b1c88d8d9fff80008d8d9ff400008d91065555
*b8468d9100fe39b25b91fe80045b8e910861cccb669b0393e7788d9f017fffb1318e9108105acb
*2e960188882e932e93788d9f017fffb46e8e91090565cb3d98658d98b25d91fe80045d8e8ea40c
*00008d91065555b8298ea18d91065555cb668d9f017fffb4448e910ad4decb748d9f017fffb130
*8e9608105acb788d9f017fffb1318e93cb2e960188882e932e93788d9f017fffb46e8e91090565
*cb3d910393e7b8458d9100e4f8b25b91fe80045b8e9108488bcb658d91035555b25d91fe80045d
*8e8d910763939f017fffb4748d9f010000b0308e8e8e8e8e9f0f80008e8e8e920157de75840031
*9c70000066668e9e666689000066660158ab418e8e8e8e9f32a6658d8d9174070bb24669677572
*659603555531333a910471c741936e61697690b8e3659366756e6374696f6e9364650c6e697469
*6f6e937472616e73666f726d6174696f6e2e8e8e8e9f1e00008d914d000053696e63659604c2cf
*66756e6374696f6e73936e65656493746f9374616b9ab8e36593617267756d656e987473936f6e
*6593617493619374696d652c91051e2d77986593696e73746561649375736593618ea40c00008d
*913e0000777261707090471d65729603fde166756e6374696f6e93cb66756e8d9f017fffb46e8e
*91096f5fb274686174937475726e73936193637572726965649366756e6374696f6e9328746865
*936e61697690b8e3656c79937472616e73666f726d65648ea18d913e000066756e6374696f6e29
*9603fe36696e9ab8e3746f93619366756e6374696f6e937468617493666f729365616398689361
*7267756d656e98749372657475726e7393616e93cc52b22d7691ff71c7616c75652e91066c6947
*697698656e93618ea18d913e000063757272696564960311ad66756e6374696f6e2c9b031f3574
*6865936e616d65936f66937468659366756e6374696f6e2c98616e6493619374726163652c98cb
*66756e8d9f017fffb46e8e9108832bb272657475726e7393616e93cc52b22d7691ff71c7616c75
*658ea18d913e0000636f6e9ab8e37461696e696e67960286dd74686593777261707090471d6564
*9366756e6374696f6e93616e649374686593747261636593666f72937468659366756e6374696f
*6e936964656e9874690c65722e91042cf54669677572658ea18d913e000031349604035473686f
*90b8e37773937468659364650c6e6974696f6e936f6693cb66756e8d9f017fffb46e8e9105717e
*b22e91067bc44e6f74659374686174937468657265936973936193736570617261746593617070
*6c69636174696f6e93666f728ea18d913e00006561639ab8e3689602d8747265616c9361726775
*6d656e98742e9104482754686973936973936290471d656361757365937468659366756e637469
*6f6e936d6967689874936290471d65937061727469616c6c79936170706c69656493616e648ea1
*8d913e00007795b8e3659b035c757793616e937498746f98686193769365987472616365739866
*6f72986290471d6f74689874686598726573756c7498cb6691057b09b26f669874686598706172
*7469616c986170706c69636174696f6e2c91035e3d616e64987468658ea18d913e000072657375
*6c7473960355556f627461696e6564936290b8e379936170706c79696e6793cb66b22e8ea000a7
*3e918d9fa6e7d48d8d8d8d913e2a609fc031c889000066660158ab419f7a9c708d84007a9c7000
*0066668d9fc531c88d8d8d8d9fcfe6648d8d91065555cb66756e8d9f017fffb46e8e9108c6d3cb
*66910393e7667391035555748d9f017fffb1308e9107d1c8b23d8e8ea18d8d91148f48cc529103
*5555b228b515cb748d9f017fffb1318e9107d1c8cb658d9f017fffb1318e91047c73b8218e8ea1
*8d8d91210829cc5291035555b228b515cb748d9f017fffb1328e9107d1c8cb658d9f017fffb132
*8e91047c73b8218e8ea18d8d8d912d810ab53a9601aaa83a933a8e8e8ea18d8d91392bb1cc5296
*035555b228b515cb748d9f017fffb46e8e9b08c6d3cb658d9f017fffb46e8e9105717eb821cb66
*93748d9f017fffb46e8e98cb658d9f017fffb1318e8d9107d1c8b53a9601aaa83a933a8e9116d1
*c4cb658d9f017fffb46e8e9105717eb2298e8ea18d8d9141c103cb748d9f017fffb46eb700b131
*8e910fadf2b2298e8ea18d8d8d912d810ab53a9601aaa83a933a8e8e8ea18d8d91299d7bcb748d
*9f017fffb1318e91047c73b2298e8ea18d8d911d249a5bcc4e6d91035555cb748d9f017fffb130
*8e9107d1c8cb6673b25d8e8e8e8e8e8e8e920157de7584007a9c70000066668e9e666689000066
*660158ab418e8e8e8e9f5726658d8d9200a0c73b4669677572659603555531343a910471c75468
*659364650c6e6974696f6e936f6693cb66756e8d9f017fffb46e8e9105717eb22e8e8e8e9f160e
*398d914d00005573696e6796032d0c74686593cb66756e8d9f017fffb46e8e91089e8ab266756e
*6374696f6e93779ab8e3659363616e936e6f9877936769769865937468659366756c6c93747261
*6e73666f726d6174696f6e936f669366756e6374696f6e8ea18d913e000064650c6e6974696f6e
*732c9603555573686f90b8e3776e93696e934669677572659331352e8ea18d914d000046696775
*72659604264731369373686f90b8e3777393746865937472616e73666f726d6174696f6e936f66
*93619373696d706c65936578616d706c659370726f6772616d2e9106e49d496e937468658ea18d
*913e000070726f6772616d96035555cc548d9f017fffb1308e9107d1c8b264656e6f7465739374
*686593696e697469616c9374726163652e8ea18d914d00005468659602a78c747261636593666f
*729374686593726573756c74936f66937468659370726f6772616d93696e934669677572659331
*369363616e936290471d65937365656e93696e934669677572659331372e8ea18d913e00004d61
*6e9ab8e37996036f457061727473936f6693746865937472616365937374727563747572659361
*7265937368617265642e9104bf984691ff2aaa6f72936578616d706c652c910375c17468659369
*6e697469616c9328656d70749879298ea18d913e0000747261636596033878cb548d9f017fffb1
*308e9107b4ebb269739373686172656493629ab8e37993616c6c937375622d7472616365732e91
*0468285768656e65769865729361936e6577936e6f90471d646593697393696e9874726f90471d
*647563656493696e937468658ea18d913e000074726163652c9103ff5e69749603dd5d69739367
*69769ab8e3656e9361936e616d659328696e937468659372696768987493636f6c756d6e292e91
*0609de54686174936e616d65936973937573656493696e7374656164936f668e8e9f1e00008d92
*00e80000398e8e8c8b0000000a0000000000000000000000000000000000000000000000000000
*0000000000000000000000005d52a0027900008da0fda30000a0023f00008da0fe374cca8d9fc4
*e7d48d8d8d8d913e2a609fde31c889000066660158ab419f3e9c708d84003e9c70000066668d9f
*e331c88d8d8d8d8d9fede6648d8d910c5556b8468d9100fe39b25b91fe80045b8e910861cccb66
*9b0393e7788d9f017fffb1318e9108105acb2e960188882e932e93788d9f017fffb46e8e910905
*65cb3d98658d91035555b25d91fe80045d8e8e8ea40c00008d8d912c1e923d8e8ea18d8d910c55
*56cb668d9f017fffb4448e910ad4decb3d910393e766756e8d9f017fffb46e8e91090565b5668d
*9101138f9ffc5effb7308e910775afcb2266228e8ea18d8d911a8f497768657291ff7d27659b03
*93e7b5668d9101138f9ffc5effb7308e910775afcb748d9f017fffb1308e9608105acb788d9f01
*7fffb1318e93cb2e960188882e932e93788d9f017fffb46e8e91090565cb3d98b8458d9100e4f8
*cb5b91fe777d5b8e9109127c658d985d91fe777d5d8e8d91082d849f017fffb4748d9f010000b0
*308e8e8e8e8e8e8e8e8e8e920157de7584003e9c70000066668e9e666689000066660158ab418e
*8e8e8e9f3926658d8d917378d2b24669677572659603555531353a910471c75468659366756c6c
*9366756e6374696f6e9364650c6e6974696f6e937472616e73666f726d6174696f6e2e8e8e8ea0
*00a54cca8d9fa6e7d48d8d8d8d913e2a609fc031c889000066660158ab419f7a9c708d84007a9c
*70000066668d9fc531c88d8d8d8d8d9fcfe6648d8d910c5556cc6c657496053ffd669378933d93
*6793789378932b93788e8ea40c00008d8d9121554a6796053ffd789379933d93782a798e8ea18d
*8d910c5556696e910a7ffa6691053ffd338e8ea18d8d9128c93db8298e8ea18d8d910c5556cc6c
*657496053ffd66933d9366756e8d9f017fffb1318e9109bc70cc662796035555b84e8d9101793d
*b25b91fe80045b8e9108dcd0cc668d93b25d91fe80045d8e8e8ea18d8d9136553ecc7768657265
*96053ffd662793749378933d937661708d9f017fffb1328e9b09bc70cc749328282b2993742993
*287661708d9f017fffb1328e98cc74932867937429937893782993788e8ea18d8d9121554a6796
*053ffd3d9366756e8d9f017fffb1328e9109bc70cc6727932267228e8ea18d8d9136553e776865
*726596053ffd6727937493789379933d937661708d9f017fffb1328e9109bc70cc749328282a29
*937429937893798e8ea18d8d910c5556696e910a7ffa7661708d9f017fffb1318e9609bc70cc74
*8d9f017fffb1308e93cc286696053ffd748d9f017fffb1308e91047c73cc299328636f6e93748d
*9f017fffb1308e9109bc70cc33298e8e8e8e8e8e8e8e920157de7584007a9c70000066668e9e66
*6689000066660158ab418e8e8e8e9f5726658d8d9200819547b24669677572659603555531363a
*910471c75491ff2aaa72616e73666f726d6174696f6e936f6693619373696d706c659370726f67
*72616d2e8e8e8e9f1e00008d913e000073686f90b8e377696e6796035555746861749374726163
*6593616761696e937768656e93697493697393726566657272656493746f93696e936f74686572
*937472616365732e8ea40c00008d914d0000496e9603a63774686593747261636593779ab8e365
*9363616e9373656593746861749374686593726573756c7493697393cc313293b228746865936c
*617374936e6f90471d646593696e9374686593746f702d6c657698656c8ea18d913e0000747261
*63652996035552616e649374686174936974937790b8e361739374686593726573756c74936f66
*9361932b936170706c69636174696f6e93666f726d65649361739370617274936f669374686593
*6295471d6f9364798ea18d913e00006f6696033fb6cc6691053ffd33b22c910344097769746893
*617267756d656e90b8e37473937468617493657691ff71c7616c756174656493746f93cc3993b2
*616e6493cc33b22e91046a9242757493776865726593617265937468659363616c6c7393746f93
*cc2a8ea18d913e0000b2616e649602cca0cc67b23f91044436496693779ab8e365937374756479
*937468659374726163659377986593736565937468617493cc3993b27798617393746865937265
*73756c74936f6693cc3396053ffd2a93339602cca0b277686963986893666f726d65648ea18d91
*3e00007468659b04927c6295471d6f936479986f6698cc6796053ffd339333b22e9108293b416c
*6c987691ff71c7616c75657398686195b8e37693659866756c6c98747261636573986f6698686f
*9377987468657998779365726598636f6d70757465642e8ea18d913e00004691ff2aaa6f729604
*5b27696e7374616e63652c91049c9c696e93746865936170706c69636174696f6e936e6f90471d
*646593666f72937468659363616c6c93746f93cc6793b228cb61708d9f017fffb1338e91047c73
*b22993746865937472616365936f66937468658ea18d913e00006170706c69636174696f6e9603
*555574686174936372656174656493cb61708d9f017fffb1338e9107d1c8b269739373746f7265
*649328cb61708d9f017fffb1318e91047c73b22c937468659363616c6c93746f93cc66b2292e8e
*9f19fe368d8d913e0000ca332e332e318e916123824f7690ae3965722d73617475726174656491
*03d5546170706c69636174696f6e738e9f1275548d913e0000b24191023fbb66756e6374696f6e
*960240026170706c69636174696f6e9374686174936170706c69657393619366756e6374696f6e
*93746f936d6f726593617267756d656e90b8e37473937468616e93697493616363657074732c8e
*a18d913e000069739604760b7361696493746f936290471d6593cb6f7665722d736174757296ff
*7d276174659364b22e9107d3ea5468659604760b66756e6374696f6e9377696c6c937573659361
*73936d616e9ab8e37993617267756d656e9874739361739369748ea18d913e0000616363657074
*739602d551616e649370726f90471d647563659361936e65779366756e6374696f6e932870726f
*9ab8e37669646564937468659370726f6772616d936973937798656c6c2d7498797090471d6564
*29937768696398688ea18d913e000069739603a52f6170706c69656493746f9374686593726573
*74936f669374686593617267756d656e9ab8e374732e910561565468659374726163652d636f6e
*737472756374696f6e936d65639868616e69736d937798658ea18d913e0000686195b8e3769365
*9603555564657369676e656493736f66617293779ab8e36f726b73937798656c6c93666f729370
*61727469616c6c79936170706c69656493616e64937361747572617465649366756e6374696f6e
*732e8ea18d914d0000486f95b8e3779365769365722c9104249374686572659603fb2169739361
*9370726f626c656d9377697468936275696c64696e679374726163657393666f729366756e6374
*696f6e936170706c69636174696f6e738ea18d913e0000746861749b03a6ed6f95b8e376936572
*2d73617475726174659866756e6374696f6e732c9103bb5361739863616e986290471d65987365
*656e98696e984669677572659831392e91056690496e9873756393689863617365739874726163
*65738ea18d913e0000666f729604045d63616c6c73936d6164659366726f6d9377697468696e93
*746865936f95b8e3769365722d7361747572617465649604045d66756e6374696f6e9361637475
*616c6c7993676574936c6f73742e91067ede5468658ea18d913e0000726561736f6e9603d7b763
*616e936290471d65937365656e93696e937468659364650c6e6974696f6e936f6693cb61708d9f
*017fffb46e8e9105717eb22e9105f8ec496693616e936170706c69636174696f6e936f95b8e376
*9365722d7361747572617465739103d7b7618ea18d913e000066756e6374696f6e9603b91f6f66
*93617269749ab8e37993b56eb22c9103d2127468659366756e6374696f6e616c93617267756d65
*6e987493b5669104ccaeb2746f93cb61708d9f017fffb46e8e91092a9db277696c6c9372657072
*6573656e98749374686593726573756c748ea18d913e00006f6696045daa619373617475726174
*65649363616c6c93636f6d706c6574659377697468936193747261636593b5748d9f017fffb466
*8e91052f20b22c91049fbecb77686963689104871661708d9f017fffb46e8e9109f894cb69676e
*6f7291ff7d276573219108c8a4b25791ff2aaa659363616e6e6f748ea18d913e0000696e636c75
*6465960409ac74686593747261636593666f72937468659366756e6374696f6e93706172749366
*6f72936561639ab8e36893726563757273697698659363616c6c93746f93cb61708d9f017fffb4
*6e8e9105717eb22c910436c26290471d6563617573658e8e9f1e00008d9200e57fff31308e8e8c
*8b0000000b00000000000000000000000000000000000000000000000000000000000000000000
*0000000068b1a0027900008da0fda30000a0023f00008da0fe88582b8da0ff5a0e39a40c00008d
*8d913e0000cc526f6f7491053ffdb8088d9f017fffb1318e8e8ea18d8d913e0000cc417096053f
*fd526f6f748d935b8e910a7ffa526f6f7493b8088d9f017fffb1328e9b09bc70cc4e6d93526f6f
*74932266222c93526f6f7493b8088d9f017fffb1338e98cc4e6d93526f6f74932233228d5d8e93
*b8088d9f017fffb1348e8e8ea18d8d913e0000cc417091053ffdb5748d9f017fffb1318e8e8ea1
*8d8d8d914dbff7cc5b8e9152fff4b5748d9f017fffb1318e9609bc70b8088d9f017fffb1358e93
*cc4e6d91053ffdb5748d9f017fffb1318e93cc222b228e8ea18d8d914dbff72cb5748d9f017fff
*b1318e9109bc70b8088d9f017fffb1368e8e8ea18d8d9152fff4cc41709b053ffdb5748d9f017f
*ffb1318e8d9109bc70cc5b8e910efc6db5748d9f017fffb1318e9609bc70b8088d9f017fffb137
*8e93cc4e6d98b5748d9f017fffb1318e93cc2267222c98b5748d9f017fffb1338e96047c73cc2c
*98b5748d9f017fffb1338e8d93cc5d8e9109bc70b8088d9f017fffb1388e8e8ea18d8d9152fff4
*cc41709b053ffdb5748d9f017fffb1368e8d9109bc70cc5b8e910efc6db5748d9f017fffb1368e
*9609bc70b8088d9f017fffb1398e93cc4e6d98b5748d9f017fffb1368e93cc222a222c98b5748d
*9f017fffb1338e96047c73cc2c98b5748d9f017fffb1338e8d93cc5d8e9109bc70b8088d9f017f
*ffb131308e8e8ea18d8d9152fff4cc4e6d91053ffdb5748d9f017fffb1388e9109bc70cc223922
*8e8ea18d8d914dbff72cb5748d9f017fffb1338e8e8ea18d8d8d914dbff7cc5d8e9152fff4b808
*8d9f017fffb131318e8e8ea18d8d913e0000cc4e6d91053ffdb5748d9f017fffb1348e9109bc70
*cc223132228e8e9f2000008d8d915f0e28b24669677572659603555531373a910471c754686593
*747261636593666f7293746865937472616e73666f726d65649370726f6772616d93696e934669
*677572659331362e8e8e8e9f1e00008d913e00007468656e9603377a779ab8e365936765749374
*68659373616d659370726f626c656d9374686174936d61646593757393746f93696e9874726f90
*471d6475636593cb61708d9f017fffb46e8e9108a8f8b2696e93746865930c72737493706c6163
*652e8ea40c00008d913e00005791ff2aaa659603072e6f6e6c79937795b8e3616e93749603072e
*746f93696e636c7564659374686593747261636593cb696693b27468659366756e6374696f6e93
*706172749369739374686593726573756c74936f6693619363616c6c93746f93618ea18d913e00
*0066756c6c799602f7017361747572617465649366756e6374696f6e2e9104525642757493686f
*9ab8e37793646f93779865936b6e6f987793746861743f91045256496693779865936c6f90471d
*6f6b93696e937468659364650c6e6974696f6e8ea18d913e00006f66960380e6cb66756e8d9f01
*7fffb46e8e9108f264b2779ab8e36593736565937468617493616e93756e736174757261746564
*9366756e6374696f6e936973936170706c69656493746f93697473936f98776e9374726163652e
*9104f47a5768656e8ea18d913e0000cb61708d9f017fffb46e8e9108c7d7b26170706c69657396
*035659619366756e6374696f6e2c9103569a69749363616e936395b8e3686563936b9603565969
*669374686593747261636593696e9374686593726573756c7493cb6973960394d6746865937361
*6d6596035659b26173937468658ea18d913e00006f6e659604206070617373656493746f937468
*659366756e6374696f6e936173930c72737493617267756d656e90b8e3742e9106d2e749669374
*68659374726163657393617265937468659373616d652c910453227468658ea18d913e00006170
*706c69636174696f6e960355556973937061727469616c3b936f74686572776973659369749369
*73937361747572617465642e8ea18d914d0000546869739603ce13736f756e64739373696d706c
*652c9103ec43627574936974936973936e6f74937090471d6f737369626c6593696e9361937075
*72659366756e6374696f6e616c936c616e677561676593746f8ea18d913e000074657374960455
*3b657175616c69749ab8e379936f6693cb6f626a6591ff7d27637473b22c910495346f6e659363
*616e936f6e6c79937465737493657175616c69749879936f6693cb76616c756573b22e91077179
*427993696e9874726f90471d647563696e678ea18d913e0000619604790b66756e6374696f6e93
*666f7293cb7096ff7d276f696e7465729104a04765937175616c6974799604790bb2779ab8e365
*9363616e936f9876986572636f6d6593746869739370726f626c656d2e9107dce9546865936d6f
*90471d64690c65648ea18d913e0000769ab8e3657273696f6e960308036f6693cb61708d9f017f
*ffb46e8e91087981b269739370726573656e9874656493696e934669677572659331382e910458
*0154686973936e657793657175616c697498799366756e6374696f6e936973936f6693636f7572
*73658ea18d913e00006e6f7496045a277265666572656e9ab8e37469616c6c79937472616e7370
*6172656e98742c91049b5b6275749361749374686593706c616365936974936973937573656493
*7798659361726593696e98746572657374656493696e8ea18d913e0000696d706c656d656e9ab8
*e3746174696f6e9602f13c64657461696c73936f669366756e6374696f6e739328692e652e2c91
*03054174686569729373796e98746163746963616c936172697498792993736f93697493697393
*61637475616c6c798ea18d913e00006f669603d8e0766974616c93696d709a471d6f7274616e63
*659374686174936974936973937265666572656e90b8e37469616c6c79936f70617175652e9105
*fc674691ff2aaa726f6d93619366756e6374696f6e616c9370986f696e90b8e374936f668ea18d
*913e0000766965772c9104f4b67468659b04a1a37495b8e377936f9866756e6374696f6e986465
*0c6e6974696f6e7398cc6696053ffd78933d93cb65910561feb2616e6498cc66933d935c78932d
*3e98cb65910561feb2686195b8e3769365987468659873616d658ea18d913e00006d65616e696e
*672c91034538627574960341317468657993686195b8e37693659b03413164690b6572656e9374
*9873796e93746163746963616c98617269746965732c91034538776869639368986d65616e7398
*74686579986d93757374986290471d658ea18d913e0000747265617465649603555564690b6572
*656e90b8e3746c7993696e93746865937472616365722e8ea0008f3e918d9fb2e7d48d8d8d8d91
*3e2a609fcc31c889000066660158ab419f629c708d8400629c70000066668d9fd131c88d8d8d8d
*8d9fdbe6648d8d910c5556cb61708d9f017fffb46e8e91090565cb748d9f017fffb1308e910810
*5acb28cc52960393e7cb6693748d9f017fffb4668e91052f20cb2993658d9f017fffb1318e9b04
*7c73cb4028cc528d910430e88900006666000311128e910ad5e1cb748d9f017fffb4658d9f0100
*00b0318e8e9108326bcb2993658d9f017fffb1328e98cb4028cc528d910430e889000066660003
*11128e9b0ad5e1cb748d9f017fffb4658d9f010000b0328e8e9108326bcb298d93b53a9601aaa8
*3a933a8e9112d275cb658d9f017fffb46e8e9105717ecb4028cc528d910430e889000066660003
*11128e98cb748d9f017fffb4658d9f010000b36e8e8e910932b7cb29933d8e8ea18d8d9128c93d
*6966960393e7748d9f017fffb1308e9108105acb607091ff7d276f696e746572457175616c5491
*ff3bbc6f6093748d9f017fffb4668e9108c307cb7468656e8e8ea18d8d9137033161708d9f017f
*ffb46eb700b1318e911341d9cb748d9f017fffb1308e9608105acb28669b0393e7748d9f017fff
*b1308e93cb658d9f017fffb1318e91047c73cb2998658d9f017fffb1328e8d93b53a9601aaa83a
*933a8e91174ee8cb658d9f017fffb46e8e8e8ea18d8d9128c93dcb656c73658e8ea18d8d913703
*316c6574960393e7748d9f017fffb1318e9b08105acb3d93748d9f017fffb1308e98b808cb28cc
*417093cb748d9f017fffb1308e98cb5b748d9f017fffb4668e91052f20cb2c93748d9f017fffb4
*658d9f010000b0318e8e9b08326bcb2c93748d9f017fffb4658d9f010000b0328e8e98cb2c8d93
*b53a9601aaa83a933a8e910f3e8ecb2c93748d9f017fffb4658d9f010000b36e8e8e910932b7cb
*5d298e8ea18d8d91370331696e960393e761708d9f017fffb46eb700b1318e911341d9cb748d9f
*017fffb1318e9b08105acb286693748d9f017fffb1318e98cb658d9f017fffb1318e91047c73cb
*2993658d9f017fffb1328e8d98b53a9601aaa83a933a8e91174ee8cb658d9f017fffb46e8e8e8e
*a18d8d910c5556cb61708d9f017fffb1308e9608105acb748d9f017fffb1308e93cb65960393e7
*3d93658e8e8e8e8e8e8e8e920157de758400629c70000066668e9e666689000066660158ab418e
*8e8e8e9f4b26658d8d92009383abb24669677572659603555531383a910471c7546865936d6f90
*471d64690c6564937690b8e3657273696f6e936f6693cb61708d9f017fffb46e8e9105717eb22e
*8e8e8e8e9f1e00008d9200e57fff31318e8e8c8b0000000c000000000000000000000000000000
*00000000000000000000000000000000000000000000007575a0027900008da0fda30000a0023f
*00008da0fde400008d914d0000b2436f6e73696465729602d2bb746865936578616d706c659370
*726f6772616d93696e934669677572659331399377686572659374686593746f702d6c657690b8
*e3656c9366756e6374696f6e9363616c6c8ea40c00008d913e00006f95b8e3769365722d736174
*7572617465739603fa357468659366756e6374696f6e93b5669101138fb22e9106606757697468
*6f757493746865936d6f90471d64690c636174696f6e93746f93cb61708d9f017fffb46e8e9105
*717eb22c9104236d7468659363616c6c93746f93b5678ea18d913e0000b2696e9603eb18b56691
*04fea7b26973936c6f73742e9106331054686593747261636593666f72937468659370726f6772
*616d937769746893746865936d6f90471d64690c656493cb61708d9f017fffb46e8e91095c96b2
*69739370726573656e90b8e374656493696e8ea18d913e00004669677572659103555532302e8e
*9f5f3e918d9fcae7d48d8d8d8d913e2a609fe431c889000066660158ab419f329c708d8400329c
*70000066668d9fe931c88d8d8d8d8d9ff3e6648d8d910c5556cc6c657496053ffd669378933d93
*6793788e8ea18d8d9121554a6796053ffd789379933d93782b798e8ea18d8d910c5556696e910a
*7ffa6696053ffd3293338e8e8e8e8e8e8e8e920157de758400329c70000066668e9e6666890000
*66660158ab418e8e8e8e9f3326658d8d915838d0b24669677572659603555531393a910471c741
*9370726f6772616d937769746893616e936f95b8e3769365722d73617475726174656496035555
*66756e6374696f6e936170706c69636174696f6e2e8e8e8ea000d2582b8da0ff4e0e39a18d8d91
*3e0000cc526f6f7491053ffdb8088d9f017fffb1318e8e8ea18d8d913e0000cc417091053ffd52
*6f6f748e8ea18d8d8d914dbff75b8e9152fff4526f6f7496053ffdb8088d9f017fffb1328e9109
*bc70cc4e6d93526f6f74932266228e8ea18d8d914dbff72c526f6f7496053ffdb8088d9f017fff
*b1338e9109bc70cc4e6d93526f6f74932232228e8ea18d8d914dbff72c526f6f7496053ffdb808
*8d9f017fffb1348e9109bc70cc4e6d93526f6f74932233228e8ea18d8d8d914dbff75d8e9152ff
*f4b8088d9f017fffb1358e8e8ea18d8d913e0000cc417091053ffdb5748d9f017fffb1318e8e8e
*a18d8d8d914dbff7cc5b8e9152fff4b5748d9f017fffb1318e9609bc70b8088d9f017fffb1368e
*93cc41709b053ffdb5748d9f017fffb1318e8d93cc5b8e910efc6db5748d9f017fffb1318e93b8
*088d9f017fffb1378e93cc4e6d98b5748d9f017fffb1318e93cc2267222c98b5748d9f017fffb1
*338e8d91047c73cc5d8e8e8ea18d8d914dbff72cb5748d9f017fffb1348e8e8ea18d8d8d914dbf
*f7cc5d8e9152fff4b8088d9f017fffb1388e8e8ea18d8d913e0000cc41709b053ffdb5748d9f01
*7fffb1358e8d9109bc70cc5b8e910efc6db5748d9f017fffb1358e9609bc70b8088d9f017fffb1
*398e93cc4e6d98b5748d9f017fffb1358e93cc222b222c98b5748d9f017fffb1338e96047c73cc
*2c98b5748d9f017fffb1348e8d93cc5d8e9109bc70b8088d9f017fffb131308e8e8ea18d8d913e
*0000cc4e6d91053ffdb5748d9f017fffb1388e9109bc70cc2235228e8e9f2000008d8d917b070f
*b24669677572659603555532303a910471c754686593747261636593666f72937468659370726f
*6772616d93696e934669677572659331392e8e8e8e9f240c6f8d8d913e0000ca332e332e328e91
*612382417267756d656e90ae39749603d554617393726573756c74738e9f1275548d913e0000b2
*5468657265960470c06973936193667572746865729370726f626c656d9377697468936f757293
*63757272656e9ab8e374937472616365936275696c64696e67936d65639868616e69736d2e9107
*c408496693618ea18d913e000066756e6374696f6e96030aa8cb6693b272657475726e73936f6e
*65936f669369747393617267756d656e90b8e374732c9103199874686593747261636593666f72
*9374686593726573756c749377696c6c936290471d65937468659374726163658ea18d913e0000
*6f66960330f974686593617267756d656e95b8e3742c9103383e7768696393689b0330f9779361
*739870726f90471d647563656498656c736577686572652e910465a8536f98696e987468659872
*6573756c749874726163652c9103383e7468659863616c6c8ea18d913e0000746f96031b7bcb66
*93b277696c6c936e6f74936f90471d636375722e9b045e7e4691ff2aaa6f72936578616d706c65
*2c9103270d636f6e7369646572937468659370726f6772616d93696e934669677572659332312e
*9854686593726573756c748ea18d913e00006f669603fe6a7468659370726f6772616d93697393
*cc3193b2616e64937468659374726163659369739374686593656d707490b8e379937472616365
*2191066d0554686593726561736f6e9369739374686174937468658ea18d913e0000cc69649604
*31e5b266756e6374696f6e936a7573749372657475726e739369747393617267756d656e95b8e3
*742c91046909776869639368960431e5696e9374686593656e6493686170709a471d656e739374
*6f936298659374686593cc318ea18d913e0000b26769769ab8e3656e960455bf61739361726775
*6d656e987493746f9374686593746f702d6c657698656c9363616c6c93746f93cc67b22e910773
*0449749369739374727565937468617493cc3193b2779861739370726f90471d64756365648ea1
*8d913e000061749603754274686593746f702d6c65769ab8e3656c2c91037d3d62757493697493
*697393756e666f7274756e6174659374686174937798659363616e6e6f749366726f6d93746865
*937472616365930c67757265936f75748ea18d913e0000cb7768799603e070cc3193b2779ab8e3
*61739372657475726e65649366726f6d937468659363616c6c93746f93cc67b22e910613195791
*ff2aaa6593736f6c76986593746869739370726f626c656d9362987993696e9874726f90471d64
*7563696e678ea18d913e0000616e9b03ea6ccb696e64697296ff7d2765936374696f6e91041d11
*6e6f93646598b2696e9874686598cc4e6f646598b2646174617490b8e3797095471d652e910631
*0c54686598696e646972656374696f6e986e6f93646598697398746f9862936598757365648ea1
*8d913e00007768656e960298b9619366756e6374696f6e9372657475726e73936f6e65936f6693
*69747393617267756d656e9ab8e374732c9102be72616e6493636f6e987461696e739361937472
*61636593666f729374686593726573756c742e8ea18d913e00004669677572659602815d323293
*73686f9ab8e3777393746865936d6f90471d64690c656493cc4e6f646593b26461746174987970
*90471d652e91042b204e6f746593746861749377986593696e9874726f90471d6475636593696e
*646972656374696f6e8e8e9f1e00008d9200e57fff31328e8e8c8b0000000d0000000000000000
*00000000000000000000000000000000000000000000000000000000000082f0a0027900008da0
*fda30000a0023f00008da0fde400008d913e0000b26e6f9a471d6465739603588d617493657861
*63746c79937468659373616d6593706c61636593776865726593636f6d70696c65727393757369
*6e67937691ff71c7617279696e67936e6f9864652d73697a6573936e6565648ea40c00008d913e
*0000746f96035555696e9ab8e374726f90471d6475636593696e646972656374696f6e732c9369
*2e652e2c937768656e93746865799372657475726e93736f6d657468696e67936f6693756e6b6e
*6f98776e9373697a652e8e9f773e918d9fb8e7d48d8d8d8d913e2a609fde31c889000066660158
*ab419f3e9c708d84003e9c70000066668d9fe331c88d8d8d8d8d9fede6648d8d910c5556cc6c65
*7496053ffd6693789379933d93789328789379298e8ea18d8d9121554a696496053ffd78933d93
*788e8ea18d8d9121554a6796053ffd78933d936693696493788e8ea18d8d910c5556696e910a7f
*fa6791053ffd318e8e8e8e8e8e8e8e920157de7584003e9c70000066668e9e6666890000666601
*58ab418e8e8e8e9f3926658d913e0000b24669677572659604ad4432313a910721a6419104acec
*70726f6772616d937468617493696c6c7573747261746573937468659370726f626c656d937769
*74689366756e6374696f6e739372657475726e696e678ea18d913e0000617267756d656e90b8e3
*74732e8e8e9f640e398d9fba0e398d913e0000cc6461746196053ffd4e6f6465933d8ea18d9158
*3ff1417096053ffd5472616365935b54726163655d8ea18d914dbff77c96053ffd4e6d93547261
*636593537472696e678ea18d914dbff77c96053ffd496e649354726163658e9f2000008d8d9200
*928e34b24669677572659603555532323a910471c7546865936d6f9a471d64690c656493cc4e6f
*646593b2646174617490b8e3797098652e8e8e8e9f160e398d914d000046696775726596035658
*32339373686f90b8e377739374686593747261636593666f72937468659370726f6772616d9369
*6e93466967757265933231937573696e6793746865936e657793cc4e6f64658ea18d913e0000b2
*64617461749ab8e3797090471d652e9104bc6b54686596036e36747261636593666f7293746865
*93726573756c74936973936e6f987793616e93696e646972656374696f6e93746f93616e6f7468
*6572937472616365936173936974738ea18d913e00006d6f737496030fb8657691ff71c7616c75
*6174656493706172742c9b031da4616e64937468659363616c6c7393746f93cc66b22c98cc6793
*b2616e6493cc696493b2696e93697473937370696e652e91045a93ca4a616e3a9104f469cb4578
*706c61696e910353dc7468658ea18d913e0000747296ff7d2761639365218ea000ba582b8da0ff
*5a0e39a18d8d913e0000cc526f6f7491053ffdb8088d9f017fffb1318e8e8ea18d8d913e0000cc
*417096053ffd526f6f748d935b8e910a7ffa526f6f7493b8088d9f017fffb1328e9b09bc70cc4e
*6d93526f6f74932267222c93526f6f7493b8088d9f017fffb1338e98cc4e6d93526f6f74932231
*228d5d8e93b8088d9f017fffb1348e8e8ea18d8d913e0000cc41709b053ffdb5748d9f017fffb1
*318e8d9109bc70cc5b8e910efc6db5748d9f017fffb1318e9609bc70b8088d9f017fffb1358e93
*cc4e6d98b5748d9f017fffb1318e93cc2266222c98b5748d9f017fffb1318e93b8088d9f017fff
*b1368e93cc4e6d98b5748d9f017fffb1318e93cc226964222c98b5748d9f017fffb1338e8d9104
*7c73cc5d8e93b8088d9f017fffb1378e8e8ea18d8d913e0000cc417091053ffdb5748d9f017fff
*b1348e8e8ea18d8d8d914dbff7cc5b8e9152fff4b5748d9f017fffb1368e8e8ea18d8d914dbff7
*cc2cb5748d9f017fffb1348e9109bc70b8088d9f017fffb1388e8e8ea18d8d9152fff4cc417096
*053ffdb5748d9f017fffb1348e8d9109bc70cc5b8e910efc6db5748d9f017fffb1368e9b047c73
*cc2c93b5748d9f017fffb1338e8d98cc5d8e9109bc70b8088d9f017fffb1398e8e8ea18d8d9152
*fff4cc496e6491053ffdb5748d9f017fffb1338e8e8ea18d8d8d914dbff7cc5d8e9152fff4b808
*8d9f017fffb131308e8e8ea18d8d913e0000cc496e6491053ffdb5748d9f017fffb1398e8e8e9f
*2000008d913e0000b246696775726596037c6e32333a9104bff954686593747261636593666f72
*937468659370726f6772616d937769746893616e936f95b8e3769365722d736174757261746564
*96037c6e66756e6374696f6e936170706c6963612d8ea18d913e000074696f6e96035555696e93
*4669677572659332312e8e8e8e9f1e00008d9200e57fff31338e8e8c8b0000000e000000000000
*00000000000000000000000000000000000000000000000000000000000000008d2ca002790000
*8da0fda30000a0023f00008da0fde400008d8d913e0000ca332e332e338e916123825491ff0aab
*726163696e679603d5544c69737493436f6d70726568656e73696f6e738ea41275548d913e0000
*4a616e3a91051c70cb4c96ff7d276f936f6b960393e7696e937468659364697363757373696f6e
*936e6f7465732e8e9f19fe368d8d913e0000ca332e332e348e916123825491ff0aab726163696e
*679103d5544775617264738ea18d913e00004a616e3a91051c70cb4c96ff7d276f936f6b960393
*e7696e937468659364697363757373696f6e936e6f7465732e8ea91bfe368d8d913e0000c9332e
*348e915cc00054686596048000536f75726365935491fee00072616e73666f726d6174696f6e73
*8ea18d8d913e0000ca332e342e318e916123825496ff0aab72616e73666f726d696e679b03d554
*4693756e6374696f6e9844650c6e6974696f6e738ea18d8d913e0000332e342e328e9161238254
*91ff0aab72616e73666f726d696e679103d55445787072657373696f6e738ea18d8d913e000033
*2e342e338e916123825491ff0aab72616e73666f726d696e679103d554436c61737365738e9f14
*75548d8d913e0000c9332e358e915cc0005468659604800052756e90a00074696d659353797374
*656d93537570709060006f72748ea18d913e0000ca4a616e3a91051c70cb4465736372696296ff
*7d27659b0393e76576616c7561746593642c986576616c756174696e672c98676574436f6e7374
*722c982e2e2e8ea68d8d913e0000c9332e368e915cc00042656e6390a000686d61726b738e9f18
*75548d8d913e0000c8348e91564ccb446973706c61908ccc79696e67910566667472616365738e
*9f17e71b8d8d913e0000c9342e318e915cc000496e90a00074726f90600064756374696f6e8ea1
*8d913e0000ca4a616e3a910520f1cb446573637269629bff7d2765960395b47468659362986173
*696393737472756374757298653a91049d305491ff3bbc7298616398659377696e646f772c9103
*9627736f7572986398659377696e646f772c91039627696e7075742f6f75747075748e9f0c0000
*8d913e000077696e646f772c960393e76f7074696f6e732c936578616d706c652e8ea68d8d913e
*0000c9342e328e915cc000446973706c6190a00079696e679104800045787072657373696f6e73
*8ea41475548d8d913e0000342e338e915cc00053656c656374696e679104800045787072657373
*696f6e738ea18d8d913e0000342e348e915cc000446973706c619aa00079696e67960480004869
*6768934c657698656c93436f6e737472756374738e9f1275548d913e0000ca4a616e3a91060970
*cb4c6973749b03f2b46396ff7d276f6d7072936568656e73696f6e732c91040a67677561729364
*6593649866756e6374696f6e986393616c910082d86c732c91040a676574632e9105b5fc4c936f
*936f6b98696e987468659864697363757373696f6e8e9f0c00008d913e00006e6f7465732e8e8e
*9f1e00008d9200e57fffb231348e8e8c8b0000000f000000000000000000000000000000000000
*00000000000000000000000000000000000000009409a0027900008da0fda30000a0023f00008d
*a0fde400008d8d913e0000c9342e358e915cc0005496fee000726163696e679b0480004693726f
*6d984f75747075748e9f1875548d8d913e0000c8358e91564ccb457691ff1999616c756174696f
*6e96056666616e6493709073336572666f726d616e63658ea41be71b8d8d913e0000368e91564c
*cb52656c617465649105666677908ccc6f726b8ea18d8d913e0000378e91564ccb436f6e636c75
*73696f6e7396056666616e6493469bfea66675747572659357986f726b8ea18d913e0000526566
*6572656e6365738e9f15e71b8d8d8d913e0000b25b315d8e8e914d8e3b4e696b6c617391035380
*527f91faffff6f6a656d6f2e91046bf3cb4761726296ff7d276167659b039238436f6c910082d8
*6c65936374696f6e2c9603928e616e64984d656d6f727998450e6369656e63792c93696e984c91
*ff7d27617a79984691ff3bbc756e632d8ea40c00008d914d8e3b74696f6e616c910352404c91ff
*7d27616e677561676573b22e9103fa9c50684491030de67468657369732c9b031c3e4465706172
*746d656e90b8e37496030df86f6693436f6d707574657293536369656e6365732c984368616c6d
*6572738ea18d914d8e3b556e697695b8e365727369749379960355556f66935496ff2aaa65639a
*b8e3686e6f6c6f6779932c96035555532d34313293393693477f91faffff6f74656290471d6f72
*672c935377986564656e2c934d61987993313939352e8e8e9f1e00008d9200e57fff31358e8e8c
*f80000988f018392c01c3b0000000003e802790000019700000012000ff322dfea3c78000a0000
*000a00000007636d6974743130f321dfea3c78000a0000000a00000006636d74743130f320fd00
*273a000a0000000a00000006636d74693130f31f1af22256000a0000000a00000006636d627831
*30f31ec2d64ea0000c0000000c00000006636d62783132f31dc2d64ea0000e6666000c00000006
*636d62783132f31bbc6a91b900090000000900000005636d746939f31a740c893a000900000009
*00000005636d627839f3196fb48bc700090000000900000004636d7239f312b94161a800060000
*000600000004636d7236f3117c7b590700080000000800000004636d7238f31058ab510b000c00
*00000c00000005636d723132f30f9bbb8840001147ae000c00000006636d74693132f30e44d3ed
*74001147ae001147ae0005636d723137f30d21222c9a000a0000000a00000006636d73793130f3
*0c4f21e28500070000000700000005636d737937f30a0ba0623e000a0000000a00000006636d6d
*693130f3093065977200070000000700000005636d6d6937f3084f0dda5c000500000005000000
*05636d6d6935f3074bf16079000a0000000a00000005636d723130f306d993a052000700000007
*00000004636d7237f30586039b5a00050000000500000004636d7235f900009aef02dfdfdfdfdf
*dfdf
hunk ./docs/people.html 1
+Advanced Redex Trails
+
+
+
+
hunk ./docs/private/Memos/index.html 1
+Advanced Redex Trails
+
+
+
+ Private Team Information
+ Memos
+
+
+
+- Advanced Redex Trails: fully-fledged tracing technology for functional programs (project proposal)
+
- Comparison of Dependency-Based Debuggers for Lazy Functional Languages, Olaf Chitil, Version 1 from June 13, 2000.
+
+ TeX-source,
+ Version 0 from June 13, 2000
+
+
+ - Incremental Archiving of Redex Trails, Colin Runciman, Version 0 from June 15, 2000.
+
+
- Problems with Numerics in Tracing with nhc98, Malcolm Wallace, Version 0 from June 15, 2000.
+
+
- Tracing List Comprehensions, Colin Runciman, Version 0 from June 15, 2000.
+
+
- Proposal for tracing primitive functions in nhc98 via the new FFI, Malcolm Wallace, Version 1 from June 27, 2000.
+
+
+More to come ;-)
+
+
+
+This page last modified: June 29, 2000
+
+
+
hunk ./docs/private/conf.html 1
+
Advanced Redex Trails
+
+
+
+
+ Advanced Redex Trails:
+ private team information
+
+
+
+
+Target conferences for possible publication:
+
+- Compiler Construction
+ CC'00 (Mar)
+- Scottish FP Workshop
+ ScotFP'00 (Jul)
+- Automated and Algorithmic Debugging
+ AADEBUG'00 (Aug)
+- International Workshop on Automated Debugging
+ AADEBUG'00 (Aug)
+- Implementation of Functional Languages
+ IFL'00 (Sept)
+- Haskell Workshop
+ HW'00 (Sept)
+- International Conference on Functional Programming
+ ICFP'00 (Sept)
+- Principles and Practice of Declarative Programming
+ PPDP'00 (Sept)
+- International Workshop on Functional and Logic Programming
+ WFLP'00 (Sept)
+- Practical Aspects of Declarative Languages
+ PADL'01 (Jan)
+
+
+
+
+This page last modified: 2000.03.13
+
+ |
+
+
hunk ./docs/private/index.html 1
+Advanced Redex Trails
+
+
+
+
+ Advanced Redex Trails:
+ private team information
+
+
+
+
+
+
+
+This page last modified: June 13, 2000
+
+ |
+
+
hunk ./docs/proposal.html 1
+
+
+
+
+
+
+
+Advanced Redex Trails:
fully-fledged tracing technology for functional programs
(project proposal)
+Colin Runciman
Department of Computer Science, University of York
+
+
+This is a revised version of the proposal submitted
+to EPSRC, the research council that is funding the project.
+Some minor sections giving personal or financial details,
+or addressing issues of EPSRC policy, have been omitted.
+
+
+
Summary:
+In many fields, high expectations of Information Technology are
+limited in practice mainly by current methods of developing computer
+software.
+Declarative programming systems in general, and functional
+languages in particular, have an important part to play in an improved
+software technology. These languages free programmers from the need to
+express specific sequences of calculation. They also provide powerful
+ways of directly combining component functions. They are inherently
+safer than programming languages now in widespread use, and
+dramatically more concise.
+
+However, the very high-level nature of functional languages poses two
+big problems: (1) how to turn programs into efficient computations; (2)
+how to trace programming errors from the faults they cause.
+Since the mid 1980s, problem (1) has been a popular target of research,
+and excellent progress has been made with it: there are now optimising
+compilers for functional languages. But problem (2) has received less
+attention, and in practical terms it remains wide open. The lack of tracing
+and debugging tools is a long-standing gap in functional-language technology,
+deterring potential users.
+
+I therefore propose a decisive attack on the tracing problem for
+functional programs. My aim is to advance a successful but limited
+prototype, recently developed with ROPA funding, to the stage of a
+convincing tool for practical application.
+Several research problems must be solved to achieve this aim:
+to give just two examples, efficient low-level counterparts must be found for
+high-level combinators with subtle properties of abstraction, and
+new algorithms are needed for incremental compression of
+heap structures to file without disturbing lazy evaluation.
+
+
+
+Key phrases:
declarative languages; functional programming;
+software development; fault-tracing tools; programming environments.
+
+
+
+1 Context
+
+1.1 Past Projects
The broad aim of my work in recent years has been to advance the state
+of the art in functional programming systems, enabling wider and more
+effective use to be made of this technology. I have run a series of
+research projects in this connection, with a mixture of government and
+industrial funding. The most important of these for this proposal have
+been:
+
+
+FLARE (1991--93, IEATP, GR/F 98857 C2117)
+This project aimed to demonstrate that functional programming systems could be
+effectively applied to a range of demanding applications. It was a
+collaboration between industrial and academic partners, each of whom
+developed applications in their own field of expertise. British
+Telecom managed the project.
+I was the technical
+co-ordinator and co-edited a book based on the project [runcimanwakeling95].
+One important conclusion from FLARE was that the availability of
+profiling and tracing tools can be a critical factor in the
+successful use of functional programming.
+At York we developed novel methods for
+profiling heap memory [runcimanwakeling93a] and
+parallel evaluation [RuncimanWakeling94].
+There was not time to address the more complex tracing problem,
+but it was put high on our list of topics for future research.
+
+
+Embedding Functional Programs (1994--, Canon Research Europe)
+Towards the end of FLARE, a separate PhD project at York aimed to
+adapt a functional language implementation for the special
+requirements of embedded systems, including demands for memory
+efficiency and a richer treatment of I/O [wallacerunciman95b].
+CRE has funded a continuation of this work.
+The current techniques used for embedding software into
+devices such as typewriters and copiers are a long way from purely
+functional programming. But there are prototype software systems
+developed on large workstations in declarative languages that Canon
+might one day wish to embed in such office products. We have been
+researching extensions to functional languages and their
+implementations to make such embedding possible. A
+significant part of this work has been a novel treatment of
+compressed binary data [WallaceRunciman98]:
+this could be a useful part of our
+tracing technology, where one of the key problems is to
+reduce memory demands for trace structures representing entire
+computational histories.
+
+
+Selective tracing of functional computations using graph reduction with
+redex trails (1996--97, ROPA, GR/K64334)
+This 18-month project aimed to demonstrate the feasibility of
+a particular approach to the tracing problem by building a prototype
+implementation. We extended a compiled graph-reduction implementation
+of the functional language Haskell, transforming programs so that at
+run-time they could build trails of contracted redexes (intermediate
+expressions, re-written by appeal to definitions in the program)
+attaching a comprehensive derivation
+tree to every value [sparudruncimanplilp97].
+We developed a special purpose browser for the
+examination of trails starting from outputs or run-time faults; we
+experimented with partial trails and pruning rules to
+increase the size of applications that could be handled [SparudRuncimanIFL97].
+This ROPA project convinced us that redex trails can be made the basis
+of an effective tracing system, useful in real applications.
+The goal of the project now proposed is to fulfil this potential.
+
+
+
+
+1.2 Institution
The Computer Science department at York has internationally
+known research groups and attracted the highest possible rating (5*)
+in the most recent national Research Assessment Exercise.
+Software technology, including compilers and related tools,
+is a long-standing theme in the department's work.
+
+
+
+2 Proposed Research
+
+2.1 Background
+The tracing problem
+Functional programming systems offer significant advantages over more
+conventional alternatives, particularly for complex symbolic
+applications. The abstracting power and declarative nature of functional
+languages, largely free from low-level concerns such as
+sequence of evaluation and memory management, enable computational
+ideas to be expressed very directly and concisely, with
+fewer possibilities for error.
+
+However, this property of being abstract is two-edged. Though
+there are fewer classes of possible mistakes in functional programs,
+errors do still occur, and programmers need to trace their causes.
+Time and again the lack of tools for tracing and debugging has deterred
+software developers from using functional languages [Wadler98].
+This is not simple neglect on the part of implementors;
+a high level of abstraction separating language from machine makes
+tools genuinely hard to build.
+A computation of a conventional imperative program is comparatively easy
+to trace, step by step, but a functional computation performed using a
+sophisticated evaluation strategy such as normal order graph reduction
+involves a sequence of events not explicit in the program, and often
+baffling to the intuition. Hence the research challenges: What is
+an appropriate form of trace for functional computations? How best can
+such traces be constructed and applied in practice?
+
+
+Approaches to the problem
+In the 1980s, little work was done on
+profiling and tracing functional computations.
+In the 1990s, work at York and elsewhere has
+delivered effective profiling techniques, leading to
+marked reductions in the time and space costs of many
+applications [RuncimanRojemoSchool96, sansompeytonjonestoplas97].
+Success with the tracing problem has not come so easily:
+a review in a recent Australian thesis [watsonphd] notes some twenty
+different attempts at a solution, none of them conclusive!
+
+Approaches broadly divide into those that base traces on a linear
+sequence of events, and those that represent computational history
+using some sort of dependency graph. Methods based on a sequence of
+events have had some success for `mostly functional' languages with a
+strictly applicative evaluation sequence; Tolmach and Appel's system
+for the ML language is a notable example [tolmachappeljfp95].
+The benefits of
+the sequential approach are that a trace can be displayed as
+computation proceeds, and that it is easy to trade time for space:
+given a few check-point states stored at well-chosen intervals, any past
+state of computational history can be reached by re-execution.
+
+
+However, the more ideal purely functional languages
+permit the definition of non-strict functions, implemented using
+the lazy evaluation strategy of call-by-need. Despite some valiant attempts [watsonphd],
+the evidence to date is that for such programs linear traces of the sequence of
+reductions are ineffective. Rather, to track
+faults in realistic computations, it is necessary to record a
+non-linear structure of dependencies between expressions.
+
+
+Redex trails prototype
+In our work, a network of redex trails [sparudruncimanplilp97, SparudRuncimanIFL97]
+represents these dependencies.
+Functional expressions can be viewed as trees or --- since
+sub-expressions can be shared and may recursively reference enclosing
+expressions --- as graphs. Evaluation repeatedly replaces one subgraph
+by another, where the reduction rules used to define replacements are
+derived from equations that constitute the program. At each reduction
+step, a redex matching the left-hand side of an equation is
+replaced by the corresponding instance of the right-hand side. To
+construct redex trails, at each reduction during the computation we
+arrange that from every node n of the resulting subgraph there is a
+link to the parent redex whose reduction caused n to be
+introduced. Using a special-purpose browser which reconstructs
+expressions in source form, the programmer can proceed backwards along
+the relevant trails from a fragment of output, from a run-time error,
+or from a point at which an apparently unproductive computation has been
+interrupted. Our ROPA project has shown the viability of
+this approach, as outlined in §1;
+but despite its promising results, our ROPA prototype is limited
+in a variety of ways, each prompting lines of further research:
+
+
+-
+Performance:
+A program transformed to generate redex trails can run 10--20 times
+more slowly than the original.
+Research questions: Could new abstract-machine instructions
+provide low-level replacements for current high-level
+combinators to manipulate trails? How can normally compiled functions
+be mixed with trail-generating ones, when trail generation alters
+type-structure at all levels?
+
+
+ -
+Capacity:
+Trails are constructed as data structures in heap memory.
+Even partial redex trails are very large and current pruning strategies
+may discard needed information.
+Research questions: Could our heap compression techniques be
+used to good effect here? Could some form of meta-programming be
+used to give greater control over pruning?
+
+
+ -
+Transience:
+Because trails are built in heap memory, when a functional computation
+is closed the trail is lost.
+Research question: How can trails be archived to file incrementally
+as computation proceeds? (This is a delicate problem because of the relationship
+between trails and lazy evaluation, and the need to avoid revising the
+archive.)
+
+
+ -
+Scope:
+Important classes of Haskell programs cannot yet be traced.
+For example, I/O is very restricted, and comprehensions are traced
+in terms of their low-level translations.
+Research questions: What extensions to the current definition
+of redex trails best represent these forms of
+computation? What form of access and display are most effective
+for these extensions?
+
+
+ -
+Host:
+The prototype is implemented as an extension of the nhc compiler
+and run-time system. It cannot be used in conjunction
+with other implementations (eg. the optimising compiler ghc).
+Research questions: How can the current machinery for
+redex trails be re-expressed in a portable tracer? If source-to-source
+translation is used, could a low-level library with an interface
+defined in Green Card [GreenCard97] or H/Direct [HDirect98] provide
+the necessary extension of primitives?
+If so, assuming what interface to the local run-time system?
+
+
+ -
+User interface:
+The prototype trail browser was developed ad hoc.
+It is quite complex and using it successfully
+sometimes requires an implementor's insight.
+Research questions:
+How can fault-tracing be modelled as a problem-solving activity?
+How well do the resources provided by the trail browser fit the task?
+How can these and other insights be reflected in improved design,
+including greater support for fault-finding strategies?
One consequence of these limitations and outstanding research questions
+is that the prototype has had few users --- mainly the developers and
+their students.
+The obstacles to wider practical use do not seem insurmountable,
+but there is a lot of work to be done, requiring various skills.
+
+
+Other alternatives
+Though we have developed redex trails as the basis for tracing,
+we are aware of alternatives.
+Perhaps the most advanced of these is Nilsson's Freja system, based on
+Evaluation Dependence Trees (EDTs) [NilssonPhd98]. His EDT nodes record
+equivalences between expressions, where each parent equivalence
+is a direct consequence of the child equivalences and an
+equation in the program.
+The starting point in an EDT is not
+a final reduction leading to an output or point of error but
+the root equivalence between an original main expression and its
+entire computed result.
+Two drawbacks of the EDT approach in comparison with redex trails
+are that incremental archiving to file is even more difficult
+(Nilsson rules it out in favour of repeated execution to obtain
+new fragments of the EDT) and that the user has to reason
+about larger displayed expressions.
+
+
+
+2.2 Programme and Methodology
+Overall aim:
+a solution to the problem of tracing higher-order lazy
+functional computations that is effective in practice, based on tools
+for the construction and examination of redex trails.
+
+
+Primary objectives
+
+-
+a tracing system for Haskell 98 (the nearest thing
+there is to a standard lazy functional language) hosted in
+the freely available nhc compiler;
+
+
+
+ -
+a system that incorporates a method for incremental archiving
+of traces to file, alleviating pressure on heap memory and
+increasing the returns from the overhead of generating trails;
+
+
+ -
+a portable variant of the tracer, based on source-to-source
+transformation and a support library, with a clearly-defined
+interface to supporting operations that any host implementation
+must provide; (In particular, we aim to provide a version of
+our tracer that works in conjunction with the widely-used
+ghc and hugs systems, currently being integrated with
+EPSRC support --- GR/L 34297.)
+
+
+ -
+a trace-browser designed to be an effective tool for locating
+faults based on a thorough analysis of
+the tracing task as a problem-solving activity, and of the
+browser display as a resource; the browser will also be
+equipped to record how it is used, so that data
+can be gathered from use in practice.
+Secondary objectives
+-
+to improve the speed of computations generating trails,
+for example by transferring the operations of trail-level function
+abstraction and application to a lower layer of implementation;
+
+
+ -
+to obtain results from a wide range of practical tests using the
+tracer, and hence to improve the design --- eg. to determine
+what strategies users choose to adopt when examining traces, and to
+extend the tracer with explicit support for the strategies that seem
+most successful;
+
+
+ -
+to exploit the representation of redex trails as functional
+data structures by devising a system for meta-programming
+search and display routines specific to an application.
+
+Timeliness and novelty
The need for a tracing tool that can cope with lazy higher-order
+functional programs has been recognised for almost twenty years.
+The lack of a tracer has been a key reason for the
+surprisingly limited use of a programming technology
+with so many advantages [Wadler98].
+There are now optimising compilers for languages like Haskell,
+and tools for the integration of functional components into
+larger systems.
+A solution to the tracing problem is overdue.
+It is a difficult problem to tackle comprehensively,
+but the redex trails approach is distinctive, and with
+the results already obtained in the ROPA project
+we are well-placed to succeed.
+
+
+Methodology
+A lot of work has gone into our ROPA prototype, with promising
+results.
+We should advance from the given position, not restart from scratch.
+The principles of the compile-time transformation,
+the functional representation of redex trails, and the
+message-passing architecture of the tracer (browser
+communicating with functional computation) should
+all be preserved.
+We shall also continue to work with the nhc compiler,
+but reducing dependencies on its internal world to increase
+portability.
+Java was used for the prototype browser, and proved
+quite satisfactory.
+Though we plan to re-think the browser design, implementation
+will again be in Java --- a browser that works well
+over the internet could prove useful when we want
+to support external users.
+
+So far as practical evaluation is concerned, we do not
+intend to set up rigorous laboratory experiments scrutinising
+tracing `micro-tasks'.
+Such experiments would absorb too much effort.
+Results from actual use in practice are preferable for our purpose,
+but general feedback from casual use might be too vague or sparse.
+One kind of evaluation exercise we intend to use
+requires two programmers.
+A explains to B a correctly working program of
+moderate size (around 500 lines) that A wrote some
+time ago.
+B now secretly introduces several deliberate
+errors into the program, of a kind undetected by the compiler.
+Given the faulty program, A uses the tracer to locate
+and fix all the errors, thinking aloud as they do so.
+B takes notes throughout, and afterwards A and B review the
+exercise, recording the main issues arising.
+
+
+Programme of work
Figure 1 summarises the workplan in diagrammatic form.
+From the start, the two researchers will engage in joint
+tasks combining their skills as well as solo tasks
+demanding their individual expertise.
+Brief descriptions follow for each activity.
+
+
+
+Figure 1:
+
+-
+Acquire skill with prototype:
+Both RAs need to become expert users of the
+prototype tracer to inform their work developing its successor.
+Each will also need to become
+familiar with components of the implementation for which they will be
+responsible.
+
+
+ -
+Tracing as a problem-solving task:
+Newell and Simon [NewellSimon72] pioneered ways of analysing the
+human information processing required to solve a variety of problems,
+such as chess puzzles. We will similarly analyse the activity of using
+the tracer to locate faults in programs. The purpose is to gain
+understanding of tasks that must be supported by an improved browser
+for redex trails, including strategies that users might in principle
+choose to adopt.
+
+
+ -
+Display as resource:
+The display provided by the browser is a critical resource, as typical
+redex trails are complex and very large. Using techniques previously
+applied to theorem-proving systems, we shall model display information
+as a resource for reasoning about programs [FieldsWrightHarrison97].
+The results will inform
+the redesign of the browser.
+
+
+ -
+Lift language restrictions:
+The top priorities are list comprehensions and file I/O.
+Comprehensions require new transformation rules;
+file I/O requires special support from the run-time
+system; both require extensions to
+the browser interface.
+
+
+ -
+Incremental archiving:
+We hope to achieve incremental archiving by extending trail-pruning routines
+applied by the
+prototype during garbage collection. Information in sections of
+trail deleted from heap memory will be archived to file, with the
+continuing stump in the main memory trail recording an archival
+reference. Care will be needed to avoid any costly revision of
+archived values or undesirable change in the degree of
+evaluation. Archived trails must also be properly linked to all the other
+information that may be required by the browser (eg. program sources,
+indexed I/O transcript).
+
+
+ -
+Faster trail generation:
+Trail-manipulating combinators are introduced by transformation
+to replace each function abstraction and each
+application in the original program. In the prototype, these
+combinators are defined in Haskell as part of a
+redex-trail library. We aim to define
+new primitive operations, perhaps new G-machine
+instructions in nhc, to make reduction of
+these combinators much faster. However, degree of evaluation is
+extremely delicate, particularly in the way that saturation of
+function applications is handled, and some likely-looking
+primitives fail at this point.
+The ability to mix traced and untraced modules could give another
+route to faster generation of selective trails.
+
+
+ -
+Redesign browser:
+Based on experience using the prototype, and the results of the
+problem-solving and resource analyses,
+the trail browser will be redesigned.
+We shall try to minimise changes to the
+message-passing interface with the Haskell world.
+The browser will also be extended to record information
+about how it is used.
+
+
+ -
+Devise experiments and instructions:
+Writing instructions for the use of the tracer, including
+information about how to carry out systematic experiments,
+will be an essential prelude to external use and feedback.
+The exercise of writing about use of the tracer should
+also provoke further insights into what is needed,
+and ideas for development.
+
+
+ -
+Interim release of tracer:
+an important milestone.
+All effort will focus at this stage on pulling together the
+different strands of development in the first year, to provide a reliable
+distribution of the tracer hosted by a version of nhc.
+This will also be a good time to visit likely users.
+
+
+ -
+Concerted trials of tracer:
+We shall test the effectiveness of the tracer ourselves using
+exercises of the kind noted under `methodology'.
+Trials by external users will be promoted and supported
+by mailing lists, visits and a workshop.
+
+
+ -
+Analyse usage and revise models:
+Study of the data automatically collected by the browser,
+alongside reports and requests from users, will
+confirm or alter our design assumptions and priorities.
+The problem-solving and resource models will be revised,
+and improvements made to the trail browsing interface.
+
+
+ -
+Portability interface:
+A portable variant of the tracer must be detached from nhc
+in two respects.
+Compile-time transformations working on internal representations
+must be adapted to generate a fresh source.
+Extra run-time routines required by the tracer should be
+isolated, specified and defined in portable
+libraries (Haskell 98, Green Card or H/Direct).
+The portable version of the tracer must forfeit
+some sources of efficiency that depend on internal properties of
+nhc, but an optimising compiler such as ghc might
+amply compensate for such losses.
+
+
+ -
+Develop support for strategies:
+Typical redex trails involve a large number of interconnecting
+paths, and there are various plausible strategies for
+investigating faults of different kinds.
+Some of these could be directly supported by the tracer ---
+for example, reducing display information by blocking off
+parts of a trail irrelevant to a specific line of enquiry,
+and automatically following any unique continuations.
+The choice of strategies to support will be informed by
+discussion with experienced users, and examination of usage
+logs.
+
+
+ -
+Metaprogramming display and search:
+Redex trails are functional data structures so there is scope for
+trace-time computation over them.
+For example, displays of some large data structures could be
+vastly improved by application-specific rules --- though care
+must be taken to avoid forcing evaluation unnaturally.
+We also plan to investigate ways of encoding specialised
+searches over trails.
+
+
+ -
+Final release and documentation:
+A Haskell implementation incorporating the new tracer, with
+explanatory papers, will be made available on the internet.
+Another task in the closing stages will be to finish writing up
+results of our work for refereed publication.
+Project management
A weekly project meeting will provide a regular occasion to
+review current progress and confirm immediate plans. With a small team,
+working closely together, these meetings will naturally be informal.
+However, written records will be kept to avoid misunderstandings
+or things being forgotten.
+Interested visitors may be invited to join these meetings,
+and regular meetings of the Programming Languages and Systems research group
+will give further opportunity for brief reports and discussion.
+
+Once a quarter we shall review progress on the project as a whole,
+revising plans if necessary to secure the most important objectives.
+We shall also issue a short quarterly bulletin to our academic and
+industrial contacts, and any other interested parties.
+
+
+
+2.3 Dissemination and exploitation
We shall seek in various ways to encourage both
+academic and industrial Haskell users
+to try our new tracer, and to participate in its
+further development. The plan is to release an experimental
+version of the tracer at the end of the first year, as the
+common platform for a concerted period of trial use. We shall make
+suitable advance announcements on the internet, seek opportunities to
+present our work on the tracer at recognised conferences, and
+also hold a one-day workshop at York. Within the UK,
+we may visit users to get them started. Besides establishing a mailing list for
+general feedback and discussion, we shall publish details of
+suggested forms of tracing experiment on the web.
+
+There are several archival FTP sites for public domain implementations
+of functional languages. We plan to make the final results of our work freely
+available by placing copies of software at these sites, in addition to
+publishing papers.
+
+
+
+2.4 Resources
The appropriate scale for this project has been determined by
+comparison with the 18-month ROPA project during which the
+prototype redex-trail system was developed.
+
+
+People
+If we are to push this tracing technology far enough to
+make it really effective in practice, there is a lot of work to be done on several
+fronts.
+Hence the proposal to hire a team of two post-doctoral RAs for two years.
+
+
+
+Infrastructure and equipment
+The department of Computer Science at York provides
+computing facilities including networking and file-service,
+with technician support.
+
+
+Each of the RAs will need a workstation.
+The two most common platforms for
+developers and users of research languages are Suns and PCs.
+Of these, PCs offer better performance for the price --- and we
+have access to an UltraSparc compute server if a Sun platform is needed.
+At the time of writing £2000 buys a PC system including a 400MHz
+Pentium II processor, 128Mb RAM, 8.4Gb disk, 17"--19" monitor, CDROM,
+network and graphics cards.
+Suitable components will be chosen and purchased
+separately, and assembled by our departmental technicians.
+
+
+Travel
We request funds to participate in relevant conferences. ICFP is the
+premier international conference in functional programming; INTERACT is
+an international conference with user interface design as a central
+interest.
+IFL is an established European workshop emphasising
+new implementation methods and practical experiments in functional
+programming.
+The costing assumes that we all attend ICFP
+but only two of us attend each of IFL and INTERACT.
+
+
+We hope to maintain close working links with researchers in Sweden.
+Jan Sparud (Gothenburg) worked on the ROPA project, and we value
+continuing collaboration with him.
+Henrik Nilsson (Linköping) has developed a rival approach
+to functional tracing, based on Evaluation Dependence Trees. We propose to
+visit Sweden twice a year.
+
+
+Within the UK, we have links with relevant research groups at several
+other universities, from Exeter to St Andrews, and with industrial R&D
+sites, mainly in the South. We request funds for
+visits to discuss the development of the tracer, and to
+promote its experimental use.
+
+
+
+
+References
+- [FieldsWrightHarrison97]
-
+B. Fields, P. Wright, and M. Harrison.
+ Objectives, strategies and resources as design drivers.
+ In S. Howard, J. Hammond, and G. Lindgaard, editors, Human-Computer Interaction INTERACT'97, pages 164--171. Chapman and Hall,
+ July 1997.
+
+
+ - [FieldsMerriam98]
-
+R. E. Fields and N. A. Merriam.
+ Inference and information resources: A design case study.
+ In P. Johnson and P. Markopoulos, editors, Eurographics Workshop
+ on Design, Specification and Verification of Interactive Systems. Springer,
+ 1998.
+ In press.
+
+
+ - [HDirect98]
-
+S. Finne, D. Leijen, E. Meijer, and S. L. Peyton Jones.
+ H/Direct: a binary foreign language interface for Haskell.
+ In Proc. 3rd ACM International Conference on Functional
+ Programming (ICFP'98), pages 153--162. ACM Press, September 1998.
+
+
+ - [NewellSimon72]
-
+A Newell and H. A. Simon.
+ Human Problem Solving.
+ Prentice-Hall, 1972.
+
+
+ - [NilssonPhd98]
-
+H. Nilsson.
+ Declarative debugging for lazy functional languages.
+ PhD thesis, Linköping, Sweden, 1998.
+
+
+ - [GreenCard97]
-
+S. L. Peyton Jones, T. Nordin, and A. Reid.
+ Green Card: a foreign language interface for Haskell.
+ In Proc. ACM SIGPLAN Haskell Workshop, Amsterdam,
+ June 1997.
+
+
+ - [rojemofpca95]
-
+N. Röjemo.
+ Highlights from nhc --- a space-efficient Haskell compiler.
+ In Proc. 7th Intl. Conf. on Functional Programming
+ Languages and Computer Architecture (FPCA'95), pages 282--292. ACM
+ Press, June 1995.
+
+
+ - [RuncimanRojemoSchool96]
-
+C. Runciman and N. Röjemo.
+ Heap profiling for space efficiency.
+ In J. Launchbury, E. Meijer, and T. Sheard, editors, 2nd Intl.
+ School on Advanced Functional Programming, pages 159--183, Olympia,
+ WA, August 1996. Springer LNCS Vol. 1129.
+
+
+ - [runcimanwakeling93a]
-
+C. Runciman and D. Wakeling.
+ Heap profiling of lazy functional programs.
+ Journal of Functional Programming, 3(2):217--245, April 1993.
+
+
+ - [RuncimanWakeling94]
-
+C. Runciman and D. Wakeling.
+ Profiling parallel functional computations (without parallel
+ machines).
+ In J.T. O'Donnell and K. Hammond, editors, Proc. 1993 Glasgow
+ Workshop on Functional Programming, pages 236--251. Springer-Verlag
+ Workshops in Computing, 1994.
+
+
+ - [runcimanwakeling95]
-
+C. Runciman and D. Wakeling, editors.
+ Applications of functional programming.
+ UCL Press, 1995.
+
+
+ - [sansompeytonjonestoplas97]
-
+P. M. Sansom and S. L. Peyton Jones.
+ Formally based profiling for higher-order functional languages.
+ ACM Transactions on Programming Languages and Systems,
+ 19(2):334--85, March 1997.
+
+
+ - [SparudRuncimanIFL97]
-
+J. Sparud and C. Runciman.
+ Complete and partial redex trails of functional computations.
+ In C. Clack, K. Hammond, and T. Davie, editors, Selected papers
+ from 9th Intl. Workshop on the Implementation of Functional Languages
+ (IFL'97), pages 160--177. Springer LNCS Vol. 1467, September 1997.
+
+
+ - [sparudruncimanplilp97]
-
+J. Sparud and C. Runciman.
+ Tracing lazy functional computations using redex trails.
+ In H. Glaser, P. Hartel, and H. Kuchen, editors, Proc. 9th Intl.
+ Symposium on Programming Languages, Implementations, Logics and Programs
+ (PLILP'97), pages 291--308. Springer LNCS Vol. 1292, September 1997.
+
+
+ - [tolmachappeljfp95]
-
+A. Tolmach and A. W. Appel.
+ A debugger for Standard ML.
+ Journal of Functional Programming, 5(2):155--200, April 1995.
+
+
+ - [Wadler98]
-
+P. Wadler.
+ Why no one uses functional languages.
+ ACM SIGPLAN Notices, 33(8):23--27, August 1998.
+
+
+ - [wallacerunciman95b]
-
+M. Wallace and C. Runciman.
+ Lambdas in the Liftshaft --- functional programming and an
+ embedded architecture.
+ In Proc. 7th Intl. Conf. on Functional Programming Languages and
+ Computer Architecture (FPCA'95), pages 249--258, La Jolla, June 1995. ACM
+ Press.
+
+
+ - [WallaceRunciman98]
-
+M. Wallace and C. Runciman.
+ The bits between the lambdas: Binary data in a lazy functional
+ language.
+ In Proc. Intl. Symp. on Memory Management, pages 107--117,
+ Vancouver, Canada, October 1998. ACM Press.
+
+
+ - [watsonphd]
-
+R. D. Watson.
+ Tracing Lazy Evaluation by Program Transformation.
+ PhD thesis, Southern Cross, Australia, October 1996.
+
+
+
+
+
+
+
+
+This document was translated from LATEX by HEVEA.
+
+
+
hunk ./docs/tracing.html 1
+
+Introduction to the prototype Haskell Tracer
+
+
+
+
+Introduction to the prototype Haskell Tracer
+
+Overview
+
+
+The prototype Haskell Tracer is an experimental system for tracing
+Haskell computations. The basis of our tracing method is a program
+transformation carried out by the compiler: transformed programs
+compute the same values as the original, but in addition compute
+functional data structures containing redex trails which
+show how the values were obtained. After computing a result,
+or when an error occurs, the programmer can use a special-purpose
+interactive display program to investigate the derivation in detail,
+with cross-links to the source program.
+
+
+Similar schemes attempted by others have typically been limited, for
+example, with respect to the language used to express traced programs,
+the speed of traced execution, the detail recorded in the trace, and
+the size of computations for which traces can be built and explored.
+We aim in the ART project to build a tracer for full Haskell'98,
+and ultimately a tracer that can be applied to very large computations.
+Our prototype tracer, hosted by the nhc98 compiler,
+currently handles most of the Haskell'98 language, with a subset of
+the Standard Prelude and Libraries. Various techniques have already
+been incorporated for dealing with larger computations.
+
+
+
+User Interface
+
+
+The picture below illustrates the tracer user interface, here shown
+tracing the nhc98 compiler itself. The top part of the window displays
+the interactive redex trail, and the bottom part shows either the
+source code or the program output (selected via the notebook tabs).
+
+
+The user can click on any expression, identifier or constant in the
+redex trail display to explore the redex trail of that item.
+By right-clicking on an item, the source code window will display the
+source code position of the particular occurrence of the item.
+By shift-right-clicking on an item, the source code window will display
+the source code of the definition of the item.
+
+
+If the output window is selected, the user can click on any part of the
+program output, and the redex trail for the expression responsible for that
+piece of the output will be displayed in the redex trail window.
+
+
+
+
+
}