//
0x6080806040523461001657612218908161001c8239f35b600080fdfe608060408181526004918236101561001657600080fd5b600092833560e01c91826301ffc9a7146116415750816306661abd1461162257816306fdde03146115785781630754617214611543578163081812fc1461150e578163095ea7b31461135e578163136439dd146112a95781631c794b841461125157816323b872dd146112275781632becbd3e146111c2578163414000b51461110f57816342842e0e146110e65781634cd88b7614610ba35781636352211e14610b665781636a07973f14610aed5781636a627842146108ee57816370a0823114610837578163715018a6146107b75781637a3bc817146107185781638da5cb5b146106e357816395d89b41146105fe578163a22cb46514610525578163ab3d047f146104b7578163aeb4440614610455578163b88d4fde146103f0578163bdf2a43c14610393578163c87b56dd14610316578163e985e9c5146102bb578163f2fde38b14610201575063fca3b5aa1461016f57600080fd5b346101fd5760206003193601126101fd5760207f726b590ef91a8c76ad05bbe91a57ef84605276528f49cd47d787f558a4e755b69173ffffffffffffffffffffffffffffffffffffffff6101c161176e565b6101c9611916565b1690817fffffffffffffffffffffffff000000000000000000000000000000000000000060c954161760c95551908152a180f35b5080fd5b9050346102b75760206003193601126102b75761021c61176e565b91610225611916565b73ffffffffffffffffffffffffffffffffffffffff83161561024e578361024b8461197b565b80f35b906020608492519162461bcd60e51b8352820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152fd5b8280fd5b5050346101fd57806003193601126101fd5760ff816020936102db61176e565b6102e3611796565b73ffffffffffffffffffffffffffffffffffffffff9182168352609c875283832091168252855220549151911615158152f35b8383346101fd5760206003193601126101fd5761036261035d61038f9435600052609960205273ffffffffffffffffffffffffffffffffffffffff60406000205416151590565b6119e8565b81815161036e816117fb565b5280519161037b836117fb565b825251918291602083526020830190611710565b0390f35b9050346102b75760206003193601126102b7578160209360ff92356103de61035d82600052609960205273ffffffffffffffffffffffffffffffffffffffff60406000205416151590565b815260cd855220541690519015158152f35b8390346101fd5760806003193601126101fd5761040b61176e565b610413611796565b9060643567ffffffffffffffff811161045157366023820112156104515761024b93816024610447933693013591016118c1565b9160443591611b7d565b8480fd5b8284346104b45760206003193601126104b4578173ffffffffffffffffffffffffffffffffffffffff918261048861176e565b16815260ce60205220549061049e821515612086565b6104a782611a33565b8351928352166020820152f35b80fd5b9050346102b75760206003193601126102b7578160209373ffffffffffffffffffffffffffffffffffffffff923561051561035d82600052609960205273ffffffffffffffffffffffffffffffffffffffff60406000205416151590565b815260cc85522054169051908152f35b919050346102b757806003193601126102b75761054061176e565b90602435918215158093036104515773ffffffffffffffffffffffffffffffffffffffff16928333146105bc5750338452609c60205280842083855260205280842060ff1981541660ff8416179055519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a380f35b6020606492519162461bcd60e51b8352820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152fd5b5050346101fd57816003193601126101fd578051908260985461062081611a62565b808552916001918083169081156106bb575060011461065e575b50505061064c8261038f940383611846565b51918291602083526020830190611710565b9450609885527f2237a976fa961f5921fd19f2b03c925c725d77b20ce8f790c19709c03de4d8145b8286106106a35750505061064c82602061038f958201019461063a565b80546020878701810191909152909501948101610686565b61038f97508693506020925061064c94915060ff191682840152151560051b8201019461063a565b5050346101fd57816003193601126101fd5760209073ffffffffffffffffffffffffffffffffffffffff603354169051908152f35b839150346101fd57826003193601126101fd578035610735611796565b9161073f82611a33565b61076273ffffffffffffffffffffffffffffffffffffffff9182339116146121c0565b83161561077457509061024b9161211c565b606490602086519162461bcd60e51b8352820152600c60248201527f7a65726f206164647265737300000000000000000000000000000000000000006044820152fd5b83346104b457806003193601126104b4576107d0611916565b8073ffffffffffffffffffffffffffffffffffffffff6033547fffffffffffffffffffffffff00000000000000000000000000000000000000008116603355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b839150346101fd5760206003193601126101fd5773ffffffffffffffffffffffffffffffffffffffff61086861176e565b16908115610885576020848085858152609a845220549051908152f35b608490602085519162461bcd60e51b8352820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e657200000000000000000000000000000000000000000000006064820152fd5b919050346102b757602092836003193601126104b45761090c61176e565b9073ffffffffffffffffffffffffffffffffffffffff938460c954163303610aab5760ca546000198114610a7f57600101948560ca558316908115610a3e5750610a38929185859261098a61098483600052609960205273ffffffffffffffffffffffffffffffffffffffff60406000205416151590565b156120d1565b6109ba61098483600052609960205273ffffffffffffffffffffffffffffffffffffffff60406000205416151590565b808352609a89528383206001815401905581835260998952838320817fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055827fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a460cd875220600160ff198254161790558361211c565b51908152f35b606490878087519262461bcd60e51b845283015260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152fd5b6024836011847f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b6064908685519162461bcd60e51b8352820152600a60248201527f6e6f74206d696e746572000000000000000000000000000000000000000000006044820152fd5b9050346102b757816003193601126102b75760207f09e65b7abf1ac020ee57d85addfaffc3466fbaa144c58cf8d736f09de55820ab91359260243590610b52610b3586611a33565b73ffffffffffffffffffffffffffffffffffffffff1633146121c0565b84865260cb8352818187205551908152a280f35b8284346104b45760206003193601126104b4575073ffffffffffffffffffffffffffffffffffffffff610b9b60209335611a33565b915191168152f35b919050346102b757806003193601126102b75767ffffffffffffffff91803583811161045157610bd690369083016118f8565b926024358181116110e257610bee90369084016118f8565b9385549460ff8660081c1615938480956110d5575b80156110be575b1561105557600196858860ff198316178a55611027575b50610c3b60ff895460081c16610c3681612015565b612015565b610c443361197b565b610c5860ff895460081c16610c3681612015565b8251848111610ffb5780610c6d609754611a62565b94601f95868111610f8d575b50602090868311600114610ef1578b92610ee6575b5050600019828a1b9260031b1c1916176097555b8151938411610eba5750908291610cba609854611a62565b828111610e4a575b506020918311600114610dae578792610da3575b505060001982861b9260031b1c1916176098555b610cf2611916565b337fffffffffffffffffffffffff000000000000000000000000000000000000000060c954161760c9557f726b590ef91a8c76ad05bbe91a57ef84605276528f49cd47d787f558a4e755b660208351338152a1610d4d578280f35b7f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498916020917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff855416855551908152a138808280f35b015190503880610cd6565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe087941691609889527f2237a976fa961f5921fd19f2b03c925c725d77b20ce8f790c19709c03de4d81492895b818110610e3257508411610e19575b505050811b01609855610cea565b015160001960f88460031b161c19169055388080610e0b565b82840151855589969094019360209384019301610dfc565b90919250609888527f2237a976fa961f5921fd19f2b03c925c725d77b20ce8f790c19709c03de4d8148380860160051c82019260208710610eb1575b9186958a929594930160051c01915b828110610ea3575050610cc2565b8a8155869550899101610e95565b92508192610e86565b8760416024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b015190503880610c8e565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08b94169160978d527f354a83ed9988f79f6038d4c7a7dadbad8af32f4ad6df893e0e5807a1b1944ff9928d5b818110610f7557508411610f5c575b505050811b01609755610ca2565b015160001960f88460031b161c19169055388080610f4e565b8284015185558d969094019360209384019301610f3f565b90915060978b527f354a83ed9988f79f6038d4c7a7dadbad8af32f4ad6df893e0e5807a1b1944ff98680850160051c82019260208610610ff2575b918c91869594930160051c01915b828110610fe4575050610c79565b8d81558594508c9101610fd6565b92508192610fc8565b6024896041847f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661010117885538610c21565b608490602087519162461bcd60e51b8352820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152fd5b50303b158015610c0a5750600160ff881614610c0a565b50600160ff881610610c03565b8580fd5b5050346101fd5761024b906110fa366117b9565b91925192611107846117fb565b858452611b7d565b919050346102b75760206003193601126102b757813591611132610b3584611a33565b82845260cd60205260ff828520541615611180575081835260cd602052822060ff1981541690557fd5c12038aca4e36d3193c55c06f70eee8f829f1165a9e383c70b00d28e3bfdb98280a280f35b6020606492519162461bcd60e51b8352820152600f60248201527f616c7265616479206163746976656400000000000000000000000000000000006044820152fd5b8284346104b45760206003193601126104b4575073ffffffffffffffffffffffffffffffffffffffff610b9b6020933561122261035d82600052609960205273ffffffffffffffffffffffffffffffffffffffff60406000205416151590565b611a33565b83346104b45761024b611239366117b9565b9161124c6112478433611c13565b611b0c565b611cff565b9050346102b75760206003193601126102b75760209282913561129a61035d82600052609960205273ffffffffffffffffffffffffffffffffffffffff60406000205416151590565b815260cb845220549051908152f35b919050346102b75760206003193601126102b7578135916112cc610b3584611a33565b82845260cd60205260ff828520541661131c575081835260cd6020528220600160ff198254161790557f09c10a851184c6f4c4f912c821413d9b27d48061ecf90d270551f40a23131a888280a280f35b6020606492519162461bcd60e51b8352820152600e60248201527f616c7265616479207061757365640000000000000000000000000000000000006044820152fd5b9050346102b757816003193601126102b75761137861176e565b906024359273ffffffffffffffffffffffffffffffffffffffff91828061139e87611a33565b169416938085146114a557803314908115611486575b501561141e5750838552609b6020528420827fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556113f683611a33565b167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258480a480f35b6020608492519162461bcd60e51b8352820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152fd5b90508652609c60205281862033875260205260ff8287205416386113b4565b506020608492519162461bcd60e51b8352820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152fd5b8284346104b45760206003193601126104b4575073ffffffffffffffffffffffffffffffffffffffff610b9b60209335611ab5565b5050346101fd57816003193601126101fd5760209073ffffffffffffffffffffffffffffffffffffffff60c954169051908152f35b5050346101fd57816003193601126101fd578051908260975461159a81611a62565b808552916001918083169081156106bb57506001146115c55750505061064c8261038f940383611846565b9450609785527f354a83ed9988f79f6038d4c7a7dadbad8af32f4ad6df893e0e5807a1b1944ff95b82861061160a5750505061064c82602061038f958201019461063a565b805460208787018101919091529095019481016115ed565b5050346101fd57816003193601126101fd5760209060ca549051908152f35b8491346102b75760206003193601126102b757357fffffffff0000000000000000000000000000000000000000000000000000000081168091036102b757602092507f80ac58cd0000000000000000000000000000000000000000000000000000000081149081156116e6575b81156116bc575b5015158152f35b7f01ffc9a700000000000000000000000000000000000000000000000000000000915014836116b5565b7f5b5e139f00000000000000000000000000000000000000000000000000000000811491506116ae565b919082519283825260005b84811061175a5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b60208183018101518483018201520161171b565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361179157565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361179157565b60031960609101126117915773ffffffffffffffffffffffffffffffffffffffff90600435828116810361179157916024359081168103611791579060443590565b6020810190811067ffffffffffffffff82111761181757604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761181757604052565b67ffffffffffffffff811161181757601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926118cd82611887565b916118db6040519384611846565b829481845281830111611791578281602093846000960137010152565b9080601f8301121561179157816020611913933591016118c1565b90565b73ffffffffffffffffffffffffffffffffffffffff60335416330361193757565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b6033549073ffffffffffffffffffffffffffffffffffffffff80911691827fffffffffffffffffffffffff0000000000000000000000000000000000000000821617603355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b156119ef57565b606460405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152fd5b600052609960205273ffffffffffffffffffffffffffffffffffffffff604060002054166119138115156119e8565b90600182811c92168015611aab575b6020831014611a7c57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f1691611a71565b611ae561035d82600052609960205273ffffffffffffffffffffffffffffffffffffffff60406000205416151590565b600052609b60205273ffffffffffffffffffffffffffffffffffffffff6040600020541690565b15611b1357565b608460405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f766564000000000000000000000000000000000000006064820152fd5b90611ba1939291611b916112478433611c13565b611b9c838383611cff565b611e4b565b15611ba857565b60405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608490fd5b9073ffffffffffffffffffffffffffffffffffffffff8080611c3484611a33565b16931691838314938415611c67575b508315611c51575b50505090565b611c5d91929350611ab5565b1614388080611c4b565b909350600052609c60205260406000208260005260205260ff604060002054169238611c43565b15611c9557565b608460405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152fd5b90611d3491611d0d84611a33565b9173ffffffffffffffffffffffffffffffffffffffff938493848094169485911614611c8e565b16918215611de25781611d5191611d4a86611a33565b1614611c8e565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6000848152609b602052604081207fffffffffffffffffffffffff000000000000000000000000000000000000000090818154169055838252609a6020526040822060001981540190558482526040822060018154019055858252609960205284604083209182541617905580a4565b608460405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152fd5b9293600093909291803b1561200a57948491611ecc96604051809481937f150b7a02000000000000000000000000000000000000000000000000000000009788845233600485015273ffffffffffffffffffffffffffffffffffffffff80921660248501526044840152608060648401528260209b8c976084830190611710565b0393165af1849181611fb2575b50611f89575050503d600014611f81573d611ef381611887565b90611f016040519283611846565b81528091833d92013e5b80519182611f7e5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608490fd5b01fd5b506060611f0b565b7fffffffff00000000000000000000000000000000000000000000000000000000161492509050565b9091508581813d8311612003575b611fca8183611846565b8101031261045157517fffffffff0000000000000000000000000000000000000000000000000000000081168103610451579038611ed9565b503d611fc0565b505050915050600190565b1561201c57565b608460405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152fd5b1561208d57565b606460405162461bcd60e51b815260206004820152601060248201527f696e76616c6964206f70657261746f72000000000000000000000000000000006044820152fd5b156120d857565b606460405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152fd5b7f712369dba77e7931b9ec3bd57319108256b9f79ea5b5255122e3c0611742159373ffffffffffffffffffffffffffffffffffffffff8093169260009084825260ce60205261216f604083205415612086565b83825260cc60205260408220805490867fffffffffffffffffffffffff0000000000000000000000000000000000000000831617905516815260ce60205280604081205583815282604082205580a3565b156121c757565b606460405162461bcd60e51b815260206004820152600960248201527f6e6f74206f776e657200000000000000000000000000000000000000000000006044820152fdfea164736f6c6343000813000a