Files
cpas/pdf/template.js
jason 6933109572 feat(pdf): render acknowledgment signature block when signed
- If acknowledged_by is set, show green filled sig-block with
  employee name, formatted acknowledgment date, and ✔ badge
- If not set, keep existing blank signature line behavior
- Supervisor block is always blank (wet signature required)
- Added .sig-filled, .sig-filled-badge, .sig-filled-name,
  .sig-filled-meta CSS classes
2026-03-07 21:11:48 -06:00

1 line
28 KiB
JavaScript
Executable File

Ly8gSW5saW5lIGJhc2U2NCBsb2dvIOKAlCBhdm9pZHMgUHVwcGV0ZWVyIG5lZWRpbmcgYSBsaXZlIEhUVFAgcmVxdWVzdCB0byAvc3RhdGljLwpjb25zdCBMT0dPX0I2NCA9ICdpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBR3NBQUFDYkNBWUFBQUJsTFdVVkFBQVFBRWxFUVZSNEFleGRDM0FXMVJXK2Y4Q2dRcXNpQ0xVVkxCakVLdUFEUkZCUXNDRGdZNnpBV0FxMkZpanRqRkw3dEZVY1J0dlJxZU5ZVzZZK1oyb1ZIT2lndENLUEZEQ2dTQXNJQ0FGSkVCVFJWRURlZ1lSSFh0ZHovbkNUL1RmN3VPZmMvZmZmVFhabkQzY2Y1M3puM08vZWMvZnMvNGNrVHlSYmJCZ2dEWmJjc2JoTjVZYU9NcEZnT0tET0VxM0JxdHhZOEZuRitndGtaZm05SjZWTWlVU0M0UUE1UlRuNThmaXBPZ1BuT1ZnSGkwZCtDOEZrYlhrWEhiQkVoOGRBelpGbE01Qm5QMnZYd1RxMjdnS1pYN1doVEVvQm1aUklHRHdnNThjMlh2R3UyNkE1RHRaUkdDZ1lJNUVJVEZKZ0xsUWVhdllOUnY3QmJaTzl5V0NWdjk5SkNuZ3VKWktDa2NxZEhOM1E3WkI5dERJR0t6MVFvQkhxVEVyOENVZStheXZQMjcvdHdhOEJQUTE3eG1DRnNTNG5QaUJoWVhSMGVEaWovTldqRFNNRkJ3MkRkV1J0WjRDQXRCZk5WZUxaci9weGdaR0NQVDFZY3UvTXRqQlN6dWtJU3NrOXlJWWM4Z0N1MDN0NnNJN3NlckFpR1NuZ0k2S3o4dkFhWFBXRVNBOVdVREdlZDkzZVZDS05ITFRwOFhyWG9MaUZxU1R5VGgxWTBWTkNxYzZWVm1kZjgxNTdHQ1FVQkV5a2tZR3oydy82SEhsQjRmS3I3QkExcjJMSEQwcnhnQ1BuRDlpVE9xZjNvc0VjMjVabWcxeTFhbmZsMDl4K3k0b3RuZklrNUNsSFRuVmQwSmJydUtYYW5kdXI4RGNjcnRIbTBOYlJKZkRNU2dGM2RMbnd3cjdId1REWmlReDBHTGdIeUlhZCtJb2theXZhc3pLcnc4RGQ2STBZWnFLdUdNQk00UWhrbG9KSTJyQVk2SGc5YjdKRFp1bDlrU1l0RldOWW5Xck9mcXg4Nmg3blFYMUJmaDl1emlTRzFUY083OGt5R05ib0JPQUhsa0g0M0F1R1dSSWtBTDh0SG9MQ3Q5S0Z6TUxDVGw4a1BMdGFQTk9CRUtEUHVZQXlIM2tuWjVaSXRrQVlrSVNWREhYUmFWSmdJQXM1RUJncmNtR1hKM0JaSTRoRTNSeDBydG01UkI0SmdyeVRNNnZaa1phakRsRXpDOE1rUDdNa2VrSEw1aXVoOUF4NXBBcFVnOVRZc0lxaDJpVDY1Z3lrQkdRVzllTW1rV3dCTUNEaGVVVVRVZisxZmdDK0U0Z1FHQ0FYR0RnYlFvaXIyYnZBUno5SklCUEpwWHV6WnpHc0RnTDVwTmNtaUF1ZVdjbG5nOEJENkx1RXRLSUtmUmtNdlZ2TjB5R01sYUFLbE80cFlJTXFZSkxzaGd4UU9VOWg2WjRzZ3lJSEczVUpSSDNJTEZxa2FPUnBrZHpNQ2dQSU94UVl0SmRpQWQrdGlHUXpaa0JDTlVnUkFid25CWWJJelVZdExsQWYzck1nV0R5aUNKZ2t1eUVERkw1UDZ5YVpaY2c1MS93MC82VHluZnpNd25XV0cyQmkxOGdBOGtnVmNqWFk2QzQ1Q3BzQnlLemtQU3RzMHRHZmhIV1FLcEJaOURkcGRKYUlLUU4wM3BNQ3c0QnpFMU5JTEZKeGdmcXNaVkJLQ1JscEVtckx0dDFXMkIwb3BEOSs0RDBMMGhIZXBnVkJQaW9zcUczWmRCdjJuc0MxZFZ4WXl5Q201TzR0Zjd6TU1PUVdhVjY2K0JLc0t3UnlTQlgyY2xaZTltcEppMlRib05NN2lnWjhZR0NPWDVIUVBzaVZrTUpLU2hZVnlOTEMzaFVtQWJRVVcrU3ErdVNCcXhSM25KYWRXWXBrV1hlaUxRYUNvcTRsYlQwREIzZStOaHg1UWFtL1l2WXZzeHAwcm1TMkxpeVEyUlN6cmpwYmYvbmhFOWRuSythOUpZOHRrZkJnQ2tyWUJRYkV3SHBJbXRnNTAyMTJkZit1ZjZ3eWlTbE1XMWJwTHVDNWxSTXhHeGRuNjF6MWhlRTNoNWtGU3luUVI1bVpXeGIwUUhXd0NtYi9jR0dQT2dTTWl3VDZ6QXBxYmZiQ0NXYVk2bEhxNmtUS3kxZlU3aGxYZy9YZER1L2ZBNSsrMFRNOGI5SHlCSm5GZjgrU3NPNkdMVjlzbnNiK0xXNVc2b3ZuWHdxZno4V3I3N0hMTEN2aExlMDRWZ1dHS2dUS052enlFdE9CVWxoeGFtTzNET0t5ZTZDc2NJZkpZRzE4czJmc2xrRHNON3huUWJmak5MMVVyQkEyZTFjWU1XdGp1UXdpeDZYTDczcUNPMWhvSDBlQkFnTytmQlEwa2JXeWo2bTA2ekN3dTVPY2MrSHd2d3VOZUU2VWx6NGtHRnZ4d212M0NRMTgxSEdLRDYrUisrN0FGK0pUQlo1WjhFa0NURE5Ka0d2R2ZMVFpWSG9NZW5tbmszVHZQMk95Yml5Q3NkVlVIZXVvZzMvMTkwcFRUdkhoTmRPK283MU9ESFlkeUN4R2o3TnMwckg3aEY0NkxrcUs3dnlmamw1ejBZSE1vcjhZWnJ2elhmcE0rMUJxdkhBZlA3SjlBQ1dXOWZPK0kzVnd6KzB5cmpjRmw2T3JFNGRkaDFWZ2NJS2oyc0NxTEhTRWdxdURoenJkKzA3ZlFzSGw2S0lmcXZCS2QwNTBSSnQrbzBzZzVjSElwMGNiMzdwdUoyanA3VDVZRGJOREQ4MU1TemNXaTE1a013dVpzTVRad0tQOVduWFYwVytqcnA5c21OOS91OTNXNmJ6Zm1CSXNqZjNnak84NytmYTdGc2xubG1MQ3ZtYTduU3Q5cjdhbXFxTEF6ZDU2M1FzanlIdFduN3JIa2F3R0ZTbjl4MjdWbXVWclg3OGNKNlV5YTdZdFpCYjlQU3RNTmlRTWc0NTR4YlJoNGRCZE9oaTZrOFBMbCs0OW5YanNPcEJaT0htcG9odVN1VjRxZFVhMTBQckVRYmh1MWNmM2RSV0dHQ0x3amNwNVNrUzZ3QkN3OVIrN0tSK1N5N1hBVVBkV3o3MENEOEdpNlk0My9DVFY2c3hRL3hDT1h6eE85eU8vRENMMTl1WEE3UngxN2JKbVhyOVNOMzNyOWY2ajE0ZjZKNmFzdm5XUEk3OE1Jdmw1cmRzZUU4eGxySzdtWkUrdXJjanF4bGtHSWQ5MFIxYnBaYlVQRHVEWGpWNzdkZVhicS8zdlAzdEJieklCdlBUVnZiUE91WFIxcGxYMno1UnZTZ3VabGYzQWN1V2hlT25kaTNSOFh6WGlqWUU2ZXJuV2ljVXpDMG5LUDdQekV6cXpFSFdWSER0WU1vcHFvMno5MnFPN1YzVHcwL0c2cnhPWFhRY3lpNzUyZWdXUnJYdjk3bHcyVFdnOHQxYk42VzFaQ3YzN2RuN1hVZU1GWTl2ODdnUDdHV1lXRS8vWWhLMi9PY21zemUvZXIvVjlsYkJ0OXBubWRvNW1Hd3Z2WHU1MjMzcjlzb0ZQemtaOXFpQUcxY2Fxai9aVXljbDcxcEV2Vm02MkJxNTdYSEQ1VSswd2JYeEZ5dnhqaDB1SCtPcnBPcmJwYlNxYWRBOWkyeTZUVHRHK3FjQ25TWURpZGgyK0lvRjBoQy82QkVVQTBHaEhYd3lBem4xdXFkU0o4NzNaVjU3UzBSczA3cTVXakRERTBiM3JaNmJ4T2NiS0Jqa2dTazR5QzJmT29iS1ZyRzlqMFRZb1NhVWVyVlBjVVZybG4ySmoxMVVZbEJZS0REdE1PT2RiVms0dDVuaTZjWHd4TEFVY3kyQnNWczdwOTFFd1NIUVVLREJTUWtJNlVvVHVKdE5DK2NxOHFuK203RTFhN3FEWDFWYjNVSDcxSTI2cXFUQW9iYzZXUVV6L1RVVlRoamZ0aHY4VnREVVZmeS9PR2xhL3pocDZWNjA0dXNkUVlBQzRycmJTQXhPai9UVE80ZDN2TCtIZ0RKbXdDWllEc0R5Tkk0aHRTdVN4ZmtQT2lsbFh5Z3hmd21BanhveCtjNXBaR0MrM3UyakxsWnNtZk5DYTQ5ZnVqNE9oYk94WU91YzVmV2JoZXYzRjl2bkRWQWNvTGRweWhlTEhxbXYzWjcxSFBiWmo2WnpuckJwVW5kdTI1dEdsNnBqUzN2ekRqYXlxc00zWm5UNmorRkc2UlRPdndzbXZUblBTUW1iQld6T0VJUWxpR3FuZEZ4ZlBqcU56ZnNPWS8xek04ZWVFemNGUk5rNTRmdGNnczNDQ1VrVzU1TGFaL2xhOWNkdlBPRWl0V3JmOVZOZys3UFEvRjh3dE0yYVI5aXNNTmljODcydVJ5S3dURmJ1ZjUvUjZ5UGhWM2Z4bW8vVitwNHVIUDhMeHMreVZxNlVWUngxenNKU053cUMwa0ZuS3ZQbTN2Vzc4MCtOeDdpVmtGcnl5NU9nVERHbngrOG5HRjMvQklmSzhUZ01lc09KNEhYUHdwWnpieWcyVGc2ZHMzREM5cnVmOFBRdnFHbnpmRXg5dmV1a1oxUkZLMjNma3N6TVVobGZicmU5OVhTaTRTbmZwSzAvV3VPRXFIVTdyaHVsMXZjVXNnNWYwbWxqR0lUVktOckFNNXI1MGx6Q2RVSmJQSHZZMGg1enJiMzMrRzJqdkpSemM0cUpwNDRMR1ZIRjQ0YnJkZzh6eUxoZEZ1a1MxNndqRHpZNVhmMTUxOHZDdk9NRHRMcmgycjNDTXN4NTN4TVFOZUNDbzI1N1Bsc0JYL21qcUpsUkVxNzRicHZ2MVNHVVd6aWhyZHlqSGFPc21GQnlycmh1dXVtN1ZwUjRyREVwcktUQmdPUVNQc0NLbEgvaGVMYWdaN1Y3WUh5eC9lQVlIZk1URWRXZTQ0WEx3MWkzNStldHVlT282QjFmWktBeEtDMStSUU5wQkNTMG9vanh5V3c5ZmUzY3VtOHFCVGFWU05VNTlHRFZwUFhTUWpyaS9iUFVZSjd5TWEzVFlSZ3NQRGpKOFdQUWlsMWs0MHhwN1JEdENXN3ZRRUJxMTdUaE81NDNhOUNNblBMOXJrWHRtNFJxKzdMVmI1dEc3TDhTdGs5ZGwvR2JPTm1lMjM4WEJXVHByK0E2TXcwODQyTXJHRDl2cFBsU0R5anc2N2FrVGgrNEtJcHJ2VGxpaTlaL0Q3YjZnS2pYK0ZYbDJ6Q0RPSWJPaThYR1RoTFhaS3R6T0JZMWh4Yk1mYzJORU96dVd6bmtrTXdzN3M3YndnYm5ZVXVYMktlK25DNHF1bDkzNUxOVVc5UmU4ZEMwK092QXdjZ0taQlNVN2hDY0pZdG9MSFY5ZmZyNTZMTmRQS2kvL1pPOUJEOS9Qc2RlSlRlbHc4SldOd3FDMGtGazRFYW1pWEhKYlhYODgvTnNtcnpxTFo0bFd1ckdoSHVwekJlMXBFdG5Nd2htMzZPV2hhN2hVZU5xNTNKei9Zbi9ITHhreGxpYmlncUY3dVFtZTM4b0d3SkY4ejRLNEJVcDFWV1YvaURHMFBVMGdlRVBmdm9JS29NdmQwWndrb0J6eFpSQ1hDUzRkTkR0SUtRWVhOQitaMnRnM21rUjZHY1NaL3M2OFNZV1puY3pPMlpzdkRLaEZmeFF4aVlUaVIrbkNiREp4bVgzYncvdTJqc2krbDNoNGdNeUs1a3V4dEx3a2gwR2wxWi91c1VsY3VqNnNlcEV1TU9DWm1pNDA1cjkwODNZVFl2eHMvL1hjQUtsODZiWittSDczZGYwb1BjU0RyMGlnVVZkMFd6QXgyblg5bk5hcnFUNWVZT1RQeDVnOFVoQlgyc1lIMS9NMllLUm5vbWFML21LUldkZ2Z6NDRiM0Z5elpQb3d4T2VJZ1Z2S09EWG94dUtaSmVINXRYVE9QYXovd09CSGFObU90NWNpUGtmOHNMM3VjL3h4cWtHdkdMSjJyL3pnSjZ6L0dwUzFnSElBREprVnpROXlKYXhMZGdtYW44MHIvemJkN29OeWJoSVB4WS9TaGN5aXZVV0w5STk4Q2NPTjR6TWwvdjNDOElPR2pqUE10eFhQZVV5ays4T0xSeGh0ZEoreEtUQWcwVVJWZFdWN0kzNXN4b2hwSWpZNDBpbkhieXhLOTRaeUNIdElvc1JkZWZHczd5L093RVZzcXJqRCs5K2grZ0o5ZUdaRi94TU1DZFdna2dXdmp0WDZIWUorYkIwOTlQK1JDcFBWK2pud3VVLzJDWGl4V2daaGNvbUtJM3RHUWR6R08ySVpDVXdna3lESXZzRWZGQmdtTHVOcE8rZXZOeUJYc1FzK2Rzc2dMaCtMWHZ2UmVoT21FY05jVENMQTF5WHE0MGVJV0daVytZR2QxNWhScFd2dHBaZnl1cG1GZXlrQm1ZV2pUQk5odUVsWWhFeUZHOExzdjl4WWJlcGIyWE5qUUR1RlFXbGpWMkRBT0tjcjdyblBqWHdMTzAyVk9sblhXbUdZdEZTL2RuMnFiN1NIOXl4SVo2ZzBCRVhRMGtRb3ZseDBxMDVXM3M0S3dRV1AxSC9Ba0NBcy84b0k3UW1DL21LYldUZ3pWYjkxMjFsL0hpelJMaWpSOWV1a3g0bUI5Y3lhK2ZSZ2FTTElXQkJDalNFSW4xWU1xbitydmhWSDV4Z0hQSmJWSUFiZTBnUUhGREtMV3U4bitoS2VOV0hMUlFVM1BaS1gzNlp0cUQraTNOSXlJcWorRHJuakQ0L25qWnU2ZUFEbllaZll3THNwakVSWVBJQ3Irazh3c3BYU0NXNXdqNHlHd2VwNjZkRDdSRmhUSlBGRFRza2YvL1lkZUJrVzlaazE5STdwenlVY2tqa01iWDVqVnFFMGxPNFhkZXMzU1JqOVBFSktpTVJlaUlBNW1QaGdmVllKMkJvR2E5aVlwMTZXa0Y2SlFJWkZpQWNZbzRhOVliRHd5cVRmcmNEMHdNTkVJc0NBZlR3eUJndmpRd1daZzVlK3hHZG01WWpqZ09OaGxTYURoVGNuLzM1NWttRklSSTdFalgvSHdjSVkwVUJHYU8xdUNiRjAvbWFmdWNnNzh1OGtyb09GeWo5NWFIa0tCY1lzdERJMXByNk0rVUdlYjd2bm1idVJkemZ4SEN4bE5BVUdEVVdjTGt0bDhrd2ovODB4TzJmSVpYNSsyOFBJSzRyUTJMUUdTK0ZNZWFnb2hmTFRoNHRTS0hEOTdVUUVpUVBrRFFWNXZQZlhDMGcvRHY0VjNaOWVYZ0FBQUFWSlJFRlVBQUFBLy8veXFrczJBQUFBQmtsRVFWUURBTDNYcXpuRFNqTzJBQUFBQUVsRlRrU3VRbUNDJzsKCmNvbnN0IFRJRVJTID0gWwogIHsgbWluOiAwLCAgbWF4OiA0LCAgIGxhYmVsOiAnVGllciAw4oCTMSDigJQgRWxpdGUgU3RhbmRpbmcnLCAgICAgICAgICBjb2xvcjogJyMxNmEzNGEnLCBiZzogJyNmMGZkZjQnIH0sCiAgeyBtaW46IDUsICBtYXg6IDksICAgbGFiZWw6ICdUaWVyIDEg4oCUIFJlYWxpZ25tZW50JywgICAgICAgICAgICAgICBjb2xvcjogJyM4NTRkMGUnLCBiZzogJyNmZWZjZTgnIH0sCiAgeyBtaW46IDEwLCBtYXg6IDE0LCAgbGFiZWw6ICdUaWVyIDIg4oCUIEFkbWluaXN0cmF0aXZlIExvY2tkb3duJywgICAgY29sb3I6ICcjYjQ1MzA5JywgYmc6ICcjZmZmN2VkJyB9LAogIHsgbWluOiAxNSwgbWF4OiAxOSwgIGxhYmVsOiAnVGllciAzIOKAlCBWZXJpZmljYXRpb24nLCAgICAgICAgICAgICAgY29sb3I6ICcjYzI0MTBjJywgYmc6ICcjZmZmN2VkJyB9LAogIHsgbWluOiAyMCwgbWF4OiAyNCwgIGxhYmVsOiAnVGllciA0IOKAlCBSaXNrIE1pdGlnYXRpb24nLCAgICAgICAgICAgY29sb3I6ICcjYjkxYzFjJywgYmc6ICcjZmVmMmYyJyB9LAogIHsgbWluOiAyNSwgbWF4OiAyOSwgIGxhYmVsOiAnVGllciA1IOKAlCBGaW5hbCBEZWNpc2lvbicsICAgICAgICAgICAgY29sb3I6ICcjOTkxYjFiJywgYmc6ICcjZmVmMmYyJyB9LAogIHsgbWluOiAzMCwgbWF4OiA5OTksIGxhYmVsOiAnVGllciA2IOKAlCBTZXBhcmF0aW9uJywgICAgICAgICAgICAgICAgY29sb3I6ICcjZmZmZmZmJywgYmc6ICcjN2YxZDFkJyB9LApdOwoKZnVuY3Rpb24gZ2V0VGllcihwdHMpIHsKICByZXR1cm4gVElFUlMuZmluZCh0ID0+IHB0cyA+PSB0Lm1pbiAmJiBwdHMgPD0gdC5tYXgpIHx8IFRJRVJTWzBdOwp9CgpmdW5jdGlvbiBmbXQoZCkgewogIGlmICghZCkgcmV0dXJuICfigJQnOwogIHJldHVybiBuZXcgRGF0ZShkICsgJ1QxMjowMDowMCcpLnRvTG9jYWxlRGF0ZVN0cmluZygnZW4tVVMnLCB7CiAgICB3ZWVrZGF5OiAnbG9uZycsIHllYXI6ICdudW1lcmljJywgbW9udGg6ICdsb25nJywgZGF5OiAnbnVtZXJpYycsCiAgICB0aW1lWm9uZTogJ0FtZXJpY2EvQ2hpY2FnbycsCiAgfSk7Cn0KCmZ1bmN0aW9uIGZtdERUKGQsIHQpIHsgcmV0dXJuIHQgPyBgJHtmbXQoZCl9IGF0ICR7dH1gIDogZm10KGQpOyB9CgpmdW5jdGlvbiBmaWVsZChsYWJlbCwgdmFsdWUpIHsKICBpZiAoIXZhbHVlKSByZXR1cm4gJyc7CiAgcmV0dXJuIGAKICAgIDxkaXYgY2xhc3M9ImZpZWxkIj4KICAgICAgPGRpdiBjbGFzcz0iZmllbGQtbGFiZWwiPiR7bGFiZWx9PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImZpZWxkLXZhbHVlIj4ke3ZhbHVlfTwvZGl2PgogICAgPC9kaXY+YDsKfQoKZnVuY3Rpb24gYnVpbGRIdG1sKHYsIHNjb3JlKSB7CiAgY29uc3QgcHJpb3JQdHMgID0gc2NvcmUuYWN0aXZlX3BvaW50cyAgfHwgMDsKICBjb25zdCBwcmlvclRpZXIgPSBnZXRUaWVyKHByaW9yUHRzKTsKICBjb25zdCBuZXdUb3RhbCAgPSBwcmlvclB0cyArIHYucG9pbnRzOwogIGNvbnN0IG5ld1RpZXIgICA9IGdldFRpZXIobmV3VG90YWwpOwogIGNvbnN0IGVzY2FsYXRlZCA9IHByaW9yVGllci5sYWJlbCAhPT0gbmV3VGllci5sYWJlbDsKICBjb25zdCBnZW5BdCAgICAgPSBuZXcgRGF0ZSgpLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHsKICAgIHRpbWVab25lOiAnQW1lcmljYS9DaGljYWdvJywgZGF0ZVN0eWxlOiAnZnVsbCcsIHRpbWVTdHlsZTogJ3Nob3J0JywKICB9KTsKICBjb25zdCBkb2NJZCA9IGBDUEFTLSR7di5pZC50b1N0cmluZygpLnBhZFN0YXJ0KDUsICcwJyl9YDsKCiAgcmV0dXJuIGA8IURPQ1RZUEUgaHRtbD4KPGh0bWwgbGFuZz0iZW4iPgo8aGVhZD4KPG1ldGEgY2hhcnNldD0iVVRGLTgiIC8+CjxzdHlsZT4KICAqIHsgYm94LXNpemluZzogYm9yZGVyLWJveDsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwOyB9CgogIGJvZHkgewogICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sICdTZWdvZSBVSScsIEFyaWFsLCBzYW5zLXNlcmlmOwogICAgZm9udC1zaXplOiAxM3B4OwogICAgY29sb3I6ICMxYTFhMmU7CiAgICBiYWNrZ3JvdW5kOiAjZmZmOwogICAgbGluZS1oZWlnaHQ6IDEuNTsKICB9CgogIC8qIOKUgOKUgCBIRUFERVIg4pSA4pSAICovCiAgLmhlYWRlciB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjMGEwYTBmIDAlLCAjMWExYTJlIDYwJSwgIzE2MjEzZSAxMDAlKTsKICAgIHBhZGRpbmc6IDI0cHggMzZweDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgYm9yZGVyLWJvdHRvbTogM3B4IHNvbGlkICNkNGFmMzc7CiAgfQogIC5oZWFkZXItbGVmdCB7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogMTZweDsgfQogIC5sb2dvIHsgaGVpZ2h0OiAzNnB4OyB9CiAgLmhlYWRlci10aXRsZSB7CiAgICBmb250LXNpemU6IDE4cHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgY29sb3I6ICNmZmZmZmY7CiAgICBsZXR0ZXItc3BhY2luZzogMC4zcHg7CiAgfQogIC5oZWFkZXItc3ViIHsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGNvbG9yOiAjOTRhM2I4OwogICAgbWFyZ2luLXRvcDogM3B4OwogICAgbGV0dGVyLXNwYWNpbmc6IDAuNXB4OwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICB9CiAgLmhlYWRlci1yaWdodCB7IHRleHQtYWxpZ246IHJpZ2h0OyB9CiAgLmRvYy1pZCB7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgY29sb3I6ICNkNGFmMzc7CiAgICBsZXR0ZXItc3BhY2luZzogMC41cHg7CiAgfQogIC5kb2MtbWV0YSB7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBjb2xvcjogIzY0NzQ4YjsKICAgIG1hcmdpbi10b3A6IDRweDsKICB9CgogIC8qIOKUgOKUgCBDT05GSURFTlRJQUwgQkFOTkVSIOKUgOKUgCAqLwogIC5jb25maWRlbnRpYWwtYmFyIHsKICAgIGJhY2tncm91bmQ6ICNmZWYyZjI7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2ZlY2FjYTsKICAgIHBhZGRpbmc6IDdweCAzNnB4OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGNvbG9yOiAjOTkxYjFiOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuOHB4OwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICB9CgogIC8qIOKUgOKUgCBCT0RZIFdSQVBQRVIg4pSA4pSAICovCiAgLmJvZHkgeyBwYWRkaW5nOiAyOHB4IDM2cHg7IH0KCiAgLyog4pSA4pSAIFNFQ1RJT04g4pSA4pSAICovCiAgLnNlY3Rpb24geyBtYXJnaW4tYm90dG9tOiAyNHB4OyB9CiAgLnNlY3Rpb24taGVhZGVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4OwogICAgbWFyZ2luLWJvdHRvbTogMTJweDsKICB9CiAgLnNlY3Rpb24tdGl0bGUgewogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBsZXR0ZXItc3BhY2luZzogMXB4OwogICAgY29sb3I6ICM2NDc0OGI7CiAgfQogIC5zZWN0aW9uLXJ1bGUgewogICAgZmxleDogMTsKICAgIGhlaWdodDogMXB4OwogICAgYmFja2dyb3VuZDogI2UyZThmMDsKICB9CgogIC8qIOKUgOKUgCBGSUVMRCBHUklEIOKUgOKUgCAqLwogIC5maWVsZC1ncmlkIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7CiAgICBnYXA6IDEycHggMzJweDsKICB9CiAgLmZpZWxkLWdyaWQuc2luZ2xlIHsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7IH0KICAuZmllbGQgeyBwYWRkaW5nOiAwOyB9CiAgLmZpZWxkLWxhYmVsIHsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuOHB4OwogICAgY29sb3I6ICM5NGEzYjg7CiAgICBtYXJnaW4tYm90dG9tOiAycHg7CiAgfQogIC5maWVsZC12YWx1ZSB7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBjb2xvcjogIzFlMjkzYjsKICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgfQogIC5maWVsZC12YWx1ZS5wcm9taW5lbnQgewogICAgZm9udC1zaXplOiAxNXB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGNvbG9yOiAjMGYxNzJhOwogIH0KCiAgLyog4pSA4pSAIERFVEFJTCBCT1gg4pSA4pSAICovCiAgLmRldGFpbC1ib3ggewogICAgYmFja2dyb3VuZDogI2Y4ZmFmYzsKICAgIGJvcmRlcjogMXB4IHNvbGlkICNlMmU4ZjA7CiAgICBib3JkZXItbGVmdDogNHB4IHNvbGlkICM2NjdlZWE7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBwYWRkaW5nOiAxNHB4IDE2cHg7CiAgICBtYXJnaW4tdG9wOiAxMnB4OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgY29sb3I6ICMzNzQxNTE7CiAgICBsaW5lLWhlaWdodDogMS42OwogIH0KICAuZGV0YWlsLWJveC1sYWJlbCB7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIGxldHRlci1zcGFjaW5nOiAwLjhweDsKICAgIGNvbG9yOiAjOTRhM2I4OwogICAgbWFyZ2luLWJvdHRvbTogNnB4OwogIH0KCiAgLyog4pSA4pSAIFNDT1JFIENBUkQg4pSA4pSAICovCiAgLnNjb3JlLWNhcmQgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDA7CiAgICBiYWNrZ3JvdW5kOiAjZjhmYWZjOwogICAgYm9yZGVyOiAxcHggc29saWQgI2UyZThmMDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgbWFyZ2luLXRvcDogNHB4OwogIH0KICAuc2NvcmUtY2VsbCB7CiAgICBmbGV4OiAxOwogICAgcGFkZGluZzogMThweCAxNnB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2UyZThmMDsKICB9CiAgLnNjb3JlLWNlbGw6bGFzdC1jaGlsZCB7IGJvcmRlci1yaWdodDogbm9uZTsgfQogIC5zY29yZS1jZWxsLm9wZXJhdG9yIHsKICAgIGZsZXg6IDAgMCA0OHB4OwogICAgZm9udC1zaXplOiAyNHB4OwogICAgZm9udC13ZWlnaHQ6IDIwMDsKICAgIGNvbG9yOiAjY2JkNWUxOwogIH0KICAuc2NvcmUtbnVtIHsKICAgIGZvbnQtc2l6ZTogMzJweDsKICAgIGZvbnQtd2VpZ2h0OiA4MDA7CiAgICBsaW5lLWhlaWdodDogMTsKICB9CiAgLnNjb3JlLWxhYmVsIHsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBsZXR0ZXItc3BhY2luZzogMC44cHg7CiAgICBjb2xvcjogIzk0YTNiODsKICAgIG1hcmdpbi10b3A6IDRweDsKICB9CiAgLnRpZXItYmFkZ2UgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgbWFyZ2luLXRvcDogOHB4OwogICAgcGFkZGluZzogM3B4IDEwcHg7CiAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgZm9udC1zaXplOiAxMHB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjNweDsKICB9CgogIC8qIOKUgOKUgCBQT0lOVFMgUElMTCDilIDilIAgKi8KICAucG9pbnRzLXBpbGwgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4OwogICAgYmFja2dyb3VuZDogI2ZmZmJlYjsKICAgIGJvcmRlcjogMnB4IHNvbGlkICNkNGFmMzc7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBwYWRkaW5nOiAxMnB4IDI0cHg7CiAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogIH0KICAucG9pbnRzLXBpbGwtbnVtIHsKICAgIGZvbnQtc2l6ZTogNDJweDsKICAgIGZvbnQtd2VpZ2h0OiA5MDA7CiAgICBjb2xvcjogI2Q0YWYzNzsKICAgIGxpbmUtaGVpZ2h0OiAxOwogIH0KICAucG9pbnRzLXBpbGwtbGFiZWwgewogICAgZm9udC1zaXplOiAxMnB4OwogICAgY29sb3I6ICM5MjQwMGU7CiAgICBsaW5lLWhlaWdodDogMS40OwogIH0KICAucG9pbnRzLXBpbGwtbGFiZWwgc3Ryb25nIHsgZGlzcGxheTogYmxvY2s7IGZvbnQtc2l6ZTogMTRweDsgfQoKICAvKiDilIDilIAgRVNDQUxBVElPTiBBTEVSVCDilIDilIAgKi8KICAuZXNjYWxhdGlvbi1hbGVydCB7CiAgICBiYWNrZ3JvdW5kOiAjZmVmOWMzOwogICAgYm9yZGVyOiAxLjVweCBzb2xpZCAjZWFiMzA4OwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgcGFkZGluZzogMTJweCAxNnB4OwogICAgbWFyZ2luLXRvcDogMTRweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGNvbG9yOiAjNzEzZjEyOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgfQogIC5lc2NhbGF0aW9uLWljb24geyBmb250LXNpemU6IDE4cHg7IH0KCiAgLyog4pSA4pSAIFRJRVIgVEFCTEUg4pSA4pSAICovCiAgLnRpZXItdGFibGUgeyB3aWR0aDogMTAwJTsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgfQogIC50aWVyLXRhYmxlIHRoIHsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBsZXR0ZXItc3BhY2luZzogMC44cHg7CiAgICBjb2xvcjogIzk0YTNiODsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjZTJlOGYwOwogIH0KICAudGllci10YWJsZSB0ZCB7CiAgICBwYWRkaW5nOiA3cHggMTJweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZjFmNWY5OwogIH0KICAudGllci10YWJsZSB0ci5jdXJyZW50LXRpZXIgdGQgewogICAgYmFja2dyb3VuZDogI2ZmZmJlYjsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgfQogIC50aWVyLWRvdCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB3aWR0aDogOHB4OyBoZWlnaHQ6IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgIG1hcmdpbi1yaWdodDogNnB4OwogICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICB9CgogIC8qIOKUgOKUgCBOT1RJQ0Ug4pSA4pSAICovCiAgLm5vdGljZSB7CiAgICBiYWNrZ3JvdW5kOiAjZWZmNmZmOwogICAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCAjM2I4MmY2OwogICAgYm9yZGVyLXJhZGl1czogMCA2cHggNnB4IDA7CiAgICBwYWRkaW5nOiAxMnB4IDE2cHg7CiAgICBmb250LXNpemU6IDExLjVweDsKICAgIGNvbG9yOiAjMWU0MGFmOwogICAgbGluZS1oZWlnaHQ6IDEuNjsKICB9CgogIC8qIOKUgOKUgCBTSUdOQVRVUkUg4pSA4pSAICovCiAgLnNpZy1pbnRybyB7CiAgICBmb250LXNpemU6IDExLjVweDsKICAgIGNvbG9yOiAjNDc1NTY5OwogICAgbGluZS1oZWlnaHQ6IDEuNzsKICAgIG1hcmdpbi1ib3R0b206IDI4cHg7CiAgfQogIC5zaWctZ3JpZCB7IGRpc3BsYXk6IGdyaWQ7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsgZ2FwOiA0OHB4OyB9CiAgLnNpZy1ibG9jayB7IH0KICAuc2lnLWxpbmUgewogICAgYm9yZGVyLWJvdHRvbTogMS41cHggc29saWQgIzMzNDE1NTsKICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgIG1pbi1oZWlnaHQ6IDUycHg7CiAgfQogIC5zaWctbGluZS1sYWJlbCB7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIGxldHRlci1zcGFjaW5nOiAwLjhweDsKICAgIGNvbG9yOiAjNjQ3NDhiOwogIH0KICAuc2lnLWRhdGUtbGluZSB7CiAgICBib3JkZXItYm90dG9tOiAxLjVweCBzb2xpZCAjMzM0MTU1OwogICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgbWFyZ2luLXRvcDogMjBweDsKICAgIG1pbi1oZWlnaHQ6IDM2cHg7CiAgfQoKICAvKiDilIDilIAgU0lHTkVEIEFDS05PV0xFREdNRU5UIOKUgOKUgCAqLwogIC5zaWctZmlsbGVkIHsKICAgIGJhY2tncm91bmQ6ICNmMGZkZjQ7CiAgICBib3JkZXI6IDEuNXB4IHNvbGlkICMxNmEzNGE7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBwYWRkaW5nOiAxNHB4IDE2cHg7CiAgfQogIC5zaWctZmlsbGVkLWJhZGdlIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGNvbG9yOiAjMTU4MDNkOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIGxldHRlci1zcGFjaW5nOiAwLjZweDsKICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgfQogIC5zaWctZmlsbGVkLW5hbWUgewogICAgZm9udC1zaXplOiAxNnB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGNvbG9yOiAjMTQ1MzJkOwogICAgbWFyZ2luLWJvdHRvbTogNHB4OwogIH0KICAuc2lnLWZpbGxlZC1tZXRhIHsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGNvbG9yOiAjNGI3YTVhOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIGxldHRlci1zcGFjaW5nOiAwLjZweDsKICB9CgogIC8qIOKUgOKUgCBGT09URVIgQkFSIOKUgOKUgCAqLwogIC5mb290ZXItYmFyIHsKICAgIG1hcmdpbi10b3A6IDMycHg7CiAgICBwYWRkaW5nOiAxMHB4IDAgMDsKICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZTJlOGYwOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgY29sb3I6ICM5NGEzYjg7CiAgICBkaXNwbGF5OiBmbGV4OwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogIH0KPC9zdHlsZT4KPC9oZWFkPgo8Ym9keT4KCjxkaXYgY2xhc3M9ImhlYWRlciI+CiAgPGRpdiBjbGFzcz0iaGVhZGVyLWxlZnQiPgogICAgPGltZyBzcmM9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwke0xPR09fQjY0fSIgY2xhc3M9ImxvZ28iIC8+CiAgICA8ZGl2PgogICAgICA8ZGl2IGNsYXNzPSJoZWFkZXItdGl0bGUiPkNQQVMgVmlvbGF0aW9uIFJlY29yZDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJoZWFkZXItc3ViIj5Db21wcmVoZW5zaXZlIFByb2Zlc3Npb25hbCBBY2NvdW50YWJpbGl0eSBTeXN0ZW08L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9ImhlYWRlci1yaWdodCI+CiAgICA8ZGl2IGNsYXNzPSJkb2MtaWQiPiR7ZG9jSWR9PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJkb2MtbWV0YSI+R2VuZXJhdGVkICR7Z2VuQXR9PC9kaXY+CiAgPC9kaXY+CjwvZGl2PgoKPGRpdiBjbGFzcz0iY29uZmlkZW50aWFsLWJhciI+4pqRIENvbmZpZGVudGlhbCDigJQgQXV0aG9yaXplZCBIUiAmYW1wOyBNYW5hZ2VtZW50IFVzZSBPbmx5PC9kaXY+Cgo8ZGl2IGNsYXNzPSJib2R5Ij4KCiAgPCEtLSBFbXBsb3llZSAtLT4KICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgIDxkaXYgY2xhc3M9InNlY3Rpb24taGVhZGVyIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+RW1wbG95ZWUgSW5mb3JtYXRpb248L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1ydWxlIj48L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iZmllbGQtZ3JpZCI+CiAgICAgIDxkaXYgY2xhc3M9ImZpZWxkIj4KICAgICAgICA8ZGl2IGNsYXNzPSJmaWVsZC1sYWJlbCI+RW1wbG95ZWUgTmFtZTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImZpZWxkLXZhbHVlIHByb21pbmVudCI+JHt2LmVtcGxveWVlX25hbWV9PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJmaWVsZCI+CiAgICAgICAgPGRpdiBjbGFzcz0iZmllbGQtbGFiZWwiPkRlcGFydG1lbnQ8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJmaWVsZC12YWx1ZSI+JHt2LmRlcGFydG1lbnQgfHwgJ+KAlCd9PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJmaWVsZCI+CiAgICAgICAgPGRpdiBjbGFzcz0iZmllbGQtbGFiZWwiPlN1cGVydmlzb3I8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJmaWVsZC12YWx1ZSI+JHt2LnN1cGVydmlzb3IgfHwgJ+KAlCd9PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJmaWVsZCI+CiAgICAgICAgPGRpdiBjbGFzcz0iZmllbGQtbGFiZWwiPldpdG5lc3MgLyBEb2N1bWVudGluZyBPZmZpY2VyPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZmllbGQtdmFsdWUiPiR7di53aXRuZXNzX25hbWUgfHwgJ+KAlCd9PC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC9kaXY+CgogIDwhLS0gVmlvbGF0aW9uIC0tPgogIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1oZWFkZXIiPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5WaW9sYXRpb24gRGV0YWlsczwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXJ1bGUiPjwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJmaWVsZC1ncmlkIj4KICAgICAgPGRpdiBjbGFzcz0iZmllbGQiPgogICAgICAgIDxkaXYgY2xhc3M9ImZpZWxkLWxhYmVsIj5WaW9sYXRpb248L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJmaWVsZC12YWx1ZSBwcm9taW5lbnQiPiR7di52aW9sYXRpb25fbmFtZX08L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImZpZWxkIj4KICAgICAgICA8ZGl2IGNsYXNzPSJmaWVsZC1sYWJlbCI+Q2F0ZWdvcnk8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJmaWVsZC12YWx1ZSI+JHt2LmNhdGVnb3J5fTwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iZmllbGQiPgogICAgICAgIDxkaXYgY2xhc3M9ImZpZWxkLWxhYmVsIj5JbmNpZGVudCBEYXRlIC8gVGltZTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImZpZWxkLXZhbHVlIj4ke2ZtdERUKHYuaW5jaWRlbnRfZGF0ZSwgdi5pbmNpZGVudF90aW1lKX08L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImZpZWxkIj4KICAgICAgICA8ZGl2IGNsYXNzPSJmaWVsZC1sYWJlbCI+U3VibWl0dGVkIEJ5PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZmllbGQtdmFsdWUiPiR7di5zdWJtaXR0ZWRfYnkgfHwgJ1N5c3RlbSd9PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICAke3YubG9jYXRpb24gPyBgCiAgICAgIDxkaXYgY2xhc3M9ImZpZWxkIiBzdHlsZT0iZ3JpZC1jb2x1bW46IDEgLyAtMTsiPgogICAgICAgIDxkaXYgY2xhc3M9ImZpZWxkLWxhYmVsIj5Mb2NhdGlvbiAvIENvbnRleHQ8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJmaWVsZC12YWx1ZSI+JHt2LmxvY2F0aW9ufTwvZGl2PgogICAgICA8L2Rpdj5gIDogJyd9CiAgICA8L2Rpdj4KICAgICR7di5kZXRhaWxzID8gYAogICAgPGRpdiBjbGFzcz0iZGV0YWlsLWJveCI+CiAgICAgIDxkaXYgY2xhc3M9ImRldGFpbC1ib3gtbGFiZWwiPkluY2lkZW50IE5vdGVzPC9kaXY+CiAgICAgICR7di5kZXRhaWxzfQogICAgPC9kaXY+YCA6ICcnfQogIDwvZGl2PgoKICA8IS0tIFBvaW50cyAtLT4KICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgIDxkaXYgY2xhc3M9InNlY3Rpb24taGVhZGVyIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+Q1BBUyBQb2ludCBBc3Nlc3NtZW50PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tcnVsZSI+PC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJwb2ludHMtcGlsbCI+CiAgICAgIDxkaXYgY2xhc3M9InBvaW50cy1waWxsLW51bSI+JHt2LnBvaW50c308L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0icG9pbnRzLXBpbGwtbGFiZWwiPgogICAgICAgIDxzdHJvbmc+UG9pbnRzIEFzc2Vzc2VkPC9zdHJvbmc+CiAgICAgICAgVGhpcyB2aW9sYXRpb24KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJzY29yZS1jYXJkIj4KICAgICAgPGRpdiBjbGFzcz0ic2NvcmUtY2VsbCI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2NvcmUtbnVtIiBzdHlsZT0iY29sb3I6JHtwcmlvclRpZXIuY29sb3J9OyI+JHtwcmlvclB0c308L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzY29yZS1sYWJlbCI+UHJpb3IgQWN0aXZlIFBvaW50czwvZGl2PgogICAgICAgIDxzcGFuIGNsYXNzPSJ0aWVyLWJhZGdlIiBzdHlsZT0iYmFja2dyb3VuZDoke3ByaW9yVGllci5iZ307IGNvbG9yOiR7cHJpb3JUaWVyLmNvbG9yfTsiPgogICAgICAgICAgJHtwcmlvclRpZXIubGFiZWx9CiAgICAgICAgPC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2NvcmUtY2VsbCBvcGVyYXRvciI+KzwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzY29yZS1jZWxsIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzY29yZS1udW0iIHN0eWxlPSJjb2xvcjojZDRhZjM3OyI+JHt2LnBvaW50c308L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzY29yZS1sYWJlbCI+VGhpcyBWaW9sYXRpb248L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNjb3JlLWNlbGwgb3BlcmF0b3IiPj08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2NvcmUtY2VsbCI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2NvcmUtbnVtIiBzdHlsZT0iY29sb3I6JHtuZXdUaWVyLmNvbG9yfTsiPiR7bmV3VG90YWx9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2NvcmUtbGFiZWwiPk5ldyBBY3RpdmUgVG90YWw8L2Rpdj4KICAgICAgICA8c3BhbiBjbGFzcz0idGllci1iYWRnZSIgc3R5bGU9ImJhY2tncm91bmQ6JHtuZXdUaWVyLmJnfTsgY29sb3I6JHtuZXdUaWVyLmNvbG9yfTsiPgogICAgICAgICAgJHtuZXdUaWVyLmxhYmVsfQogICAgICAgIDwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICAke2VzY2FsYXRlZCA/IGAKICAgIDxkaXYgY2xhc3M9ImVzY2FsYXRpb24tYWxlcnQiPgogICAgICA8c3BhbiBjbGFzcz0iZXNjYWxhdGlvbi1pY29uIj7imqA8L3NwYW4+CiAgICAgIDxkaXY+CiAgICAgICAgPHN0cm9uZz5UaWVyIEVzY2FsYXRpb246PC9zdHJvbmc+CiAgICAgICAgVGhpcyB2aW9sYXRpb24gYWR2YW5jZXMgdGhlIGVtcGxveWVlIGZyb20gPHN0cm9uZz4ke3ByaW9yVGllci5sYWJlbH08L3N0cm9uZz4KICAgICAgICB0byA8c3Ryb25nPiR7bmV3VGllci5sYWJlbH08L3N0cm9uZz4uCiAgICAgIDwvZGl2PgogICAgPC9kaXY+YCA6ICcnfQogIDwvZGl2PgoKICA8IS0tIFRpZXIgUmVmZXJlbmNlIC0tPgogIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1oZWFkZXIiPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5DUEFTIFRpZXIgUmVmZXJlbmNlPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tcnVsZSI+PC9kaXY+CiAgICA8L2Rpdj4KICAgIDx0YWJsZSBjbGFzcz0idGllci10YWJsZSI+CiAgICAgIDx0aGVhZD4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGg+UG9pbnRzPC90aD4KICAgICAgICAgIDx0aD5UaWVyICZhbXA7IFN0YW5kaW5nPC90aD4KICAgICAgICA8L3RyPgogICAgICA8L3RoZWFkPgogICAgICA8dGJvZHk+CiAgICAgICAgJHtUSUVSUy5tYXAodCA9PiB7CiAgICAgICAgICBjb25zdCBhY3RpdmUgPSBuZXdUb3RhbCA+PSB0Lm1pbiAmJiBuZXdUb3RhbCA8PSB0Lm1heDsKICAgICAgICAgIGNvbnN0IHJhbmdlICA9IHQubWluID09PSAzMCA/ICczMCsnIDogYCR7dC5taW594oCTJHt0Lm1heH1gOwogICAgICAgICAgcmV0dXJuIGA8dHIgY2xhc3M9IiR7YWN0aXZlID8gJ2N1cnJlbnQtdGllcicgOiAnJ30iPgogICAgICAgICAgICA8dGQ+JHthY3RpdmUgPyAn4pa2ICcgOiAnJ30ke3JhbmdlfTwvdGQ+CiAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGllci1kb3QiIHN0eWxlPSJiYWNrZ3JvdW5kOiR7dC5jb2xvciA9PT0gJyNmZmZmZmYnID8gdC5iZyA6IHQuY29sb3J9OyI+PC9zcGFuPgogICAgICAgICAgICAgICR7dC5sYWJlbH0KICAgICAgICAgICAgICAke2FjdGl2ZSA/ICc8c3Ryb25nPiDihpAgQ3VycmVudDwvc3Ryb25nPicgOiAnJ30KICAgICAgICAgICAgPC90ZD4KICAgICAgICAgIDwvdHI+YDsKICAgICAgICB9KS5qb2luKCcnKX0KICAgICAgPC90Ym9keT4KICAgIDwvdGFibGU+CiAgPC9kaXY+CgogIDwhLS0gTm90aWNlIC0tPgogIDxkaXYgY2xhc3M9Im5vdGljZSIgc3R5bGU9Im1hcmdpbi1ib3R0b206MjRweDsiPgogICAgPHN0cm9uZz5FbXBsb3llZSBOb3RpY2U6PC9zdHJvbmc+IENQQVMgcG9pbnRzIHJlbWFpbiBhY3RpdmUgZm9yIGEgcm9sbGluZyA5MC1kYXkgcGVyaW9kIGZyb20gdGhlIGRhdGUgb2YgZWFjaCBpbmNpZGVudC4KICAgIEFjY3VtdWxhdGlvbiBvZiBwb2ludHMgbWF5IHJlc3VsdCBpbiB0aWVyIGVzY2FsYXRpb24gYW5kIGFzc29jaWF0ZWQgY29uc2VxdWVuY2VzIGFzIG91dGxpbmVkIGluIHRoZSBFbXBsb3llZSBIYW5kYm9vay4KICAgIFRoZSBlbXBsb3llZSBtYXkgc3VibWl0IGEgd3JpdHRlbiByZXNwb25zZSB3aXRoaW4gNSBidXNpbmVzcyBkYXlzIG9mIHJlY2VpdmluZyB0aGlzIGRvY3VtZW50LgogIDwvZGl2PgoKICA8IS0tIFNpZ25hdHVyZXMgLS0+CiAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWhlYWRlciI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkFja25vd2xlZGdlbWVudCAmYW1wOyBTaWduYXR1cmVzPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tcnVsZSI+PC9kaXY+CiAgICA8L2Rpdj4KICAgIDxwIGNsYXNzPSJzaWctaW50cm8iPgogICAgICBCeSBzaWduaW5nIGJlbG93LCB0aGUgZW1wbG95ZWUgYWNrbm93bGVkZ2VzIHJlY2VpcHQgb2YgdGhpcyB2aW9sYXRpb24gcmVjb3JkLgogICAgICBBY2tub3dsZWRnZW1lbnQgZG9lcyBub3QgaW1wbHkgYWdyZWVtZW50IHdpdGggdGhlIHZpb2xhdGlvbiBhcyBkb2N1bWVudGVkLgogICAgPC9wPgogICAgPGRpdiBjbGFzcz0ic2lnLWdyaWQiPgogICAgICA8ZGl2IGNsYXNzPSJzaWctYmxvY2siPgogICAgICAgICR7di5hY2tub3dsZWRnZWRfYnkgPyBgCiAgICAgICAgPGRpdiBjbGFzcz0ic2lnLWZpbGxlZCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWctZmlsbGVkLWJhZGdlIj7inJQgQWNrbm93bGVkZ2VkPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWctZmlsbGVkLW5hbWUiPiR7di5hY2tub3dsZWRnZWRfYnl9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWctZmlsbGVkLW1ldGEiPlByaW50ZWQgTmFtZSAmbmJzcDvCtyZuYnNwOyAke3YuYWNrbm93bGVkZ2VkX2F0ID8gZm10KHYuYWNrbm93bGVkZ2VkX2F0KSA6ICdEYXRlIG5vdCByZWNvcmRlZCd9PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lnLWxpbmUtbGFiZWwiIHN0eWxlPSJtYXJnaW4tdG9wOjEwcHg7Ij5FbXBsb3llZSBBY2tub3dsZWRnbWVudDwvZGl2PgogICAgICAgIGAgOiBgCiAgICAgICAgPGRpdiBjbGFzcz0ic2lnLWxpbmUiPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZy1saW5lLWxhYmVsIj5FbXBsb3llZSBTaWduYXR1cmU8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWctZGF0ZS1saW5lIj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWctbGluZS1sYWJlbCI+RGF0ZTwvZGl2PgogICAgICAgIGB9CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzaWctYmxvY2siPgogICAgICAgIDxkaXYgY2xhc3M9InNpZy1saW5lIj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWctbGluZS1sYWJlbCI+U3VwZXJ2aXNvciAvIERvY3VtZW50aW5nIE9mZmljZXIgU2lnbmF0dXJlPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lnLWRhdGUtbGluZSI+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lnLWxpbmUtbGFiZWwiPkRhdGU8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KCiAgPGRpdiBjbGFzcz0iZm9vdGVyLWJhciI+CiAgICA8c3Bhbj4ke2RvY0lkfSAmbmJzcDvCtyZuYnNwOyAke3YuZW1wbG95ZWVfbmFtZX0gJm5ic3A7wrcmbmJzcDsgSW5jaWRlbnQ6ICR7di5pbmNpZGVudF9kYXRlfTwvc3Bhbj4KICAgIDxzcGFuPk1lc3NhZ2UgUG9pbnQgTWVkaWEg4oCUIEludGVybmFsIFVzZSBPbmx5PC9zcGFuPgogIDwvZGl2PgoKPC9kaXY+CjwvYm9keT4KPC9odG1sPmA7Cn0KCm1vZHVsZS5leHBvcnRzID0gYnVpbGRIdG1sOwo=